KVM性能优化之CPU篇
简单说就是如何让CPU利用最大化。
SMP技术
==对称指的就是CPU之间是平等的无主从,访问资源也是平等。
最大特点:就是CPU共享所有资源,比如总线,内存,IO系统等等。
各个CPU之间是平等的关系,然后操作系统管理着这些CPU对资源的访问(通常是用队列的形式去管理)
弊端:很快就显现出来了,那就是它的扩展能力不强。
如果服务器要提升性能增加CPU,那么内存(内存最大化的情况下)就明显不够了
SMP型的服务器CPU最好是2-4颗就OK了,多余的就浪费了。
NUMA技术
CPU这块我们是针对NUMA这块的调优,意思就是非统一内存访问,它是一种解决多CPU共同工作的解决方案。
有了NUMA技术那么就可以把几十个甚至上百个CPU组合在一个服务器內。
每个CPU模块之间都是通过互联模块进行连接和信息交互,CPU都是互通互联的,
同时,每个CPU模块平均划分为若干个Chip(不多于4个),每个Chip都有自己的内存控制器及内存插槽。
在NUMA中还有三个节点的概念:
- 本地节点: 对于某个节点中的所有CPU,此节点称为本地节点。
- 邻居节点:与本地节点相邻的节点称为邻居节点。
- 远端节点:非本地节点或邻居节点的节点,称为远端节点。
邻居节点和远端节点,都称作非本地节点(Off Node)。
访问本地节点的速度最快,访问远端节点的速度最慢,即访问速度与节点的距离有关,距离越远访问速度越慢,此距离称作Node Distance。
如果你的应用程序能有方法固定在一个CPU模块里,那么你的应用的性能将会有很大的提升。
在CPU优化这块就是要让KVM绑定在指定的CPU上,这样减少跨CPU的交互使用,让KVM的性能提升。
numactl --hardware
numastat
numastat -c qemu-kvm //相关进程的NUMA内存使用情况
linux默认使用的就是NUMA自动平衡策略
CPU绑定操作
操作系统还有CPU特性都采用了NUMA架构,那么我们完全可以通过调整KVM对应的NUMA关系来达到KVM CPU这方面的优化。
virsh vcpuinfo Win7-ent
vCPU分别绑定
virsh vcpupin Win7-ent 0 22
virsh vcpupin Win7-ent 1 23
virsh dumpxml Win7-ent
CPU 热添加
热添加是在Redhat7.0以后才出现的(要求KVM宿主机和虚拟机都得在7.0版本以后)
给这个虚拟机添加第三个CPU,原来是2个,现在再添加一个变成3个: 也就是说不支持热减少
setvcpus VM3_CentOS7.1 3 --live
echo 1 >/sys/devices/system/cpu/cpu2/online //这是激活cpu
总结
到这为止, 以上就是KVM CPU方面的优化。总结起来就两点,一个是CPU绑定,还有一个就是热添加。
CPU绑定首先得了解NUMA技术,然后站在整个宿主机CPU资源的层面去调节。
热添加,当你某个虚拟机正在运行,然后突然业务压力增大了,可以通过这方法达到0停机提升虚拟机CPU性能。