2012-07-19 92 views
1

我想确保Linux中的所有系统线程都运行在内核0上,并将所有其他内核留给我的应用程序。我使用RHEL 6,我已经加在/etc/rc.d/rc.sysinit顶部以下行:确保所有Linux系统线程在内核上运行0

taskset -p 0x01 1 
taskset -p 0x01 2 
taskset -p 0x01 $$ 

我仍然看到很多线程/进程与PPID 2上的其他核心上运行这表示kthreadd(具有PID 2的进程)在执行上述语句之前产生了其他进程。我怎样才能确保流程2的所有孩子也运行核心0?

编辑:例如,这里是核心4上的线程。可以将其中任何一个从核心4移开吗?

~> ps -L -eo pid,ppid,tid,nlwp,tty,comm,psr | grep 4$ 
    PID PPID TID NLWP TT  COMMAND   PSR <-line added 
    15  2 15 1 ?  migration/4  4 
    16  2 16 1 ?  ksoftirqd/4  4 
    17  2 17 1 ?  watchdog/4  4 
    31  2 31 1 ?  events/4   4 
    46  2 46 1 ?  kintegrityd/4  4 
    54  2 54 1 ?  kblockd/4   4 
    65  2 65 1 ?  ata/4    4 
    88  2 88 1 ?  aio/4    4 
    96  2 96 1 ?  crypto/4   4 
    420  2 420 1 ?  ext4-dio-unwrit 4 
    879  2 879 1 ?  kdmflush   4 
    926  2 926 1 ?  ext4-dio-unwrit 4 
    935  2 935 1 ?  ext4-dio-unwrit 4 
1632  2 1632 1 ?  rpciod/4   4 
+1

我建议不要试图超越Linux调度器。你很可能会做得更多,而不是更好。只要让它做到这一点。 – 2012-07-19 07:41:08

+0

我猜你看到的线程是softirq家伙,可能你需要更改IRQ SMP亲和性掩码,以使它们移动到专用核心。有关更多信息,请参阅IRQ-affinity.txt:https://github.com/torvalds/linux/blob/master/Documentation/IRQ-affinity.txt – 2012-07-19 07:42:59

+0

@Dan:我编辑了这个问题以包含仍在核心4上运行的线程我至少有一个标记为'ksoftirqd'。你能评论其他人吗? – 2012-07-19 08:08:21

回答

2

一些内核线程被捆绑到他们的特殊(逻辑)CPU做相关的是CPU,不能将那些内核线程从CPU转移一些工作。你可以做的是迁移和固定所有其他任务。

我想这个奇怪的要求不是你的最终目的,而这个(标题)不是你的目的的正确方法。如果你提供你的最终目的,SO中的人可以帮助你。

+0

我觉得有些线程需要在每个CPU上运行。在上面的编辑中,我已经包含了所有仍在核心4上运行的进程。可以将其中任何一个移动到核心0吗?你有链接到任何文档描述哪些线程必须绝对绑定到他们的CPU? – 2012-07-19 08:01:42

相关问题