DMA

(Direct Memory Access,直接存储器访问)它允许不同速度的硬件装置来沟通,而不需要依赖于CPU的大量中断负载。
DMA 传输将数据从一个地址空间复制到另外一个地址空间。当CPU 初始化这个传输动作,传输动作本身是由 DMA 控制器来实行和完成。
在实现DMA传输时,是由DMA控制器直接掌管总线,因此,存在着一个总线控制权转移问题。即DMA传输前,CPU要把总线控制权交给DMA控制器,而在结束DMA传输后,DMA控制器应立即把总线控制权再交回给CPU。一个完整的DMA传输过程必须经过DMA请求、DMA响应、DMA传输、DMA结束4个步骤。
DMA技术的出现,使得外围设备可以通过DMA控制器直接访问内存,与此同时,CPU可以继续执行程序。那么DMA控制器与CPU怎样分时使用内存呢?通常采用以下三种方法:(1)停止CPU访问内存;(2)周期挪用;(3)DMA与CPU交替访问内存。

IOMMU

(input/output memory management unit,输入输出内存管理单元)。这是一种硬件设备,提供DMA地址转换和设备隔离功能,因此只允许特定设备执行进出特定内存区域(由IOMMU指定)的DMA事务,而不能访问指定访问之外的系统内存地址空间。
由于IOMMU的参与,硬件使用的物理地址可能不是真实的物理地址,而是IOMMU分配给硬件的(完全任意的)输入输出虚拟地址(IOVA)。(I/O virtual address)
硬件不能识别用户空间虚拟地址;它使用的是IO地址——物理地址(PA)或IO虚拟地址(IOVA)。

IOMMU和MMU的区别

IOMMU,其主要功能链接DMA-capable I/O总线和系统内存。传统的内存管理单元MMU,是将CPU-visible的虚拟地址转换成物理地址,而IOMMU则是将Device-visible的虚拟地址转换成物理地址:

IOMMU地址转换原理

iommu_get_domain_for_dev()
https://blog.csdn.net/denglin12315/article/details/119734412

采用 IOMMU的好处

一、增强了安全性:1)增加了Device对地址空间的访问控制;2)创建I/O保护域;
二、增强了可靠性:1)Device之间是独立,互不干扰;2) 保护系统内存不被不明的Device读/写。

关闭IOMMU的方式

方式一:将iommu 给彻底给bypass掉,linux 提供了iommu.passthrough command line的选项,这个选项配置上后,dma 默认不会走iommu,而是走传统的swiotlb方式的dma;缺点是效率较低
https://blog.csdn.net/liuhangtiant/article/details/87825466 Linux swiotlb技术解析

方式二:smmu v3的驱动默认支持驱动参数配置,disable_bypass,在系统中是默认关闭bypass的,我们可以通过这个来将某个smmu给bypass掉;

方式三:acpi 或者dts中不配置相应的smmu节点,比较粗暴的办法。

原文链接:https://blog.csdn.net/Rong_Toa/article/details/108997226

参考链接:
https://blog.csdn.net/mathstar/article/details/24435097?utm_medium=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~default-1.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~default-1.no_search_link

https://blog.csdn.net/hotsolaris/article/details/1731870?utm_medium=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~default-1.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~default-1.no_search_link

DMA和IOMMU概念理解相关推荐

  1. DPDK内存篇(三): 标准大页、NUMA、DMA、IOMMU、IOVA、内存池

    作者简介:Anatoly Burakov,英特尔软件工程师,目前在维护DPDK中的VFIO和内存子系统. 目录 引言 标准大页 将内存固定到NUMA节点 硬件.物理地址和直接内存存取(DMA) IOM ...

  2. 深度学习中IU、IoU(Intersection over Union)的概念理解以及python程序实现

    from: 深度学习中IU.IoU(Intersection over Union)的概念理解以及python程序实现 IoU(Intersection over Union) Intersectio ...

  3. 高性能计算中并行的概念理解

    高性能计算中并行的概念理解 分类: 并行计算高性能计算HPC - General2011-11-09 22:54 932人阅读 评论(0) 收藏 举报 编译器编程parallel优化formsvect ...

  4. 目标检测基本概念理解之IoU(交并比)以及Python代码实现

    目标检测基本概念理解之IoU(交并比) 交并比理解 Python代码实现 计算IoU,矩形框的坐标形式为xyxy 计算IoU,矩形框的坐标形式为xywh 交并比理解 在检测任务中,使用交并比(Inte ...

  5. Hadoop:HDFS的概念理解和体系架构-成都加米谷大数据分享

    HDFS是什么? HDFS 全称 Hadoop Distributed File System ,简称HDFS,是一个分布式文件系统.它是谷歌的GFS提出之后出现的另外一种文件系统.它有一定高度的容错 ...

  6. muck数据的概念理解

    muck数据的概念理解 所谓muck表示"模仿","假的":也可翻译为mock-test. 很多项目案例的讲解中,经常会提及muck数据.muck对象.muck ...

  7. 事件与委托的一点概念理解

    事件与委托的一点概念理解 早就接触过delegate和event,但是始终是一知半解,今天刚好有机会就好好研究一下! Delegate 顾名思义就是委托,委托的意思就是麻烦别人帮我干些事情.比如,我要 ...

  8. 目标检测中IoU(Intersection over Union)的概念理解

    参考博客 深度学习中IU.IoU(Intersection over Union)的概念理解以及python程序实现 一.IoU(交并比)概念 Intersection over Union,是一种测 ...

  9. C/C++中宏概念理解

    C/C++中宏概念理解 C/C++中宏概念理解 宏替换是C/C++系列语言的技术特色,C/C++语言提供了强大的宏替换功能,源代码在进入编译器之前,要先经过一个称为"预处理器"的模 ...

  10. DSF学习1_Dubbo详解(一)分布式服务框架的概念理解

    Dubbo分布式服务框架的概念理解 Dubbo是是一个高性能,基于Java的RPC框架,由阿里巴巴开源.一个分布式的服务框架.可以实现SOA(面向服务的架构)架构. Dubbo使用的公司:京东.当当. ...

最新文章

  1. iOS动画进阶 - 手摸手教你写ShineButton动画
  2. SpringMvc项目中使用GoogleKaptcha 生成验证码
  3. 数据结构——二叉树的层次遍历
  4. 值类型和引用类型的区别[转]
  5. Kubernetes详解(二十四)——Deployment控制器更新实战与查看
  6. (转)最近100年全球最顶尖公司的共性
  7. 《Adams/ view从入门到提高》视频 —— ftc正青春
  8. python怎么爬取新浪微博数据_新浪微博爬虫,用python爬取新浪微博数据
  9. ajax传参中文乱码问题解决
  10. 2016年度总结——在路上
  11. Mybatis插入大量数据效率对比:foreach插入、SqlSession批量插入、sql插入
  12. GAN·生成对抗网络——札记2-读《生成式对抗网络 GAN 的研究进展与展望》
  13. Dart Isolate
  14. JavaScript 验证码制作
  15. 经典SVM之SMO算法实现
  16. C/C++基础 sleep()、usleep()、nanosleep()的用法
  17. 基于ssm技术的校自助阅览室的设计与实现 毕业设计-附源码242326
  18. windows下安装wafw00f
  19. BootStrap 统计分析 浅析
  20. 等差素数列--蓝桥杯

热门文章

  1. Android中调用系统所装的软件打开文件,android应用开发基础学堂在线答案
  2. Qt+VS2015+番茄助手 个人常用快捷键集锦
  3. 采用 Python 机器学习预测足球比赛结果
  4. 有哪些网站用爬虫爬取能得到很有价值的数据?
  5. linux多线程编程书籍推荐:linux大牛之路从这几本书开始
  6. python装逼代码_一行python代码带你装B
  7. HashKey TokenGazer | 去中心化身份(DID)研究报告
  8. (转)关于最近疯狂流行的文件夹变成exe文件的病毒查杀办法
  9. CSharp中委托(一)委托、匿名函数、lambda表达式、多播委托、窗体传值、泛型委托
  10. 最新最简单的黑苹果Mac Windows双系统教程(单双系统通用)