Обнаружение компонентов и интерфейсовFeature and Interface Discovery

Гостевое программное обеспечение взаимодействует с гипервизором с помощью различных механизмов.Guest software interacts with the hypervisor through a variety of mechanisms. Многие из этих зеркал представляют традиционные механизмы, используемые программным обеспечением для взаимодействия с базовым процессором.Many of these mirror the traditional mechanisms used by software to interact with the underlying processor. Таким образом, эти механизмы относятся к архитектуре.As such, these mechanisms are architecture-specific. В архитектуре x64 используются следующие механизмы.On the x64 architecture, the following mechanisms are used:

  • Инструкция CPUID — используется для статических сведений о функции и версии.CPUID instruction – Used for static feature and version information.
  • MSRs (регистры, зависящие от модели) — используется для значений состояния и элементов управления.MSRs (model-specific registers) – Used for status and control values.
  • Зарегистрированные в памяти регистры — используются для значений состояния и элементов управления.Memory-mapped registers – Used for status and control values.
  • Прерывания процессора — используются для асинхронных событий, уведомлений и сообщений.Processor interrupts – Used for asynchronous events, notifications and messages.

В дополнение к этим интерфейсам, зависящим от архитектуры, гипервизор предоставляет простой процедурный интерфейс, реализуемый с помощью гипервызовов.In addition to these architecture-specific interfaces, the hypervisor provides a simple procedural interface implemented with hypercalls.

Обнаружение гипервизораHypervisor Discovery

Перед использованием любых интерфейсов гипервизора программное обеспечение должно сначала определить, работает ли оно в виртуализованной среде.Before using any hypervisor interfaces, software should first determine whether it’s running within a virtualized environment. На платформах x64, соответствующих этой спецификации, это делается путем выполнения инструкции CPUID с входным значением (EAX) 1.On x64 platforms that conform to this specification, this is done by executing the CPUID instruction with an input (EAX) value of 1. При исполнении код должен проверить бит 31 в регистре ECX ("бит наличия гипервизора").Upon execution, code should check bit 31 of register ECX (the “hypervisor present bit”). Если этот бит установлен, гипервизор находится в наличии.If this bit is set, a hypervisor is present. В невиртуализованной среде бит будет очищен.In a non-virtualized environment, the bit will be clear.

CPUID.01h.ECX:31 // if set, virtualization present

Если задано значение "бит наличия гипервизора", дополнительные сведения о соответствующем гипервизоре и его возможностях см. в дополнительном запросе CPUID листья.If the “hypervisor present bit” is set, additional CPUID leafs can be queried for more information about the conformant hypervisor and its capabilities. Два таких листья гарантированно становятся доступными: 0x40000000 и 0x40000001 .Two such leaves are guaranteed to be available: 0x40000000 and 0x40000001. Также могут быть доступны впоследствии пронумерованные листья.Subsequently-numbered leaves may also be available.

Покидает стандартный идентификатор CPUID гипервизораStandard Hypervisor CPUID Leaves

Когда конечный объект в 0x40000000 запрашивается, низкоуровневая оболочка возвращает информацию, которая предоставляет максимальный номер конечной панели CPUID и подпись идентификатора поставщика.When the leaf at 0x40000000 is queried, the hypervisor will return information that provides the maximum hypervisor CPUID leaf number and a vendor ID signature.

РегистрацияRegister Предоставленные сведенияInformation Provided
EAXEAX Максимальное входное значение для данных CPUID гипервизораThe maximum input value for hypervisor CPUID information
EBXEBX Подпись идентификатора поставщика гипервизораHypervisor Vendor ID Signature
ECXECX Подпись идентификатора поставщика гипервизораHypervisor Vendor ID Signature
EDXEDX Подпись идентификатора поставщика гипервизораHypervisor Vendor ID Signature

Если конечный объект в 0x40000001 запрашивается, он возвращает значение, представляющее идентификацию интерфейса гипервизора, нейтрального для поставщика.If the leaf at 0x40000001 is queried, it will return a value representing a vendor-neutral hypervisor interface identification. Это определяет семантику покидает 0x4000002 0x400000FF .This determines the semantics of the leaves from 0x4000002 through 0x400000FF.

РегистрацияRegister Предоставленные сведенияInformation Provided
EAXEAX Сигнатура интерфейса гипервизора.Hypervisor Interface Signature.
EBXEBX ЗарезервированоReserved
ECXECX ЗарезервированоReserved
EDXEDX ЗарезервированоReserved

Эти два листья позволяют гостевым компьютерам запрашивать идентификатор и интерфейс поставщика низкоуровневой оболочки.These two leaves allow the guest to query the hypervisor vendor ID and interface independently. Идентификатор поставщика предоставляется только для информационных и диагностических целей.The vendor ID is provided only for informational and diagnostic purposes. Рекомендуется, чтобы программное обеспечение было основано только на совместимости с сигнатурой интерфейса, полученной через конечный объект 0x40000001 .It is recommended that software only base compatibility decisions on the interface signature reported through leaf 0x40000001.

Листья CPUID низкоуровневой оболочки (Майкрософт)Microsoft Hypervisor CPUID Leaves

В низкоуровневых оболочках, соответствующих интерфейсу CPUID низкоуровневой оболочки (Майкрософт), 0x40000000 и 0x40000001 конечные регистры будут иметь следующие значения.On hypervisors conforming to the Microsoft hypervisor CPUID interface, the 0x40000000 and 0x40000001 leaf registers will have the following values.

Конечный диапазон для низкоуровневой оболочки CPUID — 0x40000000Hypervisor CPUID Leaf Range - 0x40000000

EAX определяет максимальный конечный лист CPUID гипервизора.EAX determines the maximum hypervisor CPUID leaf. EBX-EDX содержит подпись идентификатора поставщика гипервизора.EBX-EDX contain the hypervisor vendor ID signature. Подпись идентификатора поставщика следует использовать только в целях создания отчетов и диагностики.The vendor ID signature should be used only for reporting and diagnostic purposes.

РегистрацияRegister Предоставленные сведенияInformation Provided
EAXEAX Максимальное входное значение для данных CPUID гипервизора.The maximum input value for hypervisor CPUID information. На низкоуровневых оболочках Майкрософт это будет по крайней мере 0x40000005 .On Microsoft hypervisors, this will be at least 0x40000005.
EBXEBX 0x7263694D — "MICR"0x7263694D—“Micr”
ECXECX 0x666F736F — "ософ"0x666F736F—“osof”
EDXEDX 0x76482074 — "t HV"0x76482074—“t Hv”

Поставщик гипервизора — идентификация нейтрального интерфейса — 0x40000001Hypervisor Vendor-Neutral Interface Identification - 0x40000001

EAX содержит подпись идентификации интерфейса гипервизора.EAX contains the hypervisor interface identification signature. Это определяет семантику покидает 0x40000002 0x400000FF .This determines the semantics of the leaves from 0x40000002 through 0x400000FF.

РегистрацияRegister Предоставленные сведенияInformation Provided
EAXEAX 0x31237648 — «HV 1»0x31237648—“Hv#1”
EBXEBX ЗарезервированоReserved
ECXECX ЗарезервированоReserved
EDXEDX ЗарезервированоReserved

Низкоуровневые оболочки, которым соответствует интерфейс "HV 1", также предоставляют по крайней мере следующие листья.Hypervisors conforming to the “Hv#1” interface also provide at least the following leaves.

Удостоверение системы гипервизора — 0x40000002Hypervisor System Identity - 0x40000002

РегистрацияRegister BitsBits Предоставленные сведенияInformation Provided
EAXEAX Номер построенияBuild Number
EBXEBX 31-1631-16 Основная версияMajor Version
15-015-0 Вспомогательная версияMinor Version

Идентификация функции гипервизора — 0x40000003Hypervisor Feature Identification - 0x40000003

EAX и EBX указывают, какие функции доступны для секции на основе текущих привилегий раздела.EAX and EBX indicate which features are available to the partition based upon the current partition privileges.

РегистрацияRegister BitsBits Предоставленные сведенияInformation Provided
EAXEAX Соответствует битам 31-0 HV_PARTITION_PRIVILEGE_MASKCorresponds to bits 31-0 of HV_PARTITION_PRIVILEGE_MASK
EBXEBX Соответствует битам 63-32 HV_PARTITION_PRIVILEGE_MASKCorresponds to bits 63-32 of HV_PARTITION_PRIVILEGE_MASK
ECXECX ЗарезервированоReserved
EDXEDX 00 Нерекомендуемый (ранее указанная доступность инструкции MWAIT)Deprecated (previously indicated availability of the MWAIT instruction)
11 Доступна поддержка отладки в гостевой системеGuest debugging support is available
22 Доступна поддержка системного монитораPerformance Monitor support is available
33 Доступна поддержка событий динамического секционирования физического процессораSupport for physical CPU dynamic partitioning events is available
44 Доступна поддержка передачи блока входных параметров вызова через регистры XMM.Support for passing hypercall input parameter block via XMM registers is available
55 Доступна поддержка состояния простоя виртуальной гостевой системыSupport for a virtual guest idle state is available
66 Доступна поддержка состояния сна гипервизораSupport for hypervisor sleep state is available
77 Доступна поддержка запросов расстояний NUMASupport for querying NUMA distances is available
88 Доступна поддержка определения частот таймераSupport for determining timer frequencies is available
99 Доступна поддержка внедрения искусственных проверок компьютераSupport for injecting synthetic machine checks is available
1010 Доступна поддержка гостевых аварийных сбоев MSRsSupport for guest crash MSRs is available
1111 Доступна поддержка отладки MSRsSupport for debug MSRs is available
1212 Доступна поддержка НПИЕПSupport for NPIEP is available
1313 дисаблехипервисораваилаблеDisableHypervisorAvailable
1414 екстендедгваранжесфорфлушвиртуаладдресслиставаилаблеExtendedGvaRangesForFlushVirtualAddressListAvailable
1515 Доступна поддержка возврата выходных данных вызова через регистры XMM.Support for returning hypercall output via XMM registers is available
1616 ЗарезервированоReserved
1717 синтполлингмодеаваилаблеSintPollingModeAvailable
1818 хиперкаллмсрлоккаваилаблеHypercallMsrLockAvailable
1919 Использовать прямые искусственные таймерыUse direct synthetic timers
2020 Поддержка регистра PAT доступна для VSMSupport for PAT register available for VSM
2121 Поддержка бндкфгс Register доступна для VSMSupport for bndcfgs register available for VSM
2222 ЗарезервированоReserved
2323 Поддержка доступного искусственного времени неостановленный таймерSupport for synthetic time unhalted timer available
25-2425-24 ЗарезервированоReserved
2626 Поддерживаемая функция последней ветви (ЛБР) IntelIntel’s Last Branch Record (LBR) feature supported
31-2731-27 ЗарезервированоReserved

Рекомендации по реализации — 0x40000004Implementation Recommendations - 0x40000004

Указывает, какие поведения гипервизор рекомендует операционной системе реализовать для оптимальной производительности.Indicates which behaviors the hypervisor recommends the OS implement for optimal performance.

РегистрацияRegister BitsBits Предоставленные сведенияInformation Provided
EAXEAX 00 Рекомендовать использование гипервызовов для ключей адресного пространства вместо MOV к инструкции CR3.Recommend using hypercall for address space switches rather than MOV to CR3 instruction.
11 Рекомендуется использовать вызов по требованию для очистки на локальном TLB, а не ИНВЛПГ или MOV — в инструкциях CR3.Recommend using hypercall for local TLB flushes rather than INVLPG or MOV to CR3 instructions.
22 Рекомендовать использование гипервызовов для удаленных операций очистки TLB, а не прерываний между процессорами.Recommend using hypercall for remote TLB flushes rather than inter-processor interrupts.
33 Рекомендуется использовать MSRs для доступа к APIC registers ЕОИ, интеллектуального и ТПР, а не их аналоги, сопоставленные с памятью.Recommend using MSRs for accessing APIC registers EOI, ICR and TPR rather than their memory-mapped counterparts.
44 Рекомендуется использовать MSR, предоставленный гипервизором, для запуска сброса системы.Recommend using the hypervisor-provided MSR to initiate a system RESET.
55 Рекомендуется использовать неявное время для этой секции.Recommend using relaxed timing for this partition. При использовании виртуальной машины следует отключить все тайм-ауты таймера, которые полагаются на своевременную доставку внешних прерываний.If used, the VM should disable any watchdog timeouts that rely on the timely delivery of external interrupts.
66 Рекомендуется использовать повторное сопоставление DMA.Recommend using DMA remapping.
77 Рекомендуется использовать повторное сопоставление прерываний.Recommend using interrupt remapping.
88 Зарезервировано.Reserved.
99 Рекомендовать нерекомендуемый Аутоеои.Recommend deprecating AutoEOI.
1010 Рекомендуется использовать вызов Синсетикклустерипи.Recommend using SyntheticClusterIpi hypercall.
1111 Рекомендуется использовать новый интерфейс Експроцессормаскс.Recommend using the newer ExProcessorMasks interface.
1212 Указывает, что низкоуровневая оболочка вложена в раздел Hyper-V.Indicates that the hypervisor is nested within a Hyper-V partition.
1313 Рекомендуется использовать INT для системных вызовов МБЕК.Recommend using INT for MBEC system calls.
1414 Рекомендовать вложенную низкоуровневую оболочку с помощью интерфейса поддержкой VMCS.Recommend a nested hypervisor using the enlightened VMCS interface. Также указывает, что могут быть доступны дополнительные вложенные просветлений (см. конечный 0x4000000A).Also indicates that additional nested enlightenments may be available (see leaf 0x4000000A).
1515 Усесинцедтимелине — указывает, что Секция должна использовать смещение QueryPerformanceCounter, предоставляемое корневым разделом.UseSyncedTimeline – Indicates the partition should consume the QueryPerformanceCounter bias provided by the root partition.
1616 ЗарезервированоReserved
1717 Уседиректлокалфлушентире — указывает, что гостевой компьютер должен переключать CR4. ПЖЕ очистить весь TLB, так как это более производительно, чем вызов метода OnCall.UseDirectLocalFlushEntire – Indicates the guest should toggle CR4.PGE to flush the entire TLB, as this is more performant than making a hypercall.
1818 Нононарчитектуралкорешаринг — указывает, что общий доступ к базовым файлам невозможен.NoNonArchitecturalCoreSharing - indicates that core sharing is not possible. Это можно использовать в качестве оптимизации, чтобы избежать издержек на производительность СТИБП.This can be used as an optimization to avoid the performance overhead of STIBP.
31-1931-19 ЗарезервированоReserved
EBXEBX Рекомендуемое число попыток повторного выполнения спин-блокировки перед уведомлением гипервизора об ошибках.Recommended number of attempts to retry a spinlock failure before notifying the hypervisor about the failures. 0xFFFFFFFF указывает, что никогда не будет уведомлять.0xFFFFFFFF indicates never notify.
ECXECX 6-06-0 Имплементедфисикаладдрессбитс — сообщает ширину физического адреса (МАКСФЯДДР), сообщаемую физическими процессорами системы.ImplementedPhysicalAddressBits – Reports the physical address width (MAXPHYADDR) reported by the system’s physical processors. Если все биты содержат значение 0, эта функция не поддерживается.If all bits contain 0, the feature is not supported. Обратите внимание, что полученное значение является фактическим числом физических битов адресов, а не битовой позицией, используемой для представления этого числа.Note that the value reported is the actual number of physical address bits, and not the bit position used to represent that number.
31-731-7 ЗарезервированоReserved
EDXEDX ЗарезервированоReserved

Ограничения реализации гипервизора — 0x40000005Hypervisor Implementation Limits - 0x40000005

Описывает ограничения масштабирования, поддерживаемые в текущей реализации гипервизора.Describes the scale limits supported in the current hypervisor implementation. Если какое-либо значение равно нулю, гипервизор не предоставляет соответствующую информацию; в противном случае они имеют эти значения.If any value is zero, the hypervisor does not expose the corresponding information; otherwise, they have these meanings.

РегистрацияRegister Предоставленные сведенияInformation Provided
EAXEAX Максимальное число поддерживаемых виртуальных процессоровThe maximum number of virtual processors supported
EBXEBX Максимальное число поддерживаемых логических процессоровThe maximum number of logical processors supported
ECXECX Максимальное число физических векторов прерываний, доступных для повторного сопоставления прерываний.The maximum number of physical interrupt vectors available for interrupt remapping.
EDXEDX ЗарезервированоReserved

Функции оборудования реализации — 0x40000006Implementation Hardware Features - 0x40000006

Указывает, какие аппаратные функции были обнаружены и в настоящее время используются гипервизором.Indicates which hardware-specific features have been detected and are currently in use by the hypervisor.

РегистрацияRegister BitsBits Предоставленные сведенияInformation Provided
EAXEAX 00 Обнаружена и используется поддержка наложения APIC.Support for APIC overlay assist is detected and in use.
11 Обнаружена и используется поддержка точечных рисунков MSR.Support for MSR bitmaps is detected and in use.
22 Обнаружена и используется поддержка счетчиков производительности архитектуры.Support for architectural performance counters is detected and in use.
33 Обнаружена и используется поддержка преобразования адресов второго уровня.Support for second level address translation is detected and in use.
44 Обнаружена и используется поддержка повторного сопоставления DMA.Support for DMA remapping is detected and in use.
55 Обнаружена и используется поддержка повторного сопоставления прерываний.Support for interrupt remapping is detected and in use.
66 Указывает на наличие в оборудовании средства очистки памяти.Indicates that a memory patrol scrubber is present in the hardware.
77 Защита DMA используется.DMA protection is in use.
88 Запрос ХПЕТ.HPET is requested.
99 Искусственные таймеры являются временными.Synthetic timers are volatile.
31-1031-10 ЗарезервированоReserved
EBXEBX ЗарезервированоReserved
ECXECX ЗарезервированоReserved
EDXEDX ЗарезервированоReserved

Идентификация вложенной функции гипервизора — 0x40000009Nested Hypervisor Feature Identification - 0x40000009

Описывает функции, предоставляемые секции гипервизором при выполнении вложенных.Describes the features exposed to the partition by the hypervisor when running nested. EAX описывает доступ к виртуальной MSRs.EAX describes access to virtual MSRs. EDX описывает доступ к вызовам.EDX describes access to hypercalls.

РегистрацияRegister BitsBits Предоставленные сведенияInformation Provided
EAXEAX 1-01-0 ЗарезервированоReserved
22 акцесссиникрегсAccessSynicRegs
33 ЗарезервированоReserved
44 акцессинтрктрлрегсAccessIntrCtrlRegs
55 акцесшиперкаллмсрсAccessHypercallMsrs
66 акцессвпиндексAccessVpIndex
11-711-7 ЗарезервированоReserved
1212 акцессринлигхтенментконтролсAccessReenlightenmentControls
31-1331-13 ЗарезервированоReserved
EBXEBX ЗарезервированоReserved
ECXECX ЗарезервированоReserved
EDXEDX 3-03-0 ЗарезервированоReserved
44 ксммрегистерсфорфассиперкаллаваилаблеXmmRegistersForFastHypercallAvailable
14-514-5 ЗарезервированоReserved
1515 фассиперкаллаутпутаваилаблеFastHypercallOutputAvailable
1616 ЗарезервированоReserved
1717 синтполлингмодеаваилаблеSintPollingModeAvailable
31-1831-18 ЗарезервированоReserved

Функции вложенной виртуализации гипервизора — 0x4000000AHypervisor Nested Virtualization Features - 0x4000000A

Указывает, какие вложенные оптимизации виртуализации доступны для вложенной низкоуровневой оболочки.Indicates which nested virtualization optimizations are available to a nested hypervisor.

РегистрацияRegister BitsBits Предоставленные сведенияInformation Provided
EAXEAX 7-07-0 Версия VMCS поддержкой (низкая)Enlightened VMCS version (low)
15-815-8 Поддержкой VMCS версия (высокая)Enlightened VMCS version (high)
1616 ЗарезервированоReserved
1717 Указывает поддержку для прямых вызовов функции прямого виртуального сброса.Indicates support for direct virtual flush hypercalls.
1818 Указывает на поддержку гипервызовов Хвфлушгуестфисикаладдрессспаце и Хвфлушгуестфисикаладдресслист.Indicates support for the HvFlushGuestPhysicalAddressSpace and HvFlushGuestPhysicalAddressList hypercalls.
1919 Указывает поддержку для использования точечного рисунка MSR поддержкой.Indicates support for using an enlightened MSR bitmap.
2020 Указывает поддержку объединения исключений виртуализации в классе исключения страницы.Indicates support for combining virtualization exceptions in the page fault exception class.
31-2131-21 ЗарезервированоReserved
EBXEBX ЗарезервированоReserved
ECXECX ЗарезервированоReserved
EDXEDX ЗарезервированоReserved

Управление версиямиVersioning

Сведения о версии гипервизора кодируются на конечном уровне 0x40000002 .The hypervisor version information is encoded in leaf 0x40000002. Предоставляются два номера версии: основная версия и версия службы.Two version numbers are provided: the main version and the service version.

Основная версия включает основной и дополнительный номер версии и номер сборки.The main version includes a major and minor version number and a build number. Они соответствуют номерам выпусков Microsoft Windows.These correspond to Microsoft Windows release numbers. Версия службы описывает изменения, внесенные в основную версию.The service version describes changes made to the main version.

Клиентам настоятельно рекомендуется проверять наличие функций низкоуровневой оболочки с помощью CPUID, 0x40000003 0x40000005 а не путем сравнения с диапазонами версий.Clients are strongly encouraged to check for hypervisor features by using CPUID leaves 0x40000003 through 0x40000005 rather than by comparing against version ranges.