高性能网络SIG月度动态:SMC loopback 完成协议支持及 virtio-net 统计能力增强

简介: 一键查收高性能网络 SIG 最新进展。

高性能网络 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、兆芯、鲲鹏、龙芯等芯片,并提供全栈国密支持。

加入我们,一起打造面向云时代的操作系统!

相关文章
|
9月前
|
C++
基于Reactor模型的高性能网络库之地址篇
这段代码定义了一个 InetAddress 类,是 C++ 网络编程中用于封装 IPv4 地址和端口的常见做法。该类的主要作用是方便地表示和操作一个网络地址(IP + 端口)
370 58
|
9月前
|
网络协议 算法 Java
基于Reactor模型的高性能网络库之Tcpserver组件-上层调度器
TcpServer 是一个用于管理 TCP 连接的类,包含成员变量如事件循环(EventLoop)、连接池(ConnectionMap)和回调函数等。其主要功能包括监听新连接、设置线程池、启动服务器及处理连接事件。通过 Acceptor 接收新连接,并使用轮询算法将连接分配给子事件循环(subloop)进行读写操作。调用链从 start() 开始,经由线程池启动和 Acceptor 监听,最终由 TcpConnection 管理具体连接的事件处理。
288 2
|
9月前
基于Reactor模型的高性能网络库之Tcpconnection组件
TcpConnection 由 subLoop 管理 connfd,负责处理具体连接。它封装了连接套接字,通过 Channel 监听可读、可写、关闭、错误等
239 1
|
9月前
|
负载均衡 算法 安全
基于Reactor模式的高性能网络库之线程池组件设计篇
EventLoopThreadPool 是 Reactor 模式中实现“一个主线程 + 多个工作线程”的关键组件,用于高效管理多个 EventLoop 并在多核 CPU 上分担高并发 I/O 压力。通过封装 Thread 类和 EventLoopThread,实现线程创建、管理和事件循环的调度,形成线程池结构。每个 EventLoopThread 管理一个子线程与对应的 EventLoop(subloop),主线程(base loop)通过负载均衡算法将任务派发至各 subloop,从而提升系统性能与并发处理能力。
465 3
|
9月前
基于Reactor模式的高性能网络库github地址
https://github.com/zyi30/reactor-net.git
204 0
|
9月前
基于Reactor模型的高性能网络库之Poller(EpollPoller)组件
封装底层 I/O 多路复用机制(如 epoll)的抽象类 Poller,提供统一接口支持多种实现。Poller 是一个抽象基类,定义了 Channel 管理、事件收集等核心功能,并与 EventLoop 绑定。其子类 EPollPoller 实现了基于 epoll 的具体操作,包括事件等待、Channel 更新和删除等。通过工厂方法可创建默认的 Poller 实例,实现多态调用。
407 60
|
9月前
|
安全 调度
基于Reactor模型的高性能网络库之核心调度器:EventLoop组件
它负责:监听事件(如 I/O 可读写、定时器)、分发事件、执行回调、管理事件源 Channel 等。
432 57
|
9月前
基于Reactor模型的高性能网络库之时间篇
是一个用于表示时间戳(精确到微秒)**的简单封装类
283 57
|
7月前
|
监控 前端开发 安全
Netty 高性能网络编程框架技术详解与实践指南
本文档全面介绍 Netty 高性能网络编程框架的核心概念、架构设计和实践应用。作为 Java 领域最优秀的 NIO 框架之一,Netty 提供了异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。本文将深入探讨其 Reactor 模型、ChannelPipeline、编解码器、内存管理等核心机制,帮助开发者构建高性能的网络应用系统。
475 0
|
9月前
|
缓存 索引
基于Reactor模式的高性能网络库之缓冲区Buffer组件
Buffer 类用于处理 Socket I/O 缓存,负责数据读取、写入及内存管理。通过预分配空间和索引优化,减少内存拷贝与系统调用,提高网络通信效率,适用于 Reactor 模型中的异步非阻塞 IO 处理。
291 3

热门文章

最新文章