5-рівневі таблиці сторінок (Intel)
5-рівневі таблиці сторінок (англ. 5-level paging у документації Intel) — технологія розширення обсягу підтримуваної віртуальної пам'яті у процесорах архітектури x86-64, запропонована Intel у 2017-му році.[1]:11 Діапазон віртуальних адрес розширюється з 48 до 56 розрядів (іншими словами, максимальна адресована пам'ять розширюється з 256 терабайт до 128 петабайт). Підтримка даної технології реалізована у ядрі Linux починаючи з версії 4.14.[2]
Історія
Наприкінці 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, що засновані на архітектурі Sunny Cove.[5]
Для того, щоб програмно підтримати 5-рівневі таблиці, у ядрі Linux знадобилася переробка внутрішньої (уніфікованої) моделі сторінок, що використовувала лише 4 рівні.[6]
Переваги та недоліки
Очевидною перевагою 5-рівневої схеми є збільшення розрядності адресованої пам'яті (з 48 до 56 біт).
Проходження таблиць трансляції сторінок, що мають 5 рівнів, займає деякий час. У загальному випадку, процесор повинен пройти всі таблиці при трансляції будь-якої віртуальної адреси у фізичну, тобто шість разів здійснити доступ до фізичної пам'яті для отримання значення заданої комірки віртуальної пам'яті.[7] На практиці подібне сповільнення можна суттєво зменшити, застосовуючи буфер асоціативної трансляції (TLB).
Джерела
- 5-Level Paging and 5-Level EPT (англ.). Intel Corporation. May 2017.
- Tung, Liam. First Linux 4.14 release adds "very core" features, arrives in time for kernel's 26th birthday. ZDNet (англ.). Процитовано 25 квітня 2018.
- Hudek, Ted. Operating Systems and PAE Support - Windows 10 hardware dev. docs.microsoft.com (англ.). Процитовано 26 квітня 2018.
- Intel® 64 and IA-32 Architectures Software Developer's Manual (англ.). Intel Corporation. 2018.
- 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 (англ.). Процитовано 15 жовтня 2019.
- Shutemov, Kirill A. (8 грудня 2016). [RFC, PATCHv1 00/28] 5-level paging (англ.). Процитовано 26 квітня 2018.
- Levy, Hank (Autumn 2008). CSE 451: Operating Systems: Paging & TLBs. Університет Вашингтону (англ.). Процитовано 26 квітня 2018.