パフォーマンスを向上させるために、特定のプロセスに特定の数のCPUコアを割り当てたいと思います。
どうすればいいですか?
答え1
すでにこれを使用できる多くのプログラムがあります(たとえば、コンパイラ)。
あなたの場合は、プログラムが複数のCPUまたはCPUスレッドを並列に使用するように設計されていることを確認する必要があります。
プログラム(Javaプロセスなど)がシングルスレッドで、同時に複数のコアを使用できない場合は、コマンドを使用してnice
優先順位を上げることができます。
ただし、マルチコアを活用するJavaプログラムを作成できます。
答え2
問題がLinux環境に関連し、システムに競合するワークロードがあるとします。
CPU レベルでプロセスを分離する最も簡単な方法は、プロセスを使用し、taskset
コアsched_setaffinity
セットに割り当て、システム内の他の CPU 使用量が多いコアがそのコアを使用しないようにすることです。
もう1つの可能性は、同様のメカニズムcgroups
(手動でまたはなどのコンテナソリューションを介してdocker
)を使用して、ほとんどのCPU時間を選択したプロセス(例shares
:。
ワークロードがパフォーマンスに敏感な場合は、オペレーティングシステム自体で使用されているCPU(ネットワークパケット処理など)を確認することをお勧めします。ほとんどの処理を実行しているコア(存在する場合)を確認できます。si
これは一般的にマークされていますtop
。プロセスがそのコアにあることを確認すると、結果に影響を与える可能性があります。残念ながら、どちらも本当です。irqbalance
ここまで行けるか確認してみてください。
最後に、外部干渉を減らすために、機密プロセスのCPUスケジューリング優先順位を調整して、機密プロセスのCPUスケジューリング優先順位を上げることができますnice
。
答え3
プロセスを特定の数のCPUコアに制限したいのか、CPUコアをプロセス専用として指定したいのかわかりません。
専用CPU時間
私が知っている限り、プロセスにCPUへの排他的なアクセス権を「付与」することは不可能または少なくとも困難です。他のプロセスで使用できるようにCPU時間を使用している場合は、Niceを使用する必要がありますnice
。 Niceは基本的にプロセスの優先順位システムであり、数値は-20から19の間です(デフォルトは0)。望むよりman nice
。 「親しみやすさ」が高いほど、プロセスのCPU時間が短くなり、他のプロセスに対して「良い」という意味です。 nice 値を下げると、プロセスの niceness が減少し、CPU 時間がより多く消費されます。たとえば、次のように最高の優先順位で実行できますls
。nice -20 ls
CPUコアの制限
Linuxでは、これを使用してcgroups
プロセスを制限できます。 BSDの他のUnixバリアントについてはよくわかりませんが、同様の機能があるとします。