确保所有Linux系统线程都在核心0上运行

确保所有Linux系统线程都在核心0上运行,linux,cpu,scheduling,multicore,Linux,Cpu,Scheduling,Multicore,我希望确保Linux中的所有系统线程都在核心0上运行,将所有其他核心留给我的应用程序。我正在使用RHEL 6,并且在/etc/rc.d/rc.sysinit的顶部添加了以下行: taskset -p 0x01 1 taskset -p 0x01 2 taskset -p 0x01 $$ 我仍然看到许多PPID为2的线程/进程在0以外的内核上运行。这表示kthreadd(具有PID 2的进程)在执行上述语句之前生成其他线程。如何确保进程2的所有子进程也运行核心0 编辑:例如,这里是Core4上的

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

taskset -p 0x01 1
taskset -p 0x01 2
taskset -p 0x01 $$
我仍然看到许多PPID为2的线程/进程在0以外的内核上运行。这表示
kthreadd
(具有PID 2的进程)在执行上述语句之前生成其他线程。如何确保进程2的所有子进程也运行核心0

编辑:例如,这里是Core4上的线程。是否可以将其中任何一个从核心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
ps-L-eo pid、ppid、tid、nlwp、tty、comm、psr | grep 4$
PID PPID TID NLWP TT命令PSR一些内核线程绑定到它们的特殊(逻辑)CPU上,以执行与该CPU相关的一些工作,您不能从它们的CPU迁移这些内核线程。您可以做的是迁移和固定所有其他任务


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

我建议不要试图智胜Linux调度程序。你很可能弊大于利。我猜你看到的线程都是软IRQ的家伙,可能你需要改变IRQ SMP亲和掩码,让它们移动到专用核心。有关更多信息,请参见IRQ-affinity.txt:@Dan:我编辑了这个问题,以包括仍在Core4上运行的线程。我至少标记了一个
ksoftirqd
。你能评论一下其他的吗?我想有些线程需要在每个CPU上运行。在上面的编辑中,我包含了仍在Core4上运行的所有进程。是否可以将其中任何一个移动到核心0?您是否有任何文档的链接,描述哪些线程必须绝对绑定到它们的CPU?