Ви вже знаєте, що не так давно вийшли остаточні версії платформи Microsoft Windows Server 2008 R2 SP1 і безоплатна його версії Hyper-V Server 2008 R2 SP1 , Орієнтованої тільки на завдання віртуалізації. Одне з основних нововведень - функції Dynamic Memory для віртуальних машин, що дозволяють динамічно виділяти і розподіляти оперативну пам'ять між ними.
Давайте подивимося як це працює. Стаття заснована на замітці " Dynamic Memory Coming to Hyper-V Part 6 ", Яка є частиною серії заміток про Dynamic Memory, посилання на які розміщені в кінці статті.
В першу чергу, Dynamic Memory дозволяє виділяти віртуальній машині на хості Hyper-V пам'ять динамічно, відповідно до запитів ВМ. Тобто, це дозволяє не виділяти всю можливу для використання ВМ пам'ять, а виділити стільки, скільки потрібно для базової завантаження і найпростішої роботи. По-друге, за допомогою Dynamic Memory Balancing відбувається перерозподіл пам'яті між працюючими віртуальними машинами, що призводить до зростання коефіцієнта консолідації віртуальних машин на хост-сервері Hyper-V R2 до 40% (особливо для VDI-навантажень).
Давайте подивимося на екран налаштувань пам'яті для віртуальної машини в Hyper-V Manager:
Як ми бачимо, тут є 2 види установок виділення пам'яті віртуальної машини:
Також під цими параметрами розташовується настройка Memory Buffer.
Ця установка визначає кількість пам'яті, який буде потрібно Гіпервізор на обслуговування віртуальної машини в службових цілях, наприклад, для можливостей SuperFetch . Вона може бути задана у відсотках від 5 до 95%. Тобто, якщо у вас у віртуальної машини коштує 1 ГБ пам'яті для гостьової ОС і 20% memory buffer - то у вас буде 250 МБ за його службові цілі. За замовчуванням коштує 20% - і це оптимально в більшості випадків. Для високопродуктивних і вимогливих до швидкодії і пам'яті навантажень, можливо, має сенс збільшити це значення. До речі, ця настройка змінюється навіть у запущеній віртуальної машини, без необхідності її зупинки.
Далі переходимо до останньої налаштування - Memory priority.
Ця установка в Hyper-V еквівалентна, по-суті, опції Shares в VMware vSphere. Коли віртуальних машин на хості багато, і вони починають боротися за ресурси, то потрібно якось пріоритезувати виділення пам'яті нужденним віртуальним машинам. Memory priority і визначає як вони будуть її розподіляти між собою в умовах боротьби - тобто машина з більш високим пріоритетом отримує пам'ять першої і в обсязі пропорційному пріоритету (тобто виглядає ставлення її пріоритету до суми загальних пріоритетів на хості Hyper-V).
Тепер, як це працює на практиці. У нас є три віртуальних машини з початковою пам'яттю 1 ГБ (Startup RAM) і максимальної 4 ГБ (Maximum RAM) для кожної. При цьому всього на сервері є 8 ГБ на всі машини. Ми їх запускаємо - пам'ять відразу виділяється в обсязі суми цієї Startup RAM (3 ГБ).
За 15 хвилин. Finance VM починає вважати звіти, а Engineering VM - запускає задачу аналізу даних. Пам'ять машини Finance VM зростає до 3 ГБ, машини Engineering VM - до 2 ГБ, при цьому навантаження на Sales VM не змінюється - і їй залишається виділено 1 ГБ. Всього на сервері використовується 6 ГБ або 75% від усієї доступної пам'яті (8 ГБ):
Через 30 хвилин. Finance VM продовжує вважати звіти і, врешті-решт, закінчує цю справу, вивільнивши пам'ять до 2 ГБ. При це Engineering VM - продовжує аналіз даних, доводячи використовувану пам'ять до 3,5 ГБ, майже досягши максимальної межі. І тут ми ще запускаємо Service VM з початковою пам'яттю в 1 ГБ. Все використовується: 2 + 3,5 + 1 + 1 = 7.5 ГБ або десь 94% від 8 ГБ сервера.
Це і є оптимальне використання ресурсів сервера.
Тут виникає питання - а що якщо віртуальним машинам буде потрібно ще пам'ять? Чи буде це означати, що сторінки підуть в своп, організований Hyper-V для віртуальної машини?
По-перше, Dynamic Memory має можливість вилучити невикористовувані сторінки пам'яті у віртуальної машини і передати їх найбільш потребує ВМ на хості. Робиться це шляхом запуску високопріоритетного процесу в простоює ВМ, який починає "виїдати" пам'ять в ОС цієї машини і передавати ці сторінки іншим ВМ. Але пам'ять віртуальної машини нижче Startup RAM ніколи не опуститься - це її гарантований мінімум. Решта розподіляється відповідно до Memory priority при нестачі ресурсів.
По-друге, коли на хості Hyper-V зовсім не залишиться вільного місця, включет механізм свопіювання в гостьовій системі , А не на рівні віртуальної машини (тобто, всередині образу ВМ, а не на сховище з VHD-диском). Робиться це тому, що гостьова ОС сама краще знає, які сторінки їй краще складати в своп - і, відповідно, відбуваються менші втрати продуктивності. Природно, такий ситуації треба уникати - будь-який диск працює в сотні тисяч разів повільніше пам'яті.
Ну а тепер корисні посилання по тому, як працює Dynamic Memory в Hyper-V:
Тут виникає питання - а що якщо віртуальним машинам буде потрібно ще пам'ять?Copyleft © 2017 . www.vremya-sporta.od.ua