使用bifurcated驱动或VFIO搭配DPDK是否会导致性能下降?
DPDK搭配bifurcated驱动、VFIO与RDMA协同场景的性能对比结论
首先明确:该场景下的性能和未使用bifurcated驱动、VFIO的DPDK性能不完全一致,差异大小和具体使用场景强相关,具体如下:
性能基本持平的场景
- 当你没有开启bifurcated驱动的内核队列共享,直接把网卡物理功能(PF)全量直通给DPDK进程时,二者的数据包转发性能差异在3%以内,属于正常硬件波动范围,几乎感知不到差别。
- RDMA的数据面本身完全旁路内核,搭配DPDK使用时不会引入额外开销,RDMA读写的延迟、吞吐量表现和原生RDMA场景完全一致。
存在明显性能差异的场景
- 如果你同时用到了bifurcated驱动的内核侧队列(比如宿主机需要同时走内核网络栈处理部分流量),网卡硬件的队列调度会产生额外开销,分给DPDK的队列带宽最多会下降15%左右,小包处理延迟会上升10~20μs。
- 开启IOMMU严格校验模式时,VFIO的地址映射开销在64B小包线速处理场景下会被放大,此时吞吐量会比无VFIO的DPDK低5%~10%;如果关闭严格校验开启lazy映射,差异会缩小到2%以内。
- 如果是把网卡虚拟功能(VF)而不是PF直通给DPDK,哪怕没有用到bifurcated的共享队列,VF本身的硬件调度开销也会让性能比原生PF直连的DPDK低5%左右。
常用优化方案
如果需要缩小性能差距,可以做如下配置:
- 不需要内核侧处理同网卡流量的场景,关闭bifurcated的队列共享配置,将PF全量直通给DPDK
- 小包密集处理场景可以通过内核参数
vfio_iommu_type1.allow_unsafe_interrupts=1关闭IOMMU严格校验,优化映射开销
内容的提问来源于stack exchange,提问作者kruztw
相关产品推荐
相关产品推荐

