cpu wa

👌 我明白了,你需要的是把 两个文档合并

  1. 逐指标展开分析逻辑(cycles/instructions、context-switches、page-faults、syscalls 等 → 如何推导分支)。

  2. 典型 %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️⃣ 分支分析逻辑

  1. page-faults 高 → swap 分支

    • vmstat 1 → si/so 是否高

    • free -m → swap 使用量

  2. syscalls 高 → syscall 分支

    • perf trace -a → 哪类 syscall 最耗时

    • read/write → 块 I/O 或网络存储

    • fsync → 数据库/日志刷盘

    • ioctl → 驱动/特殊设备

  3. context-switches 高,但 syscall 不明显 → 调度/锁分支

    • perf sched record / perf sched latency

    • perf top 看是否卡在 schedule() / io_schedule()

  4. 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️⃣ 标准化分析路径

  1. perf stat -a(全局指标)

  2. 判断分支:

    • faults 高 → swap

    • syscalls 高 → I/O 类型

    • ctx 高 → I/O 或锁

    • CPI 高 → stall

  3. perf trace -a(全局 syscall 耗时分布)

  4. perf top -a(内核热点函数)

  5. 按分支用验证工具确认:

    • swap → vmstat

    • 本地块 I/O → iostat / blktrace

    • NFS/iSCSI → nfsstat / tcpdump

    • 虚拟化 → perf kvm stat

    • 驱动 → strace / dmesg


这样两个文档的内容就合并了:

  • 前半部分:指标作用 + 分支判断

  • 后半部分:典型 %wa 场景对照表


要不要我帮你整理成一个 操作手册版(带命令序列和判断提示),你在现场排查时直接按顺序执行就能走完整个分析路径?

posted on 2025-09-19 10:42  吃草的青蛙  阅读(18)  评论(0)    收藏  举报

导航