高性能网络 SIG 月度动态:联合 IBM 就 SMC v2.1 协议升级达成一致,ANCK 率先完成支持

简介: 高性能网络 SIG 月度动态送达,一键了解 5 月各项目进展。

高性能网络 SIG(Special Interest Group)在云计算时代,软硬件高速发展,云原生、微服务等新的应用形态兴起,让更多的数据在进程之间流动,而网络则成为了这些数据流的载体,在整个云时代扮演着前所未有的重要角色。在这个万物互联的时代,云上的网络通信效率对各种服务至关重要,高性能网络兴趣组致力于利用 XDP、RDMA、VIRTIO 等新高效通信技术,结合软硬件一体化的思想,打造高性能网络协议栈,提升云计算时代数据中心应用的网络的性能。

01 SIG 整体进展

本月高性能网络 SIG 的主要工作聚焦在 ANCK 内核网络、SMC 和 virtio 上。

本月关键进展:

  • SIG 本月与 IBM SMC 团队就 SMCv2.1 协议的关键特性达成一致。SMCv2.1 较 SMCv1 具有更强的可拓展性,是 SMC 社区的未来发展趋势。SMCv2.1 相较 SMCv2 的主要差异是引入了 SIG 提出的:

a) LGR 支持单 Link。

b) LGR 支持协商最大连接数。

c) 支持 RDMA write with immediate。

d) 支持 vendor 特定特性等内容。

  • SIG 本月发起的 [Proposal] Relationship between XDP and rx-csum in virtio-net 提案解决了 virtio-net 支持 XDP 和 rx checksum 存在冲突的问题,实现了两者的共存。

02 ANCK 内核网络

修复

修复了网卡多队列、大深度场景下发生 cpu stall 的问题:bugzilla 链接

安全

本月网络方向共计修复 6 个 CVE,覆盖 wifi/net_sched/mpls/netfilter 等模块,CVE 列表:CVE-2022-47929, CVE-2023-32233, CVE-2023-1075, CVE-2023-26545, CVE-2023-28466, CVE-2023-1380。

03 SMC

本月工作主要聚焦在新版本龙蜥内核(ANCK)的开发工作,众多 SMC 关键特性预计将在 ANCK 5.10-015 (7 月发布) 中可用,稳定性也得到更充分的验证。这个版本 ANCK 的 SMC 网络栈具备取代 TCP,默认启用并加速应用通信的能力。用户不再担心回退或短链接等场景劣化网络性能。同时 SMC 可观测性和运维能力也得到了增强。

基于 eBPF 的策略协商

SMC 的连接建立依赖于 TCP 握手交换双方信息,并创建 RDMA QP(如需)和 MR 等,理论上建立连接的开销较大。对于某些类型的应用,频繁创建和释放连接的场景下,SMC 并不具有优势甚至性能下降。我们在最新的 ANCK 内核中引入了基于 eBPF 策略协商机制,当 eBPF 程序探测到用户频繁创建和释放连接时,将会自动切换至 TCP 模式。对于长链接,则会优先使用 SMC 加速应用通信。

首次支持并启用 SMCv2.1

龙蜥社区和 IBM 在 SMC 上保持密切的合作,当前我们提出的 SMC 协议关键特性,都会体现在 SMC 协议规范中。SMCv1 协议由于扩展性差等原因,所有的协议扩展将合并至 SMCv2 的扩展协议 v2.1 中,并提供向下兼容。龙蜥 ANCK 是社区中首个支持 SMCv2.1 协议的内核,我们在此版本默认启用 v2.1 协议,并进行了充分的测试,发现了多个 v2 的隐藏问题并已经修复合入到 ANCK 和上游社区版本。

RDMA write with immediate(WI) 支持

当前 SMC-R 每个请求会通过一次 RDMA_SEND 和一次 RDMA_WRITE 将数据和描述信息发送给对端,对应至少需要两个数据包。对于云上的场景小包的场景,意味着会增加一倍的数据包,而云上虚拟机往往 PPS 会根据实例规格会有限制,导致在数据包很多且大部分都是小包的场景,如 Redis 很容易打到 PPS 的限速影响性能。

针对此问题与解决方案,龙蜥社区高性能网络 SIG 和 IBM SMC 团队经过多轮沟通基本达成一致,SMC 协议将会引入 WI 特性的支持优化此问题。

其他特性

本次版本还包括众多关键特性,我们也将在龙蜥社区持续分享:

  • AF_INET 协议族下的 SMC 协议实现,将 SMC 回退 TCP 的开销缩小在 2% 以内。配合 eBPF 策略协商可以提供近乎透明的网络加速体验。
  • SMC 内存资源限制,当收发缓冲区达到上限时,将自动回退到 TCP,对于内存受限的小规格容器更友好。
  • 全面支持 SMCv2.1 协议,除 SMC WI 外,还提供了 LGR 协商,单 link 支持和 vendor 扩展支持。

04 virtio

virtio-net 支持 AF_XDP zerocopy

AF_XDP 是一个 bypass 内核协议栈的新收发包框架。它可以把驱动的收包直接传递到用户态, 也可以把包直接从用户态传递到驱动发送出去。它的性能相比于内核的 UDP 协议栈可以提升 3-7 倍 PPS。

Anolis 社区目前正在和 virtio 社区合作,积极推进 virtio 针对 AF_XDP 的标准化的支持。这个工作分成几个部分, 本月主要推进 "virtio core 支持 DMA premapped"

本月和 virtio 社区完成多轮沟通,目前已经转向了一些实现的细节问题, 主要关注的点在于 virtio 对于 premapped 的支持是 desc chain 粒度不是 vq 粒度的。

  • desc chain 粒度地, 要增加一些运行态的状态记录, 增加内存使用, 可能引入一些 cache line 相关的问题。
  • vq 粒度, 可以不用引入每一个 desc chain 粒度的纪录, 但是在回收这方面会带来一些麻烦。

目前讨论的结果是向 vq 粒度转移, 这要对 virtio core 进行一些改造, 增加一些新的 helper。

virtio-net 支持 XDP 和数据包 checksum offloading 共存

目前,virtio-net 支持 XDP 和 rx checksum 存在冲突,这是由[1][2]提出的问题引起的,即 XDP 可能会修改/覆盖 Partial CheckSum 相关的信息,导致协议栈验证校验和失败而丢包。但是,这也直接导致了我们不能享受 Unnecessary CheckSum offloading 节省软件 cpu 资源的能力。注意,rx CHECKSUM_PARTIAL 主要存在于虚拟化环境中,因此非虚拟化的硬件网卡没有此问题。

龙蜥社区的目标是实现 XDP 和 VIRTIO_NET_F_GUEST_CSUM 的共存,并发起了 [Proposal] Relationship between XDP and rx-csum in virtio-nethttps://lists.oasis-open.org/archives/virtio-dev/202305/msg00291.html 的提案。龙蜥社区在其中提出了四种可能的解决方案:

  • 不让 virtio-net 驱动收到被标记为 VIRTIO_NET_HDR_F_NEEDS_CSUM 的数据包(partial checkSum ),此可以通过在 virtio specification 规范中添加新的特性完成。
  • 修改 XDP 加载框架,新增一种标记 XDP 程序为只读的标记。XDP 的重要应用方向之一是作为监控/防火墙,其并不会修改数据包。此时我们可以为只读 XDP 的加载打开 rx checksum offloading。
  • 直接打开 VIRTIO_NET_F_GUEST_CSUM。这取决于我们信任虚拟化环境是可靠的,并且数据包进入协议栈后可能不会被转发。
  • 对经过 XDP 修改的 partial checksum 数据包进行流解析,以获取 transport/ip 头的信息重置 csum_{start, offset} 的信息,并重新计算伪头部校验和。

目前,上游社区认可此问题的存在,并且已经基本和上游社区达成一致,即优先尝试第四种入侵最小的解决方案。

[1] virtio-net: disable guest csum during XDP set

[2] virtio-net: fail XDP set if guest csum is negotiated

virtio-net 支持 inner header hash

隧道协议分为两种,一种是没有传输头的 legacy 协议,例如 GRE (RFC 2784, RFC 2890),IPIP (RFC 2003),这种隧道协议由于没有外部端口号,因此在 RSS 队列选择时会因为缺乏熵而导致队列分布不散,进而影响收包性能;另外一种是有传输头的 modern 协议,例如 VXLAN (RFC 7348), GENEVE (RFC 8926), NVGRE (RFC 7637) 等,这种隧道协议虽然可能根据外部端口号可以获取熵,但是他们没有稳定可靠的方法通过外头部标识同一条 flow。

龙蜥社区发起的 inner header hash 的提案,本月和 virtio 社区经过 v13->v15 的讨论,针对兼容未来 modern 协议的扩展性问题和硬编码协议类型的缺陷,上游社区推荐引入一个选项来使用 outer source UDP port 来做达到可能的对称哈希的需求,原因是各个隧道协议 RFC 都隐含/推荐的表示了 outer souce UDP port 需要标识一条流,社区的代码实现中也使用了一致性哈希保证了这点。

相关链接:

高性能网络 SIG 主页:

https://openanolis.cn/sig/high-perf-network

—— 完 ——

加入龙蜥社群

加入微信群:添加社区助理-龙蜥社区小龙(微信:openanolis_assis),备注【龙蜥】与你同在;加入钉钉群:扫描下方钉钉群二维码。

相关文章
|
1月前
|
负载均衡 网络协议 算法
|
2天前
|
数据采集 监控 安全
公司网络监控软件:Zig 语言底层优化保障系统高性能运行
在数字化时代,Zig 语言凭借出色的底层控制能力和高性能特性,为公司网络监控软件的优化提供了有力支持。从数据采集、连接管理到数据分析,Zig 语言确保系统高效稳定运行,精准处理海量网络数据,保障企业信息安全与业务连续性。
17 4
|
24天前
|
安全 搜索推荐 网络安全
HTTPS协议是**一种通过计算机网络进行安全通信的传输协议
HTTPS协议是**一种通过计算机网络进行安全通信的传输协议
52 11
|
23天前
|
监控 网络协议 网络性能优化
网络通信的核心选择:TCP与UDP协议深度解析
在网络通信领域,TCP(传输控制协议)和UDP(用户数据报协议)是两种基础且截然不同的传输层协议。它们各自的特点和适用场景对于网络工程师和开发者来说至关重要。本文将深入探讨TCP和UDP的核心区别,并分析它们在实际应用中的选择依据。
52 3
|
1月前
|
网络协议 网络安全 网络虚拟化
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算。通过这些术语的详细解释,帮助读者更好地理解和应用网络技术,应对数字化时代的挑战和机遇。
86 3
|
1月前
|
网络虚拟化
生成树协议(STP)及其演进版本RSTP和MSTP,旨在解决网络中的环路问题,提高网络的可靠性和稳定性
生成树协议(STP)及其演进版本RSTP和MSTP,旨在解决网络中的环路问题,提高网络的可靠性和稳定性。本文介绍了这三种协议的原理、特点及区别,并提供了思科和华为设备的命令示例,帮助读者更好地理解和应用这些协议。
52 4
|
1月前
|
网络协议 安全 Go
Go语言进行网络编程可以通过**使用TCP/IP协议栈、并发模型、HTTP协议等**方式
【10月更文挑战第28天】Go语言进行网络编程可以通过**使用TCP/IP协议栈、并发模型、HTTP协议等**方式
51 13
|
1月前
|
消息中间件 编解码 网络协议
Netty从入门到精通:高性能网络编程的进阶之路
【11月更文挑战第17天】Netty是一个基于Java NIO(Non-blocking I/O)的高性能、异步事件驱动的网络应用框架。使用Netty,开发者可以快速、高效地开发可扩展的网络服务器和客户端程序。本文将带您从Netty的背景、业务场景、功能点、解决问题的关键、底层原理实现,到编写一个详细的Java示例,全面了解Netty,帮助您从入门到精通。
122 0
|
1月前
|
存储 缓存 网络协议
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点,GET、POST的区别,Cookie与Session
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点、状态码、报文格式,GET、POST的区别,DNS的解析过程、数字证书、Cookie与Session,对称加密和非对称加密
下一篇
DataWorks