/proc/<pid>/stat
모든 프로세스에 대해 사용자 CPU, 시스템 CPU, 하위 사용자 및 하위 시스템 CPU를 추가했습니다 . 이전 샘플에서 델타를 가져왔습니다.
사용자, Nice 및 시스템 CPU를 합산한 후에는 /proc/stat
전체 상자에 해당해야 합니다. 나는 다시 델타를 취한다.
프로세스의 합은 거의 항상 전체 프로세서의 합보다 약간 크며 그 이유를 이해할 수 없습니다.
답변1
여기에는 여러 가지 이유가 있는데, 가장 확실한 이유는 각 프로세스의 회계가 서로 다른 논리를 사용하여 서로 다른 것을 계산한다는 것입니다.
두 가지 구체적인 예:
- 시스템 에는 사용자가 좋은 작업(낮은 우선순위)에 보낸 시간을 계산하는 열이
stat
있습니다nice
. 보낸 시간을 지정하지 않았으므로 합산하지 않은 것 같습니다. 이 과정에서 이는 표준 사용자 시간으로 계산됩니다. iowait
시간(또한 고려하지 않은 시간)은 프로세스에서stat
시스템 시간 으로 계산될 수 있습니다. 그러나iowait
동시에 시간을 계산하는 것은man proc
아래와 같이 실제 시간을 계산하는 것이 매우 신뢰할 수 없기 때문에 좋지 않은 생각입니다.
iowait (리눅스 2.5.41부터)
(5) I/O가 완료될 때까지 기다리는 시간입니다. 이 값은 다음과 같은 이유로 신뢰할 수 없습니다.
CPU는 I/O가 완료될 때까지 기다리지 않습니다. iowait는 작업이 I/O가 완료될 때까지 기다리는 시간입니다. 완료되지 않은 작업 I/O로 인해 CPU가 유휴 상태가 되면 해당 CPU에 다른 작업이 예약됩니다.
멀티 코어 CPU에서는 I/O가 완료되기를 기다리는 작업이 어떤 CPU에서도 실행되지 않으므로 CPU당 iowait를 계산하기 어렵습니다.
경우에 따라 이 필드의 값이 줄어들 수 있습니다.
마지막으로, 이러한 유형의 회계는 심각한 목적을 위해 충분히 정확할 수 없기 때문에 쓸모가 없다고 생각합니다. 시스템 및 프로세스 카운터는 다양한 목적을 위해 시스템의 다른 부분에서 처리되며 어떤 것과도 일치하지 않습니다. 유용한 정도.