我有一個簡單的bash腳本,它將一個進程的輸出管道傳輸到另一個進程。即:。如何在多核上運行使用bash進行管理的進程?
dostuff | filterstuff
在我的Linux系統上(openSUSE,如果有問題的話,內核2.6.27),這兩個進程都運行在一個內核上。但是,運行不同過程在不同的內核是不會發生在這種情況下觸發默認策略。
什麼組件系統的負責人認爲,我應該怎樣做才能利用多核功能?
注意,有對2.6.30內核沒有這樣的問題。
澄清:具有其次Dennis Williamson的建議,我做了肯定與頂級方案,即管道輸送過程確實總是在同一處理器上運行。 Linux調度程序通常做得非常好,但這次不行。
我想的東西在bash阻止OS從這樣做。事情是,我需要一個便攜式解決方案的多核心和單核心機器。通過Dennis Williamson提出的taskset
solution不會在單核機工作。目前我正在使用:,
dostuff | taskset -c 0 filterstuff
但這似乎是一個骯髒的黑客攻擊。有誰能提供更好的解決方案嗎?
嘗試用'top'重複測試幾次(不包括'taskset')。當我這樣做時,有時這兩個進程在同一個CPU上,有時是不同的。 – 2009-09-09 13:49:05
他們總是在同一個系統上,只使用系統的50%:( – 2009-09-09 14:17:14
嘗試'(dostuff)|(filterstuff)',看看他們顯示了哪個核心。一個區別(如果有的話)是你在多核系統上,我在多處理器(每個單核)系統上,爲什麼要分開這些進程呢?它們是你編寫的程序嗎?你可以改變它們以便它們自己影響調度器嗎? – 2009-09-09 14:36:55