vfio_iommu是VFIO对iommu层的统一封装主要用来实现DMA Remapping的功能,即管理IOMMU页表的能力。 vfio_pci是VFIO对pci设备驱动的统一封装,它和用户态进程一起配合完成设备访问直接访问,具体包括PCI配置空间模拟、PCI Bar空间重定向,Interrupt Remapping等。 最下面的一层则是硬件驱动调用层: iommu driver是与硬件平台相关...
vfio-pci和mdev-vfio的probe都调用vfio_add_group_dev添加自己的ops,同时生成一个dev,qemu通过/dev/vfio获取这个dev,再操作这个dev时就调用到vfio-pci和vfio-mdev的ops函数,vfio-pci干活,vfio-mdev基本上什么也不干,一转手就调用父设备的ops干活,相当于调用到GPU或者NVME的驱动。sr-iov是pci标准的设备虚拟化方案...
vfio group不是凭空造出的一个概念,vfio group和IOMMU硬件的group紧密相关,所以vfio还有一个重要的函数就是vfio_register_iommu_driver,vfio_iommu_type1.ko就调用这个函数给vfio注册了操作IOMMU的ops,一个设备DMA用到的pagetable就可以通过这个ops配置到IOMMU中。 qemu调用memory_region_init_io注册vfio-pci设备的conf...
bitmap(iommu);4546ret = vfio_iommu_iova_build_caps(iommu, &caps);47if(ret)48returnret;4950if(caps.size) {51info.flags |=VFIO_IOMMU_INFO_CAPS;5253if(info.argsz <sizeof(info) +caps.size) {54info.argsz =sizeof(info) +caps.size;55}else{56vfio_info_cap_shift(&caps,sizeof(info))...
很明显,这个概念空间包括container和group两个概念,vfio_container是访问的上下文,vfio_group是vfio对iommu_group的表述。 如果我们再看仔细一点,我们应该要注意到,这里还有一个针对iommu_group的driver,这个driver决定如何使用IOMMU(前面过程中的VFIO_SET_IOMMU的概念),现在只有两个driver:vfio-iommu-type1和iommu-vfio-...
在Linux系统中,当使用VFIO(Virtual Function I/O)框架进行设备的虚拟化操作时,有时可能会遇到”unix_physmem_region_iommu_register: ioctl (VFIO_IOMMU_MAP_DMA): Invalid argument”这个错误。该错误通常表示传递给VFIO_IOMMU_MAP_DMA的参数无效。 要解决这个问题,您可以尝试以下几点: ...
allow_unsafe_interrupts是vfio_iommu_type1模块的一个配置参数。在默认情况下,VFIO框架会确保中断处理的安全性,即中断只会被授权的设备或程序处理。然而,在某些情况下,用户可能希望放宽这一限制,允许处理可能被视为“不安全”的中断。allow_unsafe_interrupts=1就是用来启用这一特性的。 3. 说明为何可能需要设置allow...
Kubernetes(K8S)是一种用于管理容器化应用程序的开源平台。在K8S中,vfio_iommu_type1_attach_group 是一种非常重要的特性,它允许用户将 VFIO 设备(例如GPU设备)直接分配给容器,以获得更好的性能和隔离性。 首先,让我们来了解一下 vfio_iommu_type1_attach_group 的工作原理和实现流程。下面是一个简单的步骤表格:...
我们先抛开VFIO,先建立iommu的概念空间: 在Linux的概念空间中,硬件的设备,用device来代表。设备用总线类型bus_type来区分。比如众所皆知的pci_device,或者没爹没娘的platform_device。smmu控制器,本身是一种device,对于ARM来说,它现在是一种平台设备。不同总线有什么设备,可以从/sys/bus/<bus>/devices/目录中全部...
vfio: Type1 IOMMU implementation Browse files This VFIO IOMMU backend is designed primarily for AMD-Vi and Intel VT-d hardware, but is potentially usable by anything supporting similar mapping functionality. We arbitrarily call this a Type1 backend for lack of a better name. This backend has ...