2013-04-29 65 views
0

我的公司剛剛帶來了一個產生監視線程(啓用時)的軟件API。這個監控線程非常有用,但是我們希望在Linux中將其鎖定到核心0。但是,我不能以正常方式使用taskset IElinux上的taskset和未知線程

# taskset -c 2,3 12345 

因爲我不知道監視線程的PID。我問過供應商是否有可能將線程的PID輸出到日誌文件或類似的地方,他們說「我們會研究這個」,這意味着沒有。

所以我的問題是你如何從外面找到這個監視線程的PID這樣我就可以使用taskset呢?

+0

你爲什麼要鎖定線程到核心0?不信任內核調度程序的具體原因是什麼?線程沒有唯一的pid,而是唯一的tid(請參閱Linux特有的[gettid(2)](http://man7.org/linux/man-pages/man2/gettid.2.html)系統調用) – 2013-04-29 05:30:56

回答

0

看看從libnuma numactl的。看起來您可以使用它來設置核心關聯性策略,並讓它使用已生效的策略啓動您的程序。

我還沒有仔細閱讀手冊頁,但我懷疑的是,啓動的程序都可以自由通過使,如果它被寫在第一個地方這樣做相關的系統調用來覆寫該政策。但我會想象,除非程序本身沒有做出這樣的決定,那麼你可以將整個過程限制在任何你喜歡的核心。

因此,也許你可以在numactl限制爲0的核心下運行你的程序。然後,當第三方庫啓動它的線程(大概你調用某種類型的庫初始化例程本身產生監視器線程)您自己的系統調用來放鬆從numactl繼承的核心關聯策略。

但是我同意巴西萊Starynkevitch - 你必須有一些非常具體情況之前,核心相似瞎搞是值得的。根據我的經驗,如果程序有很多線程是真正錘擊內存系統的,並且您還解決了內存關聯性問題(這是libnuma可以做的其他事情),那麼您只能獲得一些東西。英特爾和AMD的硬件確實非常好,你將不得不努力改進Linux調度程序的決策。

您可能還喜歡考慮PREEMPT_RT內核補丁,你可以得到預裝有紅帽MRG或CERNs科學的Linux。它能夠很好地使Linux中的調度在最大和平均上下文切換時間方面更加一致。我建議這樣做,因爲雖然你沒有這樣說過,但我覺得你真正想要的是爲其他線程安排更可靠,更一致的安排。 PREEMPT_RT做得很好。