通过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环队列中。
位于<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.
通过Mellanox ConnectX NIC使用XDP加速的更多相关文章
- 京东云携手Mellanox,设计最先进SDN硬件加速功能并开源
京东云携手Mellanox,设计最先进SDN硬件加速功能并开源 最新技术播报 京东云开发者社区 导语新一代 SDN.NFV 和云原生计算技术正在推动应用实例的极限,这些实例可以在虚拟化和容器化的服务 ...
- NVIDIA空中导航SDK改造5G通信
NVIDIA空中导航SDK改造5G通信 Transforming Next-Generation Wireless with 5T for 5G and the NVIDIA Aerial SDK N ...
- 扩展Linux网络栈
扩展Linux网络栈 来自Linux内核文档.之前看过这篇文章,一直好奇,问什么一条网络流会固定在一个CPU上进行处理,本文档可以解决这个疑问.为了更好地理解本文章中的功能,将这篇文章穿插入内. 简介 ...
- Cilium 1.11 发布,带来内核级服务网格、拓扑感知路由....
原文链接:https://isovalent.com/blog/post/2021-12-release-111 作者:Cilium 母公司 Isovalent 团队 译者:范彬,狄卫华,米开朗基杨 ...
- [SPDK/NVMe存储技术分析]012 - 用户态ibv_post_send()源码分析
OFA定义了一组标准的Verbs,并提供了一个标准库libibvers.在用户态实现NVMe over RDMA的Host(i.e. Initiator)和Target, 少不了要跟OFA定义的Ver ...
- BPF+XDP比较全的资料都在这里
Dive into BPF: a list of reading material Sep 1, 2016 • Quentin Monnet◀Table of contents What is BPF ...
- Azure VM的加速网络
Azure的VM在经过几代发展后已经有多种硬件类型.目前Azure China的多种机型都配置了FPGA卡,可以实现网络加速.本文将介绍Azure的加速网络相关的内容. 一. 加速网络的硬件准备 下图 ...
- 可编程网络DataPath 及XDP
目录 可编程网络DataPath XDP 的基本架构 XDP 的软件要求 XDP 的硬件要求 XDP 的工作流程及使用 XDP 的工作模式 XDP 的工作流程 Hello World XDP 的应用 ...
- Multimodal —— 看图说话(Image Caption)任务的论文笔记(一)评价指标和NIC模型
看图说话(Image Caption)任务是结合CV和NLP两个领域的一种比较综合的任务,Image Caption模型的输入是一幅图像,输出是对该幅图像进行描述的一段文字.这项任务要求模型可以识别图 ...
随机推荐
- hdu4268贪心
题意: 两个人有一些图片,矩形的,问a最多能够覆盖b多少张图片.. 思路: 明显是贪心,但是有一点很疑惑,如果以别人为主,每次都用自己最小的切能覆盖敌人的方法就wa,而以自己为 ...
- 【转】如何用MTR诊断网络问题
MTR 是一个强大的网络诊断工具,管理员能够用它诊断和隔离网络错误,并向上游提供商提供有关网络状态的有用报告.MTR 通过更大的采样来跟踪路由,就像 traceroute + ping 命令的组合.本 ...
- 绕过网站WAF(图片绕过)
当我们在渗透一个网站的时候,很多时候,会遇到下面这种情况.网站装有WAF,把我们的SQL注入语句给拦截了. 这就是网站的安全狗 此时,我们的渗透会陷入僵局.到底应该如何才能让我们的语句绕过安全狗的检查 ...
- Windows Pe 第三章 PE头文件-EX-相关编程-1(PE头内容获取)
获取pE头相关的内容,就是类似如下内容 原理:比较简单,直接读取PE到内存,然后直接强转就行了. #include <windows.h> #include <stdio.h> ...
- Matlab学生账号创建激活使用
软件介绍 MATLAB主要用于数值分析.数值和符号计算.工程与科学绘图.控制系统的设计与仿真.数字图像处理.数字信号处理.通讯系统设计与仿真.财务与金融工程,是一款商业数学软件.MATLAB拥有丰富的 ...
- 3 Java概述
java三大版本 javase:标准版(桌面程序,控制台开发) javame:嵌入式开发(手机,家电)目前陨落 javaee:企业级开发(web端..) JDK和JRE 定义 JDK是开发工具包 Jr ...
- java之Map的使用
Map的实现类有很多,其中较为常见的有HashMap,HashTable,LinkedHashMap,TreeMap,下面分别对这几个类进行简单的分析: 1.HashMap HashMap的结构数组+ ...
- 【maven】mvn不是内部命令 也不是可运行的程序
按解压.配置环境变量,重启cmd,还是出现这个问题 使用java -version确定是不是安装了jdk.因为maven是java开发,需要依赖jdk 将系统变量中Path的%MAVEM_HOME%\ ...
- c++vs类图
安装visual studio扩展开发工具 一定要勾选右侧栏中的类设计器 安装完成后在菜单栏点击视图--类视图,会出现类视图框,在框中右键项目--查看类视图,就自动生成了.
- OO第三单元总结——JML规格
一.JML简介 1.JML语言的理论基础 JML(Java Modeling Language)是用于对Java程序进行规格化设计的一种表示语言.JML是一种行为接口规格语言 (Behavior In ...