Назад | Перейти на главную страницу

Хост и гость Hyper-V Thread Priorities - как они соотносятся?

Да, забавный вопрос.

Дано: хост для виртуальных машин Hyper-V. Кластер типа HPC.

На нем есть несколько виртуальных машин. Они не используют процессор большую часть времени. У нас также есть собственный кластер в стиле HPC - агенты извлекают задания и обрабатывают их.

Есть разговор об установке Агента на наши машины Hyper-V. В тот момент, который дал бы нам значительный прирост производительности - потребуется лето, пока мы действительно не нарастим оборудование для вычислительного кластера.

Агенты выполняют все вычисления в потоках с низким приоритетом. Для обычных компьютеров это означает, что агент в основном увеличивает использование ЦП, но не мешает работе компьютера как таковому - я даже могу смотреть DVD во время работы агента.

А как обстоят дела с Hyper-V? Какой «приоритет» дает ядро ​​Hyper-V виртуальному ЦП? Имеет ли корневой раздел более высокий приоритет, чем виртуальные машины? Я не хочу, чтобы агенты мешали работающим виртуальным машинам.

Родительский раздел Hyper-V или ОС управления является особенным в гипервизоре. Если его виртуальные процессоры работоспособны, они получают больший приоритет по сравнению с гостевыми виртуальными машинами. Это связано с тем, что в поддерживаемой конфигурации Hyper-V единственное, что выполняет управляющая ОС (статистически говоря), - это ввод-вывод от имени гостевых виртуальных машин. Если вы установите что-либо еще в управляющей ОС, вы собираетесь отказаться от работы от имени гостевых виртуальных машин.

Я предполагаю, что это уже произошло с вами, но вы можете сделать это поддерживаемым способом. Создайте виртуальную машину такого же размера, что и физическая машина. Дайте ему очень низкий вес ЦП и памяти и включите динамическую память, чтобы в режиме ожидания он не использовал много памяти. Запустите свою вычислительную задачу на этой виртуальной машине. В этом случае Hyper-V предпочтет выполнять работу за любого другого гостя, а не за этого гостя, но будет использовать циклы простоя для решения вашей вычислительной задачи.

Во-первых, я просто проясню это: не рекомендуется запускать какие-либо дополнительные рабочие нагрузки в родительском разделе (ОС хоста) Hyper-V. Его единственная цель в жизни - предоставить функции управления и контроля другим гостевым виртуальным машинам в системе и дать администратору возможность видеть другие гостевые виртуальные машины в системе. Тем не менее, вы, безусловно, можете это сделать, и это может отлично сработать для вас. Но официальная позиция Microsoft заключается в том, чтобы избегать запуска каких-либо дополнительных рабочих нагрузок в родительском разделе. Теперь, когда это не мешает:

Схема архитектуры Happy Fun ASCII:

| Parent | Child | Child | Child |
----------------------------------
            Hypervisor
----------------------------------
         Physical Hardware

Родительский раздел, представляющий собой ОС, в которую вы загружаетесь и из которой вы создаете и управляете всеми другими дочерними виртуальными машинами, на самом деле является просто еще одним логическим разделом на том же уровне, что и дочерние разделы. Все эти разделы работают параллельно. Единственное отличие состоит в том, что гипервизор дает корневому разделу особые права и обязанности. Существуют веса ЦП, резервы и ограничения, которые вы можете назначить дочерним виртуальным машинам через консоль управления Hyper-V, но мне неясно, будут ли они соответствовать тому, что мы знаем как приоритеты потоков в гипервизоре, и каким образом.

В корневом разделе (или управляющей ОС или ОС хоста) вы увидите vmms.exe и 1 экземпляр vmwp.exe для каждой виртуальной машины. Служба управления виртуальными машинами (vmms.exe) отвечает за предоставление интерфейса WMI для гипервизора, чтобы вы могли управлять виртуальными машинами с консоли MMC. Он также создает новый экземпляр vmwp.exe при создании новой виртуальной машины в системе. Рабочий процесс виртуальной машины (vmwp.exe) выполняет работу по виртуализации, которую может выполнять типичный монолитный гипервизор, например, управление состоянием виртуальной машины.

В системе с дочерними разделами, выполняющими множество операций ввода-вывода или привилегированных операций, можно ожидать, что большая часть использования ЦП будет видна в родительском разделе: вы можете идентифицировать их по имени Vmwp.exe (по одному для каждого дочернего раздела). Рабочий процесс также включает компоненты, отвечающие за удаленное управление стеком виртуализации ... - Руссинович и др., Windows Internals, 6-е изд.

Но, к сожалению, vmwp.exe - это не вся история с точки зрения того, что все происходит внутри виртуальной машины, и если вы думаете об управлении приоритетом этих процессов из управляющей ОС, вы, вероятно, окажетесь в неизведанном, возможно неподдерживаемая территория. Существуют также гипервызовы, просвещенные вызовы и т. Д., Которые могут не взиматься с процесса vmwp.exe, но все же могут считаться частью общей рабочей нагрузки виртуальной машины.

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

К сожалению, Microsoft не публикует много глубоко технических статей, чтобы ответить на эти вопросы. Если бы не Руссинович и его друзья, у нас даже не было бы Внутреннее устройство Windows. Там есть краткий раздел о Hyper-V, с которым я консультировался при написании этого сообщения, но даже он не намного более подробный, чем этот пост.