• 通过Mellanox ConnectX NIC使用XDP加速


    通过Mellanox ConnectX NIC使用XDP加速

    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程序的操作。

    Running XDP_DROP

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

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

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

    sysctl net/core/bpf_jit_enable

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

    启用以下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环队列中。              

    位于<linuxu 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.

  • 相关阅读:
    对话框通过EndDialog返回值传值回父窗体
    Win32 ListCtrl控件点击列标题排序
    GRPC头测试记录
    在Docker上运行redisstack
    linux通过docker容器下载和安装Jenkin
    Vite + Vue3 项目搭建笔记
    gnvm:nodejs版本管理工具的使用
    Webpack 学习笔记
    开发辅助工具集
    关于CH395的TCP servicer断开连接不上的问题(原创)
  • 原文地址:https://www.cnblogs.com/wujianming-110117/p/13169168.html
Copyright © 2020-2023  润新知