PMD是Poll Mode Driver的缩写,即基于的轮询机制的驱动 在不考虑vfio的情况下,PMD的结构图如下 虽然PMD是在用户态实现设备驱动,但还是依赖于内核提供的策略。其中uio模块,是内核提供的用户态驱动框架,而igb_uio是DPDK kit中拥有与uio交互,bind指定网卡的内核模块; 当使用DPDK脚本dpdk-devbind来bind网卡时,会通过sysfs...
该驱动由用户态的 API 以及 PMD Driver 构成,内核态的 UIO Driver 屏蔽了网卡发出的中断信号,然后由用户态的 PMD Driver 采用主动轮询的方式。除了链路状态通知仍必须采用中断方式以外,均使用无中断方式直接操作网卡设备的接收和发送队列。 PMD Driver 从网卡上接收到数据包后,会直接通过 DMA 方式传输到预分配的内存...
此外,PMD 还同时支持物理和虚拟两种网络接口,支持 Intel、Cisco、Broadcom、Mellanox、Chelsio 等整个行业生态系统的网卡设备,以及支持基于 KVM、VMware、 Xen 等虚拟化网络接口。PMD 实现了 Intel 1GbE、10GbE 和 40GbE 网卡下基于轮询收发包。 UIO+PMD,前者旁路了内核,后者主动轮询避免了硬中断,DPDK 从而可以在用户...
当然,DPDK的PMD并不只限制于单存的轮询机制。为了缓解小吞吐量场景中轮询模式对CPU资源的浪费,PMD还实现了“暂停轮询并等待唤醒事件”的设计,即Interrupt DPDK(中断DPDK)模式。其原理和NAPI很相似,就是PMD在没数据包需要处理时自动进入睡眠,改为中断通知,接收到收包中断信号后,激活主动轮询。这就是所谓的链路...
DPDK核心优化:PMD模式 DPDK的UIO驱动屏蔽了硬件发出中断,然后在用户态采用主动轮询的方式,这种模式被称为PMD(Poll Mode Driver)。 UIO旁路了内核,主动轮询去掉硬中断,DPDK从而可以在用户态做收发包处理,带来Zero Copy、无系统调用的好处,同步处理减少上下文切换带来的Cache Miss。
其中中断信号仍然只能在内核态处理,不过uio通过创建/dev/uio来实现了一个"桥梁"来衔接用户态和内核态的中断处理,这时已经可以将用户态应用视为一种"中断下半部"; Application为最终的业务层,只需要调用PMD的对上接口即可; 【7.后话】 1.3-6章的讲解,基本解决了第二章的前两个Questions,最后一个Questions以及DPD...
staticstructrte_pci_driver rte_ixgbe_pmd ={ .id_table=pci_id_ixgbe_map, .drv_flags= RTE_PCI_DRV_NEED_MAPPING |RTE_PCI_DRV_INTR_LSC,.probe=eth_ixgbe_pci_probe,.remove=eth_ixgbe_pci_remove, }eth_ixgbe_pci_probe(structrte_pci_driver *pci_drv __rte_unused,structrte_pci_device *pci...
DPDK的UIO驱动屏蔽了硬件发出中断,然后在用户态采用主动轮询的方式,这种模式被称为PMD(Poll Mode Driver)。UIO旁路了内核,主动轮询去掉硬中断,DPDK从而可以在用户态做收发包处理。带来Zero Copy、无系统调用的好处,同步处理减少上下文切换带来的Cache Miss。网络空闲时CPU长期空转,会带来能耗问题。所以,DPDK推出...
下面就是PMD的应用层的驱动实现了。以最简单的e1000驱动为例,在其初始化函数eth_igb_dev_init中, 图15. 注册e1000的中断处理函数 从图11和图12的代码中,可以看出当uio设备有事件时,由eth_igb_interrupt_handler负责处理,实现了用户态的中断处理。 图16. eth_igb_interrupt_handler ...