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

С появлением динамической памяти Hyper-V в Windows Server 2008 R2 Service Pack 1 я написал цикл заметок, детально описывающий архитектуру. Останавливаться на этом более я не стану, ибо архитектура не сильно изменилась, расскажу лишь о нововвдениях. Я также отдельно описывал возможности установки минимального значения памяти для машины, вдобавок к стартовому и максимальному значению и как его настраивать через PowerShell. Посмотрим, что тут изменилось. Начнём с легкого.

Минимальное значение памяти

Если в Hyper-V R2 SP1 для настройки минимального значения памяти требовалось использовать PowerShell (что делало не более пяти процентов администраторов), то в Windows Server 8 Hyper-V настройка минимального значения динамической памяти вынесена на главный экран настроек памяти. Зачем?

Зачастую мы не знаем, сколько памяти требуется ОС и приложениям для работы. Мало кто настраивает стартовое значение меньше 1-2 ГБ, боясь, что сервер будет медленно работать, что SQL запустится некорректно и так далее. А в реалии оказывается, что Guest Memory Pressure виртуальной машины (всем читать заметку про архитектуру) составляет порядка 40-50%, то есть половина памяти, выделенной гипервизором машине, реально не используется. Введя минимальное значение памяти, мы указываем гипервизору забирать неиспользуемый объём памяти у машины после того как она полностью загрузится. Это особо полезно в случае, когда часть машин используются для дела время от времени, а остальное время они просто простаивают в запущенном состоянии. Если они не используют память активно, а она требуется другим машинам, гипервизор распределит её согласно приоритетам.

Изменение минимального и максимального значения для запущенной машины

Заголовок, в принципе, всё рассказал. Гипервизор в Windows Server 8 позволяет увеличить максимальное значение и уменьшить минимальное значение для запущенной машины. Если вы когда-то указали для виртуальной машины с SQL Server максимум в 8 ГБ, а со временем добавили туда важные базы данных, вы сможете без перезагрузки машины увеличить максимальный объём динамической памяти, так что машина возьмёт требуемое без остановки сервисов.

Hyper-V Smart Paging

Очень тонкая тема для обсуждения – новая технология Smart Paging. В редких случаях гипервизор сможет использовать файл подкачки на узле виртуализации для запуска машин при нехватке физической памяти. Звучит как-то знакомо и некрасиво? Попробуем разобраться.

Введя возможность настроить минимальное значение динамической памяти ниже стартового, Microsoft позволяет вам иметь большее количество одновременно запущенных машин на узле. Что произойдёт в случае использования машинами всей памяти, если одну из машин потребуется перезагрузить? Действительно, для перезагрузки машине потребуется выделить стартовое значение памяти, которое может быть выше минимального. А на узле может и не быть дополнительной памяти для машины. И возможно, что гипервизор не сможет запросить памяти у запущенных машин, ибо все они агрессивно используют свою память, или используют уже минимальное значение.

Для этого и только для этого случая предусмотрена возможность использования технологии Smart Paging. Перезагружаемая машина получит требуемый объём памяти, часть которой будет обеспечена за счёт файла подкачки узла.

 

После загрузки ОС и служб гипервизор потребует машину вернуть память до минимального объёма, компенсируя недостаток памяти файлом подкачки внутри виртуальной машины.

 

Предвидя вопросы, скажу, что во всех остальных случаях, Smart Paging задействован не будет. Это не overcommitment, так горячо не любимый в промышленной среде всеми здравомыслящими администраторами.

Итак, Smart Paging будет задействован только в случае, если выполняются все нижестоящие условия:

  • Виртуальная машина перезагружается
  • Свободной физической памяти на узле недостаточно для выделения стартового значения
  • Гипервизор не может запросить недостающую память у остальных машин
  • Суммарный запрашиваемый всеми запущенными машинами объём памяти превышает физическую не более чем в два раза

Smart Paging не будет задействован в любом из нижеописанных случаев:

  • Виртуальная машина запускается из выключенного состояния
  • Запущенная виртуальная машина требует памяти при её отсутствии на узле
  • Виртуальная машина переносится по отказу в кластере при отказе одного из узлов
  • Суммарный запрашиваемый всеми запущенными машинами объём памяти превышает физическую более чем в два раза

Про кластеры разговор отдельный. В Windows Server 8 при переходе по отказу и нехватке памяти на узле кластер отправит сигнал на выключение машин с низким приоритетом для запуска машин с высоким и средним приоритетом. После запуска высокоприоритетных машин, кластер попробует запустить низкоприоритетные.

Internal Guest Paging

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