VFIO会用到vfio-pci和vfio_iommu_type1_driver两个驱动.其中vfio-pci用于访问PCI设备。 一般使用VFIO时,主要是读取PCIe设备的配置空间和DMA信息。 Group Group是IOMMU进行DMA隔离的最小单元。如果两个设备会找到同一个context entry和同一份页表,就属于同一个group,比如在PCIe-PCI桥下就属于同一个group。VFIO的group...
传统的透传设备方式是QEMU/KVM实现的PCI passthrough,KVM需要和IOMMU、注册中断打交道,KVM完成了设备驱动的部分工作。VFIO是一种用户态驱动框架,利用硬件的IO虚拟化将设备直通给性能更好的虚拟机。 一、VFIO基本思想和原理 设备直通就是将物理设备直接挂到虚拟机,传统方式为PCI passthrough,KVM需要处理许多工作,包括IOMM...
而在guest中,当我们将设备分配给DPDK应用程序时,我们可以使用上述三种方法之一。 但是,只有当我们使用通用 VFIO 驱动程序(需要 vIOMMU)分配设备时,我们才能获得安全分配的设备。 通过“UIO”或“VFIO no-iommu 模式”分配设备都是不安全的。 在我们的例子中,PCI 设备 1 是安全的,而 PCI 设备 2 是不安全的 ...
调用pci_vfio_map_resource,这个函数一开始先通过rte_vfio_setup_device为设备分配vfio_container_id、vfio_group_id,同时设置iommu_type,然后调用dma_map_func将rte_eal_get_configuration()->mem_config的内存信息进行dma映射,这里的mem_config表示dpdk管理的内存信息(从这里看,dpdk应该是一开始会将所有内存都进行dm...
DPDK中使用VFIO的配置 VFIO VFIO是一个可以安全地把设备I/O、中断、DMA等暴露到用户空间(userspace),从而可以在用户空间完成设备驱动的框架。用户空间直接设备访问,虚拟机设备分配可以获得更高的IO性能。 依赖于IOMMU. vfio-pci. 相比于UIO,VFIO更为强健和安全...
IOMMU(七)-vfio and mdev 先看看vifo和mdev内核有哪些模块,再分析模块之间的关系。 vfio是用户态和内核态之间的一种接口,类似于vhost和vhost-user,具体用法就是vfio.ko通过/dev/vfio在内核给用户态提供api,qemu或者dpdk用api和内核模块交互。 vfio-pci是内核驱动,网卡和NVME盘等设备就可以使用这个驱动,使用vfio-...
通常PF的function是0,所以第一个VF发function index从1开始。后续的VF的function index范围是0-7。判断PCI地址属于哪个iommu的group PCI地址的表示方式是Domain:Bus:Device:Function。看属于哪个设备Device Device是iommu拓扑角度理解的独立设备。看字符设备属于哪个用户和组。设备绑定 设备路径是/sys/bus/...
大多数平台,部署 DPDK 不需要更改 BIOS 配置。但是,如果使能 UEFI 安全启动方式,则 Linux 内核会禁止 uio 模块加载,进而无法挂载 igb_uio.ko 模块。在这种情况下可以使用 vfio 模块代替 igb_uio/uio_pci_generic 模块。 1.2 DPDK 源码编译 必要的软件工具: ...
sudo bash -c 'echo 1 > /sys/module/vfio/parameters/enable_unsafe_noiommu_mode' 查看並記錄網卡裝置的bus-info值。 ethtool -i ethX 請將ethX替換為對應網卡的編號,查看eth1網卡的樣本如下圖所示。 切換到DPDK安裝目錄的usertools目錄下,然後執行以下命令綁定網卡到vfio-pci驅動。 sudo ./dpdk-devbind.py...
dpdk自己实现了一个uio驱动,名称叫igb_uio驱动。源码路径在lib\librte_eal\linuxapp\igb_uio\igb_uio.c。 定义一个struct pci_deiver的结构体。 static struct pci_driver igbuio_pci_driver = { .name = "igb_uio", .id_table = NULL, .probe = igbuio_pci_probe, ...