分类: LINUX
2010-12-29 05:31:48
在Windows下,可以通过task manager来设置进程的affinity,以此来让程序运行在特定的CPU上(如果你的机器是SMP的话)。方法就是右键点击进程,在弹出菜单中选择 set affinity ...,然后affinity设置对话框就会弹出来。如果在Linux下,应该通过什么命令来实现相同的功能呢?答案就是taskset。Taskset 命令可以为即将执行的程序或者已有进程指定affinity属性,让该程序或者进程运行在指定的CPU上。下面是几个例子: taskset –c 1 nohup perl pi.pl & ---指定在1号CPU上执行指定的perl程序 taskset –c 1 –P 10284 ---将10284号进程限定在1号CPU上执行 这里要注意的是我们可以把某个程序限定在某一些CPU上运行,但这并不意味着该程序可以独占这些CPU,其实其他程序还是可以利用这些CPU运行。如果要精确控制CPU,taskset就略嫌不足,cpuset才是王道。 还有一点需要略带提及的就是如何查看当前各个CPU的运行情况,这对于利用taskset分配CPU资源是十分重要的。可以使用mpstat指 令,UNIX系统下,mpstat有相当完备的选项可供使用,而在笔者的REDHAT AS5中,mpstat只有区区-P选项。以下是笔者运行mpstat –P ALL的截图,可以看到各个CPU的运行情况。 [kxu@nothung MovieInfo]$ mpstat -P ALL Linux 2.6.18-8.el5 (nothung.localdomain) 02/03/2008 10:50:43 PM CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s 10:50:43 PM all 32.82 0.00 4.73 0.10 0.00 0.13 0.00 62.22 1035.82 10:50:43 PM 0 26.73 0.00 3.96 0.08 0.00 0.13 0.00 69.08 141.13 10:50:43 PM 1 23.60 0.00 3.54 0.09 0.00 0.09 0.00 72.68 129.18 10:50:43 PM 2 37.59 0.00 5.54 0.11 0.00 0.15 0.00 56.60 131.34 10:50:43 PM 3 42.40 0.00 6.01 0.08 0.00 0.17 0.00 51.33 126.07 10:50:43 PM 4 21.42 0.00 3.16 0.20 0.00 0.09 0.00 75.11 130.14 10:50:43 PM 5 33.09 0.00 4.89 0.09 0.00 0.13 0.00 61.79 125.14 10:50:43 PM 6 44.00 0.00 6.04 0.06 0.00 0.17 0.00 49.73 127.79 10:50:43 PM 7 33.73 0.00 4.66 0.07 0.00 0.13 0.00 61.40 125.04 使用taskset 设定进程的CPU依附属性taskset 可用于设定进程的CPU依附属性命令格式如下: taskset 可用于设定进程的CPU依附属性命令格式如下:
|