Sie können die Standardseitengröße eines Systems herausfinden, indem Sie seine Konfiguration über getconf
abfragen Befehl:
$ getconf PAGE_SIZE
4096
oder
$ getconf PAGESIZE
4096
HINWEIS: Die obigen Einheiten sind in der Regel in Byte, also entspricht 4096 4096 Byte oder 4 KB.
Dies ist hier im Quellcode des Linux-Kernels fest verdrahtet:
Beispiel
$ more /usr/src/kernels/3.13.9-100.fc19.x86_64/include/asm-generic/page.h
...
...
/* PAGE_SHIFT determines the page size */
#define PAGE_SHIFT 12
#ifdef __ASSEMBLY__
#define PAGE_SIZE (1 << PAGE_SHIFT)
#else
#define PAGE_SIZE (1UL << PAGE_SHIFT)
#endif
#define PAGE_MASK (~(PAGE_SIZE-1))
Wie ergibt das Schalten 4096?
Wenn Sie Bits verschieben, führen Sie eine binäre Multiplikation mit 2 durch. Also tatsächlich eine Verschiebung von Bits nach links (1 << PAGE_SHIFT
) macht die Multiplikation von 2^12 =4096.
$ echo "2^12" | bc
4096
Die Hardware (insbesondere die MMU, die Teil der CPU ist) bestimmt, welche Seitengrößen möglich sind. Es gibt keine Beziehung zur Prozessorregistergröße und nur eine indirekte Beziehung zur Adressraumgröße (indem die MMU beides bestimmt).
Fast alle Architekturen unterstützen eine Seitengröße von 4 KB. Einige Architekturen unterstützen größere Seiten (und einige unterstützen auch kleinere Seiten), aber 4 KB ist ein weit verbreiteter Standard.
Linux unterstützt zwei Seitengrößen:
- Normal große Seiten, die meiner Meinung nach standardmäßig auf allen Architekturen 4 KB groß sind, obwohl einige Architekturen andere Werte zulassen, z. 16kB auf ARM64 oder 8kB, 16kB oder 64kB auf IA64. Diese entsprechen der tiefsten Ebene der Deskriptoren auf der MMU (was Linux PTE nennt).
- Riesige Seiten, wenn einkompiliert (
CONFIG_HUGETLB_PAGE
erforderlich ist, undCONFIG_HUGETLBFS
auch für die meisten Anwendungen). Dies entspricht der zweittiefsten Ebene der MMU-Deskriptoren (was Linux PMD nennt) (oder tut es zumindest normalerweise, ich weiß nicht, ob dies für alle Architekturen gilt).
Die Seitengröße ist ein Kompromiss zwischen Speichernutzung, Speichernutzung und Geschwindigkeit.
- Eine größere Seitengröße bedeutet mehr Verschwendung, wenn eine Seite teilweise verwendet wird, sodass dem System früher der Arbeitsspeicher ausgeht.
- Eine tiefere MMU-Deskriptorebene bedeutet mehr Kernel-Speicher für Seitentabellen.
- Eine tiefere MMU-Deskriptorebene bedeutet, dass mehr Zeit mit dem Durchlaufen von Seitentabellen verbracht wird.
Die Vorteile größerer Seitengrößen sind für die meisten Anwendungen winzig, während die Kosten beträchtlich sind. Aus diesem Grund verwenden die meisten Systeme nur Seiten mit normaler Größe.
Mit dem getconf
können Sie die (normale) Seitengröße auf Ihrem System abfragen Dienstprogramm oder die C-Funktion sysconf
.
$ getconf PAGE_SIZE
4096
Um riesige Seiten zu verwenden, muss hugetlbfs
gemountet werden Dateisystem und mmap
ping-Dateien dort.