cpu wa
👌 我明白了,你需要的是把 两个文档合并:
-
逐指标展开分析逻辑(cycles/instructions、context-switches、page-faults、syscalls 等 → 如何推导分支)。
-
典型 %wa 场景说明(本地块设备、NFS/iSCSI、Swap、虚拟化、驱动阻塞),并把 perf stat → perf trace/perf top → 系统工具验证 串联起来。
这样既有 渐进式分析路径,也有 场景对照表。
🔎 Linux CPU %wa 系统化分析手册
1️⃣ %wa 的定义
-
%wa= CPU 空闲但有进程等待 block I/O 完成。 -
并非一定是磁盘 I/O,也可能是:
-
网络存储 I/O (NFS/iSCSI/CEPH)
-
内存 Swap I/O
-
虚拟化宿主机 I/O 调度延迟
-
特殊驱动或硬件阻塞
-
2️⃣ 初始全局统计(perf stat)
perf stat -a sleep 60
关键指标及解释
| 指标 | 作用 | 典型异常表现 | 初步怀疑 | 下一步 |
|---|---|---|---|---|
| cycles / instructions (CPI) | 衡量 CPU 执行效率 | CPI 高(>3)= stall | I/O stall 或内存瓶颈 | perf top -a 看热点 |
| context-switches | 进程切换次数 | 秒级上万次 | I/O wait 或锁竞争 | perf sched / pidstat -w |
| page-faults (major) | 内存缺页异常 | major faults 高 | swap I/O | vmstat、sar -B |
| syscalls | 内核调用量 | read/write/fsync/ioctl ↑ | I/O 类型相关 | perf trace -a |
| cpu-migrations | 核间迁移 | 明显偏高 | 调度/NUMA 负担 | 仅参考 |
👉 这里完全不依赖 PID,先用 全局指标 判断大类问题。
3️⃣ 分支分析逻辑
-
page-faults 高 → swap 分支
-
vmstat 1→ si/so 是否高 -
free -m→ swap 使用量
-
-
syscalls 高 → syscall 分支
-
perf trace -a→ 哪类 syscall 最耗时 -
read/write → 块 I/O 或网络存储
-
fsync → 数据库/日志刷盘
-
ioctl → 驱动/特殊设备
-
-
context-switches 高,但 syscall 不明显 → 调度/锁分支
-
perf sched record/perf sched latency -
perf top 看是否卡在
schedule()/io_schedule()
-
-
CPI 高,但 syscalls/ctx/faults 正常 → stall 分支
-
perf top -a看热点 -
可能是 NUMA 远程访问、宿主机 I/O 调度延迟
-
4️⃣ 典型 %wa 场景对照表
| 场景 | perf stat 特征 | perf trace / top | 验证工具 | 说明 |
|---|---|---|---|---|
| 本地块设备 I/O | syscalls ↑ (read/write/fsync),CPI ↑ | io_schedule(), blk_finish_request |
iostat -x 1, blktrace |
磁盘繁忙、坏块重试、日志刷盘 |
| 网络存储 I/O (NFS/iSCSI) | read/write ↑,但 iostat 平稳 | nfs_file_read, tcp_sendmsg |
nfsstat, tcpdump |
网络抖动、NFS 卡顿 |
| Swap I/O | page-faults ↑↑ (major),syscalls 正常 | swap_readpage, do_swap_page |
vmstat si/so, sar -B |
内存不足,大量换页 |
| 虚拟化宿主机 I/O 延迟 | CPI ↑↑,但 syscalls/faults 不突出 | kvm_vcpu_block, schedule() |
perf kvm stat, 宿主机 iostat |
宿主机过载,虚拟机 I/O 延迟 |
| 驱动/特殊设备阻塞 | ioctl ↑,CPI 中等 | 驱动相关函数 | strace, dmesg |
RAID 控制器、GPU、特殊硬件 bug |
5️⃣ 标准化分析路径
-
perf stat -a(全局指标)
-
判断分支:
-
faults 高 → swap
-
syscalls 高 → I/O 类型
-
ctx 高 → I/O 或锁
-
CPI 高 → stall
-
-
perf trace -a(全局 syscall 耗时分布)
-
perf top -a(内核热点函数)
-
按分支用验证工具确认:
-
swap → vmstat
-
本地块 I/O → iostat / blktrace
-
NFS/iSCSI → nfsstat / tcpdump
-
虚拟化 → perf kvm stat
-
驱动 → strace / dmesg
-
这样两个文档的内容就合并了:
-
前半部分:指标作用 + 分支判断
-
后半部分:典型 %wa 场景对照表
要不要我帮你整理成一个 操作手册版(带命令序列和判断提示),你在现场排查时直接按顺序执行就能走完整个分析路径?
浙公网安备 33010602011771号