Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Гиперклюс HvCallFlushVirtualAddressList отменяет части виртуальной подсистемы балансировки нагрузки, принадлежащую указанному адресном пространству.
Архитектура: только x64.
Интерфейс
HV_STATUS
HvCallFlushVirtualAddressList(
_In_ HV_ADDRESS_SPACE_ID AddressSpace,
_In_ HV_FLUSH_FLAGS Flags,
_In_ UINT64 ProcessorMask,
_Inout_ UINT32* GvaCount,
_In_reads_(*GvaCount) const HV_GVA* GvaRangeList
);
Операция недопустимости виртуальной балансировки нагрузки действует на одном или нескольких процессорах.
Если у гостя есть знания о том, какие процессоры могут потребоваться промыть, он может указать маску процессора. Каждый бит маски соответствует индексу виртуального процессора. Например, маска 0x0000000000000051 указывает, что гипервизор должен сбрасывать только TLB виртуальных процессоров 0, 4 и 6.
Для изменения поведения очистки можно использовать следующие флаги:
- HV_FLUSH_ALL_PROCESSORS указывает, что операция должна применяться ко всем виртуальным процессорам в разделе. Если этот флаг задан, параметр ProcessorMask игнорируется.
- HV_FLUSH_ALL_VIRTUAL_ADDRESS_SPACES указывает, что операция должна применяться ко всем виртуальным адресным пространствам. Если этот флаг задан, параметр AddressSpace игнорируется.
- HV_FLUSH_NON_GLOBAL_MAPPINGS_ONLY не имеет смысла для этого вызова и рассматривается как недопустимый вариант.
Все остальные флаги зарезервированы и должны иметь значение нулю.
Этот вызов принимает список диапазонов GVA. Каждый диапазон имеет базовый GVA. Так как очистки выполняются с степенью детализации страницы, для определения длины диапазона можно использовать 12 битов GVA. Эти биты кодируют количество дополнительных страниц (за пределами начальной страницы) в диапазоне. Это позволяет каждой записи кодировать диапазон от 1 до 4096 страниц.
GVA, который попадает в сопоставление "большой страницы" (2 МБ или 4 МБ), приведет к удалению всей большой страницы из виртуальной подсистемы балансировки нагрузки.
Этот вызов гарантирует, что к элементу управления временем возвращается вызывающей стороне, наблюдаемые эффекты всех сбросов на указанные виртуальные процессоры произошли.
Недопустимые виртуальные сети (те, которые указывают адреса за пределами пространства GVA секции), игнорируются.
Если для балансировки нагрузки целевого виртуального процессора требуется очистка, и этот виртуальный процессор препятствует очистке TLB, виртуальный процессор вызывающего сервера приостановлен. Если очистки TLB больше не препятствуют, виртуальный процессор "неуправляемый" и гиперклюс будет перезаписывается.
Код вызова
0x0003 (Республика)
Входные параметры
| Имя | Смещение | Size | Предоставленная информация |
|---|---|---|---|
AddressSpace |
0 | 8 | Указывает идентификатор адресного пространства (CR3). |
Flags |
8 | 8 | Набор битов флагов, изменяющих операцию очистки. |
ProcessorMask |
16 | 8 | Маска процессора, указывающая, какие процессоры должны влиять на операцию очистки. |
Элемент Input List
| Имя | Смещение | Size | Предоставленная информация |
|---|---|---|---|
GvaRange |
0 | 8 | Диапазон GVA |