У меня есть гость KVM, для которой я хотел бы динамически изменять выделение памяти.
На данный момент, чтобы поменять память гостя, мне нужно запустить:
sudo virsh edit $GUEST_DOMAIN
Затем измените первую строку, показанную в следующем разделе, из конфигурации
...
<memory unit='KiB'>512000</memory>
<currentMemory unit='KiB'>512000</currentMemory>
<memtune>
<hard_limit unit='KiB'>256000</hard_limit>
</memtune>
...
а затем перезапустите гостя с помощью virsh shutdown
и virsh start
.
Я пытался использовать virsh memtune --hard-limit 512000 --domain $GUEST_ID
(ссылка), но, похоже, не имеет никакого эффекта.
Я также пробовал «надувать» изнутри гостя, используя документы здесь, но я продолжаю получать ошибку balloon: command not found
Вопрос
Есть ли способ динамически изменять размер гостя KVM с помощью команды с хоста. Если нет, есть ли хотя бы способ изменить размер памяти с помощью команды, и не нужно редактировать файл конфигурации (или, возможно, файл virsh можно редактировать с помощью sed)?
Дополнительная информация
Гость использует разреженный файл qcow2.
Ниже представлена полная конфигурация от sudo virsh edit $GUEST
<domain type='kvm'>
<name>svn.mydomain.com</name>
<uuid>8463ab11-628a-c07c-4366-4f768247934a</uuid>
<memory unit='KiB'>512000</memory>
<currentMemory unit='KiB'>512000</currentMemory>
<memtune>
<hard_limit unit='KiB'>256000</hard_limit>
</memtune>
<vcpu placement='static'>4</vcpu>
<os>
<type arch='x86_64' machine='pc-i440fx-trusty'>hvm</type>
<boot dev='hd'/>
</os>
<features>
<acpi/>
<apic/>
<pae/>
</features>
<clock offset='utc'/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<devices>
<emulator>/usr/bin/kvm-spice</emulator>
<disk type='file' device='disk'>
<driver name='qemu' type='raw'/>
<source file='/media/storage/kvm/vms/svn.mydomain.com.img'/>
<target dev='vda' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</disk>
<disk type='block' device='cdrom'>
<driver name='qemu' type='raw'/>
<target dev='hdc' bus='ide'/>
<readonly/>
<address type='drive' controller='0' bus='1' target='0' unit='0'/>
</disk>
<controller type='usb' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
</controller>
<controller type='pci' index='0' model='pci-root'/>
<controller type='ide' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
</controller>
<interface type='bridge'>
<mac address='52:54:00:a2:4a:f6'/>
<source bridge='kvmbr0'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</interface>
<serial type='pty'>
<target port='0'/>
</serial>
<console type='pty'>
<target type='serial' port='0'/>
</console>
<memballoon model='virtio'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
</memballoon>
</devices>
</domain>
Вам не нужно возиться с <memtune><hard_limit>
. На самом деле это довольно опасная настройка при применении к гостевым KVM. Я бы немедленно удалил этот раздел.
Однако пользователям QEMU и KVM настоятельно рекомендуется не устанавливать это ограничение, поскольку домен может быть убит ядром, если предположение будет слишком низким. Чтобы определить объем памяти, необходимый для запуска процесса, неразрешимая проблема.
Чтобы уменьшить объем памяти, к которой гость KVM имеет доступ прямо сейчас, измените <currentMemory>
. Максимум, который может иметь гость, определяется <memory>
, и для его изменения требуется выключить гостя.