依赖IOMMU的保护,大内存页的映射。如果没有IOMMU,就需要uio,uio不安全并且需要root权限。 EAL 环境抽象层:dpdk加载和运行,支持多进程多线程,core亲和性程序,系统内存分配释放,原子和锁的操作,时间参考,pci总线访问,跟踪和debug方法,cpu特征鉴定,中断处理,报警操作,malloc内存管理。 核心组件 lib
当使用igb_uio bind指定设备后,内核会调用igb_uio注册的struct pci_driver的probe函数,即igbuio_pci_probe。在这个函数中,设置PCI的一些操作(如设置PCI BAR、DMA等),不是重点,那是驱动工程师的职责:) 对于PMD来说,重点是与UIO的交互。 1. 调用igbuio_setup_bars,设置uio_info的uio_mem和uio_port。 图2. ...
dpdk中的vfio和igb_uio区别 vpp和dpdk区别 vpp与dpdk的关系 dpdk作为vpp的一个插件,主要用来从网卡收发包。 vpp使用如下命令参数初始化dpdk eal。 EAL init args: -c a -n 1 --in-memory --huge-dir /mnt/hugepages --no-pci --proc-type primary --file-prefix vpp --master-lcore 1 1. dpdk初始...
IGB_UIO 借助 UIO 技术来截获中断,并重设中断回调行为,从而绕过内核协议栈后续的处理流程。并且 IGB_UIO 会在内核初始化的过程中将网卡硬件寄存器映射到用户态。IGB_UIO模块的作用主要分为以下两点: 注册一个 PCI 设备 让用户态的 PMD 网卡驱动程序得以与 UIO 进行交互 加载IGB_UIO 模块 过了一会,lsmod|grep io...
7:执行49,网卡的绑定,这里会显示系统上已有的网卡,输入vmxnet3(支持多队列)的网卡最前面的一段标识字段(PCI总线上的地址) ===》在绑定前需要确定对应的网卡down,确定绑定成功 ===》IGB UIO(IGB是实例,UIO是框架,方法),49的描述就是uio的一个实例绑定。则可以绑定多个 8:执行60,退出。 ==》可以基于dpdk已有...
为了阐明上述方法的区别,我使用了不同的方法将设备分配给 DPDK 应用程序:如上图, PCI 设备 1 和 PCI 设备 2 是分配给来宾 DPDK 的两个设备 应用程序。 在主机中,这两个设备都使用内核 VFIO 驱动程序分配给来宾(这里我们不能使用“VFIO no-iommu 模式”或“UIO”,但背后的原因超出了本页的范围:)。 而在...
除了vfio-pci,我们可选的还有两个,igb_uio和uio_pci_generic uio_pci_generic是内核原生的一种uio驱动,提供了uio功能,直接加载即可 sudo modprobe uio_pci_generic dpdk 20版本以后没有提供igb_uio,因此需要自己下载,编译 igb_uio下载链接 编译完成后,加载即可 ...
DPDK(version 20.02)函数rte_pci_map_device用来映射pci device resource到用户态:这个函数执行前,DPDK已经通过扫描sys文件系统,获取了pci设备绑定的driver,当设备绑定到vfio-pci或者igb_uio的时候,会使用不同的方式映射设备。以下分别介绍:当设备绑定到vfio-pci时,调用函数pci_vfio_map_resource 我们...
vfio-pci是内核驱动,网卡和NVME盘等设备就可以使用这个驱动,使用vfio-pci就会调用到vfio-pci的probe。vfio-pci用于标准的pci设备,如果多个虚拟机想用这个pci设备就开启这个pci设备的sr-iov功能,这个pci设备就变成多个标准的pci设备,每个虚拟机用一个。sr-iov是硬件资源的一种切分方法,不但DMA queue这样的数据面切分,...