有没有办法提高linux管道的性能?

Kyl*_*leL 11 linux performance pipe named-pipes

我正在尝试使用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
Run Code Online (Sandbox Code Playgroud)

接下来,两个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
Run Code Online (Sandbox Code Playgroud)

我可以对内核或其他任何可以改善通过管道运行数据的性能的调整吗?我也尝试了命名管道,并获得了类似的结果.

opa*_*que 6

你试过较小的块吗?

当我在自己的工作站上试用时,我注意到在降低块大小时的连续改进.在我的测试中,它仅在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
Run Code Online (Sandbox Code Playgroud)

和你的原创

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
Run Code Online (Sandbox Code Playgroud)

5.0/1.3 = 3.8因此这是一个相当大的因素.

  • IMO,问题与问题文本或答案均不匹配。我想自己了解实际问题的答案。:D (2认同)