确保所有Linux系统线程在内核上运行0
问题描述:
我想确保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
答
一些内核线程被捆绑到他们的特殊(逻辑)CPU做相关的是CPU,不能将那些内核线程从CPU转移一些工作。你可以做的是迁移和固定所有其他任务。
我想这个奇怪的要求不是你的最终目的,而这个(标题)不是你的目的的正确方法。如果你提供你的最终目的,SO中的人可以帮助你。
+0
我觉得有些线程需要在每个CPU上运行。在上面的编辑中,我已经包含了所有仍在核心4上运行的进程。可以将其中任何一个移动到核心0吗?你有链接到任何文档描述哪些线程必须绝对绑定到他们的CPU? – 2012-07-19 08:01:42
我建议不要试图超越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