问题标签 [xdp-bpf]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ebpf - 使用 XDP 的 BPF 程序返回未能加载 BPF 骨架 (-22)
首先,我没有直接使用libbpf API,也没有使用 BCC。相反,我试图使用bpftool生成的骨架的 API 。
控制代码:
BPF 代码:
因此,运行后,显示以下错误:
调试后,我注意到程序类型的值不正确。它总是返回 0。因此,我必须在加载调用之前定义以下代码:
因为在struct bpf_program
中libbpf.c
,我必须在我的标题中重新定义才能编译找到它。这种解决方法奏效了。
问:有没有更好的解决方案?
bpf - 使用 xdp/tc eBPF 的单播/多播数据包
我尝试使用 ebpf 设计负载均衡器。我想将传入的数据包传输到不同的目的地(连接在同一网络中的设备)。尽管我使用了 clone_bpf_redirect 辅助函数将数据包重定向到真实/虚拟接口并且它工作正常。现在我想将数据包广播/单播到连接在同一网络中的其他设备。据我所知,XDP 不支持它。因此,使用 tc bpf 挂钩。是否有任何辅助功能或我应该使用哪个操作?谁能指导我如何做到这一点?
eBpf 负载分配器:192.168.98.178(负载分配器) 接收器1:192.168.98.131 接收器2:192.168.98.138
在此之后,我将 1 个数据包发送到 3 个不同的 ifindex,但我想将相同的数据包发送到连接到网络的其他设备。任何人都可以帮助我如何将数据包重定向到设备之外,而不是接口?谢谢
bpf - Tc bpf 数据包通过更新校验和转发到其他设备
我想将 UDP/TCP 数据包转发到连接到同一路由器的其他设备。我只是通过检查数据包类型及其有效负载来编写将数据包转发到其他接口的代码。这工作正常,但是当我尝试将相同的数据包转发到其他设备时,我没有在其他设备上收到数据包。我使用辅助函数更新了校验和,但重定向到其他设备对我不起作用。TC_ACT_REDIRECT
类似于XDP_TX
? _
这是一段代码(如果值为c
1,则更新目标地址并将数据包转发到目标):
这是入口 tc 命令
使用上面的代码块,我可以将数据包重定向到虚拟接口,但不能重定向到更新的目的地。
c++ - XDP 和 eBPF 性能与 AMD EPYC CPU
我总是在配备 Intel Xeon Gold CPU 的服务器上运行 XDP 应用程序,性能一直很好而且不是问题 - 使用 100 GbE MCX515A-CCAT 网卡和 2 个 CPU 在 1U 服务器内最高可达 125Mpps。
今天我试图让它在 AMD EPYC 7371 上工作,但由于某种原因,性能结果非常低——我得到的最大值是 13Mpps,使用相同的网卡和 1 个 AMD EPYC 7371。所有内核都被推到最大值(100 %)。
在 ubuntu 18.04(以及之后的 20.04)上进行了测试。我已经安装了与英特尔 (OFED) 相同的 Mellanox 驱动程序,并像往常一样进行了其他配置。
我在驱动程序模式下运行 XDP,启用了 JIT。其他调优如下:
我还应该做些什么才能在 AMD CPU 上运行它?因为性能不能这么低,而且我想我在整个过程中都错误地配置了一些东西?
有关我们配置的更多信息:20.04 的内核 5.4 和 18.04 的 4.5,我们从我们的第二台机器 (TRex) 生成流量,该机器也有 MCX515A-CCAT 网卡并使用 Mellanox 100 GbE 电缆连接到第一台机器(AMD 一台)
bpf - 使用 eBPF tc hook 多播或广播数据包
我正在尝试使用ebpf
. 我想将传入的数据包重定向到不同的目的地。虽然我已经使用bpf_clone_redirect帮助函数将数据包重定向到真实/虚拟接口并且它工作正常。现在我想一次将数据包重定向到多个接口。这是我编写的用于重定向 1 数据包的代码。
我面临更新数据包MAC地址的问题。使用上面的代码,我可以更改目标地址和端口号,但无法更新第二个克隆中的 mac 地址。
linux - 设置用于对 XDP 负载均衡器进行基准测试的环境
我想对部署在虚拟机中的 XDP LB 进行基准测试。除了这些 LB,还有一个入口交换机(也是一个 VM),它有助于将流量分配到每个 LB。
ECMP是在入口交换机中使用的最推荐方式吗?如果不是,我的场景有没有更好(或合适)的方法?
我之前使用的是 ECMP,但它以某种方式无法正确转发流量(另一台机器上的 tcpdump 没有嗅探出任何数据包)。在对我的 ECMP 配置进行任何进一步检查之前,我想知道这是否可行。
任何建议表示赞赏!
ebpf - bpf_xdp_adjust_head 问题
使用 bpf 开发一个小程序来扩展数据包(即:添加 mpls encap)。设法扩展没有问题,但我写回标题 s_mac 和 d_mac 不正确。我假设因为新空间较小,所以我与原始 eth 标头重叠,因此我得到了错误的值。
这就是我认为问题发生的地方,当我 memcpy 进入 new_eth 时,我正在咬入 old_eth 空间。有没有办法通过将 old_eth 的值复制到另一个结构中然后使用该结构创建 new_eth 来解决这个问题?
一般来说,我对 BPF 和 C 很陌生,所以不确定这是否确实是问题所在。
谢谢。
bpf - 如何在接口之间共享 ebpf 映射
是否可以在两个网络接口之间共享 ebpf 映射。我想编写一个 XDP 程序并将其挂接到两个设备上,即 eth0 和 eth1。该实现要求它们都使用相同的地图。是否可以加载相同的程序,将它们挂接到 eth0 和 eth1 并使用相同的 Map。
谢谢你们!
xdp-bpf - 有没有办法让 RSS 对 SRv6 数据包起作用?
我正在使用github 我的项目,它使用 eBPF 基于 SRv6 路由过滤/查找/重定向/丢弃数据包。eBPF 代码在 mellanox Connect5X 上运行以实现 SRv6 功能。
我的期望是mellanox Connect5X 将查看 SRv6 Destination 外部 IPv6 地址标头并在 RX 队列上进行 RSS 数据包传播。这将允许我在多个内核上运行 XDP 进行处理。
我目前的结果是,当 SRv6 数据包是多流数据包(与单流相同的负载效率)时,只使用一个 cpu 内核。
问题是即使对于 SRv6 数据包,我如何才能对 CPU 进行负载平衡?
我期待的答案的一个例子是要知道如何为 IPv6 src、dst addr 等启用 RSS。
谢谢。
bpf - AF_XDP 能否将数据包重新注入内核?
我是 ebpf 的新手,最近正在学习 af_xdp。发现AF_XDP可以高效地捕获从内核空间到用户空间的数据包,但是没有找到相关信息描述AF_XDP可以将数据重新注入内核空间。有一个问题,AF_XDP能否将数据包重新注入内核空间,让其继续进入内核协议栈?这样可以代替netfilter中的nf_queue吗?