NVMe SSD是存储盘的演进方向,与SATA/SASSSD相比,NVMe SSD具有10倍以上的性能增长。这主要还是得益于NVMe SSD的多队列技术,通过多队列技术可以将IO访问并行化,从而可以提升系统整体性能。

 

NVMe存储生态中,SSD技术已经变得非常成熟。IntelSamsung以及Memblaze公司都已经推出了符合NVMe标准的SSD产品。在服务器端,超微在2015年初的时候就推出了10盘位NVMe服务器,并且在2016年初的时候推出了支持24以及48盘位的完全NVMe服务器。DELL、浪潮、联想等服务器厂商也都普遍支持4~8盘位NVMe SSD,可以说NVMe SSD在服务器中将会是一种标准配置。在网络端,支持ROCE等高性能的以太网络技术已经变得越来越成熟,iSER等协议可以支持存储卷的远程导出。所以,从硬件的角度来看,NVMe存储的生态已经具备了。很多人在考虑NVMe存储的时候,往往会有一个疑问,到底NVMe SSD在系统级别可以达到什么样的性能水平?


wKiom1hAJTGwg6CJAABxD7ZgUN8563.jpg


对于单盘NVMe SSD的性能大家一定非常清楚。一个普通的1.6TB NVMe SSD,在老化处理之后,随机读性能可以轻松达到70IOPS以上;随机写性能可以保持在12IOPS以上;顺序读带宽可以在2.5GB/s以上;顺序写带宽保持在1.2GB/s以上。这样的单盘性能远远超过了传统的磁盘以及SATA/SAS SSD。那么在一个服务器中,如果配置多盘NVMe SSD时,性能又会怎么样呢?整体性能会与什么因素相关呢?

 

以超微服务器为例,可以一窥系统级性能的限制因素。在10盘位NVMe SSD的服务器中,SSDCPU之间的关系可以描述如下图所示:


wKiom1hAJTKi1yMMAACSL13nLoo361.jpg


在该结构中,我们可以看出NVMe SSDCPU扇出的PCIe Lane直接相连,这种连接方式是延迟最低的。在服务器配置E5-2699 V4处理器的情况下,整体最大随机读性能可以达到700IOPS以上。也就是说10块盘的性能可以充分发挥出来。与同等10盘位SAS SSD设备相比,整体拥有12倍以上的性能提升,对比结果如下图所示。这个结果是非常完美的,但是需要发挥如此高的性能,还是需要配备E5-2699这种超强处理器。


wKioL1hAJTKQsxmgAAB5LXRpujU542.jpg


对于24盘位的NVMe服务器,SSDCPU之间的关系可以描述如下图所示:


wKiom1hAJTOCOBsyAACyUGCJi3U919.jpg


该结构与10盘位服务器有所不同,为了连接更多的SSD,在处理器与SSD之间引入了PCIe Switch,通过该Switch扩展更多的SSD。这样做的好处是增加了SSD的连接数量,但是引入的问题是限制了IO性能。在24盘位的服务器中,其总体性能还没有10盘位服务器来的高,最大随机读性能达到了470IOPS,比10盘位服务器低了不少。其中的原因一方面是PCIe Switch导致延迟增大;另一方面是CPU连接SSDPCIe端口数量下降了。看来在系统层面并不是盘越多越好,关键还是需要看系统架构。


wKioL1hAJTPjs5PWAACHgYQz2Dg888.jpg


对于48盘位NVMe服务器,其系统架构与24盘位的类似。不同的是引入了更多的PCIe Switch,系统结构如下图所示:


wKioL1hAJTSCNQEmAACcCSdSdIM031.jpg


24盘位服务器相比,48盘位的性能有所提高,但是变化不大,其与相同盘位的SAS SSD服务器对比结果如下图所示:


wKiom1hAJTTSa-quAAB8GkbWST0963.jpg


在系统层面使用多盘SSD,一方面需要服务器平台的支持,不同的服务器平台决定了性能的上限。另一方面离不开软件的支持,而软件的效率往往会对系统整体的性能造成巨大影响。在NVMe存储领域,目前的软件还不是十分完备,缺少与磁盘存储相类似的软件系统。以FlashRAID为例,该软件是针对NVMe SSD的数据保护系统,通过该软件对四块NVMe SSD进行管理,并实现类似RAID5的数据保护机制。在这种情况下,如下图所示,随机读性能可以超过250IOPS。我们发现,随着NVMe SSD的进一步增加,系统整体性能有所上升,但是受限于CPU的能力,软件造成的性能损失还是不可避免的。


wKioL1hAJTWwnUy_AAD4XXmMOCg899.jpg

我们可以预见NVMe SSD是下一代主流存储介质,其不仅具有超高的性能,而且还拥有极高的存储容量,非常适合企业级存储的应用。在NVMe生态一步步完善的过程中,我们也发现系统软件还存在很大的发展空间。NVMe SSD的系统性能一方面取决于服务器的设计架构;另一方面还决定于存储核心软件栈。