【操纵体系】零拷贝

打印 上一主题 下一主题

主题 994|帖子 994|积分 2984

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
传统的文件传输: 涉及四次CPU上下文切换,四次拷贝

零拷贝技术:
1.mmap+write:用mmap替换read,淘汰一次CPU拷贝,涉及四次CPU上下文切换,三次拷贝

2.sendfile():涉及两次CPU上下文切换,三次拷贝

3.真正的零拷贝:
如果网卡支持 SG-DMA 技术(和普通的 DMA 不同),可以直接通过 SG-DMA 将内核缓冲区的数据拷贝到网卡,不再需要CPU进行拷贝。

总结:什么是零拷贝技术?
为了提高文件传输性能,于是出现了零拷贝技术,他通过一次体系调用(sendfile方法)合并了磁盘读取与网络发送两个操纵,降低了上下文切换次数。别的,拷贝数据都是发生在内核中的,天然降低了数据拷贝的次数。同时,数据拷贝的工作都是由DMA完成的,无需CPU进行数据拷贝。
使用零拷贝技术的项目:Ngnix、Kafka
需要留意的:针对于大文件,不应该使用 PageCache,即不应该使用零拷贝技术,由于可能由于PageCache 被大文件占据,而导致热点小文件无法利用到 PageCache,在高并发环境下,会带来严重性能题目。
大文件传输用什么方式实现?
在高并发场景下,针对大文件传输,使用异步I/O+直接I/O来替代零拷贝技术。
异步I/O可以解决阻塞题目,直接I/O可以不经过Page Cache 直接从磁盘读取数据到用户缓冲区,两者结合,可以实现无阻塞读取文件。如图所示:


总结:传输大文件时,使用异步I/O+直接I/O;传输小文件时,使用零拷贝技术。



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

tsx81428

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表