首页 > 其他分享 >DMA和零拷贝

DMA和零拷贝

时间:2024-03-11 16:46:43浏览次数:15  
标签:DMA 调用 内核 缓冲区 拷贝 CPU

一、DMA(直接内存访问)
1.作用:解决大量数据转移过度消耗CPU资源的问题
2.实现原理:在进行I/O设备和内存的数据传输时,数据搬运到内存的工作全部交给DMA控制器,而CPU不再参加与数据搬运相关的事情。
比如在文件传输:原本CPU负责将磁盘控制器缓冲区的内容搬运到内核缓冲区(PageCache,磁盘高速缓存),现在这个工作交给DMA控制器来完成,CPU负责告诉DMA传什么数据、从哪里传到哪里;将数据从内核拷贝到用户空间

二、零拷贝
1.作用:减少内存拷贝的次数。
以文件传输为例:原本使用read+write,两次系统调用(一次系统调用两次上下文切换,即用户态-内核态-用户态,共四次上下文切换),四次拷贝
数据拷贝过程:磁盘缓冲区-(DMA)内核缓冲区-(CPU)用户缓冲区-(CPU)socket缓冲区-(DMA)网卡缓冲区
2.实现方法
(1)mmap+write(两次系统调用,三次拷贝):调用mmap()系统函数会直接把内核缓冲区的数据映射到用户空间,应用进程和操作系统内核共享这些数据;应用进程再调用write()将内核缓冲区数据拷贝到socket缓冲区里(这个过程发生在内核空间,相当于少了一次从内核空间到用户空间的拷贝操作)
(2)sendfile(一次系统调用,三次拷贝):也是能直接将内核缓冲区数据拷贝到socket缓冲区里,但只需要一次系统调用。
(3)真正的零拷贝技术(一次系统调用,两次拷贝):支持SG-DMA的话,DMA将磁盘数据拷贝到内核缓冲区,再用DMA将数据从内核缓冲区拷贝到网卡缓冲区。“零”指的是没有在内存层面拷贝数据,全程没有CPU只有DMA在搬运数据
3.应用:kafka、Nginx

标签:DMA,调用,内核,缓冲区,拷贝,CPU
From: https://www.cnblogs.com/fly-smart/p/18066473

相关文章

  • js 实现深拷贝/深复制
    //深拷贝constdeepClone=(obj)=>{vartarget={};for(varkeyinobj){if(Object.prototype.hasOwnProperty.call(obj,key)){if(typeofobj[key]==='object'){target[key]=deepClone(obj[key])......
  • XILINX FPGA 1/4/8通道PCIe DMA控制器IP,高性能版本IP介绍应用
    Multi-ChannelPCIeQDMA&RDMAIP1   介绍基于PCIExpressIntegratedBlock,Multi-ChannelPCIeQDMASubsystem实现了使用DMA地址队列的独立多通道、高性能Continous或ScatherGatherDMA,提供FIFO/AXI4-Stream用户接口。基于PCIExpressIntegratedBlock,Multi-ChannelPC......
  • Java登陆第三十三天——ES6(二)浅拷贝、深拷贝;
    对象的拷贝,就是复制一个已有对象的方式。JS中对象的拷贝<script>console.log("1.浅拷贝,对象仅拷贝引用地址,基本类型拷贝的是值");letdoor1=["木门"];letdoor2=door1;//浅拷贝仅仅是拷贝引用地址door2[0]="铁门";console.log(door1);//['铁门']......
  • 深拷贝和浅拷贝
    前言浅拷贝(shallowcopy)和深拷贝(deepcopy)是在编程中经常遇到的概念,尤其在处理数据结构时很重要。它们是针对对象(object)或数据结构(datastructure)进行复制操作时的两种不同方式。浅拷贝和深拷贝是在编程中常见的两种拷贝对象的方式,它们在拷贝对象时的行为和效果有所不同。浅......
  • 14_深拷贝
    深拷贝深拷贝是一种克隆类型,其中原始对象的所有字段和属性都会被复制到克隆中,包括嵌套对象。这意味着对克隆的任何更改都不会影响原始对象。ICloneable接口ICloneable接口允许.NET对象创建自身的一个副本,称为克隆。克隆与原始对象具有相同的值,但它们是独立的对象。实现IC......
  • 【个人前端笔记】手写对象深拷贝
    一、对象深拷贝简单的方法:JSON序列化方法通过将对象转换成JSON格式并转换回对象,实现深拷贝leta1={a:"hello",b:"world",c:[1,2,3],d:{a:1,b:2}}leta2=JSON.parse(JSON.stringify(a1))console.log(a2);JSON序列化拷贝的缺点a.不支持......
  • C++ 拷贝构造函数(初学有点难理解)
    拷贝构造函数是一种特殊的构造函数,它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象。拷贝构造函数通常用于:通过使用另一个同类型的对象来初始化新创建的对象。复制对象把它作为参数传递给函数。复制对象,并从函数返回这个对象。如果在类中没有定义拷......
  • Tomcat学习路线roadmap和个人入门知识摘录
    Tomcat学习路线roadmap和个人入门知识摘录roadmap参考《TOMCAT与JAVAWEB开发技术详解第3版》,内容非常非常详细,初期入门并不需要学习到那么详细,后面精进学习可按图索骥,或者有需要再看看就行第1章Web运作原理探析读者不妨带着以下问题去阅读本章开头的内容:●在整个......
  • Tomcat学习路线roadmap和个人入门知识摘录
    Tomcat学习路线roadmap和个人入门知识摘录roadmap参考《TOMCAT与JAVAWEB开发技术详解第3版》,内容非常非常详细,初期入门并不需要学习到那么详细,后面精进学习可按图索骥,或者有需要再看看就行第1章Web运作原理探析读者不妨带着以下问题去阅读本章开头的内容:●在整个......
  • Tomcat学习路线roadmap和个人入门知识摘录
    Tomcat学习路线roadmap和个人入门知识摘录roadmap参考《TOMCAT与JAVAWEB开发技术详解第3版》,内容非常非常详细,初期入门并不需要学习到那么详细,后面精进学习可按图索骥,或者有需要再看看就行第1章Web运作原理探析读者不妨带着以下问题去阅读本章开头的内容:●在整个......