高性能网络 SIG(Special Interest Group) :在云计算时代,软硬件高速发展,云原生、微服务等新的应用形态兴起,让更多的数据在进程之间流动,而网络则成为了这些数据流的载体,在整个云时代扮演着前所未有的重要角色。在这个万物互联的时代,云上的网络通信效率对各种服务至关重要,高性能网络兴趣组致力于利用 XDP、RDMA、VIRTIO 等新高效通信技术,结合软硬件一体化的思想,打造高性能网络协议栈,提升云计算时代数据中心应用的网络的性能。
01 2023 年度总结
2023 年我们在 SMC 和 virtio net 上做了大量优化和增强,提升了 SMC 和 virito net 的可靠性、可用性和性能,包括但不限于以下特性及增强:
- virtio XDP socket zerocopy
- virtio-net XDP multibuffer 支持
- virtio-net 中断合并,NetDIM 支持
- virtio-net inner hash 隧道协议支持
- virtio-net RSS 能力增强支持
- virtio-net device stats 能力支持
- SMC fallback 性能优化
- SMC IP protocol 的支持
- SMC 多项协议拓展,如 Single Link 支持、Link group 连接数量协商、拓展字段等
- SMC ebpf 动态、细粒度 TCP 到 SMC 替换能力支持
- SMC loopback 本地共享内存设备支持
除此之外,SIG 组修复了大量的龙蜥内核的 bug 和 CVE,其中 CVE 120 个。同时,SIG 同学积极参与 upstream 的工作,有 4 位同学正式成为上游 Linux 内核的 reviewer。
02 整体进展
本月高性能网络 SIG 的主要工作聚焦在 ANCK 内核网络、SMC 以及 Virtio 上。
本月关键进展:
1.SMC 支持虚拟 ISM 设备的补丁集正式合入 Linux 特性分支,允许 SMC-D 在非 s390 ISM 设备上加速 TCP 通信。
2.SIG 发起的 virtio specification 修复了自 2011 年存在的校验和问题,支持 virtio 加载 XDP 的场景中避免重复验证校验和节省虚拟机 CPU 利用率。
3.SIG 正在持续推进 Linux 支持 virtio 设备状态统计,允许虚拟机获取后端设备例如丢包原因等统计信息,便利网络问题定位。
03 ANCK 内核网络
3.1 安全
本月总计处理了 5 个 CVE 修复,预计进入版本 ANCK 4.19.91-027.8 和 ANCK 5.10.134-016.3。CVE 列表:
- CVE-2023-39192
- CVE-2023-2002
- CVE-2023-28464
- CVE-2023-6176
- CVE-2023-3776
3.2 SMC
本月 SMC 工作主要集中在上游社区 SMCv2.1 虚拟 ISM 特性支持和稳定性问题修复上。
3.2.1 SMCv2.1 虚拟 ISM 设备支持
IBM SMCv2.1 中引入 SIG 提议的虚拟 ISM 设备支持特性作为 supplemental feature,使 SMC-D 可以配合其他非 s390 ISM 设备使用,在 IBM Z 平台以外系统上加速 TCP 通信。SIG 在本月提交到上游社区的虚拟 ISM 设备代码实现被合入到上游 net-next 分支:https://lore.kernel.org/netdev/20231219142616.80697-1-guwen@linux.alibaba.com/。
3.2.2 上游 SMC 稳定性修复
本月 SIG 修复上游 2 个稳定性问题:
1.CLC 消息字节序修复:https://lore.kernel.org/netdev/1701882157-87956-1-git-send-email-guwen@linux.alibaba.com/
2.SMC-R 连接 dump 非法访问修复:https://lore.kernel.org/netdev/1703662835-53416-1-git-send-email-guwen@linux.alibaba.com/
3.2.3 Virtio
本月 virtio 工作主要聚焦于 device stats、virtio XDP checksum 和 virtio batch 请求优化上面。
device stats
virtio-net 设备上,过去我们没法拿到后端设备的一些统计信息,只能通过云厂商自定义接口来获取,而这些信息对于用户分析网络问题很有意义。高性能网络 SIG 基于之前已经推进成功的 virtio 规范,正在向 Linux 社区推进代码实现:
https://lore.kernel.org/all/20231226073103.116153-1-xuanzhuo@linux.alibaba.com/
virtio checksum 和 XDP 共存
高性能网络 SIG 为了支持 virtio checksum 和 XDP 共存过去作出了很多努力,包括[1]重新探测校验和的方法,[2] virtio 和其他网卡校验和现状 Survey,[3] 添加新的 feature bit 来指示 virtio 只交付新的 fully checksummed packets 等方法,这些方法都因为难以覆盖所有 corner 场景和没有从根本上解决问题而失败。最终,高性能网络 SIG 和 Linux 社区共同探讨出了最终的解决方案,并修复 virtio 自 2011 年来存在的长达10+年之久的 bug。该修复提案等待社区投票通过后,意味着后续我们就可以在 virtio 使用 XDP 的场景中,无需 guest os 重新验证校验和了!这会为 guest 节省最多 10+% cpu 利用率。
[1] https://lore.kernel.org/all/20230628030506.2213-1-hengqi@linux.alibaba.com/
[2] https://lists.oasis-open.org/archives/virtio-dev/202305/msg00291.html
[3] https://lore.kernel.org/all/7686cc30-8ec9-4320-8cc3-c39e9ca3de25@linux.alibaba.com/
virtio batch 请求
virtio 目前已经支持 netdim 功能,但是如果想最大限度发挥其能力,还需要对 virtio 作出优化。
virtio 目前更新设备配置的方式是通过 ctrlq,而 ctrlq 是一种轮询等待的机制,若后端持续不响应这些命令请求,会导致 guest cpu 空转,浪费资源。另外,netdim 配置设备的请求次数较多,频繁的 kick 设备会造成设备 cpu 资源紧张,并且加多设备 DMA 描述符的次数。针对上述两个问题,高性能网络小组提出 batch request 和 batch command 两种批量操作,极大的缓解了上述问题。
目前,高性能网络小组尝试标准化 batch request 方式,目前正在推进 virtio specification。
—— 完 ——
加入龙蜥社群
加入微信群:添加社区助理-龙蜥社区小龙(微信:openanolis_assis),备注【龙蜥】与你同在;加入钉钉群:扫描下方钉钉群二维码。
关于龙蜥
龙蜥社区是立足云计算打造面向国际的 Linux 服务器操作系统开源根社区及创新平台。龙蜥操作系统(Anolis OS)是龙蜥社区推出的 Linux 发行版,拥有三大核心能力:提效降本、更加稳定、更加安全。
目前,Anolis OS 23 已发布,全面支持智能计算,兼容主流 AI 框架,支持一键安装 nvidia GPU 驱动、CUDA 库等,完善适配 Intel、兆芯、鲲鹏、龙芯等芯片,并提供全栈国密支持。
加入我们,一起打造面向云时代的操作系统!