Привет, ЛОР!
Я сломал мозг от старые, противоречивые статьи и нейронки, поэтому нужна помощь опытных людей.
В свете того, что память подорожала, возник вопрос экономии этой памяти на компе с виртуалками.
Вспомнил про 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