HDD和早期SSD绝大多数都是使用SATA接口,跑的是SATA AHCI(Advanced Host Controller Interface),它是由Intel联合多家公司研发的系统接口标准。AHCI支持NCQ(Native Command Queuing)功能和热插拔技术。NCQ最大深度为32,即主机可以发最多32条命令给HDD或者SSD执行,跟之前硬盘只能一条命令一条命令执行相比,硬盘性能大幅提升。

在HDD时代,或者SSD早期,AHCI协议和SATA接口足够满足系统性能需求,因为整个系统性能瓶颈在硬盘端(低速,高延时),而不是在协议和接口端。然而,随着SSD技术的飞速发展,SSD盘的性能飙升,底层闪存带宽越来越宽,介质访问延时越来越低,系统性能瓶颈已经由下转移到上面的接口和协议处了。AHCI和SATA已经不能满足高性能和低延时SSD的需求,因此SSD迫切需要自己更快、更高效的协议和接口。

在这样的背景下,NVMe横空出世。2009年下半年,在带头大哥Intel领导下,美光、戴尔、三星、Marvell等巨头,一起制定了专门为SSD服务的NVMe协议,旨在让SSD从老旧的SATA和AHCI中解放出来。

何为NVMe?Non-Volatile Memory Express,非易失性存储器标准,是跑在PCIe接口上的协议标准。

下面分享两个素材,供读者朋友们进一步了解NVMe 和 AHCI的区别,为何出现NVMe:

一、腾讯视频

Why NVMe?_sed

二、SSD接口介绍

下面的内容来自于《软件定义存储:原理、实践与生态》一书的第22章(本章作者李炫辉),也可以看成是2016年7月25日,微信公众号 乐生活与爱IT 发表的文章《闪存存储与软件定义存储(SDS)》的补充。最后一张图,可以看到NVMe相比AHCI协议的三个优点。

22.2.1 闪存存储接口技术

由于闪存存储需要兼容存储系统或服务器系统的存储连接背板,因此要根据不同的应用场景设计不同的接口。主流的企业级存储组件接口主要有SATA(SerialAdvanced Technology Attachment,串行ATA接口)、SAS(Serial Attached SCSI,串行连接SCSI接口),PCIe (Peripheral Component InterconnectExpress,高速串行点对点双通道高带宽传输技术)等。而三者的带宽当前分别为SATA(6Gb/s),SAS(12Gb/s),PCIe 3.0 (Single lane 8Gb/s,x4 32Gb/s,x8 64Gb/s, x16 128Gb/s),在三者之中,PCIe接口除了带宽以外,最重要的是延时在ns(纳秒)级别,而SATA和SAS都在us(微秒)级别。

当前企业级的闪存存储大多都采用以上3种接口类型,由于SATA和SAS接口大多采用2.5’磁盘封装方式,使用上与原有的磁盘相似,易于维护,因此用量较大。而PCIe接口闪存存储采用板卡方式,性能和容量更高,可靠性更好,往往用于关键应用。为了更好地应用PCIe接口同时便于维护,PCIe接口也定义了2.5’封装的接口标准SFF8639(最近已经命名为U.2标准)。

由于当前采用SATA和SAS接口的存储系统背板一般提供的都是5V 1.5A的供电功率,因此也限制了这种接口的闪存存储的性能。而PCIe 闪存存储一般均需要提供25w供电功率才能达到高性能,如果采用U.2的SSD,则需要修改系统存储背板,提供额外供电线路。

22.2.2 企业级PCIe闪存存储架构设计

企业级闪存存储主要有两种架构设计,一种我们称之为基于主机的闪存架构(Host based Architecture),另一种称之为基于设备的闪存架构(device based Architecture)。

对于当前的操作系统的底层IO访问而言,当初都是针对磁盘存储介质物理访问特性进行设计的,如采用512 byte的扇区大小(注:当前也有一些操作系统开始支持4K格式),而闪存则是4Kpage写操作;磁盘介质采用逻辑地址映射CHS寻址,而闪存介质则需要采用磨损均衡的算法动态修改地址指针;磁盘存储可以覆盖写,闪存存储必须先擦除后写入,这都造成了上层操作系统不能直接采用闪存的地址访问机制,需要将闪存的地址转换为传统的磁盘逻辑地址结构,这就需要一个地址转换层,即FTL(Flash Translation Layer), 如果FTL位于主机系统层面,那么这种闪存架构就是Host based Architecture,如果位于板卡层面那么就是Device based Architecture。

Why NVMe?_闪存_02

图22.9 基于主机的闪存存储架构(Host based Architecture)

Why NVMe?_企业级_03

图22.10 基于设备的闪存存储架构(Device basedArchitecture)

早期由于缺乏标准定义,闪存存储大多采用基于主机的闪存架构设计,其代表厂商是Fusion IO(现已被SanDisk收购)。其特点是开发周期短,软件架构比较灵活,利用主机的计算能力和内存空间进行闪存存储的数据访问控制和容错处理(如多位ECC校验处理,磨损平衡算法,垃圾回收处理等等)。但是也存在资源争用,影响业务性能,多卡横向扩展能力差,不同厂商产品之间缺乏兼容性,意外掉电内存数据存在丢失的风险。

而Device based Architecture则将FTL功能完全移至闪存控制器层面,对于闪存存储的数据访问和控制,都在设备层面完成,基本不占用主机CPU和内存资源,通过标准访问协议提供存储服务。这种架构需要闪存存储厂商有闪存控制芯片设计能力,技术门槛比较高,但是数据处理效率更高,可靠性会更好,多厂商兼容性会更好。当前的标准访问协议是Intel的PCIe NVMe访问协议,支持NVMe的主要企业级闪存控制芯片厂商有Intel, Greenliant,PMC-Serria(已被MicroSemi收购)等。

NVMe协议技术是专为企业级和客户端系统设计的采用PCIe 固态硬盘的可扩展的主机控制器接口,其中包括优化的寄存器接口和命令集。NVMe是一个由10个公司发起的,目前已有80多个业内知名公司加入的行业协会。其成员包括EMC、戴尔、英特尔、甲骨文以及NetApp等公司。NVMe 1.0于2011年3月发布。除了硬件厂商以外,主流的操作系统软件如微软的windows、红帽Linux、VMwarevSphere、OracleSolaris、BSD Unix等已经全面支持NVMe技术。当前最新版本是NVMe 1.2。

Why NVMe?_sed_04

图9.11 支持NVMe协议的主要操作系统厂商

NVMe 开放标准打破了以往PCIe闪存厂家采用垄断私有接口造成的产业局限,使客户可从开放的产业生态链中选购所需,对产业规模的提升和用户成本优化具有划时代意义。

NVMe标准协议除了建立了通用兼容的闪存接口协议以外,还针对闪存存储的特点,提供了低延时、高并发以及低功耗的特性。

Why NVMe?_闪存_05

图22.12  NVMe低延时访问协议堆栈

Why NVMe?_企业级_06

图22.13  NVMe高并发访问架构

备注:时至今日,NVMe的规范已经发展到1.4版本了。国内自研生产NVMe SSD的服务器大厂有华为、浪潮。对浪潮SSD感兴趣的朋友,可以:

1)阅读《浪潮新一代ZNS SSD:提速公有云的“正确姿势”》

请持续关注微信公众号 乐生活与爱IT,后面将继续分享相关文章,如NVMe Over Fabrics等