本文主要转载自DPDK中的流量分叉(flow bifurcation)

flow bifurcation介绍

使用分岔驱动程序的PMDs与设备内核驱动程序共存。在这样的模型中,NIC由内核控制,而数据路径则由设备上的PMD直接执行。

流量分叉的优缺点

这种模式有以下好处:

  • 它是安全且健壮的.

因为内存管理和隔离是由内核完成的。

  • 它允许用户在相同的网络端口上运行DPDK应用程序时使用传统的linux工具,如ethtool或ifconfig。

  • 它允许DPDK应用程序只过滤部分流量,而其余的流量将由内核驱动程序定向和处理;流分岔由NIC硬件完成,例如,使用流隔离模式dpdk rte_flow isolated mode可以严格选择DPDK中接收到的内容。

优点总结:

  • 更好的性能

流量分叉是硬件特性,不需要CPU的参与。可以提供更好的性能。

  • 和 kni 对比

kni 的话,需要在DPDK中实现具体的代码来进行流量从DPDK应用到内核协议栈。流量分叉只需要通过软件给硬件配置对应的规则即可。

  • 实现流量分叉的方式
    • SR-IOV
    • Flow filter(rte_flow/ fdir)

SR-IOV 实现流量分叉的优缺点:

不同网卡的流量分叉实现

mellanox

Mellanox Cx系列网卡天然支持流量分叉,不需要配置SR-IOV PF/VF 进行流量分叉。Mellanox Cx系列流量分叉的好处有:

  • 更好的性能,DPDK应用直接处理数据面的流量。
  • 网卡依然可以被内核控制。
  • Linux kernel 的控制工具/命令依然可以使用。比如,ethtool

其他

其他系列的网卡,比如Intel,博通的网卡不是天然支持流量分叉。需要配置SR-IOV或者 FDIR(Flow Director)规则来实现流量分叉。

流量分叉的应用场景

减少网卡的数量

正常情况下,在一个机器上部署DPDK程序,需要2块网卡:

  • 管理口

登陆机器,管理机器。

  • 业务口

一个单卡双口的网卡作为DPDK程序转发流量的业务口。

如果使用基于SR-IOV的 flow bifurcation,只需要一块卡即可。利用网卡的SR-IOV,存在一个PF以及多个VF。 在网卡上配置管理IP,以及一些flow filter。 将DPDK的流量,交给VF对应的队列,进而给VF处理。 将其他流量交给PF处理,对设备进行管理。这样即使DPDK程序退出,不影响设备的管理。

DPDK程序中控制流量和业务流量分离

目前的DPDK程序,比如DPVS,控制流量(健康检查、bgp流量)也可能和业务流量混在一起(比如交给了相同的接收队列)。在业务流量很大的情况下,有可能导致控制流量丢包,进而导致BGP保活失败,VIP路由发送失败,流量偶发断连的情况。 如果可以将控制流量和业务流量分发到不同的队列中,可以做到互不影响。

案例

ATC’23 Deploying User-space TCP at Cloud Scale with LUNA


细节可参考论文中的”7.1 Traffic Split”一节:

LUNA routes the incoming TCP packets with certain destination ports to the specific virtual functions, which are then processed in user space. The TCP packets that do not align with the port filters and the not-TCP packets would still be accepted and processed by the kernel network stack.


参考资料:

  1. Getting the Best of Both Worlds with Queue Splitting (Bifurcated Driver)
  2. Flow Bifurcation on Intel® Ethernet Controller X710/XL710
  3. Flow Bifurcation How-to Guide
  4. DPDK中的流量分叉(flow bifurcation)
  5. Deploying User-space TCP at Cloud Scale with LUNA