Content #
我们对照 Top 运行界面,"%Cpu(s)“开头的这一行,你会看到一串数值,也就是 “0.0 us, 0.0 sy, 0.0 ni, 99.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st”,那么这里的每一项值都是什么含义呢?
下面这张图里最长的带箭头横轴,我们可以把它看成一个时间轴。同时,它的上半部分代表 Linux 用户态(User space),下半部分代表内核态(Kernel space)。这里为了方便你理解,我们先假设只有一个 CPU 吧。
- “us"框,“us"是"user"的缩写,代表 Linux 的用户态 CPU Usage。
- “sy"是 “system"的缩写,代表内核态 CPU 使用。
- “wa"是"iowait"的缩写,代表等待 I/O 的时间,这里的 I/O 是指 Disk I/O。
- 当磁盘返回数据时,进程在内核态拿到数据,这里仍旧是内核态的 CPU 使用中的"sy”,也就是图中的第四个框。
- 进程再从内核态切换回用户态,在用户态得到文件数据,这里进程又回到用户态的 CPU 使用,“us”,对应图中第五个框。
- 这时在这个 CPU 上也没有其他需要运行的进程了,那么系统就会进入"id"这个步骤,也就是第六个框。“id"是"idle"的缩写,代表系统处于空闲状态。
- 如果这时这台机器在网络收到一个网络数据包,网卡就会发出一个中断(interrupt)。CPU 会响应中断,然后进入中断服务程序。这时,CPU 就会进入"hi”,也就是第七个框。“hi"是"hardware irq"的缩写,代表 CPU 处理硬中断的开销。
- 从网卡收到数据包的大部分工作,都是通过软中断来处理的。CPU 就会进入到第八个框,“si”。这里"si"是"softirq"的缩写,代表 CPU 处理软中断的开销。