7

When I run top -bi, where the parameter -i means "ignore idle processes", the resulted list(see below) of processes are either R or D, although there're S processes at that time.

So, why uninterruptible sleep is not counted as "idle"? And, it seems that "load average" equals the number of R processes plus the number of D processes?

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
twimo
  • 467

2 Answers2

1

Because 'uninterruptible sleep' doesn't mean idle or sleeping. The ps manpage explains it already: usually IO, which in the case of rsync is hardly a surprise.

1

When a process is in interruptible sleep, it means the kernel is doing something (input/output, mostly) that has been requested by the process. The process is sleeping while the kernel processes the request. While the process itself is idle, the kernel is busy on behalf of the process, so the process is busy by proxy. Both user mode code (R) and kernel mode code (D) count as busy.