Ручное выделение логических процессоров узла для сервера Hyper-V
Вероятно, самое сложное в работе с виртуальными серверами — правильное распределение аппаратных ресурсов. Выделите слишком мало ресурсов, и производительность начнет страдать. Выделите слишком много ресурсов, и вы потеряете емкость и не сможете разместить столько виртуальных машин. Таким образом, ключевым моментом является выделение необходимого количества аппаратных ресурсов для каждой виртуальной машины. Любой, кто когда-либо занимался администрированием сервера Hyper-V, скажет вам, что распределение ресурсов — это искусство. Большинство известных мне администраторов Hyper-V усердно работают над оптимизацией виртуальных машин и максимально эффективным использованием доступных аппаратных ресурсов. Но как насчет хост-ОС?
Операционная система хоста работает внутри корневого раздела. Согласно Microsoft, «корневой раздел сам по себе является разделом виртуальной машины, хотя он обладает уникальными свойствами и гораздо большими привилегиями, чем гостевые виртуальные машины». Поскольку корневой раздел является типом раздела виртуальной машины, имеет смысл тщательное распределение аппаратного обеспечения для корневого раздела так же важно, как и для разделов виртуальной машины.
Не так просто
Но как выделить ресурсы для корневого раздела? Диспетчер Hyper-V позволяет выделять ресурсы виртуальным машинам, но не корневому разделу. К сожалению, выделить ресурсы для корневого раздела не так просто, как для раздела виртуальной машины (хотя вы можете использовать резервы хоста).
В Windows Server 2016 Microsoft незаметно представила новую функцию, которая позволяет вам вручную управлять распределением логических процессоров для корневого раздела.
С момента своего появления Microsoft неуклонно увеличивала количество логических процессоров, которые можно выделить для раздела. В настоящее время Hyper-V может поддерживать до 512 логических процессоров, но корневой раздел ограничен 320 логическими процессорами. Вопрос, однако, в том, действительно ли корневому разделу нужно 320 виртуальных процессоров?
Если у вас действительно большой сервер Hyper-V, то есть шанс, что вашему корневому разделу потребуется столько логических процессоров, сколько Hyper-V может ему дать. Однако в большинстве случаев корневой раздел легко справляется с гораздо меньшим количеством логических процессоров, чем Hyper-V готов ему предоставить.
Новая функция Windows Server 2016, позволяющая вручную управлять распределением логических процессоров хоста, не может использоваться для преодоления жестких ограничений, установленных Microsoft. Однако его можно использовать для искусственного уменьшения выделения логических процессоров для корневого раздела, тем самым потенциально высвобождая ресурсы для использования виртуальными машинами.
Команда BCDEdit
Чтобы получить контроль над логическими процессорами хоста, вам придется использовать команду BCDEdit. На первый взгляд это может показаться немного странным, потому что команда BCDEdit обычно используется для управления процессом загрузки. Фактически, BCD в BCDEdit означает данные конфигурации загрузки. Вы можете найти полное описание команды BCDEdit здесь.
Причина, по которой используется команда BCDEdit, заключается в том, что, хотите верьте, хотите нет, эту команду можно использовать для изменения низкоуровневых настроек гипервизора. Если вы посмотрите на синтаксис команды, упомянутый в предыдущем абзаце, вы увидите, что раздел Debug содержит переключатель HypervisorSettings. Однако в данном конкретном случае мы будем использовать не переключатель HypervisorSettings, а гораздо более общий переключатель под названием Set. Согласно документации, переключатель Set «устанавливает значение параметра входа».
Итак, прежде чем мы начнем, взгляните на рисунок ниже. На этом рисунке показаны данные о производительности сервера Hyper-V в моей лаборатории. Как видите, сервер оснащен восьмиядерным процессором AMD FX(TM)-8350. Если вы посмотрите на сводную информацию под диаграммой, вы увидите, что система работает на частоте 3,99 ГГц и имеет один сокет, четыре ядра и восемь логических процессоров. Вы также можете увидеть, что виртуализация включена.
Итак, теперь давайте зададим жесткое определение количества логических процессоров хоста. Для этого откройте окно командной строки (от имени администратора) и введите следующую команду:
BCDEdit /Set HypervisorRootProc n
В этом случае буква «n» в конце команды является просто заполнителем. Вы захотите заменить букву n на количество корневых процессоров гипервизора, которые вы хотите использовать. Поскольку мой сервер оснащен таким скромным количеством логических процессоров, я собираюсь установить количество логических процессоров хоста равным двум. Вы можете увидеть, как это выглядит на рисунке ниже.
Как я упоминал ранее, команда BCDEdit — это инструмент для изменения процесса загрузки. Поэтому неудивительно, что изменение не вступит в силу, пока вы не перезагрузите сервер. Корпорация Майкрософт не предоставляет возможность изменить количество логических процессоров хоста без перезагрузки.
После внесения изменений, показанных на предыдущем рисунке, я перезагрузил лабораторный сервер и снова открыл диспетчер задач. Вы можете увидеть, как это выглядит на рисунке ниже. На первый взгляд может показаться, что диспетчер задач показывает точно такую же информацию, как и раньше. Однако, если вы посмотрите немного внимательнее, вы заметите, что сводная информация теперь отображает количество логических процессоров хоста, которое было установлено равным двум.
Поэкспериментируйте с настройками сервера Hyper-V
Внесение изменений в количество логических процессоров хоста, доступных для сервера Hyper-V, может помочь вам получить более прямой контроль над тем, как ваш хост-сервер выделяет аппаратные ресурсы. Тем не менее, ручная установка количества логических процессоров хоста на сервере Hyper-V может улучшить или снизить общую производительность сервера. Поэтому я советую поэкспериментировать с различными настройками логического процессора хоста в лабораторной среде, чтобы убедиться, что вы понимаете последствия, прежде чем пробовать это в производственной среде.