Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >一文读懂NVMe、NVMe-oF和RDMA

一文读懂NVMe、NVMe-oF和RDMA

作者头像
SDNLAB
发布于 2022-08-26 09:41:47
发布于 2022-08-26 09:41:47
7.9K02
代码可运行
举报
文章被收录于专栏:SDNLABSDNLAB
运行总次数:2
代码可运行

过去,网络只要升级至 10Gb、40Gb 和 100Gb 以太网,就足以满足存储系统的联网需求了。但现如今,随着超快固态硬盘 (SSD) 和高速非易失性内存 (Non-Volatile Memory Express, NVMe) 的问世,网络存储已经发生了翻天覆地的变化。

什么是 NVMe?

传统的存储系统的基础是硬盘驱动器 (HDD) 旋转介质,这项技术历经 60 余年沉淀发展而成。随着设备尺寸越来越小且速度越来越快,驱动器技术不断演进,固态驱动器 (SSD) 的问世给存储世界注入了新的血液。

突然之间,磁盘驱动器可以提供媲美 RAM 的性能,具有非常低的延迟且传输速率超过 20 Gbps。这类 SSD 驱动器成为了传统存储系统中 HDD 的完美替代品。SSD 速度更快、时延更低、发热更少且功耗更低,并且无需对现有硬件进行重新设计。

对于存储行业而言,这意味着双赢。

但将 SSD 直接插入现有存储系统有一个缺点:它无法充分发挥出底层技术的性能提升潜力。想要真正发挥 SSD 设备的潜力需要重新审视存储系统连接到服务器的方式,存储器供应商为基于 SSD 的存储器设计了多种方法,其中最受业界关注的是直连 PCI Express (PCIe) 总线的设计。在构建了多个专有设备之后,存储和服务器行业于 2011 年联手创建了 NVMe(NVM Express)。

NVMe 是一种协议,而并非外形规格或接口规范。不同于其他存储协议,NVMe将 SSD 设备视为内存,而不是硬盘驱动器。NVMe 协议的设计从一开始就以搭配 PCIe 接口使用为目标,因此几乎直接连接到服务器的 CPU 和内存子系统。

在多核环境内,NVMe 效率更高,因为它允许每个核心独立地与存储系统进行交互。随着 NVMe 中的队列数量和深度增加,多核 CPU 会使 SSD 保持忙碌状态,消除内部性能瓶颈。NVMe 属于非统一内存体系结构 (NUMA) 感知协议,能够充分发挥新型 CPU 中的内存子系统设计的优势。相比使用 SATA 或 SAS 的 SSD,具有 SSD 和 NVMe 协议的存储器能够显著提升每秒输入输出 (IOPS) 并大大降低时延。

可以说 NVMe 能够将现代化 SSD 允许的并行度发挥到极致。因此 NVMe 能够减少 I/O 开销,并带来了许多性能提升,包括支持多个长命令队列和降低时延。

NVMe 的定义与规范

NVMe旨在定义主机软件如何通过 PCI Express (PCIe) 总线与非易失性存储器进行通信,适用于各种 PCIe 固态硬盘 (SSD) 。NVM Express 是由技术行业领导者组成的非营利性联盟,负责 NVMe 技术的定义、管理和市场推广。除了 NVMe 基本规范外,该组织还负责其他几项规范:NVMe over Fabrics (NVMe-oF) 基于网络连接架构使用 NVMe 命令, NVMe Management Interface (NVMe-MI)用于在服务器与存储系统中管理 NVMe/PCIe SSD。

NVMe 是专为 SSD 而设计的规范。它是一种更高效的接口,相比于串行 ATA (SATA) 之类的传统接口,它能够为 SSD 提供更低的时延和更高的可扩展性。此规范的第一部分对应的是主机控制接口。NVMe 体系结构引入了全新的高性能排队机制,支持 65,535 个 I/O 队列,每个队列含 65,535 条命令(称为队列深度或者未完成命令数)。队列映射到 CPU 核心,提供可扩展的性能。

NVMe 接口显著减少了存储器映射输入/输出命令的数量,并且能够调整操作系统设备驱动程序,使其在中断模式或轮询模式下运行,从而提升性能并降低时延。NVMe 规范还包含适用于 SSD 命令的主机到设备协议,供操作系统用于:读取、写入、清空、TRIM、固件管理、温控、报错等操作。

什么是 NVMe over Fabrics (NVMe-oF)?

NVMe 协议并非局限于在服务器内部连接本地闪存驱动器,它还可通过网络使用。在网络环境内使用时,网络“架构”支持存储和服务器元素之间的任意连接。NVMe-oF 支持组织创建超高性能存储网络,其时延能够媲美直连存储。因而可在服务器之间按需共享快速存储设备。NVMe-oF 可视为基于光纤通道的 SCSI 或 iSCSI 的替代品,其优势在于时延更低、I/O 速率更高,且生产力更优。

服务器(或其他主机)通过网络架构与 NVMe 存储器直接进行通信,或者通过控制器与之进行间接通信。如果存储器解决方案使用控制器,那么控制器就会与自己的存储器目标进行通信,可采用的方式包括 NVMe-oF或者其他专属或非专属解决方案。这取决于存储器供应商的实现方法和选择。

NVMe-oF 传输协议

光纤通道 (NVMe/FC):FC-NVMe 和 FC-SCSI 同样都基于 FCP,IO 交互基于 Exchange。FC-NVMe 基于传统的 FC 网络,通过升级主机驱动和交换机支持,FC-SCSI 和 FC-NVMe 能同时运行在同一个 FC 网络中。FC-NVMe 能最大化继承传统的 FC 网络,复用网络基础设施,基于 FC 物理网络发挥 NVMe新协议的优势。

TCP (NVMe/TCP):基于现有的 IP 网络,采用 TCP 协议传输 NVMe,在网络基础设施不变的情况下实现端到端 NVMe。

远程直接内存访问(InfiniBand 或以太网网络上支持的 NVMe/RDMA):NVMe over RDMA。RDMA 是承载 NoF 的原生网络协议,RDMA 协议除了 RoCE 外还包括 IB(InfiniBand)和 iWARP(Internet Wide Area RDMA Protocol)。NVMe over RDMA 协议比较简单,直接把 NVMe 的 IO 队列映射到 RDMA QP(Queue Pair)连接,通过 RDMA SEND,RDMA WRITE,RDMA READ 三个语义实现 IO 交互。

什么是 RDMA?

直接内存访问 (DMA) 指设备无需 CPU 干预即可直接访问主机内存的能力。远程直接内存访问 (RDMA) ,也就是在不中断远程机器系统 CPU 处理的情况下对该机器上的内存执行访问(读取和写入)的能力。

RDMA 主要优势

零拷贝:应用程序可以在不涉及网络软件栈的情况下执行数据传输。数据可以直接发送和接收到缓冲区,无需在网络层之间复制。

内核旁路:应用程序可以直接从用户空间执行数据传输,无需内核参与。

无 CPU 参与:应用程序可直接访问远程内存,无需在远程服务器内耗用任何 CPU 时间。无需任何远程进程(或处理器)的干预即可读取远程内存服务器。远程 CPU 的缓存不会被访问的内存内容填满。

如何使用 RDMA?

要使用 RDMA,需要具备 RDMA 功能的网络适配器:支持 RDMA 的以太网 NIC (rNIC),如 Broadcom NetXtreme E 系列、Marvell / Cavium FastLinQ 或 Nvidia / Mellanox Connect-X 系列。或者 InfiniBand 领域内的 InfiniBand 主机通道适配器 (HCA)(同样以 Nvidia / Mellanox Connect-X 为例)。网络的链路层协议既可以是以太网,也可以是 InfiniBand。这两种协议均可用于传输基于 RDMA 的应用程序。LinuxWindows 和 VMware操作系统支持内置 RDMA。

基于 RDMA 的 NVMe-oF 的种类

RDMA 是NVMe-oF的三种选项之一,同样的,RDMA 也有三种类型:

1)InfiniBand:InfiniBand 网络架构原生支持 RDMA。

2)RoCE(基于融合以太网的 RDMA):其方式是通过以太网来封装 InfiniBand 传输包。RoCE 有两种版本:

  • RoCEv1:以太网链路层协议(Ethertype 0x8915),支持在相同以太网广播域内任意两个主机之间进行通信。因此,仅限第 2 层网络,不可路由
  • RoCEv2:利用 UDP/IP(IPv4 或 IPv6)报头增强 RoCEv1,因此增加了第 3 层网络可路由性。NVMe/RoCEv2 默认使用 UDP 目标端口  4791。

3)iWARP(互联网广域 RDMA 协议):基于 IETF 标准的拥塞感知协议,如 TCP 和 SCTP。具有卸载 TCP/IP 流量控制和管理功能。

目前,RoCEv2 是供应商最常用的选择。

NVMe-oF 网络要求

协议要求

如上所述,NVMe-oF 解决方案不同,要求也不尽相同:

>专用网络

  • NVMe/IB:使用基于 InfiniBand 网络的 RDMA。在高性能计算 (HPC) 领域颇受欢迎。
  • NVMe/FC:需要第 5 代或第 6 代光纤通道网络。如果数据中心内已有光纤通道网络或交换基础架构,可以继续使用这些专用资源作为 NVMe-oF 的传输方式。但是,传统 4、16 或 32 Gbps FC部署速度可能不足以真正发挥出 NVMe 设备的性能提升。

>共享或融合以太网

1)仅 2 层网络

  • NVMe/FC(含 FCoE):它使用以太网/FC共享网络基础架构。FCoE 在 IP 层不可路由,并且不使用 RDMA。FCoE 与FC网络具有相同的要求和优势,但在基础架构的共享以太网部分中失去了网络可预测性。

2)支持 3 层网络

  • NVMe/TCP:使用具有 TCP/IP 传输的以太网网络,但不使用 RDMA。一般认为 NVMe/TCP 是最经济的解决方案之一,因为以太网网络架构比FC基础设施成本低,且实现难度更低。由于 NVMe/TCP 原生可路由,因此服务器与其存储器之间能够通过现有以太网数据中心网络进行通信,而无需专用FC交换机和 HBA。但 NVMe/TCP 存在一些缺点:它使用的是服务器的算力,这样一来服务器算力就无法全部用于运行应用程序。此外,其传输过程中时延比其他 NVMe-oF 协议更长,主要是因为需要维护多个数据副本,以免在路由级发生数据包丢失。
  • NVMe/iWARP:使用共享以太网网络和基于 TCP 的 RDMA。
  • NVMe/RoCEv2:使用共享以太网网络和基于 UDP 的 RDMA。

传输要求:有损传输 vs 无损传输

在以太网架构中存在有损传输与无损传输两种,RDMA 是两个设备之间的内存到内存传输机制,因此理论上它不能容许任何丢包。但由于 iWARP 基于 TCP 协议(以及 NVMe/TCP),它可以容许在传输中发生丢包和少量 TCP 重传,因此 NVMe/iWARP 和 NVMe/TCP 均可通过有损网络进行传输。

RoCE 则使用 UDP协议。根据 RoCEv2 规范,应该使用无损架构。不过RoCE 协议内部存在一种防范丢包的机制:发生丢包时,将把具有特定数据包序号 (PSN) 的 NACK 控制包发送给发送方,以供发送方重新发送该数据包。因此,所谓 RoCE 要求无损网络传输(无损以太网)的说法并不完全正确。RoCE 可以在无损网络或有损网络中运行。

原文链接:

https://aboutnetworks.net/nvme-and-nvmeof/

【活动专栏】

【转载须知】

若转载文章为原创文章,可在相应文章下或公众号后台留言;其他非转载类文章须在文首以不小于14号字体标明转载自SDNLAB

【投稿】

欢迎SDN、NFV、边缘计算、SD-WAN、TSN、5G 网络切片等网络方向的观点类、新闻类、技术类稿件。

联系人:kk__wu(微信号)

投稿邮箱:pub@sdnlab.com

详情请参考:SDNLAB原创文章奖励计划

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-07-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 SDNLAB 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Hive补充之窗口函数
窗口函数 1、hive窗口函数语法 hive中的窗口函数over() ,over()窗口函数的语法结构
Maynor
2021/04/09
1.1K0
大数据快速入门(10):Hive窗口函数
首先,需要认识到,窗口函数并不是只有 hive 才有的,SQL 语法标准中,就有窗口函数。
kk大数据
2020/11/11
2.6K0
hive sql 窗口函数
1) 窗口函数 Lag, Lead, First_value,Last_value Lag, Lead、这两个函数为常用的窗口函数,可以返回上下数据行的数据. LAG(col,n,DEFAULT) 用于统计窗口内往上第n行值 LEAD(col,n,DEFAULT) 用于统计窗口内往下第n行值, 与LAG相反 -- 组内排序后,向后或向前偏移 -- 如果省略掉第三个参数,默认为NULL,否则补上。
用户1217611
2020/06/19
1.2K0
hive sql 窗口函数
Hive 窗口函数最全讲解和实战
在深入研究Over字句之前,一定要注意:在SQL处理中,窗口函数都是最后一步执行,而且仅位于Order by子句之前 可以想象成sql的输出结果,就是窗口函数输入的结果。
kk大数据
2019/12/18
2.1K0
MySQL窗口函数,你最熟悉的陌生人~
  这三个点虽然平时用得少,但在面试中却常被问到。值得一提的是,很多面试官对问题竟然也是一知半解。。
陈哈哈
2021/12/31
1.1K0
MySQL窗口函数,你最熟悉的陌生人~
Hive窗口函数/分析函数详解
在sql中有一类函数叫做聚合函数,例如sum()、avg()、max()等等,这类函数可以将多行数据按照规则聚集为一行,一般来讲聚集后的行数是要少于聚集前的行数的。但是有时我们想要既显示聚集前的数据,又要显示聚集后的数据,这时我们便引入了窗口函数。窗口函数又叫OLAP函数/分析函数,窗口函数兼具分组和排序功能。
五分钟学大数据
2021/03/04
9020
Hive窗口函数/分析函数详解
Hive学习-lateral view 、explode、reflect和窗口函数
然后挂了FAILED: SemanticException [Error 10081]: UDTF's are not supported outside the SELECT clause, nor nested in expressions
顾翔
2024/09/10
4770
Hive学习-lateral view 、explode、reflect和窗口函数
MySQL8新特性窗口函数详解
本文博主给大家详细讲解一波 MySQL8 的新特性:「窗口函数」,相信大伙看完一定能有所收获。
wayn
2023/06/14
4800
MySQL8新特性窗口函数详解
SQL数据分析实战:好用的窗口函数
感觉这个春节假期在除夕过完之后吧,时间就过的非常快了,余额已经明显不足了。嗯,是开始可以学习起来了!
可以叫我才哥
2022/04/12
7860
SQL数据分析实战:好用的窗口函数
Mysql 窗口函数学习
窗口函数是数据库查询中的一个经典场景,在解决某些特定问题时甚至是必须的。个人认为,在单纯的数据库查询语句层面【即不考虑 DML、SQL 调优、索引等进阶】,窗口函数可看作是考察求职者 SQL 功底的一个重要方面。
王图思睿
2021/06/16
1.2K0
SQL 进阶挑战(26 - 30)
现有用户信息表user_info(uid用户ID,nick_name昵称, achievement成就值, level等级, job职业方向, register_time注册时间):
村雨遥
2022/06/27
4630
Hive常用窗口函数实战
本文介绍了Hive常见的序列函数,排名函数和窗口函数。结合业务场景展示了Hive分析函数的使用
Eights
2020/07/13
2.8K0
Hive窗口函数保姆级教程
在SQL中有一类函数叫做聚合函数,例如sum()、avg()、max()等等,这类函数可以将多行数据按照规则聚集为一行,一般来讲聚集后的行数是要少于聚集前的行数的。但是有时我们想要既显示聚集前的数据,又要显示聚集后的数据,这时我们便引入了窗口函数。窗口函数又叫OLAP函数/分析函数,窗口函数兼具分组和排序功能。
五分钟学大数据
2021/07/07
2.6K0
Hive窗口函数保姆级教程
hive窗口函数/分析函数详细剖析
在sql中有一类函数叫做聚合函数,例如sum()、avg()、max()等等,这类函数可以将多行数据按照规则聚集为一行,一般来讲聚集后的行数是要少于聚集前的行数的。但是有时我们想要既显示聚集前的数据,又要显示聚集后的数据,这时我们便引入了窗口函数。窗口函数又叫OLAP函数/分析函数,窗口函数兼具分组和排序功能。
五分钟学大数据
2021/01/21
9800
hive窗口函数/分析函数详细剖析
MySQL窗口函数怎么用
在 MySQL 8.x 版本中,MySQL 提供了窗口函数,窗口函数是一种在查询结果的特定窗口范围内进行计算的函数。
科技新语
2024/05/17
3080
2021年数据科学家面试:4个基本SQL窗口函数介绍以及示例
墨墨导读:在数据科学家岗位的面试中,窗口函数(WINDOW function)是SQL函数家族中经常会被问到的主题。在本文中,我会根据面试的问题,问题模式和解决问题的基本策略向你展示一些典型的窗口函数,并提供一些示例的分步解决方案。
数据和云
2021/03/09
1.2K0
2021年数据科学家面试:4个基本SQL窗口函数介绍以及示例
数分面试必考题:窗口函数
窗口函数的主要作用是对数据进行分组排序、求和、求平均值、计数等。对于数据从业者来说, sql窗口函数在实际工作中具备非常广泛的应用场景。可以大大的提高数据查询效率,同时也是数据类相关岗位的面试/笔试的必考点。所以不论是在职的分析师,还是准备找工作的同学,都必须要牢牢掌握窗口函数的概念及用法。感谢群友饭小米的投稿,接下来让我们详细了解一下窗口函数的前世今生吧。
Python数据科学
2020/12/15
2.4K0
数分面试必考题:窗口函数
SQL、Pandas、Spark:窗口函数的3种实现
窗口函数是数据库查询中的一个经典场景,在解决某些特定问题时甚至是必须的。个人认为,在单纯的数据库查询语句层面【即不考虑DML、SQL调优、索引等进阶】,窗口函数可看作是考察求职者SQL功底的一个重要方面。
luanhz
2021/04/26
1.6K0
Mysql8.0 新特性 窗口函数 公共表表达式
这里就不一一介绍了,就先介绍几个简单常用的窗口函数 公共表表达式, 感觉挺高级常用的,帮助快速开发.
Java_慈祥
2024/08/06
1930
Mysql8.0 新特性 窗口函数 公共表表达式
SQL 窗口函数的优化和执行
窗口函数(Window Function)是 SQL2003 标准中定义的一项新特性,并在 SQL2011、SQL2016 中又加以完善,添加了若干处拓展。窗口函数不同于我们熟悉的普通函数和聚合函数,它为每行数据进行一次计算:输入多行(一个窗口)、返回一个值。在报表等分析型查询中,窗口函数能优雅地表达某些需求,发挥不可替代的作用。
SQL数据库开发
2024/04/24
2340
SQL 窗口函数的优化和执行
相关推荐
Hive补充之窗口函数
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验