DMA和IOMMU概念理解

本文介绍了DMA技术如何通过总线控制权转移实现高速数据传输,并探讨了IOMMU在内存访问控制和设备隔离中的作用。此外,文章还讲述了IOMMU的工作原理,以及IOMMU启用带来的安全性和可靠性提升,以及关闭IOMMU的不同方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值