(クアッドコアCPU上で)threads = 4でmencoder
を実行中。 htop
はtrueCPU使用率を表示しませんが、top
は表示します。
htopは1つのcoreについてのみ報告しているようです。これはhtopのバグ/制限ですか?ここで何が起こっていますか?
ps
またはhtop
またはtop
に表示されるmencoderの他のエントリはありません。 100%は1コアが最大になっていることを意味すると思いますが、これでさえ奇妙に思えます。他のコアはどうですか?
更新:「システムモニター」出力を追加
PID %CPU COMMAND
"top" 1869 220 mencoder
"htop" 1869 95 mencoder -noodml /media/...
"System Monitor" 1869 220 mencoder
あなたが自分で言ったように、あなたはヒットすることができます H ユーザースレッドを表示します。
将来の参照用(および楽しみのため)、CPU使用率を計算しましょう!
ちょっとした背景:
最新のオペレーティングシステムには、スケジューラがあります。すべてのプロセスとそのスレッドが計算時間のかなりの部分を確保することを目的としています。私はあまりスケジューリングを行いません(本当に複雑です)。しかし、最後にはrun queueと呼ばれるものがあります。これは、すべてのプロセスのすべての命令が並び、順番が実行されるのを待つ場所です。
すべてのプロセスは、その「タスク」を実行キューに入れ、プロセッサの準備が整うと、それらをポップして実行します。たとえば、プログラムがスリープ状態になると、実行キューから自分自身を削除し、実行の準備が整うと「行末」に戻ります。
このキューでのソートは、プロセスに関係していますPriority(「Nice value」とも呼ばれます-つまり、プロセスはNiceシステムリソースについて)。
キューの長さによって、システムのLoadが決まります。たとえば、2.5の負荷は、CPUがリアルタイムで処理できるすべての命令に対して2.5命令があることを意味します。
ところで、Linuxでは、この負荷は10ミリ秒間隔で計算されます(デフォルト)。
次に、CPU使用率のパーセント値について説明します。
2つのクロックがあるとします。1つはt
と呼ばれ、リアルタイムを表します。 1秒ごとに1秒を測定します。もう1つのクロックはc
と呼びます。実行する処理がある場合にのみ実行されます。つまり、プロセスが何かを計算したときにのみクロックが実行されます。これはCPU時間とも呼ばれます。システム上のすべてのプロセスは、それらの1つを「持っています」。
単一プロセスのプロセッサ使用率を計算できるようになりました。
またはすべてのプロセス:
マルチコアマシンでは、CPUが完全に使用された場合、毎秒4秒の計算を計算できるため、これはもちろん3.9の値になる可能性があります。
ウィキペディアはこの例を提供します:
6 CPU UNIXマシンで実行されているソフトウェアアプリケーションは、ユーザーの要件を満たすために3つのUNIXプロセスを作成します。これら3つのプロセスはそれぞれ2つのスレッドを作成します。ソフトウェアアプリケーションの作業は、アプリケーション用に作成された6つの独立した実行スレッドに均等に分散されます。リソースの待機が含まれない場合、合計CPU時間は経過したリアルタイムの6倍になると予想されます。
これはこれを行う小さなpythonスニペットです
>>> import time
>>> t = time.time()
>>> c = time.clock()
>>> # the next line will take a while to compute
>>> Tuple(tuple(i**0.2 for i in range(600)) for i in range(6000))
>>> print (time.clock() / (time.time() - t)) * 100, "%"
66.9384021612 %
完璧な世界では、これからシステム負荷が100-66.93 = 33,1%であると推測できます。 (しかし、実際には、I/O待機、スケジューリングの非効率性などの複雑なことのために間違っているでしょう)
loadとは対照的に、これらの計算はalwaysの間の値になります0およびプロセッサの数、つまり0〜1または0〜100%。 100%のCPUを使用する3つのタスクを実行するマシンと、100%のタスクを実行するマシンを区別する方法は今ではありません。たとえば、多くのコンピューターで多数のプロセスのバランスをとろうとしている場合、CPU使用率はほとんど役に立ちません。負荷はあなたがそこに欲しいものです。
現在、実際には、これらの処理タイムクロックが複数あります。たとえば、I/Oを待つためのものがあります。したがって、I/Oリソースの使用率も計算できます。
これは元の質問に関しては役に立たなかったかもしれませんが、興味深いことを願っています。 :)