先来了解基本的信息。 1 宿主机CPU特性查看 使用 virsh nodeinfo 命令可以查看一些基本信息,虽然不够详细,但能获得大致概况。 virsh nodeinfo CPU model: x86_64 CPU(s): 32 CPU frequency: 1200 MHz CPU socket
KVM虚拟机CPU Pinning配置方法
时间:2026-07-25
浏览:179
文章目录
先来了解基本的信息。
1 宿主机CPU特性查看
使用 virsh nodeinfo 命令可以查看一些基本信息,虽然不够详细,但能获得大致概况。
virsh nodeinfo
CPU model: x86_64
CPU(s): 32
CPU frequency: 1200 MHz
CPU socket(s): 1
Core(s) per socket: 8
Thread(s) per core: 2
NUMA cell(s): 2
Memory size: 132119080 KiB
若要获取更详细的物理机CPU信息,例如物理CPU个数、每个CPU的核数以及是否开启超线程,则需要使用 virsh capabilities。
virsh capabilities
36353332-3030-3643-5534-3235445a564a
x86_64
SandyBridge
Intel
...
...
...
|
...
|
...
查看当前空闲内存可以使用 virsh freecell:
virsh freecell --all
0: 787288 KiB
1: 94192 KiB
--------------------
Total: 881480 KiB
此外,物理CPU的特性也可以通过 /proc/cpuinfo 查看:
cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 62
model name : Intel(R) Xeon(R) CPU E5-2640 v2 @ 2.00GHz
...
physical id : 0
siblings : 16
core id : 0
cpu cores : 8
...
综合以上信息,可以得出以下结论:
- 物理CPU为 E5-2640V2,8核2颗,开启了超线程,因此在系统中可以看到32个CPU;
- 物理机内存为128G。
2 虚拟机CPU使用情况查看
使用 virsh vcpuinfo 可以查看虚拟机的 vCPU 与物理CPU之间的对应关系。
virsh vcpuinfo 21
VCPU: 0
CPU: 25
State: running
CPU time: 10393.0s
CPU Affinity: --------yyyyyyyy--------yyyyyyyy
VCPU: 1
CPU: 8
State: running
CPU time: 7221.2s
CPU Affinity: --------yyyyyyyy--------yyyyyyyy
...
可以看到,vcpu0 被调度到了物理机的CPU 25上,状态为 running,使用时间为10393.0秒。
CPU Affinity 行中的 yyyyyyy 表示该虚拟机可以使用的物理CPU内部的逻辑核。从上面可以看到,它可以在8-15和24-31这些CPU之间调度。为什么0-7和16-23不能用呢?这其实是系统的自动numa平衡服务在起作用——默认情况下,一个虚拟机只能使用同一颗物理CPU内部的逻辑核。
若要确认虚拟机具体能使用哪些物理逻辑CPU,可以使用 emulatorpin:
virsh # emulatorpin 21
emulator: CPU Affinity
----------------------------------
*: 0-31
注意,0-31 全部可用。这意味着可以强制将CPU调度到任何一个物理CPU上。
3 在线pinning虚拟机的cpu
如果想强制让虚拟机只能在26-31这些CPU之间调度,可以执行以下操作:
virsh emulatorpin 21 26-31 --live
验证结果:
virsh emulatorpin 21
emulator: CPU Affinity
----------------------------------
*: 26-31
查看 vcpuinfo:
virsh vcpuinfo 21
VCPU: 0
CPU: 28
State: running
CPU time: 10510.5s
CPU Affinity: --------------------------yyyyyy
VCPU: 1
CPU: 28
State: running
CPU time: 7289.7s
CPU Affinity: --------------------------yyyyyy
...
查看对应的xml文件:
virsh # dumpxml 21
cacti-230
...
4
更进一步,可以强制让 vCPU 与物理机CPU一一绑定。例如强制 vcpu 0 绑定到物理CPU 28,vcpu 1 绑定到29,以此类推:
virsh vcpupin 21 0 28
virsh vcpupin 21 1 29
virsh vcpupin 21 2 30
virsh vcpupin 21 3 31
再次查看xml文件,配置已生效:
virsh # dumpxml 21
...
4
通过 vcpuinfo 命令验证:
virsh vcpuinfo 22
VCPU: 0
CPU: 28
State: running
CPU time: 1.8s
CPU Affinity: ----------------------------y---
VCPU: 1
CPU: 29
State: running
CPU time: 0.0s
CPU Affinity: -----------------------------y--
...
配置已生效。
4 cpu pinning简单的性能测试
CPU Pinning 对性能的影响究竟有多大?接下来进行一次简单的测试。测试环境如下:
- 硬件:Intel(R) Xeon(R) CPU X5650 @ 2.67GHz,两颗
- 宿主机系统:CentOS 7,内核 3.10.0-123.8.1.el7.x86_64
- 虚拟机:CentOS 7,同样内核
- 虚拟机配置:1颗CPU
- 测试工具:UnixBench 5.1.2
首先查看不做CPU绑定的结果:
System Benchmarks Index Score 1444.7
然后查看做了CPU绑定的结果:
System Benchmarks Index Score 1464.1
直接比较:
- 综合得分:绑定1464.1,不绑定1444.7,性能提升约1.34%
- 浮点运算:绑定3928.7,不绑定3880.4,性能提升约1.24%
结论:CPU Pinning 确实能带来一定提升,但幅度有限,大约在1%多一点。对于大多数场景而言,这个收益并不显著,但在某些对CPU亲和性要求极高的场景下,值得采用。
实用工具推荐
绿化、压缩、噪点和虚拟水印,自由调节做旧程度。
选择画质和输出格式,预览压缩前后的大小。