• 了解IOMMU

1.什么是IOMMU?

  在计算机领域,IOMMU(Input/Output Memory Management Unit)是一个内存管理单元(Memory Management Unit),它的作用是连接DMA-capable I/O总线(Direct Memory Access-capable I/O Bus)和主存(main memory)。传统的内存管理单元会把CPU访问的虚拟地址转化成实际的物理地址。而IOMMU则是把设备(device)访问的虚拟地址转化成物理地址。为了防止设备错误地访问内存,有些IOMMU还提供了访问内存保护机制。

  • MMU(Memory Management Unit, 内存管理单元): 将虚拟地址转化为物理地址,cpu与主存之间地址转换。

  • DMA(Direct Memory Access,直接内存存取): 是一种快速传送数据的机制。DMA 传输将数据从一个地址空间复制到另外一个地址空间。包括以下:
    当CPU 初始化这个传输动作,传输动作本身是由 DMA 控制器来实现和完成。最初的DMA地址是物理地址,后来dmar就出现了。 dmar意为DMA remapping,是Intel为支持虚拟机而设计的I/O虚拟化技术,I/O设备访问的DMA地址不再是物理内存地址,而要通过DMA remapping硬件进行转译,DMA remapping硬件会把DMA地址翻译成物理内存地址,并检查访问权限等等。负责DMA remapping操作的硬件称为IOMMU。

  • IOMMU把设备访问的虚拟地址转化为物理地址,连接DMA-capable 总线和主存。为了防止设备错误地访问内存,有些IOMMU还提供了访问内存保护机制(检查访问权限)。IOMMU不仅将DMA地址虚拟化,还起到隔离,保护等作用。

    • IOMMU使得设备无法直接访问物理地址,大大增加了设备进行DMA攻击的难度。
    • 部分设备的引脚数较少,导致其位数较低,无法寻址到整个物理内存空间。以目前主流的32位设备为例,其在物理内存中直接寻址的范围是[0, 4GB)。但是,现代操作系统的内存往往大于4GB。如果设备申请DMA时,内核为设备分配的DMA buffer的地址高于4GB(以下简称为“high buffer”),则设备将无法寻址到它。

  有了IOMMU以后,IOMMU就可以在[0, 4GB)范围内分配一段与高地址buffer长度相同的内存,让设备能够直接寻址(以下称为“low buffer”)。设备向low buffer写入后,IOMMU就会将low buffer中的内容,复制到high buffer,而后通知CPU从high buffer读取内容。反之亦然——CPU向high buffer写入后,IOMMU就会将high buffer中的内容,复制到low buffer,而后通知设备从low buffer读取内容。这样,CPU和设备都能读取到对方写入的内容。这样在high buffer和low buffer之间复制内容的操作,在IOMMU机制中被称为“sync”或“bounce”。

refer to

  • https://blog.csdn.net/qq_34719392/article/details/114834467
  • https://en.wikipedia.org/wiki/Input%E2%80%93output_memory_management_unit

linux -IOMMU相关推荐

  1. Linux IOMMU支持

    文章目录 Linux IOMMU 基本的东西 什么是RMRR? IOVA是如何产生的? 图形问题? IOVA的一些例外情况 故障报告 启动消息示例 故障报告 待决定 Linux IOMMU 架构规范可 ...

  2. Linux平台上DPDK入门指南

    目录 1. 简介 1.1. 文档地图 2. 系统要求 2.1. X86 上预先设置 BIOS 2.2. 编译DPDK 2.3. 运行DPDK应用程序 2.3.1. 系统软件 2.3.2. 在 Linu ...

  3. Linux平台上DPDK入门指南(二)

    4. 编译和运行简单应用程序 本章介绍如何在DPDK环境下编译和运行应用程序.还指出应用程序的存储位置. 注意:此过程的部分操作也可以使用脚本来完成. 4.1. 编译一个简单应用程序 一个DPDK目标 ...

  4. linux内核文档汇集

    链接:https://01.org/linuxgraphics/gfx-docs/drm/ The Linux Kernel documentation This is the top level o ...

  5. MMU和SMMU/IOMMU使用场景和区别,SMMU技术与cache

    目录 1.各种MMU 2.各种MMU的使用场景 2.1 各自的使用场景 2.1.1 地址转换 2.1.2 内存保护 3.MMU和SMMU的区别 4. MMU/SMMU/IOMMU与cache 5.扩展 ...

  6. linux内核笔记之SMMU代码分析

    2020/06/10: first version, 主要介绍smmu驱动的初始化流程 在前一篇博文ARM SMMU学习笔记中, 介绍了SMMU的一些基本概念以及SMMU地址转换的基本流程,本文主要分 ...

  7. DPDK — DPDK APP 的指令行参数

    目录 文章目录 目录 Lcore-related options(逻辑线程相关参数) Device-related options(设备相关参数) Multiprocessing-related op ...

  8. 官档翻译-启用High Precision Event Timer (HPET) Functionality

    原文地址:http://doc.dpdk.org/guides/linux_gsg/enable_func.html#enabling-additional-functionality BIOS准备 ...

  9. linux开启IOMMU方法

    一.IOMMU简介 IOMMU:input/output memory management unit. 连接DMA io bus和主存,完成从设备虚拟地址到物理地址的映射. 提供对故障设备的内存保护 ...

  10. Linux驱动:VFIO概述(vfio/iommu/device passthrough)

    <ARM SMMU原理与IOMMU技术("VT-d" DMA.I/O虚拟化.内存虚拟化)> <提升KVM异构虚拟机启动效率:透传(pass-through).DM ...

最新文章

  1. hdu 1003 dp
  2. JVM调优实战:G1中的to-space exhausted问题
  3. C++通过hiredis连接到redis
  4. 人生第一个过 5K Star 的 项目 x-spreadsheet 感谢各位大佬的支持
  5. mycat 启动失败 The specified size exceeds the maximum representable size JVM exited while loading the a
  6. Oracle数据库的数据统计(Analyze)
  7. lucene解决全文检索word2003,word2007的办法
  8. scala seq java_Scala中的两个Seq比较
  9. 实战经验:Oracle DG 的归档缺失修复
  10. 关系图谱在贝壳的构建和应用
  11. 新在线一键制作表白网系统源码
  12. 课程表的实现(基于强智科技教务系统)
  13. Python语言在人工智能(AI)中的优势
  14. 2022-2028年全球与中国红外(IR)摄像机行业市场前瞻与投资战略规划分析
  15. 【转】一个交警肺腑之言:高速公路行车的安全注意事项
  16. html中table的样式设置
  17. QuickBooks 2020 for Mac(mac财务管理软件)
  18. RT-Thread I/O设备模型及驱动框架解析(一)
  19. linux 板卡驱动开源项目Comedi使用编译流程
  20. 央视影音 服务器暂时无法连接服务器,央视影音APP播放不了怎样办 打开不知道决办法...

热门文章

  1. contos7改分辨率_centos桌面分辨率修改
  2. DSP CCS5.5安装步骤
  3. 基于Springboot的个人健康监控管理系统 毕业论文+项目源码、
  4. C++ log4cpp(tx2)
  5. matlab 机械振动,MATLAB使用教程之用MATLAB仿真机械振动.doc
  6. ArcPad8新功能介绍
  7. Chaff Bugs: Deterring Attackers by Making Software Buggier
  8. openvpen最新安卓中文版_ins下载官方安卓最新版-ins下载安卓版中文版下载v2.5.46 手机版-西西软件下载...
  9. PowerBuilder资源分享汇总
  10. mcal rtm_RTM的完整形式是什么?