我想确保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
我建议不要试图超越Linux调度器。你很可能会做得更多,而不是更好。只要让它做到这一点。 – 2012-07-19 07:41:08
我猜你看到的线程是softirq家伙,可能你需要更改IRQ SMP亲和性掩码,以使它们移动到专用核心。有关更多信息,请参阅IRQ-affinity.txt:https://github.com/torvalds/linux/blob/master/Documentation/IRQ-affinity.txt – 2012-07-19 07:42:59
@Dan:我编辑了这个问题以包含仍在核心4上运行的线程我至少有一个标记为'ksoftirqd'。你能评论其他人吗? – 2012-07-19 08:08:21