2012-09-27 51 views
9

我試圖從一個應用程序管道到另一個使用64位CentOS極高速度數據6.我已經完成了以下基準使用dd發現管道阻止我,而不是我的程序中的算法。我的目標是達到約1.5 GB/s的地方。有沒有辦法提高linux管道的性能?

首先,如果沒有管道:

dd if=/dev/zero of=/dev/null bs=8M count=1000 
1000+0 records in 
1000+0 records out 
8388608000 bytes (8.4 GB) copied, 0.41925 s, 20.0 GB/s 

接下來兩個DD進程之間的管道:

dd if=/dev/zero bs=8M count=1000 | dd of=/dev/null bs=8M 
1000+0 records in 
1000+0 records out 
8388608000 bytes (8.4 GB) copied, 9.39205 s, 893 MB/s 

是否有任何調整,我可以讓內核或其他任何東西,這將提高性能通過管道運行數據?我也嘗試了命名管道,並得到了類似的結果。

回答

5

你用小塊試過了嗎?

當我在自己的工作站上嘗試時,我注意到在降低塊大小時會有連續的改進。 在我的測試中只有10%的領域,但仍然有所改進。你正在尋找100%。

事實證明測試。此外,非常小的塊大小似乎做的伎倆:

我試圖

dd if=/dev/zero bs=32k count=256000 | dd of=/dev/null bs=32k 
256000+0 records in 
256000+0 records out 
256000+0 records in 
256000+0 records out 
8388608000 bytes (8.4 GB) copied8388608000 bytes (8.4 GB) copied, 1.67965 s, 5.0 GB/s 
, 1.68052 s, 5.0 GB/s 

並與原來的

dd if=/dev/zero bs=8M count=1000 | dd of=/dev/null bs=8M 
1000+0 records in 
1000+0 records out 
1000+0 records in 
1000+0 records out 
8388608000 bytes (8.4 GB) copied8388608000 bytes (8.4 GB) copied, 6.25782 s, 1.3 GB/s 
, 6.25203 s, 1.3 GB/s 

5.0/1.3 = 3.8所以這是一個相當大的因素。

+1

感謝您計算出來!我做了一些額外的後續測試,發現其實只有寫入速度很重要。 – KyleL

+0

IMO,問題與問題文本和答案不符。我想自己學習實際問題的答案。 :d –

相關問題