次のコマンドを使用して、Androidフォンのtopコマンドを使用してCPU使用率を監視しようとしています:
Process p = Runtime.getRuntime().exec("top -m 15 -d 1 -n 1");
私が得たトップコマンドの出力の1つはこれです:
User 2%, System 9%, IOW 0%, IRQ 0%
User 3 + Nice 0 + Sys 10 + Idle 95 + IOW 0 + IRQ 0 + SIRQ 0 = 108
PID PR CPU% S #THR VSS RSS PCY UID Name
743 0 15% R 1 2416K 948K bg u0_a692 top
15351 0 2% S 79 1921396K 114536K bg u0_a59 com.google.android.googlequicksearchbox:search
167 0 1% S 6 9668K 3512K logd /system/bin/logd
496 0 0% S 1 0K 0K root kworker/0:3
20447 0 0% S 1 0K 0K root kworker/u:34
クアッド コア チップ、つまり 4 つの CPU を搭載した Nexus 4 を使用しています。
ここで、合計 CPU 使用率は (直観的に) ユーザー + システム = 11% です。ただし、top
プロセス自体は CPU の 15% を使用します。それはほとんどの場合に起こります。これは、1 秒間隔で top コマンドを実行してプロットしたグラフです。
ほとんどの場合に見られるように、このtop
コマンドは、ユーザーとシステムの CPU 使用率を合わせたよりも多くの CPU を使用します。
この動作の原因は何ですか?
アイドル状態のスリープ状態で使用される CPU の量を計算したかったのです。そこで、top
ユーザーとシステムの合計 CPU 使用率から、プロセスが使用する CPU を差し引くことを考えました。しかし、この種の出力では、電話が使用している CPU の量を正確に判断するのに役立ちません。
また、プロセスの CPU% はユーザーとシステムの合計ですか? つまり、プロセスが 10% の CPU を使用している場合、実際には 6% のユーザー CPU と 4% のシステム CPU を使用していますか?