NVMe-oF RDMA vs. TCP延时测试对比:端到端SPDK的意义

前不久看到一篇《NVIDIA BlueField 再创 DPU 性能世界纪录》的新闻,该测试环境是2台服务器,每台各安装2块NVIDIA Bluefield-2 DPU,形成4条100GbE以太网直连,两端分别跑NVMe-oF Target(存储目标)和Initiator(主机端)。

测试结果包括TCP和RoCE(RDMA)两部分,上图是第一部分。我们看到,用户态SPDK to SPDK的512Byte小块读测试达到了41.5M(超过4100万)IOPS;Linux 5.15内核的FIO测试只有不到SPDK一半的性能,应该是CPU被I/O中断跑满了,4.18内核则又低了不少。

作为块存储设备,512B IOPS性能基本上只对Optane(傲腾)SCM介质有意义,比如Intel P5800X的4K随机读写、512Byte随机读IOPS指标分别为是150万和460万。对于传统NAND闪存SSD来说,小于4KB的IOPS通常也不会更高了,因为闪存页面大小一开始就是4KB(先进制程NAND的物理页面大多在8KB-16KB)。

另一点值得注意:在NVIDIA新闻的测试平台介绍中,并没有提到用的什么持久化数据盘,也就是说该测试应该是用DRAM内存模拟块设备来跑网卡的极限性能,没有提到随机访问那就是顺序IO了。

在4KB数据块测试中,用户态与内核的差距就没有那么大了,因为网卡的吞吐量快跑满了。其中SPDK to SPDK的读达到了345Gb/s,读写双向则是431Gb/s。

如果换用RoCE,Bluefield的512B小块IOPS,以及4KB双向带宽比TCP有进一步的提升。不过在这个新闻稿中没有提到延时数字,于是我又把https://spdk.io/doc/performance_reports.html 网站上Intel的测试报告翻了出来。

端到端SPDK延时只有5µs:这个数据落盘了吗?

上图引用自《SPDK NVMe-oF RDMA/TCP (Target & Initiator) Performance Report Release 21.10》这2份文档。Intel是用一台配有16个P4610 SSD的服务器跑NVMe-oF Target,前端通过2个CX-5 100GbE网卡直连2台NVMe-oF Initiator服务器。

这个测试环境,比前面NVIDIA那份新闻稿更接近真实应用。不过当我看到下面的延时数据时,还是怀疑这部分测试的IO是否都落盘(SSD)了?

上面图表是我从Intel报告的“Test Case 3: Linux Kernel vs. SPDK NVMe-oF RDMA Latency”中整理的数据,用iodepth=1和单任务能测出最短延时。

可以看出,使用Linux内核的NVMe-oF Initiator和Target测试,延时在16-18µs之间;如果只是把后端存储换成SPDK Target,延时降低到13µs多;只有IO负载请求和目标端都使用SPDK才能达到最短的5µs左右。

显然NAND闪存SSD应该跑不了这么快。可以参考下我在《NVMe-oF三种协议(FC、RDMA、TCP)对比:成败不只看性能》中对比的数字(如下图)——这个是包含SSD延时在内的。

图注:“不同NVMe-oF协议的延时对比主要看低并发/队列深度时。纯软件NVMe/TCP接近100微秒了;而RoCE只有大约30微秒;FC-NVMe在50微秒左右,TCP-Offload甚至比它还要稍好一些。”

记得在几年前的《SPDK实战、QoS延时验证:Intel Optane P4800X评测(5)》一文中,我测试过当时唯一能达到10µs以内延时的SSD(DRAM内存盘除外)。

当年我用FIO测试P4800X在Linux Kernel下的随机读延时为14.2µs,而用户态的SPDK则可以跑到6.49 µs。如果是NAND闪存SSD,正常应该在100 µs左右的水平;随机写有可能会较短,因为固态盘上有Cache。

在Intel报告的Latency测试配置部分,我认为是找到了答案(如果不正确的话,请读者朋友纠正我):bdev_null_create应该是创建了一个并不在SSD上的“空”设备,即等于10240MB的内存盘。为了对比测试NVMe-oF网络的延时,在这一段如此操作倒也合理。

同时我还对比了另一份本地盘的测试报告《SPDK NVMe BDEV Performance Report Release 21.10 》,其中延时数据如下:

上面这个才是实打实的NAND闪存SSD延时水平——我们看到Linux内核libaio引擎平均随机读延时为85µs,SPDK BDEV和io_uring则能够分别降低到71µs和73µs。

SPDK对NVMe/TCP网络延时贡献有限

这个图表整理自Intel报告的“Test Case 3: Linux Kernel vs. SPDKNVMe-oF TCP Latency”部分数据,可以看出NVMe/TCP的延时水平,以及SPDK在这里的价值。

本文主要就写这么多,下面给出本次阅读理解的结论:

1、SPDK的最大价值,依然是用户态Pooling,相比传统内核IRQ I/O能够显著节省CPU资源;

2、当使用Linux Kernel I/O时,NVMe-oF RoCE网络的延时约在16-18µs;NVMe/TCP则达到30 µs左右,并且TCP网络混合读写的延时还有增大;

3、在Target/Initiator端到端SPDK配置下,NVMe-oF RoCE延时降低到5µs左右;NVMe/TCP与内核态I/O相比也有改善,但仍在20µs以上;

注:除非特别说明,以上关于NVMe-oF延时的数据,都没有将SSD延时考虑在内。

简单来说,NVMe/TCP比基于RDMA和FC的NVMe-oF网络延时高,这是许多人都知道的。端到端SPDK能够降低延时,而且这种贡献在RoCE网络下表现更好。

附:SPDK(即IRQ vs. Polling)性能提升原理示意图

上面这个是经典的Polling模式,会把一个CPU核心长时间占满。

后来又有人提出了Hybird Polling(混合轮询),在没有I/O时可以插入Sleep睡眠来降低CPU负载。

参考资料

《NVIDIA BlueField 再创 DPU 性能世界纪录》

https://spdk.io/doc/performance

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Spring IoC 和 DI

文章目录 1. 什么是 Spring2. 什么是 IoC3. 什么是 DI4. IoC & DI 使用5. 获取 Bean 的方式5.1 根据类型获取 bean5.2 根据名称获取 bean5.3 获取bean对象的其他方式5.4 五大注解的关联 6. 方法注解7. 扫描路径8. Bean 的名称9. DI 详解9.1 属性注入9.2 构造方法注入9.3 Se…

残差网络 ResNet

目录 1.1 ResNet 2.代码实现 1.1 ResNet 如上图函数的大小代表函数的复杂程度,星星代表最优解,可见加了更多层之后的预测比小模型的预测离真实最优解更远了, ResNet做的事情就是使得模型加深一定会使效果变好而不是变差。 2.代码实现 impo…

【OpenAI】自定义GPTs应用(GPT助手应用)及外部API接口请求

11月10日,OpenAI正式宣布向所有ChatGPT Plus用户开放GPTs功能 简而言之:GPT应用市场(简称GPTs, 全称GPT Store) Ps: 上图为首次进入时的页面,第一部分是自己创建的GPTs应用,下面是公开可以使用的GPTs应用 一、创建GPTs…

Spring Cloud 微服务中 gateway 网关如何设置健康检测端点

主要是为了让 k8s 识别到网关项目已经就绪,但是又不想在里面通过 Controller 实现。因为在 Controller 中这样做并不是最佳实践,因为 Gateway 的设计初衷是专注于路由和过滤,而不是业务逻辑的处理。 在 Gateway 中配置健康检查端点可以通过以…

单向不带头链表的使用

单向不带头链表的使用 链表的创建&#xff1a; typedef struct LNode {SLDataType data;struct LNode* next; }LNode,*LinkList; 按位查找 LNode* GetElem(LinkList L, int i) {int j 1;LNode* p L->next;if (i < 0)return NULL;if (i 0)return L;while (p &&…

4种方法用Python批量实现多Excel多Sheet合并

目录 方法一&#xff1a;使用pandas库 方法二&#xff1a;使用openpyxl库 方法三&#xff1a;使用xlrd和xlwt库 方法四&#xff1a;使用os和glob库 在数据处理中&#xff0c;经常需要将多个Excel文件中的多个工作表进行合并。以下介绍了4种方法&#xff0c;使用Python批量实…

消费增值模式:引领消费者与平台共创双赢的新篇章

在数字化时代&#xff0c;消费模式正在发生深刻变革。消费者不再满足于单纯的购物行为&#xff0c;而是寻求更加个性化和有价值的消费体验。而平台也面临着如何吸引和留住消费者的挑战。消费增值模式作为一种新型的商业模式&#xff0c;正逐渐成为解决这一问题的关键。 消费增…

Java多线程并发篇----第十八篇

系列文章目录 文章目录 系列文章目录前言一、寄存器二、程序计数器三、PCB-“切换桢”四、上下文切换的活动五、引起线程上下文切换的原因前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了…

3D Guassians Splatting相关解读

从已有的点云模型出发&#xff0c;以每个点为中心&#xff0c;建立可学习的高斯表达&#xff0c;用Splatting即抛雪球的方法进行渲染&#xff0c;实现高分辨率的实时渲染。 1、主要思想 1.引入了一种各向异性&#xff08;anisotropic&#xff09;的3D高斯分布作为高质量、非结…

查看centos的CPU、内存、磁盘空间等配置信息

目录 查看CPU/proc/cpuinfo中的信息 查看内存/proc/meminfo中的信息 查看磁盘空间df 命令du命令使用fdisk命令 查看CPU /proc/cpuinfo中的信息 前置&#xff1a; [ltkjltkj front]$ cat /proc/cpuinfo| grep "physical id" physical id : 0 physical id : 0 physi…

智慧校园大数据平台架构

平台架构 基础硬件层 基础硬件层是由一组低廉的PC或服务器组合构建而成。基础硬件层主要承载着数据的存储、运算、容错、调度和通信等任务,对基础应用层下达的指令进行执行和反馈。 数据集成 大数据特征表现在实时、交互、海量等方面,并且以半结构化、非结构化数据为主,价…

机器学习系统或者SysMLDL笔记

在使用过TVM、TensorRT等优秀的机器学习编译优化系统以及Pytorch、Keras等深度学习框架后&#xff0c;总觉得有必要从理论上对这些系统进行一些分析&#xff0c;虽然说在实践中学习是最快最直接的(指哪儿打哪儿、不会哪儿查哪儿)&#xff0c;但恶补一些关于系统设计的一些知识还…

搜索经典题——填充 9*9矩阵

题目&#xff1a;给定一个九行九列矩阵&#xff0c;填充矩阵元素&#xff0c;要求&#xff1a; 1、每一行每一列&#xff0c;每个小九宫格&#xff08;图片画粗的地方就是&#xff09;不能包含相同元素 2、每一行&#xff0c;每一列&#xff0c;每个小九宫格均会完整出现1-9的数…

Python进程池multiprocessing.Pool

环境&#xff1a; 鲲鹏920:192核心 内存&#xff1a;756G python&#xff1a;3.9 python单进程的耗时 在做单纯的cpu计算的场景&#xff0c;使用单进程核多进程的耗时做如下测试&#xff1a; 单进程情况下cpu的占用了如下&#xff0c;占用一半的核心数&#xff1a; 每一步…

第二百六十九回

文章目录 概念介绍设置方法示例代码内容总结 我们在上一章回中介绍了Card Widget相关的内容&#xff0c;本章回中将介绍国际化设置.闲话休提&#xff0c;让我们一起Talk Flutter吧。 概念介绍 我们在这里说的国际化设置是指在App设置相关操作&#xff0c;这样可以让不同国家的…

SAP PI之Rest adapter

一&#xff0c;简介 REST风格接口是以http为传输协议&#xff0c;以xml或json或text为有效负载。下图展示了REST到XI再返回的一个过程&#xff0c;一个REST接口包含的信息有&#xff1a;服务URL、URL中带的参数、http方法(post/get/put等)、http头部、body部分的有效载荷。而X…

2023年全球软件质量效能大会(QECon北京站):核心内容与学习收获(附大会核心PPT下载)

此次大会的主题为“智能时代的质量新篇章”。来自全球的软件质量与效能专家、企业领袖、技术研发人员等齐聚一堂&#xff0c;共同探讨软件质量与效能的新理念、新技术、新实践。 一、大会的核心内容 1、智能时代软件质量的新挑战与机遇 随着人工智能、大数据等技术的快速发展…

react、Vue打包直接运行index.html不空白方法

react vue 在根目录下创建 vue.config.js 文件&#xff0c;写入 module.exports {publicPath: ./, }

【SpringCloud】这一次终于使用MQ解决了Eureka服务下线延迟感知问题

前言 其实&#xff0c;“通过Redis手动更新Ribbon缓存来解决Eureka微服务架构中服务下线感知的问题”是一种解&#xff0c;但不是最优解 1.痛点 上一篇文章的标题是&#xff1a; 通过Redis手动更新Ribbon缓存来解决Eureka微服务架构中服务下线感知的问题 当时在文章的末尾就…

matlab 直道转向时方向盘最小转角算法

1、内容简介 略 33-可以交流、咨询、答疑 2、内容说明 汽车主动转向&#xff0c;直道转向时方向盘最小转角算法&#xff0c;一个m脚本和simulink的计算结果 略 3、仿真分析 略 4、参考论文 汽车主动转向关键技术研究