我的意思是,我们有没有办法为特定用户、他当前正在运行的所有进程或者他稍后将启动的进程设置 CPU 亲和性?
答案1
是的,这是可能的。
我会将用户的流程执行到控制群组由您希望使用的 CPU 核心组成。根据您的 RHEL 版本(5 或 6),您可以通过以下方式使用 CPU 防护罩cpuset/cset或者尝试cgroup 方法EL6 中已记录。后一个示例使用一个/etc/cgrules.conf
文件来定义 cgroup 资源的规则(例如,属于杰罗姆将在指定的 cgroup 中运行)。前者允许您直接在 CPU 屏蔽中执行进程。
对于使用的示例cset
,我只需为用户执行一个 bash shell 即可进入正确的 CPU 屏蔽。它们的所有子进程都将包含在其中。请参阅这里。
答案2
以下小的 bash 脚本将执行此操作:
u=username # do not set this to root!
c=logical processor number you want to bind to
for p in $(pgrep -u $u)
do
taskset -cp $c $p
done
绑定进程的子进程将保持与该 CPU 集的绑定。