libvirt-qemu-虛擬機設備熱插拔

cpu熱插拔
# virsh setvcpus $domain_name --count 4 --live (--config可寫入配置文件永久保存)
#前提條件和後續激活參考《libvirt-qemu-虛擬機cpu分配和cpu熱插拔》
 
內存熱插拔
<memory model='dimm'>
    <target>
        <size unit='KiB'>524287</size>
        <node>0</node>
    </target>
</memory>
#和doamin中格式相同
# virsh attach-device $domain_name mem.xml (--config可寫入配置文件永久保存)
#前提條件和後續激活參考《libvirt-qemu-虛擬機內存分配和內存熱插拔》
 
網卡熱插拔
<interface type='bridge'>
      <mac address='52:54:00:2d:ea:aa'/>
      <source bridge='br0'/>
      <model type='virtio'/>
</interface>
#和doamin中格式相同
# virsh attach-device $domain_name interface.xml  (--config可寫入配置文件永久保存)
# virsh detach-device $domain_name interface.xml
 
磁盤熱插拔
<disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/tmp/test.img'/>
      <target dev='vdd' bus='virtio'/>
</disk>
#和doamin中格式相同
# virsh attach-device $domain_name disk.xml (--config可寫入配置文件永久保存)
# virsh detach-device $domain_name disk.xml
 
USB設備
<hostdev mode='subsystem' type='usb'>
  <source>
    <vendor id='0x096e'/>
    <product id='0x0405'/>
  </source>
</hostdev>
#和doamin中格式相同
# virsh attach-device $domain_name usb.xml (--config可寫入配置文件永久保存)
# virsh detach-device $domain_name usb.xml
 
PCI設備熱插拔
<hostdev mode='subsystem' type='pci' managed='yes'>
    <source>
        <address domain='0x0000' bus='0x04' slot='0x00' function='0x0'/>
    </source>
</hostdev>
#和doamin中格式相同
# virsh attach-device $domain_name pci.xml (--config可寫入配置文件永久保存)
# virsh detach-device $domain_name pci.xml
 
 
  在使用libvirt給虛擬機分配內存大小時,涉及到memory和currentMemory兩個字段,不少人都有這個疑惑,爲何須要兩個呢。實際上是和內存氣泡動態調整內存有關係的。簡單的來講,memory是虛擬機啓動時分配給的內存,currentMemory是內存氣泡生效後動態調整到的內存。下面看具體的解釋。
 
一. 啓動內存
<memory unit='KiB'>8388608</memory>
虛擬機啓動時使用的內存
 
二. 內存氣泡
 
在虛擬機的xml文件中配置:
 
  <memory unit='KiB'>8388608</memory>
  <currentMemory unit='KiB'>158608</currentMemory>
  ......
  <devices>
    <memballoon model='virtio'>
      <stats period='10'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
    </memballoon>
  </devices>
參數說明:
memory:
在qemu命令中使用參數-m來設置的。表示虛擬機在啓動階段使用的內存。包括在啓動或稍後熱插拔時指定的可能的附加內存。
currentMemory:
經過libvirt調整balloon值的初始值是currentMemory。
說明:
1.在虛擬機啓動後加載了內存balloon驅動後就開始對虛擬機內存進行熱插拔,先設置內存爲<currentMemory>大小,這個<currentMemory>qemu進程不知道,時記錄在libvirt中的。而後根據需求對內存進行調整(balloon),調整的上限是<memory>,這個<memory>qemu進程是知道的,在虛擬機啓動時使用了這個值。
2.要禁止memballoon設備,能夠設置memballoon model='none'
禁止內存氣泡設備後,虛擬機內部看到的內存就是<memory>,也不能經過氣泡進行調整。
 
經過ballon調整虛擬機內存大小(調整後在虛擬機內部是能夠看到虛擬機內存大小變化的):
# virsh qemu-monitor-command instance-00000005 --hmp "info balloon"
# virsh qemu-monitor-command instance-00000005 --hmp "balloon 1024"
或者:
# virsh setmem instance-00000005 2097152
# virsh dommemstat instance-00000005
 
 
三. 內存熱插拔
 
虛擬機的xml文件
 <maxMemory slots='1' unit='KiB'>10388608</maxMemory>
  ......
 <cpu mode='host-model'>
    ......
    <numa>
      <cell id='0' cpus='0' memory='4194304' unit='KiB'/>
    </numa>
  </cpu>
<maxMemory>的值表示經過 hot-plug 能夠達到的內存的上限(包含虛擬機初始內存)。其中 slots 表示 DIMM 插槽的數量,每一個插槽在運行時均可以插入一個內存設備,上限是 255 個。
<numa>內的配置用於指定虛擬機內的 NUMA 拓撲。
 
要插入內存設備xml文件
<memory model='dimm'>
    <target>
        <size unit='KiB'>524287</size>
        <node>0</node>
    </target>
</memory>
<size>指定設備的內存容量,<node>指定插入到虛擬機的哪一個 NUMA 節點。
 
插入內存前虛擬機內部:
插入內存:
# virsh attach-device --live instance-00000005 mem.xml
 
插入內存後虛擬機內部:
激活新插入的內存,並查看內存:
注:新的內存設備插入以後,內存氣泡可調整的上限值也隨之增大相應的大小。
 
四. 熱插拔內存後虛擬機內部自動 online 內存
爲了讓系統自動 online 添加的內存,能夠設置 udev 規則,內容以下:
/etc/udev/rules.d/99-hotplug-memory.rules
# automatically online hot-plugged memory
ACTION=="add", SUBSYSTEM=="memory",ATTR{state}="online"
相關文章
相關標籤/搜索