はい、あります。 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
はmanページです: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-31 11:55:45
gby
あなたが探している用語はスレッドアフィニティです。スケジューラが把握できるようにするよりも、全体的なパフォーマンスの点では可能ですが、しばしば悪化します。 – Flexo
@awoodland:戻る。彼は他のコアを使わないというプロセスを求めなかったので、コアを使わないように他のプロセスに頼んだ。 –
@Benvoight - おっと、私の間違い。それは答えをかなり "ノー"にしてくれます:) – Flexo