プロセスがCPUを使用するのに時間がかかりますか?

プロセスがCPUを使用するのに時間がかかりますか?

私はburnP6(cpuburnパッケージで)1秒間実行してからプログラムを終了するシングルコアx86システムを持っています。

while true; do /usr/bin/burnP6 & sleep 1; pkill burnP6; sleep 1; done

CPU使用率を確認するために使用する場合、top -d 1プロセスの負荷はburnP6通常50%未満です。このコマンドを実行すると、while true; do ps -e -o cmd,pcpu | grep burnP6; doneCPUロードには次の特性があります。

/usr/bin/burnP6              0.0
/usr/bin/burnP6              9.0
/usr/bin/burnP6             10.0
/usr/bin/burnP6             10.0
/usr/bin/burnP6             11.0
/usr/bin/burnP6             11.0
/usr/bin/burnP6             12.0
/usr/bin/burnP6             12.0
/usr/bin/burnP6             13.0
/usr/bin/burnP6             14.0
/usr/bin/burnP6             15.0
/usr/bin/burnP6             15.0
/usr/bin/burnP6             16.0
/usr/bin/burnP6             16.0
/usr/bin/burnP6             17.0
/usr/bin/burnP6             18.0
/usr/bin/burnP6             18.0
/usr/bin/burnP6             19.0
/usr/bin/burnP6             20.0
/usr/bin/burnP6             20.0
/usr/bin/burnP6             21.0
/usr/bin/burnP6             22.0
/usr/bin/burnP6             22.0
/usr/bin/burnP6             23.0
/usr/bin/burnP6             24.0
/usr/bin/burnP6             24.0
/usr/bin/burnP6             25.0
/usr/bin/burnP6             25.0
/usr/bin/burnP6             26.0
/usr/bin/burnP6             27.0
/usr/bin/burnP6             28.0
/usr/bin/burnP6             28.0
/usr/bin/burnP6             28.0
/usr/bin/burnP6             30.0
/usr/bin/burnP6             30.0
/usr/bin/burnP6             31.0
/usr/bin/burnP6             31.0
/usr/bin/burnP6             32.0
/usr/bin/burnP6             32.0
/usr/bin/burnP6             33.0
/usr/bin/burnP6             33.0
/usr/bin/burnP6             35.0
/usr/bin/burnP6             35.0
/usr/bin/burnP6             36.0
/usr/bin/burnP6             36.0
/usr/bin/burnP6             37.0
/usr/bin/burnP6             38.0
/usr/bin/burnP6             38.0
/usr/bin/burnP6             39.0
/usr/bin/burnP6             40.0
/usr/bin/burnP6             40.0
/usr/bin/burnP6             41.0
/usr/bin/burnP6             42.0
/usr/bin/burnP6             42.0
/usr/bin/burnP6             43.0
/usr/bin/burnP6             44.0
/usr/bin/burnP6             44.0
/usr/bin/burnP6             45.0
/usr/bin/burnP6             45.0
/usr/bin/burnP6             46.0
/usr/bin/burnP6             46.0
/usr/bin/burnP6             47.0
/usr/bin/burnP6             48.0
/usr/bin/burnP6             48.0
/usr/bin/burnP6             49.0
/usr/bin/burnP6             50.0
/usr/bin/burnP6             50.0
/usr/bin/burnP6             51.0
/usr/bin/burnP6             52.0
/usr/bin/burnP6             52.0
/usr/bin/burnP6             53.0
/usr/bin/burnP6              0.0

上記のように、負荷は0%から53%に急速に増加しますが、プロセスはburnP6終了します。つまり、99% - 100%の使用率に達するには短すぎます。これらの結果は測定方法によるものですか?実際、burnP6プロセスは最初のマイクロ秒からCPUを100%使用しますか? :) または、プロセスがCPU時間をすべて取得するのに実際に1〜2秒かかりますか?

ベストアンサー1

CPU負荷を表示するために使用するコマンドは、緊密なループで実行されるため、CPUburnと競合します。競合なしでCPUburnのCPU負荷を観察するには、sleep 1ループに次のようなものを追加します。

テストでは、最初はオブザーバループがほぼすべてのCPUを占有し、次第にburnP6CPU占有率をますます占めています。これはLinuxスケジューリングポリシーの結果です。 Linuxカーネルには複雑なスケジューラがあります。実際には多くのスケジューリングアルゴリズムがあり、実行時にどのスケジューリングアルゴリズムが使用されるかを設定できます。読むsched(7) マニュアルページ詳細については、カーネル文書と参考書を参照してください。

私よりも知識が豊富な人は、この出力を使用してシステムでどのスケジューラが有効になっているかを確認できます。できません。ps | grepCPUを多用するI / Oプログラム(実行ファイルのロード、プロセスの作成、およびデータ転送以外に何もしないループ)の優先順位を指定することがわかります。これは多くの状況で意味があります。 CPU集中型プログラムは、計算に1秒ではなく1.1秒を費やすことを気にしないかもしれませんが、I / O集中型プログラムは通常、高速応答時間(低レイテンシ)を必要とするユーザーインターフェイススレッドまたはネットワークサービスです。 ) ありがとうございます。明らかに、すべてのCPUを占めるプロセスグループでバランスをとる一種の公平性対策があります。

設定を試して、動作がどのように変わるかを確認すると/proc/sys/kernel/sched*便利です。

おすすめ記事