Введение

Виртуализация с аппаратной поддержкой на процессорах x86/x86 64

Виртуализация x86 – это использование возможностей аппаратной поддержки виртуализации на процессорах x86/x86 64. В конце 1990-х годов виртуализация x86 достигалась сложными программными методами, необходимыми для компенсации отсутствия аппаратной поддержки виртуализации в процессорах и обеспечения приемлемой производительности. В 2005 и 2006 годах компании Intel (VT-x) и AMD (AMD-V) представили ограниченную аппаратную поддержку виртуализации, которая упростила программное обеспечение для виртуализации, но давала незначительный прирост скорости. Более существенная аппаратная поддержка, обеспечившая значительное повышение производительности, появилась в более поздних моделях процессоров.

Виртуализация с аппаратной поддержкой

В 2005 и 2006 годах Intel и AMD (работая независимо) разработали новые расширения для процессоров архитектуры x86. Первое поколение аппаратной виртуализации x86 решало проблему с привилегированными инструкциями. Вопрос низкой производительности виртуализированной системной памяти был решен благодаря виртуализации MMU, которая позднее была добавлена в чипсет.

Виртуальный режим 8086

Основываясь на негативном опыте работы с защищенным режимом 80286, который сам по себе был недостаточно надежен для одновременного запуска приложений DOS, Intel представила виртуальный режим 8086 в чипе 80386, обеспечив виртуализацию процессоров 8086 на чипах 386 и более поздних версиях. Однако аппаратная поддержка виртуализации самого защищенного режима появилась лишь через 20 лет.

Виртуализация AMD (AMD-V)

AMD разработала расширения виртуализации первого поколения под кодовым названием "Pacifica" и первоначально представила их как AMD Secure Virtual Machine (SVM), но позже стала продвигать их под торговой маркой AMD Virtualization, сокращенно AMD V.

23 мая 2006 года AMD выпустила Athlon 64 ("Orleans"), Athlon 64 X2 ("Windsor") и Athlon 64 FX ("Windsor") как первые процессоры AMD с поддержкой этой технологии. Функциональность AMD V также реализована в процессорах семейств Athlon 64 и Athlon 64 X2 с ревизиями "F" или "G" для сокета AM2, Turion 64 X2, а также в процессорах Opteron второго и третьего поколений, Phenom и Phenom II. Процессоры APU Fusion поддерживают AMD V. Процессоры Socket 939 не поддерживают AMD V. Поддержка AMD V реализована только в APU и настольных процессорах Sempron Huron, Regor и Sargas. Процессоры AMD Opteron, начиная с линейки семейства 0x10 Barcelona, и процессоры Phenom II поддерживают аппаратную технологию виртуализации второго поколения под названием Rapid Virtualization Indexing (ранее известную как Nested Page Tables в процессе разработки), которая впоследствии была принята Intel как Extended Page Tables (EPT). По состоянию на 2019 год все процессоры AMD на базе Zen поддерживают AMD V.

Флаг процессора для AMD V – "svm". Его наличие можно проверить в производных BSD с помощью dmesg или sysctl, а в Linux – через /proc/cpuinfo.

Виртуализация Intel (VT-x)

Ранее известная под кодовым названием "Vanderpool", VT-x представляет собой технологию Intel для виртуализации на платформе x86. 13 ноября 2005 года Intel выпустила две модели Pentium 4 (модели 662 и 672) как первые процессоры Intel с поддержкой VT-x. Флаг процессора, указывающий на поддержку VT-x, – "vmx"; в Linux его можно проверить через /proc/cpuinfo, а в macOS – через sysctl machdep.cpu.features. "VMX" расшифровывается как Virtual Machine Extensions, добавляющая 13 новых инструкций: VMPTRLD, VMPTRST, VMCLEAR, VMREAD, VMWRITE, VMCALL, VMLAUNCH, VMRESUME, VMXOFF, VMXON, INVEPT, INVVPID и VMFUNC. Эти инструкции позволяют переходить в виртуальный режим исполнения и выходить из него, при котором гостевая ОС воспринимает себя как работающую с полными привилегиями (кольцо 0), в то время как хост-ОС остается защищенной. По состоянию на 2015 год, почти все современные серверные, настольные и мобильные процессоры Intel поддерживают VT-x, за исключением некоторых процессоров Intel Atom. На некоторых материнских платах пользователям необходимо включить функцию Intel VT-x в настройках BIOS, прежде чем приложения смогут ее использовать. Intel начала включать Extended Page Tables (EPT) – технологию виртуализации таблиц страниц – начиная с архитектуры Nehalem, выпущенной в 2008 году. В 2010 году Westmere добавила поддержку запуска логического процессора непосредственно в реальном режиме – функцию, называемую "неограниченный гость", для работы которой требуется EPT. Начиная с микроархитектуры Haswell (анонсированной в 2013 году), Intel начала включать VMCS shadowing – технологию, ускоряющую вложенную виртуализацию VMM. Структура управления виртуальной машиной (VMCS) – это структура данных в памяти, которая существует ровно один раз для каждой виртуальной машины и управляется VMM. При каждом переключении контекста выполнения между различными виртуальными машинами VMCS восстанавливается для текущей виртуальной машины, определяя состояние ее виртуального процессора. Как только используется более одного VMM или вложенные VMM, возникает проблема, аналогичная той, которая потребовала разработки управления теневыми таблицами страниц, как описано выше. В таких случаях VMCS необходимо многократно затенять (в случае вложенности) и частично реализовывать программно, если процессор не предоставляет аппаратную поддержку. Для повышения эффективности обработки теневой VMCS Intel реализовала аппаратную поддержку VMCS shadowing.

Виртуализация VIA (VIA VT)

Процессоры серии VIA Nano 3000 и выше поддерживают технологию виртуализации VIA VT, совместимую с Intel VT-x. EPT реализована в Zhaoxin ZX-C, являющемся потомком VIA QuadCore E и Eden X4, схожим с Nano C4350AL.

Графическая обработка

Виртуализация графики не является частью архитектуры x86. Технология виртуализации графики Intel Graphics Virtualization Technology (GVT) предоставляет возможности виртуализации графики в более современных графических архитектурах Gen. Хотя APU AMD реализуют набор инструкций x86-64, они используют собственные графические архитектуры AMD (TeraScale, GCN и RDNA), которые не поддерживают виртуализацию графики. Larrabee была единственной графической микроархитектурой, основанной на x86, но, скорее всего, не поддерживала виртуализацию графики.

Чипсет

Виртуализация памяти и ввода-вывода осуществляется чипсетом. Обычно для активации этих функций требуется настройка BIOS, который должен их поддерживать и быть настроен на их использование.

Виртуализация сети (VT-c)

Технология виртуализации Intel для связи (VT c).