一个专门为我的过程核心

可能重复:
如何设置特定pthread的CPU亲和力

在Linux中有一种方法可以禁用除一个进程之外的所有进程的一个内核吗? 我想只有一个核心保留,只为我的过程。

预期行为如下:

  1. 在我的过程后会产生的进程,不应该看到这个核心,并使用其他的。
  2. 当我的进程产生时,所有正在使用此内核的进程都应该切换到其他内核。

Solutions Collecting From Web of "一个专门为我的过程核心"

就在这里。 你想创建两个cpusets,一个用你的隔离的CPU,另一个用其他所有的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

你可以看看这篇文章 ,讨论内核解决这个问题的方法。