. Конечно, вы можете указать максимальный объем оперативной памяти для виртуальной машины 16 Гбайт для Hyper-V 2.0. Однако, устанавливая максимальный объем оперативной памяти в виртуальной машине, вы можете ограничить число виртуальных машин, которые могли бы запускать одновременно, поскольку оперативная память – ограничивающий фактор для плотности размещения виртуальных машин. К тому же, подобная практика наверняка приведет к неэффективному использованию ресурсов. Большинство систем имеют пиковые периоды использования, когда им необходим весь доступный объем оперативной памяти. Но в то же время бывают периоды, когда рабочая нагрузка снижается. Перенастройка оперативной памяти «связала» бы эти виртуальные ресурсы и предупредила бы их использование другими виртуальными машинами, когда им могут понадобиться дополнительные ресурсы.

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

Требования динамической памяти

Для использования динамической памяти Hyper-V хост Hyper-V должен запускаться на платформе Windows Server 2008 R2 SP1 или более новой версии. Кроме того, гостевая операционная система, работающая в виртуальной машине, должна поддерживать функцию hot-add оперативной памяти («горячее добавление памяти») – возможность добавления памяти на ходу, без перезапуска. Перечислим гостевые операционные системы, которые могут использовать динамическую память Hyper-V:

-Windows Server 2008 R2 SP1;

-Windows Server 2008 SP2;

-Windows Server 2003 R2 SP2;

-Windows 7 SP1.

-Windows Vista с пакетом обновления 1 SP1.

Так или иначе, вы должны быть уверены, что компоненты Windows Server 2008 R2 SP1 Hyper-V Integration Services установлены в гостевой операционной системе.

Как работает динамическая память

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

Память хоста = 384 Мбайт + 30 Мбайт х число Гбайт памяти хоста

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

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

Динамическая память Hyper-V использует технологию под названием «вытеснение» (ballooning) для освобождения памяти. При вытеснении используется взаимодействие виртуальных машин с хостом для определения страниц памяти, которые не применяются гостевой операционной системой, при этом сокращается объем памяти, доступный гостю. Когда виртуальной машине требуется дополнительная память хоста, память, «вытесненная» ранее, освобождается, насколько нужно, пока вся «вытесненная» память не вернется гостевой операционной системе. Если гость продолжает просить дополнительную память, хост Hyper-V предоставит память из своего пула, пока виртуальная машина не достигнет своего порога памяти или пока другой виртуальной машине с высоким приоритетом выделения памяти не потребуется память хоста.

Hyper-V определяет объем памяти, необходимый виртуальной машине, при помощи параметра под названием memory pressure (загрузка). Hyper-V измеряет загрузку памяти, в первую очередь определяя полный объем выделенной памяти (total committed) гостевой операционной системы, запущенной в виртуальной машине, затем вычисляя соотношение между количеством памяти, запрашиваемым виртуальной машиной, и количеством имеющейся у нее памяти.

Объем памяти, назначаемый Hyper-V виртуальной машине, равен полному объему выделенной памяти плюс дополнительное количество из буфера памяти. Формула такова:

Память виртуальной машины = Запрос памяти + Запрос памяти * Процент памяти буфера

Объем буферной памяти на виртуальную машину рассчитывается как процент выделенной памяти. Величина буферной памяти 50% означает, что виртуальной машине будет назначено до 50% выделенной памяти для гостя.

Настройка динамической памяти

Чтобы разрешить виртуальной машине использовать динамическую память, откройте Hyper-V Manager и выберите виртуальную машину, которую хотите настроить, в панели Virtual Machines. Убедитесь, что виртуальная машина выключена. Вы не можете перестраивать параметры оперативной памяти виртуальной машины, если ее статус Running или Saved. Правой кнопкой мыши щелкните на виртуальной машине, чтобы вызвать контекстное меню, выберите Settings, и укажите раздел Memory. Страница Memory показана на экране 1.

 

Настройка динамической памяти Hyper-V
Экран 1. Настройка динамической памяти Hyper-V

В разделе Memory management («Управление памятью») страницы Memory укажите вариант Dynamic. Обратите внимание на поля Startup RAM и Maximum RAM. Вместо задания статического объема оперативной памяти, назначаемого виртуальной машине, динамическая память Hyper-V позволяет вам определить минимальный объем оперативной памяти, который будет использоваться при запуске виртуальной машины и максимальный объем оперативной памяти, который может быть предоставлен виртуальной машине. Значение Startup Startup RAM – это нижний предел памяти, который будет использоваться виртуальной машиной. В данном случае 512 Мбайт — это тот минимум, который требуется для запуска виртуальной машины в Windows Server 2008. Значение Maximum RAM – это верхний предел памяти, который может быть выделен виртуальной машине. На экране 1 вы видите значение Maximum RAM равное 3596 Мбайт. Для Hyper-V 2.0 (эта версия поставляется в составе Windows Server 2008 R2 SP1) максимальное значение для данного параметра 65536 Мбайт, или 64 Гбайт. Важно иметь в виду, что после того, как будет запущена виртуальная машина, оты значение выделенной ей памяти будет находиться где-то между этими двумя величинами.

Параметр Memory buffer («Буфер памяти») контролирует объем памяти Hyper-V, который будет зарезервирован в дополнение к требованиям памяти для виртуальной машины. На приведенном рисунке показана взаимосвязь параметров startup memory (объем оперативной памяти для запуска), maximum memory (максимально возможное количество памяти) и memory buffer.

 

Взаимосвязь startup memory, maximum memory и memory buffer
Рисунок. Взаимосвязь startup memory, maximum memory и memory buffer

В примере на экране 1 значение параметра буферной памяти установлено в 20%, поэтому Hyper-V выполнит следующие вычисления для определения количества памяти, которое нужно предоставить при первом запросе памяти:

20% / (100% — 20%) * 512 Мбайт = 128 Мбайт

Эта формула изменяется, когда увеличивается выделанная память (committed memory).

На экране 1 вы видите параметр Memory weight («Приоритет памяти»). Hyper-V использует этот параметр, чтобы определить, какой виртуальной машине назначать память после того, как вся буферная память распределена. Настройка параметра memory weight на высокое значение укажет Hyper-V давать этой системе приоритет при выделении памяти. Опять же, помните, что данные настройки играют роль только тогда, когда вся память хоста распределена.

После того, как настроены все желаемые параметры динамической памяти, щелкните команду Apply для завершения изменений параметров виртуальных машин. Изменения в настройки динамической памяти вносятся сразу же после перезапуска виртуальной машины.

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

SQL Server и динамическая память

Хотя это и может показаться очевидным, однако стоит указать, что Microsoft всецело предназначает технологию динамической памяти Hyper-V для использования в рабочей среде. Microsoft не всегда полностью поддерживает предлагаемые ею разработки. К примеру, некоторые технологии, такие как NIC teaming в Windows Server 2008 R2, доступны, но если вы обращаетесь в службу поддержки Microsoft Customer Service and Support (CSS) с проблемой, первая рекомендация, которую дает вам CSS – выключить ее. Но совсем не так обстоит дело с динамической памятью Hyper-V. Microsoft полностью поддерживает динамическую память Hyper-V, ведь эта функция разработана непосредственно для производственного использования.

Для виртуализованных экземпляров SQL Server данная возможность Hyper-V особенно полезна, поскольку память – один из важнейших факторов, влияющих на производительность SQL Server. Чтобы оценить эффективность технологии динамической памяти Hyper-V, необходимо задействовать редакцию Enterprise SQL Server 2008 или более новой версии, либо Datacenter SQL Server 2008 R2 или SQL Server 2008. Только редакции Enterprise и Datacenter поддерживают такую возможность SQL Server, как «горячее добавление» оперативной памяти. Все другие редакции SQL Server должны использовать настройки статической памяти Hyper-V.

Когда новая память назначается гостевым виртуальным машинам функцией динамической памяти Hyper-V, это выглядит как «горячее добавление» физической памяти экземпляру SQL Server. SQL Server Enterprise и Datacenter могут динамически расти, если добавляется еще больше памяти гостевой виртуальной машине.

Когда SQL Server выполняет рабочие нагрузки, процесс sqlservr.exe process распределяет и передает память из операционной системы. На динамический рост памяти SQL Server влияют три фактора:

-рабочая нагрузка;

-параметр max server memory выше, чем текущее распределение памяти;

-сигналы превышения памяти из операционной системы.

По умолчанию значение параметра max server memory – 2 147 483 647 Мбайт. Когда рабочая нагрузка SQL Server приводит к росту процесса sqlserver.exe, счетчик памяти Hyper-V отмечает загрузку памяти в гостевой виртуальной машине и динамически добавляет ей памяти. SQL Server обнаружит добавленную память и будет использовать ее, чтобы соответствовать требованиям рабочей нагрузки. SQL Server контролирует память операционной системы каждую секунду, динамически регулируя ее, в соответствии с объемом доступной памяти и установленным значением параметра max server memory.

В официальном документе «Running SQL Server with Hyper-V Dynamic Memory» (http://msdn.microsoft.com/en-us/library/hh372970.aspx) Microsoft приводит результаты ряда тестов рабочей нагрузки, сравнивая восемь виртуальных машин SQL Server. В ряде испытаний специалисты компании измерили рабочую нагрузку восьми виртуальных машин с объемом статической памяти 7,5 Гбайт и восьми виртуальных машин с динамической памятью. Параметры динамической памяти имели значения 2 Гбайт для параметра startup memory и 12 Гбайт для параметра maximum memory. Рабочая нагрузка составила 12500 пакетов в секунду. В сценарии динамической памяти системы показали результат 7500 операций ввода/вывода в секунду (IOPS). В сценарии со статической памятью, системам потребовалось выполнить 12000 IOPS. Таким образом, динамическая память обеспечила такую же пропускную способность, но только с 60% от общего числа IOPS.

На экране 2 вы видите результаты теста динамической памяти в мониторе производительности Performance Monitor. Черная непрерывная линия показывает память буферного пула SQL Server. Зеленая линия обозначает количество операций чтения с диска в секунду. На начальном этапе теста вы можете видеть, что количество обращений для чтения было довольно высоким, но, как только виртуальной машине была назначена дополнительная память, SQL Server смог увеличить размер своего буферного пула. В результате количество операций чтения с диска снизилось приблизительно на 50%.

 

Мониторинг производительности во время теста динамической памяти
Экран 2. Мониторинг производительности во время теста динамической памяти

SQL Server старается не отдавать память сразу после ее освобождения. Тем не менее, SQL Server начнет сжимать кэши в ответ на загрузку памяти, когда операционная система посылает сигналы о недостатке памяти. Resource Monitor («Монитор ресурсов») SQL Server отслеживает сигналы недостатка памяти каждые пять секунд и будет пытаться освободить память, пока сигналы не прекратятся. SQL Server также будет отдавать память по мере увеличения размера кэшей и распределения памяти, однако процессу SQL Server необходимо сохранять значение total memory внутри значения, установленного в параметре max server memory. Уменьшение значения параметра max server memory может создать нагрузку на его внутреннюю память, в результате чего SQL Server передаст память обратно операционной системе.

Если загрузка одних виртуальных машин заставляет динамическую память Hyper-V забирать память из других виртуальных машин, Windows Memory Manager начнет выгружать страницы неблокированных сегментов памяти и выдаст сообщение о нехватке памяти. Когда SQL Server обнаруживает эти события, он сжимает память до тех пор, пока сигналы о нехватке памяти не прекратятся.

Когда память гостевой виртуальной машины уменьшается, возможно, что гостевая операционная система начнет процесс выгрузки страниц памяти рабочего экземпляра SQL Server, что негативно скажется на производительности SQL Server. Чтобы этого не произошло, Microsoft рекомендует задействовать модель «блокировки страниц памяти» Locked Page Memory Model вместе с динамической памятью Hyper-V. Использование данной модели гарантирует, что страницы памяти SQL Server никогда не выгружаются. Увидеть, использует ли данную модель SQL Server, можно, выполнив запрос

EXEC ('xp_readerrorlog 0, 1, ''Using locked pages''')

Вы можете разрешить Locked Page Memory Model для SQL Server при помощи инструмента Windows Group Policy («Политики групп»).

Перед внесением изменений получите разрешение системного администратора. Чтобы разрешить Locked Page Memory Model, выполните следующие шаги на гостевой виртуальной машине.

  1. Откройте меню Start и выберите Run («Выполнить»). Введите команду gpedit.msc в поле Open и щелкните OK, чтобы открыть консоль Group Policy.
  2. В консоли Group Policy («Групповая политика») раскройте раздел Computer Configuration («Конфигурация компьютера»), затем Windows Settings («Конфигурация Windows»).
  3. Раскройте раздел Security Settings («Установки безопасности»), затем Local Policies («Локальные политики»).
  4. Выберите папку User Rights Assignment (Назначение прав пользователя). Политики будут отображены в области деталей.
  5. Дважды щелкните по параметру Lock pages in memory («Блокировка страниц в памяти»).
  6. Нажмите Add («Добавить») в диалоговом окне Local Security Policy Setting («Параметры локальной политики безопасности»).
  7. В окне Select Users or Groups («Выбор пользователей или группы») добавьте учетную запись с привилегиями для запуска sqlservr.exe.

Мониторинг динамической памяти

В Hyper-V Manager вы можете контролировать использование динамической памяти. Hyper-V Manager выводит назначенную память, требования к памяти memory demand, а также статус памяти memory status для всех виртуальных машин. Эти параметры приведены на экране 3.

 

Наблюдение за использованием динамической памяти в Hyper-V Manager
Экран 3. Наблюдение за использованием динамической памяти в Hyper-V Manager

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

*Hyper-V Dynamic Memory Manager VM: Guest Visible Physical Memory. Этот счетчик позволяет оценить объем физической памяти, видимый выделенной виртуальной машиной.

*Hyper-V Dynamic Memory Balancer: Available Memory. Этот счетчик показывает оставленный на узле объем памяти, который может быть назначен виртуальным машинам.

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

— Process: Working Set. Этот счетчик позволяет увидеть объем физической памяти, используемой в данном процессе SQL Server в виртуальной машине. Не используется в случае применения Locked Page Memory Model.

— SQL Server: Memory Manager: Target Server Memory. Этот счетчик отображает текущее суммарное количество памяти буферного пула SQL Server. Изменения в его значении показывают, что SQL Server реагирует на уведомления о памяти от Windows.

— SQL Server: Memory Manager: Total Server Memory. Данный счетчик дает представление о текущем размере буферного пула SQL Server.

— Memory: Available Мбайт. Данный счетчик определяет объем доступной памяти внутри виртуальной машины.

— SQL Server: Buffer Cache Hit Ratio. Этот счетчик показывает количество страниц в процентном соотношении, найденных в буферном кэше, которые не понадобилось читать с диска. Желательный уровень попадания в буферный кэш – 90% и выше.

Увеличьте оперативную память

Если вы запускаете экземпляры виртуального SQL Server при консолидации серверов и у вас установлена редакция Enterprise SQL Server 2008 или более новая, либо редакция Datacenter SQL Server 2008 R2 или SQL Server 2008, вам стоит рассмотреть использование динамической памяти Hyper-V. С более детальной информацией можно ознакомиться в документе «Hyper-V Dynamic Memory Configuration Guide» (http://technet.microsoft.com/en-us/library/ff817651%28v=ws.10%29.aspx). Еще вы можете почитать блог из четырех частей «SQL Server and Hyper-V Dynamic Memory» на MSDN (http://blogs.msdn.com/b/sqlosteam/archive/2011/01/31/sql-server-and-hyper-v-dynamic-memory-part-1.aspx). Существует и официальное описание «Running SQL Server with Hyper-V Dynamic Memory» (http://msdn.microsoft.com/en-us/library/hh372970.aspx), где вы найдете самую подробную информацию о взаимодействии SQL Server и динамической памяти.