问题标签 [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.

0 投票
1 回答
136 浏览

nic - 对于 XDP-eBPF 上的 ipv6-Srv6 数据包,rx_queue_index 始终返回值 1

我正在尝试Ipv6-Srv6使用简单的 XDP-eBPF 程序跟踪数据包。我像往常一样得到 NIC 队列 1。

以下是环境细节

  1. 操作系统:来宾操作系统、Ubuntu 19.10、5.3.0-64-generic
  2. 网卡:x710:10Gbps,驱动程序=i40e,驱动程序版本=2.8.20-k,固件=7.20
  3. XDP-eBPF:我的自定义示例程序
  • 数据包生成器:使用 packEth cli 实用程序运行的主机 NIC X710packETHcli -i ens261f2 -m 2- d 0 -n 0 -f /tmp/test.pcap
  • 预期结果:入口数据包将分布在多个 RX 队列上。
  • 观察结果:RX 队列 1 只获取数据包。

在此处输入图像描述

ethtool -S [interface name]我用和验证了结果bpftool map dump id 12。两种情况 RX-Queue-1 都只会更新。

在此处输入图像描述

[EDIT-1] 根据评论的建议更新 RSS 哈希状态

0 投票
1 回答
459 浏览

ebpf - XDP 和 sk_buff

我开始使用 ebpf 和 XDP 进行编码。我正在使用 python bcc 将 XDP 程序加载到 NIC。我正在尝试使用 __sk_buff 结构,但是当我尝试访问 skb 的任何字段时,验证程序无法加载程序。

我只想使用bpf_l4_csum_replace以 skb 作为第一个参数的程序计算第 4 层校验和。

为什么会这样?我什至可以在 XDP 中使用 __sk_buff 结构吗?或者我必须使用 xdp_md 结构?

更新:感谢 Qeole,我了解到我不能使用 XDP 使用 sk_buff。有没有一种方法可以使用 xdp_md 计算 TCP 校验和?

0 投票
1 回答
138 浏览

xdp-bpf - XDP - 每个目标 IP/PORT 都有 AF_XDP 套接字?

我们犯了一个愚蠢的错误,编写了几个 bpf 程序(每组编写一个),后来发现我们不能同时附加多个。现在我们要重新设计并让每个组都有自己的 AF_XDP 套接字,并且 eBPF 程序将根据目标 ip&port 将数据发送到正确的组(我们只讨论 UDP RX)。

所以我的问题是你会怎么做?我们认为使用 BPF_MAP_TYPE_HASH 将 (ip,port) 保留为键,该值将是 BPF_MAP_TYPE_XSKMAP 映射的键。还有其他更好的方法吗?您会坚持使用一个 AF_XDP 套接字并让用户空间区分端口还是让每个用户定义自己的套接字并具有自己的 umem 限制?

感谢并为这个奇怪的问题感到抱歉。整个 XDP 和 AF_XDP 有点……压倒性的……所以要确保我们没有犯另一个可能更难找到的愚蠢错误。

0 投票
0 回答
120 浏览

networking - 使用 tc-ebpf 卸载 Vlan

我是网络世界的新手,我有一个问题。我有一个加载到 enp5s0 的 tc-ebpf(出口)程序,该程序正在处理 vlan-tag(Q-tags)。我创建了一个名为 enp5s0.1234 的 vlan 接口,id 为 1234。但程序似乎没有读取 vlan-tag。我认为这是由于卸载问题。然而,用 ethtool 转旗似乎并没有解决问题。

我使用 iproute2 加载程序,如下所示:

我在使用该接口发送数据包时验证了正在接收数据包并添加了 Q-tag。

谢谢大家的帮助。

0 投票
0 回答
77 浏览

python - 试图在 nic 上加载 xdp(已卸载)

我正在尝试将我的 XDP 程序直接加载到 NIC(卸载 XDP)上。根据这个答案,我需要将设备指定为以下功能:

  • BPF()
  • load_func()

我是这样做的:

添加设备时出现以下错误:

types.ArgumentError:参数 6:<class 'TypeError'>:类型错误

你能帮我解决这个问题并将我的 XDP 程序卸载到 NIC 上吗?谢谢

0 投票
1 回答
282 浏览

linux-kernel - 与 XDP_DROP/REDIRECT 相比,XDP_TX 的吞吐量较低

我开发了一个 XDP 程序,它根据某些特定规则过滤数据包,然后将它们丢弃(XDP_DROP)或将它们重定向(xdp_redirect_map)到另一个接口。该程序仅在四个 CPU 内核上就能够很好地处理 ~11Mpps 的合成负载(这就是我的流量生成器的全部能力)。

现在我已经更改了该程序以用于XDP_TX在接收数据包的接口上发送数据包,而不是将它们重定向到另一个接口。不幸的是,这个简单的更改导致吞吐量大幅下降,现在几乎无法处理 ~4Mpps。

我不明白,这可能是什么原因或如何进一步调试,这就是我在这里问的原因。

我重现问题的最小测试设置:

  • 两台具有直接相互连接的 Intel x520 SFP+ NIC 的机器,两个 NIC 都配置为具有与机器具有 CPU 内核一样多的“组合”队列。
  • 机器 1使用来自 linux 源的示例应用程序运行 pktgen:./pktgen_sample05_flow_per_thread.sh -i ens3 -s 64 -d 1.2.3.4 -t 4 -c 0 -v -m MACHINE2_MAC(4 个线程,因为这是导致生成的最高 Mpps 的配置,即使机器有超过 4 个内核)
  • 机器 2运行一个简单的程序来丢弃(或反射)所有数据包并计算 pps。在该程序中,我已将XDP_DROP返回码替换为XDP_TX. -我是否在反映数据包之前交换 src/dest mac 地址并不会导致吞吐量差异,所以我把它留在这里。

使用 运行程序时,机器 2XDP_DROP上的 4 个内核稍微加载了线程,同时下降了约 11Mps。考虑到由于 NIC 中的散列是如何工作的,pktgen 发出 4 个不同的数据包,这些数据包仅填充 4 个 rx 队列,因此仅加载 4 个内核是有道理的。ksoftirqd

但是当使用 运行程序时XDP_TX,其中一个内核处于 ~100% 的忙碌状态,ksoftirqd并且只处理 ~4Mpps。在这里我不确定,为什么会这样。

您有什么想法,可能导致吞吐量下降和 CPU 使用率增加的原因是什么?

编辑:这里有一些关于机器 2 配置的更多细节:

编辑 2:我现在也尝试将 MoonGen 作为数据包生成器,并用 10Mpps 和 100 个不同的数据包变体(流)淹没机器 2。现在,当以最小的 CPU 负载丢弃所有这些数据包时,流量在内核之间的分布更好。但是XDP_TX在处理 ~3Mpps 时仍然无法跟上并将单个内核加载到 100%。

0 投票
0 回答
195 浏览

nic - 关于 XDP_redirect 方法的问题

我在xdp-tutorial上阅读了有关 XDP 重定向的信息,并注意到它说我们必须在另一个接收 NIC 上有一个虚拟 XDP 程序。

  • XDP 重定向如何详细工作?
  • 为什么 xdp_redirect 需要一个虚拟程序?我设法在没有它的情况下使用它。此外,虚拟 XDP 是否已被执行?重定向方法应该将数据包移动到另一个 nic(具有虚拟程序)的 TX,并且 XDP 仅从 RX 获取数据包。所以被重定向的数据包甚至没有到达虚拟程序。
  • 是什么导致它传输数据较慢?我怎样才能让它更快?

谢谢!

0 投票
0 回答
89 浏览

xdp-bpf - XDP:缺少 TCP 数据?

我正在尝试观察 HTTP 有效负载,但似乎除了 TCP 标头之外什么都没有。

代码片段:

似乎无论出于何种原因都没有任何数据,这是不正确的;从接口中分离代码并发送HTTP请求就可以了(包含http数据)

任何提示都非常感谢。

谢谢!

0 投票
1 回答
169 浏览

xdp-bpf - 无法使用 XDP 丢弃传出流量

我只是在学习XDP。在旅途中,我遇到了一个我无法理解的案例。当我注意到没有任何变化时,我正在对某些 UDP 数据包尝试一些花哨的东西。所以我试图用一个最小的例子来重现这个问题。这是最小的示例:

(不要介意“混淆器”名称,它是其余代码的剩余部分)。

我编译并加载这个:

我确认传入我的计算机的流量已完全丢弃。但是,数据包仍然可以出去。我 ping 了一个运行 tcpdump 的远程服务器,它看到了 ICMP 请求。但是我在本地计算机上没有得到任何响应。

为什么它不能对传出的数据包做任何事情?

0 投票
0 回答
158 浏览

networking - 使用 XDP 在点击之间重定向

我正在尝试使用 xdp 在 VM 分接头之间重定向网络流量。我注意到,当我加载 xdp 程序时,网络比我在 vmbr 上加载相同的代码(4.5 Gbits/sec)慢得多(130 Mbits/sec)。我无法理解是什么导致这种速度性能下降。这是网络架构的样子: 在此处输入图像描述 注意:重定向本身可以工作,只是无法理解为什么速度要慢得多。