모든 PID "utime"의 합이 전체 시스템 utime입니까?

모든 PID "utime"의 합이 전체 시스템 utime입니까?

사용자의 총 CPU 시간을 측정하기 위해 다음의 "utime" 필드를 사용했습니다 /proc/[pid]/stat.

utime %lu   Amount of time that this process has been scheduled in user
            mode, measured in clock ticks (divide by
            sysconf(_SC_CLK_TCK).  This includes guest time, guest_time
            (time spent running a virtual CPU, see below), so that
            applications that are not aware of the guest time field do
            not lose that time from their calculations.

(에서휴먼프로세스(5))

utime따라서 내 "사용자 utime"은 이 사용자가 실행 중인 모든 PID의 합계입니다.

이를 통해 이 사용자가 소비한 CPU 시간(초)에 대한 정확한 값을 얻을 수 있기를 바랍니다. 나는 올바른 길을 가고 있습니까?

제가 이해하지 못했거나 고려하지 못한 몇 가지 사항이 있습니다.

  • 각 PID에는 상위 PID(또는 0)도 있습니다. 하지만 나는 ppid가 0인 PID뿐만 아니라 모든 PID를 계산하고 있습니다. 이 올바른지?
  • utime 외에도 stime, cuttime 및 cstime이 있습니다. 제가 이것에 대해 걱정할 필요가 있나요? utime은 상위 프로세스를 제외한 PID의 총 CPU 초 수라고 가정합니다.

다음을 사용하여 시스템의 총 CPU 시간을 /proc/uptime계산 하면상당히모든 사용자를 합친 것에 대해 얻을 수 있는 것과 비슷하지만 큰 차이가 있습니다. 예(분):

system cpu_time:         96.13
sum of users_cputime:   111.45

옳은:

나는 다양한 것에 대해 "외견상 합리적인" 가치관을 가지고 있습니다. 현재 저는 utime, stime, cuttime 및 cstime의 합계를 사용하고 있습니다. 보고되는 값은 측정값과 밀접하게 관련되어 있지만 이해할 수는 없습니다 time.

내가 정확히 잘못된 방향으로 가고 있다면 여기에 또 다른 질문이 있습니다.

답변1

사용자 CPU 시간을 기록하고 추적하는 전통적인 방법은 다음과 같습니다.프로세스 회계. 리눅스에서는 설치하세요GNU 회계 유틸리티, 일반적으로 라는 패키지에서 제공됩니다 acct. 수명이 매우 짧은 프로세스에서 소요된 시간을 추적하는 것이 얼마나 정확한지는 잘 모르겠지만 적어도 실행된 모든 프로세스를 나열합니다.

달리기lastcomm모든 사용자가 실행한 모든 명령 목록과 각 명령에 소요된 시간을 가져옵니다(짧은 프로세스의 경우 최대 약 10밀리초로 반올림됨, 많이 표시될 것으로 예상됨 0.00). 달리기sa다양한 합계 및 통계를 표시합니다. 특히, sa -m각 사용자에 대한 합계가 표시됩니다. sa계정 로그(보통 위치)의 마지막 순환 이후 누적된 통계입니다 /var/log/account/.

주기적인 샘플링으로 모든 프로세스를 포착할 수는 없지만, 그것과는 거리가 멀다는 점에 유의하세요. 거의 모든 단기 프로세스와 긴 프로세스의 마지막 몇 초를 놓치게 됩니다. 프로세스 회계는 모든 과거 프로세스를 나열합니다.

에서 /proc/$pid/stat사용자 시간은 I/O를 수행하는 데 소요된 시스템 시간이 아니라 계산을 수행하는 데 소요된 시간입니다. 어느 것을 계산할지는 정보로 무엇을 하려는지에 따라 달라집니다.

모든 PID에 대한 통계가 정확합니다. 부모 PID가 이것과 어떤 관련이 있는지 모르겠습니다.

시스템 측면에서 설명이 /proc/uptime잘못된 것 같습니다.위키피디아내가 쓴대로. 첫 번째 필드는 시스템이 시작된 이후 경과된 실제 시간에서 일시 중지 또는 최대 절전 모드로 소요된 시간을 뺀 값입니다. 두 번째 필드는 모든 CPU에서 유휴 작업에 소요된 누적 시간입니다. 이것이 정확히 무엇을 의미하는지 잘 모르겠습니다. 확실히 내 컴퓨터의 총 유휴 시간은 아닙니다. 커널에서 값을 합산합니다.존재하다uptime_proc_show업데이트의 변수존재하다account_idle_time.

관련 정보