Hyper-V и производительность. Часть 4 — Набор счетчиков «Hyper-V Hypervisor»

«Hyper-V Hypervisor» — хороший набор счетчиков для начала оценки производительности вашей системы и получения общей информации о том, что и как работает в Hyper-V. Этот набор содержит следующие счетчики.

Logical Processors

Здесь просто считается количество логических процессоров, которыми являются ядра физического процессора (или потоки — при наличии функции Hyper-Threading). Двухпроцессорный четырехъядерный сервер без HT покажет наличие восьми логических процессоров, при включении HT — шестнадцати логических процессоров. В настоящий момент количество логических процессоров жестко фиксируется при загрузке ОС. В будущем планируется реализовать горячее добавление процессоров, что сделает данный счетчик более динамичным

Partitions

Каждая запущенная виртуальная машина работает в некотором контейнере, иначе называемом разделом (Partition, что иногда «переводится» как «партиция»). Если в данный момент не запущено ни одной ВМ — значение счетчика будет равно единице, поскольку основная ОС (Host, Parent) работает в так называемом «корневом» разделе (Root Partition). При запуске каждой виртуальной машины значение будет увеличиваться на единицу. Таким образом, данный счетчик позволяет отследить динамику количества одновременно используемых виртуальных машин.

Total Pages

Для управления виртуальными машинами гипервизор использует некоторый объем памяти. Таблица трансляции памяти виртуальной машины в физическую память, распределение виртуальных процессоров — все эти данные необходимо где-то хранить. Размер страницы памяти равен 4 КБ. Значение этого счетчика не равно количеству памяти, используемой для поддержки гостевой ОС, В дополнение к нему следует замерить количество памяти, используемое рабочим процессом (worker process, vmwp.exe) и памятью, используемой Vid.

Virtual Processors

После установки роли Hyper-V любые операции как корневого раздела с основной ОС, так и гостевых разделов с виртуальными машинами выполняются на виртуальных процессорах. В вырожденном случае существует по одному виртуальному процессору для каждого логического процессора — когда не запущено ни одной ВМ, все и виртуальные процессоры обслуживают основную ОС в корневом разделе. При запуске виртуальных машин им выделяются виртуальные процессоры. Именно их и считает данный счетчик. Например, двухпроцессорный четырехъядерный сервер без HT с одной запущенной двухпроцессорной виртуальной машиной будет насчитывать десять виртуальных процессоров: по одному для каждого из восьми логических процессоров в корневом разделе плюс два для работы в виртуальной машине.

Monitored Notifications

Корневой раздел Hyper-V постоянно отслеживает запросы на прерывания от гостевых разделов. Например, для передачи данных через сетевую карту виртуальная машина могла бы отправлять по отдельному запросу на передачу каждого пакета — так работают эмулируемые устройства. В случе использования синтетических устройств она отправляет один запрос на начало передачи потока данных — так, чтобы они непрерывно обрабатывались до самого конца потока. Это помогает снизить накладные расходы на виртуализацию. Данный счетчик показывает именно количество таких потоков прерываний от гостевых разделов к корневому в момент времени.

Возвращаясь к счетчику Total Pages, я хотел бы вкратце описать, как гипервизор получает необходимую для создания раздела память. Когда пользователь включает виртуальную машину, Vid посредством драйвера winhv.sys делает гипервызов к гипервизору на создание гостевого раздела. Для создания виртуальных процессоров и буферов трансляции TLB гипервизору требуется память, которую он запрашивает у winhv.sys. Winhv.sys находит память и делает гипервызов, выделяя ее на создание раздела. Мы еще встретимся с термином «выделения ресурсов» в описаниях работы счетчиков. Надеюсь, приведенный пример дает начальное понимание того, как это происходит на уровне архитектуры Hyper-V.