因为 NVMe 的出现,硬盘的性能得到了极大的提升。这个极大是多少呢?读带宽从 500MB/s 提高到了 3200MB/s,写带宽从 400MB/s 提高到了 1200MB/s 左右。而读 IOPS 则达到了 50 万,甚至更高。也就是说,现在一块基于 NVMe 的 SSD 硬盘的性能比一个企业级磁盘阵列还要好。 牛皮吹了这么多,那到底什么是 NVMe 呢?NVMe 的全称是 Non-Volatile Memory Express,如果翻译过来就是非易失性内存主机控制器接口规范。你可能还是一头雾水,那我们上搜索引擎搜索一下这个关键词,可能会得到如下图片。
废话说了半天,到底什么是 NVMe 呢?首先它是一种接口规范,其次它是用于存储设备的接口规范。准确的说是目前最新的存储设备通信协议。这个协议就好比 SAS 和 SATA 一样,用于定义硬件接口和传输协议。
关于存储的几个概念
为了彻底搞清楚什么是 NVMe,我们先理清楚几个关于存储的概念。
尺寸外形:也就是设备的形状和大小,通常存储设备的尺寸外形包括如下:
2.5 寸或者 3.5 寸驱动器(在 SFF 标准中定义)
M.2 和 PCI Express(PCIe)(在 PCI-SIG 标准中定义)
接口:也就是设备如何与计算机通信。常见的存储设备接口包括:
SATA 接口,通常用于 2.5 寸和 3.5 寸硬盘,有时候一些 M.2 设备也会使用
PCI Express(PCIe) 接口, 用于 M.2 和 PCIe 设备
SAS(串行 SCSI)和 FC(Fibre Channel)接口,仅用于服务器领域和数据中心 PCIe 接口要比 SATA 接口快的多,SATA3 最大带宽是 6Gb/s,而基于 4X PCIe 的 M.2 接口最大可以达到 32Gb/s。
协议:定义了如何在计算机与设备之间传输数据。常见的协议包括:
用于 SATA 接口的 AHCI 或者 ATA 协议
用于 PCIe 接口的 NVMe 协议
到这里我们应该比较清晰了,NVMe 是运行在某种接口上的通信协议,用于规范计算机与存储设备的数据传输。上述设备尺寸、接口和协议通常是可以组合的。下面是常见的集中组合形式。
- 一个 2.5 寸 SSD 硬盘,基于 SATA 接口,通信协议是 AHCI 或者 ATA。具体设备大概如图 2 所示。
- 一个 M.2 的 SSD, 基于 PCIe 接口,通信协议是 NVMe。具体设备大概如图 3 所示。
- 一个 PCIe 的 SSD,基于 PCIe 接口,通信协议是 NVMe。具体设备大概如图 4 所示。
这里只是给出了几个具体的例子,便于大家理解接口、设备和协议的关系。具体来说,还有其它很多种组合形式,本文不在赘述。
为什么 NVMe 会这么快
上面我们介绍了什么是 NVMe,下面本文将介绍一下为什么 NVMe 如此之快(注意:这里说的快是基于 SSD 设备的,如果是机械硬盘则不然)。由于 SSD 本身的物理特性,其数据的访问已经非常快了,性能的瓶颈就是出在计算机与设备连接的接口和协议上面。 我们举一个简单的例子。比如我们有一个仓库会不断的生产出产品来,我们可以机械手将产品从仓库拿到其它地方(如图 5 所示)。对于 SATA 的 SSD,类似于一个单臂的机器人,仓库生产的很快,但机器人每次只能拿一个,搬移的速度就比较慢。
然而对于基于 NVMe 的 SSD 呢?相当于这个机器人长了数百只手,这样速度显然就比前者快的多了。
NVMe 协议的原理也是如此,它本质是上建立了多个计算机与存储设备的通路,这样搬运数据的速度自然就提高了。在 NVMe 协议中,多个通路其实就是多个队列,具体如图 7 所示。在 SATA 中计算机与存储设备只能有一个队列,即使是多 CPU 情况下,所有请求只能经过这样一个狭窄的道路。而 NVMe 协议可以最多有 64K 个队列,每个 CPU 或者核心都可以有一个队列,这样并发程度大大提升,性能也自然更高了。
更及时的获取新内容,请关注微信公众号: itworld123
https://zhuanlan.zhihu.com/p/71932170