今天去研究了下内核零拷贝技术,没碰到内核态怎么实现,倒是碰到了一个讲用户态怎么使用的,看了就火大,浪费时间,浪费心情,一副长篇大论就得出一个结论用sendfile这个函数就能实现“零拷贝”,我怀疑那是个白痴,就那点技术水平也拿出来献真是,浪费了不少感情。你man sendfile,手册里就明确指出了这要比send和write快,因为sendfile没有切换到用户态。
先帖出原文地址,这人的文章垃圾的很。归根结底还是采用的是DMA技术,哪是所谓的零拷贝。最恨那些老外今天发明个概念,明天发明个概念,让你捉摸不透,捉摸透了,其实也不过是一种技术的另一种叫法。
那人还说要出个内核态的讲解,这个只是用户态的,文章是2003年的,但翻译过来时是2007年的,唉,去搜了搜,现在2008了就没出了他对内核态的讲解,这还用说,跟本就不用它讲,要将也只是讲DMA的实现。你说他为什么非得把DMA改成叫内核零拷贝,前两天我翻译了个PF_RING的,其实也是用DMA的,这老外真是喜欢故弄玄虚。
当然有我们中国人的译文,对翻译的作者我们还是表示感谢的,要不然,看完英文才知道作者的那丁点技术,还不是郁闷死。下面给出链接
下面给出一个可以看到图片的链接,上面的那个文章没图片
这就是我从一个帖子上发现一个人的评论说完全没得意思得技术。下面是帖子地址。感谢他能够正确直到一下大家,可惜未被重视。
最后再帖一个有关sendfile性能测试的文章,作者仿佛没有感受到这个有多大的性能的提升。
真正的零拷贝技术应该包括两方面,
1,驱动程序和内核之间的零拷贝,这可以通过事先分配可DMA的sk_buff,
并让网卡直接将数据包接收到该sk_buff。
2,内核和进程之间的零拷贝,这可以将相应的sk_buff的数据
mmap到进程的内存空间。
1,驱动程序和内核之间的零拷贝,这可以通过事先分配可DMA的sk_buff,
并让网卡直接将数据包接收到该sk_buff。
2,内核和进程之间的零拷贝,这可以将相应的sk_buff的数据
mmap到进程的内存空间。
这个PF_RING就是这个思路,只不过它的缓冲区是个环形缓冲区而已。
所以PF_RING跟内核零拷贝思路是一致的,而实现PF_RING的这个人才算是真正的技术牛人。
相关热门文章
给主人留下些什么吧!~~
chinaunix网友2011-04-16 01:00:41
我的email: wirelesser[at]hotmail.com,有机会回复以下 我看pf_ring 也没有实现zero-copy吧,当然他支持一个叫DNA的设备,那个有没实现我不清楚,对于常规的网卡它内核里肯定要做一次skb->用户空间内存的copy
评论热议