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?
debian
linux-kernel
virtual-memory
gsi-frank
quelle
quelle
Antworten:
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:
quelle
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.
quelle
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.
quelle
clflush
undclflushopt
Anweisungen.