Donanım (özellikle CPU'nun bir parçası olan MMU ) hangi sayfa boyutlarının mümkün olduğunu belirler. İşlemci kayıt büyüklüğü ile hiçbir ilişki yoktur ve yalnızca adres alanı boyutuyla dolaylı bir ilişki yoktur (MMU her ikisini de belirler).
Hemen hemen tüm mimariler 4kB sayfa boyutunu destekler. Bazı mimariler daha büyük sayfaları destekler (ve birkaçı da küçük sayfaları destekler), ancak 4kB çok yaygın bir varsayılandır.
Linux iki sayfa boyutunu destekler:
- Bazı mimariler diğer değerlere izin gerçi inanıyorum Normal büyüklükteki sayfalar, tüm mimariler üzerinde varsayılan olarak 4KB'den vardır, üzerinde örneğin 16kb ARM64 veya üzerinde 8KB, 16kb veya 64kB IA64 . Bunlar, MMU’daki en derin tanımlayıcı seviyelerine karşılık gelir (Linux’un PTE adını verdiği ).
- Derlenmişse, büyük sayfalar (
CONFIG_HUGETLB_PAGE
gerekli ve CONFIG_HUGETLBFS
çoğu kullanım için de gereklidir ). Bu, en derin ikinci MMU tanımlayıcı seviyesine karşılık gelir (Linux'un PMD dediği şey) (ya da en azından genellikle, tüm mimaride geçerli olup olmadığını bilmiyorum).
Sayfa boyutu, bellek kullanımı, bellek kullanımı ve hız arasında bir uzlaşmadır.
- Daha büyük sayfa boyutu, bir sayfanın kısmen kullanılması durumunda daha fazla atık anlamına gelir, bu nedenle sistem belleği daha erken bitirir.
- Daha derin bir MMU tanımlayıcı seviyesi, sayfa tabloları için daha fazla çekirdek belleği anlamına gelir.
- Daha derin bir MMU tanımlayıcı seviyesi, sayfa tablosu geçişinde harcanan daha fazla zaman demektir.
Daha büyük sayfa boyutlarındaki kazançlar çoğu uygulama için küçük, maliyet ise önemli. Bu nedenle çoğu sistem yalnızca normal boyutlu sayfalar kullanır.
Sisteminizde (normal) sayfa boyutunu sorgu getconf
veya C işleviyle sorgulayabilirsiniz sysconf
.
$ getconf PAGE_SIZE
4096
Çok büyük sayfalar kullanmak , hugetlbfs
dosya sistemini ve mmap
ping dosyalarını oraya yerleştirmeyi gerektirir .