私が読んでいるこのリンクこの考えを聞きました。
しばらく前に、32コアVMの最大30コアのシミュレーションを開始し、nohup perl ...<rest of command>...
これを達成するためにSTOUT / STDERRを呼び出してリダイレクトするラッパースクリプトを使用しました。具体的な詳細が関連性があるかどうかわからないので省略します。あなたはその詳細です。
概念的には、私はマルチスレッド操作に満足していますが、nohup呼び出し(各プロセスは別々のシミュレーションで数週間実行されます)で各プロセスをバックグラウンド化するだけで十分であると思っていました。独自のコア/スレッドを作成してから、GNU Parallelsなどを必要とせずに完了し続けます。
定期的にチェックし、常に30のvCPU処理タスクをチェックし、すべてが合理的な時間内に完了するので、これまで私のロジックに問題はないようです。
誰かが私にこれが「CPUスラッシング」を引き起こす可能性があると言いました。
だから私の質問にはいくつかの相互関連部分があります。
- まず、nohupおよび/またはbackgroundingが特定のコアにプロセスを固定するのに十分であると思ったのは間違っていましたか? (そして、特定のコアで実行されているプロセスを端末に表示できますか?トップはどのコアが使用されていますが、私が知っている限りどのようなことをしているのか教えてくれませんか?)
- 第二に、システムの他のタスクを処理するために使用できる2つの予備CPUがあってもCPUスラッシングは発生しますか?
- 最後に、私の記憶が正しい場合、特定のプロセスは特定のCPUに固定されますか?そしてそのCPUのみ、または呼び出し順序/タイミングなどに応じてスレッド間でジャンプします。つまり、ファイルを繰り返すと、最初のファイルが完了するまでCPU 0に固定され、次に1、2などに固定されますか?
答え1
まず、nohupおよび/またはバックグラウンドが端末に表示されている特定のコアで実行されるプロセスであると仮定するのは間違っていましたか?トップは、私が知っている限り、どのコアが何をしているのかを知らせず、どのコアが使用されているのかを教えてくれます。 )プロセスを特定のコアに固定するのに十分ですか? (そしてできる
Nohupは、コマンドが存在しない場合と同じようにコマンドを実行します。唯一の違いは、コマンドが終了時にシグナルを受け取るようにpidリストから削除されることです。 (nohupなしで起動されたプロセスにはdisownが適用されます)。
第二に、システムの他のタスクを処理するために使用できる2つの予備CPUがあってもCPUスラッシングは発生しますか?
nohupなしでCPUスラッシングが発生した場合にのみ...
最後に、私が間違っていない場合、与えられたプロセスは特定のCPUとそのCPUにのみ固定されますか、それとも呼び出し順序/タイミング/などに基づいてスレッド間でジャンプしますか?つまり、ファイルを繰り返すと、最初のプロセスは特定のCPUに固定されますか? 1つは完了するまでCPU 0に固定され、次に1、2などに固定されますか?
nohupがなくても同じです...
psを使用してプロセスが実行されているCPUコアを確認し、ワークセット制限を使用したり、コア制限を変更したりできます。
ps -eo pid,sgi_p,cmd --sort sgi_p
taskset -c -p 0 1234
答え2
nohup
特定のコアにプロセスをスケジュールするように設定されているものはありません。あなたは一般的に使用しますtaskset
一緒にnohup
してください。top
プロセスが最後に予約されたコアを表示できますP
。これは列です。
CPU の好み、キャッシュの嗜好、割り込み処理、電力エンベロープなど、考慮すべき要因がますます多くなり、プロセスやスレッドのスケジューリングは長年にわたって非常に複雑になりつつあります。しかし、システムが他のジョブであまりにも忙しくないと仮定すると、開始されたジョブの数が使用可能なコアの数より少なくなります。同様に、ジョブがどのCPUで実行されるかを実際に予測することはできませんが、適切な場合、スケジューラはジョブを選択した後に同じコアに保持する可能性が高くなります。