web-dev-qa-db-ja.com

特定のマシンの特定のコアでのみ実行できるようにLinuxプロセスを制限することは可能ですか?

クアッドコアボックスと4つの同一のプロセスがあり、それぞれに10個のスレッドがあります。 Linuxでは、プロセスAはCPU 0でのみ実行が許可され、プロセスBはCPU 1でのみ実行が許可されると言うことは可能ですか?

10
mike
taskset <affinity mask> -p <process>

つまり.

taskset 1 -p 12345

プロセス12345がプロセッサ/コア1のみを使用するように設定するには

ビットマスクは、リスト(つまり、4 +コアシステムのコア1 3および4を使用する場合は1,3,4)または16進数のビットマスク(コア1のみの場合は0x0000000D 1,3,4、0x00000001)にすることができます。

tasksetは通常、shedutilsというパッケージに含まれています。

編集:ほとんど忘れてしまいました...既存のプロセスのコマンドを変更するのではなく、新しいコマンドのアフィニティを設定する場合は、次のコマンドを使用します。

taskset <mask> <program> [<arg1>]...[<argN>]
16
David Spillett

taskset(util-linux 2.13-pre7)の使用法:taskset [オプション] [マスク| cpu-list] [pid | cmd [args ...]]プロセスのアフィニティを設定または取得します

-p、-pidは既存の指定されたpidを操作します-c、-cpu-list表示およびcpusをリスト形式で指定します-h、-helpこのヘルプを表示します-v、-version出力バージョン情報

デフォルトの動作は、新しいコマンドを実行することです:taskset 03 sshd -b 1024既存のタスクのマスクを取得できます:taskset -p 700または設定:taskset -p 03 700リスト形式では、コンマ区切りのリストを使用しますマスク:taskset -pc 0,3,7-11 700リスト形式の範囲はストライド引数を取ることができます:例0-31:2はマスク0x55555555と同等

常に必要に応じてサーバーを最適化できます

1
Rajat