VCPU 调度统计

对于共享处理器 LPAR,POWER 虚拟机管理程序维护着 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 个数字。

第一个数字对应于

  1. 自统计信息收集开始以来的 vCPU 调度总数

接下来的 4 个数字表示 vCPU 调度分散情况

  1. 此 vCPU 与上次调度在同一处理器上的次数

  2. 此 vCPU 与上次调度在不同的处理器核心上,但在同一芯片内的次数

  3. 此 vCPU 在不同的芯片上调度的次数

  4. 此 vCPU 在不同的插槽/抽屉上(下一个 NUMA 边界)调度的次数

最后 3 个数字表示与 vCPU 主节点相关的统计信息

  1. 此 vCPU 在其主节点(芯片)上调度的次数

  2. 此 vCPU 在不同的节点上调度的次数

  3. 此 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 次调度在其主节点之外,在相邻的芯片上。