Открыть сервис

Extended Page Tables

Extended Page Tables (EPT) — это аппаратная технология виртуализации памяти, реализованная в процессорах архитектуры x86-64 (Intel), которая обеспечивает второй уровень трансляции адресов (Second Level Address Translation, SLAT) для гостевых операционных систем, работающих под управлением гипервизора. EPT позволяет гипервизору управлять памятью гостевых машин без необходимости эмуляции страничных таблиц, что значительно снижает накладные расходы на виртуализацию и повышает производительность.

История

Технология EPT была впервые представлена компанией Intel в 2008 году с выходом процессоров на микроархитектуре Nehalem (например, Intel Core i7 первого поколения). До появления EPT гипервизоры (например, VMware ESX, Xen, KVM) использовали программную трансляцию адресов (shadow page tables), что требовало от гипервизора перехвата всех операций с таблицами страниц гостевой ОС и их синхронизации с физическими таблицами. Это приводило к значительным задержкам, особенно при частых изменениях адресного пространства (например, при создании или завершении процессов).

EPT стала ответом Intel на аналогичную технологию AMDRapid Virtualization Indexing (RVI), представленную в 2006 году в процессорах AMD Opteron с архитектурой K8. Обе технологии решают одну задачу, но реализованы по-разному. Впоследствии EPT была включена во все современные процессоры Intel, поддерживающие аппаратную виртуализацию (VT-x), и стала обязательным компонентом для эффективной работы гипервизоров второго типа (например, VirtualBox, Hyper-V).

Принцип работы

Двухуровневая трансляция адресов

В традиционной системе без виртуализации процессор транслирует виртуальные адреса (VA) в физические (PA) с помощью таблиц страниц, управляемых операционной системой. В виртуализированной среде с EPT процессор выполняет две последовательные трансляции:

  1. Гостевая трансляция (GVA → GPA): Гостевая ОС (внутри виртуальной машины) работает со своими виртуальными адресами (Guest Virtual Address, GVA) и транслирует их в гостевые физические адреса (Guest Physical Address, GPA), используя собственные таблицы страниц (обычно x86-64 page tables).
  2. EPT-трансляция (GPA → HPA): Гипервизор задаёт таблицы EPT, которые отображают GPA на физические адреса хостовой системы (Host Physical Address, HPA). Процессор автоматически выполняет эту трансляцию, обращаясь к таблицам EPT, хранящимся в памяти хоста.

Таким образом, гипервизор определяет, какие физические страницы хоста соответствуют «физической» памяти, видимой гостевой ОС. Гостевая ОС не знает о существовании EPT и работает так, как если бы она управляла реальной физической памятью.

Структура таблиц EPT

EPT-таблицы имеют структуру, аналогичную стандартным x86-64 таблицам страниц (4 уровня: PML4, PDP, PD, PT), но с некоторыми отличиями:

  • Размер страниц: EPT поддерживает страницы размером 4 КБ, 2 МБ и 1 ГБ (аналогично обычным таблицам).
  • Флаги доступа: В записях EPT присутствуют биты, контролирующие права доступа для гостевой ОС: чтение (R), запись (W), исполнение (X). Гипервизор может задать, например, страницу только для чтения или запретить исполнение кода на определённой странице.
  • Бит доступа и грязности: EPT поддерживает биты, аналогичные A (accessed) и D (dirty) в обычных таблицах, что позволяет гипервизору отслеживать, какие страницы были прочитаны или изменены гостевой ОС.

Управление памятью через EPT

Гипервизор использует EPT для:

  • Изоляции памяти: Каждая виртуальная машина получает свой набор EPT-таблиц, что предотвращает доступ гостевой ОС к памяти других ВМ или хоста.
  • Баллонирования памяти: Гипервизор может динамически изменять отображение GPA → HPA, например, передавая часть памяти от одной ВМ другой (через механизм ballooning).
  • Поддержки больших страниц: EPT позволяет использовать большие страницы (2 МБ, 1 ГБ) для гостевой ОС, что снижает количество промахов TLB (Translation Lookaside Buffer) и повышает производительность.
  • Виртуализации устройств: При передаче устройств (PCI passthrough) EPT обеспечивает корректное отображение памяти устройства в адресное пространство гостевой ОС.

Преимущества перед программной трансляцией

  • Снижение накладных расходов: Гипервизору не нужно перехватывать каждое изменение таблиц страниц гостевой ОС. EPT-таблицы обновляются только при изменении конфигурации памяти ВМ (например, при добавлении или удалении памяти).
  • Уменьшение количества VM-exit: В shadow page tables каждое изменение таблиц страниц гостевой ОС вызывало VM-exit (переход управления к гипервизору). С EPT такие операции выполняются без вмешательства гипервизора.
  • Поддержка вложенной виртуализации: EPT является основой для вложенной виртуализации (например, запуск гипервизора внутри виртуальной машины). В этом случае используется EPT второго уровня (nested EPT).
  • Упрощение реализации гипервизора: Разработчикам не нужно реализовывать сложные алгоритмы синхронизации таблиц страниц.

Недостатки и ограничения

  • Увеличение задержек при промахах TLB: При промахе TLB процессор должен выполнить две последовательные трансляции (гостевую и EPT), что может увеличить время доступа к памяти. Однако современные процессоры имеют большие TLB и механизмы предвыборки, частично компенсирующие этот эффект.
  • Дополнительное потребление памяти: EPT-таблицы занимают память хоста. Для каждой виртуальной машины требуется свой набор таблиц, что может быть существенно при большом количестве ВМ.
  • Сложность отладки: Ошибки в EPT-таблицах (например, неправильное отображение адресов) могут приводить к сбоям гостевой ОС, которые трудно диагностировать без специальных инструментов (например, Intel VT-x tuning).

Применение

EPT используется во всех современных гипервизорах, поддерживающих аппаратную виртуализацию Intel:

  • KVM (Linux): Использует EPT для ускорения работы гостевых машин. Включение EPT (опция ept=1 в модуле kvm_intel) является стандартным.
  • VMware vSphere/ESXi: EPT (называется в документации VMware «Second Level Address Translation») является обязательным для работы с памятью более 2 ГБ на гостевую ВМ.
  • Microsoft Hyper-V: Использует EPT для всех виртуальных машин, работающих на процессорах Intel.
  • VirtualBox: Поддерживает EPT для ускорения работы гостевых ОС (включено по умолчанию при наличии поддержки процессором).
  • Xen: Использует EPT для гостевых машин с аппаратной виртуализацией (HVM).

Сравнение с AMD RVI

EPT и RVI (AMD) решают одну задачу, но имеют различия:

  • Структура таблиц: EPT использует 4-уровневую иерархию (как x86-64), а RVI — 4-уровневую (NPT) с возможностью использования 5-уровневой в процессорах AMD Zen 4.
  • Флаги: EPT имеет отдельные биты для чтения, записи и исполнения, а RVI использует комбинации битов (например, бит «чтение» и «запись» объединены).
  • Производительность: В большинстве сценариев обе технологии показывают сопоставимую производительность. Однако EPT может быть эффективнее при работе с большими страницами (2 МБ) из-за особенностей реализации TLB в процессорах Intel.

Интересные факты

  • EPT является частью расширения Intel Virtualization Technology (VT-x) и не может быть отключена отдельно от VT-x.
  • В процессорах Intel с поддержкой 5-уровневой адресации (5-level paging) EPT также поддерживает 5 уровней для гостевых таблиц.
  • EPT используется не только для виртуализации, но и для изоляции процессов в некоторых системах (например, в Windows 10/11 с включённой защитой памяти на основе виртуализации — VBS).

Источники

  • Intel Corporation. Intel 64 and IA-32 Architectures Software Developer’s Manual, Volume 3C: System Programming Guide, Part 3. — Chapter 28: VMX Support for Address Translation (EPT).
  • AMD. AMD64 Architecture Programmer’s Manual, Volume 2: System Programming. — Chapter 15: Nested Page Tables.
  • VMware. Performance Evaluation of Intel EPT and AMD RVI. — VMware Technical Report, 2009.
  • Red Hat. KVM Virtualization: EPT and NPT. — Red Hat Customer Portal, 2021.
  • Microsoft. Hyper-V Architecture: Second Level Address Translation. — Microsoft Docs, 2023.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →