
合計32個の論理コアを持つAMD 7950X3D CPUがあり、そのうち16個(0-15)は追加のキャッシュにアクセスできます。マルチタスク時にゲームシステムを最適化するために、SteamとSteamが生成するすべてのプロセスをコア0〜15で実行し、残りのシステムをコア16〜31に制限してゲームを妨げないようにしたいと思います。私は、ゲームを実行していないときにシステムがすべてのリソースを持つことができるように、実行時にこの制限を設定できるようにしたいと思います。分類すると、ワークフローは次のようになります。
- 実行中または新しく作成されたすべてのプロセス(Steamを除く)をコア16-31に固定します。
- ランニングスチームは0〜15に固定されています。
- ゲームが完了したら、実行中のすべてのプロセスと新しく作成されたプロセスを0〜31で再度実行できます。
ステップ2は明確です。ただ実行すると動作taskset -c 0-15 steam
します。ただし、ステップ1と3を行う方法は不明です。
私が試したことは次のとおりです。
sudo taskset -apc 16-31 1
。フラグを使用してPID 1のアフィニティを設定することで、-a
これを生成するすべてのプロセスに適用すると予想しましたが(それはすべてです)、そうしません。すでに実行されている子プロセスではなくプロセスです。システムモニタでは、コア0-15がまだ2%の負荷にジャンプすることがわかります。テストを実行すると、stress -c 32
16~31個のコアだけでなく、32個のコアもすべて100%でロードされます。
他の同様のスレッドで見つかったすべての提案は実行時に適用されず、起動時に(システム構成ファイルの変更)適用されるか、すでに実行されているすべてのプロセスを処理しないため、これは重複とは思われません。
どんな提案がありますか?
答え1
for pid in /proc/[0-9]*;do taskset -apc 16-31 ${pid##*/};done
答え2
また見る https://serverfault.com/questions/625146/difference-Taskset-and-cpuset間
Taskset は、プロセスを 1 つ以上の CPU にバインドするために使用されます。デフォルトでは、初期実行中または実行時に実行できる場所を指定します。最新のサーバー機器でRHEL / CentOSを使用している場合ワークセットの代わりに numactl を使用することをお勧めします。。
中央処理ユニット/ csetはCPUマスキングに使用され、Linux cgroupに基づいて構築されたフレームワークです。プロセス管理に使用できる他のツールがあるため、CsetはRHELなどの一部のディストリビューションでは人気がありませんでした。
コメント:アプリケーションは使用中に好みをリセットできます
taskset
。これを使用するとcpuset
、CPUSet が付与する好みを変更することはできず、両方ともnumactl
同じtaskset
基本システム呼び出しを呼び出します。sched_setaffinity
返品、
TASKSET または sched_setaffinity() を使用して、CPUSET を使用して隔離されたプロセッサー・コアのプロセス優先度を設定します。