"중단되지 않는 수면"이 "유휴"로 계산되지 않는 이유는 무엇입니까?

"중단되지 않는 수면"이 "유휴"로 계산되지 않는 이유는 무엇입니까?

"유휴 프로세스 무시"를 의미하는 -i 매개변수를 사용하여 이를 실행하면 top -bi결과 프로세스 목록(아래 참조)은 당시 S 프로세스가 있더라도 R 또는 D입니다.

그렇다면 방해받지 않는 수면은 왜 "유휴"로 간주되지 않습니까? 또한 "부하 평균"은 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)는 모두 사용 중인 것으로 간주됩니다.

관련 정보