가설
내 가정은 내 이해를 바탕으로 사실이라고 믿는 것입니다.
- TASK_INTERRUPTIBLE 및 TASK_UNINTERRUPTIBLE 상태의 작업은 "실행 가능"하지 않습니다. 따라서 스케줄러가 실행할 다음 작업을 선택할 때 고려되지 않습니다(Linux 커널 개발의 4장 참조).
- TASK_UNINTERRUPTIBLE과 TASK_INTERRUPTIBLE의 유일한 차이점은 SIGTERM과 같은 신호가 전자에 영향을 미치지 않는다는 것입니다.
- 이는 TASK_UNINTERRUPTIBLE/TASK_INTERRUPTIBLE이 CPU 시간을 전혀 소비하지 않아야 함을 의미합니다.
사람들이 무슨 말을 하는지 보니
- https://stackoverflow.com/questions/223644/what-is-an-uninterruptible-process
- https://superuser.com/questions/791840/how-can-a-process-in-interruptible-sleep-state-use-100-cpu
위 두 링크의 많은 의견/답변은 다음과 같습니다.
- TASK_UNINTERRUPTIBLE은 SIGNAL(예: SIGTERM)의 영향을 받지 않습니다.
- "빠른" 디스크 I/O의 경우(tty와 같은 "느린" I/O와는 다름)처럼 작업이 완료되기 위해 실행되어야 하며 중단되어서는 안 됩니다.
하나의 대답(두 번째 링크)만이 작업이 신호의 영향을 받지 않기 때문에 "CPU가 멈춰 있기 때문에" 중단할 수 없는 작업이 CPU를 소비한다고 명시적으로 명시하고 있습니다.
질문
- 논스톱 작업이 CPU를 소비합니까?
- 이것이 사실이라면 내 가설과 모순되는 것입니다. 내 가정 중 어느 것이 잘못되었나요?
답변1
중단 가능 또는 중단 불가능 절전 상태의 작업은 우선 절전 모드이므로 말씀하신 대로 실행이 불가능하고 예약되지 않으므로 CPU를 소비하지 않습니다.
top
SU 질문의 혼란은 CPU 사용량 측정(다른 곳 )이 시간 간격을 기반으로 하는 반면 프로세스 상태는 특정 시점에서 측정된다는 사실에서 비롯될 수 있습니다 . 따라서 기술적으로 프로세스가 마지막 측정 간격의 100% 이상으로 예약되어 CPU를 100% top
(또는 여러 예약 스레드가 있는 경우 그 이상) 소비하는 것처럼 보일 수 있지만 여전히 논스톱 상태에서 top
상태를 확인하면 실행 가능합니다.