立即注册
查看: 619|回复: 1

[linux技术资料] Linux/NIO中零拷贝原理及技术实践详解

已绑定手机
发表于 2021-5-8 10:37:55 | 显示全部楼层 |阅读模式 来自 广东省深圳市
零拷贝:
所谓「零拷贝」描述的是计算机操作系统当中,CPU不执行将数据从一个内存区域,拷贝到另外一个内存区域的任务。通过网络传输文件时,这样通常可以节省 CPU 周期和内存带宽。
从描述中已经了解到零拷贝技术给我们带来的好处:
1、节省了 CPU 周期,空出的 CPU 可以完成更多其他的任务
2、减少了内存区域之间数据拷贝,节省内存带宽
3、减少用户态和内核态之间数据拷贝,提升数据传输效率
4、应用零拷贝技术,减少用户态和内核态之间的上下文切换


传统 IO 数据拷贝原理
在正式分析零拷贝机制原理之前,我们先来看下传统 IO 在数据拷贝的基本原理,从数据拷贝 (I/O 拷贝) 的次数以及上下文切换的次数进行对比分析。


传统 IO:
1、JVM 进程内发起 read() 系统调用,操作系统由用户态空间切换到内核态空间(第一次上下文切换)
2、通过 DMA 引擎建数据从磁盘拷贝到内核态空间的输入的 socket 缓冲区中(第一次拷贝)
3、将内核态空间缓冲区的数据原封不动的拷贝到用户态空间的缓存区中(第二次拷贝),同时内核态空间切换到用户态空间(第二次上下文切换),read() 系统调用结束
4、JVM 进程内业务逻辑代码执行
5、JVM 进程内发起 write() 系统调用
6、操作系统由用户态空间切换到内核态空间(第三次上下文切换),将用户态空间的缓存区数据原封不动的拷贝到内核态空间输出的 socket 缓存区中(第三次拷贝)。

7、write() 系统调用返回,操作系统由内核态空间切换到用户态空间(第四次上下文切换),通过 DMA 引擎将数据从内核态空间的 socket 缓存区数据拷贝到协议引擎中(第四次拷贝)


更多内容请下载附件查看
游客,如果您要查看本帖隐藏内容请回复


已绑定手机
发表于 2021-5-18 16:34:24 | 显示全部楼层 来自 北京市
东西的还有患得患失
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

合作/建议

TEL: 19168984579

工作时间:
周一到周五 9:00-11:30 13:30-19:30
  • 扫一扫关注公众号
  • 扫一扫打开小程序
Copyright © 2013-2024 一牛网 版权所有 All Rights Reserved. 帮助中心|隐私声明|联系我们|手机版|粤ICP备13053961号|营业执照|EDI证
在本版发帖搜索
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表