基于RDMA技术的Mayastor解决方案

news2024/12/25 9:28:59

1.  方案背景和挑战

1.1. Mayastor简介

OpenEBS是一个广受欢迎的开源云原生存储解决方案,托管于CNCF(云原生计算基金会)之下,旨在通过扩展Kubernetes的能力,为有状态应用提供灵活的持久性存储。Mayastor是OpenEBS项目中的关键存储引擎,它以其高性能、耐久性和易于管理的特点,为云原生应用提供了理想的存储解决方案。Mayastor的特点包括:

基于NVMe-oF:Mayastor利用NVMe-oF协议,这是一种基于网络的NVMe访问方法,允许NVMe设备通过以太网或其他网络结构进行远程访问,这有助于提高存储系统的性能和可扩展性。

支持多种设备类型:虽然Mayastor优化了NVMe-oF的使用,但它并不要求必须使用NVMe设备或云卷,也可以与其他类型的存储设备配合使用。

与Kubernetes集成:Mayastor作为OpenEBS的一部分,与Kubernetes紧密集成,允许开发人员和运维人员使用Kubernetes的原生工具(如kubectl)来管理和监控存储资源。

Mayastor适用于需要高性能和耐久性存储解决方案的云原生应用场景,特别是在边缘计算、大数据分析、流媒体处理等领域。它可以帮助开发人员构建高可用性和可扩展性的有状态应用,同时降低存储系统的复杂性和成本。通过利用NVMe-oF协议和最新一代固态存储设备的性能能力,Mayastor能够提供低开销的存储抽象,满足有状态应用对持久性存储的需求。

1.2. 问题与挑战

当前Mayastor只提供了NVMe over TCP技术实现数据存储服务,不支持NVMe over RDMA技术,这就不能充分挖掘NVMe SSD盘的性能优势,主要问题和挑战包括:

1、性能瓶颈:

Mayastor依赖于TCP来实现NVMe SSD的数据传输,这意味着它不可避免地继承了TCP的性能瓶颈。TCP的头部开销和拥塞控制机制限制了数据传输的有效速率,尤其是在处理大量小数据包时更为明显。对于需要高速访问和处理的NVMe SSD来说,这种限制可能显著影响Mayastor的整体性能。

2、延迟敏感应用的挑战:

对于那些对延迟要求极高的应用(如高频交易、实时数据分析等),Mayastor当前的TCP实现可能无法提供足够的低延迟保证。TCP的延迟增加和抖动问题可能导致这些应用的性能下降,从而影响业务决策的时效性和准确性。

3、资源消耗:

在高并发场景下,Mayastor处理TCP数据包时涉及的频繁中断和上下文切换会显著增加CPU的负载。这不仅会降低系统整体的计算效率,还可能影响Mayastor处理其他存储请求的能力,导致整体性能下降。

2.  方案介绍

2.1. 整体架构

本方案是基于驭云ycloud-csi架构,将Mayastor整合进来,通过Gateway提供数据通路的RDMA加速,提高IO性能。在Host侧通过DPU卸载,可以进一步解放工作节点上的CPU负载,获取更好的应用性能。整体架构如下所示(标绿和标蓝部分是自研组件):

本方案将不同的组件分别部署在不同的node,主要包含:

  • Master Node上,部署 csi的控制器csi-controller,用于创建volume和NVMe-oF target。
  • Worker Node上,部署csi-node-host,配合csi-node-dpu,通过volumeattachment发现DPU挂载的NVMe盘,然后执行绑定或者格式化。
  • DPU上,部署csi-node-dpu和opi-bridge。opi-bridge是卡对opi-api存储的实现;csi-node-dpu 负责给host侧挂盘。
  • Storage Node上,部署Mayastor和GATEWAY,GATEWAY是对SPDK封装的一个服务,用于后端Mayastor存储,对外提供NVMe target访问。

2.2. 方案描述

本方案主要由ycloud-csi、RDMA Gateway和Mayastor后端存储三个部分组成,下面将对这三个部分进行介绍。

2.2.1.  ycloud-csi

 通过ycloud-csi架构可以接入第三方的存储,让第三方存储很方便的使用DPU的能力。其包括ycloud-csi-controller、ycloud-csi-node-host和ycloud-csi-node-dpu,主要职责是为K8s的负载提供不同的存储能力。

2.2.1.1. Ycloud-csi-controller

Ycloud-csi-controller主要实现以下两类功能:

  • 针对pvc,调用第三方的controller,创建卷,创建快照和扩容等
  • 针对pod,提供存储的两种连接模式:AIO和NVMe-oF(因为opi目前只支持这两种)。如果是NVMe-oF,则调用不同的plugin在GATEWAY上创建NVMe-oF target。
2.2.1.2. Ycloud-csi-node

Ycloud-csi-node使用插件系统,对接不同的第三方存储。 ycloud-csi-node按node角色分为ycloud-csi-node-dpu、ycloud-csi-node-host和ycloud-csi-node-default,不同角色的csi-node功能不同,下面分别加以说明:

  • Ycoud-csi-node-dpu需要处理host和DPU侧的挂盘请求,根据不同的连接模式(AIO或者NVMe-oF),连接远程存储。
  • Ycloud-csi-node-host把DPU侧导出的volume挂载到pod中。
  • Ycloud-csi-node-default 也就是默认的工作模式,工作于smartNic场景。完成挂载volume,导入pod中。
2.2.2.  RDMA Gateway

RDMA Gateway是基于SPDK开发的存储服务,可以部署在io-engine相同的节点上,负责连接本地Mayastor的target,对外提供NVMe oF存储服务。

2.2.3.   Mayastor storage

后端存储采用Mayastor,管理不同节点上的硬盘存储。

2.3. 工作流程

2.3.1.  存储卷创建流程

用户的App运行在POD中。为了能存放持久的数据,需要给POD挂载存储卷。在启动POD之前,可以先创建好PVC,以供后面使用。创建PVC的过程如下:

    图中除了包含上一章节介绍的组件外,还有两个k8s系统提供的用于方便对接csi的组件:

  • external-provisioner:用户创建pvc时,该sidecar 会调用csi-controller的CreateVolume创建存储并创建pv与之前的pvc绑定。
  • Pv-controller:当底层存储准备好存储空间后,该sidecar会更新PVC的状态为bound。
2.3.2.  存储卷挂载流程

    在POD的描述yaml文件里,会指定使用的存储卷PVC。创建POD后,K8s的调度器会选择一个合适的节点来启动POD,然后attacher会把PVC连接到指定节点上,csi-node会把存储卷挂载到POD中。

    图中包含两个k8s系统提供的用于对接csi的组件:

  • external-attacher:会 watch VolumeAttachment 对象。根据 .spec.attacher 判断是不是需要自己处理,如果是则调用ControllerPublishVolume 方法,将.spec.persistentVolumeName 这个 Volume attach 到 .spec.nodeName 这个节点上。
  • AD controller: 会 watch Pod 对象,利用Pod 的 Volume 列表计算出 该 Node 上的 PV 列表,然后和 node.Status.VolumesAttached 值进行对比,没有attach 的话就执行 attach 操作。

3.  方案测试结果

3.1. Pod挂盘

    通过相应的 yaml 描述文件,可以完成创建PVC,删除PVC,创建/删除snapshot,在POD中挂载PVC,并验证操作成功。经验证可知,Mayastor原生支持的操作,在添加Gateway之后,仍可以支持。

    操作截图如下:

    运行kubectl describe pod snap-mayagate-1命令查看pod,结果如下:

    可以连进pod进行简单的写操作测试:

3.2. 性能对比

本方案基于单节点Mayastor创建单副本存储池,在以下测试场景与传统Mayastor方案进行对比:

  • io-engine threads:设置io-engine的线程个数为2,4,6,8,分别测试;
  • Transport:Mayastor采用NVMe over TCP,Gateway采用NVMe over RDMA;
  • IO方式:随机读,随机写,顺序读,顺序写,30%写的混合读写;
  • 不同的测试采样位置:
  • 在Gateway/io-engine本地,目标是使用本地连接提供测试基准数据
  • 在host通过nvme-cli的connect创建盘符来访问,这是host侧采用smartNic的场景
  • 在host通过DPU直通来访问存储,是我们主要关注的测试case
  • 考虑多个性能指标:测试的性能指标包括iops,吞吐,延迟和host cpu消耗。

(1) 随机写延迟分析

    随机写延迟的测试结果,如下图所示:

    对比TCP和RDMA在不同地方的采样,可知,io-engine所在节点本地访问延迟较小,在另外一个节点访问,TCP延迟增加了一个数量级,而RDMA延迟增加较小。

(2)顺序写带宽分析

    顺序写带宽的测试结果,如下图所示:

    通过在本地直接对于NVMe SSD硬盘测试,发现SSD可支持带宽大约2680MiB/s左右。从表中可以看到,使用nvme cli连接,无论是TCP还是RDMA,都可以接近后端存储支持的最大带宽。单独看DPU直通的数据,RDMA的性能远远超过TCP的性能。这是因为TCP由软件栈处理,需要消耗大量CPU资源,DPU内仅有4core,CPU资源不足造成的。

(3) 随机写IOPS分析

    随机写IOPS的测试结果,如下图所示:

    可以看到:

1.  RDMA的io-engine本地和host nvme-cli两个测试位置曲线接近,说明RDMA是完全卸载到硬件处理,性能好;

2.  TCP的两种方式性能有差别,特别是TCP DPU直通方式的上限是200kiops,说明瓶颈是在DPU的CPU上。

    另外把Host cli访问的数据单独拿出来,用这两行单独作图,如下:

可以看到,当io-engine thread个数为4时,RDMA Gateway已经基本可以压满后端存储;再增加threads个数影响不大。但TCP直连时,性能还是会随着threads增加而增大。这说明RDMA在相对较低的资源条件下就可以达到较高的性能,其加速效果较好。

(4)随机读IOPS分析

    随机读IOPS的测试结果,如下图所示:

    可以看到TCP DPU直通方式随机读的上限是150kiops,说明瓶颈是在DPU的CPU上。

    另外把Host cli访问的数据单独拿出来,用这两行单独作图,如下:

可以看到,当io-engine thread个数为2时,Mayastor TCP方式与RDMA Gateway相差不大,说明瓶颈在于存储后端;当io-engine thread个数大于等于4时,RDMA Gateway的性能要比TCP方式大约提高20%左右。

对于30%写的混合读写方式,由于读操作占主体,跟上面读操作的结果类似,在Host cli情形下,RDMA Gateway的性能要比TCP方式大约提高20%左右。

(5) Host侧CPU使用分析

在fio测试过程中,通过脚本记录Host上top命令的输出信息,获取CPU的使用信息。

下图是用Host cli连接时使用CPU的截图记录, TCP协议与RDMA协议的对比。(测试中Mayastor io-engine 采用8 core。)

    测试命令是:

fio -direct=1 -iodepth=64 -rw=randwrite -ioengine=libaio -size=100G -bs=4k -numjobs=16 -runtime=300 -group_reporting -filename=/dev/filename -name=Rand_Write_Testing

依次对于三个不同的挂接设备进行测试:/dev/nvme2n1是Host侧TCP cli;/dev/nvme3n1是Host侧RDMA cli;/dev/nvme0n26是DPU侧RDMA直通。

在3个挂载盘上分别做fio测试的IOPS结果分别是:655k,684k,646k。可以看到测试出的性能结果相差不大。上图是测试过程中通过脚本记录的CPU使用情况。可以看到,相对于TCP,使用RDMA协议可以节省大量的CPU。

4.  方案优势总结

1、显著提升性能:

通过前面测试数据可以看到,在DPU直通连入的场景下,本方案比原生的Mayastor方案随机写IOPS性能提升40%左右,随机读IOPS性能提升20%左右。在DPU直通的场景下,TCP方式延约200毫秒,RDMA方式约80毫秒,本方案可以减少60%左右的时延。这是因为本方案充分利用了RDMA的超低延迟和高性能特性。RDMA的零拷贝和绕过CPU的传输方式极大地减少数据传输过程中的延迟和CPU消耗,使Mayastor能够更高效地处理NVMe SSD的读写请求。

2、优化资源利用:

通过前面测试数据可以看到,采用RDMA的方式连接后端存储,相对于TCP方式可以节省50%左右的Host cpu。本方案通过NVMe over RDMA减少Mayastor对CPU和内存的占用,使系统资源能够更多地用于其他计算任务,这有助于提升Mayastor的整体稳定性和可靠性,同时降低运营成本。

3、增强可扩展性和灵活性:

RDMA技术还提供了更好的可扩展性和灵活性。随着数据中心规模的扩大和存储需求的增长,Mayastor可以通过支持NVMe over RDMA来更轻松地应对这些挑战。RDMA的远程直接内存访问特性使得跨节点的数据传输更加高效和可靠,有助于构建更强大的分布式存储系统。

4、支持更多应用场景:

有了NVMe over RDMA的支持,Mayastor将能够更好地满足那些对性能有极高要求的应用场景。无论是高频交易、实时数据分析还是大规模数据库事务处理,Mayastor都将能够提供更加稳定和高效的数据存储服务。

综上所述,从Mayastor影响的角度来看,NVMe over RDMA技术相较于TCP在性能、延迟和资源消耗方面均展现出显著优势。对于追求极致性能的数据中心和应用场景来说,Mayastor未来能够支持NVMe over RDMA将是一个重要的里程碑,有助于进一步提升其市场竞争力和用户体验。

本方案来自于中科驭数软件研发团队,团队核心由一群在云计算、数据中心架构、高性能计算领域深耕多年的业界资深架构师和技术专家组成,不仅拥有丰富的实战经验,还对行业趋势具备敏锐的洞察力,该团队致力于探索、设计、开发、推广可落地的高性能云计算解决方案,帮助最终客户加速数字化转型,提升业务效能,同时降低运营成本。

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

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

相关文章

maxscale

入门 官网:https://mariadb.com/kb/en/maxscale/ 开发语言:C 是否支持分片:不支持 支持的数据库:MySQL/Mariadb 路由规则:事务包裹的SQL会全部走写库、没有事务包裹SQL读写库通过设置Hint实现。其它功能通过配置文件实…

微服务通信

1、Feign远程调用 Feign是Spring Cloud提供的⼀个声明式的伪Http客户端, 它使得调⽤远程服务就像调⽤本地服务⼀样简单, 只需要创建⼀个接⼝并添加⼀个注解即可。 Nacos很好的兼容了Feign, Feign 默认集为Ribbon, 所以在Nacos下使…

M8020A J-BERT 高性能比特误码率测试仪

M8020A 比特误码率测试仪 J-BERT M8020A 高性能 BERT 产品综述 Keysight J-BERT M8020A 高性能比特误码率测试仪能够快速、准确地表征传输速率高达 16 或 32 Gb/s 的单通道和多通道器件中的接收机。 M8020A 综合了更广泛的功能,可以简化您的测试系统。 自动对信…

AGV导航方法大盘点:3大类,12小类

导语 大家好,我是社长,老K。专注分享智能制造和智能仓储物流等内容。 在自动化物流领域,自动导引车(AGV)扮演着至关重要的角色。它们不仅能够提高搬运效率,还能在各种环境中准确无误地完成任务。 而这一切的…

KVM虚拟化之命令行界面创建KVM虚拟机

环境:CentOS8 安装所需软件包 yum groupinstall -y "Virtualization*" 上传一个ISO镜像 使用指令创建KVM虚拟机 给KVM虚拟机创建一个磁盘 -f:指定磁盘类型为qcow2 使用指令创建一个虚拟机 virt-install \ --nameCentos-2 \ --vcpu 1 \ --memory 2048 \ -…

【SpringCloud】(一文通)服务注册/服务发现-Eureka

目 录 一. 背景1.1 问题描述1.2 解决思路1.3 什么是注册中心1.4 CAP理论1.5 常见的注册中心 二. Eureka 介绍三. 搭建Eureka Server3.1 创建 Eureka-server 子模块3.2 引入 eureka-server 依赖3.3 项目构建插件3.4 完善启动类3.5 编写配置文件3.6 启动服务 四. 服务注册4.1 引入…

Docker基础概述、Docker安装、Docker镜像加速、Docker镜像指令

1.为什么学docker 开发环境与测试环境不同,导致错误 因此docker提供解决方法———系统平滑移植,容器虚拟化技术 将代码与软件与配置文件 打包成一个镜像 2.docker的历练 创建一个开发环境内成为镜像文件再用docker使用镜像 3.什么是docker Docke…

泛型篇(Java - 泛型机制)(持续更新迭代)

目录 私聊 一、什么是泛型,泛型有什么用,为什么要用 1. 说法一 1.1 什么是泛型 1.2 泛型的使用 1.3 为什么要用泛型 2. 说法二 2.1 什么是泛型,泛型有什么用,为什么要用 2.2 怎么使用泛型,泛型可以作用在什么…

私有方法加事务注解会导致事务失效

这里idea其实已经提醒了使用事务不能用私有方法,这其实是个常见问题,这里主要就加深印象

XSS复现

目录 XSS简单介绍 一、反射型 1、漏洞逻辑: 为什么有些标签可以触发,有些标签不能触发 可以触发的标签 不能触发的标签 为什么某些标签能触发而某些不能 二、DOM型 1、Ma Spaghet! 要求: 分析: 结果: 2、J…

计算xpclr

1.conda安装xpclr 首先安装流程很轻松 conda create -n xpclr -c bioconda xpclr conda activate xpclr xpclr -h 2.按照要求准备文件 XPCLR - 简书 (jianshu.com) 根据教程准备文件,vcf,计算好的map,以及样本文件txt 其实官网也有介绍…

django学习入门系列之第九点《案例 Flask+MySQL新增用户》

文章目录 1 新增用户往期回顾 1 新增用户 from flask import Flask, render_template, request import pymysqlapp Flask(__name__)# 创建了网址 /nima和函数index的对应关系 # 以后用户在浏览器上访问/nima自动运行函数 app.route("/nima", methods[GET, POST]) d…

最小区间00

题目链接 最小区间00 题目描述 注意点 -10^5 < nums[i][j] < 10^5nums[i] 按非递减顺序排列找到一个 最小 区间&#xff0c;使得 k 个列表中的每个列表至少有一个数包含在其中 解答思路 参照题解&#xff0c;根据滑动窗口完成本题首先将所有的元素都提取出来并按升序…

为修复漏洞而准备的更新破坏了Windows-Linux双启动的计算机

上周是微软支持的 Windows 操作系统每月一次的"星期二补丁"活动。然而&#xff0c;一个本意是修复漏洞的补丁却给一些使用 Windows 和各种版本 Linux 的双启动电脑带来了问题。 Ars Technica报道称&#xff0c;该更新旨在修复名为CVE-2022-2601 的漏洞。该漏洞于 20…

Ps:首选项 - 工具

Ps菜单&#xff1a;编辑/首选项 Edit/Preferences 快捷键&#xff1a;Ctrl K Photoshop 首选项中的“工具” Tool选项卡允许用户根据自己的使用习惯和工作需求来定制 Photoshop 工具的行为。这些设置能够帮助用户提高操作的效率和精确度&#xff0c;提供更加流畅和符合个人习惯…

电影推荐(2)-----基于物品的协同过滤算法关联性分析

目录 1.算法的简单图解 2.算法的基本分析过程 3.算法的核心 4.算法的实现 5.关联分析的概念 5.1事务和事务库 5.2项 5.3项集 6.支持度 6.1受欢迎程度 6.2最小支持度 6.3关联条件 7.置信度 8.提升度 1.算法的简单图解 2.算法的基本分析过程 3.算法的核心 上面的全…

【个人学习】JVM(7):方法区概述、方法区内部结构、垃圾回收等

方法区 栈、堆、方法区的交互关系 从线程共享与否的角度来看 ThreadLocal:如何保证多个线程在并发环境下的安全性?典型场景就是数据库连接管理,以及会话管理。 栈、堆、方法区的交互关系 下面涉及了对象的访问定位 Person 类的 .class 信息存放在方法区中person 变量存放…

基于web的铁路订票管理系统

TOC springboot347基于web的铁路订票管理系统--论文 研究背景 近年来&#xff0c;由于计算机技术和互联网技术的飞速发展&#xff0c;所有企事业单位内部都是数字化、信息化、无纸化的发展趋势&#xff0c;随着这种趋势的发展&#xff0c;各种决策系统、辅助系统也应运而生&…

计量自动化终端上行通信规约

物理层 TCP 和 UDP 的传输接口 该类接口的登录链接和心跳检测采用链路测试服务&#xff0c;链路测试周期可设定。 参见 TCP/IP 协议规范。 串行通信传输接口 字节传输按异步方式进行&#xff0c;它包含 8 个数据位、1 个起始位“0”、1 个偶校验位 P 和 1 个停止位“1”。 …

SEO优化:如何优化自己的文章,解决搜索引擎不收录的问题

可以使用bing的URL检查&#xff0c;来检查自己的文章是不是负荷收录准测&#xff0c;如果页面有严重的错误&#xff0c;搜索引擎是不会进行收录的&#xff0c;而且还会判定文章为低质量文章&#xff01; 检查是否有问题。下面的页面就是有问题&#xff0c;当然如果是误报你也可…