libvirt-qemu-虚拟机内存分配和内存热插拔

  在使用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"


五.  目前支持内存热插的 Windows 版本有:
  Windows Server 2008 R2, Enterprise Edition and Datacenter Edition
  Windows Server 2008, Enterprise Edition and Datacenter Edition
  Windows Server 2003, Enterprise Edition and Datacenter Edition
  所有 Windows 系统都不支持内存热拔操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值