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

Вложенная Виртуализация — это оболочка Hyper-V, имитирующая аппаратные модули виртуализации.Nested virtualization refers to the Hyper-V hypervisor emulating hardware virtualization extensions. Эти эмулированные расширения могут использоваться другим программным обеспечением виртуализации (например, вложенной низкоуровневой оболочкой) для запуска на платформе Hyper-V.These emulated extensions can be used by other virtualization software (e.g. a nested hypervisor) to run on the Hyper-V platform.

Эта возможность доступна только для гостевых секций.This capability is only available to guest partitions. Его необходимо включить для каждой виртуальной машины.It must be enabled per virtual machine. Вложенная виртуализация не поддерживается в корневом разделе Windows.Nested virtualization is not supported in a Windows root partition.

Для определения различных уровней вложенной виртуализации используется следующая терминология:The following terminology is used to define various levels of nested virtualization:

ТерминTerm ОпределениеDefinition
Гипервизор на уровне 0L0 Hypervisor Гипервизор Hyper-V, работающий на физическом оборудовании.The Hyper-V hypervisor running on physical hardware.
Корень L1L1 Root Корневая операционная система Windows.The Windows root operating system.
Гостевая виртуальная машинаL1 Guest Виртуальная машина Hyper-V без вложенной низкоуровневой оболочки.A Hyper-V virtual machine without a nested hypervisor.
Гипервизор L1L1 Hypervisor Вложенная низкоуровневая оболочка, выполняемая на виртуальной машине Hyper-V.A nested hypervisor running within a Hyper-V virtual machine.
Корень L2L2 Root Корневая операционная система Windows, выполняемая в контексте виртуальной машины Hyper-V.A root Windows operating system, running within the context of a Hyper-V virtual machine.
Гостевая виртуальная машинаL2 Guest Вложенная виртуальная машина, работающая в контексте виртуальной машины Hyper-V.A nested virtual machine, running within the context of a Hyper-V virtual machine.

По сравнению с без операционной системы, низкоуровневые оболочки могут привести к значительной регрессии производительности при запуске на виртуальной машине.Compared to bare-metal, hypervisors can incur a significant performance regression when running in a VM. Низкоуровневые оболочки L1 можно оптимизировать для запуска на виртуальной машине Hyper-V с помощью интерфейсов поддержкой, предоставляемых гипервизором уровня 0.L1 hypervisors can be optimized to run in a Hyper-V VM by using enlightened interfaces provided by the L0 hypervisor.

Поддержкой VMCSEnlightened VMCS

На платформах Intel программное обеспечение виртуализации использует структуры данных управления виртуальными машинами (ВМКСС) для настройки поведения процессора, связанного с виртуализацией.On Intel platforms, virtualization software uses virtual machine control data structures (VMCSs) to configure processor behavior related to virtualization. ВМКСС необходимо сделать активным с помощью инструкции ВМПТРЛД и изменить с помощью инструкций ВМРЕАД и VMWRITE.VMCSs must be made active using a VMPTRLD instruction and modified using VMREAD and VMWRITE instructions. Эти инструкции часто являются узким местом для вложенной виртуализации, так как они должны быть эмулироваться.These instructions are often a significant bottleneck for nested virtualization because they must be emulated.

Гипервизор предоставляет функцию "поддержкой VMCS", которую можно использовать для управления поведением процессора, связанным с виртуализацией, с помощью структуры данных в физической памяти гостевого компьютера.The hypervisor exposes an “enlightened VMCS” feature which can be used to control virtualization-related processor behavior using a data structure in guest physical memory. Эту структуру данных можно изменить с помощью обычных инструкций по доступу к памяти, поэтому гипервизору L1 не нужно выполнять инструкции ВМРЕАД или VMWRITE или ВМПТРЛД.This data structure can be modified using normal memory access instructions, thus there is no need for the L1 hypervisor to execute VMREAD or VMWRITE or VMPTRLD instructions.

Гипервизор L1 может использовать поддержкой ВМКСС, записывая 1 в соответствующее поле на странице помощника по виртуальному процессору.The L1 hypervisor may choose to use enlightened VMCSs by writing 1 to the corresponding field in the Virtual Processor Assist Page. Другое поле на странице помощи по вице-президенту управляет активной в данный момент поддержкой VMCS.Another field in the VP assist page controls the currently active enlightened VMCS. Каждый поддержкой VMCS имеет ровно одну страницу (4 КБ) в размере и должен быть изначально обнулен.Each enlightened VMCS is exactly one page (4 KB) in size and must be initially zeroed. Чтобы сделать поддержкой VMCS активным или текущим, не нужно выполнять инструкцию ВМПТРЛД.No VMPTRLD instruction must be executed to make an enlightened VMCS active or current.

После того как низкоуровневая оболочка L1 выполнит запись виртуальной машины с помощью поддержкой VMCS, VMCS считается активной на процессоре.After the L1 hypervisor performs a VM entry with an enlightened VMCS, the VMCS is considered active on the processor. Поддержкой VMCS может быть активен только на одном процессоре одновременно.An enlightened VMCS can only be active on a single processor at the same time. Гипервизор L1 может выполнить инструкцию ВМКЛЕАР, чтобы перевести поддержкой VMCS из активного в неактивное состояние.The L1 hypervisor can execute a VMCLEAR instruction to transition an enlightened VMCS from the active to the non-active state. Любые инструкции ВМРЕАД или VMWRITE, когда активен поддержкой VMCS, не поддерживаются и могут привести к непредвиденному поведению.Any VMREAD or VMWRITE instructions while an enlightened VMCS is active is unsupported and can result in unexpected behavior.

Структура HV_VMX_ENLIGHTENED_VMCS определяет макет поддержкой VMCS.The HV_VMX_ENLIGHTENED_VMCS structure defines the layout of the enlightened VMCS. Все поля, не являющиеся искусственными, сопоставляются с VMCS кодировкой Intel.All non-synthetic fields map to an Intel physical VMCS encoding.

Обнаружение компонентовFeature Discovery

Поддержка интерфейса поддержкой VMCS сообщается с маркером CPUID конечного 0x40000004.Support for an enlightened VMCS interface is reported with CPUID leaf 0x40000004.

Структура поддержкой VMCS имеет версию для учета будущих изменений.The enlightened VMCS structure is versioned to account for future changes. Каждая структура VMCS поддержкой содержит поле Version, о котором сообщает гипервизор на уровне 0.Each enlightened VMCS structure contains a version field, which is reported by the L0 hypervisor.

Сейчас поддерживается только одна версия VMCS.The only VMCS version currently supported is 1.

Очистить поляClean Fields

Гипервизор на уровне 0 может кэшировать части поддержкой VMCS.The L0 hypervisor may choose to cache parts of the enlightened VMCS. Поля поддержкой VMCS Clean определяют, какие части поддержкой VMCS перегружаются из памяти гостя во вложенной записи виртуальной машины.The enlightened VMCS clean fields control which parts of the enlightened VMCS are reloaded from guest memory on a nested VM entry. Гипервизор уровня "L1" должен очищать соответствующие поля VMCS Clean при каждом изменении поддержкой VMCS, в противном случае гипервизор уровня 0 может использовать устаревшую версию.The L1 hypervisor must clear the corresponding VMCS clean fields every time it modifies the enlightened VMCS, otherwise the L0 hypervisor might use a stale version.

Поля очистки просвещение управляются с помощью искусственного поля "Клеанфиелдс" поддержкой VMCS.The clean fields enlightenment is controlled via the synthetic “CleanFields” field of the enlightened VMCS. По умолчанию все биты установлены таким образом, что гипервизору на уровне 0 необходимо перезагрузить соответствующие поля VMCS для каждой вложенной записи виртуальной машины.By default, all bits are set such that the L0 hypervisor must reload the corresponding VMCS fields for each nested VM entry.

Точечный рисунок поддержкой MSREnlightened MSR Bitmap

На платформах Intel низкоуровневая оболочка на уровне 0 эмулирует VMX элементы управления "MSR-Bitmap", которые позволяют программному обеспечению виртуализации управлять тем, какие доступ к MSR создают.On Intel platforms, the L0 hypervisor emulates the VMX “MSR-Bitmap Address” controls that allow virtualization software to control which MSR accesses generate intercepts.

Гипервизор L1 может совместно работать с гипервизором на уровне 0 для повышения эффективности доступа к MSR.The L1 hypervisor may collaborate with the L0 hypervisor to make MSR accesses more efficient. Он может включить точечные рисунки поддержкой MSR, установив соответствующее поле в поддержкой VMCS в значение 1.It can enable enlightened MSR bitmaps by setting the corresponding field in the enlightened VMCS to 1. Если этот параметр включен, гипервизор на уровне 0 не отслеживает изменения в точечных рисунках MSR.When enabled, the L0 hypervisor does not monitor the MSR bitmaps for changes. Вместо этого гипервизор L1 должен сделать соответствующее поле очистки недействительным после внесения изменений в один из битовых рисунков MSR.Instead, the L1 hypervisor must invalidate the corresponding clean field after making changes to one of the MSR bitmaps.

Совместимость с динамическая миграцияCompatibility with Live Migration

Hyper-V может выполнять динамическую миграцию дочернего раздела с одного узла на другой.Hyper-V has the ability to live migrate a child partition from one host to another host. Динамическая миграция обычно прозрачна для дочернего раздела.Live migrations are typically transparent to the child partition. Однако в случае вложенной виртуализации гипервизору L1 может потребоваться учитывать миграцию.However, in the case of nested virtualization, the L1 hypervisor may need to be aware of migrations.

Уведомление динамическая миграцияLive Migration Notification

Гипервизор L1 может запрашивать уведомления при миграции секции.An L1 hypervisor can request to be notified when its partition is migrated. Эта возможность перечислена в CPUID как привилегия "Акцессринлигхтенментконтролс".This capability is enumerated in CPUID as “AccessReenlightenmentControls” privilege. Гипервизор на уровне 0 предоставляет искусственный MSR (HV_X64_MSR_REENLIGHTENMENT_CONTROL), который может использоваться гипервизором L1 для настройки вектора прерываний и целевого процессора.The L0 hypervisor exposes a synthetic MSR (HV_X64_MSR_REENLIGHTENMENT_CONTROL) that may be used by the L1 hypervisor to configure an interrupt vector and target processor. Гипервизор на уровне 0 внедряет прерывание с указанным вектором после каждой миграции.The L0 hypervisor will inject an interrupt with the specified vector after each migration.

#define HV_X64_MSR_REENLIGHTENMENT_CONTROL (0x40000106)

typedef union
{
    UINT64 AsUINT64;
    struct
    {
        UINT64 Vector :8;
        UINT64 RsvdZ1 :8;
        UINT64 Enabled :1;
        UINT64 RsvdZ2 :15;
        UINT64 TargetVp :32;
    };
} HV_REENLIGHTENMENT_CONTROL;

Указанный вектор должен соответствовать фиксированному прерыванию APIC.The specified vector must correspond to a fixed APIC interrupt. Таржетвп указывает индекс виртуального процессора.TargetVp specifies the virtual processor index.

Эмуляция TSCTSC Emulation

Гостевой раздел можно перенести между двумя компьютерами с различной частотой TSC.A guest partition may be live migrated between two machines with different TSC frequencies. В таких случаях может потребоваться повторное вычисление значения Тскскале из ссылки на страницу TSC .In those cases, the TscScale value from the reference TSC page may need to be recomputed.

Гипервизор на уровне 0 при необходимости эмулирует все доступ TSC после миграции до тех пор, пока гипервизор L1 не сможет повторно вычислить значение Тскскале.The L0 hypervisor optionally emulates all TSC accesses after a migration until the L1 hypervisor has had the opportunity to recompute the TscScale value. Гипервизор L1 может использовать эмуляцию TSC путем записи в HV_X64_MSR_TSC_EMULATION_CONTROL MSR.The L1 hypervisor can opt into TSC Emulation by writing to the HV_X64_MSR_TSC_EMULATION_CONTROL MSR. Если вы выбрали, гипервизор на уровне 0 эмулирует доступ к таймеру TSC после миграции.If opted in, the L0 hypervisor emulates TSC accesses after a migration takes place.

Гипервизор L1 может выполнять запросы, если в настоящее время выполняется Эмуляция доступа TSC с помощью HV_X64_MSR_TSC_EMULATION_STATUS MSR.The L1 hypervisor can query if TSC accesses are currently being emulated using the HV_X64_MSR_TSC_EMULATION_STATUS MSR. Например, гипервизор L1 может подписываться на Динамическая миграция уведомлений и запрашивать состояние TSC после получения прерывания миграции.For example, the L1 hypervisor could subscribe to Live Migration notifications and query the TSC status after it receives the migration interrupt. Можно также отключить эмуляцию TSC (после обновления значения Тскскале) с помощью этого MSR.It can also turn off TSC emulation (after it updates the TscScale value) using this MSR.

#define HV_X64_MSR_TSC_EMULATION_CONTROL (0x40000107)
#define HV_X64_MSR_TSC_EMULATION_STATUS (0x40000108)

typedef union
{
    UINT64 AsUINT64;
    struct
    {
        UINT64 Enabled :1;
        UINT64 RsvdZ :63;
    };
 } HV_TSC_EMULATION_CONTROL;

typedef union
{
    UINT64 AsUINT64;
    struct
    {
        UINT64 InProgress : 1;
        UINT64 RsvdP1 : 63;
    };
} HV_TSC_EMULATION_STATUS;

Виртуальный TLBVirtual TLB

Виртуальный TLB, предоставляемый гипервизором, может быть расширен для кэширования переводов из L2 Гпас в Гпас.The virtual TLB exposed by the hypervisor may be extended to cache translations from L2 GPAs to GPAs. Как и в случае с TLB на логическом процессоре, виртуальный TLB является несвязанным кэшем, и эта несогласованность видна гостям.As with the TLB on a logical processor, the virtual TLB is a non-coherent cache, and this non-coherence is visible to guests. Гипервизор предоставляет операции для управления TLB.The hypervisor exposes operations to manage the TLB. На платформах Intel гипервизор на уровне 0 позволяет виртуализировать следующие дополнительные способы управления TLB:On Intel platforms, the L0 hypervisor virtualizes the following additional ways to manage the TLB:

  • Инструкцию ИНВВПИД можно использовать для аннулирования кэшированных сопоставлений ГВА в GPA или SPA.The INVVPID instruction can be used to invalidate cached GVA to GPA or SPA mappings
  • Инструкцию ИНВЕПТ можно использовать для аннулирования кэшированных записанных в кэш-памяти L2 в сопоставлениях GPAThe INVEPT instruction can be used to invalidate cached L2 GPA to GPA mappings

Прямая виртуальная очисткаDirect Virtual Flush

Гипервизор предоставляет вызовы (хвкаллфлушвиртуаладдрессспаце, хвкаллфлушвиртуаладдрессспацеекс, хвкаллфлушвиртуаладдресслисти HvCallFlushVirtualAddressListEx), которые позволяют операционным системам более эффективно управлять виртуальным TLB.The hypervisor exposes hypercalls (HvCallFlushVirtualAddressSpace, HvCallFlushVirtualAddressSpaceEx, HvCallFlushVirtualAddressList, and HvCallFlushVirtualAddressListEx) that allow operating systems to more efficiently manage the virtual TLB. Гипервизор L1 может разрешить гостевым машинам использовать эти вызовы и делегировать ответственность за их обработку в гипервизоре на уровне 0.The L1 hypervisor can choose to allow its guest to use those hypercalls and delegate the responsibility of handling them to the L0 hypervisor. Для этого необходимо использовать поддержкой ВМКСС и страницу помощи по секциям.This requires the use of enlightened VMCSs and of a partition assist page.

При использовании поддержкой ВМКСС виртуальный TLB помечает все кэшированные сопоставления идентификатором поддержкой VMCS, создавшим их.When enlightened VMCSs are in use, the virtual TLB tags all cached mappings with an identifier of the enlightened VMCS that created them. В ответ на вызов прямой виртуальной операции Flush от гостя уровня "гость", гипервизор на уровне 0 делает недействительными все кэшированные сопоставления, созданные с помощью поддержкой ВМКСС, гдеIn response to a direct virtual flush hypercall from a L2 guest, the L0 hypervisor invalidates all cached mappings created by enlightened VMCSs where

  • VmId совпадает с VmId вызывающего объектаThe VmId is the same as the caller’s VmId
  • Либо ВПИД содержится в указанном Процессормаск, либо указана HV_FLUSH_ALL_PROCESSORSEither the VpId is contained in the specified ProcessorMask or HV_FLUSH_ALL_PROCESSORS is specified

КонфигурацияConfiguration

Прямая обработка гипервызовов виртуальной очистки включается следующим образом.Direct handling of virtual flush hypercalls is enabled by:

  1. Установка в поле Нестеденлигхтенментсконтрол. Features. Дирексиперкалл страницы помощника по виртуальному процессору значения 1.Setting the NestedEnlightenmentsControl.Features.DirectHypercall field of the Virtual Processor Assist Page to 1.
  2. Присвоение полю Енлигхтенментсконтрол. Нестедфлушвиртуалхиперкалл поддержкой VMCS значения 1.Setting the EnlightenmentsControl.NestedFlushVirtualHypercall field of an enlightened VMCS to 1.

Прежде чем включать его, гипервизор L1 должен настроить следующие дополнительные поля поддержкой VMCS:Before enabling it, the L1 hypervisor must configure the following additional fields of the enlightened VMCS:

  • ВПИД: идентификатор виртуального процессора, который управляется поддержкой VMCS.VpId: ID of the virtual processor that the enlightened VMCS controls.
  • VmId: идентификатор виртуальной машины, к которой принадлежит VMCS поддержкой.VmId: ID of the virtual machine that the enlightened VMCS belongs to.
  • Партитионассистпаже: физический адрес гостевой системы страницы помощи по секциям.PartitionAssistPage: Guest physical address of the partition assist page.

Гипервизор L1 также должен предоставлять своим гостям следующие возможности через CPUID.The L1 hypervisor must also expose the following capabilities to its guests via CPUID.

  • усехиперкаллфорлокалфлушUseHypercallForLocalFlush
  • усехиперкаллфорремотефлушUseHypercallForRemoteFlush

Страница «помощь секций»Partition Assist Page

Страница помощи по секционированию представляет собой область памяти с согласованным размером страницы, выделяемую гипервизору L1, и ноль перед использованием прямых вызовов для прямого сброса.The partition assist page is a page-size aligned page-size region of memory that the L1 hypervisor must allocate and zero before direct flush hypercalls can be used. Его GPA должен быть записан в соответствующее поле в поддержкой VMCS.Its GPA must be written to the corresponding field in the enlightened VMCS.

struct
{
    UINT32 TlbLockCount;
} VM_PARTITION_ASSIST_PAGE;

Искусственный VM-ExitSynthetic VM-Exit

Если Тлблокккаунт страницы помощника по секционированию не равен нулю, гипервизор на уровне 0 доставляет VM-Exit с искусственной причиной выхода на гипервизор L1 после обработки прямого виртуального вызова Flush.If the TlbLockCount of the caller’s partition assist page is non-zero, the L0 hypervisor delivers a VM-Exit with a synthetic exit reason to the L1 hypervisor after handling a direct virtual flush hypercall.

#define HV_VMX_SYNTHETIC_EXIT_REASON_TRAP_AFTER_FLUSH 0x10000031

Преобразование адреса второго уровняSecond Level Address Translation

Если для гостевого раздела включена вложенная виртуализация, то блок управления памятью (ММУ), предоставляемый секцией, включает поддержку преобразования адресов второго уровня.When nested virtualization is enabled for a guest partition, the memory management unit (MMU) exposed by the partition includes support for second level address translation. Преобразование адресов второго уровня — это возможность, которая может использоваться гипервизором L1 для виртуализации физической памяти.Second level address translation is a capability that can be used by the L1 hypervisor to virtualize physical memory. При использовании некоторые адреса, которые будут считаться физическими адресами гостя (Гпас), обрабатываются как физические гостевые адреса уровня "гость" (L2 Гпас) и преобразуются в Гпас путем прохода по набору структур подкачки.When in use, certain addresses that would be treated as guest physical addresses (GPAs) are treated as L2 guest physical addresses (L2 GPAs) and translated to GPAs by traversing a set of paging structures.

Гипервизор L1 может решить, как и где использовать адресные пространства второго уровня.The L1 hypervisor can decide how and where to use second level address spaces. Адресное пространство второго уровня определяется гостевым идентификатором 64-разрядного идентификатора.Each second level address space is identified by a guest defined 64-bit ID value. На платформах Intel это значение совпадает с адресом таблицы EPT PML4.On Intel platforms, this value is the same as the address of the EPT PML4 table.

СовместимостьCompatibility

На платформах Intel эта функция преобразования адресов второго уровня, предоставляемая гипервизором, обычно совместима с поддержкой VMX для преобразования адресов.On Intel platforms, the second level address translation capability exposed by the hypervisor is generally compatible with VMX support for address translation. Однако существуют следующие отличия, наблюдаемые в гостевой системе:However, the following guest-observable differences exist:

  • На внутреннем уровне гипервизор может использовать таблицы теневых страниц, которые преобразуют Гпас L2 в одностраничные приложения.Internally, the hypervisor may use shadow page tables that translate L2 GPAs to SPAs. В таких реализациях эти таблицы теневых страниц отображаются на программное обеспечение как крупные Тлбс.In such implementations, these shadow page tables appear to software as large TLBs. Однако некоторые различия могут быть наблюдаемыми.However, several differences may be observable. Во-первых, таблицы теневых страниц могут совместно использоваться двумя виртуальными процессорами, в то время как традиционные Тлбс являются структурами процессора и являются независимыми.First, shadow page tables can be shared between two virtual processors, whereas traditional TLBs are per-processor structures and are independent. Этот общий доступ может быть видимым, так как доступ к странице с помощью одного виртуального процессора может заполнить запись таблицы теневых страниц, которая впоследствии используется другим виртуальным процессором.This sharing may be visible because a page access by one virtual processor can fill a shadow page table entry that is subsequently used by another virtual processor.
  • Некоторые реализации гипервизора могут использовать внутреннюю защиту таблиц гостевых страниц для отложенной записи ММУ сопоставлений из внутренних структур данных (например, таблиц теневых страниц).Some hypervisor implementations may use internal write protection of guest page tables to lazily flush MMU mappings from internal data structures (for example, shadow page tables). Эта архитектура невидима для гостей, так как операции записи в эти таблицы будут прозрачно обработаны гипервизором.This is architecturally invisible to the guest because writes to these tables will be handled transparently by the hypervisor. Однако записи, выполненные на базовых страницах GPA другими секциями или устройствами, могут не активировать соответствующую запись TLB.However, writes performed to the underlying GPA pages by other partitions or by devices may not trigger the appropriate TLB flush.
  • В некоторых реализациях гипервизора ошибка страницы второго уровня ("нарушение EPT") может привести к недействительности кэшированных сопоставлений.On some hypervisor implementations, a second level page fault (“EPT violation”) might not invalidate cached mappings.

Очистки TLB второго уровня поддержкойEnlightened Second Level TLB Flushes

Гипервизор также поддерживает ряд усовершенствований, позволяющих гостевым службам более эффективно управлять TLB второго уровня.The hypervisor also supports a set of enhancements that enable a guest to manage the second level TLB more efficiently. Эти расширенные операции могут быть взаимозаменяемы с помощью устаревших операций управления TLB.These enhanced operations can be used interchangeably with legacy TLB management operations.

Гипервизор поддерживает следующие вызовы для аннулирования Тлбс:The hypervisor supports the following hypercalls to invalidate TLBs:

ГипервызоваHypercall ОписаниеDescription
хвкаллфлушгуестфисикаладдрессспацеHvCallFlushGuestPhysicalAddressSpace аннулирует кэшированные GPA-приложения уровня "кэш 2" в сопоставлениях GPA в пределах адресного пространства второго уровня.invalidates cached L2 GPA to GPA mappings within a second level address space.
хвкаллфлушгуестфисикаладдресслистHvCallFlushGuestPhysicalAddressList аннулирует кэшированные GPA-приложения ГВА/L2 в сопоставлениях GPA в пределах области адресов второго уровня.invalidates cached GVA / L2 GPA to GPA mappings within a portion of a second level address space.

Вложенные исключения виртуализацииNested Virtualization Exceptions

Низкоуровневая оболочка L1 может использовать для объединения исключений виртуализации в классе Exception с ошибкой страницы.The L1 hypervisor can opt in to combining virtualization exceptions in the page fault exception class. Гипервизор уровня 0 объявляет о поддержке этой енлигхтмент в функции виртуализации, вложенной в гипервизор, на конечном языке.The L0 hypervisor advertises support for this enlightment in the Hypervisor Nested Virtualization Features CPUID leaf.

Эту просвещение можно включить, задав для Виртуализатионексцептион значение "1" в HV_NESTED_ENLIGHTENMENTS_CONTROL структуре данных на странице помощи виртуального процессора.This enlightenment can be enabled by setting VirtualizationException to “1” in HV_NESTED_ENLIGHTENMENTS_CONTROL data structure in the Virtual Processor Assist Page.

Вложенная программа MSRs для виртуализацииNested Virtualization MSRs

Регистр индекса вложенного президентаNested VP Index Register

Низкоуровневая оболочка L1 предоставляет MSR, который сообщает о базовом индексе президента текущего процессора.The L1 hypervisor exposes a MSR that reports the current processor's underlying VP index.

Адрес MSRMSR address Имя регистраRegister Name ОписаниеDescription
0x400010020x40001002 HV_X64_MSR_NESTED_VP_INDEXHV_X64_MSR_NESTED_VP_INDEX В вложенном корневом разделе сообщает о базовом индексе президента текущего процессора.In a nested root partition, reports the current processor's underlying VP index.

Вложенные Синик MSRsNested SynIC MSRs

В вложенном корневом разделе в следующей версии MSRs разрешается доступ к соответствующей Синик MSRS основной низкоуровневой оболочки.In a nested root partition, the following MSRs allow access to the corresponding SynIC MSRs of the base hypervisor.

Чтобы найти индекс базового процессора, вызывающие объекты должны сначала использовать HV_X64_MSR_NESTED_VP_INDEX.To find the index of the underlying processor, callers should first use HV_X64_MSR_NESTED_VP_INDEX.

Адрес MSRMSR address Имя регистраRegister Name Базовый MSRUnderlying MSR
0x400010800x40001080 HV_X64_MSR_NESTED_SCONTROLHV_X64_MSR_NESTED_SCONTROL HV_X64_MSR_SCONTROLHV_X64_MSR_SCONTROL
0x400010810x40001081 HV_X64_MSR_NESTED_SVERSIONHV_X64_MSR_NESTED_SVERSION HV_X64_MSR_SVERSIONHV_X64_MSR_SVERSION
0x400010820x40001082 HV_X64_MSR_NESTED_SIEFPHV_X64_MSR_NESTED_SIEFP HV_X64_MSR_SIEFPHV_X64_MSR_SIEFP
0x400010830x40001083 HV_X64_MSR_NESTED_SIMPHV_X64_MSR_NESTED_SIMP HV_X64_MSR_SIMPHV_X64_MSR_SIMP
0x400010840x40001084 HV_X64_MSR_NESTED_EOMHV_X64_MSR_NESTED_EOM HV_X64_MSR_EOMHV_X64_MSR_EOM
0x400010900x40001090 HV_X64_MSR_NESTED_SINT0HV_X64_MSR_NESTED_SINT0 HV_X64_MSR_SINT0HV_X64_MSR_SINT0
0x400010910x40001091 HV_X64_MSR_NESTED_SINT1HV_X64_MSR_NESTED_SINT1 HV_X64_MSR_SINT1HV_X64_MSR_SINT1
0x400010920x40001092 HV_X64_MSR_NESTED_SINT2HV_X64_MSR_NESTED_SINT2 HV_X64_MSR_SINT2HV_X64_MSR_SINT2
0x400010930x40001093 HV_X64_MSR_NESTED_SINT3HV_X64_MSR_NESTED_SINT3 HV_X64_MSR_SINT3HV_X64_MSR_SINT3
0x400010940x40001094 HV_X64_MSR_NESTED_SINT4HV_X64_MSR_NESTED_SINT4 HV_X64_MSR_SINT4HV_X64_MSR_SINT4
0x400010950x40001095 HV_X64_MSR_NESTED_SINT5HV_X64_MSR_NESTED_SINT5 HV_X64_MSR_SINT5HV_X64_MSR_SINT5
0x400010960x40001096 HV_X64_MSR_NESTED_SINT6HV_X64_MSR_NESTED_SINT6 HV_X64_MSR_SINT6HV_X64_MSR_SINT6
0x400010970x40001097 HV_X64_MSR_NESTED_SINT7HV_X64_MSR_NESTED_SINT7 HV_X64_MSR_SINT7HV_X64_MSR_SINT7
0x400010980x40001098 HV_X64_MSR_NESTED_SINT8HV_X64_MSR_NESTED_SINT8 HV_X64_MSR_SINT8HV_X64_MSR_SINT8
0x400010990x40001099 HV_X64_MSR_NESTED_SINT9HV_X64_MSR_NESTED_SINT9 HV_X64_MSR_SINT9HV_X64_MSR_SINT9
0x4000109A0x4000109A HV_X64_MSR_NESTED_SINT10HV_X64_MSR_NESTED_SINT10 HV_X64_MSR_SINT10HV_X64_MSR_SINT10
0x4000109B0x4000109B HV_X64_MSR_NESTED_SINT11HV_X64_MSR_NESTED_SINT11 HV_X64_MSR_SINT11HV_X64_MSR_SINT11
0x4000109C0x4000109C HV_X64_MSR_NESTED_SINT12HV_X64_MSR_NESTED_SINT12 HV_X64_MSR_SINT12HV_X64_MSR_SINT12
0x4000109D0x4000109D HV_X64_MSR_NESTED_SINT13HV_X64_MSR_NESTED_SINT13 HV_X64_MSR_SINT13HV_X64_MSR_SINT13
0x4000109E0x4000109E HV_X64_MSR_NESTED_SINT14HV_X64_MSR_NESTED_SINT14 HV_X64_MSR_SINT14HV_X64_MSR_SINT14
0x4000109F0x4000109F HV_X64_MSR_NESTED_SINT15HV_X64_MSR_NESTED_SINT15 HV_X64_MSR_SINT15HV_X64_MSR_SINT15