5-рівневі таблиці сторінок (Intel)

5-рівневі таблиці сторінок (англ. 5-level paging у документації Intel) — технологія розширення обсягу підтримуваної віртуальної пам'яті у процесорах архітектури x86-64, запропонована Intel у 2017 році[1]:11. Діапазон віртуальних адрес розширюється з 48 до 56 розрядів (іншими словами, максимальна адресована пам'ять розширюється з 256 терабайт до 128 петабайт). Підтримка даної технології реалізована у ядрі Linux починаючи з версії 4.1[2].

Ілюстрація 5-рівневої сторінкової пам'яті

Історія ред.

Наприкінці 1990-х років проблема обмеженості віртуальних адрес виникла спочатку у 32-розрядній архітектурі IA-32 з її дворівневою схемою адресації сторінкової пам'яті (каталог таблиць — таблиця сторінок), що обмежувала максимальний об'єм віртуальної й фізичної пам'яті 4 гігабайтами. Для вирішення даної проблеми було запропоновано схему PAE (англ. Physical Address Extension), яка запровадила третій рівень адресації[3]. Режим PAE вмикається спеціальним бітом у регістрі CR4.[4]:2799.

Принцип роботи ред.

Процесори, що реалізують систему команд x86-64, із самого початку підтримували 4-рівневу схему адресації сторінкової пам'яті при роботі у 64-розрядному режимі[4]:2806. 5-рівнева адресація також вмикається одним із бітів у регістрі CR4, а саме бітом 12 (відомим як «LA57»)[1]:16. Цей біт можна увімкнути лише тоді, коли процесор вже працює у 64-бітному режимі, а вимкнути — коли, навпаки, не працює. Якщо біт не встановлено, процесор працює зі звичайними 4-рівневими таблицями.

Як і при 4-рівневій схемі, верхні біти 64-розрядної адреси не беруть участь у трансляції, і повинні мати таке саме значення, як і найвищий підтримуваний біт (тобто, біт 56)[1]:17.

Реалізація ред.

Підтримка 5-рівневих таблиць сторінок імплементована у процесорах Ice Lake[d], що засновані на архітектурі Sunny Cove[5].

Для того, щоб програмно підтримати 5-рівневі таблиці, у ядрі Linux знадобилася переробка внутрішньої (уніфікованої) моделі сторінок, що використовувала лише 4 рівні[6].

Переваги та недоліки ред.

Очевидною перевагою 5-рівневої схеми є збільшення розрядності адресованої пам'яті (з 48 до 56 біт).

Проходження таблиць трансляції сторінок, що мають 5 рівнів, займає деякий час. У загальному випадку, процесор повинен пройти всі таблиці при трансляції будь-якої віртуальної адреси у фізичну, тобто шість разів здійснити доступ до фізичної пам'яті для отримання значення заданої комірки віртуальної пам'яті[7]. На практиці подібне сповільнення можна суттєво зменшити, застосовуючи буфер асоціативної трансляції (TLB).

Джерела ред.

  1. а б в 5-Level Paging and 5-Level EPT (PDF) (англ.). Intel Corporation. May 2017. Архів оригіналу (PDF) за 5 грудня 2018. Процитовано 13 грудня 2019.
  2. Tung, Liam. First Linux 4.14 release adds "very core" features, arrives in time for kernel's 26th birthday. ZDNet (англ.). Архів оригіналу за 3 січня 2020. Процитовано 25 квітня 2018.
  3. Hudek, Ted. Operating Systems and PAE Support - Windows 10 hardware dev. docs.microsoft.com (англ.). Архів оригіналу за 13 грудня 2019. Процитовано 26 квітня 2018.
  4. а б Intel® 64 and IA-32 Architectures Software Developer's Manual (PDF) (англ.). Intel Corporation. 2018. Архів оригіналу (PDF) за 22 квітня 2020. Процитовано 13 грудня 2019.
  5. Cutress, Ian. Sunny Cove Microarchitecture: A Peek At the Back End. Intel's Architecture Day 2018: The Future of Core, Intel GPUs, 10nm, and Hybrid x86 (англ.). Архів оригіналу за 6 грудня 2019. Процитовано 15 жовтня 2019.
  6. Shutemov, Kirill A. (8 грудня 2016). [RFC, PATCHv1 00/28] 5-level paging (англ.). Архів оригіналу за 3 грудня 2021. Процитовано 26 квітня 2018.
  7. Levy, Hank (Autumn 2008). CSE 451: Operating Systems: Paging & TLBs (PDF). Університет Вашингтону (англ.). Архів оригіналу (PDF) за 15 вересня 2020. Процитовано 26 квітня 2018.