1、UIO的出现,允许将驱动程序用到用户态空间里实现,但UIO有它的不足之处,如不支持DMA、中断等;
2、随着虚拟化的出现,IOMMU也随之出现,IOMMU为每个直通的设备分配独立的页表,因此不同的直通设备,彼此之间相互隔离;
3、有一些场景,多个PCI设备之间是有相互联系的,他们互相组成一个功能实体,彼此之间是可以相互访问的,因此IOMMU针对这些设备是行不通的,随之出现VFIO技术,VFIO兼顾了UIO和IOMMU的优点,在VFIO里,直通的最小单元不再是某个单独的设备了,而是分布在同一个group的所有设备;
4、kvm的PCI、PCIE设备直通,默认都是通过VFIO实现的(通过virsh attach-device xxx会自动插vfio的相关ko,自动生成vfio的container);
5、PCIE与PCI直通的区别是:PCI只能直通给某个特定的虚拟机,而PCIE有可能可以给多个虚拟机用,如具有SR-IOV功能的PCIE设备,通过在HOST上抽象出多个的VF,每个VF再通过VFIO直通给虚拟机,最终的表现就是一个物理PCIE网卡可以直通给多个虚拟机用;
6、SR-IOV是针对PCIE设备的,PCI设备理论上不具有SR-IOV功能;