kvm下虚机使用dimm内存设备

来源:互联网 发布:大数据分析平台架构 编辑:程序博客网 时间:2024/05/17 15:42
kvm下的虚机在qemu和libvirt处默认使用balloon方式的内存,还可以支持使用dimm设备内存,本文介绍如何配置虚机使用dimm设备。
Linux下对虚机的管理通常使用libvirt,虚机的配置以xml文件格式保存,所以需修改xml文件。
1.在虚机xml文件的memory字段处配置maxMemory,以限制虚机总内存大小和可插入dimm设备的slot数。
<maxMemory slots='16' unit='KiB'>
12524288</maxMemory>
2.在cpu字段处增加虚机numa配置,并指定虚机内存大小。
<numa>
 <cell cpus='0-1' memory='1048576'/> 为虚机配置numa
 <cell cpus='2-3' memory='1048576'/>
</numa>
3.device字段配置dimm设备
<memory model='dimm'>
  <source>物理机侧的配置,可选项,不指定的话默认采用numatune的配置
    <pagesize unit='KiB/>'4096</pagesize>  设置后忽略主机内存默认的页大小
   <nodemask>1-3</nodemask>  从指定numa节点分配内存
  </source>
   <target>虚机侧的配置,指定插入内存设备的大小及虚机中的numa节点
   <size unit='KiB'>524287</size>
   <node>1</node>
   </target>
</memory>
4.支持情况说明
对于dimm设备可以创建虚机时指定配置或是以
device方式virsh attach-device热插给虚机使用,
qemu命令行中有-device pc-dimm,node=0,
memdev=memdimm1,id=dimm1字段,表示使用dimm设备。
Qemu和libvirt将dimm设备配置给虚机之后,虚机操作系统本身也要识别到该设备才能正常使用,如果在虚机系统中free看到内存没有包含dimm设备的大小,可进行如下操作:
到/sys/devices/system/memory/下面检查每个memory下面的state是否为online,主要针对memory32之后的如:
[root@localhost memory]# cat memory32/state 
offline
[root@localhost memory]#
这是系统内核编译时决定对于热插内存是否默认为online,如果为offline,则需手动执行echo online > memory32/state。
详见:https://www.kernel.org/doc/Documentation/memory-hotplug.txt
设置online后再用free查看内存会发现已经识别到dimm设备的内存,虚机可以正常使用该部分内存。  
如果虚机系统是64位的,并且创建虚机时配置的内存小于4G,则需要在grub里面设置iommu=soft来开启IOMMU以支持虚机系统使用dimm设备的内存。
检查是否开启IOMMU:
[root@localhost memory]# dmesg|grep SWIO
[0.522781] PCI-DMA: Using software bounce buffering for IO (SWIOTLB) 
详见:https://www.kernel.org/doc/Documentation/x86/x86_64/boot-options.txt
0 0