Raspbian wechselt in den 64-Bit-Modus


52

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?


9
Ich habe einmal für eine Firma gearbeitet, die Software von 32bit auf 64bit OSF auf DEC / Alpha portiert hat (vor langer Zeit). Nur eine einfache Neukompilierung, da die Codebasis bereits 64-Bit-kompatibel war. 10% Leistungseinbußen aufgrund des zusätzlichen Speicherverbrauchs in ganzen Zahlen und Zeigern. Dies war in den Tagen, als die Leistung in dreistelligen MHz- und zweistelligen (möglicherweise niedrigen dreistelligen) Speichern gemessen wurde. Ohne 4 + GB RAM an Bord, nicht unbedingt eine gute Idee.
Chris K

6
64-Bit zahlt sich zunächst mit mehr Speicher als der Pi aus.
Thorbjørn Ravn Andersen

2
Auf x86-basierten Systemen hat die Schwierigkeit, dies zu entscheiden, sogar zu einem hybriden abi geführt: en.wikipedia.org/wiki/X32_ABI , das 32-Bit-Zeiger und 64-Bit-CPU-Register verwendet.
PlasmaHH

1
@ ChrisKaminski aber ARM und x86 sind unterschiedlich. Wenn sie von 32 auf 64 Bit gehen, verdoppeln sie die Anzahl der Register und entwerfen einige Aspekte des Befehlssatzes neu, die dazu führen, dass der Code in den meisten Fällen schneller ausgeführt wird. Sie können viele Benchmarks im Internet sehen
phuclv

@rsaxvc Also, was fügt das meinem Kommentar hinzu? Ich sagte "ARM und x86", um zu sagen, dass in diesen Architekturen 64-Bit die Leistung der Anwendung verbessert, im Gegensatz zu anderen Architekturen wie DEC / Alpha oder Sparc, MIPS ...
phuclv

Antworten:


62

Ist es nicht offensichtlich, dass es in jeder Hinsicht besser ist, das Betriebssystem mit 64 Bit zu betreiben, wenn der Prozessor 64 Bit hat?

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^32ohne 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 intin geändert wird int64_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 Filesund C:\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.


7
Angenommen, Sie sprechen über C und Freunde, bleibt die Größe eines beliebigen Typs <= int gleich. size_t und Zeiger nehmen an Größe zu, wie es im Linux-Adressmodell üblich ist. Außerdem fehlen Ihnen die Punkte des virtuellen Adressraums vollständig, was wichtig ist, wenn Sie speicherzugeordnete E / A ausführen.

3
Es ist nicht weiter fortgeschritten, zwischen physischem Speicher und virtuellem Speicher zu unterscheiden. Es ist auch nicht fortgeschritten, Fehlinformationen nicht zu verbreiten. sizeof(char)ist immer eins. Unter Linux sizeof(short), sizeof(int), sizeof(float), sizeof(double)ändern sich nicht mit Bitness. Das hat einen großen Unterschied in Ihren Ansprüchen.

11
Ich habe Probleme mit der Verwendung von x64in dieser Antwort. x64ist eine Abkürzung von x86-64. Dies ist NICHT gleichbedeutend mit "64 Bit". 64 bit ARM CPUs sind AArch64.
Oli

6

3
Sie haben den größten Grund verpasst, auf ein 64-Bit-Betriebssystem umzusteigen. 19. Januar 2038. 32-Bit-Linux kann nicht mit Daten umgehen, die nach dieser Zeit liegen. Das Update besteht seit einiger Zeit aus 64-Bit-Linux (und dem Aktualisieren von Software basierend auf der 32-Bit-Unix-Zeit). 2038 ist jetzt 20 Jahre entfernt, aber Raspberry Pi, eine kleine eingebettete Maschine, hat ein gewisses Potenzial, in der Zukunft so weit zu gehen. Auch 1980 hat niemand das Y2K-Problem ernst genommen.
Steve Sether

19

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.)


5
Obwohl AArch32 bereits über mehr Register als x86 verfügt, funktioniert AArch64 besser, da jetzt SP und PC getrennt sind. Vorher haben Sie höchstens 14 Allzweckregister. Sie haben auch einen besser konzipierten Befehlssatz. Gibt es einen Leistungsvorteil für ARM64- , 64-Bit-ARM- (Aarch64) -Anweisungen? Steigern Sie die Leistung um 15 bis 30% im Vergleich zu 32-Bit-ARM- (Aarch32)
-Anweisungen


Es wird interessant sein, Benchmarks auf dem Pi3 zu sehen (insbesondere bei realen Aufgaben).
Mattdm

6

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/vcMaterial 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.


1
raspbian.org/RaspbianFAQ#What_is_Raspbian.3F sagt (über Raspbian): Der Port ist notwendig, weil das offizielle Debian Wheezy Armhf-Release nur mit Versionen der ARM-Architektur kompatibel ist, die später als die auf dem Raspberry Pi (ARMv7-A-CPUs) verwendete Version verwendet werden und höher, gegen die Raspberry Pi ARMv6-CPU). Stimmt das noch mit dem RPi3?
Zundi

@ Sandy Ich denke, das ist 1) Relativ alt; 2) Verwirrt und / oder unkorrigiert seitdem, da Debian armhf mit hard float kompiliert ist, ist das, wofür die hf ist, im Gegensatz zu einem anderen Debian für ARMv4 / 5, von dem ich denke, dass es das erste war, das auf dem verwendet wurde, und das ISA nicht Harte Posen haben (ich glaube, bis zu einem bestimmten Zeitpunkt hatte keiner 6, aber das war die meiste Zeit so, auch bekannt als ARM1176JZ (F) -S). So ist es nur eine Version von Raspbian, Periode, ARMv6 mit Hardware Floating - Point - Unterstützung, der einzige Unterschied zwischen den A / B / + / 0 Modellen und 2 wird der Kernel verwendet, vermutlich so auch mit den 3
goldilocks

2
... "armel" ist das Nicht-HF-Debian, das vor Raspbian verwendet wurde.
Goldlöckchen

@sandy das sentance wurde in den tagen des pi1 geschrieben, also wenn es pi sagt, bedeutet es, was wir jetzt pi1 nennen würden. Es gibt Dritte, die debian armhf-Images für das pi2 (und vermutlich pi3) veröffentlichen, aber die rpf haben beschlossen, vorerst ein Image für alle Boards zu verwenden.
Peter Green

5

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.


Ich dachte, der Code wäre derselbe, aber der Compiler wäre dafür verantwortlich, den endgültigen Code zu optimieren, um die Vorteile der Architektur zu nutzen. Ist es relativ einfach einen Neubau zu machen? Sagen wir, um Debian in 64 Bit auszuführen?
Zundi

@sandy Easy hängt von Ihrem Können und Ihrer Erfahrung ab. Was ist der Anwendungsfall, der dies jetzt benötigt?
Steve Robillard

Keiner im Besonderen, nur um die Leistung des RPi3 zu maximieren.
Zundi

@sandy Die Stiftung hat gesagt, dass der Ersatz für den Pi3 nicht so schnell kommen wird, wie der Pi3 dem Pi2 folgte (ca. 1 Jahr). Sie können den 64-Bit-Switch für eine Leistungssteigerung verwenden, ohne dass neue Hardware erforderlich ist. Dies sind alles Spekulationen von meiner Seite.
Steve Robillard

4

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.


3

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:

  • Das Betriebssystem ist in der Lage, den virtuellen Adressraum in immer größere Abschnitte zu unterteilen, was eine einfachere Verwaltung gemeinsam genutzter Ressourcen, optimierte Kontextwechsel zwischen verschiedenen Berechtigungsebenen usw. ermöglicht.
  • Wenn Sie das Auslagern aktiviert haben, können Sie mehr und größere Prozesse ausführen und dabei die physischen Speichergrenzen überschreiten (dies gilt eigentlich auch für 32-Bit-Prozesse, aber weniger für 64-Bit-Prozesse).

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.


Vielleicht brauchen wir ein x32 ABI für ARM. Dann können wir kleine Zeiger und alle Register haben.
RSAXVC

2

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:

  • Wenn PHP Unix-Zeitstempel verarbeitet, legt die Ganzzahlgröße in einem 32-Bit-Bogen eine Obergrenze für Datumsangaben fest, sodass sie 2038 nicht über einen bestimmten Tag hinausgehen können . Ich gehe davon aus, dass dies ein Problem für alle Sprachen ist, die Zeitstempel verarbeiten. (Zum Glück sind die meisten Subsysteme für die Datumsverarbeitung, die keine Unix-Zeitstempel verwenden, wie z. B. DateTime von PHP, so konzipiert, dass sie auch auf älteren CPUs nicht durch dieses Problem eingeschränkt sind.)
  • 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 :

    Ab MongoDB 3.2 sind 32-Bit-Binärdateien veraltet und in zukünftigen Versionen nicht mehr verfügbar.

    Obwohl die 32-Bit-Builds für Linux und Windows existieren, sind sie für Produktionsbereitstellungen ungeeignet. 32-Bit-Builds unterstützen die WiredTiger-Speicher-Engine ebenfalls nicht.


Seltsamerweise hängt dies von Ihrer Plattform ab. Es ist normalerweise nicht die Ganzzahlgröße, sondern die Größe von time_t in der 'C'-Bibliothek. Sogar auf 32-Bit-Plattformen ist es möglich, ein 64-Bit-time_t mit etwas CPU-Zeitaufwand zu verwenden, aber viele 32-Bit-Plattformen tun dies noch nicht, da dies ein Binärkompatibilitätsproblem darstellt.
RSAXVC

@rsaxvc, interessant, danke. Könnte ich also durch Neukompilieren von PHP eine 64-Bit-Zeitverarbeitung erhalten, oder müsste auch die zugrunde liegende C-Bibliothek geändert werden? Ersteres würde in meiner Fähigkeit liegen, aber bei letzterem bin ich mir nicht sicher - ich überlegte, ob ich auch Ras [bian vollständig neu kompilieren könnte, aber es scheint (noch) keine einfachen Anweisungen zu geben, um dies zu tun.
halfer

Für Linux müssen Sie den Kernel, libc und Ihre Anwendung patchen. Das ist es wahrscheinlich nicht wert. Nach einigem Lesen ist OpenBSD (no on RPi) time_t seit 5.5 64-Bit. Unter 32-Bit-Windows mit Visual Studio 2005 oder neuer ist time_t 64-Bit.
RSAXVC

@rsaxvc: Okay, danke. Ich frage mich, ob es für mich Sinn macht, auf die Verfügbarkeit eines 64-Bit-Betriebssystems zu warten - es klang in einigen Nachrichtenartikeln von vor einigen Monaten unmittelbar bevorstehend ....:-)
halfer

-4

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):

HGFEDCBA
HGFEDCBA
HGFEDCBA

in 32 bits sieht es noch so aus:

ABCD
ABCD
ABCD

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:

for (i=0; i< img_length/4; i++) 
{ 
    address=shm_start+i; 
    for (c=0; c< 4; c++) 
    { 
        byte=((*address >> c) & 15) 
    } 
}

64bit:

for (i=-; i< img_length/8; i++) 
{ 
    address=shm_start+i; 
    for (c=7; c>=0; c--) 
    { 
        byte=((*address >> c) & 15) 
    } 
}

5
Endianness hat nichts mit der Wortgröße zu tun. In vielen Architekturen kann der Programmierer die Endianität auswählen, einschließlich ARM! Außerdem kann "64-Bit" je nach Architektur völlig unterschiedliche Folgen haben, und es ist schwierig, Architekturen zu vergleichen oder Ähnlichkeiten zwischen ihnen zu ziehen.
Bob

1
Ich glaube nicht, dass i = - gültig ist.
RSAXVC
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.