Menü
Avatar von die kleine Himbeere
  • die kleine Himbeere

mehr als 1000 Beiträge seit 25.10.2012

Ich ziehe eine Mischung vor

Auf meinem Rechner läuft ein 64-Bit Kernel mit einem 32-Bit Userland.

Das ist effizienter, wenn man keine Applikationen benutzt die mehr als rund 2 GB Speicher innerhalb des Prozesses verwenden.

Es gab einmal einen Vergleich zwischen 32- und 64-Bit Applikationen den ich irgendwo in einem Artikel über das damals neue x32-ABI von Linux las, und wo das Ergebnis war dass x32-Applikationen bis zu 20 % schneller als reine 64-Bit Applikationen waren.

Das lässt sich zwar nur bedingt auf das x86-32 ABI umlegen da dieses nur halb so viele CPU-Register zur Verfügung stellt und vor allem deshalb Performance-Nachteile hat.

Aber es zeigt, dass 64-Bit Code 32-Bit Code in einem fairen Vergleich (x32 hat gleich viele CPU Register wie amd64) unterlegen ist, soweit das entsprechende Programm mit 2-3 GB RAM (ja nach Kernel Konfiguration) auskommt.

Eigentlich ist es ja klar dass 64 Bit ineffizienter sein muss wo 32 Bit ebenso für eine Aufgabe ausreichen würden:

* Sowohl Pointer als auch Speicherlängen-Angaben belegen unter 64 Bit doppelt so viel RAM

* Es müssen daher auch mehr Daten zwischen der CPU und dem Speicher hin- und her geschoben werden

* Die CPU-Caches werden weniger effektiv genutzt, da längere Einträge weniger Einträge im Cache bedeuten welche dort Platz finden

* Die zusätzlichen 32 Bit bedeuten auch entsprechend breitete Datenbusse in der CPU, breitere Register, alles in allem mehr Transistoren. Dies wiederum bedeutet mehr Stromverbrauch für dieselbe Arbeit

Man sollte 64 Bit daher nicht mutwillig einsetzen wo es gar nicht gebraucht wird, sondern nur dort wo es auch echte Vorteile bringt.

Das wären vor allem moderne 3D-Spiele oder grafikintensive Anwendungen die viel Speicher verbrauchen.

"Normale" Anwendungen brauchen in der Regel aber deutlich weniger RAM; da kommt man mit einem 32-Bit System besser weg.

Das gilt auch für Datenbank-Anwendungen, wenn man dabei nicht gerade eine in-memory-Datenbank wie MongoDB einsetzt. Denn auch eine kleine 32-Bit Applikation kann riesige Datenmengen in einer Datenbank verwalten.

Zumal es auch nicht stimmt, wie einige Leute glauben, dass ein 32-Bit-System nur "bis zu 4 GB Speicher" verwenden kann.

Diese Limits gelten tatsächlich nur *pro Prozess*.

Es macht daher durchaus Sinn, ein System das 8 GB RAM hat mit 32 Bit laufen zu lassen, wenn kein einzelner Prozess mehr als 2-3 GB RAM verbraucht.

Dadurch dass aber viele solcher Prozesse gleichzeitig laufen können, kann der Speicher immer noch sinnvoll genutzt werden.

Klar, *irgendwann* wird das Byte-Zählen lächerlich.

Wer 32 GB RAM hat, der hat so viel RAM dass es ihm egal sein kann ob dieser nun optimal genutzt wird oder nicht. 64 Bit verwenden und alle weiteren Überlegungen abhaken.

Aber gerade wenn man nur knapp mehr als 4 GB RAM hat, lohnt sich die Überlegung ob man nicht besser immer noch 32 Bit verwenden sollte.

Die von mir gewählte Variante ist ein Kompromiss: Das Kernel tut sich durch 64 Bit leichter, die Prozessräume von Benutzerprozessen in den Kernel-Adressraum einzublenden, da dieser dann groß genug ist. Und zwar ohne dauernd "Bank Switching" mittels Umprogrammierung der MMU betreiben zu müssen.

Die 32-Bit Benutzerprozesse hingegen profitieren von den kurzen Pointervariablen und Speicherlängen-Variablen.

So ein System einzurichten ist simpel: Man installiert sich eine 32-Bit Linux Distro, aber wählt ein Paket wie linux-image-*-amd64 als Kernel aus.

So bekommt man das beste zweier Welten, zumindest soweit man wie ich keine Programme verwendet die von echten 64 Bit in besonderer Weise profitieren würden.

Bewerten
- +
Anzeige