内容从<深度实践KVM>一书总结
CPU、内存虚拟化技术与应用场景
NUMA技术与应用
1.SMP技术
2.MPP模式
3.NUMA技术(none Uniform memory access architecture)非一致性内存访问架构
numactl --hardware :查看当前CPU硬件的情况
numastat -c qemu-kvm
关闭Linux系统的自动平衡:echo 0 > /proc/sys/kernel/numa_balancing
虚拟机NUMA信息查看与配置
virsh numatune:查看修改虚拟机的NUMA配置
<numatune>
<memory mode=‘strict‘ placment=‘auto‘/>
</numatune>
<numatune>
<memory mode=‘strict‘ node=‘0,2-3‘/>
</numatune>
使用numatune配置虚拟机的NUMA
virsh numatune rhel7 --nodeset ‘0,2-3‘
vCPU的设置如下
<vcpu placement=‘auto‘>8</vcpu>
<vcpu placement=‘static‘ cpuset=‘0-10,^5‘>8</vcpu>
<vcpu>和<numatune>需要保持一致,<numatune>配置的是物理CPU,<vcpu>配置的是CPU的核,包括超线程产生的核。<numatune>使用strict模式,<nodeset>也必须是.
设置一个虚拟机给32个虚拟CPU,但是一开始只能使用8个.然后根据系统压力,热添加CPU给虚拟机
<vcpu placement=‘auto‘ current=‘8‘>32</vcpu>
CPU pinning策略
<cputune>
<vcpupin vcpu="0" cpuset="1-4",^2"/>
<vcpupin vcpu="1" cpuset="0,1"/>
<vcpupin vcpu="2" cpuset="2,3"/>
<vcpupin vcpu="3" cpuset="0,4"/>
</cputune>
或者使用emulatorpin的方式
<cputune>
<emulatorpin cpuset="1-3"/>
</cputune>
virsh emulatorpin CentOS7 1-3
<cpu>
……
<numa>
<cell cpus=‘0-3‘ memory=‘512000‘/>
<cell cpus=‘4-7‘ memory=‘512000‘/>
</numa>
...
</cpu>
cell:numa的cell或者numa节点
cpus:一个物理CPU可以使用的CPU范围
memory:可以使用的内存大小,单位为KB
虚拟机NUMA和内存KSM
KSM技术可以合并相同的页,即使是不同的NUMA节点
关闭ksm
echo 0 > /sys/kernel/mm/ksm/merge_across_nodes
或者
<memoryBacking>
<nosharepages/>
</memoryBakcing>
CPU绑定操作方法
可以在线配置,并且立即生效
1.CPU信息查看
virsh vcpuinfo 21 <------ 虚拟机ID
在线绑定虚拟机的CPU
virsh emulatorpin 21 26-31 --live
virsh vcpuinfo 21
virsh # dumpxml 21
NUMA在虚拟化应用之外的提示:
某些应用,比如数据库,为了保证性能,需要尽量使用更多的内存.如果使用系统默认的NUMA自动平衡策略,有可能一个CPU的内存消耗光,另外一个CPU还有内存可以使用,但是系统却去调度swap使用,造成严重的性能下降,使用这些内存消耗型的应用时,可以考虑直接将系统的NUMA自动平衡策略关闭
CPU热添加与应用
cat /proc/interrupts 查看CPU中断可是看到有几颗CPU在工作
virsh setvcpus CentOS7 5 --live
echo 1 > /proc/devices/system/cpu/cpu4/online激活CPU4
CPU Nested技术与配置方法
第一步
rmmode kvm-intel
modprobe kvm-intel nested=1
或者修改modprobe.d 编辑/etc/modprobe.d/kvm_mod.conf
options kvm-intel nested=y
检查cat /sys/module/kvm_intel/parameters/nested Y
第二步:
第一层的虚拟机配置文件,要将物理机CPU的特性全部传给虚拟机,使用CPU HOST技术
<cpu mode=‘host-passthrough‘/>
第三步:
和宿主机一样,将第一层虚拟机按照宿主机配置,安装相应的组件,然后就可以安装第二层的虚拟机
KSM技术与应用
1. 宿主机内存合并
KSM服务
ksmtuned服务
要关闭KSM,关闭相关的两个服务
service ksm stop
servicde ksmtuned stop
chkconfig ksm off
chkconfig ksmtuned off
桌面虚拟机推荐使用, 但是要根据实际情况控制内存超用的比率
内存气球技术
1.安装virt balloon的驱动,内核开启CONFIG_VIRTIO_BALLOON CentOS7默认开启,并且默认安装该驱动
lspci
...
Red Hat.Inc Vritio balloon
虚拟机需要增加以下配置
<memballoon model=‘virtio‘>
<alias name=‘balloon0‘/>
</memballoon>
查看当前内存大小
virsh qemu-monitor-command windows7 --hmp --cmd info balloon
balloon:actual=4096
限制内存大小为2GB并查看
virsh qemu-monitor-command windows7 --hmp --cmd balloon 2048
内存限制技术
virsh memtune virtual_machine --parameter size
hard_limit
soft_limit
swap_hard_limit
min_guarantee
virsh memtune windows7 --hard_limit 9437184 --config
virsh memtune windows7 --soft_limit 7340032 --config
virsh memtune windows7 --swap_hard_limit 10488320 --config
virsh memtune windows7 --min_guarantee 4194304 --config
--config写到配置文件中,下次重启虚拟机进程生效
--live:影响正在运行的虚拟机,虚拟机进程停止后,效果消失
--current:影响停止和正在运行的虚拟机,如果虚拟机运行,虚拟机进程停止后,效果消失
本文出自 “lionel” 博客,请务必保留此出处http://reliable.blog.51cto.com/10292844/1782384
原文地址:http://reliable.blog.51cto.com/10292844/1782384