性能计数器读数不对?
麒麟服务器上性能计数器读数为 0、超限或前后不一致的原因与查法:芯片计数器支持差异、多个采样器冲突、单位换算错,给核对命令。
简短答案
先别断定”计数器坏了”。常见是三种:芯片的可暴露性能计数器(PMU)有限,当前内核版本能给出的读数范围以发行说明为准;两个工具同时采样同一计数器互相干扰;采集侧单位换算(秒/分钟、单核/全机)做错。按这个顺序核对。
现象对照表
| 现象 | 可能原因 |
|---|---|
| 某计数器恒为 0 | 该芯片/内核组合不支持此计数器,以发行说明为准 |
| 偶发极大值或负值 | 采样中断、计数器溢出或跨核统计 |
| 不同工具读数差很多 | 采样窗口不同,或同时跑了多个采样器 |
| 跑久了才异常 | 有长任务持续占用计数器资源 |
排查步骤
# 看芯片型号与相关标志
lscpu
grep -m1 'model name' /proc/cpuinfo
# 用基础工具交叉核对同一指标
vmstat 1 5
mpstat -P ALL 1 5
# 检查是否有多个采样/统计任务并行
ps -ef | grep -E 'perf|top|sar' | grep -v grep
ARM 与 x86 芯片可用的计数器项目不同,个别计数器读不到属正常,支持范围以发行说明和厂商文档为准。
处理办法
- 恒为 0:先确认该计数器在你的芯片上是否受支持(参考 服务器 V11 条目 的适配说明),再考虑更新系统小版本;
- 互相干扰:同一时段只保留一个采样器,其余临时停掉;
- 换算问题:核对采集侧的采样窗口与单位定义;
- 排除系统层面的干扰仍复现的,重刷基线对照:介质取 银河麒麟镜像列表,按 Rufus 启动盘条目 写 U 盘。
操作小结
- 先交叉核对(基础工具与采集值互比);
- 排除多采样器并行;
- 硬件支持范围拿不准就注明”以发行说明为准”,不硬凑数值;
- 记录结论时附上芯片型号,方便复现与追溯。