/proc/pid/stat CPU 합계가 /proc/stat보다 큰 이유

/proc/pid/stat CPU 합계가 /proc/stat보다 큰 이유

/proc/<pid>/stat모든 프로세스에 대해 사용자 CPU, 시스템 CPU, 하위 사용자 및 하위 시스템 CPU를 추가했습니다 . 이전 샘플에서 델타를 가져왔습니다.

사용자, Nice 및 시스템 CPU를 합산한 후에는 /proc/stat전체 상자에 해당해야 합니다. 나는 다시 델타를 취한다.

프로세스의 합은 거의 항상 전체 프로세서의 합보다 약간 크며 그 이유를 이해할 수 없습니다.

답변1

여기에는 여러 가지 이유가 있는데, 가장 확실한 이유는 각 프로세스의 회계가 서로 다른 논리를 사용하여 서로 다른 것을 계산한다는 것입니다.

두 가지 구체적인 예:

  1. 시스템 에는 사용자가 좋은 작업(낮은 우선순위)에 보낸 시간을 계산하는 열이 stat있습니다 nice. 보낸 시간을 지정하지 않았으므로 합산하지 않은 것 같습니다. 이 과정에서 이는 표준 사용자 시간으로 계산됩니다.
  2. iowait시간(또한 고려하지 않은 시간)은 프로세스에서 stat시스템 시간 으로 계산될 수 있습니다. 그러나 iowait동시에 시간을 계산하는 것은 man proc아래와 같이 실제 시간을 계산하는 것이 매우 신뢰할 수 없기 때문에 좋지 않은 생각입니다.

iowait (리눅스 2.5.41부터)

(5) I/O가 완료될 때까지 기다리는 시간입니다. 이 값은 다음과 같은 이유로 신뢰할 수 없습니다.

  1. CPU는 I/O가 완료될 때까지 기다리지 않습니다. iowait는 작업이 I/O가 완료될 때까지 기다리는 시간입니다. 완료되지 않은 작업 I/O로 인해 CPU가 유휴 상태가 되면 해당 CPU에 다른 작업이 예약됩니다.

  2. 멀티 코어 CPU에서는 I/O가 완료되기를 기다리는 작업이 어떤 CPU에서도 실행되지 않으므로 CPU당 iowait를 계산하기 어렵습니다.

  3. 경우에 따라 이 필드의 값이 줄어들 수 있습니다.

마지막으로, 이러한 유형의 회계는 심각한 목적을 위해 충분히 정확할 수 없기 때문에 쓸모가 없다고 생각합니다. 시스템 및 프로세스 카운터는 다양한 목적을 위해 시스템의 다른 부분에서 처리되며 어떤 것과도 일치하지 않습니다. 유용한 정도.

관련 정보