我想確保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