Microsoft loves Linux - статья 4, динамическая память и live-бэкап

Динамическая память в Linux

Динамическая память - функция в Hyper-V опциональная, нужная для того, чтобы Hyper-V мог автоматически выделять и забирать физическую память у гостевых ВМ в зависимости от того, насколько они в этой памяти нуждаются. При включенной опции, общий размер выделенной на ВМ в Hyper-V памяти может быть больше, нежели ее вообще доступно, что приводит к явлению, называемому memory overcommit, положительному для того, чтобы достичь большей плотности ВМ, лучшего использования оборудования и уменьшения стоимости ВМ. Опция работает для гостей Windows и Linux.

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

Если же использование памяти не прыгает с течением времени, то реаллоцирование памяти от одной ВМ к другой не приведет к какой бы то ни было выгоде в производительности, и в таком случае лучше опцию оставить отключенной. Иногда кто-то (например, большие СУБД либо некоторые из серверов приложений Java) пытается забрать себе всю память и управлять ею самостоятельно, и в этом случае динамическая память также является не самым лучшим решением.

Данная функция доступна в большинстве дистрибутивов Linux, поддерживаемых в Hyper-V, но отсутствует в FreeBSD. Подробнее про поддержку можно посмотреть соответствующую страницу.

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

Динамическая память использует два механизма, работающих независимо друг от друга - Hot-Add и Ballooning. Для того, чтобы понять принципы работы этих механизмов, вспомнит, что Hyper-V позволяет установить три параметра динамической памяти для ВМ:

  1. Startup memory – количество памяти, выделяющейся ВМ при ее запуске. Обычно это значение находится между Maximum и Minimum Memory.

  2. Maximum memory – максимальное количество выделяемой памяти

  3. Minimum memory – минимальное количество выделяемой памяти

Механизм hot-add добавляет ВМ памяти, пока не достигнет Maximum memory - новая память отображается внутри Linux-гостя. Механизма hot-remove нет - можно только добавить память.

Забирается память с помощью Ballooning - и это делегируется драйверу динамической памяти LIS, который сначала блокирует память для использования ее гостем (Linux считает, что эта память просто где-то используется), после чего отдает ее Hyper-V. Ballooning также может отдать память обратно ВМ, если забрал ее ранее, разблокировав ее использование.

Пример

Рассмотрим три события:

  1. Запускается новая ВМ, размер памяти устанавливается в Startup Memory

  2. ВМ начинает требовать больше памяти, Hyper-V вызывает Hot-Add и добавляет память

  3. Необходимость в памяти начинает уменьшаться, и память забирается Ballooning

Мы посмотрим на каждом из шагов на то, что происходит:

  • Как выделяется память

  • Что видно в Hyper-V на вкладке Memory

  • Что видно в Linux, с использованием free -m

 Ниже показано, как это выглядит извне ВМ и внутри.

На шаге 1, ВМ работает без особой нагрузки. ВМ выделено столько памяти, сколько указано в Startup Memory, и это видно на вкладке Memory в Hyper-V Manager. Гость видит столько же памяти за вычетом 32 мегабайт, используемых BIOS для служебных целей.

На шаге 2 на ВМ дается большая нагрузка, и она начинает требовать больше памяти. Hyper-V выделяет память, используя hot-add, и мы видим, что цифра Assigned Memory в Hyper-V Manager увеличивается. В Linux картина аналогичная.

На шаге 3 нагрузка снижается, потребность в памяти тоже, и Hyper-V забирает память, используя ballooning. Это отражается в Hyper-V Manager, но в Linux значение не меняется, оставаясь прежним. Гость изменений не видит, но память использовать не может, так как думает, что память уже используется. Поэтому free -m показывает, что used buffer count увеличивается.

После этого, если снова возникнет потребность в дополнительной памяти, ballooning отдаст "занятую" память ВМ, уменьшив used buffer count.

Live-бэкап в Linux

Live-бэкап позволяет создать полный бэкап ВМ с Linux, включая все виртуальные диски, без прерывания ее выполнения, с учетом консистентности файловых операций. При выполнении бэкапа файловые системы гостя замораживается на очень короткое время, и состояние смывается (flushed) на (виртуальный) диск, что позволяет гарантировать консистентность и, как следствие, отсутствие необходимости запускать fsck и, может быть, даже терять данные от восстановления из неконсистентного бэкапа.

Посмотрим на то, как это работает внутри. Все шаги после 1 выполняются автоматически.

  1. Бэкап-утилита сообщает Hyper-V о необходимости запустить процесс, и указывает одну или несколько ВМ. Бэкап-утилиты есть как от Microsoft, так и нет, и могут работать с Hyper-V и выполнять live-бэкап Linux ВМ.

  2. Используя компонент LIS “VSS Driver”, Hyper-V начинает общаться с гостем по поводу бэкапа. Драйвер называется VSS, так как выполняет функцию, в чем-то похожую на Volume Shadow Copy Services в Windows, но, несмотря на аналогичное название, процесс не является идентичным.

  3. Драйвер уведомляет VSS-демона в Linux о бэкапе, и тот, используя системные вызовы, замораживает файловую систему и "смывает" все на виртуальный диск, находящийся в хранилище Hyper-V хоста.

  4. Hyper-V создает чекпойнт ВМ и уведомляет LIS о том, что файловую систему нужно разморозить. ФС замораживается только на третьем и четвертом шаге, на время, достаточное для того, чтобы смыть буфер и создать чекпойнт. Занимает это меньше 1-2 секунд.

  5. Windows VSS в Hyper-V создает снапшот тома, на котором лежит виртуальный диск.

  6. Бэкап-утилита копирует виртуальный диск из снапшота на носитель, куда делается бэкап.

Резюме

Динамическая память и live-бэкап - функции, важные для продакшена с Linux на Hyper-V, и прекрасные примеры сложной функциональности, нуждающейся в коммуникациях между хостом и гостем, и тесной интеграции, разработанной Microsoft для Linux.

В следующей части - сетевые возможности гостей Linux/FreeBSD.

From <http://blogs.technet.com/b/server-cloud/archive/2015/10/07/microsoft-loves-linux-deep-dive-3-linux-dynamic-memory-and-live-backup.aspx>