IOMMU简介

转载 2012年07月13日 17:38:14
IOMMU简介


随着虚拟化技术逐渐升温,Intel和AMD近来支持了IOMMU技术。而Solaris对IOMMU技术在SPARC平台上的支持则可能要追溯到它们诞生的时候了。Solaris去年已经支持了x86平台上的IOMMU。

早期Solaris在SPARC平台上对IOMMU的支持主要有两个原因,一个是对老设备的支持,另外一个是对scatter/gather的支持。要在64位系统上支持32位设备,比如说网卡,如果没有IOMMU,就需要在物理内存底端,也就是32位设备能够访问到的地方设置一个叫做"bounce buffers"的东西,如果设备要访问高端内存,操作系统就要在高端内存和"bounce buffers"之间做一个拷贝。带来的性能影响显而易见。如果有了IOMMU,这个问题就迎刃而解了。在设备驱动做DMA邦定的时候,系统返回给驱动的不再是物理地址,而是内核空间的某个地址(有的书上叫做总线地址),传输的时候,这个内核空间地址会经由IOMMU单元,IOMMU将这个地址转换为物理地址。scatter/gather并不会带来性能上的好处,但是会简化设备驱动程序。例如网卡驱动在发送包的时候,DMA邦定后,系统可能会返回给设备驱动多个不连续的物理地址,Solaris叫做cookie。这样的话,每一个cookie都需要占用一个发送描述符。如果系统支持IOMMU的话,系统只会返回给设备驱动一个cookie。当然了有专家提醒,因为这个原因,如果设备驱动是在没有IOMMU的情况下开发的,在支持IOMMU的系统上是没有问题的。但反之不然。

x86平台上的IOMMU除了上述功能外还加入了对虚拟化的支持。简单来说有两个功能,一个DMA Remapping, 两外一个是Interrupt Remapping。DMA Remapping采用了多级页表机制,和MMU差不多。不过在转换前,IOMMU可以通过发出转换请求的PCI设备的Bus/Device/Function号来判断该设备是不是属于某一个domain。我们知道,有MMU,必定有TLB。所以有IOMMU,也肯定会有IOTLB。由于IOTLB的特殊性(TLB只服务于CPU,并且同时只有一个线程访问。而IOTLB则会有多个I/O设备同时访问),PCI Express最近有一个草案,叫做ATS(Address Translation Services)。主要思想就是为了加快转换,避免集中式的IOTLB带来性能上的影响,在每个PCI Express设备中加入转换用的cache。具体细节可以参考PCI-SIG上的文档。对于后者,根据Solaris PSARC文档知道Solaris当前并没有实现。对于MSI/MSI-X来说,中断是由对特定地址的内存写来完成的。其中的address/data已将中断所需的信息告诉给了Root Complex,例如中断向量号,中断类型等等。Interrupt Remapping修改了data中的信息,现在data中只保存一个类似索引一样的东西,用来在Interrupt Remapping Table中寻址的。找到了对应IRTE(Interrupt Remapping Table Entry),也就找到了中断所需的信息。当然了有硬件table,就有cache。

IOMMU简述-上篇

IOMMU的全称是Input/Output Memory Management Unit,即输入/输出内存管理单元,其主要功能链接DMA-capable I/O总线和系统内存。传统的内存管理单元M...
  • mathstar
  • mathstar
  • 2014年04月24日 20:50
  • 4748

IOMMU概念,优点,缺点

The IOMMU or input/output memory management unit is a computer memory management unit (MMU) that con...
  • hotsolaris
  • hotsolaris
  • 2007年08月08日 17:33
  • 3533

7.3 IOMMU流程分析

本节分析intel vt-d 在kvm中的实现流程
  • wanthelping
  • wanthelping
  • 2015年07月26日 17:03
  • 3720

什么是IOMMU

IOMMU:input/output memory management unit。Device的IOMMU类似于CPU的MMU。对IOMMU的支持主要有两个原因,一个是对老设备的支持,另外一个是对s...
  • xgbing
  • xgbing
  • 2015年07月08日 13:49
  • 5592

IO虚拟化和AMD的IOMMU

I/O Virtualization and AMD’s IOMMUAMD64s virtualization extensions provide hardware support for VMM ...
  • hotsolaris
  • hotsolaris
  • 2007年08月23日 13:23
  • 2486

在Linux和Xen中实现IOMMU

Utilizing IOMMUs for Virtualization in Linux and XenAbstractIOMMUs are hardware devices that transla...
  • hotsolaris
  • hotsolaris
  • 2007年08月22日 17:41
  • 2375

关于使用kvm-pci-assign IOMMU遇到的问题

按照书上写的配置了内核,BIOS里也启动了IOMMU,但是无论怎么弄都出现 ”qemu-system-x86_64 No IOMMU found.  Unable to assign device ”...
  • leoufung
  • leoufung
  • 2016年08月07日 20:33
  • 2233

DMABUF, DMA mapping,IOMMU的区别

DMABUF, DMA mapping,IOMMU的区别 1. DMABUF can be used as a wrapperto encapsulate other memory manageme...
  • lintwins
  • lintwins
  • 2015年12月07日 10:30
  • 2063

Intel IOMMU在Linux上的实现架构

1.检测平台是否支持DMAR设备./drivers/pci/dmar.c->int __init early_dmar_detect(void){        acpi_status status ...
  • hotsolaris
  • hotsolaris
  • 2007年08月24日 16:58
  • 3203

dev/iommu_group/iommu_domain 三者关系的简单理解

从device这个结构体中可以得到struct iommu_group *group; 例如: struct iommu_group *iommu_group_get(struct device ...
  • tiantao2012
  • tiantao2012
  • 2017年03月17日 17:20
  • 953
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:IOMMU简介
举报原因:
原因补充:

(最多只允许输入30个字)