Споры о динамической памяти в Microsoft Hyper-V продолжаются.

Опубликовано: 16 Апреля, 2023
Споры о динамической памяти в Microsoft Hyper-V продолжаются.

Как человек, который тратит много времени на написание статей о Microsoft Hyper-V, я часто получаю много вопросов от читателей. Один из вопросов, который возникает чаще всего, заключается в том, следует ли использовать динамическую память в производственных средах. Неудивительно, что динамическая память была предметом многочисленных споров.

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

Аргументы против динамической памяти

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

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

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

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

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

Я ничего не имею против использования динамической памяти, просто я из тех людей, которые могут случайно выделить слишком много памяти — и не осознают этого, пока не случится что-то плохое.

Динамичный — в точку

Одна из менее известных причин, по которой некоторые администраторы уклоняются от использования динамической памяти, заключается в том, что динамическая память иногда является динамической только до определенного момента. Позвольте мне показать вам, что я имею в виду.

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

Администраторы часто угадывали эти значения (особенно начальное значение) и со временем вносили коррективы в зависимости от потребностей рабочей нагрузки. Однако часто эти корректировки требовали отключения виртуальных машин. Например, если вы посмотрите на рисунок ниже, вы увидите, что Hyper-V указывает, что некоторые параметры нельзя изменить, поскольку виртуальная машина работает. Я могу настроить минимальный объем памяти, но в этом случае я могу только уменьшить его. Hyper-V не позволит мне установить более высокое минимальное значение ОЗУ во время работы виртуальной машины.

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

Динамическая память в Windows Server 2016 Hyper-V

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

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