Intel 5-уровневая подкачка, называемая просто 5-уровневой подкачкой в документах Intel, является расширением процессора для линейки процессоров x86-64. Он увеличивает размер виртуальных адресов с 48 бит до 57 бит, увеличивая адресуемую виртуальную память с 256 TiB до 128 PiB. Расширение было впервые реализовано в процессорах Ice Lake, а ядро 4.14 Linux добавляет его поддержку.
x86-64 Процессоры без этой функции используют четырехуровневую структуру таблицы страниц при работе в 64-битном режиме. Аналогичная ситуация возникла, когда 32-битные процессоры IA-32 использовали два уровня, позволяя использовать до четырех гигабайт памяти (как виртуальной, так и физической). Для поддержки более 4 ГБ RAM был определен дополнительный режим преобразования адресов, называемый Physical Address Extension (PAE), включающий третий уровень. Это было разрешено установкой бита в регистре CR4. Точно так же новое расширение включается установкой бита 12 регистра CR4 (известного как LA57). Это используется только тогда, когда процессор работает в 64-битном режиме, и может быть изменено только тогда, когда это не так. Если бит не установлен, процессор работает с четырьмя уровнями подкачки.
Поскольку добавление другой таблицы страниц увеличивает адресное пространство на 512, виртуальный лимит увеличился с 256 ТиБ до 128 ПиБ. Дополнительные девять бит виртуального адреса индексируют новую таблицу, поэтому, если раньше использовались биты с 0 по 47, теперь используются биты с 0 по 56.
Как и в случае четырехуровневого пейджинга, старшие биты виртуального адреса, которые не участвуют в трансляции адреса, должны быть такими же, как самый старший реализованный бит. При включенном пятиуровневом подкачке это означает, что биты с 57 по 63 должны быть копиями бита 56. Intel переименовала существующую систему подкачки в «4-уровневую подкачку», которая раньше была известна как IA-32e разбиение на страницы.
Расширение записи таблицы страниц до 128 бит позволяет использовать полное 64-битное адресное пространство в 4-уровневой схеме разбиения на страницы и делает возможными произвольные размеры блока распределения в 5-уровневой схеме.
5-уровневая подкачка реализована с помощью Ice Lake микроархитектуры.
Поддержка расширения была представлена в виде набора исправлений для ядра Linux 8 декабря 2016 года. Как сообщалось в списке рассылки ядра Linux, он заключался в расширении модели памяти Linux для использования пяти уровней, а не четырех. Это потому, что, хотя Linux абстрагирует детали таблиц страниц, он по-прежнему зависит от наличия нескольких уровней в собственном представлении. Когда архитектура поддерживает меньшее количество уровней, Linux эмулирует дополнительные уровни, которые ничего не делают. Аналогичное изменение было ранее сделано для расширения с трех уровней до четырех.
Добавление еще одного уровня косвенного обращения делает таблицу страниц более продолжительной. Обход таблицы страниц происходит, когда либо блок управления памятью процессора , либо код управления памятью в операционной системе перемещаются по дереву таблиц страниц, чтобы найти запись таблицы страниц, соответствующую виртуальному адресу.. Это означает, что в худшем случае процессор или диспетчер памяти должны обращаться к физической памяти шесть раз для одного доступа к виртуальной памяти, а не пять раз для предыдущей итерации процессоров x86-64. Это приводит к небольшому снижению скорости доступа к памяти. На практике эти затраты значительно снижаются за счет использования кешей, таких как резервный буфер трансляции (TLB). Дальнейшие расширения могут сократить количество обходов страниц за счет использования 4096 128-битных записей таблицы страниц и обеспечить больший размер выделения страницы 64 КиБ и обратную совместимость с операциями со страницами 4 КиБ.