eBPF 的局限性 / 内核空间 [已关闭]

Limitations of eBPF / kernel space [closed]

提问人:Lem0n 提问时间:11/11/2023 更新时间:11/15/2023 访问量:40

问:


这个问题似乎不是关于特定的编程问题、软件算法或程序员主要使用的软件工具。如果您认为该问题在另一个 Stack Exchange 站点上是主题,您可以发表评论以解释该问题可能在哪里得到回答。

8天前关闭。

有一些非常快的 NIC (400 Gbps)。他们可能能够对数据包进行一些预处理/过滤,但最终这些数据包将到达 Linux 内核。平均数据包大小=10000bits,即0.04G数据包/秒;因此,如果 CPU 具有 3 GHz,则必须在每个数据包上使用 <75 个时钟周期(也许多核在这里提供了一些优势? 在这些条件下,eBPF 或内核过滤(例如防火墙)如何工作?

用户空间高 CPU 使用率是否会影响内核代码的“调度”方式,或者在最坏的情况下,用户空间代码不会运行,内核将把所有时间都花在数据包处理上(并且基本上会丢弃数据包,因为缓冲区已满,因为用户空间没有消耗它们)?

linux-kernel iptables ebpf xdp-bpf

评论

0赞 Dylan Reimerink 11/11/2023
Stackoverflow 不是解决这类广泛问题的地方,特别是如果它们更像是计算机通用的,而不是与软件相关的。像 Cilium/eBPF 堆栈这样的地方将是进行此类讨论的更好地方。
0赞 Lem0n 11/11/2023
在我的辩护中,这是一个关于 linux 内核调度的问题,而不是专门关于 eBPF 或数据包过滤(用作示例)。但我也理解 Stackoverflow 是否不适合他们。
0赞 Dylan Reimerink 11/11/2023
我知道,这可能会令人困惑或沮丧,因为您只是想要一个答案,但这是该网站的政策。服务器故障或 Unix Stack 交换可能是更好的候选者。请不要气馁,否则这是一个有效的问题。
0赞 pchaigno 11/12/2023
在这里同意 Dylan 的观点,并乐于在另一个 Stack Exchange 上回答。您似乎还混淆了几个问题:“Linux/eBPF 能否应对 400Gbps 的 NIC,以及如何应对?”与“如果内核的网络堆栈使 CPU 饱和,用户空间处理会发生什么情况”。我会把它一分为二。

答:

0赞 matt 11/15/2023 #1

这取决于你用eBPF做什么。eBPF 代码将在运行时转换为原生说明,但 75 个周期是远远不够的。

您最好求助于内核旁路或用户空间解决方案,例如 DPDK(数据平面开发工具包)快速路径。内核本身成为高性能网络的麻烦,因此一些防火墙或 DPI 产品将保留 CPU 内核专门用于繁忙的轮询。