Chinaunix首页 | 论坛 | 博客
  • 博客访问: 451695
  • 博文数量: 70
  • 博客积分: 3170
  • 博客等级: 中校
  • 技术积分: 756
  • 用 户 组: 普通用户
  • 注册时间: 2007-06-06 16:47
文章分类

全部博文(70)

文章存档

2011年(22)

2010年(33)

2009年(5)

2008年(10)

分类: LINUX

2010-11-08 11:52:02

指定某个cpu只运行指定进程的做法


进程与cpu绑定需要做四件事:



一、把指定cpu从平衡算法剔除。

二、把指定cpu上所有的中断请求搬到其他cpu

三、把指定cpu上的所有的进程搬到其他cpu

四、把指定进程到绑定到指定cpu


一、把指定cpucpu平衡算法剔除,机器启动后,用户进程自动不会在指定cpu上运行。 做法如下:

/boot/grub/grub.conf文件里的root=LABEL=/ 后面添加 isolcpus=cpu号列表

cpu号从0开始,多个cpu号之间用“,”分隔,例:isolcpus=1

isolcpus=4,5,6

二、把指定cpu上所有的中断请求搬到其他cpu,做法如下:

修改/proc/irq/中断号/smp_affinity文件的内容。

内容00000001表示该中断请求在cpu0上运行,

内容00000003表示该中断请求在cpu0cpu1上运行,

三、 把指定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表示运行在cpu0cpu1上。

四、把我们的指定进程搬到指定cpu,做法参考三。



注:

1、子进程会继承父进程的cpu信息,分配到cpu0cpu1上运行的进程产生的子进程也会被分配到cpu0cpu1.

2taskset 可以用c函数sched_setaffinitysched_getaffinity代替

3、查看进程当前运行在哪个cpu上,可以执行ps -eo pid,args,psr

阅读(2107) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-11-08 15:27:58

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com