Есть ли способ прозрачно освободить или предотвратить использование памяти гостя qemu-kvm?
Сценарий А:
Гость использует 8 ГБ ОЗУ в часы пик, он возвращается к 4 ГБ в ночное время, но гость по-прежнему требует 8 ГБ ОЗУ от хоста.
Сценарий B:
Гость использует 2 ГБ ОЗУ, но имеет 6 ГБ ОЗУ в кэше страниц. Гость требует 8 ГБ ОЗУ от хоста, но до 6 ГБ из них может быть ОЗУ, которое может иметь большее значение в другой гостевой системе.
Моей первой мыслью о расширении памяти было то, что гость не будет «видеть» эффект раздува, но при отправке «балуна 2048» объем памяти внутри гостя фактически уменьшается до ~ 2 ГБ.
Ты можешь включить автоматический раздув в гостевой системе libvirt, отредактировав XML:
<memballoon model='virtio'>
Устройство виртуальной памяти занимает параметр autodeflate
, который по умолчанию off
. Установите это на on
для включения автоматического всплытия.
<memballoon model='virtio' autodeflate='on'>
Обратите внимание, что в virt-manager нет опции графического интерфейса для включения или отключения этого параметра.
Если вы вызываете qemu вручную (пожалуйста, сохраните рассудок и не делайте этого), добавьте ,automatic=true
к баллонному устройству, например -device virtio-balloon,automatic=true
.
Для автобаллонирования требуется qemu / kvm 1.3.1 или новее.
Учтите, что это, вероятно, не решит всех ваших проблем с нехваткой памяти; лучше всего иметь достаточно оперативной памяти для запуска всех ваших виртуальных машин.
cron это на виртуальной машине и / или на хосте виртуальной машины каждую ночь в часы пик:
синхронизация; эхо 1> / proc / sys / vm / drop_caches
он удаляет кеш fs и возвращает его в качестве доступной памяти системе, после чего KVM / гипервизор может видеть его как свободную память и находить для нее другие применения
также очень хорошо работает с докерными системами