2012-07-19 78 views
1

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

我建議不要試圖超越Linux調度器。你很可能會做得更多,而不是更好。只要讓它做到這一點。 – 2012-07-19 07:41:08

+0

我猜你看到的線程是softirq傢伙,可能你需要更改IRQ SMP親和性掩碼,以使它們移動到專用核心。有關更多信息,請參閱IRQ-affinity.txt:https://github.com/torvalds/linux/blob/master/Documentation/IRQ-affinity.txt – 2012-07-19 07:42:59

+0

@Dan:我編輯了這個問題以包含仍在覈心4上運行的線程我至少有一個標記爲'ksoftirqd'。你能評論其他人嗎? – 2012-07-19 08:08:21

回答

2

一些內核線程被捆綁到他們的特殊(邏輯)CPU做相關的是CPU,不能將那些內核線程從CPU轉移一些工作。你可以做的是遷移和固定所有其他任務。

我想這個奇怪的要求不是你的最終目的,而這個(標題)不是你的目的的正確方法。如果你提供你的最終目的,SO中的人可以幫助你。

+0

我覺得有些線程需要在每個CPU上運行。在上面的編輯中,我已經包含了所有仍在覈心4上運行的進程。可以將其中任何一個移動到核心0嗎?你有鏈接到任何文檔描述哪些線程必須絕對綁定到他們的CPU? – 2012-07-19 08:01:42

相關問題