LINUX.ORG.RU
ФорумAdmin

Как работает memory ballooning в qemu-kvm с т.з. гостя?

 , ,


1

1

Привет, ЛОР!

Я сломал мозг от старые, противоречивые статьи и нейронки, поэтому нужна помощь опытных людей. В свете того, что память подорожала, возник вопрос экономии этой памяти на компе с виртуалками. Вспомнил про memory ballooning и не могу до конца понять, как это всё работает.

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

Сначала я предполагал, что с точки зрения гостя это выглядит как некий процесс в ОС, который по неведомым (для гостя) причинам начинает жрать память до определённого размера. Это триггерит стандартные механизмы memory pressure и вся занятая этим хитрым процессом память на самом деле задействуется хостом под свои нужды. И пока этот процесс жив с таким потреблением памяти, это гарант для хоста, что занятая память не будет гостем обратно использована. Поэтому её можно безболезненно отдать другой программе.

Но видимо у меня СПГС и всё немного (если так можно говорить про столь низкоуровневые процессы) проще. Есть крутилка в XML - memory (в терминологии virt-manager Maximum Allocation) и currentMemory (в virt-manager - Current Allocation).

  • memory - это жёсткий лимит памяти ВМ
  • currentMemory- это мягкий лимит памяти ВМ

Между ними balloon driver, который позволяет динамически, без перезагрузки менять объём памяти ВМ вплоть до лимита в memory. Причём делается это исключительно руками, ибо auto-ballooning умер в 2013 г. так и не родившись. https://www.linux-kvm.org/page/Projects/auto-ballooning

Самый главный вопрос - правильно ли я понимаю, что с точки зрения гостя выглядит так, что у него физическая (total) память меняется? На моей лабе это выглядит именно так. Тогда надо, аккуратно отбирать память у гостя (а так же иметь swap), иначе у него OOM придёт.

И чуть менее главный вопрос - анон утверждает, что Proxmox умеет в auto-ballooning. Это так или нет?

А и ещё вопрос - какие противопоказания? А то в интернетах пишут, что вредные процессы.

Работаю на Fedora 42

# qemu-kvm --version
QEMU emulator version 9.2.4 (qemu-9.2.4-2.fc42)
Copyright (c) 2003-2024 Fabrice Bellard and the QEMU Project developers

# libvirtd --version
libvirtd (libvirt) 11.0.0

# uname -a
Linux max-desktop 6.18.5-100.fc42.x86_64 #1 SMP PREEMPT_DYNAMIC Sun Jan 11 18:16:46 UTC 2026 x86_64 GNU/Linux
★★★★★

Последнее исправление: kma21 (всего исправлений: 3)

И посоветуйте что-то толковое про память в линуксах и про вирту почитать. А то в современном интернете пересказы на пересказы от нейронок читать сложно. Многие рассуждают о том, что сами плохо понимают, как работает. Или путают сущности.

kma21 ★★★★★
() автор топика

Самый главный вопрос - правильно ли я понимаю, что с точки зрения гостя выглядит так, что у него физическая (total) память меняется? На моей лабе это выглядит именно так. Тогда надо, аккуратно отбирать память у гостя (а так же иметь swap), иначе у него OOM придёт.

https://github.com/qemu/qemu/blob/master/docs/memory-hotplug.txt https://docs.kernel.org/admin-guide/mm/memory-hotplug.html

BOOBLIK ★★★★
()
Ответ на: комментарий от BOOBLIK

Это документация по Memory Hot(Un)Plug в Linux kernel, которую отчасти использует драйвер virtio-mem.
А ТС спрашивает про virtio-balloon.
Memory Hot(Un)Plug, memory balloon и virtio-mem (paravirtualized memory hot(un)plug) это 3 разные технологии.
virtio-balloon - поддерживается примерно с 2010 г. А virtio-mem где-то с 2018 (поддержка в linux kernel с 2020, гость требует ядра 5.8). Также разная поддержка в MS Windows guest.
Вот например презентацию 2018 г., где сравнивается Memory Hot(un)plug, Ballooning и virtio-mem:
https://events19.linuxfoundation.org/wp-content/uploads/2017/12/virtio-mem-Pa...

На страничке https://virtio-mem.gitlab.io/ есть ссылки на разные статьи и презентации, в частности вот эта статья 2021 года: https://dl.acm.org/doi/pdf/10.1145/3453933.3454010?download=true

MirandaUser2
()
Последнее исправление: MirandaUser2 (всего исправлений: 1)