位置: 编程技术 - 正文

linux下零拷贝技术介绍(linux 零拷贝技术)

编辑:rootadmin

推荐整理分享linux下零拷贝技术介绍(linux 零拷贝技术),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:linux零拷贝实现,linux操作系统拷贝命令,拷贝 linux,linux 零拷贝技术,linux zero copy,linux中的拷贝命令,linux操作系统拷贝命令,linux中的拷贝命令,内容如对您有帮助,希望把文章链接给更多的朋友!

传统的数据传输方式

很长一段时间内,数据拷贝的认识仅仅停留在应用程序层,实际上隐藏在背后的数据拷贝行为比想象的要多的多。在传输数据的时候,用户应用程序需要分配一块合适大小的缓冲区来存放需要传输的数据。用户从应用程序中读取数据,然后发送出去,只需要两个系统调用read,write即可完成数据传输工作,应用程序并不知道这个数据传输过程中操作系统进行了多少次拷贝操作。某些情况下,这些数据拷贝操作会极大的降低数据传输的性能。(NIC,Network Interface Card )

传统的数据拷贝方式,如下图:上线文切换,如图:

涉及的步骤:

(1)read()调用引发从用户模式到内核模式的上下文切换(第一次切换),在内部,发出sys_read(或者同等内容)从设备中读取数据,直接内存读取(direct memory access,DMA)执行了拷贝(第一次拷贝),它从磁盘中读取内容,然后将他们存储到一个内核地址空间缓冲区中;

(2)数据从读缓冲区拷贝到用户缓冲区(第二次拷贝),read()调用返回。该调用返回引发内核模式到用户模式的切换(第二次切换)。现在数据被存储在用户空间缓冲区中;

(3) send()套接字调用引发用户模式到内核模式的上下文切换(第三次切换),数据再次被放置到内核地址空间缓冲区中(第三次拷贝)。这次放置的缓冲区与目标套接字关联;

(4) send()系统调用返回,从内核模式切换到用户模式(第四次切换),DMA引擎将数据从内核缓冲区传输到协议引擎(第四次拷贝)。

DMA允许外围设备和贮存之间直接传输IO数据,DMA依赖于系统。每一种体系结构DMA传输不同,编程接口也不同。数据传输可以以两种方式触发:一种所软件请求数据,另一种所硬件异步传输。以read为例,它即采用第一种方式,其步骤如下:

(1) 进程调用read时,驱动程序分配一个DMA缓冲区,随后指示硬件传送它的数据,进程进入睡眠;

(2) 硬件将数据写入DMA缓冲区并在完成时产生一个中断;

(3) 中断处理程序获取输入数据,应答中断,最后唤醒进程,可以读取数据了。

由此可见,在传统的数据传输中,系统方面总共进行了4次数据拷贝,4次上线文切换,这些都会对服务器性能造成很大影响。

零拷贝概述

简单的说,零拷贝是一种避免CPU将数据从一快存储拷贝到另外一块存储的技术。零拷贝技术的目标:

避免数据拷贝

#避免操作系统内核缓冲区之间进行数据拷贝操作;

#避免操作系统内核和用户应用程序地址空间之间进行数据拷贝操作;

#用户应用程序可以避免操作系统直接访问硬件存储;

#数据传输尽量让DMA来处理。

linux下零拷贝技术介绍(linux 零拷贝技术)

多种操作结合在一起

#避免不必要的系统调用和上下文切换;

#需要拷贝的数据可以先缓存起来;

#对数据进行的处理尽量让硬件来做。

零拷贝的实现方式分类

直接IO

主要是通过减少操作系统内核缓冲区和应用程序地址空间数据拷贝次数,降低对文件读取和写入时带来的CPU使用和带宽的开销。对于某些页数的应用程序,比如说自缓冲应用程序来说,会是一个比较好的选择。如果要传输的数据量大,使用直接IO的方式进行数据传输,而不需要操作系统内核地址空间拷贝数据的参与,这将会提高性能。

直接IO并不是所有的情况下都有效。设置直接IO的开销非常大,而且不能利用缓存IO的优势。直接IO的读操作会造成磁盘的同步读,执行进程需要在很长的时间才能执行完;而写操作会导致应用程序关闭缓慢。应用程序使用直接IO进行数据传输通常和异步IO结合使用。

linux内核已经为快设备执行直接IO提供了支持,应用程序直接访问文件而不经过操作系统页高速缓冲存储器的时候,打开文件(open() syscall)指定O_DIRECT标示符。

总之,这种数据传输方式,应用程序直接访问硬件存储,操作系统内核只是辅助数据传输;它一般用于操作系统不需要对数据进行处理的情况,数据可以再应用程序地址空间的缓冲区和磁盘之间进行传输,而不需要linux操作系统内核提供页缓存支持。

针对数据传输不需要经过应用程序地址空间的零拷贝技术

数据传输过程中,避免数据在系统内核地址空间的缓冲区和用户应用程序地址空间的缓冲区进行拷贝。有时候,应用程序在数据传输的过程中不需要对数据进行访问,将数据从linux的页缓存拷贝到用户进程的缓冲区就可以完全避免,传输的数据在页缓冲中就可以处理。在某些情况下,这种零拷贝技术能获得很好的性能。linux下提供类似的系统调用主要有mmap(),sendfile(),splice().

使用mmap替代read,可以减少CPU拷贝次数。当应用程序调用mmap()之后,数据通过DMA拷贝拷贝到内核缓冲区,应用程序和操作系统共享这个缓冲区。这样,操作系统内核和应用程序存储空间不再需要进行任何的数据拷贝操作。当进行write()系统调用时,数据由内核缓冲区拷贝到socket缓冲区,再拷贝到协议引擎中。

这种也比较适用于传送的数据不需要经过操作系统内核的处理或者不需要经过程序的处理直接传输的情况。结合socket也能使用mmap,不过只能在RAW的情况下使用。对于传统的C/S网络游戏结构来说,使用的意义不大。

对应用程序地址空间和内核空间的数据传输进行优化的零拷贝技术

对数据在linux页缓存和用户进程缓冲区之间的传输进行优化。该零拷贝技术侧重于灵活的处理数据在用户进程中的缓冲区和操作系统的页缓冲区之间的拷贝操作。这种方式延续了传统的通信方式,但是更加灵活。linux中该方法主要利用写时复制技术。

写时复制是计算机编程中常见的一种优化策略,基本思想是这样的:如果多个应用程序需要同时访问一块数据,那么可以为这些应用程序分配指向这块数据的指针,在每个应用程序看来,他们都拥有这块数据的一份拷贝,当其中一个应用程序需要对自己的这份数据进行修改时,就需要将数据真正的拷贝到应用程序的地址空间去。如果应用程序永远不会对这块数据进行修改,那么就永远不需要将数据拷贝到应用程序的地址空间去。在stl中string的实现类似这种策略。

参考:

linux 中的零拷贝技术 第1部分

中的零拷贝技术 第2部分

Linux下Android开发环境搭建详细步骤 1、系统环境[android@localhost~]$uname-aLinuxlocalhost.localdomain2.6.-.el6.i#1SMPWedSep::EDTiiiGNU/Linux[android@localhost~]$lsb_release-aLSBVersion::core-4.0-ia:core

Linux操作系统下设置基本网络参数四种方法 一、引言在RedHatLinux6.0系统中,自带有Netscape浏览器,让Linux通过以太网卡访问Internet时,必须对Linux系统进行相应的配置,诸如主机、域名、网关、路由

Linux防火墙伪装机制帮您抵抗恶意黑客 防火墙可分为几种不同的安全等级。在Linux中,由于有许多不同的防火墙软件可供选择,安全性可低可高,最复杂的软件可提供几乎无法渗透的保护能力

标签: linux 零拷贝技术

本文链接地址:https://www.jiuchutong.com/biancheng/360640.html 转载请保留说明!

上一篇:linux中bin与sbin目录的作用及区别介绍(linux bin和sbin)

下一篇:Linux下Android开发环境搭建详细步骤(android linux deploy)

  • 航天信息开票软件
  • 出口退税申报软件实际操作视频
  • 个税申报显示无有效的税费种认定信息已核定
  • 经营租赁的税务编码是什么
  • 税控盘为什么要年年交服务费
  • 五联发票一般用于哪种单位
  • 企业滞留发票的产生和处理
  • 企业所得税按月还是按季度申报
  • 投资性房地产处置时为什么要结转其他综合收益
  • 已经发生的费用
  • 结转本年度收入
  • 装修未付款的会计分录
  • 企业营改增后的会计处理有何变化
  • 企业内部员工稿费
  • 股东转让股权印花税怎么交税
  • 地税评为d级纳税人是指
  • 企业以货币形式取得的收入
  • 商业承兑汇票背书转让流程图
  • 拍卖中,必须规定一切税费由买受人承担吗?
  • 净资产增长率为正数说明什么
  • 工程款主营业务成本
  • 购买债券发生的交易费用计入哪个科目
  • 汇算清缴所得税账务处理
  • 冲红的进项税发票入账处理
  • 无偿使用房屋
  • 先开票后预缴能退吗
  • 民间非营利组织会计科目
  • 屏幕乱跳广告解决办法
  • 存续在业有什么区别
  • 增值税年末结转是结转全年吗
  • ubuntu18更换为阿里源
  • 鸿蒙系统如何隐藏文件
  • 没按时报税罚款多少
  • 收到税务汇算清缴怎么办
  • 应缴纳个人所得税的是托儿补助费
  • 视同销售货物服务无形资产
  • 百度地图api的基本使用
  • php预定义变量有哪些
  • 公司转让账务处理,账户抹平
  • php生成条形码的代码
  • vue3项目搭建
  • 承兑找公司贴现合法吗
  • 第十届蓝桥杯大赛个人赛省赛结果
  • 有效的管理你的时间的重要性英文作文
  • 零申报有哪些
  • 办理税控盘
  • okr开源软件
  • 企业可以一次性现金的方式发放工资
  • 发票金额少于付款金额怎么做账
  • 转账进公户
  • 收到政府补贴如何入账
  • 企业向个人的借款合同
  • 最新出口退税申报需要哪些资料
  • 工程预付款入账
  • 股权支付会计处理
  • 医保卡收到钱
  • 出差费计入工资总额吗
  • 车辆保险费计入现金流量表哪里
  • 蔬菜销售方式
  • 本年利润的借方科目
  • 报销如果没有发票怎么补救
  • 资产负债率比率
  • MySQL数据库开发技术电子版
  • upromise0.exe - upromise0进程是什么文件
  • linux查看磁盘空间大小以及分配
  • linux oracle12c
  • ubuntu安装配置静态ip地址
  • win10h2版本
  • win8界面什么样
  • kernel-headers-2.2.1-4
  • Android自定义控件,切换APP再切回来控件消失了
  • android 圆形图片
  • javascript用处
  • js函数关键字
  • javascript数组去重函数
  • javascript面向对象精要pdf
  • unity多开同一个项目的方法
  • 武汉税务代理大概多少钱
  • 公交爱心卡需要每年审吗
  • 云南省昆明市税收优惠政策
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设