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 в единственном исключительном случае перезагрузки виртуальных машин.

Comments (10)

  1. Вопрос по Smart Paging. Если машина перезагружается, то она запустится, а если выключается по какой-то причине на короткое время (например, базу нам надо освободить и переместить), то потом она не сможет запуститься – как-то неприятно выглядит. Или это можно обойти? Например, VMM запустит эту виртуалку на более свободном хосте автоматически?

  2. Alex A says:

    RAMDisk вы запускале на узле, правильно?

    Изначально там не было 3ГБ памяти и попытка провалилась.

    Далее, гипервизор забрал 1ГБ у машины, и попытка прошла успешно. Машина при этом всё ещё включена.

    Вы её перезагрузили, и она не страртанула?

    Давайте посмотрим, что было сказано в логах?

    Я еще не описывал ничего про клиентский гипервизор, все вышесказанное с статьях касается только серверного. Но разобраться можно и с клиентом.

  3. Anonymous says:

    Решил проверить данную функциональность.

    Ноутбук 8 ГБ ОЗУ, Windows 8 Beta, файл подкачки отключен, установлена роль Hyper-V.

    Создаю виртуальную машину с параметрами: начальный объем 4 ГБ, минимальный 3 ГБ, максимальный 5 ГБ.

    Запускаю виртуальную машину, выделено 4 ГБ.

    Далее с помощью программы рамдиска пытаюсь создать диск 3 ГБ – получаю ошибку, недостаточно памяти, сразу же после этого гипервизор забирает 1 ГБ у виртуальной машины и возвращает в систему. Повторная попытка создать рамдиск 3 ГБ проходит успешно. После этого перезагружаю виртуальную машину… и получаю ошибку не достаточно оперативной памяти для старта машины (это видно в журнале). Т.е. Smart Paging не сработал. Не подскажите, в какую сторону смотреть?

  4. Anonymous says:

    Проверил на Windows Server 8 Beta по сценарию со второй машиной и статическим выделением памяти – Smart Paging включился.

    Будем учитывать эту особенность технологии Smart Paging.

    Спасибо.

  5. Alex A says:

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

    Но вот если памяти нету совсем ни на одном узле, и вы хотите машину включить из выключенного состояния, она не станет вас слушаться 🙂

    Так как у нас теперь кластер не есть граница мобильности (машины можно вживую переносить на другие кластеры), я ожидаю PRO Pack для возможности автоматической балансировки машин между кластерами.

  6. Anonymous says:

    RAMDisk вы запускале на узле, правильно?

    Да.

    Изначально там не было 3ГБ памяти и попытка провалилась.

    Верно.

    Далее, гипервизор забрал 1ГБ у машины, и попытка прошла успешно. Машина при этом всё ещё включена.

    Точно.

    Вы её перезагрузили, и она не страртанула?

    Да.

    Давайте посмотрим, что было сказано в логах?

    Это домашний бук. Пока нет под рукой. Там очень краткое сообщение вида: машина "NAME" не запущена из-за нехватки ресурсов. Упоминаний о Smart paging нет.

    Я еще не описывал ничего про клиентский гипервизор, все вышесказанное с статьях касается только серверного. Но разобраться можно и с клиентом.

    Cо своей стороны попробую серверный вариант.

  7. Alex A says:

    Андрей, я уточнил у разработчика.

    Приведу ответ

    "When you run RAMDisk on the host, you’re simulating a situation where another workload is running on the parent partition. In this case root is using more memory than its reserve. Hyper-V is assuming that it can use all the memory except the reserve and tries to allocate it. But allocation fails since there is another entity holding onto RAM without Hyper-V’s knowledge. Smart Paging will not help if you’re running additional applications on the host.

    Instead of using RAMDisk if you start an empty VM configured with static memory equal to the size of the RAMDisk you’re creating, Hyper-V will be aware of this allocation and when you restart your VM it will not attempt to allocate more memory and it will use Smart Paging.

    I.e. Smart Paging will not kick in if memory is being consumed by an application running on the host. "

    То есть Smart Paging не поможет с ситуацией типа RamDisk

    Предлагаю, остановить RamDisk и включить новую виртуалку со статическими 3ГБ памяти. Проверить перезагрузку первой..

  8. Anonymous says:

    Спасибо за ответ.

    Я проверил на Windows Server 8 Beta по сценарию с RAMDisk – результат аналогичный Windows 8 Beta.

    Попробую предложенный вариант с дополнительной машиной и статическим выделением памяти.

  9. Alex A says:

    Согласен, увы, я иногда уделяю этому мало внимания, пробую исправиться. Про кластеры и приоритеты будет отдельная заметка.

    Всегда рад любым комментариям, это помогает и вам, и мне, и остальным.

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

Skip to main content