Тормозящая виртуализация на x86. Небольшая попытка разобраться. Часть 3: Hyper-V

Для лиги лени. Какая-то заумь про то, что не нужно, потому что все равно у нормальных людей все приложения давно в облаках на микросервисах, и прекрасно работают.

Тормозящая виртуализация на x86. Небольшая попытка разобраться. Часть 1: Общий обзор
Тормозящая виртуализация на x86. Небольшая попытка разобраться. Часть 2: ESXi by Broadcom

Часть 3. Что из этого следует, и как устроен планировщик нормального человека в Hyper-V. Тут не будет ничего нового для тех, кто открывал документацию про корневой раздел (root partition)

Если в ESXi by Broadcom существует отдельно операционная система, в которой есть свой vsish, esxtop, и которая запускает и процессы (из которых важнейшими являются vpxa и hostd ) и worlds, то MS Hyper-V с первого взгляда выглядит как «обычная операционная система». Но MS не были бы сами собой, если бы и тут не выступили, устроив гипервизор не первого и не второго типа. Хотя AWS и пишет, что это «гипервизор первого типа»
Как и сами MS пишут в разделе Архитектура - Hyper-V architecture - Hyper-V features a Type 1 hypervisor-based architecture.

Архитектура MS Hyper-V.

Для начала, где-то в самом начале загружается сам гипервизор - Hyper-V . Гипервизор создает корневой (или родительский) раздел (root partition), где загружается ОС, и уже ОС управляет остальными виртуальными машинами, с использованием:
Virtualization Service Provider (VSP) – работает в корневом разделе
Virtualization Service Consumer (VSC) – работает в прочих разделах
VMBus – шина взаимодействия
Hypercall – интерфейс взаимодействия гостевой ОС и хоста.

Планировщик (CPU) в MS Hyper-V

Может быть одним из 3, на выбор:
The classic scheduler. Использовался по умолчанию до Windows Server 2016, включительно.
The core scheduler. Используется по умолчанию, начиная с Windows Server 2019. Обеспечивает бОльшую изоляцию и не только.
The root scheduler. Используется начиная с Windows 10.1803

Взаимоотношения планировщика и основной операционной системы

Поскольку основная операционная система (хоста) живет в отдельном разделе, то можно покрутить ручки под названием Minroot, отделив «что там делает на ядрах сама ОС» от «что там делают виртуальные машины. Настройка описана в разделе Hyper-V Host CPU Resource Management.

Взаимоотношения с таймером

В системе используется сразу 4 разных таймера, из них основной и прикрученный намертво – на 100nS, описан в разделе Hypervisor Specification  \ Timers
Из этого вытекает некоторая боль с RTC приложениями, голосовыми в основном. То есть, откручивая Minroot и поиграв (и проиграв) неравный бой с таймером в 10nS вместо 100nS, что описано нигде. И в глубине притаился HPET - High Precision Event Timer, он делает очень, очень больно, например в cloud pbx. Будете кушать - узнаете.

Выделение ресурсов

Сделано через выделение группы процессоров - Virtual Machine Resource Controls. При этом управление такой функцией доступно только через Hyper-V Host Compute Service. Ссылка на Microsoft Virtualization team's blog  из статьи Managing CPU Groups  ведет в никуда, вместо блога.
У ESXi есть относительно схожая, но иначе сделанная функция - Resource Pools.

Кроме этого, можно отдельно покрутить и настройки VM - VM cap. Про это есть отдельный раздел в Virtual Machine Resource Controls \ Setting CPU Caps on Individual VMs
В остальных моментах надо сказать, что настройки для классов сервиса (Classes of Service) и VM, описанные в статье Managing CPU resources for Hyper-V virtual machines - писали норкомане, явно не из нашей галактики, и в их мозг надо лучами проникать. Возможно, так удобнее для Azure и его локальных вариантов, но очень скудно описано.

Все вышесказанное приводит к необходимости читать всякое про таймеры, типа
Windows system timer granularity
Clocks, Timers and Virtualization 
Timekeeping Virtualization for X86-Based Architectures
Остальные настройки раскиданы по разным местам документации, и вообще описаны почти нигде.

Сети

Нырять в рамках изначально короткой статьи в глубины Virtual Machine Multiple Queues (VMMQ) , Dynamic VMMQ  и проблему Linux Network Performance мне уже не хочется.

Итого

Hyper-V тормозит точно так же, как ESXi , но делает больно иначе, управляется по другому, и масса статей и заметок утрачена вместе с проведенной чисткой старого technet. Для более подробного сравнения и описания документации недостаточно, необходимо обязательно разворачивать тестовый стенд. Аналог Hands-on lab существует только для Azure - Azure CLX.
Для того, чтобы понять, насколько в ваших условиях Hyper-V лучше или хуже ESXi – необходимо полноценное пилотное тестирование, с вашими нагрузками.

Бонусы

Случайно нашел. Архивы Virtualization Team Blog
Interview with ‘Mr Hyper V’ Ben Armstrong 
Ignite: In Chicago and online: November 18–22, 2024

@Grigory_Otrepyev
10.03.2024 16:38 UTC
Первоисточник

Комментарии

@Thomas_Hanniball
10.03.2024 11:51 UTC
+7

Разбор VMware esxi был (прошлая статья) и разбор Hyper-V был (текущая статья). Стоит ли ждать похожую статью про KVM (вариант для Proxmox).

@Grigory_Otrepyev
10.03.2024 16:04 UTC
+3

Что будет (если будет). Часть 1. Общий обзор. Будет содержать многочисленные ошибки, отсылки, и текст на английском языке. Часть 2. Что из этого следует, и как устроен планировщик в Broadcom ESXi. Тут не будет ничего нового для тех, кто открывал документацию про изменение модели планировщика side-channel aware scheduler (SCA) - SCAv2 , добавив Performance Optimizations in VMware vSphere 7.0 U2 CPU Scheduler for AMD EPYC Processors и Optimizing Networking and Security Performance Using VMware vSphere and NVIDIA BlueField DPU with BWI Часть 3. Что из этого следует, и как устроен планировщик нормального человека в Hyper-V. Тут не будет ничего нового для тех, кто открывал документацию про корневой раздел (root partition) Часть 4. Что из этого следует, и как устроен планировщик в KVM или KVM- QEMU. Тут тоже не будет ничего нового, но будет масса ошибок, про Earliest eligible virtual deadline first (EEVDF) и Completely Fair Scheduler (CFS).

@mvv-rus
10.03.2024 23:01 UTC
0

Ссылка на Microsoft Virtualization team's blog  из статьи Managing CPU Groups  ведет в никуда, вместо блога

Ссылка исправлена: прямо в цитате выше теперь правильная.

PS На поиск правильной ссылки мне потребовалось минут пять, максимум. Так что можно было бы и не начинать сразу ныть, а таки исправить ещё при написании статьи (IMHO).
Если хотите, поправьте в своей статье сейчас. Но на Хабре обычно комментарии читают до статьи ;-) , так что этого уже, наверное, не требуется (тоже IMHO).

@Grigory_Otrepyev
11.03.2024 04:50 UTC
0

PS На поиск правильной ссылки мне потребовалось минут пять, максимум. Так что можно было бы и не начинать сразу ныть, а таки исправить ещё при написании статьи (IMHO).

Мне было лень. Отметил что "вот так" и пошел дальше.

@DM_man
11.03.2024 09:28 UTC
0

Прикрученный намертво таймер это "замечательно" , но может быть и правильно, выше головы(лимита) чтобы не пытались прыгать, а с открученным в будущем можно и продать подороже как enterprise edition.