2

次のコマンドを使用して、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 を使用していますか?

4

0 に答える 0