VCPU 调度统计¶
对于共享处理器的 LPAR,POWER Hypervisor 会维护一个 LPAR 处理器 (vcpu) 到物理处理器芯片(代表“归属”节点)的相对静态的映射,并尝试始终在它们关联的物理处理器芯片上调度 vcpu。然而,在某些情况下,vcpu 可能会被调度到不同的处理器芯片上(远离其归属节点)。
/proc/powerpc/vcpudispatch_stats 可用于获取与 vcpu 调度行为相关的统计信息。向此文件写入 ‘1’ 可启用统计收集,而写入 ‘0’ 则禁用统计。默认情况下,每个 vcpu 的 DTLB 日志每秒处理 50 次,以免错过任何条目。可以通过 /proc/powerpc/vcpudispatch_stats_freq 修改此处理频率。
通过读取 procfs 文件 /proc/powerpc/vcpudispatch_stats 可以查看统计信息本身。输出中的每一行对应一个 vcpu(由第一个字段表示),后跟 8 个数字。
第一个数字对应于
自统计收集开始以来的 vcpu 总调度次数
接下来的 4 个数字表示 vcpu 调度离散情况
该 vcpu 与上次调度在同一处理器上执行的次数
该 vcpu 与上次调度在不同处理器核心但同一芯片内执行的次数
该 vcpu 在不同芯片上执行的次数
该 vcpu 在不同插槽/抽屉(下一个 NUMA 边界)上执行的次数
最后 3 个数字表示与 vcpu 归属节点相关的统计信息
该 vcpu 在其归属节点(芯片)内执行的次数
该 vcpu 在不同节点执行的次数
该 vcpu 在更远节点(NUMA 距离)执行的次数
输出示例
$ sudo cat /proc/powerpc/vcpudispatch_stats
cpu0 6839 4126 2683 30 0 6821 18 0
cpu1 2515 1274 1229 12 0 2509 6 0
cpu2 2317 1198 1109 10 0 2312 5 0
cpu3 2259 1165 1088 6 0 2256 3 0
cpu4 2205 1143 1056 6 0 2202 3 0
cpu5 2165 1121 1038 6 0 2162 3 0
cpu6 2183 1127 1050 6 0 2180 3 0
cpu7 2193 1133 1052 8 0 2187 6 0
cpu8 2165 1115 1032 18 0 2156 9 0
cpu9 2301 1252 1033 16 0 2293 8 0
cpu10 2197 1138 1041 18 0 2187 10 0
cpu11 2273 1185 1062 26 0 2260 13 0
cpu12 2186 1125 1043 18 0 2177 9 0
cpu13 2161 1115 1030 16 0 2153 8 0
cpu14 2206 1153 1033 20 0 2196 10 0
cpu15 2163 1115 1032 16 0 2155 8 0
在上面的输出中,对于 vcpu0,自启用统计信息以来已经进行了 6839 次调度。其中 4126 次调度与上次在同一个物理 cpu 上。2683 次是在不同的核心上,但在同一个芯片内,而 30 次调度与上次调度相比是在不同的芯片上。
此外,在总共 6839 次调度中,我们看到有 6821 次调度是在 vcpu 的归属节点上,而 18 次调度是在其归属节点之外的相邻芯片上。