[转帖]焱融全闪系列科普| 为什么 SSD 需要 NVMe?

系列,科普,为什么,ssd,需要,nvme · 浏览次数 : 0

小编点评

**NVMe 的由来** NVMe 是一个非易失性存储器 (SSD) 的标准协议,它于 2009 年下半年由 Intel、镁光和三星等厂商共同制定。NVMe 是一种 Host 与 SSD 之间通信的协议,它在 PCIe 接口之上的协议标准,在协议栈中隶属应用层。 NVMe 的特点和优势主要体现在以下几点: * 低延迟:NVMe 中使用的 MSI-X 中断管理技术可以有效降低 CPU 到 SSD 的路径长度,从而减少 IOPS 延迟。 * 高带宽、高 IOPS 性能:NVMe 使用多队列和并行处理技术,可以提供更高的 IOPS 和带宽。 * 低功耗:NVMe 中加入了自动功耗状态切换和动态能耗管理功能,可以降低功耗。 * 高性能:NVMe 可以实现非常低的延迟和高性能,这使其成为用于存储数据的理想选择。 **NVMe 和 AHCI 的关系** NVMe 是 AHCI 的升级版本,AHCI 是 Serial ATA Advanced Host Controller Interface 的标准。AHCI 是一种单向通信协议,它只能从主机向设备发送命令。NVMe 是一个多向通信协议,它可以从主机向设备发送命令,也可以从设备向主机发送命令。 **NVMe 的性能** NVMe 的性能优于 AHCI,主要体现在以下几个方面: * 低延迟:NVMe 中的 MSI-X 中断管理技术可以有效降低 CPU 到 SSD 的路径长度,从而减少 IOPS 延迟。 * 高带宽、高 IOPS 性能:NVMe 使用多队列和并行处理技术,可以提供更高的 IOPS 和带宽。 * 低功耗:NVMe 中加入了自动功耗状态切换和动态能耗管理功能,可以降低功耗。 * 高性能:NVMe 可以实现非常低的延迟和高性能,这使其成为用于存储数据的理想选择。

正文

https://xie.infoq.cn/article/7026237b455c7d62f33afc4a9

 

NVMe 的由来

 

目前机械硬盘大多数使用 SATA (Serial ATA Advanced Host Controller Interface) 接口,接口协议为 AHCI,是 Intel 联合多家公司研发的系统接口标准。AHCI 最大队列深度为 32,即主机最多可以发 32 条命令给 HDD 或 SSD 执行,在 HDD 时代整个性能瓶颈在硬盘端,而不是接口和协议端,所以 AHCI 可以很好的匹配 HDD。但随着 SSD 硬盘技术的不断演进,使得底层闪存带宽越来越高,介质访问延迟越来越低,系统瓶颈已经由下转移到了上面的接口和协议端。这时你会发现 SATA 接口的 SSD 性能都不会超过 600MB/s,你会认为是底层闪存带宽不够,但其实是 SATA  接口速度限制了带宽。因为 SATA 3.0 最高带宽就是 600MB/s。此时,AHCI 和 SATA 已经不再满足高性能和低延迟的 SSD 的需求了,如果要充分释放 SSD 性能,那么就要设计新的协议和接口了。

 

 

在这样的背景下,2009 年下半年,Intel 、镁光、三星等厂商,一同制定了专门为 SSD 服务的 NVMe 协议,来取代 AHCI,从此 NVMe 应运而生。

 

NVMe 即 Non-Volatile Memory Express,是非易失性存储器标准,是在 PCIe 接口之上的协议标准,在协议栈中隶属高层。如下图所示:

 

 

NVMe 针对 PCIe SSD 特点而设计,相比传统 AHCI 标准,NVMe 标准可以带来多方面的性能提升,可以说 NVMe 就是为了 SSD 而生的。

 

刚才我们提到了 AHCI、SATA、NVMe、PCIe,接下来,我们通过一张层次图来理解他们之间的关系和职责。

 

NVMe 的特点和优势

 

上面我们提到了 NVMe 是一种 Host 与 SSD 之间通信的协议,在整个协议栈中处于应用层的位置。NVMe 相当于指挥官发送命令至下层去执行,即 PCIe,它所制定的任何命令,都由 PCIe 去完成。虽然 AHCI 也可以和 PCI 搭档,但 AHCI 只有一个命令队列,最多同时只能发 32 条命令,根本驾驭不了 PCIe。而 NVMe 主要是面向 PCIe SSD 开发的一套接口标准,定义了系统接口和命令集,其目的就是让性能更好,延迟更低,功耗更低,所以目前 NVMe 和 PCIe 匹配无疑是最完美的。我们通过下面一张图来对比一下 AHCI 与 NVMe 的特点(注:图片来自 Intel FMS 2012)。

 

 

NVMe 和 AHCI 相比,它的优势主要体现在以下几点:

 

1、低延迟

 

- SSD 到 CPU 的路径更近了:从 SATA SSD 到 PCIe SSD,原生 PCIe 主控与 CPU 直接相连,而不需要像 SATA 一样连接到南桥中转,因此基于 PCIe 的 SSD 时延更低。如下图所示:PCIeSSD 作为一个 PCIeEndpoint(EP)通过 PCIe 连接着 RootComplex(RC),RC 连接着 CPU 和内存。

 

 

- 命令更加精简:跟 ATA 规范中定义的命令相比,NVMe 的命令个数少了很多,完全是为了 SSD 量身定制的。NVMe 缩短了 CPU 到 SSD 的指令路径,比如 NVMe 减少了对寄存器的访问次数;使用了 MSI-X 中断管理;并行 &多线程优化-----NVMe 减少了各个 CPU 核之间的锁同步操作等。

 

- 众所周知,底层存储介质 SSD 要比传统机械硬盘速度快很多;

 

所以基于 PCIe + NVMe 的 SSD 具有非常低的延迟。

 

2、高带宽、高 IOPS 性能

 

理论上 IOPS 与队列深度 (Queue Depth) 和 IO 延迟有关,用数学表达式是:

 

IOPS=队列深度/IO 延迟

 

从上述的表达式中,我们可以看出 IOPS 与队列深度有很大的关系。注意:实际应用中,随着队列深度的增加,IO 延迟也会相应地变大。通常 SATA 接口的 SSD,在队列深度上可以达到 32,然而这也是 AHCI 所能做到的极限。但目前企业级 PCIeSSD,其队列深度要达到 128,甚至是 256 才能够发挥出最高的 IOPS 性能。而在 NVMe 标准下,最大的队列深度可达 64K,队列数量也从 AHCI 的 1,提高到了 64K。再加上 PCIe 接口本身在性能上碾压 SATA,使得 NVMeSSD 在性能上碾压 SATASSD 是顺理成章的事情。

 

 

NVMeSSD 和 SATA SSD 的性能对比图

 

3、低功耗

 

NVMe 中加入了自动功耗状态切换和动态能耗管理功能。NVMe Spec 支持 1-32 电源状态 (PS, Power State)。在 Host 开启自动电源状态转换功能时,可以根据自己喜好设置 Idle 多长时间后自动转换其他电源状态。

写到最后

 

那么,焱融追光 F8000X 全闪文件存储针对 NVMe 的性能做了哪些优化呢?

 

存储处理器资源既要负责 RDMA 网络数据包收发处理逻辑,又要转发 IO 给磁盘,负责磁盘的读写开销。对于传统机械硬盘来说,可以采用大量线程去压榨磁盘性能,而针对 NVMe SSD 这种方式是不现实的。所以焱融追光 F8000X 全闪文件存储采用异步非阻塞 IO 模式,有效减少上下文切换,全路径实现了零拷贝,支持批量提交和回收,增加了并行能力:

 

- 减少用户到内核态拷贝:通常 POSIX I/O,例如: read(),write()这种系统调用,每次用户数据要从用户态到内核态 COPY 一次。采用异步非阻塞的 DMA 操作,既避免拷贝,也降低 CPU 负载。

 

- 减少上下文切换:在 OS 发出系统调用请求之后,就去处理别的任务,等中断通知再接着上下文去处理后续任务。对于慢速介质是可以的,但是对于 NVMe SSD 这种高速介质,其实发完请求很快就结束了,又通过中断切换上下文代价太大。所以不如直接通过 Polling,相当于是用 CPU 资源换取低延迟,每个盘启动一个线程一直 polling,当来任务时立马去感知到事件去处理,使得 IOPS 提升,降低延迟。

 

- 增加并行:采用异步多队列线程池模型,减少锁冲突,充分发挥 IO 并行能力。

 

焱融追光 F8000X 全闪文件存储使用全 NVMeSSD,通过深度 I/O 模型优化设计能够充分利用 NVMe 的多队列特性,获得更高的 IOPS 性能。同时,高效分配处理器核心资源,支撑网络层面高并发数据收发处理的同时,避免大量线程的调度开销,充分发挥 NVMe SSD 磁盘性能。

与[转帖]焱融全闪系列科普| 为什么 SSD 需要 NVMe?相似的内容:

[转帖]焱融全闪系列科普| 为什么 SSD 需要 NVMe?

https://aijishu.com/a/1060000000371942 云计算存储极术推荐 NVMe 的由来 目前机械硬盘大多数使用 SATA (Serial ATA Advanced Host Controller Interface) 接口,接口协议为 AHCI,是 Intel 联合多家公

[转帖]焱融全闪系列科普| 为什么 SSD 需要 NVMe?

https://xie.infoq.cn/article/7026237b455c7d62f33afc4a9 NVMe 的由来 目前机械硬盘大多数使用 SATA (Serial ATA Advanced Host Controller Interface) 接口,接口协议为 AHCI,是 Intel

[转帖]电科申泰:坚持自主创新,筑牢安全基石

https://baijiahao.baidu.com/s?id=1754243734852260910&wfr=spider&for=pc 1月5日,2022年琴珠澳集成电路产业峰会隆重启幕,四方目光聚焦于此,“中国芯”优秀产品授牌仪式瞬间点燃行业热情。电科申泰申威威焱831终端处理器一举荣获“重

[转帖]jmeter编写测试脚本大全

目录 一、背景 二、按照功能划分 2.1 加密处理、验签处理 2.2 jmeter 使用beanshell 编写脚本 2.3 jmeter脚本报错大全 2.4 jmeter打印log 2.5 jmeter压测java代码 2.6 jmeter读取数据保证每个线程拿到的数据唯一 2.7 jmeter设

[转帖]

Linux ubuntu20.04 网络配置(图文教程) 因为我是刚装好的最小系统,所以很多东西都没有,在开始配置之前需要做下准备 环境准备 系统:ubuntu20.04网卡:双网卡 网卡一:供连接互联网使用网卡二:供连接内网使用(看情况,如果一张网卡足够,没必要做第二张网卡) 工具: net-to

[转帖]

https://cloud.tencent.com/developer/article/2168105?areaSource=104001.13&traceId=zcVNsKTUApF9rNJSkcCbB 前言 Redis作为高性能的内存数据库,在大数据量的情况下也会遇到性能瓶颈,日常开发中只有时刻

[转帖]ISV 、OSV、 SIG 概念

ISV 、OSV、 SIG 概念 2022-10-14 12:29530原创大杂烩 本文链接:https://www.cndba.cn/dave/article/108699 1. ISV: Independent Software Vendors “独立软件开发商”,特指专门从事软件的开发、生产、

[转帖]Redis 7 参数 修改 说明

2022-06-16 14:491800原创Redis 本文链接:https://www.cndba.cn/dave/article/108066 在之前的博客我们介绍了Redis 7 的安装和配置,如下: Linux 7.8 平台 Redis 7 安装并配置开机自启动 操作手册https://ww

[转帖]HTTPS中间人攻击原理

https://www.zhihu.com/people/bei-ji-85/posts 背景 前一段时间,公司北京地区上线了一个HTTPS防火墙,用来监听HTTPS流量。防火墙上线之前,邮件通知给管理层,我从我老大那里听说这个事情的时候,说这个有风险,然后意外地发现,很多人原来都不知道HTTPS防

[转帖]关于字节序(大小端)的一点想法

https://www.zhihu.com/people/bei-ji-85/posts 今天在一个技术群里有人问起来了,当时有一些讨论(不完全都是我个人的观点),整理一下: 为什么网络字节序(多数情况下)是大端? 早年设备的缓存很小,先接收高字节能快速的判断报文信息:包长度(需要准备多大缓存)、地