Archive for the ‘好文传递’ tag
好文传递:Zero Copy I: User-Mode Perspective
“零拷贝”这个词也听到不少了,据说是可以明显提高性能。网上找到好文一篇。
Zero Copy I: User-Mode perspective
在一些程序,比如说HTTP服务器,需要向用户发送文件,有一部分是图片、静态网页之类不需要处理就可以直接发送的文件。土一点的做法无非是:
read(file_fd, buf, len); write(socket_fd, buf, len);
实际上,read(2)这个操作,是首先把文件内容读入到内核缓冲区中去,然后再把文件内容从内核缓冲区拷贝到用户缓冲区;而write(2)这个操作,需要把用户缓冲区的内容拷贝到内核缓冲区。我们不需要对文件内容进行处理的情况下,却多用了一道拷贝工序,直接造成的开销有多了一次的上下文切换,以及浪费了缓冲区的内存。
为什么不把拷贝到用户空间的这一道工序去掉了,内核的两个缓冲区直接拷贝就好了。目前流行的做法是用sendfile(2),在Linux里面的作用是把数据从一个文件描述符直接拷贝到别一个文件描述符。但是sendfile(2)的实现,好像是各个系统都有差异,使用的时候需要注意一下,在使用的时候最好先查一下手册。
但是从内核缓冲区到内核缓冲区的“零拷贝”,还不算真的完全没有拷贝。真正的“零拷贝”需要硬件支持。在具备Gather操作的DMA硬件支持下,内核只需要修改内部文件描述符的指向,然后等待硬件自动执行Gather操作,把数据取走。
好文传递:How To Become A Hacker
有个小计划,就是尽量能做到每日抽出一段时间来读点有趣的文章,把链接放在这,然后再记一下自己的想法。
其实前面也有写,比如说公众演说技巧和Memory Barriers的一些小结,应该都算是这类文章。但是直到今天,才真正萌发起这样的想法,能否把这个事情做得系统点,坚持下来,对自己也有好处。假如能做到有周期有规律,那自然是最好的,但是目前的情况是比较难实现的了,只能说有看就写了。
今天看的是Eric Steven Raymond写的How To Become A Hacker。
简要摘录一下,Hacker应有的态度是:1. 世界上有大量有趣的问题是等待解决的;2. 没有人应该需要解决同样的问题两次;3. 拒绝沉闷的事情;4. 自由;5. 信念不能代替能力。
ESR还提到Hacker的基本技能自然是过硬的编程能力、基本功等等。
个人觉得后面对于社区的讨论也比较有价值。在有了前面的基本能力之后,就必须要融入社区之中,从社区获取,也为社区作贡献。个人觉得,这是Hacker和一般程序员的最大的区别。在我的印象中,Hacker们总是热衷于各种各样的争吵,呵呵。