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

В качестве подопытного возьмем "сервер" с одним процессором Core-i3, что с учетом Hyper-threading дает нам 4 виртуальных процессора. Операционная система — Windows Server 2012r2.
Открываем оснастку Hyper-V Manager и заходим в настройки виртуальной машины, на вкладку Процессор. Обратите внимание на параметр процент от общего объема системных ресурсов — он показывает, какой процент от общей процессорной мощности выделен конкретно этой виртуальной машине. В нашем случае это 1/4 = 25% . Если выделить машине второй процессор, то получим 50%, третий — 75% и т.д. Таким способом мы управляем распределением процессорных ресурсов между виртуальными машинами.



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


Резерв для виртуальных машин

Этот параметр задает процент ресурсов, который будет зарезервирован за виртуальной машиной. Этот параметр играет роль в ситуации нехватки ресурсов, то есть когда физические процессоры используются на все 100%. В этом случае те из виртуальных машин, у которых задан этот параметр, должны гарантированно получить то, что за ними зарезервировано. По умолчанию "Резерв для виртуальных машин" не задан и имеет значение 0%.

Работает этот параметр следующим образом. Возьмем виртуальную машину, выделим ей 2 виртуальных процессора и установим "Резерв для виртуальных машин" равным 100. Это значит, что от физически имеющихся ресурсов этой виртуальной машине зарезервировано 100 % от 2 ядер, или 50% от общей процессорной мощности. Это значение отображается в поле «Процент от объема системных ресурсов».



Регулировать резерв можно как через "Резерв для виртуальных машин", так и изменяя количество виртуальных ядер. Например, те же 50% можно получить при 4 ядрах по 50% каждое.



Резервирование не накладывает жестких ограничений на потребляемые ресурсы. Если одной из виртуальных машин потребуется больше ресурсов – они будут ей предоставлены, даже если все 100% зарезервированы. В Hyper-V свободный процессорный ресурс может легко выделяться виртуальным машинам, и так же легко у них забираться.

Параметр "Резерв для виртуальных машин" вступает в дело только в ситуации нехватки системных ресурсов. Основное его назначение – гарантировать бесперебойную работу особо критичных виртуальных машин.


Предел для виртуальных машин


Этот параметр похож на предыдущий — он так же задается в процентах от доступных виртуальной машине ресурсов и у него есть поле «Процент от общего объема системных ресурсов». По умолчанию лимит не задан, и виртуалка при необходимости сможет забрать себе все свободные ресурсы процессора. Задавая значение "Предел для виртуальных машин" мы говорим, что виртуальная машина не при каких условиях не должна использовать больше процессорных ресурсов, чем ей разрешено. Назначение этого параметра одно – ограничить «аппетиты» виртуальной машины, если на ней используются тяжелые, нагружающие процессор приложения.

Лимит применяется отдельно к каждому виртуальному процессору. К примеру, если виртуальная машина сконфигурирована с 2 процессорами и установлен лимит 50% — то она получит два виртуальных процессора, каждый из которых ограничивается 50%.



Обратите внимание, что в отличие от резервирования лимит задается жестко. Если Virtual Machine Limit равен 50% — виртуальная машина никогда не сможет использовать больше, даже если на сервере больше ничего не запущено.


Относительный вес

Третий параметр, "Относительный вес", представляет из себя безразмерную величину и может варьироваться в пределах от 0 до 10000. По умолчанию равен 100.

С помощью "Относительный вес" мы можем задать приоритет виртуальной машины при распределении ресурсов. До тех пор, пока у сервера имеются свободные системные ресурсы – значение "Относительный вес" не имеет особого значения. Будь у машины вес хоть 100, хоть 10000 – на ее работе это никак не отразится. Но как только ресурсы сервера подходят к концу - начинается самое интересное. Если виртуальные машины имеют одинаковый вес (к примеру, у всех 100), то каждая из них получит равную долю процессорного ресурса. Если же у одной или нескольких виртуальных машин "Относительный вес" выше – это значит, что они получат больше процессорного ресурса, чем остальные. Причем, чем больше вес, тем выше приоритет и тем больше ресурсов может получить виртуальная машина.
Таким образом "Относительный вес" позволяет разделять виртуальные машины на более и менее критичные, при этом не боясь, что какая-то из них откажется запускаться из за отсутствия ресурсов.



Важный момент. "Относительный вес" не дает гарантий, что виртуальная машина в нужный момент получит необходимое ей количество процессорных ресурсов. Если какие-то из виртуальных машин являются особо критичными – лучше использовать "Резерв для виртуальных машин", который гарантирует выделение ресурсов.

В заключение скажу, что Hyper-V достаточно гибко распределяет процессорное время между виртуалками, поэтому дополнительные настройки не стоит трогать без крайней необходимости. И еще, все вышенаписаное относится как к Windows Server 2012, так и к Server 2008R2, по крайней мере серьезных отличий не замечено.

Источник