Виртуальные ММУVirtual MMU

Интерфейс виртуальной машины, предоставляемый каждым разделом, включает в себя единицу управления памятью (ММУ).The virtual machine interface exposed by each partition includes a memory management unit (MMU). Виртуальные ММУ, предоставляемые секциями гипервизора, обычно совместимы с существующими Ммус.The virtual MMU exposed by hypervisor partitions is generally compatible with existing MMUs.

Общие сведения о виртуальных ММУVirtual MMU Overview

Виртуальные процессоры предоставляют виртуальную память и виртуальный TLB (буфер для поиска перевода), который кэширует переводы от виртуальных адресов до (гостевых) физических адресов.Virtual processors expose virtual memory and a virtual TLB (translation look-aside buffer), which caches translations from virtual addresses to (guest) physical addresses. Как и в случае с 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 flush the TLB. Гости могут использовать эти операции для удаления потенциально непротиворечивых записей и преобразования виртуальных адресов в прогнозируемые.Guests can use these operations to remove potentially inconsistent entries and make virtual address translations predictable.

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

Виртуальные ММУ, предоставляемые гипервизором, обычно совместимы с физическим ММУ, обнаруженным в процессоре x64.The virtual MMU exposed by the hypervisor is generally compatible with the physical MMU found within an x64 processor. Существуют следующие отличия, наблюдаемые в гостевой системе:The following guest-observable differences exist:

  • CR3. PWT и CR3. Биты ПКД могут не поддерживаться в некоторых реализациях гипервизоров.The CR3.PWT and CR3.PCD bits may not be supported in some hypervisor implementations. В таких реализациях любая попытка гостевой установки этих флагов с помощью инструкции MOV to CR3 или переключателя шлюза задач будет пропущена.On such implementations, any attempt by the guest to set these flags through a MOV to CR3 instruction or a task gate switch will be ignored. Попытки задать эти биты программным путем через Хвсетвпрегистерс или Хвсвитчвиртуаладдрессспаце могут привести к ошибке.Attempts to set these bits programmatically through HvSetVpRegisters or HvSwitchVirtualAddressSpace may result in an error.
  • Элементы PWT и ПКД в записи таблицы конечных страниц (например, PTE для 4-K страниц и ПДЕ для больших страниц) определяют возможность кэширования сопоставленной страницы.The PWT and PCD bits within a leaf page table entry (for example, a PTE for 4-K pages and a PDE for large pages) specify the cacheability of the page being mapped. Биты PAT, PWT и ПКД в неконечных записях таблицы страниц указывают на кэширование таблицы следующей страницы в иерархии.The PAT, PWT, and PCD bits within non-leaf page table entries indicate the cacheability of the next page table in the hierarchy. Некоторые реализации гипервизора могут не поддерживать эти флаги.Some hypervisor implementations may not support these flags. В таких реализациях все обращения к таблице страниц, выполняемые гипервизором, выполняются с помощью атрибутов кэша обратной записи.On such implementations, all page table accesses performed by the hypervisor are done by using write-back cache attributes. Это затрагивает, в частности, доступ и грязные биты, записанные в записи таблицы страниц.This affects, in particular, accessed and dirty bits written to the page table entries. Если гостевая служба устанавливает биты PAT, PWT или ПКД в неконечных записях таблицы страниц, то при доступе виртуального процессора к странице, сопоставленной этой таблицей, может быть создано сообщение "неподдерживаемая функция".If the guest sets the PAT, PWT, or PCD bits within non-leaf page table entries, an “unsupported feature” message may be generated when a virtual processor accesses a page that is mapped by that page table.
  • CR0. Бит отключения компакт-дисков (кэша) может не поддерживаться в некоторых реализациях гипервизоров.The CR0.CD (cache disable) bit may not be supported in some hypervisor implementations. В таких реализациях CR0. Бит компакт-диска должен иметь значение 0.On such implementations, the CR0.CD bit must be set to 0. Любая попытка гостевой установки этого флага с помощью инструкции MOV to CR0 будет пропущена.Any attempt by the guest to set this flag through a MOV to CR0 instruction will be ignored. Попытка установить этот бит программным способом через Хвсетвпрегистерс приведет к ошибке.Attempts to set this bit programmatically through HvSetVpRegisters will result in an error.
  • "PAT" (тип адреса страницы) MSR — это регистрация для каждого президента.The PAT (page address type) MSR is a per-VP register. Однако когда все виртуальные процессоры в секции задают для MSR в разделе PAT одинаковое значение, новый результат превращается в весь раздел.However, when all the virtual processors in a partition set the PAT MSR to the same value, the new effect becomes a partition-wide effect.
  • В целях безопасности и изоляции инструкция ВЫСТ будет виртуализирована так, как ВБИНВД инструкция, с некоторыми отличиями.For reasons of security and isolation, the INVD instruction will be virtualized to act like a WBINVD instruction, with some differences. В целях безопасности вместо этого следует использовать КЛФЛУШ.For security purposes, CLFLUSH should be used instead.

Устаревшие операции управления TLBLegacy TLB Management Operations

Архитектура x64 предоставляет несколько способов управления Тлбсом процессора.The x64 architecture provides several ways to manage the processor’s TLBs. Гипервизоры виртуализованы следующими механизмами:The following mechanisms are virtualized by the hypervisor:

  • Инструкция ИНВЛПГ делает перевод отдельной страницы недействительным из TLB процессора.The INVLPG instruction invalidates the translation for a single page from the processor’s TLB. Если указанный виртуальный адрес изначально был сопоставлен как страница 4-K, перевод этой страницы удаляется из TLB.If the specified virtual address was originally mapped as a 4-K page, the translation for this page is removed from the TLB. Если указанный виртуальный адрес изначально был сопоставлен как "большая страница" (2 МБ или 4 МБ в зависимости от режима ММУ), перевод всей большой страницы удаляется из TLB.If the specified virtual address was originally mapped as a “large page” (either 2 MB or 4 MB, depending on the MMU mode), the translation for the entire large page is removed from the TLB. Инструкция ИНВЛПГ очищает как глобальные, так и неглобальные переводы.The INVLPG instruction flushes both global and non-global translations. Глобальные переводы определяются как те, которые имеют "Глобальный" набор битов в записи таблицы страниц.Global translations are defined as those which have the “global” bit set within the page table entry.
  • Инструкция MOV to CR3 и переключатели задач, изменяющие CR3, делают перевод недействительными для всех неглобальных страниц в TLB процессора.The MOV to CR3 instruction and task switches that modify CR3 invalidate translations for all non-global pages within the processor’s TLB.
  • Инструкция MOV to CR4, которая изменяет CR4. Бит ПЖЕ (включение глобальной страницы), CR4. СВЕРНУТЬ (расширения размера страницы) bit или CR4. Бит PAE (расширения адресов страниц) делает недействительными все переводы (глобальные и неглобальные) в TLB процессора.A MOV to CR4 instruction that modifies the CR4.PGE (global page enable) bit, the CR4.PSE (page size extensions) bit, or CR4.PAE (page address extensions) bit invalidates all translations (global and non-global) within the processor’s TLB.

Обратите внимание, что все эти операции недействительности затрагивают только один процессор.Note that all of these invalidation operations affect only one processor. Чтобы сделать перевод на другие процессоры недействительными, программное обеспечение должно использовать механизм "Прокрутка TLB" на основе программного обеспечения (обычно реализуется с помощью межпроцессных прерываний).To invalidate translations on other processors, software must use a software-based “TLB shoot-down” mechanism (typically implemented by using inter-process interrupts).

Усовершенствования виртуального TLBVirtual TLB Enhancements

Помимо поддержки устаревших механизмов управления TLB, описанных выше, гипервизор также поддерживает ряд усовершенствований, позволяющих гостевым службам более эффективно управлять виртуальным TLB.In addition to supporting the legacy TLB management mechanisms described earlier, the hypervisor also supports a set of enhancements that enable a guest to manage the virtual 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
хвкаллфлушвиртуаладдрессспацеHvCallFlushVirtualAddressSpace Делает недействительными все записи виртуального TLB, принадлежащие заданному адресному пространству.Invalidates all virtual TLB entries that belong to a specified address space.
хвкаллфлушвиртуаладдрессспацеексHvCallFlushVirtualAddressSpaceEx Как и в случае с Хвкаллфлушвиртуаладдрессспаце, в качестве входных данных принимается разреженный вице-президент.Similar to HvCallFlushVirtualAddressSpace, takes a sparse VP set as input.
хвкаллфлушвиртуаладдресслистHvCallFlushVirtualAddressList Делает недействительным часть указанного адресного пространства.Invalidates a portion of the specified address space.
хвкаллфлушвиртуаладдресслистексHvCallFlushVirtualAddressListEx Как и в случае с Хвкаллфлушвиртуаладдресслист, в качестве входных данных принимается разреженный вице-президент.Similar to HvCallFlushVirtualAddressList, takes a sparse VP set as input.

В некоторых системах (с поддержкой виртуализации в оборудовании) устаревшие инструкции по управлению TLB могут выполняться быстрее при недействительности локального или удаленного (перекрестного процессора) TLB.On some systems (those with sufficient virtualization support in hardware), the legacy TLB management instructions may be faster for local or remote (cross-processor) TLB invalidation. Гости, заинтересованные в оптимальной производительности, должны использовать конечный 0x40000004 CPUID, чтобы определить, какие поведения следует реализовать с помощью гипервызовов:Guests who are interested in optimal performance should use the CPUID leaf 0x40000004 to determine which behaviors to implement using hypercalls:

  • Усехиперкаллфораддрессспацесвитч: Если этот флаг установлен, вызывающий объект должен предположить, что быстрее использовать Хвкаллсвитчаддрессспаце для переключения между адресными пространствами.UseHypercallForAddressSpaceSwitch: If this flag is set, the caller should assume that it’s faster to use HvCallSwitchAddressSpace to switch between address spaces. Если этот флаг снят, рекомендуется использовать инструкцию MOV to CR3.If this flag is clear, a MOV to CR3 instruction is recommended.
  • Усехиперкаллфорлокалфлуш. Если этот флаг установлен, вызывающий объект должен предположить, что для записи одной или нескольких страниц из виртуального TLB быстрее использовать вызовы (в отличие от ИНВЛПГ или MOV в CR3).UseHypercallForLocalFlush: If this flag is set, the caller should assume that it’s faster to use hypercalls (as opposed to INVLPG or MOV to CR3) to flush one or more pages from the virtual TLB.
  • Усехиперкаллфорремотефлушандлокалфлушентире. Если этот флаг установлен, вызывающий объект должен предположить, что быстрее использовать вызовы (в отличие от использования созданных гостевыми прерываний) для записи одной или нескольких страниц из виртуального TLB.UseHypercallForRemoteFlushAndLocalFlushEntire: If this flag is set, the caller should assume that it’s faster to use hypercalls (as opposed to using guest-generated inter-processor interrupts) to flush one or more pages from the virtual TLB.

Общие сведения об элементе управления кэшем памятиMemory Cache Control Overview

Гипервизор поддерживает параметры кэширования, определяемые гостевой системой, для страниц, сопоставленных в ГВА пространстве виртуальной машины.The hypervisor supports guest-defined cacheability settings for pages mapped within the guest’s GVA space. Подробное описание доступных параметров кэширования и их значений см. в документации по Intel или AMD.For a detailed description of available cacheability settings and their meanings, refer to the Intel or AMD documentation.

Когда виртуальный процессор обращается к странице через ее ГВА пространство, гипервизор учитывает биты атрибутов кэша (PAT, PWT и ПКД) в записи таблицы гостевой страницы, используемой для отображения страницы.When a virtual processor accesses a page through its GVA space, the hypervisor honors the cache attribute bits (PAT, PWT, and PCD) within the guest page table entry used to map the page. Эти три бита используются в качестве индекса в регистре "PAT" секции (тип адреса страницы) для поиска окончательной настройки кэширования для страницы.These three bits are used as an index into the partition’s PAT (page address type) register to look up the final cacheability setting for the page.

Страницы, доступ к которым осуществляется напрямую через пространство GPA (например, если разбиение по страницам отключено из-за CR0. Элемент PG сброшен) используйте кэширование, определенное Мтррс.Pages accessed directly through the GPA space (for example, when paging is disabled because CR0.PG is cleared) use a cacheability defined by the MTRRs. Если реализация гипервизора не поддерживает виртуальные Мтррс, предполагается возможность кэширования WB.If the hypervisor implementation doesn’t support virtual MTRRs, WB cacheability is assumed.

Смешивание типов кэша между секцией и гипервизоромMixing Cache Types between a Partition and the Hypervisor

Гости должны знать, что гипервизор может получить доступ к некоторым страницам в области GPA.Guests should be aware that some pages within its GPA space may be accessed by the hypervisor. Следующий список, хотя и не является исчерпывающим, предоставляет несколько примеров:The following list, while not exhaustive, provides several examples:

  • страница, содержащая входные или выходные параметры для вызоваpage that contains input or output parameters for a hypercall
  • Все страницы наложения, включая страницу «вызов Синик», страницы СИЕФ и SIM, а также страницы статистикиAll overlay pages including the hypercall page, SynIC SIEF and SIM pages, and stats pages

Гипервизор всегда выполняет доступ к параметрам гипервызовов и страницам наложения с помощью настройки кэширования WB.The hypervisor always performs accesses to hypercall parameters and overlay pages by using the WB cacheability setting.