Апаратне забезпечення (конкретно MMU , що входить до процесора) визначає, які розміри сторінок можливі. Немає відношення до розміру регістру процесора і є лише непряме відношення до розміру адресного простору (в тому, що MMU визначає обидва).
Майже всі архітектури підтримують розмір сторінки в 4 КБ. Деякі архітектури підтримують більші сторінки (а деякі також підтримують менші сторінки), але 4 кБ є дуже поширеним за замовчуванням.
Linux підтримує два розміри сторінки:
- Сторінки звичайного розміру, які, на мою думку, за замовчуванням для всіх архітектур становлять 4 кБ , хоча деякі архітектури дозволяють отримати інші значення, наприклад, 16 кБ на ARM64 або 8 кБ, 16 кБ або 64 кБ на IA64 . Вони відповідають найглибшому рівню дескрипторів MMU (те, що Linux називає PTE ).
- Величезні сторінки , якщо вони зібрані (
CONFIG_HUGETLB_PAGE
необхідні, а CONFIG_HUGETLBFS
також для більшості застосувань). Це відповідає другому заглибленим рівнем дескрипторів MMU (те, що Linux називає PMD) (або, принаймні, зазвичай це робиться, я не знаю, чи це стосується всіх архітектур).
Розмір сторінки - це компроміс між використанням пам'яті, використанням пам'яті та швидкістю.
- Більший розмір сторінки означає більше витрат, коли сторінка частково використовується, тому система швидше втрачає пам'ять.
- Більш глибокий рівень дескриптора MMU означає більше пам'яті ядра для таблиць сторінок.
- Більш глибокий рівень дескриптора MMU означає більше часу, витраченого на обхід таблиці сторінок.
Приріст більших розмірів сторінок невеликий для більшості програм, тоді як вартість значна. Ось чому більшість систем використовують лише сторінки звичайного розміру.
Ви можете запитати (нормальний) розмір сторінки на вашій системі з getconf
утилітою або функції C sysconf
.
$ getconf PAGE_SIZE
4096
Використання величезних сторінок вимагає монтажу hugetlbfs
файлової системи та mmap
пінг-файлів там.