Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом разделе описывается, как гостевое программное обеспечение обнаруживает наличие гипервизора и запрашивает свои возможности, функции и сведения о версиях с помощью механизмов обнаружения, относящихся к архитектуре.
Обнаружение компонентов и интерфейсов (x64)
Гостевое программное обеспечение взаимодействует с гипервизором с помощью различных механизмов. Многие из них отражают традиционные механизмы, используемые программным обеспечением для взаимодействия с базовым процессором. Таким образом, эти механизмы зависят от архитектуры. В архитектуре x64 используются следующие механизмы:
- Инструкция CPUID — используется для статических функций и сведений о версии.
- MSR (регистры для конкретной модели) — используется для значений состояния и элементов управления.
- Регистры, сопоставленные с памятью, используются для значений состояния и управления.
- Прерывания процессора— используется для асинхронных событий, уведомлений и сообщений.
Помимо этих интерфейсов, зависящих от архитектуры, гипервизор предоставляет простой процедурный интерфейс, реализованный с гипермасштабированием.
Обнаружение гипервизора
Прежде чем использовать интерфейсы гипервизора, программное обеспечение должно сначала определить, работает ли он в виртуализированной среде. На платформах x64, соответствующих этой спецификации, это делается путем выполнения инструкции CPUID со значением входных данных (EAX) 1. При выполнении код должен проверить 31 бит регистра ECX ("гипервизор присутствует"). Если этот бит задан, гипервизор присутствует. В неиртуализированной среде бит будет ясно.
CPUID.01h.ECX:31 // if set, virtualization present
Если задана функция гипервизора, дополнительные конечные листы ЦПП можно запросить дополнительные сведения о соответствующем гипервизоре и его возможностях. Два таких отпуска гарантированно будут доступны: 0x40000000 и 0x40000001. Последующие нумерованные листья также могут быть доступны.
Стандартные листья ЦПП ЦП
При запросе конечного элемента 0x40000000 гипервизор возвращает сведения, предоставляющие максимальный номер конечного номера ЦПП ЦП И Сигнатуру поставщика.
| Register | Предоставленная информация |
|---|---|
| EAX | Максимальное входное значение для сведений О ЦП ЦП гипервизора |
| EBX | Подпись идентификатора поставщика гипервизора |
| ECX | Подпись идентификатора поставщика гипервизора |
| EDX | Подпись идентификатора поставщика гипервизора |
Если конечный объект 0x40000001 запрашивается, он вернет значение, представляющее идентификацию интерфейса гипервизора, нейтрального от поставщика. Это определяет семантику листьев.0x40000020x400000FF
| Register | Предоставленная информация |
|---|---|
| EAX | Подпись интерфейса гипервизора. |
| EBX | Зарезервировано |
| ECX | Зарезервировано |
| EDX | Зарезервировано |
Эти два выхода позволяют гостевым запрашивать идентификатор поставщика гипервизора и интерфейс независимо. Идентификатор поставщика предоставляется только для информационных и диагностических целей. Рекомендуется использовать решения о совместимости программного обеспечения только на основе подписи интерфейса, сообщаемой по листу 0x40000001.
Выходы ЦПД гипервизора Майкрософт
На гипервизорах, соответствующих интерфейсу ЦП ЦП Майкрософт, 0x40000000 регистры и 0x40000001 конечные регистры будут иметь следующие значения.
Конечный диапазон ЦПП ЦПП - 0x40000000
EAX определяет максимальный конечный лист ЦП. EBX-EDX содержит подпись идентификатора поставщика гипервизора. Подпись идентификатора поставщика должна использоваться только для создания отчетов и диагностики.
| Register | Предоставленная информация |
|---|---|
| EAX | Максимальное входное значение для сведений О ЦПП гипервизора. В гипервизорах Майкрософт это будет по крайней мере 0x40000005. |
| EBX | 0x7263694D — "Micr" |
| ECX | 0x666F736F —"osof" |
| EDX | 0x76482074 — "t Hv" |
Идентификация нейтрализуемого поставщика гипервизора — 0x40000001
EAX содержит подпись идентификации интерфейса гипервизора. Это определяет семантику листьев.0x400000020x400000FF
| Register | Предоставленная информация |
|---|---|
| EAX | 0x31237648— "Hv#1" |
| EBX | Зарезервировано |
| ECX | Зарезервировано |
| EDX | Зарезервировано |
Гипервизоры, соответствующие интерфейсу Hv#1, также предоставляют по крайней мере следующие листья.
Удостоверение системы гипервизора — 0x40000002
| Register | Биты | Предоставленная информация |
|---|---|---|
| EAX | Номер сборки | |
| EBX | 31-16 | Основная версия |
| 15-0 | Малая версия |
Идентификация компонентов гипервизора — 0x40000003
EAX и EBX указывают, какие функции доступны секции на основе текущих привилегий секции.
| Register | Биты | Предоставленная информация |
|---|---|---|
| EAX | Соответствует битам 31-0 HV_PARTITION_PRIVILEGE_MASK | |
| EBX | Соответствует битам 63-32 HV_PARTITION_PRIVILEGE_MASK | |
| ECX | 4-0 | Зарезервировано |
| 5 | Invariant Mperf доступен | |
| 6 | Стек тени руководителя доступен | |
| 7 | Доступны архитектурные PMU | |
| 8 | Перехват перехвата исключений доступен | |
| 31-9 | Зарезервировано | |
| EDX | 0 | Не рекомендуется (ранее указывалось на доступность инструкции MWAIT) |
| 1 | Поддержка гостевой отладки доступна | |
| 2 | Поддержка монитора производительности доступна | |
| 3 | Доступна поддержка событий динамического секционирования физических ЦП | |
| 4 | Доступна поддержка передачи блока входных параметров hypercall через регистры XMM | |
| 5 | Доступна поддержка состояния простоя виртуального гостя | |
| 6 | Поддержка состояния спящего режима гипервизора доступна | |
| 7 | Доступна поддержка запросов к расстояниям NUMA | |
| 8 | Доступна поддержка определения частот таймера | |
| 9 | Доступна поддержка внедрения проверок искусственных машин | |
| 10 | Доступна поддержка гостевых msR | |
| 11 | Доступна поддержка отладки MSR | |
| 12 | Доступна поддержка NPIEP | |
| 13 | DisableHypervisorAvailable | |
| 14 | ExtendedGvaRangesForFlushVirtualAddressListAvailable | |
| 15 | Доступна поддержка возврата выходных данных гиперкела через регистры XMM | |
| 16 | Зарезервировано | |
| 17 | SintPollingModeAvailable | |
| 18 | HypercallMsrLockAvailable | |
| 19 | Использование прямых искусственных таймеров | |
| 20 | Поддержка регистрации PAT, доступной для VSM | |
| двадцать один | Поддержка регистрации bndcfgs, доступной для VSM | |
| двадцать два | Зарезервировано | |
| 23 | Поддержка несанкционированного таймера с искусственным временем | |
| 25-24 | Зарезервировано | |
| 26 | Поддерживается функция последней записи ветви (LBR) Intel | |
| 31-27 | Зарезервировано |
Рекомендации по реализации — 0x40000004
Указывает, какое поведение гипервизора рекомендует операционной системе реализовать для оптимальной производительности.
| Register | Биты | Предоставленная информация |
|---|---|---|
| EAX | 0 | Рекомендуется использовать гиперколл для коммутаторов адресного пространства, а не инструкции MOV на CR3. |
| 1 | Рекомендуется использовать гиперколл для локальных сбросов TLB, а не инструкций INVLPG или MOV в CR3. | |
| 2 | Рекомендуется использовать гиперколл для удаленных сбросов TLB, а не межпроцессорных прерываний. | |
| 3 | Рекомендуется использовать MSR для доступа к APIC регистров EOI, ICR и TPR, а не для сопоставленных с памятью коллег. | |
| 4 | Рекомендуется использовать msR с гипервизором для запуска системного сброса. | |
| 5 | Рекомендуется использовать расслабленное время для этой секции. При использовании виртуальная машина должна отключить любое время ожидания наблюдателя, которые зависят от своевременной доставки внешних прерываний. | |
| 6 | Рекомендуется использовать переназначку DMA. | |
| 7 | Рекомендуется использовать повторную обработку прерываний. | |
| 8 | Зарезервировано. | |
| 9 | Рекомендуется не рекомендуется использовать autoEOI. | |
| 10 | Рекомендуется использовать гиперклайл SyntheticClusterIpi. | |
| 11 | Рекомендуется использовать более новый интерфейс ExProcessorMasks. | |
| 12 | Указывает, что гипервизор вложен в Hyper-V секции. | |
| 13 | Рекомендуется использовать INT для системных вызовов MBEC. | |
| 14 | Рекомендуется использовать вложенный гипервизор с помощью просвещенного интерфейса VMCS. Также указывает, что дополнительные вложенные просветления могут быть доступны (см. конечные 0x4000000A). | |
| 15 | UseSyncedTimeline — указывает, что секция должна использовать предвзятость QueryPerformanceCounter, предоставляемую корневой секцией. | |
| 16 | Зарезервировано | |
| 17 | UseDirectLocalFlushEntire — указывает, что гость должен переключить CR4. PGE для очистки всей подсистемы балансировки нагрузки, так как это более производительно, чем создание гиперкалл. | |
| 18 | NoNonArchitecturalCoreSharing — указывает, что общий доступ к ядрам невозможен. Это можно использовать в качестве оптимизации, чтобы избежать затрат на производительность STIBP. | |
| 31-19 | Зарезервировано | |
| EBX | Рекомендуемое количество попыток повторить сбой спинлока перед уведомлением гипервизора о сбоях. 0xFFFFFFFF указывает, что никогда не уведомляется. | |
| ECX | 6-0 | ImplementedPhysicalAddressBits — сообщает о ширине физического адреса (MAXPHYADDR), сообщаемой физическими процессорами системы. Если все биты содержат 0, функция не поддерживается. Обратите внимание, что указанное значение — это фактическое количество битов физического адреса, а не битовое положение, используемое для представления этого числа. |
| 31-7 | Зарезервировано | |
| EDX | Зарезервировано |
Ограничения реализации гипервизора — 0x40000005
Описывает ограничения масштабирования, поддерживаемые в текущей реализации гипервизора. Если любое значение равно нулю, гипервизор не предоставляет соответствующие сведения; в противном случае они имеют эти значения.
| Register | Предоставленная информация |
|---|---|
| EAX | Максимальное число поддерживаемых виртуальных процессоров |
| EBX | Максимальное число поддерживаемых логических процессоров |
| ECX | Максимальное количество векторов физических прерываний, доступных для перемежения прерываний. |
| EDX | Зарезервировано |
Компоненты оборудования реализации — 0x40000006
Указывает, какие аппаратные функции обнаружены и в настоящее время используются гипервизором.
| Register | Биты | Предоставленная информация |
|---|---|---|
| EAX | 0 | Поддержка поддержки наложения APIC обнаруживается и используется. |
| 1 | Поддержка растровых карт MSR обнаруживается и используется. | |
| 2 | Обнаружена и используется поддержка счетчиков производительности архитектуры. | |
| 3 | Поддержка перевода адресов второго уровня обнаруживается и используется. | |
| 4 | Обнаружена и используется поддержка повторного сопоставления DMA. | |
| 5 | Поддержка перемысливания прерываний обнаружена и используется. | |
| 6 | Указывает, что в оборудовании присутствует скруббер патрульного патруля памяти. | |
| 7 | Защита DMA используется. | |
| 8 | Запрашивается HPET. | |
| 9 | Искусственные таймеры являются переменными. | |
| 13-10 | Уровень гипервизора текущего гостя — 0, если он не вложен. | |
| 14 | Обязательный режим физического назначения. | |
| 15 | Используйте VMFUNC для переключателя карты псевдонимов. | |
| 16 | Поддержка ноль аппаратной памяти присутствует. | |
| 17 | Поддержка неограниченного гостя присутствует. | |
| 18 | Поддержка выделения ресурсов (RDT-A, PQOS-A) присутствует. | |
| 19 | Поддержка мониторинга ресурсов (RDT-M, PQOS-M) присутствует. | |
| 20 | Поддержка гостевого виртуального PMU присутствует. | |
| двадцать один | Поддержка гостевой виртуальной LBR присутствует. | |
| двадцать два | Поддержка гостевой виртуальной IPT присутствует. | |
| 23 | Поддержка эмуляции APIC присутствует. | |
| двадцать четыре | Обнаружена таблица ACPI WDAT и используется гипервизором. | |
| 31-25 | Зарезервировано | |
| EBX | Зарезервировано | |
| ECX | Зарезервировано | |
| EDX | Зарезервировано |
Идентификация вложенных функций гипервизора — 0x40000009
Описывает функции, предоставляемые секцией гипервизором при выполнении вложенных объектов. EAX описывает доступ к виртуальным MSR. EDX описывает доступ к гипермасштабированиям.
| Register | Биты | Предоставленная информация |
|---|---|---|
| EAX | 1-0 | Зарезервировано |
| 2 | AccessSynicRegs | |
| 3 | Зарезервировано | |
| 4 | AccessIntrCtrlRegs | |
| 5 | AccessHypercallMsrs | |
| 6 | AccessVpIndex | |
| 11-7 | Зарезервировано | |
| 12 | AccessReenlightenmentControls | |
| 31-13 | Зарезервировано | |
| EBX | Зарезервировано | |
| ECX | Зарезервировано | |
| EDX | 3-0 | Зарезервировано |
| 4 | XmmRegistersForFastHypercallAvailable | |
| 14-5 | Зарезервировано | |
| 15 | FastHypercallOutputAvailable | |
| 16 | Зарезервировано | |
| 17 | SintPollingModeAvailable | |
| 31-18 | Зарезервировано |
Функции вложенной виртуализации гипервизора — 0x4000000A
Указывает, какие вложенные оптимизации виртуализации доступны для вложенного гипервизора.
| Register | Биты | Предоставленная информация |
|---|---|---|
| EAX | 7-0 | Просвещенная версия VMCS (низкая) |
| 15-8 | Просвещенная версия VMCS (высокая) | |
| 16 | Зарезервировано | |
| 17 | Указывает поддержку прямых гипермасштабирования виртуальных потоков. | |
| 18 | Указывает поддержку гипермасштабирования HvCallFlushGuestPhysicalAddressSpace и HvCallFlushGuestGuestPhysicalAddressList (на платформах x64). | |
| 19 | Указывает поддержку использования просвещенного растрового изображения MSR. | |
| 20 | Указывает поддержку объединения исключений виртуализации в классе исключений сбоя страницы. | |
| двадцать один | Указывает поддержку ненулевого значения поля 0x00002802 (GuestIa32DebugCtl) в VMCS. | |
| двадцать два | Указывает поддержку просвещенной подсистемы балансировки нагрузки на платформах AMD. Очистки ASID не влияют на записи TLB, производные от ДНЯО. Гипермасштабирование должно использоваться для недопустимых записей TLB ДНЯО. Также указывает на поддержку гипермасштабирования HvCallFlushGuestGuestPhysicalAddressSpace и HvCallFlushGuestGuestPhysicalAddressList. | |
| 31-21 | Зарезервировано | |
| EBX | 0 | Указывает поддержку полей GuestPerfGlobalCtrl и HostPerfGlobalCtrl в просвещенных VMCS. |
| 31-1 | Зарезервировано | |
| ECX | Зарезервировано | |
| EDX | Зарезервировано |
Управление версиями
Сведения о версии гипервизора кодируются в конечной строке 0x40000002. Предоставляются два номера версий: основная версия и версия службы.
Основная версия включает основной и дополнительный номер версии и номер сборки. Они соответствуют номерам выпуска Microsoft Windows. Версия службы описывает изменения, внесенные в основную версию.
Клиентам настоятельно рекомендуется проверять наличие функций гипервизора с помощью ЦПИД 0x400000030x40000005 , а не сравнивать с диапазонами версий.
Обнаружение компонентов и интерфейсов (ARM64)
В архитектуре ARM64 для обнаружения функций и интерфейсов используются следующие механизмы:
- Запросы HvRegister через HvCallGetVpRegisters — используются для статических функций и сведений о версии.
- Регистры, сопоставленные с памятью, используются для значений состояния и управления.
Помимо этих интерфейсов, зависящих от архитектуры, гипервизор предоставляет простой процедурный интерфейс, реализованный с гипермасштабированием.
Обнаружение гипервизора
Прежде чем использовать большинство интерфейсов гипервизора, программное обеспечение должно сначала определить, работает ли он в виртуализированной среде.
В ARM64 гостевое программное обеспечение может обнаружить гипервизор с помощью стандартного интерфейса SMCCC (Соглашение о вызовах SMC). Обнаружение выполняется с помощью инструкции HVC или SMC с идентификатором 0xC600FF0 функции в X0 (это соответствует 64-разрядному вызову гипервизора для конкретного поставщика, VENDOR_HYP_FUNCTION_CODE_UID). Вызов следует соглашениям SMCCC, включая imm16 из 0. Гипервизор Майкрософт возвращает следующие значения, представляющие GUID 4d32ba58-cd24-4764-8eef-6c7516597024:
| Register | Ценность |
|---|---|
| X0 | 0x4d32ba58 |
| X1 | 0xcd244764 |
| X2 | 0x8eef6c75 |
| X3 | 0x16597024 |
После обнаружения гипервизора гостевое программное обеспечение может запрашивать возможности гипервизора с помощью искусственных регистров с помощью гиперкела HvCallGetVpRegisters . Перед настройкой регистра гостевой ОС можно запросить несколько ключевых регистров, что позволяет выполнять раннее обнаружение функций гипервизора во время загрузки.
Регистры компонентов гипервизора
Платформы ARM64 запрашивают сведения о гипервизоре с помощью синтетических регистров, а не инструкций ЦПID. Эти регистры предоставляют эквивалентные сведения своим аналогам ЦП X64 и получают доступ через HvCallGetVpRegisters. Все регистры функций возвращают 128-разрядные значения.
Удостоверение системы гипервизора — HvRegisterHypervisorVersion
Возвращает сведения о версии, закодированные в 128-разрядном значении. Макет идентичен 0x40000002 конечной 0x40000002 ЦП 64 с значениями регистра x64, упакованными в 128-разрядный результат (EAX в битах 31-0, EBX в битах 63-32, ECX в битах 95-64, EDX в битах 127-96).
Идентификация компонентов гипервизора — HvRegisterPrivilegesAndFeaturesInfo
Эквивалентно 0x40000003 конечной 0x40000003 ЦП 64 ЦП. Указывает, какие функции доступны секции на основе текущих привилегий секции. Возвращает 128-разрядное значение со следующими полями:
| Биты | Предоставленная информация |
|---|---|
| 31-0 | Соответствует битам 31-0 HV_PARTITION_PRIVILEGE_MASK |
| 63-32 | Соответствует битам 63-32 HV_PARTITION_PRIVILEGE_MASK |
| 64 | Доступна поддержка гостевой отладки. |
| 65 | Поддержка монитора производительности доступна. |
| 66 | Доступна поддержка событий динамического секционирования физических ЦП. |
| 67 | Доступна поддержка состояния простоя виртуального гостя. |
| 68 | Доступна поддержка состояния спящего режима гипервизора. |
| 69 | Доступна поддержка запросов расстояний NUMA. |
| 70 | Доступна поддержка определения частот таймера. |
| 71 | Доступна поддержка внедрения проверок синтетических машин. |
| 72 | Доступна поддержка регистров аварийного сбоя гостевых версий. |
| 73 | Зарезервировано. |
| 74 | DisableHypervisorAvailable. |
| 75 | Зарезервировано. |
| 76 | SintPollingModeAvailable. |
| 77 | Используйте прямые искусственные таймеры. |
| 127-78 | Зарезервировано. |
Рекомендации по реализации — HvRegisterFeaturesInfo
Эквивалентно 0x40000004 конечной 0x40000004 ЦП 64 ЦП. Указывает, какое поведение гипервизора рекомендует операционной системе реализовать для оптимальной производительности. Возвращает 128-разрядное значение.
| Биты | Предоставленная информация |
|---|---|
| 0 | UseHvRegisterForReset — в ARM64 всегда имеет значение false (вместо этого секции должны использовать PSCI SYSTEM_RESET). |
| 1 | Рекомендуется использовать расслабленное время для этой секции. При использовании виртуальная машина должна отключить любое время ожидания наблюдателя, которые зависят от своевременной доставки внешних прерываний. |
| 2 | Рекомендуется использовать гиперклайл SyntheticClusterIpi. В ARM64 это значение равно false для корневой секции (которая должна использовать ICC_SGI1R_EL1 напрямую) и значение true для гостевых секций. |
| 3 | Рекомендуется использовать более новый интерфейс ExProcessorMasks. |
| 4 | Указывает, что гипервизор вложен в Hyper-V секции. |
| 5 | Указывает, что секция должна использовать предвзятость QueryPerformanceCounter, предоставляемую корневой секцией. |
| 20-6 | Зарезервировано |
| двадцать один | UseHypercallForMmioAccess |
| двадцать два | UseGpaPinningHypercall |
| 23 | Пробуждение |
| 25-24 | Зарезервировано |
| 26 | MapPartitionEventLogBuffer |
| 31-27 | Зарезервировано |
| 63-32 | Рекомендуемое количество попыток повторить сбой спинлока перед уведомлением гипервизора о сбоях. 0xFFFFFFFF указывает, что никогда не уведомляется. |
| 127-64 | Зарезервировано |
Ограничения реализации гипервизора — HvRegisterImplementationLimitsInfo
Описывает ограничения масштабирования, поддерживаемые в текущей реализации гипервизора. Если любое значение равно нулю, гипервизор не предоставляет соответствующие сведения. Возвращает 128-разрядное значение с макетом, идентичным конечным 0x40000005 ЦП X64, с значениями регистра x64, упакованными в 128-разрядный результат (EAX в битах 31-0, EBX в битах 63-32, ECX в битах 95-64, EDX в битах 127-96).
Функции оборудования реализации — HvRegisterHardwareFeaturesInfo
Эквивалентно 0x40000006 конечной 0x40000006 ЦП 64 ЦП. Указывает, какие аппаратные функции обнаружены и в настоящее время используются гипервизором. Возвращает 128-разрядное значение.
| Биты | Предоставленная информация |
|---|---|
| 0 | Обнаружена и используется поддержка счетчиков производительности архитектуры. |
| 1 | Поддержка перевода адресов второго уровня обнаруживается и используется. |
| 2 | Обнаружена и используется поддержка повторного сопоставления DMA. |
| 3 | Поддержка перемысливания прерываний обнаружена и используется. |
| 4 | Указывает, что в оборудовании присутствует скруббер патрульного патруля памяти. |
| 5 | Защита DMA используется. |
| 6 | Искусственные таймеры являются переменными. |
| 127-7 | Зарезервировано |
Управление версиями
Сведения о версии гипервизора кодируются в HvRegisterHypervisorVersion. Формат соответствует эквиваленту x64.