经过Mellanox ConnectX NIC使用XDP加速

经过Mellanox ConnectX NIC使用XDP加速linux

Accelerating with XDP over Mellanox ConnectX NICs编程

XDP(eXpress Data Path)是Linux内核网络堆栈中的可编程数据路径。为BPF提供了一个框架,能够在运行时实现高性能的包处理。XDP与Linux网络堆栈协同工做,不是内核旁路。        网络

因为XDP运行在内核网络驱动程序中,能够从网卡的RX环读取以太网帧并当即采起运行。XDP经过在驱动程序中实现的RX钩子插入eBPF基础架构。XDP是EBPF的一个应用程序,可使用返回码触发操做、修改包内容和推/拉头文件信息。             架构

XDP有各类各样的用例,好比包过滤、包转发、负载平衡、DDOS缓解等等。一个常见的用例是XDP_DROP,指示驱动程序丢弃数据包。这能够经过运行自定义BPF程序来解析在驱动程序中接收到的传入数据包来完成。这个程序返回一个决策判断或返回码(XDP_DROP),其中数据包在驱动程序级被丢弃,而不会浪费任何进一步的资源。Ethtool计数器可用于验证XDP程序的操做。app

Running XDP_DROP

XDP程序一进入网络驱动程序就运行,从而提升了网络性能。还提升了CPU利用率。Mellanox ConnectX NIC系列容许NIC硬件准备元数据。此元数据可用于对使用XDP的应用程序执行硬件加速。             框架

下面是一个如何使用Mellanox ConnectX-5运行XDP_DROP的示例。             性能

检查当前内核是否支持bpf和xdp:3d

sysctl net/core/bpf_jit_enablecode

若是找不到,请编译并运行启用了BPF的内核。可使用任何大于5.0的上游内核。             blog

启用如下kconfig标志:

  • BPF BPF_SYSCALL
  • BPF_JIT
  • HAVE_BPF_JIT
  • BPF_EVENTS

创新启动新的kernel.

Install clang and llvm:

yum install -y llvm clang libcap-devel

按照如下方法编译

cd <linux src code> make samples/bpf/ 

这将编译全部可用的XDP应用程序。编译完成后,将看到/sample/bpf下的全部XDP应用程序(图1)。

 

Figure 1. XDP applications under /sample/bpf.

在前面的安装中,如今能够运行XDP应用程序了。能够在两种模式下运行:             

驱动程序路径必须在驱动程序中具备实现。以页面分辨率工做,不建立SKB。性能明显提升。Mellanox NIC支持此模式。             

通用路径适用于任何网络设备。与SKBs合做,但性能更差。             

在驱动程序路径中运行XDP_DROP。XDP_DROP是在Linux中丢弃数据包最简单、最快的方法之一。在这里,指示驱动程序在驱动程序的最先Rx阶段丢弃数据包。这意味着数据包被回收回刚刚到达的RX环队列中。              

位于<linux\u source>/samples/bpf/implements XDP Drop的xdp1应用程序。             

选择选择的流量生成器。使用Cisco TRex。             

在RX端,使用如下命令在驱动程序路径中启动xdp1:

<PATH_TO_LINUX_SOURCE>/samples/bpf/xdp1 -N <INTERFACE>  # -N can be omitted

可使用应用程序输出,同时ethtool计数器显示XDP丢弃率:

ethtool -S <intf> | grep -iE rx[0-9]*_xdp_drop

 

Figure 2. Verify XDP drop counter using ethtool counters.

相关文章
相关标签/搜索