Резерв корневой памяти: палка о двух концах для Hyper-V
Один из методов, который администраторы виртуализации уже давно используют для снижения затрат на выполнение виртуализированных рабочих нагрузок, заключается в том, чтобы сделать все возможное для максимизации плотности виртуальных машин хоста (или потенциальной плотности). Это означает создание и настройку виртуальных машин таким образом, чтобы хост мог одновременно запускать как можно больше виртуальных машин. Одна из проблем, связанных с попытками достичь максимально возможной плотности виртуальных машин, заключается в том, что вы никогда не сможете выделить все аппаратные ресурсы сервера для выполнения виртуализированных рабочих нагрузок. Гипервизору всегда придется требовать для себя некоторые аппаратные ресурсы. Без этих ресурсов гипервизор не может работать и, следовательно, не может размещать виртуальные машины. Это верно для Hyper-V, ESXi и любого другого гипервизора типа 1. Учитывая, что некоторые администраторы неизбежно будут пытаться выжать из узлов виртуализации каждый байт до последнего, Microsoft давно внедрила корневой резерв памяти для Hyper-V. Резерв корневой памяти выделяет небольшой объем физической памяти сервера для использования Hyper-V. Это гарантирует, что память сервера никогда не будет исчерпана до такой степени, что сам Hyper-V перестанет функционировать.
Резерв корневой памяти: вещи не всегда такие, какими кажутся
Хотя базовая концепция корневого резерва памяти кажется бесспорно важной, все не всегда так, как кажется. Бывают ситуации, когда вы можете оказать себе медвежью услугу, используя корневой резерв памяти. В частности, резерв корневой памяти может снизить потенциальную плотность виртуальных машин узла.
Hyper-V больше не является универсальным решением. В свое время Hyper-V выпускался в двух вариантах. Существовала отдельная версия Hyper-V Server, и Hyper-V также можно было развернуть как серверную роль в Windows Server. В любом случае Hyper-V запускался и управлялся как серверная служба. Однако сегодня у нас также есть клиент Hyper-V. Клиент Hyper-V работает в настольной операционной системе, такой как Windows 10, и почти никогда не используется для размещения рабочих нагрузок. Дело в том, что клиентский Hyper-V используется не так, как Hyper-V Server, поэтому не обязательно имеет смысл управлять памятью двух платформ одинаково. К счастью, Microsoft изменила Windows 10, чтобы клиент Hyper-V по умолчанию не использовал резерв корневой памяти.
Так почему бы вам не использовать резерв корневой памяти в Windows 10? Я имею в виду, конечно, что Windows 10 отличается от Windows Server, но разве корневой резерв памяти не имеет места в Windows 10? Иногда это так, и вы можете вручную установить резерв корневой памяти, создав раздел реестра. Однако известно, что резерв корневой памяти иногда вызывает проблемы, связанные с запуском виртуальных машин.
Проблема в том, что иногда на узле Hyper-V может не хватать памяти для запуска ВМ, хотя казалось бы, что памяти достаточно. Фактически, я сам столкнулся с этой проблемой несколько месяцев назад при попытке запустить большое количество виртуальных машин на хосте Hyper-V. Некоторые виртуальные машины отказывались запускаться из-за нехватки памяти, хотя диспетчер задач говорил мне, что доступной памяти более чем достаточно.
Предположим на мгновение, что хост Hyper-V имеет 16 ГБ ОЗУ. Если предположить, что для работы родительской операционной системе требуется 2 ГБ ОЗУ, то теоретически остается 14 ГБ для размещения виртуальных машин Hyper-V. В действительности, однако, системный резерв может потреблять еще около 2,5 ГБ оперативной памяти, а это означает, что объем памяти, доступный для размещения виртуальных машин, может составлять всего 11,5 ГБ.
Причина, по которой это является проблемой, заключается в том, что резерв хоста придерживается прогрессивной шкалы, в которой размер резерва хоста увеличивается по мере увеличения объема физической оперативной памяти. Хотя корпорация Майкрософт предоставляет рекомендации относительно того, насколько большим может быть резерв узла, трудно предсказать, сколько памяти фактически будет использовано резервом узла. Кроме того, до тех пор, пока Microsoft не выпустила несколько последних обновлений для Windows 10, диспетчер задач полностью игнорировал резерв хоста.
Проверьте свою память
Если вы хотите узнать, сколько памяти на самом деле доступно узлам Hyper-V, откройте монитор производительности и загрузите экземпляр System Balancer счетчика Hyper-V Dynamic Memory Balancer Available Memory, как показано ниже.
Если вы хотите понять, почему этот счетчик так важен, посмотрите на рисунок ниже, взятый с хоста Windows Server 2012 R2 Hyper-V. На этом рисунке видно, что монитор производительности сообщает, что для виртуальных машин Hyper-V доступно примерно 16 ГБ памяти. Однако диспетчер задач показывает 18,3 ГБ доступной памяти. В этом случае существует разница примерно в 2 ГБ между объемом памяти, который, по словам диспетчера задач, доступен, и объемом памяти, который фактически может использовать Hyper-V.
Ранее я, конечно, объяснял, что в некоторых случаях резерв корневой памяти уже не требуется. Как правило, серверам Hyper-V по-прежнему требуется корневой резерв памяти, а клиентским Hyper-V — нет. Возможно, потребуется настроить серверы Hyper-V для обеспечения высокой доступности виртуальных машин или соблюдения соглашения об уровне обслуживания, поэтому резерв корневой памяти может оказаться полезным. Поскольку клиент Windows 10 Hyper-V обычно не выполняет рабочие нагрузки, Microsoft сделала так, что Windows 10 больше не требует корневого резерва памяти.
Стоит отметить, что если вы вручную настроили резерв корневой памяти, Windows 10 продолжит его использовать. Однако резерв корневой памяти не требуется. Чтобы увидеть разницу, взгляните на снимок экрана ниже. Этот снимок экрана был сделан на компьютере с Windows 10, на котором запущено обновление Fall Creators Update 2017 года. На этот раз диспетчер задач сообщает о 9,4 ГБ доступной памяти. Монитор производительности показывает примерно около 9 ГБ, доступных для размещения виртуальных машин Hyper-V. Несмотря на то, что небольшое расхождение все еще существует, эти два инструмента показывают гораздо более точную оценку доступной памяти, чем та, что была показана на предыдущем снимке экрана.
объяснение Майкрософт
Если вам все еще непонятно, почему Microsoft отказалась от резерва корневой памяти по умолчанию в Hyper-V, Сара Кули из Microsoft объясняет изменения следующим образом:
В Windows 10 вы, вероятно, используете несколько приложений (веб-браузеры, текстовые редакторы, чат-клиенты и т. д.), и большинство из них резервирует больше памяти, чем активно использует. С этими изменениями Hyper-V начинает выделять память небольшими порциями (чтобы дать операционной системе возможность отрезать память от других приложений) и будет использовать всю доступную память (без корневого резерва). Это не означает, что у вас никогда не закончится память, но теперь объем памяти, отображаемый в диспетчере задач, точно отражает объем, доступный для запуска виртуальных машин.