37

重複の可能性:
特定のpthreadのCPUアフィニティを設定する方法は?

Linuxで、1つのプロセスを除くすべてのプロセスに対して1つのコアを無効にする方法はありますか?1つのコアを自分のプロセス専用に予約したいと思います。

予想される動作は次のとおりです。

  1. 私のプロセスの後に生成されるプロセスは、このコアを認識して他のコアを使用するべきではありません。
  2. プロセスが生成されたら、このコアを使用しているすべてのプロセスを他のコアに切り替える必要があります。
4

2 に答える 2

52

はいあります。2 つの cpuset を作成します。1 つは分離された CPU で、もう 1 つは残りのすべての CPU で構成されます。特別なプロセスを分離された cpuset に割り当て、残りのすべてのプロセスを他の cpuset に割り当てます。

これを実行する簡単なスクリプトの例を次に示します。

mkdir /cpuset 
mount -t cpuset none /cpuset/
cd /cpuset

mkdir sys                                   # create sub-cpuset for system processes
/bin/echo 0-2 > sys/cpuset.cpus             # assign cpus (cores) 0-2 to this set
                                            # adjust if you have more/less cores
/bin/echo 1 > sys/cpuset.cpu_exclusive
/bin/echo 0 > sys/cpuset.mems     

mkdir rt                                    # create sub-cpuset for my process
/bin/echo 3 > rt/cpuset.cpus                # assign cpu (core) 3 to this cpuset
                                            # adjust this to number of cores-1
/bin/echo 1 > rt/cpuset.cpu_exclusive
/bin/echo 0 > rt/cpuset.mems
/bin/echo 0 > rt/cpuset.sched_load_balance
/bin/echo 1 > rt/cpuset.mem_hardwall

# move all processes from the default cpuset to the sys-cpuset
for T in `cat tasks`; do echo "Moving " $T; /bin/echo $T > sys/tasks; done

プロセスを開始し、その PID を見つけて、次のようにします。

/bin/echo $PID > /cpuset/rt/tasks

これらの変更を元に戻したい場合は、システムを再起動するか、次のようにします。

# move tasks back from sys-cpuset to root cpuset
for T in `cat /cpuset/sys/tasks`; do echo "Moving " $T; /bin/echo $T > /cpuset/tasks; done
# remove sys-cpuset
rmdir /cpuset/sys
# move tasks back from rt-cpuset to root cpuset
for T in `cat /cpuset/rt/tasks`; do echo "Moving " $T; /bin/echo $T > /cpuset/tasks; done
# remove rt-cpuset
rmdir /cpuset/rt
# unmount and remove /cpuset
umount /cpuset
rmdir /cpuset

マニュアルページは次のとおりです: http://www.kernel.org/doc/man-pages/online/pages/man7/cpuset.7.html

cset など、これを自動化するのに役立つ、より複雑なシェル ラッパーもあります。参照: http://web.archive.org/web/20120428093126/http://www.suse.com/documentation/slerte_11/slerte_tutorial/data/slerte_tutorial.html

于 2012-01-31T11:55:45.973 に答える
9

この問題に対するカーネル ソリューションの説明については、このlwn の記事を参照してください。

于 2012-01-31T10:50:39.493 に答える