当前位置: 首页 > news >正文

什么是零拷贝?

零拷贝

什么是零拷贝

零拷贝指的是,从一个存储区域到另一个存储区域的copy任务无需CPU参与就可完成。零拷贝的底层是
通过DMA总线技术实现的。零拷贝与具体的编程语言无关,完全依赖于OS,OS支持就可使用,不支持
设置了也不起作用。
DMA(Direct Memory Access,直接内存访问)是一种计算机系统内部的数据传输技术,需要DMA总
线(硬件的体系结构)的硬件支持。其整个数据传输过程是在DMA控制器下完成的。
零拷贝在计算机内部数据拷贝及网络传输中都大量使用,用于减少CPU消耗和内存带宽占用,减少用户
空间与内核空间的拷贝过程,减少用户态与内核态间的切换次数,提高系统效率,提升系统性能。例如
远程服务器处理客户端浏览器的主页打开请求过程,就是一个零拷贝在网络传输中的典型应用。下面全
部以该场景为例进行分析。

传统拷贝方式

站在服务器角度,服务器操作系统经历了以下过程
在这里插入图片描述
该拷贝方式共进行了16次用户空间与内核空间的上下文切换,以及4次数据拷贝,其中两次拷贝存在
CPU参与。

零拷贝方式

在这里插入图片描述
该拷贝方式共进行了14次用户空间与内核空间的上下文切换,以及3次数据拷贝,但整个拷贝过程均没
有CPU的参与,这就是零拷贝。

Gather Copy零拷贝

该拷贝方式是由DMA完成,当然,需要当前主机的DMA支持Gather Copy方式。
在这里插入图片描述
该方式中没有数据拷贝到socket buffer。取而代之的是只是将kernel buffer中的数据描述信息写到了socket buffer中。数据描述信息包含了两方面的信息:kernel buffer中数据的地址及偏移量。该拷贝方式共进行了14次用户空间与内核空间的上下文切换,以及2次数据拷贝,并且整个拷贝过程均没有CPU的参与。

mmap零拷贝

mmap,Memory Map,存储映射。mmap零拷贝是对零拷贝的改进。当然,若当前主机的DMA支持
Gather Copy,mmap同样可以实现Gather Copy DMA的零拷贝。
在这里插入图片描述
该方式与普通零拷贝的唯一区别是,应用程序与内核共享了Kernel buffer。由于是共享,所以应用程序
也就可以操作该buffer了。当然,应用程序对于Kernel buffer的操作,就会引发用户空间与内核空间的
相互切换。

http://www.lryc.cn/news/66902.html

相关文章:

  • 计算机专业含金量高的证书
  • 原装二手Keithley 2401低压源表 吉时利2401数字源表
  • gradle-8.1.1-all 快速下载百度网盘下载
  • C#开发的OpenRA游戏之基地工程车部署命令产生过程
  • C++ 智能指针的原理、分类、使用
  • 学习笔记——SVG.js中形状元素的创建及其相关方法
  • Linux一学就会——系统文件I/O
  • OpenCV-Python图像阈值
  • LangChain-Agents 入门指南
  • 深度学习-tensorflow 使用keras进行深度神经网络训练
  • 【NLP开发】Python实现聊天机器人(ChatterBot,集成前端页面)
  • Python 操作 Excel,如何又快又好?
  • Spring Redis 启用TLS配置支持(踩坑解决)
  • centOS7忘记登录密码该如何重新修改登录密码
  • 揭开基于 AI 的推荐系统的神秘面纱:深入分析
  • MySQL的事务特性、事务特性保证和事务隔离级别
  • shell脚本----函数
  • ( 位运算 ) 693. 交替位二进制数 ——【Leetcode每日一题】
  • http简述
  • 一顿饭的事儿,搞懂了Linux5种IO模型
  • C#面向对象的概念
  • 探索学习和入门使用GitHub Copilot:提升代码开发的新利器
  • 在字节跳动做了6年软件测试,4月无情被辞,想给划水的兄弟提个醒
  • 常见信号质量问题、危害及其解决方法-信号完整性-过冲、噪声、回勾、边沿缓慢
  • Java 自定义注解及使用
  • ChatGPT的强化学习部分介绍——PPO算法实战LunarLander-v2
  • JavaWeb ( 八 ) 过滤器与监听器
  • Notion Ai中文指令使用技巧
  • Linux一学就会——编写自己的shell
  • 编程练习【有效的括号】