BIOS中enable vt-d,内核参数配置intel_iommu=on 那这个IOMMU是什么呢,下面来一探究竟 IOMMU的引入 早期,设备访问内存(DMA)就只接受物理地址,所以CPU要把一个地址告诉设备,就只能告诉物理地址。 假如设备的地址长度还比CPU的总线长度短(例如CPU是64位但设备是32位的),就只能分配低地址来给设备用。 如果
BIOS会将平台上的IOMMU信息通过ACPI协议报告给操作系统,再由操作系统来初始化和管理这些硬件设备。 不同芯片厂商的实现大同小异,Intel的芯片上叫VT-d (Virtualization Technology for Directed I/O ),AMD就叫做IOMMU,ARM中叫SMMU。 IOMMU对虚拟化的支持 IOMMU还有一个重要的功能就是加入了对虚拟化的支持,就是文章一...
pci_iommu_initintel_iommu_init[1]dmar_table_init//为DMAR表中的各种类型的表设置回调,并遍历触发回调[2]dmar_dev_scope_init//初始化damr unit的scope (spec 8.3.1.4 Device Scope Example)dmar_register_bus_notifier//为pci bus注册dmar的通知回调dmar_pci_bus_notifierintel_iommu_debugfs_init//生成iommu...
IOMMU是Input/Output Memory Management Unit的缩写,它是Intel VT-d技术中的一项重要功能。AMD主板通常也支持IOMMU,但是是否应该开启IOMMU取决于你的使用情况和系统配置。什么是IOMMU IOMMU是一项安全技术,它可以防止 DMA(Direct Memory Access)攻击。DMA攻击是一种利用DMA总线来绕过系统的内存访问控制,从而执行任意代...
没有中断投递硬件支持,平台中的所有中断源都映射到相同的物理中断向量空间(Intel®64处理器上,每个逻辑CPU 8位向量空间)。 对于虚拟化用途,当虚拟进程与逻辑处理器之间没有静态亲和时,在动态环境中跨虚拟处理器划分物理向量空间是一项挑战。 对支持中断投递的硬件,通过允许来自分配给虚拟机的设备中断请求在虚拟矢量空...
intel 的iommu 是iommu框架的一个实现案例。 由于intel 的iommu 实现得比arm smmv3复杂得多,里面概念也多,所以针对intel 实现的iommu 案例的初始化部分进行一些讲解,本文针对4.19内核。 Intel IOMMU的初始化函数在哪调用的呢? 它的初始化函数是: int__initintel_iommu_init(void){intret = -ENODEV;structdmar_...
GPA:Guest Physical Address,在虚拟机上的物理地址。启用虚拟化时,设备看到的是GPA。Intel IOMMU负责将GPA映射为HPA。 Domain:一个虚拟机所拥有的所有资源(在本文中主要是涉及内存和CPU),称为这个虚拟机的Domain。 重映射(Remapping):启用虚拟化时,设备发出的DMA和中断请求,不会直接被物理机器接收,而是会被Intel IO...
intel vt-d spec是IOMMU的标准,标准中一个domain就是一个隔离的空间,一个虚拟机就是一个domain,一个DPDK进行就是一个domain,一个PCI设备分配给这个domain后只能操作这个domain的物理内存。 io pagetable IOMMU的pagetable和MMU的pagetable一模一样,转换方式也一样,都支持4KB/2M/1G大小的page,都支持4级和5级页表...
在没有IOMMU的情况下,设备的DMA操作可以访问整个物理地址空间,所以理论上设备可以向操作系统的代码段、数据段等内存区域做DMA,从而破坏整个系统。当然,通常来说不会有这样的设备。IOMMU的出现,可以实现地址空间上的隔离,使设备只能访问规定的内存区域。下面简要说一下intel的IOMMU怎么做到这点的: ...
为了防止这种情况发生,Intel的iommu技术(vt-d)里实现了中断重映射技术(intremap)。设备发起的msi中断先进入iommu的intremap模块进行映射得到真正的msi中断信息。主机os会在这个中断重映射表里限定,某个设备只能发起哪种中断向量,同时会验证msi中的信息位(如此提升了恶意软件触发真实msi的难度)。