虚拟机CPU绑定设置
1. VCPU信息查看
1.1 VCPU与CPU对应关系
1
|
|
宿主机有一个物理CPU,8个物理核。此处的物理核,是指全部的逻辑CPU核,包括开启了超线程,即/proc/cpuinfo中列表的全部CPU核。如无特殊说明,下同。
如图可以看到,VCPU0被调度到物理核4上,VCPU1被调度到物理核5上。 CPU Affinity yyyyyyyy 代表物理核0~7均可以设置绑定,如果不可绑定会显示’-‘。
1.2 查看虚拟机可使用的逻辑CPU核
1
|
|
如图同样可以看到0~7核均可以设置绑定
2. VCPU在线绑定的方法
2.1 让VCPU只在部分物理核上调度
1
|
|
此时,dumpxml,会在XML中显示出当前VCPU的绑定关系:
1 2 3 4 5 6 |
|
2.2 VCPU与物理核一对一绑定
通常的应用场景下,需要VCPU与物理核一对一绑定,使其它的VCPU不能争抢当前VCPU资源,实现资源配置的需求。
1
|
|
XML文件中会有如下变更:
1 2 3 4 5 6 7 8 |
|
执行virsh reboot使虚拟机重启,绑定关系依然存在。
3. CPU绑定的原理
上述的CPU绑定方法,是libvirt通过cgroup实现的,有关cgroup的介绍可以通过Docker基础技术:Linux CGroup了解基本概念。
4. CPU绑定的应用场景
在虚拟机出现计算压力较大时,就可以考虑进行CPU的绑定。
例如,宿主机上运行着2台VM,VM1,VM2。VM1需要长时间跑一些压缩算法,CPU压力较大,VM2则做一些文件处理,主要瓶颈在I/O。这时,观察宿主机的物理CPU核的使用情况,发现CPU0 ~ CPU3的使用率在20%左右,而CPU4 ~ CPU7的使用率在80%左右,就可以考虑将VM1的VCPU绑定到CPU0 ~ CPU3,而将VM2的VCPU绑定到CPU4 ~ CPU7,这样可以使得需要大运算量的VM能够使用更多的计算资源,实现整体性能的提升。
5. 版权声明
本文内容的绝大部分节选自《深度实践KVM》的第三章,如有侵犯原作者权益,请联系本Blog.