高性能网络SIG月度动态: 推进SMC支持基于eBPF透明替换和内存水位限制等多项功能支持

简介: 一键查看高性能网络 SIG 10 月各项目进展。

本次月报总结了 SIG 在 9 月和 10 月的工作进展,聚焦在 ANCK 网络安全和稳定性问题修复以及 SMC 新特性的推进。

一、关键进展

1. 完成上游 SMC 共享内存使用统计的支持,并回合到 ANCK 5.10。

2. 推进上游 SMC 基于 eBPF 透明替换功能的合入。

3. 完成 ANCK 5.10 中 SMC 共享内存水位限制功能的开发与合入。

4. 修复 ANCK 通用内核网络和 SMC 的多个安全及稳定性问题。

二、ANCK 通用内核网络协议栈

修复

ANCK 5.10 内核修复了如下问题,预计随 018 版本发布:

  • 修复 netem qdisc 可能出现 UAF 的问题。(PR3824,PR3835)
  • 修复 sockmap 可能引起 soft lockup 的问题。(PR4000)
  • 修复 qdisc 的一处 panic 风险。(PR4003)

安全

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

CVE-2024-36889(PR3942)

CVE-2024-36883(PR3941)

CVE-2024-46771(PR3898)

CVE-2024-46783(PR3899)

CVE-2024-46679(PR3925)

CVE-2024-46679(PR3925)

CVE-2024-46800(PR3835)

CVE-2024-41040(PR3885)

CVE-2024-45018(PR3881)

CVE-2024-44934(PR3935)

CVE-2024-36971(PR3934)

CVE-2024-44987(PR3880)

CVE-2024-42284(PR3926)

CVE-2024-44974(PR3928)

CVE-2024-43861(PR3875)

CVE-2024-43879(PR3932)

CVE-2024-42271(PR3930)

 

三、SMC

双月 SMC 相关工作聚焦于上游共享内存统计和 eBPF 透明替换特性的推动,以及 ANCK 中的内存水位限制特性开发和稳定性问题修复。

共享内存统计

上游 SMC 的统计指标中缺少对 LGR 当前持有的共享内存的统计,为此 SIG 向上游 Linux 内核[1]和 smc-tools 用户态工具[2]提交 LGR 和 net namespace 维度共享内存使用统计功能,目前均已合入。相关内核补丁也已回合至 ANCK 内核[3],自 5.10-17.3 版本后携带。

eBPF 透明替换

一直以来,上游 SMC 仅提供了 smc_run 这一进程维度透明替换 TCP 的功能,但这种方式存在静态链接程序不可用以及替换维度单一的问题。因此 SIG 向上游提交了基于 eBPF 的灵活替换方案[4],旨在提供多种维度(如 netns 或进程)透明替换以及基于端口等策略灵活替换 TCP 的能力。

共享内存水位限制

SMC 使用共享内存通信来获得更好的网络性能,但也带来一定的内存压力。因此 SIG 向 ANCK 5.10 提交了 SMC 共享内存水位限制的功能[5],用户可通过 sysctl 设置 node 或 net namespace 维度的共享内存使用上限,达到上限后将回退回 TCP,以避免过多的内存消耗。此特性自 5.10-17.3 版本后携带,目前属于预览特性,后续将推动贡献到上游。

稳定性问题修复

修复了 ANCK 5.10 SMC 中内存泄漏[6]相关问题。

相关链接

[1]https://lore.kernel.org/netdev/20240814130827.73321-1-guwen@linux.alibaba.com/

[2] https://github.com/ibm-s390-linux/smc-tools/pull/11

[3] https://gitee.com/anolis/cloud-kernel/pulls/3766

[4]https://lore.kernel.org/netdev/1729737768-124596-1-git-send-email-alibuda@linux.alibaba.com/

[5] https://gitee.com/anolis/cloud-kernel/pulls/3894

[6] https://gitee.com/anolis/cloud-kernel/pulls/3847


注:更多龙蜥 SIG 月度动态可点击这里查看。


高性能网络 SIG(Special Interest Group)在这个万物互联的时代,云上的网络通信效率对各种服务至关重要,高性能网络兴趣组致力于利用 XDP、RDMA、VIRTIO 等新高效通信技术,结合软硬件一体化的思想,打造高性能网络协议栈,提升云计算时代数据中心应用的网络性能。

高性能网络 SIG 主页:https://openanolis.cn/sig/high-perf-network

—— 完 ——

相关文章
|
3月前
|
网络协议 算法 Java
基于Reactor模型的高性能网络库之Tcpserver组件-上层调度器
TcpServer 是一个用于管理 TCP 连接的类,包含成员变量如事件循环(EventLoop)、连接池(ConnectionMap)和回调函数等。其主要功能包括监听新连接、设置线程池、启动服务器及处理连接事件。通过 Acceptor 接收新连接,并使用轮询算法将连接分配给子事件循环(subloop)进行读写操作。调用链从 start() 开始,经由线程池启动和 Acceptor 监听,最终由 TcpConnection 管理具体连接的事件处理。
66 2
|
3月前
基于Reactor模型的高性能网络库之Tcpconnection组件
TcpConnection 由 subLoop 管理 connfd,负责处理具体连接。它封装了连接套接字,通过 Channel 监听可读、可写、关闭、错误等
90 1
|
3月前
|
负载均衡 算法 安全
基于Reactor模式的高性能网络库之线程池组件设计篇
EventLoopThreadPool 是 Reactor 模式中实现“一个主线程 + 多个工作线程”的关键组件,用于高效管理多个 EventLoop 并在多核 CPU 上分担高并发 I/O 压力。通过封装 Thread 类和 EventLoopThread,实现线程创建、管理和事件循环的调度,形成线程池结构。每个 EventLoopThread 管理一个子线程与对应的 EventLoop(subloop),主线程(base loop)通过负载均衡算法将任务派发至各 subloop,从而提升系统性能与并发处理能力。
145 3
|
3月前
基于Reactor模式的高性能网络库github地址
https://github.com/zyi30/reactor-net.git
53 0
|
3月前
基于Reactor模型的高性能网络库之Poller(EpollPoller)组件
封装底层 I/O 多路复用机制(如 epoll)的抽象类 Poller,提供统一接口支持多种实现。Poller 是一个抽象基类,定义了 Channel 管理、事件收集等核心功能,并与 EventLoop 绑定。其子类 EPollPoller 实现了基于 epoll 的具体操作,包括事件等待、Channel 更新和删除等。通过工厂方法可创建默认的 Poller 实例,实现多态调用。
205 60
|
13天前
|
监控 前端开发 安全
Netty 高性能网络编程框架技术详解与实践指南
本文档全面介绍 Netty 高性能网络编程框架的核心概念、架构设计和实践应用。作为 Java 领域最优秀的 NIO 框架之一,Netty 提供了异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。本文将深入探讨其 Reactor 模型、ChannelPipeline、编解码器、内存管理等核心机制,帮助开发者构建高性能的网络应用系统。
113 0
|
3月前
|
缓存 索引
基于Reactor模式的高性能网络库之缓冲区Buffer组件
Buffer 类用于处理 Socket I/O 缓存,负责数据读取、写入及内存管理。通过预分配空间和索引优化,减少内存拷贝与系统调用,提高网络通信效率,适用于 Reactor 模型中的异步非阻塞 IO 处理。
108 3
|
3月前
|
存储
阿里云轻量应用服务器收费标准价格表:200Mbps带宽、CPU内存及存储配置详解
阿里云香港轻量应用服务器,200Mbps带宽,免备案,支持多IP及国际线路,月租25元起,年付享8.5折优惠,适用于网站、应用等多种场景。
785 0
|
3月前
|
存储 缓存 NoSQL
内存管理基础:数据结构的存储方式
数据结构在内存中的存储方式主要包括连续存储、链式存储、索引存储和散列存储。连续存储如数组,数据元素按顺序连续存放,访问速度快但扩展性差;链式存储如链表,通过指针连接分散的节点,便于插入删除但访问效率低;索引存储通过索引表提高查找效率,常用于数据库系统;散列存储如哈希表,通过哈希函数实现快速存取,但需处理冲突。不同场景下应根据访问模式、数据规模和操作频率选择合适的存储结构,甚至结合多种方式以达到最优性能。掌握这些存储机制是构建高效程序和理解高级数据结构的基础。
222 1