Linux 零拷贝技术
作者:互联网
减少拷贝次数的一种方法是调用mmap()来代替read调用,调用mmap(),内核会把数据通过DMA拷贝到内核缓冲区,然后不发往用户空间,而是直接将数据拷贝到socket缓冲区或者其他硬盘缓冲区。原本数据从硬盘发送到网卡需要经过四次上下文切换和四次数据拷贝——从硬盘到内核缓冲区,从内核缓冲区到用户空间,从用户空间到内核缓冲区,从内核缓冲区到socket缓冲区。使用mmap后需要经过相同过的四次上下文切换和三次数据拷贝,但是mmap调用返回时数据不再从内核拷贝到用户空间,少了一次内存拷贝。零拷贝技术是使用虚拟内存技术实现的物理内存共享机制。
系统调用
sendfile()
在代表输入文件的描述符in_fd
和代表输出文件的描述符out_fd
之间传送文件内容(字节)。描述符out_fd
必须指向一个套接字,而in_fd
指向的文件必须是可以mmap
的。这些局限限制了sendfile
的使用,使sendfile
只能将数据从文件传递到套接字上,反之则不行。使用
sendfile
不仅减少了数据拷贝的次数,还减少了上下文切换,数据传送始终只发生在kernel space
标签:sendfile,mmap,技术,fd,内核,Linux,缓冲区,拷贝 来源: https://www.cnblogs.com/liuweiweitju/p/14169389.html