为什么“不间断睡眠”不被算作“IDLE”?

为什么“不间断睡眠”不被算作“IDLE”?

当我运行时top -bi,参数 -i 表示“忽略空闲进程”,结果进程列表(见下文)是 R 或 D,尽管当时有 S 进程。

那么,为什么不间断睡眠不被算作“空闲”呢?而且,“平均负载”似乎等于 R 进程数加上 D 进程数?

top - 17:47:44 up 141 days, 14:29,  2 users,  load average: 4.10, 4.18, 4.17
Tasks: 224 total,   1 running, 223 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.1%us,  0.4%sy,  0.0%ni, 87.2%id, 12.3%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:  16432240k total, 16345816k used,    86424k free,  4934652k buffers
Swap: 16386292k total,     6996k used, 16379296k free,    71432k cached

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                             
7479 root      18   0 1357m 1.1g  904 D    1  7.0  10:27.86 rsync                                                               
7463 root      18   0 1315m 1.0g  840 D    1  6.6   9:45.83 rsync                                                               
7469 root      18   0 1088m 889m  840 D    0  5.5   8:10.20 rsync                                                               
7524 root      18   0 1106m 895m  840 D    0  5.6   8:13.60 rsync                                                               
30958 root      15   0 12720 1148  788 R    0  0.0   0:01.07 top

答案1

因为“不间断的睡眠”并不意味着空闲或睡觉。手册ps页已经对此进行了解释:通常是 IO,在 rsync 的情况下这并不奇怪。

答案2

当进程处于可中断睡眠状态时,这意味着内核正在执行进程请求的某些操作(主要是输入/输出)。当内核处理请求时,该进程正在休眠。当进程本身空闲时,内核代表进程忙,所以进程是通过代理忙的。用户模式代码 (R) 和内核模式代码 (D) 都算作忙。

相关内容