Аппаратное обеспечение (в частности, MMU , который является частью CPU) определяет возможные размеры страниц. Нет никакого отношения к размеру регистра процессора и только косвенное отношение к размеру адресного пространства (в этом 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
пинговать туда файлы.