高性能网络SIG双月度动态: 三年磨一剑,virtio-net AF_XDP 完成 Linux 主线零拷贝支持

简介: 高性能网络SIG年度总结及各项目进展一览。

2024 年度总结

2024 年我们继续在 virtio-net 和 SMC 上做了大量优化和增强,提升了 virito-net 和 SMC 的可靠性、可用性和性能,包括但不限于以下特性及增强:

  • 经过 3 年努力,完成了 virtio-net AF_XDP 零拷贝的支持和上游化,为此完成 2 个 virtio spec 改动,累计上游贡献超 120+ 个补丁;
  • 完成 SMC IPPROTO_SMC 协议支持和上游化,并在此基础上提出基于 eBPF 的 TCP 透明替换方案,支持基于 IP、端口、进程等各种维度的替换策略;
  • 完成 SMC loopback-ism 设备支持和上游化,为此完成 SMCv2.1 Emulated-ISM 特性支持,进入 SMCv2.1 release 4 白皮书;
  • 完成 virtio-net NetDIM 能力支持和上游化,配合硬件中断聚合能力可以提升一些典型应用如 redis 场景下最高 15% 的性能;
  • 完成 virtio XDP csum 优化、virtio RSS context、设备统计信息、control vq timeout、队列重置能力等多个特性的支持或上游化,并推动 virtio flow director 提案进入 virtio 规范;
  • 完成 SMC 共享内存数量监控的支持和上游化,完成内存水位等特性的支持;

除此之外,SIG 组修复了大量的龙蜥内核的 bug 和 CVE,其中 CVE 191 个。 同时,SIG 组深度参与上游合作,积极活跃在 SMC、virtio-net、eBPF 等社区,为 Linux 开源社区演进贡献力量。

整体进展

本次双月报总结了 SIG 在 11 月和 12 月的工作进展,工作聚焦在实现 virtio-net 对 AF_XDP 零拷贝的支持和 RSS 功能的完善,推进 SMC 基于 eBPF 透明替换特性合入上游,以及修复 ANCK 网络安全和稳定性问题。

本月关键进展:

  1. 经过 3 年努力,终于完成了 virtio-net AF_XDP 零拷贝的上优化,这使得上游 virtio-net 驱动能够利用 AF_XDP 获得较内核 UDP 在数据包处理性能(PPS)上 3~7 倍的提升;
  2. 进一步在上游社区推进 SMC 基于 eBPF 灵活替换 TCP 的特性,弥补现有替换手段的不足,提升 SMC 易用性;
  3. 修复 ANCK 通用内核网络的多个安全及稳定性问题;

ANCK 通用内核网络协议栈

特性

ANCK 5.10 内核新增如下特性,已随 018 版本发布:

  • 为bond 3ad模式新增了200G和400G速率支持。(PR3992)

修复

ANCK 5.10 内核修复了若干稳定性问题。

以下问题已随 018 版本发布:

  • 修复qdisc潜在的UAF问题。(PR4094,PR4095)

以下问题预计随 019 版本发布:

  • 优化erspan_opt的初始化逻辑。(PR4352)
  • 修复一处sockmap的删除逻辑错误。(PR4353)
  • 修正tbf的统计计数逻辑。(PR4354)
  • 修正了netem的qlen计数逻辑,避免发包异常。(PR4358)

安全

ANCK 5.10 修复了如下CVE,预计随 019 版本发布:

  • CVE-2024-26808(PR4350)

SMC

双月 SIG 在 SMC 上的工作主要集中在推进 eBPF 透明替换方案合入上游社区,以及稳定性修复上。

eBPF 透明替换

上游 SMC 仅提供了 smc_run 这一进程维度透明替换 TCP 的功能,但这种方式存在静态链接程序不可用以及替换维度单一的问题。SIG 向上游提交的基于 eBPF 的灵活替换方案[1]目前在 BPF 社区评审中,支持在容器隔离的多种维度下进行透明替换和基于IP/端口等策略快速回退的能力。

[1] [PATCH bpf-next v3 0/5] net/smc: Introduce smc_ops

内存水位限制

SMC 使用共享内存完成通信,在追求大吞吐时会产生较大的内存开销。SIG 提出一种内存水位限制方案[1],提供整机或 net namespace 维度共享内存水位配置的功能。当共享内存用量超过水位时将触发新连接回退到 TCP。目前已进入龙蜥 5.10 内核。

[1] net/smc: Introduce smc_mem to limit memory usage

稳定性问题修复

修复 SMC 在竞争下 link refcnt use-after-free 和 __flush_work 警告的问题[1],修复 CLC 握手过程中潜在的非法内存访问和永久阻塞问题[2]。上述补丁集均已被上游社区采纳并回合到龙蜥社区 5.10 内核。

[1] [PATCH net v2 0/2] two fixes for SMC

[2] [PATCH net v2 0/6] several fixes for smc

virtio

双月 SIG 在 virtio 上的工作主要聚焦在上游和 ANCK 内核中 RSS 功能完善以及实现 virtio-net 对 AF_XDP 零拷贝的支持。

RSS 功能完善

virtio-net 的 RSS 配置存在与后端不统一的问题,队列数量配置也存在风险,用户修改相关参数时可能导致非预期的网络表现。为此 SIG 向上游 Linux 内核提交补丁[1]以解决上述问题,目前已合入。相关内核补丁也已回合至 ANCK 内核[2],从 5.10.134-18 版本开始支持。

[1] [PATCH net 0/4] virtio_net: Make RSS interact properly with queue number

[2] [5.10][fix] virtio_net: rss out of sync with backend

virtio-net 支持 AF_XDP 零拷贝

这是我们高性能网络兴趣小组在推动 Linux upstream 工作中的一项重要成就。AF_XDP 是一种新的绕过内核的收发包框架,它基于 XDP 技术,在驱动接收到数据包后,能够直接将用户关注的数据包传递到用户态,用户态可以进一步将数据包从用户空间传送至驱动,直接发送出去。与传统的内核级 UDP PPS 相比,AF_XDP 的性能提升可达到 3-7 倍。然而,AF_XDP 需要驱动具备 零拷贝 支持才能发挥其优势。


经过我们 SIG 多年的不懈努力,随着最后一组补丁集[1]的合并,virtio-net 对 AF_XDP 的支持终于完成。


为实现这一目标,最终合入的补丁数量达到了 120 多个,而在社区沟通过程中放弃的补丁数更是远超这个数字。经过长时间的坚持与努力,我们终于达成了这一重要目标,兑现了我们的承诺。


值得一提的是,更早之前,virtio-spec 社区中的 vq-reset 特性[2]也是为了实现这一功能而引入的。因此,为了这一目标,我们在 virtio-spec、QEMU 和 Linux kernel 等多个层面作出了极大的努力,并且在过程中遇到了无数的挑战。尽管如此,我们从未放弃,经过三年多的持续推进,终于克服了所有困难,完成了这一工作。在此,要特别感谢社区 Jason Wang 对本项工作的持续支持。


事实上 AF_XDP 零拷贝功能 3 年前就已经在 ANCK 实现了支持,并基于 ExpressUDP[3] 在阿里巴巴大规模落地,推动此项工作的上游化一方面降低 ANCK 的维护成本,另一方面也通过贡献社区共同进步。本次合入 Linux 主线的补丁,我们也将会回合到 ANCK-6.6 ,保持和上游实现的统一。

[1] [PATCH net-next v4 00/13] virtio-net: support AF_XDP zero copy (tx)

[2] https://groups.oasis-open.org/higherlogic/ws/public/ballot?id=3700

[3] OpenAnolis Express UDP

相关文章
|
1天前
|
机器学习/深度学习 编解码 计算机视觉
RT-DETR改进策略【Backbone/主干网络】| 2023 U-Net V2 替换骨干网络,加强细节特征的提取和融合
RT-DETR改进策略【Backbone/主干网络】| 2023 U-Net V2 替换骨干网络,加强细节特征的提取和融合
24 10
RT-DETR改进策略【Backbone/主干网络】| 2023 U-Net V2 替换骨干网络,加强细节特征的提取和融合
|
17天前
|
Linux 网络性能优化 网络安全
Linux(openwrt)下iptables+tc工具实现网络流量限速控制(QoS)
通过以上步骤,您可以在Linux(OpenWrt)系统中使用iptables和tc工具实现网络流量限速控制(QoS)。这种方法灵活且功能强大,可以帮助管理员有效管理网络带宽,确保关键业务的网络性能。希望本文能够为您提供有价值的参考。
67 28
|
14天前
|
网络协议 Unix Linux
深入解析:Linux网络配置工具ifconfig与ip命令的全面对比
虽然 `ifconfig`作为一个经典的网络配置工具,简单易用,但其功能已经不能满足现代网络配置的需求。相比之下,`ip`命令不仅功能全面,而且提供了一致且简洁的语法,适用于各种网络配置场景。因此,在实际使用中,推荐逐步过渡到 `ip`命令,以更好地适应现代网络管理需求。
28 11
|
5天前
|
机器学习/深度学习 编解码 计算机视觉
YOLOv11改进策略【Backbone/主干网络】| 2023 U-Net V2 替换骨干网络,加强细节特征的提取和融合
YOLOv11改进策略【Backbone/主干网络】| 2023 U-Net V2 替换骨干网络,加强细节特征的提取和融合
18 0
YOLOv11改进策略【Backbone/主干网络】| 2023 U-Net V2 替换骨干网络,加强细节特征的提取和融合
|
1月前
|
Ubuntu Linux 开发者
Ubuntu20.04搭建嵌入式linux网络加载内核、设备树和根文件系统
使用上述U-Boot命令配置并启动嵌入式设备。如果配置正确,设备将通过TFTP加载内核和设备树,并通过NFS挂载根文件系统。
87 15
|
2月前
|
Ubuntu Unix Linux
Linux网络文件系统NFS:配置与管理指南
NFS 是 Linux 系统中常用的网络文件系统协议,通过配置和管理 NFS,可以实现跨网络的文件共享。本文详细介绍了 NFS 的安装、配置、管理和常见问题的解决方法,希望对您的工作有所帮助。通过正确配置和优化 NFS,可以显著提高文件共享的效率和安全性。
213 7
|
3月前
|
Linux 网络安全 数据安全/隐私保护
Linux 超级强大的十六进制 dump 工具:XXD 命令,我教你应该如何使用!
在 Linux 系统中,xxd 命令是一个强大的十六进制 dump 工具,可以将文件或数据以十六进制和 ASCII 字符形式显示,帮助用户深入了解和分析数据。本文详细介绍了 xxd 命令的基本用法、高级功能及实际应用案例,包括查看文件内容、指定输出格式、写入文件、数据比较、数据提取、数据转换和数据加密解密等。通过掌握这些技巧,用户可以更高效地处理各种数据问题。
323 8
|
3月前
|
监控 Linux
如何检查 Linux 内存使用量是否耗尽?这 5 个命令堪称绝了!
本文介绍了在Linux系统中检查内存使用情况的5个常用命令:`free`、`top`、`vmstat`、`pidstat` 和 `/proc/meminfo` 文件,帮助用户准确监控内存状态,确保系统稳定运行。
1092 6
|
3月前
|
Linux
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
182 3
|
2月前
|
Linux Shell
Linux 10 个“who”命令示例
Linux 10 个“who”命令示例
95 14
Linux 10 个“who”命令示例