2012-09-27 42 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 –

相关问题