Поддерживает ли libvirt автоматическое управление памятью (ballooning)?

Вопрос или проблема

У меня есть VM Arch Linux на базе KVM/QEMU/libvirt, работающая на хосте Arch Linux, которую я использую для сборки программного обеспечения. Я бы хотел, чтобы она имела доступ к 2 GiB оперативной памяти, когда простаивает, но имела доступ к 32 GiB оперативной памяти, когда собирает программное обеспечение. С помощью следующей конфигурации я могу загружать машину с 2 GiB оперативной памяти и вручную увеличивать и уменьшать память, но опция autodeflate, похоже, не действует.

<memory unit="GiB">32</memory>
<currentMemory unit="GiB">2</currentMemory>
<devices>
...
  <memballoon model="virtio" autodeflate="on"/>
...
</devices>

Если доступная оперативная память на гостевой машине составляет 2 GiB, когда я начинаю компиляцию, она остается на этом уровне, даже если на хосте полно свободной памяти. Если я вручную установлю память в 32 GiB в virt-manager, гостевая машина получит 32 GiB, но никогда не вернет память, даже если она простаивает и хосту она нужна.

libvirt, к сожалению, не поддерживает автоматическое управление памятью с использованием баллона. Вам придется писать скрипт самостоятельно.

Документация virsh dommemstat и setmem описывает различные метрики и компоненты, позволяющие автоматическую настройку, однако пока не предложено универсальное решение.

Эта статья в блоге 2019 года хорошо освещает тему, утверждая, что

На данный момент (2019-05) настройка баллона должна выполняться вручную с помощью QEMU. В 2013 году существовал проект по реализации автоматического управления баллоном, но он так и не был завершен.

Вот Gist из 2021 года, предлагающий короткий Python-скрипт вместе с системным модулем и таймером. Я их не пробовал, но они выглядят безобидно.

Также существует относительно новый устройство virtio-mem, предлагающее иной подход к управлению памятью, хотя всё ещё требует ручной настройки. См. Virtio-(balloon|pmem|mem): Управление гостевой памятью (PDF-презентация) с KVM Forum 2020 для подробностей.

Ответ или решение

Вопрос о поддержке автоматического управления памятью в libvirt представляет собой задачу, требующую внимательного рассмотрения как технических аспектов, так и текущего состояния разработки и возможностей технологий виртуализации. В контексте обсуждения параметров логической памяти, таких как ballooning в KVM/QEMU/libvirt, необходимо учитывать исторический контекст и современные подходы к управлению виртуальной памятью. Рассмотрим теоретическую основу, практическую реализацию и идеи для применения в данной ситуации.

Теория

Память ballooning в области виртуализации позволяет динамически изменять объем выделенной оперативной памяти для гостевой виртуальной машины (VM). Такая гибкость имеет важное значение для эффективного использования ресурсов хоста и запуска более адаптивных и экономичных вычислительных сред. Основной идеей технологии ballooning является "подкачка" (inflate) или "сдувание" (deflate) памяти по мере нагрузки на виртуальную машину.

Однако, как подчеркивается в обсуждении, несмотря на поддержку ручной настройки и управления памятью через инструменты вроде virsh и virt-manager, libvirt не предлагает встроенной поддержки автоматического ballooning. Причина этого в сложности процесса прогнозирования и мониторинга нагрузки, а также в отсутствии единого решения, которое могло бы удовлетворять всем возможным сценариям использования ресурсов хоста и гостевой машины.

Пример

Распространение проекта из 2013 года, который ставил перед собой цель реализовать автоматическое управление памятью (ссылка: проект 2013 года), не завершилось успешным внедрением, оставив пользователей libvirt без готовых решений для автоматизации процесса. Как следствие, пользователи, сталкивающиеся с изменяющейся нагрузкой на VM, вынуждены применять самостоятельные скрипты или программы для управления памятью. Например, один из таких нетрадиционных подходов описан в блоге 2019 года. Он обобщает возможность автоматической настройки памяти, но полностью вручную через QEMU.

Применение

Чтобы самостоятельно реализовать автоматическое управление памятью, пользователи libvirt могут использовать инструментарий, предоставляемый системой, например, Python-скрипты, которые мониторят использование памяти и соответственно изменяют объем доступной памяти виртуальной машины. Пример такого скрипта можно найти в этой публикации 2021 года. В сочетании с системными службами, такими как systemd, такой подход может стать компактным и надежным решением для динамического управления ресурсами.

Альтернативы и будущее

Наряду с ballooning, стоит обратить внимание на использование модели virtio-mem, которая представляет собой альтернативный подход к управлению памятью VM. Хотя и virtio-mem, и классический ballooning пока остаются механическими с точки зрения управления памятью, virtio-mem дает основу для будущих решений, особенно в области автоматизации. Презентация на KVM Форуме 2020 углубленно рассматривает этот подход и связанные с ним технологии.

Заключая, текущая невосприимчивость libvirt к автоматическому ballooning ставит перед разработчиками и системными администраторами задачу поиска новых методов интеграции и разработки скриптов, способных автоматизировать процесс управления памятью до тех пор, пока индустрия не предложит стандартное решение.

Оцените материал
Добавить комментарий

Капча загружается...