Perangkat keras (khususnya, MMU , yang merupakan bagian dari CPU) menentukan ukuran halaman apa yang mungkin. Tidak ada hubungan dengan ukuran register prosesor dan hanya hubungan tidak langsung dengan ukuran ruang alamat (dalam hal MMU menentukan keduanya).
Hampir semua arsitektur mendukung ukuran halaman 4kB. Beberapa arsitektur mendukung halaman yang lebih besar (dan beberapa juga mendukung halaman yang lebih kecil), tetapi 4kB adalah standar yang sangat luas.
Linux mendukung dua ukuran halaman:
- Halaman berukuran normal, yang saya percaya adalah 4kB secara default pada semua arsitektur, meskipun beberapa arsitektur memungkinkan nilai-nilai lain, misalnya 16kB pada ARM64 atau 8kB, 16kB atau 64kB pada IA64 . Ini sesuai dengan level deskriptor terdalam pada MMU (apa yang disebut Linux PTE ).
- Halaman besar , jika dikompilasi (
CONFIG_HUGETLB_PAGE
diperlukan, dan CONFIG_HUGETLBFS
juga untuk sebagian besar kegunaan). Ini sesuai dengan level terdalam kedua dari deskriptor MMU (apa yang disebut Linux PMD) (atau setidaknya biasanya, saya tidak tahu apakah ini berlaku pada semua arsitektur).
Ukuran halaman adalah kompromi antara penggunaan memori, penggunaan memori dan kecepatan.
- Ukuran halaman yang lebih besar berarti lebih banyak pemborosan ketika halaman digunakan sebagian, sehingga sistem kehabisan memori lebih cepat.
- Level deskriptor MMU yang lebih dalam berarti lebih banyak memori kernel untuk tabel halaman.
- Level deskriptor MMU yang lebih dalam berarti lebih banyak waktu yang dihabiskan dalam traversal tabel halaman.
Keuntungan ukuran halaman yang lebih besar kecil untuk sebagian besar aplikasi, sedangkan biayanya sangat besar. Inilah sebabnya mengapa sebagian besar sistem hanya menggunakan halaman berukuran normal.
Anda dapat query (normal) ukuran halaman di sistem anda dengan getconf
utilitas atau fungsi C sysconf
.
$ getconf PAGE_SIZE
4096
Menggunakan halaman besar membutuhkan pemasangan sistem hugetlbfs
file dan mmap
ping file di sana.