今天从redhat的网站上找到一篇介绍 异步的零拷贝的网络IO的paper
-The Need for Asynchronous, Zero-Copy Network I/O
Problems and Possible Solutions
作者是Red Hat, Inc. 的Ulrich Drepper, 他的webpage是
发现他的主页上面很多与网络相关的文章,看来是一位网络方面的expert了.
现在做一个 从高速网络上传输数据写到磁盘上 的程序,发现在网卡1Gib,磁盘RAID0(两个SATA的盘)的情况下,如果传输以太网packet的速度在七八十兆的情况下,被应用程序丢掉的包就有很多了(2,000,000个中可能有几千个,有时候甚至是上万个了,非常恐怖).
影响因素很多了,主要的是有这么几个方面:
1. 磁盘写的速度有限制, SATA的盘理论值也就在70MBps了,这还是在写连续的文件,没有考虑磁道,扇区,磁头在切换位置时产生的比较大的影响.
2.接收的线程在接收数据的时候需要做几次非常多余但又在目前情况下不得不做的内存拷贝, -这样造成1Gib的网卡也不能达到理论上的125MBps的速度, 在100MBps的时候,网卡就要丢很多的包了,这还没有说kernel在调度的时候所发生的未知行为造成的丢包.
其他 的不说,还没有细看作者的文章,只是看了一下abstract和里面的一些figure,发现提出的方法非常适合高速网络的高速传输,如果去掉几次不必要的内存拷贝,网络的性能肯定大有提高吧?-待细看了文章再说吧.
1 comment:
找到一个提高硬盘io的经验方法,是在多核下面的。
Post a Comment