一个核心专用于我的流程 [英] One core exclusively for my process
问题描述
可能的重复:
如何设置特定 pthread 的 CPU 亲和性?
在 Linux 中有没有办法为除一个进程之外的所有进程禁用一个内核?我想只保留一个内核,并且只用于我的进程.
Is there a way in Linux to disable one core for all processes except one process? I would like to have one core reserved only and only for my process.
预期行为如下:
- 将在我的进程之后产生的进程不应看到这个核心并使用其他的.
- 当我的进程产生时,所有使用这个内核的进程都应该切换到其他内核.
推荐答案
是的,有.您想创建两个 cpuset,一个用于隔离的 CPU,另一个用于所有其余的 CPU.将您的特殊进程分配给隔离的 cpuset,并将所有其余进程分配给另一个 cpuset.
Yes, there is. You want to create two cpusets, one with your isolated CPU and the other with all the rest of the CPUs. Assign your special process to the isolated cpuset and all the rest of the processes to the other cpuset.
这是一个简单的示例脚本:
Here is a simple example script that will do it:
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然后去:
Now start your process and find out its PID and go:
/bin/echo $PID > /cpuset/rt/tasks
如果您想恢复这些更改,只需重新启动系统或执行以下操作:
If you want to revert these changes, just restart your system or do:
# 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
There are also more complicated shell wrappers that can help you automate this, such as cset. See: http://web.archive.org/web/20120428093126/http://www.suse.com/documentation/slerte_11/slerte_tutorial/data/slerte_tutorial.html
这篇关于一个核心专用于我的流程的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!