El hardware (específicamente, la MMU , que es parte de la CPU) determina qué tamaños de página son posibles. No hay relación con el tamaño del registro del procesador y solo una relación indirecta con el tamaño del espacio de direcciones (en que la MMU determina ambos).
Casi todas las arquitecturas admiten un tamaño de página de 4 KB. Algunas arquitecturas admiten páginas más grandes (y algunas también admiten páginas más pequeñas), pero 4kB es un valor predeterminado muy generalizado.
Linux admite dos tamaños de página:
- Páginas de tamaño normal, que creo que son 4kB por defecto en todas las arquitecturas, aunque algunas arquitecturas permiten otros valores, por ejemplo, 16kB en ARM64 u 8kB, 16kB o 64kB en IA64 . Estos corresponden al nivel más profundo de descriptores en la MMU (lo que Linux llama PTE ).
- Páginas enormes , si se compilan (
CONFIG_HUGETLB_PAGE
es necesario, y CONFIG_HUGETLBFS
también para la mayoría de los usos). Esto corresponde al segundo nivel más profundo de descriptores de MMU (lo que Linux llama PMD) (o al menos generalmente lo hace, no sé si esto se aplica a todas las arquitecturas).
El tamaño de la página es un compromiso entre el uso de la memoria, el uso de la memoria y la velocidad.
- Un tamaño de página más grande significa más desperdicio cuando una página se usa parcialmente, por lo que el sistema se queda sin memoria antes.
- Un nivel de descriptor MMU más profundo significa más memoria del núcleo para las tablas de páginas.
- Un nivel de descriptor MMU más profundo significa más tiempo dedicado al recorrido de la tabla de páginas.
Las ganancias de los tamaños de página más grandes son pequeñas para la mayoría de las aplicaciones, mientras que el costo es considerable. Es por eso que la mayoría de los sistemas usan solo páginas de tamaño normal.
Puede consultar el tamaño de página (normal) en el sistema con la getconf
utilidad o de la función C sysconf
.
$ getconf PAGE_SIZE
4096
El uso de páginas enormes requiere montar el hugetlbfs
sistema de archivos y hacer mmap
ping a los archivos allí.