Linux 7.1 将淘汰 UDP-Lite —— 通过清理代码实现更佳性能
Source: Hacker News

背景
即将到来的 Linux 7.1 内核周期计划取消对 UDP‑Lite 的支持。UDP‑Lite 允许部分校验和,这样即使数据包可能已损坏或出现错误,也仍能交付给应用程序。自 Linux 2.6.20 时代起就已经有 UDP‑Lite 支持,但由于长期存在的破坏性问题以及为非 UDP‑Lite 用户提升性能的机会,内核现在决定将其淘汰。
弃用细节
来自 Amazon/AWS 的 Kuniyuki Iwashima 解释了多年未被注意的问题以及移除 UDP‑Lite 所带来的性能收益:
在 2023 年,syzbot 发现了一个空指针解引用 bug,当 UDP‑Lite 在 以及 UDP 的总内存使用量超过系统阈值
net.ipv4.udp_mem时尝试为 skb 计费会触发该 bug。
由于该阈值与 UDP 共享,如果有真实的应用在使用 UDP‑Lite,触发该 bug 将非常容易;然而,只有 syzbot 偶然发现了它。
该 bug 自 2016 年起就已存在,说明 UDP‑Lite 在那时已经有 7 年未被使用。
该 bug 在提交ad42a35bdfc6(“udplite: Fix NULL pointer dereference in __sk_mem_raise_allocated().”)中被修复,另一提交be28c14ac8bb(“udplite: Print deprecation notice.”)宣布了弃用计划。
此后没有人提出异议,因此是时候正式淘汰 UDP‑Lite 了。
弃用过程首先移除 IPv6 和 IPv4 的 UDP‑Lite 套接字,然后逐步清理 UDP 栈中剩余的死代码/不必要代码。
性能影响
通过从快速路径中移除大量针对 UDP‑Lite 的条件判断,udp_rr 在 20 000 条流上实现了 10 % 的每秒数据包数提升(13.3 Mpps → 14.7 Mpps),测试平台为 AMD EPYC 7B12(Zen 2)64‑核处理器。
使用 FDO 时,基准值要高得多,提升幅度约为 3 %(20.1 Mpps → 20.7 Mpps)。
因此,UDP‑Lite 代码多年来未被使用,其移除能够为其他 UDP 工作负载带来可观的(+3 % – 10 %)性能提升。
时间线
- 2023 – 添加弃用通知,计划在 2025 年移除。
- 2025 – 发布 Linux 6.18 LTS;未收到任何投诉。
- 2026 – 在 Linux 7.1 周期中正式移除。
合并参考
此合并提交 在 net-next 中退役了 UDP‑Lite,并计划在 Linux 7.1 中合并。