典型应用包括两个:一是实现用户态驱动,由于 IOMMU 的映射功能,使 HPA 对用户空间不可见,在 vfio 部分还会举例。二是将设备透传给虚机,使 HPA 对虚机不可见,并将 GPA 映射为HPA IOMMU 可以将连续的虚拟地址映射到不连续的多个物理内存片段,这部分功能于 MMU 类似,对于没有IOMMU 的情况,设备访问的物理空间必须是...
vfio_group可以认为是和group概念对应的iommu数据结构,它指向一个iommu_group对象,记录了着iommu_group的信息。 vfio_domain这个概念尤其需要注意,这里绝不能把它理解成一个虚拟机domain,它是一个与DRHD(即IOMMU硬件)相关的概念, 它的出现就是为了应对多IOMMU硬件的场景,我们知道在大规格服务器上可能会有多个IOMMU硬件...
IOMMU的映射关系是由VMM维护的,HPA对虚机不可见,保障了安全问题,利用IOMMU可实现设备的透传。这里先留一个问题,既然IOMMU可以将设备访问地址映射成真实的物理地址,那么对于右图中的Device A和Device B,IOMMU必须保证两个设备映射后的物理空间不能存在交集,否则两个虚机可以相互干扰,这和IOMMU的映射原理有关。 2.1IOMMU...
PowerPC平台不支持将多个IOMMU group作为更大的IOMMU操作单元,故而container只是IOMMU group的简单包装而已。对container进行的IOMMU操作最终会被路由至底层的IOMMU实现层,这实际上将用户态与内核里的IOMMU驱动接连了起来。 二、OMMU IOMMU主要功能包括DMA Remapping和Interrupt Remapping,这里主要讲解DMA Remapping,Interrupt ...
vfio_iommu_type1_attach_group Kubernetes(K8S)是一种用于管理容器化应用程序的开源平台。在K8S中,vfio_iommu_type1_attach_group 是一种非常重要的特性,它允许用户将 VFIO 设备(例如GPU设备)直接分配给容器,以获得更好的性能和隔离性。 首先,让我们来了解一下 vfio_iommu_type1_attach_group 的工作原理和实现...
3、有一些场景,多个PCI设备之间是有相互联系的,他们互相组成一个功能实体,彼此之间是可以相互访问的,因此IOMMU针对这些设备是行不通的,随之出现VFIO技术,VFIO兼顾了UIO和IOMMU的优点,在VFIO里,直通的最小单元不再是某个单独的设备了,而是分布在同一个group的所有设备;VFIO可以安全地把设备IO、中断、DMA等暴露到用户...
IOVA到物理内存在IOMMU中的映射关系 基于这几点来看VFIO的DMA重映射就比较清晰,首先从VFIO设备的初始化开始,在获取设备信息之前会先获取到设备所属的group和Container,并调用VFIO_SET_IOMMU完成container和IOMMU的绑定,并attach由VFIO管理的所有设备。此外注意到这里的 pci_device_iommu_address_space 函数,意思是qemu为设...
IOMMU(七)-vfio and mdev 先看看vifo和mdev内核有哪些模块,再分析模块之间的关系。 vfio是用户态和内核态之间的一种接口,类似于vhost和vhost-user,具体用法就是vfio.ko通过/dev/vfio在内核给用户态提供api,qemu或者dpdk用api和内核模块交互。 vfio-pci是内核驱动,网卡和NVME盘等设备就可以使用这个驱动,使用vfio-...
VFIO_IOMMU_MAP_DMA:指定设备端看到的IO地址到进程的虚拟地址之间的映射 第二个层面,group的操作是通过打开/dev/vifo/<group_id>文件, 对其执行ioctl操作,主要的操作有: VFIO_GROUP_GET_STATUS:获取group 的状态信息 VFIO_GROUP_SET_CONTAINER:设置group和container 之间的绑定关系 ...
IOMMU历史知识及与VFIO的联系 在虚拟化普及之前,IOMMU主要提供2种功能,避免bounce buffers的功能,创建连续DMA操作功能。 Bounce Buffers 如果外设的寻址空间小于平台(如PC)的寻址空间,例如外设只支持寻址4GB空间,但是PC支持寻址8GB,如果PC中的驱动程序分配了4GB以上的空间给设备,那么设备将无法对该空间执行DMA操作。