Table of Contents

Понимание виртуализации аппаратного обеспечения и критической роли регистров процессоров

Виртуализация трансформировала современные вычисления, позволяя облачным провайдерам, предприятиям и центрам обработки данных максимизировать использование аппаратного обеспечения за счет запуска нескольких операционных систем и приложений на одном физическом сервере. В основе этой технологии лежит гипервизор — программный слой, который управляет виртуальными машинами (VM). Однако способность гипервизора эффективно управлять выполнением виртуальных машин, изолировать гостевые среды и переключаться между ними в значительной степени зависит от фундаментального компонента процессора: регистров. Эти небольшие, сверхбыстрые места хранения данных являются не просто пассивными держателями данных; они являются активными исполнителями изоляции, контекста и управления. В этой статье исследуется, как регистры делают виртуализацию возможной, конкретные типы вовлеченных, проблемы, которые они создают, и как расширения виртуализации оборудования эволюционировали, чтобы использовать их.

Что такое регистры процессоров? Строительные блоки состояния процессора

Регистры являются самыми быстрыми местами памяти внутри процессора. Они находятся непосредственно на кристалле процессора и могут быть прочитаны или записаны в течение одного тактового цикла - порядками величины быстрее, чем кэш-память или ОЗУ. Как правило, измеряемые в битах (32-битная, 64-битная), регистры хранят критические данные, такие как следующий адрес команды (счетчик программы или указатель инструкции), текущий указатель стека, арифметические результаты и флаги управления. Без регистров процессору пришлось бы получать каждый фрагмент данных из более медленной памяти, что значительно ухудшает производительность.

Классификация регистров

  • Регистры общего назначения (GPRs): Используются для арифметических, логических операций и перемещения данных. В архитектурах x86-64 доступны регистры, такие как RAX, RBX, RCX, RDX, RSI, RDI, R8-R15. Они содержат операнды и результаты для инструкций.
  • Регистры специального назначения: Включают указатель команд (RIP в x86-64), указатель стека (RSP) и регистр флага (RFLAGS).
  • Регистры управления: В x86 регистрируются функции системного уровня CR0, CR2, CR3, CR4 и CR8 управления, такие как расширение подкачки, защита и виртуализация.
  • Регистры сегментов: CS, DS, ES, FS, GS, SS управляют сегментацией памяти, хотя теперь они в значительной степени рудиментарны в 64-битном режиме, они остаются важными для унаследованной совместимости и некоторых сценариев виртуальной машины.
  • Модельные регистры (MSR) : Регистры, специфичные для процессоров, которые контролируют такие функции, как счетчики производительности, температуры и расширения виртуализации. Они не являются частью стандартного набора регистров и должны быть доступны через инструкции RDMSR / WRMSR.
  • Регистры отладки : DR0-DR7, используемый для аппаратных точек останова и отладки.

Каждый виртуальный компьютер, работающий на гипервизоре, нуждается в собственной копии этих регистров для поддержания независимого контекста исполнения. Когда гипервизор переключается с одной виртуальной машины на другую, он сохраняет состояние реестра исходящей виртуальной машины и восстанавливает состояние входящей виртуальной машины. Этот контекстный переключатель должен быть чрезвычайно быстрым, чтобы избежать заметных накладных расходов на производительность.

Центральная роль регистров в виртуализации

Гипервизор (часто называемый Virtual Machine Monitor, VMM) выступает в качестве арбитра аппаратных ресурсов. Регистры являются основным механизмом, посредством которого VMM поддерживает состояние per-VM, обеспечивает изоляцию и перехватывает привилегированные операции. Вот ключевые способы, которыми регистры позволяют виртуализацию:

Контекстное сохранение и переключение

Каждой ВМ присваивается виртуализированный набор регистров. Когда гипервизор выполняет переключатель контекста (например, разделение времени между двумя ВМ), он сохраняет текущие значения регистра в структуру памяти, называемую блоком управления виртуальной машиной (VMCB в AMD) или структурой управления виртуальной машиной (VMCS в Intel). Затем он загружает следующее состояние сохраненного регистра ВМ. Этот процесс включает в себя десятки регистров и должен быть оптимизирован. Современное оборудование предоставляет выделенные инструкции (VMRUN, VMLAUNCH, VMRESUME), которые обрабатывают массовое сохранение / восстановление регистров.

Виртуализация уровня инструкций

Гостевые операционные системы рассчитывают выполнять привилегированные инструкции (например, изменение таблиц страниц, обновление дескрипторов прерываний). В классической виртуализации с помощью ловушки и эмуляции, когда гость пытается модифицировать привилегированный регистр, процессор поднимает ловушку, а гипервизор перехватывает инструкцию, эмулирует ее влияние на виртуальный регистр и возвращает управление гостю. Это гарантирует, что гость не может изменить реальное аппаратное состояние. При аппаратной виртуализации (Intel VT-x, AMD-V) сам процессор автоматически ловит чувствительные инструкции без необходимости двоичного перевода.

Изоляция через защиту регистра

Регистры, такие как CR3 (базовый адрес таблицы страниц) и CR0 (флаги управления), напрямую влияют на память и защиту. Если гостевая ОС может изменить CR3, она может отображать физическую память, принадлежащую другой виртуальной машине. Гипервизор предотвращает это, установив таблицу теневых страниц или используя вложенные таблицы страниц (EPT / NPT), где гипервизор контролирует перевод адресов второго уровня. Контроль доступа на уровне регистра гарантирует, что даже если гость пытается написать на CR3, гипервизор отвечает.

Регистры, специфичные для моделей (MSR)

Функции процессора управления MSRs, такие как расширения отладки, мониторинг производительности и управление питанием. Многие MSRs являются пер-ядерными и влияют на весь физический процессор. Виртуализация их сложна, потому что они не автоматически сохраняются / восстанавливаются во время коммутаторов контекста VM. Гипервизор должен использовать комбинацию захвата доступа (через растровые карты MSR) и эмуляции считываний / записей MSR для представления каждой VM с собственным виртуальным пространством MSR. Изгой VM не должен быть в состоянии прочитать значения MSR другой VM (например, ветвь магазина трассировки или регистры проверки машины).

Типы регистров, специально используемых в виртуализации

Регистры общего назначения

GPR являются наиболее часто используемыми регистрами. Каждая виртуальная машина получает свой собственный набор значений для RAX через R15. Во время переключения контекста все GPR сохраняются и восстанавливаются. Гипервизоры с критическими характеристиками производительности могут использовать такие функции процессора, как сегментация памяти (FS, GS) для хранения указателей на виртуальную машину, чтобы избежать загрязнения кэша.

Регистры управления (CR0, CR2, CR3, CR4, CR8)

  • CR0: Управление режимами работы процессора (PE бит для защищенного режима, PG бит для подкачки).Попытки гостей изменить PE или PG должны быть перехвачены.
  • CR2: Содержит последний линейный адрес ошибки страницы. Гипервизоры полагаются на это для реализации подкачки спроса и обработки вложенных ошибок страницы.
  • CR3: Удерживает базовый адрес иерархии таблиц страниц. Виртуализация с помощью аппаратного обеспечения использует Расширенные таблицы страниц (EPT) в Intel или Таблицы страниц с наложенными страницами (NPT) в AMD, поэтому CR3 гостя указывает на страницы-гости, а таблицы второго уровня гипервизора отображают гостево-физические на машинно-физические.
  • CR4: Включает такие функции, как расширение физического адреса (PAE), расширение SMEP, SMAP и расширение виртуализации (бит VMXE).
  • CR8: Регистр приоритетов задач, используемый для управления прерываниями. Гипервизор виртуализирует это для управления доставкой прерываний виртуальным машинам.

Регистры сегментов

Хотя сегментация в значительной степени не используется в 64-битном режиме, регистры сегментов (CS, DS, SS, ES, FS, GS) по-прежнему содержат скрытые дескрипторные кэши, которые хранят базу, лимит и атрибуты. В виртуализации гипервизор должен виртуализировать эти кэшированные значения, поскольку они влияют на разрешения доступа к памяти. Гостевая сегментация может эмулироваться гипервизором с использованием ограничений подкачки.

Типовые регистры (MSR) в виртуализации

Многочисленные MSR имеют отношение к виртуализации. Например: - IA32 VMX BASIC и IA32 VMX MISC описывают возможности процессора для Intel VMX. - SYSENTER CS, SYSENTER EIP, SYSENTER ESP управляют быстрыми системными вызовами, часто перехватываемыми гипервизором. - IA32 EFER позволяет таким функциям, как SYSCALL/SYSRET и NX бит. - Гипервизор должен тщательно эмулировать MSR, которые влияют на поведение системы, особенно для управления питанием (например, APIC-база MSR). Многие гипервизоры поддерживают растровую карту (MSR-битмы), чтобы указать, какие MSR-доступы вызывают выходы VM.

Регистры отладчиков (DR0-DR7)

Регистры отладки являются пер-ядерными и могут быть установлены гостевой ОС для отладки. Гипервизор должен сохранять и восстанавливать их на контекстных переключателях. Кроме того, вредоносное программное обеспечение может использовать регистры отладки для выхода из виртуальной машины, если не виртуализировано должным образом.

Расширения виртуализации аппаратного обеспечения: как расширяются регистры

До аппаратных расширений чистая виртуализация программного обеспечения (двоичный перевод) подвергалась значительным штрафам за производительность. Intel представила VT-x (Технология виртуализации) и AMD представила AMD-V (Pacifica) для добавления новых режимов процессора и выделенных структур реестра, которые упрощают виртуализацию.

Intel VT-x: VMCS и гостевые/хостинговые поля

Структура управления виртуальной машиной (VMCS) представляет собой структуру данных резидента памяти, которая содержит все состояние реестра для виртуальной машины. Она включает в себя: - Гостевая область состояния: копии CR0, CR3, CR4, RSP, RIP, RFLAGS, регистры сегментов и т. д. - Область состояния хоста: сохраняет состояние реестра гипервизора, которое должно быть восстановлено на выходах виртуальной машины. - Поля управления: укажите, какие события вызывают выходы виртуальной машины (например, определенные доступы к MSR, нагрузки CR3). - Информационные поля выхода: запишите причину выхода виртуальной машины (например, какой регистр был изменен).

VMCS загружается в процессор через команду VMPTRLD, и переключение контекста между виртуальными машинами происходит быстро, потому что процессор сохраняет / восстанавливает все состояние гостя в одной операции. Инструкция VMXON активирует режим виртуализации; корневой режим VMX (гипервизор) и некорневой режим (гост) имеют свои собственные уровни привилегий.

AMD-V: VMCB

AMD использует блок управления виртуальной машиной (VMCB), хранящийся в физической памяти. Инструкция VMRUN загружает VMCB и переключается в гостевой режим. Как и VMCS, VMCB содержит состояние регистра гостя и хоста и элементы управления для перехвата событий. AMD также использует таблицы вложенных страниц (NPT), которые полагаются на отдельный набор регистров таблиц страниц, управляемых гипервизором.

Расширения виртуализации ARMv8

Процессоры ARM имеют собственные расширения виртуализации (VHE), которые обеспечивают EL2 (уровень привилегий гипервизора). Регистры, такие как HCR EL2, контролируют поведение виртуализации, а VTTBR EL2 содержит базовый адрес для таблицы перевода второй стадии. ARM не требует VMCS-подобной структуры, но полагается на регистровые банки, которые включены в контекстный коммутатор с использованием регистров VMPIDR, VPIDR и HCR.

Соображения в отношении эффективности управления регистром

Стоимость сохранения и восстановления регистров при переходах VM является критическим фактором производительности. Каждый выход и ввод VM включает в себя десятки регистровых нагрузок и магазинов. Аппаратные виртуализации снижают эти накладные расходы, потому что сам процессор выполняет объемное сохранение / восстановление с использованием микрокода, но выходы все еще дороги (сотни циклов).

Минимизация VM-выходов

Гипервизор может настроить VMCS/VMCB для предотвращения частых выходов. Например, многие MSR-доступы могут обрабатываться без VM-выхода, если гипервизор предварительно заполняет растровые карты MSR, чтобы обеспечить прямой гостевой доступ (для доброкачественных MSR, таких как счетчик времени). Кроме того, современные процессоры поддерживают функции APICv и IOMMU, которые уменьшают выходы для прерывания и операций ввода-вывода.

Регистрация кэширования и стеней

Некоторые гипервизоры кэшируют значения гостевого регистра в структуре данных VCPU, чтобы избежать избыточных нагрузок. Например, гостевой CR3 часто затеняется: гипервизор сохраняет копию и обновляет реальный CR3 только тогда, когда гость меняет таблицы страниц. Аналогично, значения MSR гостя могут быть кэшированы и ленивыми.

Влияние виртуализации Nested

Когда гипервизор запускается внутри виртуальной машины (встроенная виртуализация), внешний гипервизор должен виртуализировать сами структуры VMCS / VMCB. Это требует дополнительной осторожности с регистрами - например, внешняя гипервизорная команда VMLAUNCH должна быть перехвачена и эмулирована внешним гипервизором, вызывая дополнительные сохранения / восстановления регистра. Аппаратные средства поддержки вложенной виртуализации (SVM в AMD, VMX в Intel) помогают уменьшить эти накладные расходы.

Последствия виртуализации реестра

Регистры являются основной целью для атак по боковым каналам и эскалации привилегий. Компрометированный гипервизор может утечка значений регистров между виртуальными машинами, если переключение контекста не является тщательным. Например, во время переключения контекста данные остатках в регистрах, которые не перезаписаны, могут наблюдаться следующей виртуальной машиной. Гипервизоры должны обнулить чувствительные регистры (например, регистры отладки и MSR, которые содержат секретные ключи) перед загрузкой новой виртуальной машины.

Уязвимости спекулятивного исполнения

В атаках Meltdown и Spectre используется тот факт, что спекулятивное исполнение может получить доступ к значениям регистров, которые не видны архитектурно. В виртуализации состояние реестра гипервизора может быть просочилось к вредоносному гостю через микроархитектурные боковые каналы. Смягчения включают в себя промывку буферов ветвей-мишеней (IBRS, IBPB) и использование специальных MSR, которые контролируют прогнозирование. Эти действия часто выполняются гипервизором во время VM-переключателей после сохранения регистров.

Неизменяемые реестры и безопасность

Некоторые MSR (например, управляющие аутентификацией отладки или серийными номерами процессора) никогда не должны быть доступны гостям. Гипервизор устанавливает растровые карты MSR, чтобы вызвать выход VM на любой доступ, а затем возвращает ошибку или поддельное значение. Это предотвращает утечку информации или повреждение оборудования.

Проблемы и будущие направления

В то время как современные процессоры обеспечивают богатую поддержку виртуализации регистров, проблемы остаются. Одной из основных проблем является увеличение числа MSR, поскольку процессоры добавляют функции - каждая новая MSR может нуждаться в виртуализации, что приводит к более крупным структурам VMCS / VMCB и более медленным коммутаторам контекста. Другая проблема - это гетерогенные вычисления : ядра процессора в большой конфигурации.LITTLE могут иметь разные возможности регистра. Гипервизор должен представлять последовательный интерфейс регистра для виртуальных машин, часто путем захвата и эмуляции функций, которые недоступны на всех ядрах.

Будущее оборудование может включать в себя специализированные аппаратные регистры для виртуализации, такие как «файл регистра виртуализации» на ядро, который автоматически включает в себя вход / выход VM без явного сохранения / восстановления. Кроме того, технологии конфиденциальных вычислений, такие как Intel TDX и AMD SEV, полагаются на шифрование памяти и целостность, но состояние регистрации внутри процессора должно быть защищено от гипервизора. Это требует новых аппаратных механизмов для шифрования значений регистра при их сохранении в память, предотвращая их чтение вредоносным гипервизором.

Заключение

Регистры ЦП являются невоспетыми героями аппаратной виртуализации. Они хранят критическое состояние каждой виртуальной машины, обеспечивают изоляцию через контролируемый доступ и позволяют гипервизору переключаться между виртуальными машинами с минимальными накладными расходами. От регистров общего назначения до управляющих регистров и MSR каждый тип играет определенную роль в поддержании иллюзии выделенного оборудования для каждого гостя. Расширения аппаратной виртуализации, такие как Intel VT-x и AMD-V, сделали управление регистрами более эффективным, введя выделенные структуры, такие как VMCS и VMCB, а также вложенные таблицы страниц, которые выгружают перевод памяти в ЦП. Оптимизация производительности, такая как ленивая экономия / восстановление и управляемые растровыми картами выходы, еще больше уменьшают накладные расходы. Поскольку виртуализация продолжает развиваться в такие сферы, как вложенная виртуализация, конфиденциальные вычисления и гетерогенные платформы, роль регистров станет только более важной. Понимание того, как регистры виртуализированы, важно для любого,