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功能;