Warum erlaubt Debian Linux bis zu 128 TB virtuellen Adressraum pro Prozess, aber nur 64 TB physischen Speicher?

23

Ich habe gerade hier gelesen :

  • Bis zu 128 TB virtueller Adressraum pro Prozess (anstelle von 2 GB)
  • Unterstützung für 64-TB-physischen Speicher anstelle von 4-GB-Speicher (oder 64-GB-Speicher mit PAE-Erweiterung)

Warum das? Ich meine, die physische Speicherunterstützung wird vom Kernel oder von der aktuellen Hardware begrenzt?

Warum benötigen Sie den doppelten virtuellen Speicherplatz als den physischen Speicher, den Sie tatsächlich ansprechen können?

gsi-frank
quelle
Sie können auch Swap hinzufügen.
Thorbjørn Ravn Andersen
2
Das ist viel RAM ...
Dalearn
4
@ Dalearn - Sie wissen, als ich zum ersten Mal erfuhr, dass Sie bankvermittelte Speichererweiterung für 8-Bit-Mikros bekommen könnten, die sie auf 4096 KB haben, sagte ich genau das gleiche ...
Jules

Antworten:

35

Diese Grenzen kommen nicht von Debian oder Linux, sondern von der Hardware. Unterschiedliche Architekturen (Prozessor und Speicherbus) haben unterschiedliche Einschränkungen.

Auf aktuellen x86-64-PC-Prozessoren lässt die MMU 48 Bit virtuellen Adressraum zu . Dies bedeutet, dass der Adressraum auf 256 TB begrenzt ist. Mit einem Bit zur Unterscheidung von Kernel-Adressen von Userland-Adressen verbleiben 128 TB für den Adressraum eines Prozesses.

Auf aktuellen x86-64-Prozessoren können physische Adressen bis zu 48 Bit verwenden , was bedeutet, dass Sie bis zu 256 TB haben können. Das Limit ist seit der Einführung der amd64-Architektur schrittweise gestiegen (von 40 Bit, wenn ich mich richtig erinnere). Jedes Bit des Adressraums kostet etwas Verdrahtungs- und Decodierungslogik (was den Prozessor teurer, langsamer und heißer macht), so dass Hardware-Hersteller einen Anreiz haben, die Größe niedrig zu halten.

Linux lässt nur physische Adressen bis zu 2 ^ 46 zu (Sie können also nur bis zu 64 TB haben), da der physische Speicher vollständig im Kernelspeicher zugeordnet werden kann. Denken Sie daran, dass 48 Bit Adressraum vorhanden sind. Ein Bit für Kernel / Benutzer hinterlässt 47 Bit für den Kernel-Adressraum. Die Hälfte davon adressiert höchstens den physischen Speicher direkt und die andere Hälfte ermöglicht es dem Kernel, alles abzubilden, was er benötigt. (Linux kann physischen Speicher bewältigen, der nicht gleichzeitig vollständig zugeordnet werden kann, was jedoch zusätzliche Komplexität mit sich bringt. Dies geschieht also nur auf Plattformen, auf denen dies erforderlich ist, z. B. x86-32 mit PAE und armv7 mit LPAE.)

Es ist aus mehreren Gründen hilfreich, wenn der virtuelle Speicher größer ist als der physische Speicher:

  • Damit kann der Kernel den gesamten physischen Speicher abbilden und hat Platz für virtuelle Mappins.
  • Zusätzlich zu den Zuordnungen des physischen Speichers gibt es Zuordnungen von Auslagerungen, Dateien und Gerätetreibern.
  • Es ist nützlich, an bestimmten Stellen nicht zugeordneten Speicher zu haben: Schutzseiten zum Auffangen von Pufferüberläufen , große nicht zugeordnete Zonen aufgrund von ASLR usw.
Gilles 'SO - hör auf böse zu sein'
quelle
9
Die 46-Bit-Beschränkung des physischen Speichers hängt mit der Linux-Speicherzuordnung zusammen : Sie enthält eine vollständige Zuordnung des physischen Speichers im Kernel-Speicher, dh der physische Speicher kann nur einem Viertel des verfügbaren Adressraums entsprechen.
Stephen Kitt
Könnte jemand den @ StephenKitt-Kommentar erläutern? Ich bin sehr daran interessiert, das zu verstehen, aber selbst nachdem ich den von ihm zitierten Verweis gelesen habe, verstehe ich ihn nicht;)
gsi-frank
@ gsi-frank Es ist praktisch für den Kernel, den gesamten physischen Speicher permanent zuzuordnen. In einem 2 ^ 48-Adressraum gehen 2 ^ 47-Adressen an Userland-Adressen, 2 ^ 46-Adressen an Kernel-Adressen und 2 ^ 46-Adressen für die Adressierung des physischen Speichers.
Gilles 'SO- hör auf böse zu sein'
@ gsi-frank Wenn Sie ein Exemplar des klassischen Buches " Developing your own 32-bit Operating System " erwerben können, wird ausführlich darauf eingegangen, warum der Autor eine ähnliche Entscheidung für sein eigenes Betriebssystem getroffen hat (in diesem Fall Aufteilen des virtuellen 4GiB-Adressraums des 80386 in ein 2GiB-Kernelsegment, das eine physikalische 1GiB-RAM-Zuordnung und ein 2GiB-Benutzersegment enthält). Jeder, der sich für OS-Interna interessiert, sollte es wahrscheinlich lesen - es bietet ein vollständiges Design, das einfach genug ist, um es zu verstehen, aber fortgeschritten genug, um ein nützlicher OS-Kernel zu sein.
Jules
Seit Version 4.13 des Kernels können x86-64 (und einige andere Architekturen) mit Pagetables mit fünf Ebenen erstellt werden , wodurch der Adressraum auf x86-64 für physischen RAM auf 52 Bit und für virtuellen RAM auf 57 Bit erhöht wird (4 PiB / 128 PiB). Beachten Sie, dass die Speicherzuordnung im Kernel-Space Sicherheitsprobleme mit sich bringt, die sich in naher Zukunft ändern können.
Stephen Kitt
9

Ich weiß nicht warum, aber ich kann mir sieben Gründe vorstellen, warum es nützlich wäre, doppelt so viel Adressraum wie physischen Speicher zu unterstützen.

  1. Das erste ist, damit Sie Anwendungen ausführen können, die zusätzlichen Speicher benötigen - auch wenn dies das Auslagern auf die Festplatte bedeutet.
  2. Sauberere Speicherlayouts für die Partitionierung des Speichers. Beispielsweise kann ein Betriebssystem höher nummerierte Adressen verwenden und für Anwendungen niedrig nummerierte Adressen belassen, um die Trennung sauberer zu gestalten.
  3. Die Adressraum-Layout-Randomisierung ist etwas effektiver.
  4. Wenn Sie Seiten als ausführbar markieren, bleibt möglicherweise noch Speicherplatz übrig.
  5. Speicherabgebildete E / A.
  6. Die Speicherzuweisung ist einfacher: Sie können größere Blöcke gleichzeitig zuweisen.
  7. Reduzierte Speicherfragmentierung
lungj
quelle
1
Vielen Dank! 1) ist so offensichtlich und grundlegend, dass ich mich für die Frage
schäme
2
(3) ist auch wirklich wichtig. Sie möchten wirklich einen virtuellen Adressraum, der um Größenordnungen größer ist als die Menge an Speicher, die Sie zuweisen, so dass zufällige Vermutungen mit ziemlicher Sicherheit zu Überfüllungen führen.
R ..
6

Das sind Hardware-Einschränkungen. Die aktuelle x86_64 / amd64-Hardware ermöglicht virtuelle 48-Bit-Adressen und verschiedene Größen (abhängig von der Implementierung, z. B. unterstützt meine Workstation hier nur 36-Bit-Adressen). Der Linux-Kernel teilt den virtuellen Adressraum in zwei Hälften auf (wobei die Hälfte für den Kernel und die Hälfte für den Benutzerbereich verwendet wird - genau wie bei x86).

So erhalten Sie:

2 Bytes ÷ 2 = 2 Bytes = 128 TiB

Die physische Adressgröße ist häufig kleiner, weil sie tatsächlich physisch ist. Es nimmt Pins / Pads, Transistoren, Verbindungen usw. auf / in der CPU auf und verfolgt Leitungen auf der Platine. Wahrscheinlich auch das gleiche bei den Chipsätzen. Es macht keinen Sinn, eine Menge RAM zu unterstützen, die über die Lebensdauer des Prozessorkerns oder des Sockels nicht denkbar ist - all diese Dinge kosten Geld. (Auch mit jeweils 32 DIMM-Steckplätzen und 64-GB-DIMMs sind Sie nur bei 2 TB. Selbst wenn sich die DIMM-Kapazität jährlich verdoppelt, sind wir 5 Jahre von 64 TB entfernt.

Wie Peter Cordes hervorhebt, schließen die Leute jetzt nichtflüchtigen Speicher wie 3D XPoint an den Speicherbus an, wodurch der Adressraum knapp wird. Neuere Prozessoren haben den physischen Adressraum auf 48 Bit erweitert. Möglicherweise wurde das Debian-Wiki noch nicht aktualisiert.

derobert
quelle
Ein nichtflüchtiger Speicher, der direkt an den Speicherbus angeschlossen ist (z. B. 3D XPoint), wird immer beliebter. Dies könnte den Bedarf an physischem Adressraum in den nächsten Jahren erheblich erhöhen (da er dichter als DRAM ist und es nützlich ist, eine Schiffsladung davon zu haben In mehr Fällen als sinnvoll ist es, eine Schiffsladung RAM zu haben. Siehe zdnet.com/article/the-non-volatile-memory-revolution für einen nicht sehr technischen Artikel (oder google für bessere Sachen). Intel Skylake unterstützt es mit seinen clflushund clflushoptAnweisungen.
Peter Cordes
1
Sie können bereits Systeme mit bis zu 12 TB RAM in 96 Steckplätzen kaufen ( z. B. das 4-Socket-HPC-System von Tyan ), sodass 64 TB möglicherweise weniger als fünf Jahre entfernt sind. Und manche Leute kaufen sie und statten sie mit so viel RAM aus ...
Stephen Kitt
@StephenKitt hmm, es ist in Ordnung, weil die DIMM-Kapazität näher an 3 Jahren zum Verdoppeln benötigt
derobert
Es stellt sich heraus, dass Sie derzeit Systeme mit 64 TiB RAM kaufen können .
Stephen Kitt