IOMMU和SMMU详解

前言:

IOMMU(输入输出内存管理单元)的原理与CPU中的MMU(内存管理单元)相似。它的作用是管理设备的内存访问请求,允许安全、高效地在设备和内存之间直接传输数据。IOMMU通常用于支持高速数据传输的设备,如图形卡、网络卡和存储设备。 IOMMU与MMU相似,IOMMU是把外部设备地址到存储器地址的转换。IOMMU中存放了IO页表虚实地址转换关系和访问权限,而且处理器加速虚实地址转换,还设置了IOTLB作为IO页表的Cache。
SMMU 专指在ARM架构中使用的内存管理单元,具有与x86/x64架构中的IOMMU相似的功能。它同样实现了设备的地址转换、内存保护、DMA重映射及虚拟化支持等功能。
尽管二者在功能上相似,它们在实现方式、接口和可能使用的特定命名上有所不同。在ARM系统中,通常采用"SMMU"这个术语,而在x86/x64系统中,则更多使用"IOMMU"这个术语。
简而言之,SMMU和IOMMU在概念上是类似的,都提供设备对内存访问的管理,但SMMU特指ARM架构,而IOMMU则是更广泛使用的术语,可包含多种架构,包括x86/x64和ARM。

一、 IOMMU的原理:

地址转换:
IOMMU实现了从设备发出的DMA(直接内存访问)请求中的I/O虚拟地址到物理地址的转换。这能够在设备和系统内存之间提供保护和隔离。

内存保护:
通过确保设备不能读取或写入它们没有权限的内存区域,IOMMU有助于防止恶意设备驱动程序或硬件故障引起的系统崩溃和安全问题。

DMA重映射:
IOMMU可以重映射DMA请求,允许设备看起来像是连续内存区域的非连续物理内存。

支持虚拟化:
IOMMU对于虚拟化也非常重要,因为它允许虚拟机直接且安全地访问硬件设备,而没有性能上的显著损失。

二、 SMMU 工作原理

地址转换:
SMMU负责将设备发出的DMA请求的I/O虚拟地址(IOVA)转换为系统物理地址(PA)。这个转换关系由SMMU内部的转换表维护,类似于CPU中MMU的页表机制。
内存访问控制:
SMMU提供内存访问控制功能,以确保设备只能访问授权的内存区域。这有助于提高系统的安全性,防止未授权的内存访问导致的安全漏洞。
上下文银行和流ID:
SMMU支持多个“上下文银行”(Context Bank),每个银行关联到一个或多个设备,设备通过流ID(Stream ID)被识别。不同的设备DMA请求可以通过不同的上下文银行进行管理,每个上下文银行包含自己的转换表。
虚拟化支持:
SMMU支持虚拟化技术,允许虚拟机(VM)可直接且安全地访问其虚拟设备的硬件资源。SMMU负责为每个VM管理独立的地址映射和内存保护,使得设备可以在不同的VM间高效切换。
缓存维护:
SMMU可以管理和维护一致性缓存以支持DMA操作。这样设备可以使用缓存来提高DMA操作的性能。
中断重映射:
SMMU也能重新映射来自设备的中断,让中断信号能够正确地传递到宿主机或虚拟机中。
在使用中,SMMU的典型工作流程包括:
设备需要执行DMA传输时,发起带有I/O虚拟地址的请求。
SMMU根据内部转换表将IOVA转换为相应的物理地址。
如果转换合法,SMMU允许DMA传输继续;如果地址转换不合法,则可能会生成一个错误报告,并可中断CPU。
传输完成后,SMMU可以确保任何相关缓存都保持一致。

三、ATS (Address Translation Services)

ATS 是 PCI Express (PCIe) 设备支持的一项特性,它允许设备在内部缓存它自己的 I/O 虚拟地址 (IOVA) 到系统物理地址 (PA) 的翻译,这可以减少对 IOMMU 重复地址翻译的需求。具体来说,启用 ATS 的设备可以执行以下操作

3.1 TLP中AT字段

   PCIe总线在TLP中设置了AT字段支持ATS机制,并且只有处理器支持IOMMU时,PCIe设备才可以使用ATS机制。

AT字段为0b00:
当AT字段为0b00时,表示TLP的Address没有通过ATC转换,存放是PCI总线域的物理地址。
1.不支持ATS 机制,处理器不支持IOMMU;TLP的Address是PCI总线域的物理地址,进行DMA操作时,该地址被RC转换为存储器域的物理地址,然后对存储器进行读写操作。
2. 不支持ATS机制,处理器支持IOMMU;TLP的Address是PCI总线域的物理地址,进行DMA操作时,该地址被TA根据I/O页表转换为存储器域的物理地址,然后对存储器进行读写操作。
3. 支持ATS机制,处理器支持IOMMU;进行DMA操作时,该数据被传送到对存储器进行读写操作。

AT字段为0b01:
支持ATS机制的设备必须支持0b01报文,该报文为“Translation Request”,该报文由PCIe设备通过存储器读请求TLP发出,其目的为TA。TA收到报文后将根据I/O页表设置,将合适的地址转换关系通过存储器读完成TLP,发送给PCIe设备,PCIe设备收到这个地址转换关系后,将更新ATC。该TLP有64位和32位两种格式。

3.2 ATS 和 IOMMU 的联系

ATS 与 IOMMU 一起工作时,可以为 PCIe 设备和系统 bieding 更高效的地址翻译服务:

效率改善:
当启用 ATS 的设备需要执行 DMA 操作时,它首先在本地 ATC 中查找地址翻译。如果找到合适的翻译,就不需要再与 IOMMU 通信,提高了效率。

IOMMU的降低负担:
ATS 减少了设备对 IOMMU 的依赖,从而可以减轻 IOMMU 的压力。对 IOMMU 的查询减少意味着总体的系统性能可能提高,特别是在多设备频繁进行 DMA 操作的环境中。

缓存无效化协议:
如果系统内存中的 IOVA 到 PA 的映射发生更改,IOMMU 需要通知所有启用 ATS 的设备更新或无效化它们的 ATC。这是通过一种特定的缓存无效化协议完成的。

安全和一致性:
即使设备使用 ATS 缓存地址翻译,在访问内存之前第一次的地址翻译仍由 IOMMU 管理,确保了系统的安全性。同样,IOMMU 保证即使在使用 ATS 的情况下,系统内存的保护和隔离依然起效。

四、IOMMU/SMMU enable

4.1 x86 架构下

打开BIOS中的虚拟化开关(Intel VT-d)将Disabled置为Enable
在这里插入图片描述
路径 PCI Subsystem Configuration/Intel® VT for Directed I/O置为disable,这里默认置灰,不可修改,需要先修改Processor Configuration/X2APIC 置为Disable才可修改Intel® VT for Directed I/O,将XAPIC置为Disable之后打开Intel® VT for Directed I/O
在这里插入图片描述
在这里插入图片描述
激活linux内核的VT-d开关。
编辑/etc/sysconfig/grub文件(系统引导文件),找到rhgb quiet,在后面添加intel_iommu=on或者amd_iommu=on。
使用grub-mkconfig –o /boot/grub/grub.cfg生成新的系统引导菜单(或者是grub2-mkconfig)
重启使设置生效
使用dmesg | grep -e DMAR -e IOMMU,查看IOMMU是否启用
在这里插入图片描述

4.2 arm架构下

在bios中打开smmu
其余CPU /etc/default/grub GRUB_CMDLINE_LINUX=iommu.passthrough=1 iommu.strict=0配置
生成配置文件grub-mkconfig -o /boot/grub/grub.cfg,
重启系统
dmesg | grep -e DMAR -e smmu查看IOMMU是否打开,下图为打开状态:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/827267.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java生成数据库数据到excel当做下拉选择,copy就完事~

背景:由于需要下载模板,模板包含下拉选择框,但是下拉选择框不想手写,并且需要从数据库读取,由于直接设置excel会有单元格最大255个字符长度限制,所以用到以下部分代码。 思路:由于数据模板在sh…

怎么通过Javascript脚本实现远程控制一路开关

怎么通过Javascript脚本实现远程控制一路开关呢? 本文描述了使用Javascript脚本调用HTTP接口,实现控制一路开关。一路开关可控制一路照明、排风扇等电器。 可选用产品:可根据实际场景需求,选择对应的规格 序号设备名称1智能WiFi…

JSON Web Token 入门

JSON Web Token(缩写 JWT)是目前最流行的跨域认证解决方案,本文介绍它的原理和用法。 一、跨域认证的问题 互联网服务离不开用户认证。一般流程是下面这样。 1、用户向服务器发送用户名和密码。 2、服务器验证通过后,在当前对话&…

基于微信小程序的宠物寄养小程序,附源码

博主介绍:✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&#x1f3…

Redis中的慢查询日志和监视器

慢查询 添加新日志 在每次执行命令的之前和之后,程序都会记录微妙格式的当前UNIX时间戳,这两个时间戳之间的差就是服务器执行命令所耗费的时长,服务器会将这个时长作为参数之一传给slowlogPushEntryIfNeeded函数,而slowlogPushE…

网络安全数字孪生:一种新颖的汽车软件解决方案

摘要 随着汽车行业转变为数据驱动的业务,软件在车辆的开发和维护中发挥了核心作用。随着软件数量的增加,相应的网络安全风险、责任和监管也随之增加,传统方法变得不再适用于这类任务。相应的结果是整车厂和供应商都在努力应对汽车软件日益增加…

System Dashboard for Mac:强大的系统监控与管理工具

System Dashboard for Mac是一款专为苹果电脑设计的系统监控与管理工具,以其直观易用的界面和全面的功能,深受用户喜爱。 System Dashboard for Mac v1.10.11激活版下载 这款软件能够实时监测系统的重要参数,包括CPU使用率、内存利用率、硬盘…

nginxtomcat笔记

nginx是一个轻量级高性能的http和反向代理web服务器,优点:占用内存少,并发能力强 实验主机:192.168.200.141 192.168.200.142 1.虚拟主机 1.1基于域名:一台服务器,一个端口,部署多个网站 在ng…

yolov5 的几个问题,讲的比较清楚

yolov5, 几个问题 【BCELoss】pytorch中的BCELoss理解 三个损失函数原理讲解 https://zhuanlan.zhihu.com/p/458597638 yolov5源码解析–输出 YOLOv5系列(十) 解析损失部分loss(详尽) 1、输入数据是 xywh, 针对原图的, 然后,变成 0-1, x/原图w, y/原图h, w/原图w, h/原图h,…

51-43 DragNUWA,集成文本、图像和轨迹实现视频生成细粒度控制

微软 NWA 系列主要功能及发布时间如下: 22年11月,微软亚洲研究院、北京大学联合提出同时覆盖语言、图像和视频的统一多模态生成模型女娲NWA,直接包揽草图转图像、图像补全、视频预测、文字指导修改视频等8项SOTA。23年3月,微软亚…

LLM学习之自然语言处理简单叙述

自然语言处理基础 自然语言处理:让计算机读懂人所写好的这些文本,能够像人一样进行交互。 自然语言处理的任务和应用 任务: 词性标注 part of speech tagging 动词,名词,形容词? 命名实体的识别 name…

【Java基础】23.接口

文章目录 一、接口的概念1.接口介绍2.接口与类相似点3.接口与类的区别4.接口特性5.抽象类和接口的区别 二、接口的声明三、接口的实现四、接口的继承五、接口的多继承六、标记接口 一、接口的概念 1.接口介绍 接口(英文:Interface)&#xf…

Springboot+Vue项目-基于Java+MySQL的海滨体育馆管理系统(附源码+演示视频+LW)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:Java毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计 &…

Mongodb支持事务吗?

一、概念 1.1、MongoDB事务简介 MongoDB 是一个非关系型数据库管理系统,最初并不支持事务。然而,随着时间的推移,MongoDB 在其4.0版本中引入了多文档事务支持,使得在单个集合中执行多个操作成为可能。 In MongoDB, an operation…

iStat Menus for Mac:强大的系统监控工具

iStat Menus for Mac是一款功能强大的系统监控工具,专为Mac用户设计,旨在帮助用户全面了解电脑的运行状态,提高电脑的性能和稳定性。 iStat Menus for Mac v6.73 (1239)中文版下载 该软件可以实时监测CPU使用率、内存占用、网络速度、硬盘活动…

“磁性蝴蝶”:创新结构纳米石墨烯能更精确控制自旋磁行为

内容来源:量子前哨(ID:Qforepost) 文丨浪味仙 深度好文:1300字丨7分钟阅读 摘要:新加坡国立大学的研究团队,开发出一种蝴蝶形磁性纳米石墨烯,包含四个具有铁磁和反铁磁相互作用的不…

微信小程序:基于MySQL+Nodejs的汽车品牌管理系统

各位好,接上期,今天分享一个通过本地MySQLNodejs服务器实现CRUD功能的微信小程序,一起来看看吧~ 干货!微信小程序通过NodeJs连接MySQL数据库https://jslhyh32.blog.csdn.net/article/details/137890154?spm1001.2014.3001.5502 …

深入docker-swarm overlay网络模型

目录 1.简介 2.网络模型 3.docker_gwbridge网络 3.1.docker_gwbridge网关地址 3.2.检查docker_gwbridge网络 3.2.1.查找任务容器eth接口 3.2.2.查找ingress-sbox容器eth接口 4.检查ingress网络 4.1.检查ingress网络 4.2.检查ingress网络的命名空间 4.2.1.查找任务容…

Windows搭建Svn服务器

1、svn概述 1.1、svn简介 SVN(Subversion)是一个开源的版本控制系统,用于管理代码的版本控制和协作开发。它提供了一系列的命令行工具,以及一套客户端和服务器架构,用于管理代码的版本控制和协作。 在Windows系统&a…

STM32的GPIO控制寄存器开发

寄存器GPIO控制 寄存器地址 寄存器地址计算 某个寄存器地址,由三个参数决定:1、总线基地址(BUS_BASE_ADDR);2,外设基于总线基地址的偏移量(PERIPH_OFFSET);3&#xff…