首页 > 其他分享 >决战圣地玛丽乔亚Day11---零拷贝

决战圣地玛丽乔亚Day11---零拷贝

时间:2023-02-15 01:33:22浏览次数:51  
标签:DMA 乔亚 --- Day11 缓冲区 拷贝 拷贝到 CPU 内核

首先弄懂传统的I/O操作的过程:

 

 

 

首先,期间共发生了 4 次用户态与内核态的上下文切换,因为发生了两次系统调用,一次是 read() ,一次是 write(),每次系统调用都得先从用户态切换到内核态,等内核完成任务后,再从内核态切换回用户态。

上下文切换到成本并不小,一次切换需要耗时几十纳秒到几微秒,虽然时间看上去很短,但是在高并发的场景下,这类时间容易被累积和放大,从而影响系统的性能。

其次,还发生了 4 次数据拷贝,其中两次是 DMA 的拷贝,另外两次则是通过 CPU 拷贝的,下面说一下这个过程:

  • 第一次拷贝,把磁盘上的数据拷贝到操作系统内核的缓冲区里,这个拷贝的过程是通过 DMA 搬运的。
  • 第二次拷贝,把内核缓冲区的数据拷贝到用户的缓冲区里,于是我们应用程序就可以使用这部分数据了,这个拷贝到过程是由 CPU 完成的。
  • 第三次拷贝,把刚才拷贝到用户的缓冲区里的数据,再拷贝到内核的 socket 的缓冲区里,这个过程依然还是由 CPU 搬运的。
  • 第四次拷贝,把内核的 socket 缓冲区里的数据,拷贝到网卡的缓冲区里,这个过程又是由 DMA 搬运的。

 

什么是DMA?

没有使用DMA之前,文件的IO操作,CPU需要发信号给磁盘控制器,让磁盘控制器准备数据。磁盘控制器准备好数据(把数据放入内核缓冲区)后,发中断信号给CPU,让CPU停下手头的工作进行IO。

然后把内存缓冲区的数据拷贝给用户缓冲区。这其中包含了四次上下文切换成本,因为切换之后还要切换回来所以是四次。

 

 

 使用DMA之后,CPU不再参与数据搬运的工作,让DMA控制器去直接访问内存,把最占用时间的数据搬运的工作交给了DMA控制器来完成。

 

 

 什么是虚拟内存?

了解零拷贝之前的重要知识就是虚拟内存技术。

各种内存策略都是在保证多进程在内存中的调用,如果要把所有的作业都放入内存才运行,那么会造成空间浪费和无法完全装下的问题。

所以利用局部性原理(时间局部性,空间局部性) : 存储单元被调用,临近的单元也很快会被调用。一个命令执行一次就可以会再次执行。

所以基于局部性原理,可以把用到的装入内存,暂时不用的留在外存。运行的时候用到再从外存调用进来,这样从用户来看好像空间确实大了很多。

利用以上特性,我们可以把内核和用户的虚拟地址映射到同一个物理地址,就可以减少切换次数了

 

mmap/write是什么?

内核缓冲区的数据拷贝到用户缓冲区是read()函数做的事情

内核缓冲区的数据直接映射到用户缓冲区是mmap()函数做的事情

说白了就是内核缓冲区和用户缓冲区进行共享,这样在write的时候都发生在内核,减少了一次拷贝的操作。拷贝还是要拷贝,只不过是不需要用户缓冲区这个中间人了。

系统调用还是两次,一个mmap一个write。切换还是四次。少了一次CPU copy但是还是需要wirte

  • 应用进程调用了 mmap() 后,DMA 会把磁盘的数据拷贝到内核的缓冲区里。接着,应用进程跟操作系统内核「共享」这个缓冲区;
  • 应用进程再调用 write(),操作系统直接将内核缓冲区的数据拷贝到 socket 缓冲区中,这一切都发生在内核态,由 CPU 来搬运数据;
  • 最后,把内核的 socket 缓冲区里的数据,拷贝到网卡的缓冲区里,这个过程是由 DMA 搬运的。

 

 

 

标签:DMA,乔亚,---,Day11,缓冲区,拷贝,拷贝到,CPU,内核
From: https://www.cnblogs.com/dwj-ngu/p/17120488.html

相关文章

  • C/C++程序设计课程设计[2023-02-15]
    C/C++程序设计课程设计[2023-02-15]程序设计课程设计要求1、课程设计分组合作完成,每个小组最多3人。2、每组成员(不得超过3人)分工合作完成一个课程设计题目,每个人的任......
  • 剑指 Offer 53 - II. 0~n-1中缺失的数字
    题目:思路:【1】最简单的直接遍历的方式:这个思路是基于,首先一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内,这就说明了这是一串连续的数......
  • day09-2-验证以及国际化
    验证以及国际化1.概述(1)概述对于输入的数据(比如表单数据),进行必要的验证,并给出相应的提示信息对于验证表单数据,SpringMVC提供了很多使用的注解,这些注解由JSR303验证......
  • 第 5 课、java和rest-assured
                               packagecom.les.java.day01;importorg.apache.log4j.Logger;publicclass......
  • OpenStack01-安装OpenStack
    1、基础环境准备1.1、安装服务器1.1.1、虚拟机配置内存:2G(越大越好)处理器:2个(越多越好)必须勾选虚拟化功能,否则openstack无法启动云主机。网路适配器:2个一个基于N......
  • 把数据到处成csv和读入的记录--pandas
    dfavg=df[['IDSTUD','IDSCHOOL','avg']]dfavg.head()#把学号和成绩搞出来,然后输出保存成csvoutputpath='dfavg.csv'dfavg.to_csv(outputpath,sep=',',index=False,hea......
  • 登录-退出功能(管理系统Vue)
    一、登录业务流程在登录页输入用户名和密码调用后台接口进行校验验证通过之后,根据后台的响应状态跳转到项目主页使用路由导航守卫控制访问权限-4.1项目中出现......
  • 344.反转字符串 & 541. 反转字符串II & 剑指Offer 05.替换空格 & 151.翻转字符串里的
    一、反转字符串344.反转字符串1.方法概述双引用法。创建两个引用left和right,left指向字符数组的开端,right指向字符数组的末端,再进行交换即可。2.具体实现Java实现......
  • [LeetCode] 1124. Longest Well-Performing Interval
    Wearegiven hours,alistofthenumberofhoursworkedperdayforagivenemployee.Adayisconsideredtobea tiringday ifandonlyifthenumberofh......
  • Vue - 1 简介与入门
    目录Vue-1简介与入门前端发展历史Vue介绍与基本使用1.Vue介绍渐进式框架官方网站2.Vue特点易用灵活高效3.M-V-VM架构思想①MVVM介绍②MVVM的特性③MVVM的逻辑4.组件......