numactl を使用してプロセスを単一のスレッドでのみ実行するように強制するにはどうすればよいですか?

numactl を使用してプロセスを単一のスレッドでのみ実行するように強制するにはどうすればよいですか?

私のローカル マシンには複数の CPU があり、それぞれが複数のコアを持ち、それぞれが複数のスレッドをサポートできます。 マルチスレッド プロセスがあり、それを 1 つのスレッドでのみ強制的に実行したいと考えています。numactrlそれが可能であることは理解しています。

プロセスを単一のスレッドでのみ実行するように強制するにはどうすればよいでしょうかnumactl? あるいは、それを実行できるさらに簡単な組み込みユーティリティはありますか?

答え1

numactl --physcpubind=+1 /path/to/your/executable

これにより、チップセットに割り当てられた 2 番目のコア/CPU (インデックス 1) でプロセスが実行されます。詳細については、マニュアル ページの例のセクションを参照してください。 http://linux.die.net/man/8/numactl

編集: これは、プログラムが最大で 1 つのスレッドを同時に実行することを意味しますが、プロセス全体が 1 つのスレッドのみで構成されることを意味するわけではないことを指摘する必要があります。プログラムが新しいスレッドを生成するように記述されている場合、そのプログラムは新しいスレッドを生成しますが、プロセスの残りの部分と同じコア/CPU で実行されます。わずかな違いですが、それでも潜在的に重要です。

答え2

プログラムを1つのCPUハードウェアコア/スレッドに制限するには、以下を使用することもできます。taskset 1 prog [args]

追伸

プログラムが持つことができるプロセス (スレッド) の数を制限するプログラムは ですprlimit --nproc=1 prog [args]。これを で使用しようとしましたrsyncが、「fork が利用できません... IPC でエラーが発生しました」というメッセージが表示され、最後に - はrsync1 つのスレッドとして動作しないように記述されています。

strace prlimit --nproc=1 rsync  

実行中は、strace以下のSOリンクで説明されているように、clone呼び出しからの戻り値は-1 EAGAIN (resource temporary unavailable).

PSアイデアはhttps://stackoverflow.com/questions/38637451/is-there-a-way-force-a-program-to-use-only-1-thread

関連情報