Intel 5-уровневая страничная организация , называемая просто 5-уровневой страничной организацией в документах Intel , является расширением процессора для линейки процессоров x86-64 . [1] : 11 Оно расширяет размер виртуальных адресов с 48 бит до 57 бит путем добавления дополнительного уровня к многоуровневым таблицам страниц x86-64 , увеличивая адресуемую виртуальную память с 256 ТиБ до 128 ПиБ . Расширение было впервые реализовано в процессорах Ice Lake . [2]
В схеме 4-уровневой страничной памяти (ранее известной как страничная память IA-32e ) 64-битный адрес виртуальной памяти делится на пять частей. Самые нижние 12 бит содержат смещение в пределах страницы памяти размером 4 КиБ, а следующие 36 бит равномерно делятся между четырьмя 9-битными дескрипторами, каждый из которых ссылается на 64-битную запись таблицы страниц в таблице страниц с 512 записями для каждого из четырех уровней страничной памяти. Это позволяет использовать биты с 0 по 47 в виртуальном адресе, что в общей сложности составляет 256 ТиБ. [3] : 4-2
5-уровневое страничное разделение добавляет еще один 9-битный дескриптор таблицы страниц, что позволяет использовать биты с 0 по 56. Это умножает адресное пространство на 512 и увеличивает предел до 128 ПиБ.
При включенном 5-уровневом страничном разделении биты с 57 по 63 должны быть копиями бита 56. [1] : 17 Это то же самое, что и при 4-уровневом страничном разделении, где старшие биты виртуального адреса, которые не участвуют в трансляции адреса, должны быть такими же, как и самый старший реализованный бит.
5-уровневое страничное разделение включается установкой бита 12 регистра CR4 (известного как LA57). [1] : 16 Это используется только тогда, когда процессор работает в 64-битном режиме, и может быть изменено только тогда, когда это не так. [1] : 16 Если бит не установлен или функция 5-уровневого страничного разделения не поддерживается, процессор использует 4-уровневую структуру таблицы страниц при работе в 64-битном режиме. [3] : 4-22 Это похоже на расширение физического адреса (PAE), где третий уровень таблиц страничного разделения для обеспечения 36-битной адресации был включен установкой бита в регистре CR4 . [4] [3] : 4-14
Будущие процессоры могут разрешить полное 64-битное виртуальное адресное пространство, расширив размер дескрипторов таблицы страниц до 12 бит (4096 записей таблицы страниц) и смещение памяти до 16 бит (размер страницы 64 КиБ) в 4-уровневой схеме страничного обмена или до 21 бита (размер страницы 2 МиБ) в 5-уровневой схеме. [5] Расширение размера записи таблицы страниц с 64 до 128 бит позволит использовать произвольные размеры страниц, поскольку дополнительные аппаратные флаги изменят размер и работу дескрипторов на более низких уровнях страничного обмена. [5]
Добавление еще одного уровня косвенности делает «прогулки» по таблице страниц более продолжительными. [6] Прогулка по таблице страниц происходит, когда либо блок управления памятью процессора , либо код управления памятью в операционной системе перемещаются по дереву таблиц страниц, чтобы найти запись таблицы страниц, соответствующую виртуальному адресу. [7] [3] : 4-22 Это означает, что в худшем случае процессору или менеджеру памяти приходится обращаться к физической памяти шесть раз для одного доступа к виртуальной памяти, а не пять раз для предыдущей итерации процессоров x86-64. Это приводит к небольшому снижению скорости доступа к памяти. [8] На практике эта стоимость значительно смягчается кэшами, такими как буфер трансляции (TLB). [8] Будущие расширения могут сократить прогулку страниц за счет ограничения виртуального адресного пространства на приложение с помощью выделенных аппаратных флагов в расширенной 128-битной записи таблицы страниц и допускают большие размеры страниц 64 КиБ или 2 МиБ и обратную совместимость с операциями со страницами 4 КиБ. [5]
5-уровневое страничное разделение реализовано в микроархитектуре Ice Lake [2] , процессорах серий EPYC 9004 и 8004 [9] [10] и серии Storm Peak Ryzen Threadripper PRO 7900WX. [11]
Ядро Linux 4.14 добавляет его поддержку. [12] Поддержка расширения была представлена как набор исправлений для ядра Linux 8 декабря 2016 года. [13] Как сообщалось в списке рассылки ядра Linux , оно состояло в расширении модели памяти Linux для использования пяти уровней вместо четырех. [14] Это связано с тем, что, хотя Linux абстрагирует детали таблиц страниц, он по-прежнему зависит от наличия нескольких уровней в своем собственном представлении. Когда архитектура поддерживает меньшее количество уровней, Linux эмулирует дополнительные уровни, которые ничего не делают. [15] Аналогичное изменение было сделано ранее для расширения с трех уровней до четырех. [16]
Windows 10 и 11 с серверными версиями также поддерживают это расширение в своих последних обновлениях, где оно предоставляется отдельным образом ядра под названием ntkrla57.exe . [17]