24コアサーバー(Ubuntu 14.04 LTS x64)では、約12個のPythonスクリプトが同時に起動しました。各Pythonスクリプトを完了するには約1時間かかります。
一番上には散発的に表示されますが、各スクリプトは中断せずに1つのコアを少なくとも100%使用する必要があります(サーバーに約100 GBのメモリがあるため、ディスクIOには関係ありません、ネットワークIOはありません、スワップはありません)。RAMスクリプトRAMの要件は非常に低い.)
上部の各スクリプトが1つ以上のコアCPUを100%占有していないことを説明する方法は?
24コアサーバーはコンピュータクラスタの一部ですが、通常過負荷がある場合は上部に記載されていますst
。 (つまり、0.0よりはるかに大きい)。
ベストアンサー1
あなたのカーネルはそれを優先順位と見なしていないようです。 :)
画像を見ると、Pythonプロセスの優先順位が20であることがわかります。デフォルトです。これは、他のスケジューリング要素(割り当てられたCPU時間、プロセス状態など)を取り除くと、Pythonスクリプトが、、、、、top
...rcu_shed
と同じくらい重要であると見なされ、sshd
そのプロセスが常に何かを持たないことを意味します。これにより、エントリー時に CPU にアクセスできるようになります。運営状態。
Linuxプロセスはタイムクォータ(またはタイムスライス)で実行されます。これはすべてNミリ秒、カーネル捕まえる(コアで)現在実行中のプロセスを(一時停止)し、スケジュールする他のプロセスを検索します。デフォルトでは、時間分割値は100ミリ秒(または)。
コンピュータに24のコアがあるため、基本的に24のプロセスが同時に実行されるようにスケジュールできると仮定できます。スケジューリング用に選択された(24)プロセス(100ミリ秒ごと)は、いくつかの要因に基づいて選択されます。さらに、時間分割が期限切れになる前にプロセスがスリープモードに移行すると、そのプロセスもプリエンプトされる可能性があります。 Linux 2.6 以降、カーネルは以下を使用します。完全に公正なスケジューラ基本アルゴリズムプロセススケジューリングの優先順位は、主に各プロセスがどれだけ長く実行されたかを基準としています。減衰係数:
CFS は優先順位を直接使用しませんが、ジョブの実行に許可される時間の崩壊要素として使用します。優先順位の低いタスクは崩壊要素がより高く、優先順位の高いタスクは遅延要素がより低い。これは、優先順位の低いジョブに対して実行できるようになったジョブ時間が、優先順位の高いジョブよりも早く消費されることを意味します。これは、優先順位に従って実行キューを維持するのを防ぐエレガントなソリューションです。
これで、次のコマンドを使用して(ユーザーモードで)カスタマイズしたnice
良い値でプロセスを実行できます。
nice [OPTION] [COMMAND [ARG]...]
Run COMMAND with an adjusted niceness, which affects process scheduling.
With no COMMAND, print the current niceness. Niceness values range from
-20 (most favorable to the process) to 19 (least favorable to the process).
Linuxスケジューラはこの優先順位を絶対的なものとして使用しないことに注意してください。この値は、カーネルがプロセスを選択する必要があるたびに考慮されますが、他の要因も考慮されます。プロセスの貪欲によってプロセスが選択される可能性が低くなります(アルゴリズムの名前は説明を必要としません:p)。