ПАВ — технология виртуальной памяти¶
ПАВ (англ. PAV — Physical Address Virtualization, физическая адресация виртуализированная) — технология виртуализации памяти, реализованная в процессорах Intel с архитектурой x86-64. ПАВ позволяет операционной системе и гипервизору разделять физическую память компьютера между несколькими виртуальными машинами, обеспечивая изоляцию адресных пространств и прямой доступ к физической памяти из программ гостевой ОС. В более широком контексте под ПАВ понимают механизм программно-аппаратной поддержки виртуальной памяти, включая трансляцию виртуальных адресов в физические и обратно.
¶История и происхождение
Технология ПАВ появилась в 2000-х годах как ответ на рост популярности виртуализации. Классическая виртуализация x86-процессоров требовала сложных приёмов «бинарной трансляции» или модификации ядра гостевой ОС, поскольку инструкции с привилегиями выполнялись только в кольце 0, а гостевая ОС должна была работать в кольце 1 или 3. Intel VT-x (2005) и AMD-V (2006) добавили аппаратную поддержку виртуализации, а за ними последовали расширения для работы с памятью.
Расширение Intel EPT (Extended Page Tables, 2008) и аналогичный механизм AMD RVI/NPT (Nested Page Tables) реализуют двойную трансляцию адресов: гостевой ОС кажется, что она работает с собственными физическими адресами, но на самом деле эти «физические» адреса являются виртуальными относительно реальной памяти хоста. Механизм ПАВ выполняет эту трансляцию аппаратно, без участия гипервизора на каждом обращении к памяти.
¶Принцип работы
В классической модели без виртуализации процессор выполняет двухуровневую трансляцию: виртуальный адрес → физический адрес (через таблицы страниц ОС). При виртуализации с ПАВ добавляется третий уровень:
- Гостевая ОС формирует виртуальный адрес и транслирует его в «физический» адрес гостя через собственные таблицы страниц.
- Аппаратура процессора дополнительно транслирует этот «физический» адрес гостя в реальный физический адрес хоста через таблицы страниц EPT/NPT, управляемые гипервизором.
- Доступ к памяти выполняется без участия программного обеспечения гипервизора.
Таким образом, каждая виртуальная машина получает собственное изолированное адресное пространство, а гипервизор контролирует, какая часть физической памяти доступна каждому гостю. Попытка гостевой ОС обратиться к памяти вне разрешённого диапазона вызывает исключение, которое перехватывается гипервизором.
¶Преимущества
- Производительность. Трансляция адресов выполняется аппаратно, что устраняет накладные расходы на бинарную трансляцию инструкций.
- Изоляция. Каждая виртуальная машина работает в собственном адресном пространстве, что повышает безопасность при размещении нескольких гостей на одном хосте.
- Прозрачность. Гостевая ОС не требует модификаций — она считает, что управляет реальной памятью.
- Упрощение гипервизора. Код гипервизора становится проще, так как не нужно программно эмулировать таблицы страниц гостя.
¶Поддержка процессорами
| Процессорный набор | Реализация | Год появления |
|---|---|---|
| Intel VT-x | EPT (Extended Page Tables) | 2008 (Nehalem) |
| AMD-V | RVI / NPT (Nested Page Tables) | 2007 (Barcelona) |
| Intel VT-x | VPID (Virtual Processor Identifiers) | 2010 |
VPID — дополнительное расширение, которое позволяет кэшировать трансляции адресов гостя в TLB (трансляционный буфер адресов) и помечать их идентификатором виртуальной машины, избегая полной очистки TLB при переключении контекста между гостями.
¶Применение
Технология ПАВ лежит в основе работы всех современных гипервизоров первого типа: VMware ESXi, Microsoft Hyper-V, Xen, KVM, QEMU. Она используется в облачных платформах (виртуальные машины в облаках), в системах виртуализации рабочих столов, при запуске нескольких ОС на одном сервере. Без аппаратной поддержки ПАВ виртуализация на x86-платформах была бы существенно медленнее и сложнее в реализации.
¶ПАВ и другие технологии
С развитием виртуализации появились расширения, дополняющие ПАВ: Intel VT-d (виртуализация устройств ввода-вывода), SR-IOV (прямой доступ виртуальных машин к сетевым адаптерам), а также механизмы разделяемой памяти (shared memory) для быстрого обмена данными между гостями и хостом. В 2010-х годах на базе тех же принципов виртуализации памяти были построены системы с машинной виртуализацией (KVM) и контейнерные технологии, хотя последние используют иной подход — общее адресное пространство ядра хоста.
Источники:
- Intel 64 and IA-32 Architectures Software Developer's Manual, Volume 3C: System Programming Guide
- AMD64 Architecture Programmer's Manual, Volume 2: System Programming
- Goldberg R. Virtual Machines: Techniques for Implementing a Universal Computer. PhD thesis, University of California, Berkeley, 1973
- Adams K., Agesen O. A Comparison of Software and Hardware Techniques for x86 Virtualization // ASPLOS 2006
- Documentation KVM (kernel.org)
