Auf dieser Seite heißt es in der offiziellen RPi3-Ankündigung:
Sie benötigen ein aktuelles NOOBS- oder Raspbian-Image von unserer Downloadseite. Zum Start verwenden wir dasselbe 32-Bit-Raspbian-Userland, das wir auch für andere Raspberry Pi-Geräte verwenden. In den nächsten Monaten werden wir untersuchen, ob es sinnvoll ist, in den 64-Bit-Modus zu wechseln.
Meine Frage ist, dass der Prozessor 64 Bit hat. Ist es nicht offensichtlich, dass das Ausführen des Betriebssystems mit 64 Bit in jeder Hinsicht besser ist? Was vermisse ich?
raspbian
operating-systems
cpu
64-bit
zundi
quelle
quelle
Antworten:
Nein, eigentlich ist es nicht. In gewisser Weise ein 64 - Bit - Betriebssystem ausgeführt werden könnte verschlechtern die Leistung des Raspberry Pi.
Vorteile von 64 Bit :
Die beiden Hauptvorteile der Verwendung eines 64-Bit-Prozessors / Betriebssystems bestehen darin, dass das Gerät mehr als 4 GB RAM und von Haus aus ganze Zahlen verarbeiten kann, die größer sind als
2^32
ohne eine Bignum-Bibliothek.Der Raspberry Pi hat nicht mehr als 4 GB RAM. Bei 1 GB RAM haben Sie den ersten der beiden Hauptvorteile vollständig verloren. Was den zweiten Vorteil angeht, wie viel Prozent der Menschen verwenden tatsächlich genügend riesige Zahlen, sodass es für die Stiftung sinnvoll ist, ein ganzes zweites Betriebssystem zu unterstützen? So wie es ist, kann das RPi mithilfe von Softwaremethoden riesige Zahlen verwenden, aber es scheint, als müssten Sie ohnehin bessere Hardware verwenden, wenn Sie konsequent in diesem Bereich arbeiten möchten.
Probleme mit 64 bit :
Die Fähigkeit, eine größere Anzahl zu speichern, wird nicht von Zauberhand gewährt. Vielmehr muss die Größe der Speicherobjekte erhöht werden. In C (und C ++) bedeutet dies, dass ein
int
in geändert wirdint64_t
. Dies geschieht nicht automatisch, weshalb die Kommentare über die Stiftung keine zwei Zweige unterhalten wollen.Darüber hinaus bieten viele Anwendungen (für die meisten Benutzer) im 64-Bit-Modus keinen Vorteil. Beachten Sie, dass die meisten Webbrowser, MS Office und eine ganze Reihe anderer beliebter Software immer noch in 32-Bit-Form geliefert und gewartet werden. Natürlich können Sie eine 64-Bit-Version von MS Office in die Hände bekommen, aber diese wird nur selten verwendet.
Wenn die Anwendung / das Betriebssystem so geschrieben ist, dass sie / es eine 64-Bit-Architektur nutzt, verbraucht Ihre Anwendung mehr Speicher, weil Variablen und Zeiger mehr Speicherplatz beanspruchen. Normalerweise ist dies ein relativ kleiner Kompromiss für Maschinen, die von den Vorteilen profitieren. In unserem Fall haben wir sehr wenige Vorteile und sehr wenig RAM.
Beachten Sie auch :
Nur weil Sie auf einem 64-Bit-Computer ausgeführt werden, heißt das nicht, dass die Anwendung nicht als 32-Bit-Computer ausgeführt wird. Windows macht dies sehr deutlich, indem es zwei unterschiedliche Installationspfade hat,
C:\Program Files
undC:\Program Files (x86)
.Wird die Stiftung voraussichtlich 64-Bit-Unterstützung bieten? :
Wir sind zum selben Zeitpunkt zurück: "Einige Leute sehen vielleicht einen Nutzen, die meisten jedoch nicht." Sie werden sicherlich andere Projekte sehen, die 64-Bit-Builds anbieten, aber es sei denn, die Foundation bekommt viel unverdientes (imo) Flack, werden sie wahrscheinlich nicht (imo). Das Erstellen und Verwalten eines separaten 64-Bit-Zweigs ist kein kleines Unterfangen, und es scheint sich ehrlich gesagt einfach nicht zu lohnen.
quelle
sizeof(char)
ist immer eins. Unter Linuxsizeof(short)
,sizeof(int)
,sizeof(float)
,sizeof(double)
ändern sich nicht mit Bitness. Das hat einen großen Unterschied in Ihren Ansprüchen.x64
in dieser Antwort.x64
ist eine Abkürzung vonx86-64
. Dies ist NICHT gleichbedeutend mit "64 Bit". 64 bit ARM CPUs sindAArch64
.Es ist erwähnenswert, dass die Situation für ARM und Intel / AMD anders ist. Das liegt daran, dass der Wechsel zu x86_64 auch als Gelegenheit genutzt wurde, die stark veraltete Architektur zu aktualisieren, die im Grunde genommen durch nur 8 Universalregister lahmgelegt und im 64-Bit-Modus verdoppelt wurde. Wenn Sie ein Intel / AMD-System in den 64-Bit-Modus versetzen, müssen Sie auch echte Funktionen aktivieren, die die Leistung erheblich verbessern.
ARM hat dieses Problem zunächst nicht (obwohl AArch64 Register hinzufügt, für die die 32-Bit-Architekturen nicht ausgehungert sind), sodass die Vorteile im Grunde genommen mehr direkt adressierbarer Speicher und native Unterstützung für große Ganzzahlen sind - viel weniger ein großes Problem Deal, und vielleicht durch die Kehrseite (mehr Speicher für alles verwendet) entgegengewirkt.
(Abgesehen davon gab es aus diesem Grund einige Arbeiten beim Erstellen eines "x32" -Abi für Intel / AMD Linux , wobei die CPU-Verbesserungen beibehalten wurden, jedoch 32-Bit-Zeiger verwendet wurden.)
quelle
Ich bin sicher, es gibt bereits Leute, die Debian Aarch64 (ARMv8) auf dem Pi 3 ausführen. es wäre sicherlich nicht so schwer für viele Leute ( siehe hier für einige Hinweise, die möglicherweise funktionieren) 1, obwohl es für die meisten Benutzer wahrscheinlich ein bisschen anstrengend ist.
Wenn Raspbian und / oder die Foundation jedoch keine 64-Bit-Version herausbringen, werden Sie zunehmend Leute mit Blogs usw. sehen, die erklären, wie man einen ausführt und trotzdem die Goodies erhält, die Sie benötigen.
Es gibt jetzt eine Fedora aarch64-Version für den Pi 3.
1. Es wird einige Komplikationen mit dem 32-Bit-
/opt/vc
Material geben, ich bin nicht sicher, wie überwindbar das ist; Früher gab es 32-Bit-kompatible Bibliotheken für x86-64, aber Aarch64 ... vielleicht auch nicht.quelle
Als Teil der Veröffentlichungswerbung wurde erwähnt, dass ein Problem der Aufwand ist, der erforderlich ist, um zwei separate Codebasen (32- und 64-Bit) zu verwalten. Das Video zum Launch von Adafruit PI3 erwähnte auch, dass die Umstellung auf einen 64-Bit-Prozessor eher auf der Erhöhung der Taktrate des neuen Chips als auf der Verwendung des 64-Bit-Modus beruhte.
quelle
Die 64-Bit-Adressierung kann nützlich sein, auch wenn Sie nicht mehr als 1 GB Speicher haben.
Hiermit können Sie große Dateien im Speicher zuordnen, sodass Sie einen Zeiger haben und das Betriebssystem die E / A transparent ausführen kann. Nur eine andere Art, I / O zu machen. Für große Dateien benötigen Sie eine 64-Bit-Adressierung.
Ein weiteres Beispiel, das meines Erachtens nützlich sein kann, besteht darin, Prozessen mithilfe von Swap Space mehr als 2 GB Adressraum zuzuweisen. Ich hatte kürzlich ein Problem mit einem 32-Bit-NAS mit viel Speicher und einem beschädigten Dateisystem. Dem fsck-Prozess ging trotz aktivierter Caching-Optionen der Speicherplatz aus. Das Hinzufügen von Auslagerungsspeicher konnte das Problem nicht lösen, da der 32-Bit-Adressraum die harte Grenze darstellte. Es gab also keine Möglichkeit, fsck auf diesem großen beschädigten Dateisystem mit einer 32-Bit-Binärdatei auszuführen. Mit einer 64-Bit-Binärdatei und etwas Auslagerungsspeicher wäre es gelaufen.
quelle
Angesichts der Behauptung, dass die nativen 64-Bit-Programme größer sind (mehr Speicher für Daten und Zeiger) und dass ein 64-Bit-Betriebssystem im Vergleich zu einem 32-Bit-Betriebssystem unter ARMv8 mit weniger als 4 GB RAM keine nennenswerten Vorteile bietet, möchte ich einige hervorheben Punkte.
Es gibt einige signifikante Unterschiede in der Vorgehensweise in ARMv7 (und früher) und ARMv8, die die Ausführung von ARMv8 effizienter machen. Ein Teil davon stammt aus den breiteren internen Datenpfaden, ein anderer aus der Beseitigung von Sonderfällen und einer viel tieferen Pipeline. Dieselben Änderungen verbessern die Ausführung von ARMv7-Code (32-Bit) in ARMv8.
Native 64-Bit-Anwendungen verwenden 64-Bit-Zeiger, und 'size_t' ist 64-Bit, sodass Elemente, die diese verwenden, größer werden. Der Rest der Daten bleibt in der Regel gleich groß. Die Bedeutung ist jedoch für die Größe der ausführbaren Bilder von untergeordneter Bedeutung.
Wo 64-Bit-Native wirklich glänzt (wenn Sie sich nicht für große Ganzzahlen und Gleitkommazahlen interessieren), gibt es einen größeren virtuellen Adressraum:
Ob das Betriebssystem dies derzeit ausnutzt oder nicht, es wird einen Unterschied machen, wenn der Mainstream von 32 Bit abweicht.
Ich denke, das beste Argument für die Umstellung auf einen nativen 64-Bit-AArch64-Kernel ist die Portierbarkeit: Der Mainstream-Desktop ist auf 64-Bit-Prozessoren umgestiegen, und es gibt mehr Pakete, die 64-Bit-Code annehmen, und die Rückportierung dieses Codes auf 32-Bit ist schwieriger als Portierung von 32 auf 64 Bit. Im Benutzerbereich können Sie 32-Bit-Anwendungen und 64-Bit-Anwendungen nebeneinander ausführen, vorausgesetzt, Sie haben die Multi-Arch-Bibliotheken installiert, sodass keine Portierung von 32 auf 64-Bit erforderlich ist, wenn dies nicht der Fall ist Angelegenheit. Ein 64-Bit-Betriebssystem bietet Ihnen einfach die größere Auswahl an Software.
Ich sage nicht, dass die Herstellung eines 64-Bit-Kernels für den Raspberry PI 3 einfach ist - es gibt erhebliche Unterschiede, die Änderungen auf niedriger Ebene erfordern, nicht alle Gerätetreiber sind 64-Bit-sauber (insbesondere Treiber für ARM-spezifische GPUs). Es mag sein, dass Raspberian ein 32-Bit-Betriebssystem bleibt, aber ich glaube, dass es (auf lange Sicht) kurzsichtig ist.
Ein einzelnes Startmedium (z. B. SD-Karte) kann sowohl 64- als auch 32-Bit-Versionen des Betriebssystems enthalten, und die sekundäre Startsoftware (U-Boot, Arm-Boot und andere) kann bestimmen, welches Medium geladen werden soll. Der härtere Teil ist userland - das Dateisystem müsste mehrarchig sein, selbst auf 32-Bit-Systemen, auf denen das 64-Bit-Zeug unbrauchbar wird. Ich würde dies mit einem Skript oder Dienstprogramm ansprechen, das nach dem ersten Start ausgeführt werden kann, um nicht benötigte Bibliotheken und ausführbare Programme auf 32-Bit-Systemen zu entfernen.
quelle
Die vorhandenen Antworten decken die Probleme eines 64-Bit-Bogens sehr gut ab, aber ich sehe nicht viele der angegebenen Vorteile eines Upgrades. Also, hier sind zwei, die ich kürzlich entdeckt habe:
Mongo ist auf Datenbanken mit einer Größe von weniger als 2 GB beschränkt. 32-Bit-Builds werden bald nicht mehr unterstützt. Aus dem Handbuch :
quelle
:-)
Meine Gedanken dazu: Obwohl ich nicht genau weiß, wie ein ARM-Prozessor den Speicher adressiert, kann ich Ihnen dies anhand früherer Architekturen mit mehreren CPUs sagen, die ich programmiert habe (SPARC / Alpha / i386 / AMD64 / X86_64): bei Verwendung von Shared Memory und Adressierung Durch seinen "realen" virtuellen Adresszeiger ist die Verschiebung auf 64-Bit nicht trivial. Obwohl memcpy das tut, was es tun soll, müssen Sie berücksichtigen, dass die Daten in 64 Bit wie folgt gespeichert werden (Bit rückwärts):
in 32 bits sieht es noch so aus:
Wenn Sie also ein JPEG in 32 Bit im RAM speichern, können Sie die Header-Bytes lesen oder die Kantenerkennung problemlos linear durchführen *, indem Sie Byte für Byte vorwärts gehen. In einer 64-Bit-Architektur ändert sich Folgendes:
32bit:
64bit:
quelle