指定某个cpu只运行指定进程的做法
时间:2010-11-08 来源:空灵静世
指定某个cpu只运行指定进程的做法
进程与cpu绑定需要做四件事:
一、把指定cpu从平衡算法剔除。
二、把指定cpu上所有的中断请求搬到其他cpu。
三、把指定cpu上的所有的进程搬到其他cpu。
四、把指定进程到绑定到指定cpu。
一、把指定cpu从cpu平衡算法剔除,机器启动后,用户进程自动不会在指定cpu上运行。 做法如下:
在/boot/grub/grub.conf文件里的root=LABEL=/ 后面添加 isolcpus=cpu号列表
cpu号从0开始,多个cpu号之间用“,”分隔,例:isolcpus=1
或isolcpus=4,5,6
二、把指定cpu上所有的中断请求搬到其他cpu,做法如下:
修改/opt/irq/中断号/smp_affinity文件的内容。
内容00000001表示该中断请求在cpu0上运行,
内容00000003表示该中断请求在cpu0和cpu1上运行,
三、 把指定cpu上的所有的进程(指定进程除外)搬到其他cpu,做法如下:
taskset -pc cpu列表 pid.
例:taskset -pc 1 pid.
taskset -pc 1,2 pid.
taskset -pc 1-4 pid.
在这个过程中,我们主要把系统进程搬到了其他cpu上。
查看某个进程绑定在哪个cpu上可以执行taskset -p pid.
输出的mask值:1表示运行在cpu0上,3表示运行在cpu0和cpu1上。
四、把我们的指定进程搬到指定cpu,做法参考三。
注:
1、子进程会继承父进程的cpu信息,分配到cpu0和cpu1上运行的进程产生的子进程也会被分配到cpu0和cpu1.
2、taskset 可以用c函数sched_setaffinity和 sched_getaffinity代替
3、查看进程当前运行在哪个cpu上,可以执行ps -e pid,args,psr