ユーザーの合計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.
したがって、私の「ユーザーutime」は、utime
このユーザーが実行しているすべてのPIDの合計です。
これにより、このユーザーが費やしたCPU秒数の正確な値が得られることを期待しています。私は正しい軌道に乗っていますか?
私がまだ理解していない、または考慮していないことのいくつか:
- 各PIDには、親PID(またはゼロ)もあります。しかし、私は0のppidを持つものだけでなく、すべてのPIDをカウントしています。これは正しいですか?
- utime、stime、cutime、cstimeに加えて、それらについて心配する必要がありますか?私は、utimeがPIDのCPU秒の合計数であり、親を数えないと仮定しています。
を使用してシステムの合計CPU時間を計算すると/proc/uptime
、この値はすべてのユーザーの合計にかなり近くなりますが、その差は大きくなります。たとえば(分単位):
system cpu_time: 96.13
sum of users_cputime: 111.45
補正:
私はあらゆる種類のものについて「賢明に見える」値を得ます。現時点では、utime、stime、cutime、cstimeの合計を使用しています。そして、私はそれらを理解していませんが、からの測定値と非常によく相関する値を報告しますtime
。
私が完全に間違った軌道に乗っている場合、別の質問があります:
- ユーザーごとの合計CPU時間を監視する最も公正な方法は何ですか?(+500バウンティ)on Ask Ubuntu
/proc/uptime
?次に、アイドルタスクに起因するI / Oが違いを説明していると思います。私はトピックについて何も知らないので、私は何か大きなことを見逃していると思います:特にユーザーのcputimeの合計が多くの短い欠落している可能性があることを考えると、アイドルタスクでそれほど多くのことが起こるとは思いません生きているプロセス。
/proc/cputime
CPUがプロセスを実行するのに費やした時間についての情報はないので、「システムのcpu_time」の計算が何であるかがわかりません。2番目の数値で何かをしている場合、それはアイドルタスクによって費やされた時間です。それが実際に何を意味するのか正確にはわかりません。