2012-04-23 52 views
1

我有一個派生多個子進程,然後去產卵多線程的應用程序。我可以控制生成的進程和線程的數量。線程對NAS執行特定的讀/寫操作,並且記錄這需要多長時間。Pthreads中似乎並沒有被使用多個處理器

有什麼奇怪的是,它需要進行讀/寫操作的時間較長多個線程。我啓動應用程序,並在完成時之前閱讀的/ proc/STAT,並得到這個(一些數學後):

cpu0: 1.0050% usrtime, 2.5126% systime, 95.4774% idle, 0.5025% softirq 
cpu1: 0.0000% usrtime, 0.0000% systime, 100.0000% idle, 0.0000% softirq 

我也查sched_getaffinity,和兩個CPU都爲孩子進程啓用。除了產生多個線程外,還有什麼我必須要做的,以利用多核?

回答

3

你很難用你的CPU在所有。走向網絡連接存儲,您的瓶頸很可能是您的網絡連接。您推送多少數據以及您的流水線(以及您的NAS)可以承受多少帶寬?

+0

+1 - I/O瓶頸。 – 2012-04-23 23:59:02

+0

此外,我猜想,該機器使用時間的其他CPU 0%,因爲存在參與移動處理器之間的進程或線程成本。如果線程之間沒有爭用處理器,那麼支付這筆費用就沒有意義了。 – Sniggerfardimungus 2012-04-24 00:01:20

+0

正是由於這個測試我發送兩個1Mb的文件。應用程序產生了兩個線程,一個用於發送每個文件。我們已經在2Gb的文件上運行了應用程序,結果相同。我希望通過使用較小的文件,我們將帶寬問題帶出了這個等式。我會檢查我們NAS上的統計數據,並確保我們在未來的測試中不會超載。謝謝您的回答。 – wlformyd 2012-04-24 00:05:30