ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

Linux 零拷贝技术

2020-12-21 19:02:08  阅读:180  来源: 互联网

标签:sendfile mmap 技术 fd 内核 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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有