Anda dapat mengetahui ukuran halaman default sistem dengan menanyakan konfigurasinya melalui getconf
perintah:
$ getconf PAGE_SIZE
4096
atau
$ getconf PAGESIZE
4096
CATATAN: Satuan di atas biasanya dalam byte, sehingga 4096 sama dengan 4096 byte atau 4 kB.
Ini tertanam dalam sumber kernel Linux di sini:
Contoh
$ 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))
Bagaimana pergeseran memberi Anda 4096?
Saat Anda menggeser bit, Anda melakukan perkalian biner dengan 2. Jadi efeknya adalah pergeseran bit ke kiri (1 << PAGE_SHIFT
) melakukan perkalian 2^12 =4096.
$ echo "2^12" | bc
4096
Perangkat keras (khususnya, MMU, yang merupakan bagian dari CPU) menentukan ukuran halaman yang memungkinkan. Tidak ada hubungan dengan ukuran register prosesor dan hanya hubungan tidak langsung dengan ukuran ruang alamat (di mana 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 default yang sangat umum.
Linux mendukung dua ukuran halaman:
- Halaman berukuran normal, yang menurut saya adalah 4kB secara default pada semua arsitektur, meskipun beberapa arsitektur mengizinkan nilai lain, mis. 16kB pada ARM64 atau 8kB, 16kB atau 64kB pada IA64. Ini sesuai dengan tingkat deskriptor terdalam di MMU (yang disebut Linux PTE).
- Halaman besar, jika dikompilasi dalam (
CONFIG_HUGETLB_PAGE
diperlukan, danCONFIG_HUGETLBFS
juga untuk sebagian besar penggunaan). Ini sesuai dengan deskriptor MMU level terdalam kedua (yang disebut Linux sebagai PMD) (atau setidaknya biasanya demikian, saya tidak tahu apakah ini berlaku untuk semua arsitektur).
Ukuran halaman merupakan kompromi antara penggunaan memori, penggunaan memori, dan kecepatan.
- Ukuran halaman yang lebih besar berarti lebih banyak pemborosan saat 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 dihabiskan dalam penjelajahan tabel halaman.
Keuntungan dari ukuran halaman yang lebih besar kecil untuk sebagian besar aplikasi, sedangkan biayanya besar. Inilah sebabnya kebanyakan sistem hanya menggunakan halaman berukuran normal.
Anda dapat menanyakan ukuran halaman (normal) pada sistem Anda dengan getconf
utilitas atau fungsi C sysconf
.
$ getconf PAGE_SIZE
4096
Menggunakan halaman besar membutuhkan pemasangan hugetlbfs
sistem file dan mmap
ping file di sana.