我想确保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?
编辑:例如,以下是核心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
答案 0 :(得分:2)
某些内核线程绑定到它们的特殊(逻辑)CPU来执行与CPU相关的一些工作,您无法从它们的CPU迁移这些内核线程。您可以做的是迁移并固定所有其他任务。
我想这个奇怪的要求不是你的最终目的,而且这个(标题)不适合你的目的。如果你提供了最终目的,SO中的人可以帮助你。