通过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模型的输入是一幅图像,输出是对该幅图像进行描述的一段文字.这项任务要求模型可以识别图 ...
随机推荐
- 【ShardingSphere】ShardingSphere学习(一)
参考官方文档:http://shardingsphere.apache.org/ ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC.Sha ...
- 网络基础概念(IP、MAC、网关、子网掩码)
目录 IP地址 MAC地址 网关 子网掩码 反子网掩码 子网掩码 子网划分一: 子网划分二: 子网汇聚 广播域 冲突域 CSMA/CD IP地址 ip地址是用于标识网络中每台设备的标识.目前 IPV4 ...
- python 压缩模块大杂烩(zipfile,bz2,lzma,gzip,tarfile,zlib)
[*] 以下压缩模块请结合python的官方文档(https://docs.python.org/3.5/library/index.html)来实践或者对比(我的是python 3.5) 1.pyt ...
- Windows PE 第四章 导入表
第四章 导入表 导入表是PE数据组织中的一个很重要的组成部分,它是为实现代码重用而设置的.通过分析导入表数据,可以获得诸如OE文件的指令中调用了多少外来函数,以及这些外来函数都存在于哪些动态链接库里等 ...
- Windows Pe 第三章 PE头文件-EX-相关编程-1(PE头内容获取)
获取pE头相关的内容,就是类似如下内容 原理:比较简单,直接读取PE到内存,然后直接强转就行了. #include <windows.h> #include <stdio.h> ...
- GDOI2021 游记
蹭了个名额去参加 \(\text{GDOI}\) \(\text{tg}\),体验了一下大佬的生活/kk (以下试题皆为 \(\text A\) 卷 DAY -1 不知道要复习什么.本来没有机会来参加 ...
- windows同时安装jdk7和jdk8
windows同时安装jdk7和jdk8 我本地的情况是本地安装了jdk8,但是因为项目的需要,将tomcat9换成tomcat8,即jdk8换成jdk7(但是好像也可以不用换,因为 7 and la ...
- 【vue-08】vuex
vuex的作用 简单理解,就是将多个组件共享的变量统一放到一个地方去管理,比如用户登录时的数据token. 快速上手 安装:npm install vuex 首先,我们在src文件夹下创建一个文件夹: ...
- Mac SSH工具-Termius
全平台,功能强大 SSH连接.SFTP连接.端口转发.多设备同步 官方网站
- js实现倒计时函数
function updateEndTime() { //当前时间,距1970年1月1日的秒数 var date = new Date(); var time = (date.getTime())/1 ...