我正在尝试使用64位CentOS 6 将极高速数据从一个应用程序传输到另一个应用程序.我已经完成了以下基准测试dd
,发现管道阻止了我而不是程序中的算法.我的目标是达到大约1.5 GB/s的速度.
首先,没有管道:
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
我可以对内核或其他任何可以改善通过管道运行数据的性能的调整吗?我也尝试了命名管道,并获得了类似的结果.
你试过较小的块吗?
当我在自己的工作站上试用时,我注意到在降低块大小时的连续改进.在我的测试中,它仅在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因此这是一个相当大的因素.