高性能网络 SIG 月度动态:长期投入得到业界认可,新增一位 virtio reviewer

news2024/10/5 6:44:19

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

01 本月 SIG 整体进展

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

本月关键进展:

  • SIG 成员 Xuan Zhuo 成为上游 Linux kernel 社区 virtio core/virtio-net 子系统的 reviewer。Xuan Zhuo 过去三年在 virtio 社区的投入得到了广泛的认可。

  • SIG 本月完成了上游 virtio-net 对 XDP socket 零拷贝的支持,可以大幅提升 virtio 下 XDP socket 的发包性能。该特性在龙蜥的 ANCK 内核上已经支持了一年多的时间,现在,我们将该特性贡献到 Linux 上游社区,目前社区已完成 virtio-net XDP 重构部分的 review,预计 5.8 窗口期后合入。

02 ANCK 内核网络

本月网络方向新增安全漏洞修复:CVE-2023-1074 (SCTP 相关)。

03 高性能网络协议栈 SMC

本月高性能网络 SIG 在 SMC 领域的工作,主要聚焦在推动本机高性能通信,以及基于 eBPF 的策略替换两个方案在 Linux 上游社区的讨论。

本机高性能通信方案

本机的 loopback 和容器间(跨 netns)通信已经是一种常见的数据路径,在数据处理和云原生场景有着非常广泛的使用。例如云原生场景下,service mesh 通过 proxy 进程与业务进程、sidecar 进行通信。SMC 提供了本机(loopback 和容器间)的高性能通信方案,对比传统的用户态 IPC、以及内核的 TCP loopback 或者 UNIX domain socket 等方案,除了性能具有优势之外(详细数据可参考 LWN 链接 https://lwn.net/Articles/929934/),同时对于应用透明无侵入、无修改。

在之前版本的 review 中,社区给出了一些积极的反馈:s390 PCI maintainer Niklas 认可了使用 64bit 随机 GID + 64 bit token 组成的 loopback 协商流程。从概率上看,要达到 10^(-15) 的冲突概率,需要尝试 8.2×10^11 次,因此随机 GID 可以接受。我们与 IBM 的协议所有者 Jerry 进行了充分的沟通,接下来等待社区讨论完成并确定最终的方案。

本月 SIG 发送了 SMC loopback 的方案 v5 版本至 Linux 上游社区,新版本中增加 SEID 的选择逻辑,修复 unregister_dmb 的潜在问题,修复在 s390 架构下运行异常的问题。

基于 eBPF 策略替换方案

SMC 提供了动态回退 TCP 的能力,当前的回退策略的决策因素主要是由 RDMA / ISM 连接建立是否成功。由于 SMC 短链接性能不如 TCP,为了让 SMC 更加通用,因此计划给 SMC 增加基于策略的回退 TCP 的能力,帮助 SMC 更好的适配不同应用模型和场景。

本月发送了 RFC 和正式的替换补丁到 Linux bpf 和 net 社区,得到了 eBPF maintainer 的反馈,包括一些模块符号到处、文件名等问题,我们正在修改并继续推动 SMC 和 bpf 社区接受方案。

04 virtio

社区影响力

本月高性能网络 SIG 成员 Xuan Zhuo 成为 linux kernel 社区 virtio core/virtio-net 子系统的 reviewer。Xuan Zhuo 过去三年在 virtio 社区的投入得到了社区的广泛认可。

本月 SIG 还修复一个 virtio net 的在 xdp 场景下的 bug:[PATCH net] virtio_net: bugfix overflow inside xdp_linearize_page() - Xuan Zhuo

virtio-net 支持 AF_XDP zerocopy

AF_XDP 是一个 bypass 内核协议栈的新收发包框架。它可以把驱动的收包直接传递到用户态, 也可以把包直接从用户态传递到驱动发送出去。它的性能相比于内核的 UDP 协议栈可以提升 3-7 倍 PPS。但是它依赖驱动进行 zerocopy 的支持。这个工作分成几个部分:

  • virtio core 支持 DMA premapped

这部分是让 virtio core 框架支持提交 DMA address 操作(链接)。目前的实现中所有的 DMA 操作都在 virito core 里面完成,我们要让驱动支持传递 DMA address 给 virtio core,因为 AF_XDP 会提前完成所有的地址的 DMA 操作以及一些 virtqueue reset 相关的操作。

这部分涉及到了 virtio 的 DMA 相关的 API 使用问题。由于 virtio 在一些场景下不能使用 DMA API,我们希望 DMA API 或 AF_XDP 可以支持 virtio 这一场景。这引发了相对广泛的讨论,目前的结论是:

  • AF_XDP 在未来可能会转向使用 dma-bufs 来处理 DMA API。

  • DMA API 不支持 virtio 这样的特殊场景。

这些因素导致我们的推进工作陷入了非常大的困难。经过考虑与讨论, 我们考虑暂时不支持 virtio 没有 VIRTIO_F_ACCESS_PLATFORM 的场景,这通常出现在一些旧的 virtio 设备上。

  • virtio-net XDP 重构

这部分已经完成 review,将会在 5.8 窗口期之后再提交一个版本。

virtio-net inner header hash

隧道协议有时会将不同流的数据包封装成外头部五元组相同的数据流,这些数据流会被散列到相同的接收队列,进而损失 RSS 的性能。为了让 virtio 对隧道协议支持内头部哈希,高性能网络 SIG 发起了 virtio_net: support inner header hash 的提案,希望将其在 virtio 中标准化下来。

本月 v12->v13 和 virtio 社区讨论了之前 inner header hash 的设计把设备侧支持的隧道类型放置在 PCI device-specific 的配置空间的问题,这种设计的优点是作为设备常驻能力可以在初始化时只被驱动读取一次,但是随着 virtio 现在越来越多新特性的增加,让设备特定的配置空间越来越臃肿对一些 tiny 设备是十分不友好的,因此讨论之后将从设备配置空间移到 control queue(新方法的缺点是每次用户的 GET 查询都会返回 configured 和 supported 两种字段,但是可接受的)。

另外,inner header hash 支持的隧道类型的数量社区仍在质疑,社区更加倾向于对 legacy 协议的支持,以让 legacy 协议享受到熵增加带来的 rss 性能提升,例如 GRE-2784 等,但是我们想支持更多的 modern 隧道协议,例如 VXLAN/GENEVE 等,以让这些协议可以基于内头部来做对称哈希,在某些场景下获取到 less locking,warm cache 等性能提升,这块仍需讨论。

以上为 4 月高性能网络 SIG 月度动态,欢迎大家加入共建。更多 SIG 动态前往龙蜥官网获取。

相关链接

高性能网络 SIG 主页:

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

SMC loopback 方案 v5 版本:

https://lore.kernel.org/netdev/1682252271-2544-1-git-send-email-guwen@linux.alibaba.com/

DMA address 操作:

https://lore.kernel.org/all/20230425073613.8839-1-xuanzhuo@linux.alibaba.com/

virtio-net XDP 重构链接:

https://lore.kernel.org/all/20230508061417.65297-1-xuanzhuo@linux.alibaba.com/

virtio_net: support inner header hash :

https://lists.oasis-open.org/archives/virtio-dev/202304/msg00465.html

—— 完 ——

为给大家提供更好的内容和服务,龙蜥社区诚挚地邀请大家参与问卷调研,请扫描下方二维码或点此链接填写,我们将筛选出优质反馈,送出龙蜥周边!

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/514842.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Hive概述和安装

hive简介 Hive:由Facebook开源用于解决海量结构化日志的数据统计工具。 Hive是基于Hadoop的一个数据仓库工具,将结构化的数据文件映射为一张表,并提供类SQL(HQL)查询功能。 Hive本质:将HQL转化成MapReduce程序 (1&am…

无锁队列实现及使用场景

写在前面 在看无锁队列之前,我们先来看看看队列的操作。队列是一种非常重要的数据结构,其特性是先进先出(FIFO),符合流水线业务流程。在进程间通信、网络通信间经常采用队列做缓存,缓解数据处理压力。根据…

device_node转换成platform_device

device_node转换成platform_device 文章目录 device_node转换成platform_device转换规则主要核心函数of_default_bus_match_tablearmarm64of_platform_register_reconfig_notifier Linux内核是如何将device_node转换成platform_deviceof_platform_populate函数处理根节点下的子…

在ubuntu连接Xlight FTP Server

一 在windows上搭建服务器 http://www.xlightftpd.com/download.htm 使用英文版,使防止在ubuntu中登录中文版时,显示乱码 新建用户和用户对应的服务器目录 如下所示,默认只有读权限 全都勾选 勾选完毕后的效果 在目录中放一个文件&#…

10款常用的原型设计工具,包含一键生成原型工具

原型图是产品设计师日常工作的“常客”,原型图软件也扮演着产品设计师的“武器”角色。 许多新产品设计师不知道如何选择原型图软件。本文盘点了10个优秀的原型图软件,让我们来看看。 1.即时设计 即时设计是一款免费的在线 UI 设计工具,无…

【Java数据结构】排序

排序 插入排序希尔排序选择排序堆排序冒泡排序快速排序序列的分割Hoare法挖坑法快慢指针法 优化1 - 三数取中优化2- 数据规模小时的插入 归并排序 插入排序 直接插入排序是一种简单的插入排序法,其基本思想是: 把待排序的记录按其关键码值的大小逐个插…

Jetson Orin环境安装Opencv+Cuda以及vscode环境配置

文章目录 一:Opencv Cuda源码的下载、编译1.卸载jetson上自带的无cuda加速Opencv2.安装Opencv依赖库3.下载 OpenCV 和 opencv_contrib 源码4.编译安装 OpenCV、opencv_contrib 二:Opencv 的环境配置三:Vscode 中的Opencv环境配置四&#xff…

系统分析师---系统建模相关高频考试知识点

系统规划---成本效益分析 评价信息系统经济效益常用的方法主要有成本效益分析法,投入产出分析法和价值工程方法。盈亏平衡法常用于销售定价; 可行性分析 系统规划是信息系统生命周期的第一个阶段,其任务是对企业的环境、目标以及现有系统的状况进行初步调查,根据企业目标…

张正友相机标定原理

相机标定 记录1.1 张正友相机标定相关 参考 记录 最小二乘法:A^T A x 0 奇异值分解的办法求解最小二乘法 因为可以假设标定板平面在世界坐标系Z0的平面上, 1.1 张正友相机标定相关 单目相机标定实现–张正友标定法(包含具体的实现以及C代码&#xff0…

《花雕学AI》ChatGPT Shortcut Chrome 扩展:让生产力和创造力加倍的 ChatGPT 快捷指令库

你是否想要与一个智能的对话伙伴聊天,或者让它帮你完成各种任务,如写作、编程、摘要、翻译等?如果是的话,你可能会对 ChatGPT 感兴趣。ChatGPT 是一个基于 GPT-3.5 的对话式人工智能,可以与用户进行自然、流畅、有趣的…

文件看不见了,内存还占着容量的找回教程

U盘文件突然不见了但还占用内存空间的解决方法 如果文件看不见了但内存占用仍然存在,可能是因为以下原因: 文件被隐藏。某些操作系统允许隐藏文件,这些文件只能在文件浏览器中被找到。 文件被损坏。如果文件损坏,它可能不会显示在…

Python图形化编程开源项目拼码狮PinMaShi

开源仓库 #项目地址 https://github.com/supercoderlee/pinmashi https://gitee.com/supercoderlee/pinmashiPinMaShi采用electron开发,图形化拖拽式编程有效降低编程难度,对Python编程的初学者非常友好;积木式编程加快Python程序的开发&…

黑马Redis笔记-高级篇

黑马Redis笔记-高级篇 1、Redis持久化(解决数据丢失)1.1 RDB持久化1.1.1 定义1.1.2 异步持久化bgsave原理 1.2 AOF持久化1.3 RDB和AOF比较 2、Redis主从(解决并发问题)2.1 搭建主从架构2.2 主从数据同步原理2.2.1 全量同步2.2.2 增…

基于哈里斯鹰算法优化的核极限学习机(KELM)分类算法 -附代码

基于哈里斯鹰算法优化的核极限学习机(KELM)分类算法 文章目录 基于哈里斯鹰算法优化的核极限学习机(KELM)分类算法1.KELM理论基础2.分类问题3.基于哈里斯鹰算法优化的KELM4.测试结果5.Matlab代码 摘要:本文利用哈里斯鹰算法对核极限学习机(KELM)进行优化&#xff0c…

【小梦C嘎嘎——启航篇】基本语法格式:namespace ?

基本语法格式:namespace ?😎 前言🙌namespace 是什么?namespace 的意义何在? 总结撒花💞 😎博客昵称:博客小梦 😊最喜欢的座右铭:全神贯注的上吧&…

springboot + vue 部署 阿里云云服务器 ECS

安装所需文件 安装mysql5.7 下载MySQL的yum源配置 wget http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm安装MySQL的yum源 yum -y install mysql57-community-release-el7-11.noarch.rpm使用yum方式安装MySQL5.7(下载需要点时间&#xf…

【 断电延时继电器 电源监视 导轨安装 JOSEF约瑟 HJZS-E202 AC220V】

品牌:JOSEF约瑟型号:HJZS-E202名称:断电延时继电器额定电压:110、220VDC/AC;100VAC触点容量:250V/5A功率消耗:≤4.2W返回系数:10%额定电压 系列型号: HJZS-E202断电延时…

4.4 栈实现及其应用

目录 栈 顺序栈 创建栈: 清空栈: 判断栈是否空 : 进栈 : 出栈 : 取栈顶元素: 栈 栈是限制在一端进行插入操作和删除操作的线性表(俗称堆栈) 允许进行操作的一端称为“栈顶” 另一固定端称为“栈底” 当栈中没有元素时称为“空栈”…

Robbin负载均衡详解及实践---SpringCloud组件(三)

Robbin负载均衡详解及实践 一 为什么使用Robbin?二 Robbin概念三 负载均衡实践1.启动eureka客户端2.启动多个provider服务,注册到eureka3.在consumer端配置负载均衡参数 四 Robbin源码剖析 一 为什么使用Robbin? 在Eureka详解及实践—Spring…

SAS初识

1、SAS常用工作窗口 “结果”(Result)窗口——管理SAS程序的输出结果; “日志”(Log)窗口——记录程序的运行情况; “SAS资源管理器”(Explore)窗口; “输出”&#xff0…