高性能网络 SIG 月度动态:推动 virtio 支持动态中断调节及更灵活的分流机制

news/2024/11/23 8:04:01/

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

01  SIG 整体进展

本月高性能网络 SIG 的主要工作聚焦在 virtio 对 NetDIM 的支持以及多个 virtio 提案的发起。

本月关键进展:

1. SIG 推动完成了 NetDIM 的 virtio 标准和 OS 代码,修复了多个上游问题并在 sockperf benchmark 中获得 20%+ 的吞吐提升。

2. SIG 与 Nvidia、Marvell 等合作发起了 [PATCH requirements v5 5/7] net-features: Add n-tuple receive flow filter]() 的提案,让 virtio 支持接收流过滤的能力,提供灵活的流规则配置方法。以及 [PATCH v2] virtio-net:support the RSS context]() 提案,使 virtio 支持多个 RSS (Receive Side-Scaling) 配置上下文。

02  ANCK

安全

本月网络方向共计修复 9 个 CVE,覆盖 sched/ipvlan/ipv6/netfilter/xfrm 等模块,CVE 列表:

CVE-2023-3609、CVE-2023-3611、CVE-2023-3090、CVE-2023-2156、CVE-2023-3773、CVE-2023-3776、CVE-2023-3812、CVE-2023-3390、CVE-2023-4147。

03  SMC

本月高性能网络 SIG 在 SMC 领域的工作主要聚焦在上游 SMC-D 虚拟设备拓展方案的推动。

SMC-D 虚拟设备拓展

SMC-D 被用于物理机内部的 SMC 加速,在过去只能配合 IBM s390 架构中的 ISM 设备使用。SIG 积极推动 SMC-D 虚拟设备拓展,以便于在其他架构中享受 SMC-D 带来的性能提升。

本月的 SMC 开发者会议上确定了使用 UUID 作为 SMC-D 虚拟设备的 GID,从而在无中心的情况下确保虚拟设备 GID 的唯一性。在 Linux 中将使用最为常用的 UUIDv4 作为 SMC-D loopback 等虚拟设备 GID 的实现方式。此外,除 0-0x7FFF 以外的 VCHID 将预留 4K 个给 SMC-D 虚拟设备,以帮助 SMC-D 握手时快速分辨对端虚拟设备是否可达。

04  Virtio

本月高性能网络 SIG 在 virtio 领域的工作,主要聚焦在:

(1)测试动态中断调节性能数据。

(2)推动接收流过滤、RSS Context 的标准方案。

动态中断调节

动态中断调节 NetDIM 算法通过统计设备队列的流量信息,自适应调整网卡中断频率,以达到吞吐提升的目的。

高性能网络小组推动完成了 NetDIM 的 virtio 标准和 OS 代码,发现并修复了多个上游内核问题。测试结果显示,在 sockperf benchmark 中可以最大提升 20+% 的吞吐。

高性能网络小组进一步分析了 NetDIM 的时延影响,发现 NetDIM 会对低载小包时延产生不利影响,这是由于 NetDIM 算法设计更加关注吞吐提升,没有针对性关注时延提升而造成的。我们会针对此时延问题尝试作出进一步的优化。

接收流过滤

接收流过滤(Receive Flow Filter)能力提供接收方向的数据流处理,包括数据流导向、数据流过滤等,为用户提供了灵活的流规则配置方法。数据流导向功能基于用户在 virtio 网卡上配置的数据流规则,可以将匹配了某个规则的数据流导到对应的单个或多个目的队列。数据流过滤功能可以将匹配了某个规则的数据报文丢弃。

高性能网络小组与 Nvidia、Marvell 等合作发起了 [PATCH requirements v5 5/7] net-features:Add n-tuple receive flow filter]() 的提案,让 virtio 支持接收流过滤的能力,同时在设计时考虑了网络通用加速方法 Accelerated RFS 的实现要求,可作为后续流规则相关配置方法的基础能力。

RSS Context

当前 virtio 仅支持单个默认 RSS (Receive Side-Scaling) 配置,这无法满足一些场景对队列流量隔离等的需求,导致网络设备流量管理不灵活的问题。针对此问题,高性能网络小组发起了 [PATCH v2] virtio-net: support the RSS context]() 提案,以支持 virtio 实现多个 RSS 配置上下文。该提案支持查询设备能力,修改、删除、新增 RSS context等。

virtio-net + AF_XDP

高性能网络小组一直以来都在主导推进 virtio-net 对于 AF_XDP 的支持。2年多以来,我们已经解决了多个相关的基础依赖问题。

目前这块的工作取得了一些决定性的进展:Virtio Core 支持 dma premapped 的特性目前已经被合并进入了 Linux 6.6。这意味着, virtio-net 支持 AF_XDP 的最后一块依赖被补齐了。我们会尽快整理后续 virtio-net 支持 AF_XDP 的 patch 提交到上游社区,完成这一工作。

注意:基于龙蜥 Alinux3 及 Alinux2 携带的 ANCK 内核都已经包含了 virtio-net 支持 AF_XDP 的特性。欢迎尝试!

相关链接:

高性能网络 SIG 主页:

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

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

—— 完 ——


http://www.ppmy.cn/news/1114344.html

相关文章

【iOS】push与present Controller的区别

文章目录 前言一、push方法二、pop方法三、present方法四、dismiss方法五、dismiss多级的方法举例动画 前言 iOS推出与退出界面有两种方式——push与present,接下来笔者分别介绍这两种方式 一、push方法 SecondViewController *second [[SecondViewController all…

UDP通信

UDP通信 1、UDP2、UDP通信流程3、UDP服务器代码4、UDP客户端代码5、应用场景 1、UDP /* udp传输层协议,和tcp是一样的 特点:面向无连接的,不安全的,报式传输协议1.无连接:ldp通信的时候不需要connect1) 通信不需要建立连接2) 如果…

uniapp打包安卓后在安卓屏上实现开机自启动

实现开机自启动(使用插件) 打开插件地址安卓开机自启动 Fvv-AutoStart - DCloud 插件市场 使用方法 选择你要开启自启动的项目 在项目的manifest.json中app-plus下写入以下代码 注意需要替换 android_package_name 为自己的,不然无法进行安卓apk打包 "nativePlugins&q…

创造性地解决冲突

1、冲突的根本原因是矛盾双方存在不可调和的目标冲突。 2、要知己知彼: 知己:就是对自己的问题、需求进行客观定义,说明需求和问题的意义或价值、阐述解决方案和期望效果; 知彼:站在对方立场,深挖对方真…

java.lang.ClassCastException: android.os.BinderProxy cannot be cast to ...

项目开发遇到下面这个报错了! 问题原因 直接说原因,就是因为进程间不能直接传递对象,应该传递该Binder对象的映射(代理对象),所以类型转换就出错了。如果在同一个进程中,直接传递对象没有关系&a…

js实现队列操作

//队列操作函数 function Mesh_Send_List(){ this.dataStore []; //新建队列 this.enqueue function enqueue ( element ) { //向队列末尾添加一个元素,直接调用 push 方法即可 this.data…

代码随想录Day37 | 738. 单调递增的数字 | 968. 监控二叉树

738. 单调递增的数字 class Solution { public:int monotoneIncreasingDigits(int N) {string strNum to_string(N);// flag用来标记赋值9从哪里开始// 设置为这个默认值,为了防止第二个for循环在flag没有被赋值的情况下执行int flag strNum.size();for (int i s…

Scala 高阶:Scala中的模式匹配

一、概述 Scala中的模式匹配(case)类似于Java中的switch...case,但是Scala的模式匹配功能更为强大。通过模式匹配,可以匹配更复杂的条件和数据结构,包括常量、类型、集合、元组等。而 Java 的 switch 语句只能用于匹配…