13.2.4. 关于在 Emulator Thread scheduling 上 isolcpus 的影响
使用 isolcpus 时,C CFS 调度程序被禁用,所有仿真程序线程都将在第一个可用、最低索引的 pCPU 上运行。因此,如果没有干预或进一步配置,实例的一个 vCPU 会为仿真器线程的资源争用造成高风险。
更多信息请参阅 Kernel.org Bugzilla - Bug 116701。
使用以下算法来确定仿真程序线程使用哪个 vCPU:
PCPU=MIN([EMULATORPINSET]) VCPU=REVERSE_CPUSET(PCPU) REVERSE_CPUSET := SELECT pcpu from `virsh dumpxml <instance name> | grep "cpuset=$PCPU"`
例如,在这个实例中,所有仿真程序线程和子项从默认模拟器固定集继承了关联 1-3:
[root@overcloud-compute-0 ~]# taskset -a -c -p `pgrep -f instance-00000009` pid 364936's current affinity list: 1-3 pid 364946's current affinity list: 1-3 pid 364952's current affinity list: 1 pid 364953's current affinity list: 2 pid 364954's current affinity list: 3 pid 364956's current affinity list: 1-3 [root@overcloud-compute-0 ~]# ps -Tp `pgrep -f instance-00000009` PID SPID TTY TIME CMD 364936 364936 ? 00:00:02 qemu-kvm 364936 364946 ? 00:00:00 qemu-kvm 364936 364952 ? 00:00:51 CPU 0/KVM 364936 364953 ? 00:00:26 CPU 1/KVM 364936 364954 ? 00:00:30 CPU 2/KVM 364936 364956 ? 00:00:00 vnc_worker [root@overcloud-compute-0 ~]# pgrep -f vhost- | xargs -I {} taskset -a -c -p {} pid 364948's current affinity list: 1-3 pid 364949's current affinity list: 1-3 pid 364950's current affinity list: 1-3 [root@overcloud-compute-0 ~]#
与 isolcpus 相结合,所有仿真程序线程和 vhost-* 线程在 pCPU1 上执行,且永远不会重新调度:
cat /proc/sched_debug | sed '/^cpu#/,/^runnable/{//!d}' | grep vhost -C3 (...) cpu#1, 2099.998 MHz runnable tasks: task PID tree-key switches prio wait-time sum-exec sum-sleep ---------------------------------------------------------------------------------------------------------- watchdog/1 11 -2.995579 410285 0 0.000000 5025.887998 0.000000 0 / migration/1 12 0.000000 79 0 0.000000 3.375060 0.000000 0 / ksoftirqd/1 13 5172444.259776 54 120 0.000000 0.570500 0.000000 0 / kworker/1:0 14 5188475.472257 370 120 0.000000 14.707114 0.000000 0 / kworker/1:0H 15 8360.049510 10 100 0.000000 0.150151 0.000000 0 / kworker/1:1 2707 5045807.055876 16370 120 0.000000 793.611916 0.000000 0 / kworker/1:1H 2763 5187682.987749 11755 100 0.000000 191.949725 0.000000 0 / qemu-kvm 364936 3419.522791 50276 120 0.000000 2476.880384 0.000000 0 /machine.slice/machine-qemu\x2d6\x2dinstance\x2d00000009.scope/emulator qemu-kvm 364946 1270.815296 102 120 0.000000 23.204111 0.000000 0 /machine.slice/machine-qemu\x2d6\x2dinstance\x2d00000009.scope/emulator CPU 0/KVM 364952 52703.660314 53709 120 0.000000 52715.105472 0.000000 0 /machine.slice/machine-qemu\x2d6\x2dinstance\x2d00000009.scope/vcpu0 vnc_worker 364956 123.609634 1 120 0.000000 0.016849 0.000000 0 /machine.slice/machine-qemu\x2d6\x2dinstance\x2d00000009.scope/emulator vhost-364936 364948 3410.527677 1039 120 0.000000 84.254772 0.000000 0 /machine.slice/machine-qemu\x2d6\x2dinstance\x2d00000009.scope/emulator vhost-364936 364949 3407.341502 55 120 0.000000 2.894394 0.000000 0 /machine.slice/machine-qemu\x2d6\x2dinstance\x2d00000009.scope/emulator vhost-364936 364950 3410.395220 174 120 0.000000 10.969077 0.000000 0 /machine.slice/machine-qemu\x2d6\x2dinstance\x2d00000009.scope/emulator cpu#2, 2099.998 MHz runnable tasks: task PID tree-key switches prio wait-time sum-exec sum-sleep ---------------------------------------------------------------------------------------------------------- watchdog/2 16 -5.995418 410285 0 0.000000 5197.571153 0.000000 0 / migration/2 17 0.000000 79 0 0.000000 3.384688 0.000000 0 / ksoftirqd/2 18 -7.031102 3 120 0.000000 0.019079 0.000000 0 / kworker/2:0 19 0.119413 39 120 0.000000 0.588589 0.000000 0 / kworker/2:0H 20 -1.047613 8 100 0.000000 0.086272 0.000000 0 / kworker/2:1 2734 1475469.236026 11322 120 0.000000 241.388582 0.000000 0 / CPU 1/KVM 364953 27258.370583 33294 120 0.000000 27269.017017 0.000000 0 /machine.slice/machine-qemu\x2d6\x2dinstance\x2d00000009.scope/vcpu1 cpu#3, 2099.998 MHz runnable tasks: task PID tree-key switches prio wait-time sum-exec sum-sleep ---------------------------------------------------------------------------------------------------------- watchdog/3 21 -5.996592 410285 0 0.000000 4970.777439 0.000000 0 / migration/3 22 0.000000 79 0 0.000000 3.886799 0.000000 0 / ksoftirqd/3 23 -7.035295 3 120 0.000000 0.014677 0.000000 0 / kworker/3:0 24 17.758583 38 120 0.000000 0.637152 0.000000 0 / kworker/3:0H 25 -1.047727 8 100 0.000000 0.077141 0.000000 0 / kworker/3:1 362530 154177.523420 83 120 0.000000 6.544285 0.000000 0 / CPU 2/KVM 364954 32456.061889 25966 120 0.000000 32466.719084 0.000000 0 /machine.slice/machine-qemu\x2d6\x2dinstance\x2d00000009.scope/vcpu2