共计 4153 个字符,预计需要花费 11 分钟才能阅读完成。
高性能网络 SIG(Special Interest Group):在云计算时代,软硬件高速倒退,云原生、微服务等新的利用状态衰亡,让更多的数据在过程之间流动,而网络则成为了这些数据流的载体,在整个云时代扮演者前所未有的重要角色。在这个万物互联的时代,云上的网络通信效率对各种服务至关重要,高性能网络趣味组致力于利用 XDP、RDMA、VIRTIO 等新高效通信技术,联合软硬件一体化的思维,打造高性能网络协议栈,晋升云计算时代数据中心利用的网络的性能。
01 本月 SIG 整体停顿
本月高性能网络 SIG 的次要工作聚焦在 SMC,virtio 和 Anolis OS 通用内核网络上。
本月要害停顿:
- 本月 SIG 小组和 IBM SMC 开发团队在 SMC v2 的协定扩大上达成了统一,至此 SIG 推动的几个要害协定扩大内容(单连贯个性反对,LGR 最大连接数可协商反对,RDMA write with immediate 反对,以及可扩大的选项等)在 SMC 开发者例会上根本探讨结束。
- SIG 小组提出并推动的 virtio-net: support the virtqueue coalescing moderation(https://lists.oasis-open.org/archives/virtio-dev/202303/msg00…)提案在 virtio 社区投票通过,该提案能够让 virtio-net 反对动静中断调节,晋升 virtio-net 的性能。
02 Anolis OS
修复
Anolis OS ANCK 5.10 新增以下修复:
- Anck 5.10 aarch64kernel_selftests 测试套下 net.tls 用例 fail:在 ->get_port() 前将 err 设置成正确的错误码。(https://bugzilla.openanolis.cn/show_bug.cgi?id=2394)
- Anck 5.10 nightly[x86_64]kernel-selftests:执行 net 目录下 reuseaddr_ports_exhausted.sh 用例 fail:修复内核为未建设的 socket 附加 ktls ULP 时返回正确的错误码。(https://bugzilla.openanolis.cn/show_bug.cgi?id=4510)
- 平安
本月网络方向共计修复 17 个 CVE,笼罩 ulp/wifi/sched/ipv6/sctp/mpls/usb/nfc/netfilter/bluetooth 等模块,CVE 列表:CVE-2022-4129,CVE-2023-0461,CVE-2023-23455,CVE-2023-23559,CVE-2022-47929,CVE-2023-0394,CVE-2023-1074,CVE-2023-26545,CVE-2022-2964,CVE-2023-23454,CVE-2023-1281,CVE-2020-25672,CVE-2023-0590,CVE-2020-25670,CVE-2023-1095,CVE-2022-20566,CVE-2020-25671。
03 高性能网络协议栈 SMC
本月,龙蜥社区高性能网络 SIG 在 SMC 畛域的工作,次要聚焦在标准化协定的扩大、本机高性能通信计划和 eBPF 策略替换能力。
本机高性能通信计划
本机的 loopback 和容器间(跨 netns)通信曾经是一种常见的数据门路,在数据处理和云原生场景有着十分宽泛的应用。例如云原生场景下,service mesh 通过 proxy 过程与业务过程、sidecar 进行通信。SMC 提供了本机(loopback 和 容器间)的高性能通信计划,比照传统的用户态 IPC、以及内核的 TCP loopback 或者 UNIX domain socket 等计划,除了性能具备十分大的劣势之外(具体数据可参考 LWN 链接:https://lwn.net/Articles/927410/),同时对于利用通明无侵入、无批改。本月咱们持续欠缺曾经推送到 Linux 社区的 RFC 提案,并发送出 v4 版本(LWN 链接)。从以后反馈来看,Linux 社区对于计划的实用场景、可行性曾经达成统一。目前聚焦在 SMC 协定如何确保惟一辨认到本机的 loopback 设施。以后的计划是通过多重 ID 来辨别不同的 loopback 设施,抵触的概率在 1/2^(64*3)。对于 SMC loopback 的更进一步的议题,咱们将在 SMC 开发者例会上与 Linux 社区的 Maintainer 进一步沟通。
协定扩大
SMC 协定定义在 IETF RFC 7609 和 IBM SMC PDF 手册之中,协定规定了单方如何握手直至建设连贯并失常通信。以后协定存在一些问题,例如 SMC v2 协定尚未标准化,以及尚无针对协定设定预期场景之外的拓展。本月龙蜥社区与 Linux 社区在协定扩大上达成了统一,至此咱们推动的几个要害协定扩大内容在 SMC 开发者例会上探讨根本结束,并在通过一系列 review 和 comment 之后,进入正式的协定更新和公布流程。本次达成统一的协定扩大次要包含:单连贯的个性的反对,LGR 最大连接数可协商的反对,RDMA write with immediate 的反对,以及可扩大的选项等。
eBPF 策略替换
SMC 提供了动静回退 TCP 的能力,以后的回退策略的决策因素次要是由 RDMA / ISM 连贯建设是否胜利。因为 SMC 短链接性能不如 TCP,为了让 SMC 更加通用,因而打算给 SMC 减少基于策略的回退 TCP 的能力,帮忙 SMC 更好地适配不同利用模型和场景。基于下面的背景,咱们向 Linux 的 BPF 社区推送了基于 eBPF struct ops 个性的 SMC 策略回退的补丁,并于 BPF 的 maintainer 和 struct ops 的作者探讨实现细节。基于探讨的细节,咱们发送了更新版本的补丁。如果 eBPF 策略替换计划被社区承受后,咱们将 eBPF 策略替换的用户态实现提交到 SMC 工具(smc-tools)之中,简化用户应用,同时 SMC ULP 计划也将会被废除。
04 virtio
virtio specification 反对 virtqueue notification coalescing
背景:Net DIM (Generic Network Dynamic Interrupt Moderation) https://www.kernel.org/doc/html/next/networking/net_dim.html 算法通过统计以后网络中单个队列的流量信息和中断次数,自适应计算中断调整方向和步长,并将后果配置下发到设施,以达到晋升网络吞吐量的目标。因为目前的 virtio specification 不反对对单个队列进行中断参数下发,所以还无奈反对 netdim。
高性能网络组推动的 virtio-net: support the virtqueue coalescing moderation 的提案,能够让 virtio-net 反对动静中断调节,并对一一队列下发中断调节参数,目前该工作曾经被 virtio 社区投票通过(https://lists.oasis-open.org/archives/virtio-dev/202303/msg00…)。
virtio-net inner header hash
为了反对 VXLAN、GENEVE、GRE 等隧道协定基于内头部计算哈希,晋升 RSS 以及监控场景的收包性能,高性能网络 SIG 小组发动了 virtio_net: support inner header hash(https://lists.oasis-open.org/archives/virtio-dev/202303/msg00…)的提案。
本月 v9->v12 的探讨次要集中在 inner header hash 如何更好的反对对称哈希的主题上:
legacy GRE 等隧道协定基于 IP 头进行传输,其既没有内部端口号,也没有能够用于辨认 flow-specific 的字段,所以基于内头部计算哈希是十分必要的。另外,VXLAN、GENEVE 等古代隧道协定尽管都可基于 transport header 进行传输,即能够通过内部端口号来进步熵,然而在某些监控场景下,它们可能须要同一流的数据包被散列到同一个接管队列,然而同一条流可能会通过不同隧道封装,因而,必须应用内头部计算对称哈希能力达到此目标。
目前针对如何找出一个 key 或者 hash 算法能够同时对称散列 ipv4/ipv6 数据包的问题还没有达成统一,咱们会和社区进一步沟通以让 inner header hash 更加通用。
virtio-net 反对 AF_XDP zerocopy
背景:AF_XDP 是一个 bypass 内核的新的收发包框架。它能够把驱动的收包间接传递到用户态,用户态能够间接把包从用户态传递到驱动间接发送进来。它的性能相比于内核的 UDP PPS 能够晋升 3-7 倍。然而它要驱动进行 zerocopy 的反对。
目前这个系列的 patch set 因为数量太多,打算分成两个局部:
- virtio core 反对 DMA premapped。这个局部是让 virtio core 框架反对提交 DMA address 操作, 目前的实现外面,所有的 DMA 操作都在 virito core 外面实现的,咱们要让 virtio core 反对传递 DMA address 给 virtio core。因为 AF_XDP 会提前完成所有的地址的 DMA 操作,以及一些 virtqueue reset 的相干操作。
- 这部分曾经根本在社区的 review 通过。
- virtio-net 反对 AF_XDP。后续的工作在后面一个 patch set 的根底上,会提交到 net-next 分支上。
- 这部分的 patch 也进行了拆分,目前在推动对于 virtio-net 的 xdp 进行代码重构。这一实现曾经和社区根本达成了统一。
- 后续的 patch 会在下一个版本公布之后,net 局部蕴含了 virtio core 的代码更新之后再提交。
以上为 3 月高性能网络 SIG 月度动静,欢送大家退出共建(入群形式见文末)。更多 SIG 动静返回龙蜥官网获取:
龙蜥 SIG 主页链接:https://openanolis.cn/sig
高性能网络 SIG 主页:https://openanolis.cn/sig/high-perf-network
—— 完 ——