Новости

Динамічна пам'ять в Hyper-V

  1. Принцип роботи
  2. Налаштування

Динамічна пам'ять в Hyper-V: принцип роботи та налаштування

Спочатку в Hyper-V використовувалося статичну виділення пам'яті, при якому необхідно було точно розрахувати обсяг для кожної віртуальної машини. Завдання досить непроста, виділиш менше ніж потрібно - може впасти продуктивність, більше - пам'ять буде простоювати. Плюс до цього вся виділена віртуальній машині пам'ять відразу їй забиралася і ставала недоступною для інших, що накладало жорсткі обмеження на кількість одночасно запущених ВМ.

Ситуація змінилася з виходом Windows Server 2008 R2 SP1. Hyper-V отримав механізм динамічного розподілу пам'яті (Dynamic Memory), завдяки якому пам'ять може вільно перерозподілятися між віртуальними машинами прямо в процесі роботи. Давайте познайомимося з основними принципами роботи Dynamic Memory ближче.

Принцип роботи

При запуску віртуальної машини їй виділяється обсяг пам'яті, рівний Startup RAM. Якщо раптом потрібного обсягу пам'яті не виявиться в наявності - машина відмовиться стартувати. У гостьовій ОС (при установці служб інтеграції) працює компонент Dynamic Memory VSC (DMVSC), який збирає відомості про використовувану в даний момент пам'яті і передає їх за допомогою віртуальної шини VMBus провайдеру Dynamic Memory VSP (DMVSP), що працює в хостовой ОС. DMVSP, в свою чергу, передає дані балансувальник пам'яті - Dynamic Memory Balancer.

Балансувальник обчислює для кожної віртуальної машини якийсь ідеальний обсяг пам'яті. Формула досить проста: ідеальний обсяг дорівнює споживаної в поточний момент пам'яті плюс резерв (певний відсоток від споживаної пам'яті, що задається вручну).

Потім обчислюється значення навантаження Memory Pressure - процентне відношення обчисленого ідеального об'єму до об'єму, фактично виділеного віртуальній машині. Цей параметр показує, як на даний момент йдуть справи з пам'яттю на віртуальній машині: малі значення означають, що пам'яті досить, великі - що використання пам'яті підходить до межі. Якщо ж значення Memory Pressure перевищує 100%, то значить пам'яті сильно не вистачає, і віртуальна машина активно використовує файл підкачки.

На підставі змін навантаження протягом часу балансувальник обчислює порогові значення навантаження - мінімальне і максимальне. Якщо навантаження перевищує максимальне граничне значення - то віртуальній машині додається пам'ять. Якщо ж значення навантаження опускається нижче мінімального порогового значення - це означає, що надлишок пам'яті можна відібрати.

Додавання пам'яті

Якщо потрібно додати пам'яті - то диспетчер пам'яті стека віртуалізації виділяє віртуальній машині додаткову пам'ять. DMVSC, використовуючи технологію гарячого додавання пам'яті (Hot Add RAM) розширює адресний простір віртуальної машини, після чого відповідні віртуальні адреси зіставляються з виділеними фізичними адресами. Зверніть увагу, що для роботи необхідна підтримка Hot Add RAM на рівні гостьовий ОС.

видалення пам'яті

Для видалення пам'яті використовується механізм Memory Ballooning. Коли приходить команда на видалення пам'яті - DMVSC перевіряє, які області пам'яті на даний момент не використовуються. З них відбирається обсяг, призначений для видалення, і потім ці адреси захоплюються DMVSC в монопольний доступ. Після цього захоплення область пам'яті позначається як Driver Locked і стає недоступна для використання операційною системою. Як тільки пам'ять була захоплена - відповідні віртуальні адреси відв'язувати від фізичних адрес, і відповідні комірки пам'яті можуть бути передані іншим віртуальним машинам. Видалення пам'яті відбувається для системи абсолютно непомітно, вся захоплена пам'ять як і раніше залишається системі видно. Надалі, якщо віртуальній машині потрібно додати пам'ять - відповідне адресний простір звільняється і зв'язується з виділеною областю пам'яті.

Налаштування

Dynamic Memory вперше з'явилася в Windows Server 2008R2, а точніше - з виходом SP1. Ось так безрадісно виглядають настройки пам'яті в Windows Server 2008R2 без встановленого сервіс-пака. Кожній віртуальній машині виділяється фіксований обсяг пам'яті, який визначається параметром Startup RAM.

Після установки SP1 все набагато веселіше 🙂 У вікні Memory конфігурації віртуальної машини з'являється можливість вибору режиму виділення пам'яті: Static / Dynamic. При виборі Static - пам'ять буде задаватися фіксовано, як і раніше. А ось якщо вибрати Dynamic, то стануть доступні нові параметри налаштування. При використанні Dynamic Memory обсяг пам'яті віртуальної машини визначається вже не одним параметром, а кількома. Ось вони:

Startup RAM - мінімальний обсяг пам'яті, що виділяється віртуальній машині при її запуску. За замовчуванням дорівнює 512 Мбайт. Якщо система не зможе виділити відповідний обсяг пам'яті - віртуальна машина не запуститься;
Maximum RAM - максимальний обсяг пам'яті, який теоретично може бути виділений віртуальній машині. За замовчуванням задається максимальне можливе значення (64Гб в Server 2008R2 і 1Тб в Server 2012);
Memory Buffer - задається у відсотках, і може приймати значення від 5% до 2000%. Цей параметр призначений для того, щоб тримати певний обсяг пам'яті вільним, на випадок раптових пікових навантажень. Наприклад, якщо Memory Buffer дорівнює 20% - система завжди буде намагатися забезпечити, щоб у віртуальної машини було вільно не менше 20% пам'яті. Memory Buffer задається саме в процентах, а не в мегабайтах, тому, що залежить від поточного споживання пам'яті;
Memory Weight - визначає пріоритет віртуальної машини при розподілі пам'яті в разі її нестачі. Саме цей параметр визначає, у кого пам'ять буде в першу чергу відібрана, і кому в першу чергу буде додана. До тих пір, поки у сервера є вільна пам'ять - ваги віртуальних машин не грають ніякої ролі. Але як тільки пам'ять добігає кінця і потрібно її перерозподілити - система відбирає пам'ять у віртуальних машин з найменшим пріоритетом, і віддає тим, у кого пріоритет найбільш високий.

Memory Reserve - параметр, що дозволяє зарезервувати певний обсяг пам'яті для використання хостовой ОС. Теоретично може виникнути така ситуація, коли віртуальні машини розберуть всю пам'ять і хостовой ОС нічого не залишиться. Зрозуміло, що брак пам'яті в хостовой ОС може мати неприємні наслідки для всіх віртуальних машин, які на ній запущені. Щоб цього уникнути - можна використовувати параметр Memory Reserve, що дозволяє зарезервувати певний обсяг пам'яті для використання хостовой ОС. Зарезервований обсяг буде недоступний для використання віртуальними машинами.

Цього параметра немає в настройках і змінити його можна тільки через редагування реєстру. Для цього треба створити ключ типу DWORD з назвою MemoryReserve в розділі реєстру HKLM \ SOFTWARE \ Microsoft \ WindowsNT \ CurrentVersion \ Virtualization. Значення цього ключа і визначає обсяг резервованій пам'яті в мегабайтах. Максимальне значення - 4096 (4 Гбайт), більше встановлювати марно. Навіть якщо встановити 8192 - все одно система зарезервує тільки 4 Гбайт пам'яті.

У Windows Server 2012 на додаток до Startup RAM (обсяг пам'яті при старті) з'явився параметр Minimum RAM (мінімальний обсяг пам'яті). Якщо в Server 2008R2 ці параметри еквівалентні, то в Server 2012 вони зроблені повністю незалежними один від одного. Такий підхід дозволяє більш гнучко управляти розподілом пам'яті. Наприклад, для старту машині можна виділити 4 ГБ пам'яті, а на випадок бездіяльності задати мінімум в 512 МБ. До речі, настройки Minimum RAM і Maximum RAM тепер можна крутити прямо на працюючій машині.

До речі, настройки Minimum RAM і Maximum RAM тепер можна крутити прямо на працюючій машині

Примітка: Якщо бути точним, то в Server 2008R2 технічно все ж є можливість за допомогою WMI / PowerShell виставити мінімальне значення пам'яті менше, ніж стартове. Якщо цікаво, то ось є опис і текст скрипта.

Smart Paging

Трохи вище я писав, що якщо система не зможе виділити обсяг пам'яті Startup RAM, то віртуальна машина не запуститься. Це не зовсім так.

Можливість налаштувати мінімальне значення динамічної пам'яті нижче стартового дозволяє нам мати більшу кількість одночасно запущених машин на вузлі. Це звичайно здорово, але що станеться в разі використання машинами всієї пам'яті, якщо одну з машин буде потрібно перезавантажити? Для перезавантаження машині потрібно виділити стартове значення пам'яті, яке може бути вище мінімального. При цьому на хості може не бути потрібної кількості вільної пам'яті і гипервизор не зможе забрати пам'яті у запущених машин, так як всі вони активно її використовують.

Для цього випадку в Windows Server 2012 з'явилася технологія Smart Paging, яка дає можливість при нестачі пам'яті для завантаження віртуальної машини використовувати файл підкачки на хості (Smart Paging file).

Smart Paging річ неоднозначна. Хоча він і забезпечує гарантований запуск віртуальних машин при відсутності фізичної пам 'яті, при цьому значно знижується продуктивність, адже швидкості доступу до диска в рази менше, ніж до оперативної пам'яті. Тому використання смарт-пейджинга сильно обмежена. Smart Paging можна включити примусово, він активується тільки при збігу кількох факторів:

1) Віртуальна машина була перезавантажена;
2) На хості відсутня доступна фізична пам'ять, необхідна для їх запуску;
3) Немає можливості забрати пам'ять у інших віртуальних машин, запущених на цьому хості;
4) Сумарний запитуваний усіма запущеними машинами обсяг пам'яті перевищує фізичну не більше ніж в два рази.

Smart Paging не спрацює, якщо:

1) Віртуальна машина запускається з вимкненого стану, а не була перезавантажена;
2) Чи не вистачає пам'яті для вже запущеної віртуальної машини;
3) Віртуальна машина перенесена при відмові одного з вузлів кластера.

Примітка: Якщо чесно, то з використанням смарт-пейджинга на кластерах ситуація мені не зовсім зрозуміла. Де то йдеться про те, що при перенесенні машин з одного вузла кластера на інший він не працює, а де то навпаки - що Smart Paging призначений якраз для роботи в кластерах. В даний момент у мене немає можливості зібрати кластер і перевірити це на практиці, так що стверджувати, де правда, не візьмуся.

Smart Paging - механізм тимчасовий і використовується він тільки в процесі запуску віртуальної машини. Відразу після завантаження операційної системи гипервизор, використовуючи Memory Balooning, змушує машину скоротити пам'ять до мінімального обсягу. Як тільки машина переходить на власні ресурси, файл підкачки негайно видаляється, використовувати його в процесі роботи неможливо.

Для роботи віртуальні машини мають свій власний файл підкачки, який і використовують у разі нестачі пам'яті. Даний підхід більш ефективний, ніж файл підкачки на хості, так як диспетчер пам'яті всередині віртуальної машини краще знає, які процеси можна помістити в файл підкачки, а які повинні знаходиться в оперативній пам'яті. Smart Paging використовується виключно для перезавантаження віртуальних машин.

моніторинг

Моніторинг споживання пам'яті віртуальною машиною потрібно здійснювати з хостовой системи. Той же Task Manager в гостьовій ОС завжди буде показувати пікове значення, а не поточний. Побачити, скільки фактично виділено пам'яті з гостьової ОС неможливо, для цього потрібно використовувати консоль Hyper-V Manager.

Для прикладу візьмемо віртуальну машину TestVM. Як видно з показань Hyper-V Manager, на даний момент вона споживає всього 512 МБ (Minimum RAM).

У самій же віртуальній машині картина інша. Task Manager показує, що машині виділено 4 Гб, з яких вона споживає 3.8 Гб. І ще, зверніть увагу на непомітний параметр Maximum memory, який показує максимальний обсяг пам'яті, доступний віртуальній машині. Правда є він тільки в Windows 8 і Server 2012.

Правда є він тільки в Windows 8 і Server 2012

Операційні системи

Для використання Dynamic Memory необхідна підтримка як хостовой, так і гостьової системи. Ось список операційних систем, що підтримують Dynamic Memory.

Хостової системи:

  • Microsoft Windows Server 2008 R2 Standard, Enterprise, Datacenter SP1;
  • Microsoft Hyper-V Server 2008 R2 SP1;
  • Microsoft Windows Server 2012 Standard, Datacenter;
  • Microsoft Windows 8 Pro, Enterprise.

Гостьові системи (після установки служб інтеграції):

  • Windows Server 2003 Standard, Web, Enterprise, Datacenter SP2;
  • Windows Server 2008 Standard, Web, Enterprise, Datacenter SP2;
  • Windows Server 2008 R2 Standard, Web, Enterprise, Datacenter SP1;
  • Windows XP Professional SP3;
  • Windows Vista Enterprise, Ultimate SP2;
  • Windows 7 Enterprise, Ultimate SP1;
  • Windows 8 Pro, Enterprise.

висновок

Технологія Dynamic Memory дає можливість уявити оперативну пам'ять не у вигляді набору мікросхем, а як вільно розподіляється ресурс. Однак треба розуміти, що не дивлячись на всю гнучкість налаштувань Dynamic Memory не дозволяє виділити ресурсів більше, ніж є фізично, а всього лише допомагає розподілити наявні ресурси найкращим чином.

Ну ось і все, що я хотів розповісти про динамічної пам'яті. Сподіваюся ця стаття допоможе вам у нелегкій справі віртуалізації 🙂

Це звичайно здорово, але що станеться в разі використання машинами всієї пам'яті, якщо одну з машин буде потрібно перезавантажити?

Уважаемые партнеры, если Вас заинтересовала наша продукция, мы готовы с Вами сотрудничать. Вам необходимо заполнить эту форму и отправить нам. Наши менеджеры в оперативном режиме обработают Вашу заявку, свяжутся с Вами и ответят на все интересующее Вас вопросы.

Или позвоните нам по телефонам: (048) 823-25-64

Организация (обязательно) *

Адрес доставки

Объем

Как с вами связаться:

Имя

Телефон (обязательно) *

Мобильный телефон

Ваш E-Mail

Дополнительная информация: