在介绍NVMe固态硬盘优势的时候,经常会引用到下面的这张图片来展现它的低延迟优势。尤其是在对比到最后一行NVM PCIe x4 Gen3的时候,延迟一下子降低了4倍多,好厉害啊!
被误读的图表含义:
很多人没有意识到,这张图并不是大家理解中的那样。第四行和第三行的差距展示的并非NVMe协议降低延迟的效果,而是未来新型存储器更需要NVMe的配合来充分发挥它的优势。
完整的截图如下,它的标题是:Fully Exploring Next Gen NVM(全面探索下一代NVM非易失性存储器)。请注意,这里写的是NVM,而不是NVMe(NVM Express),一字之差,天壤之别。
什么是NVM呢,他是想对易失性存储器而言的,典型的例子是内存,断电后里边存储的数据就会丢失,非易失性存储器的含义就是断电后能够继续保存数据,机械硬盘的盘片、固态硬盘的闪存芯片,都属于非易失性存储介质。
NVMe,即NVM Express,是专门为非易失性存储介质(尤其是闪存)研发的新一代存储协议,依托于PCIe的带宽和自身低延迟特点,它将取代SATA/SAS成为未来固态硬盘的发展方向。
也就是说,文章开头的图表是在展望未来闪存或比闪存更快的非易失性存储介质在NVMe协议下的表现。当然从中也能看到NVMe协议在其中所起的作用,首先我们从图表下方的图例一个一个分析,看看它们到底代表了什么。
NVM tREAD:存储介质读取延迟占大头
应用程序要从固态硬盘读取数据,中间要经过很多环节,每个环节都会消耗一定的时间。闪存的速度虽然很快,但依然占据整个读取过程近一半的延迟。Future NVM,也就是未来的新型存储介质,有望大幅度地提高自身响应速度,降低在存储介质上处理读取命令所话的时间。
说到新型存储介质,很多人会想到英特尔提出的3D XPoint,其实除了3D XPoint之外,还有很多同类或者类似的技术也处于研发或者接近实用的阶段。譬如东芝在去年闪存峰会上提出的LLF(Low Latency Flash)低延迟闪存:XL-FLASH,它的读取延迟只有普通3D TLC闪存的十分之一。
再比如MRAM磁阻式随机存取存储器,它是类似于SRAM的新型非易失性存储器,既能像内存一样完全随机存取,又能像闪存一样在断电之后保存数据。下图是东芝在2017年展示的4Gbit容量STT-MRAM,从容量来看暂时还不具备制成固态硬盘的能力,它的作用更接近于现在CPU中的L2二级缓存,容量不大但速度很快。如果未来技术发展,MRAM也有望应用到固态硬盘当中的。
NVM xfer:存储介质传输延迟
数据从存储介质内传输到存储介质外部接口所产生的延迟。这部分延迟可以通过提高闪存接口带宽来降低。还从最初这张图片来看,第一行和第二行的绿色部分降低了一半,这就是ONFI3相比ONFI2提高了闪存接口带宽后达到的效果。
除了ONFI之外,类似的还有东芝和三星共同提出的Toggle闪存接口。
前段时间东芝发布了XG6 NVMe固态硬盘,其中就提到所用的BiCS4闪存接口已经升级至Toggle 3.0标准,闪存带宽也从过去的400MT/s翻倍增长到800MT/s,数据在从闪存芯片向主控传输过程中所需的时间就得到了降低。
Misc SSD:杂项延迟
通过图表可以看到,浅蓝色所代表的Misc SSD杂项延迟在从第三行到第四行的过程中大幅度降低了。这部分延迟主要包括固态硬盘内FTL闪存映射表转换、垃圾回收、磨损均衡算法所产生的额外延迟,这些延迟对于NAND闪存而言基本是一定的。
但未来新型非易失性存储介质未必需要FTL转换(譬如MRAM或PCM,本身可以像内存一样随机读写,不必像NAND闪存一样按页写入、按块擦除)、未必需要垃圾回收(如果存储介质不需要像NAND闪存一样先擦除后写入,那么就无需垃圾回收),所以Misc杂项延迟就可以得以降低。
Link Xfer:链路传输延迟
Link Xfer是花在固态硬盘接口和主机接口之间的信道传输延迟。和NVM xfer一样,只要提高接口速度,这部分延迟就可以得到降低。所以对比下图可以看到,固态硬盘接口从SATA变成PCIE x4 Gen3之后,深蓝色部分代表的Link Xfer就大为降低了。这是PCIe信道的功劳,同样不是NVMe在协议层面带来的优势。
Platform adapter:这部分才是NVMe的作用
Platform adapter,可以翻译成平台和适配器,主要包括了NVMe控制器相比主板PCH芯片集成的AHCI控制器的效率提升、NVMe针对闪存的指令优化等等。这才是NVMe协议的低延迟优势所在。从图中来看的话,NVMe相比SATA固态硬盘所用的AHCI协议大约能降低2到3微秒。如果从整体来看,NVMe协议在整体固态硬盘存取延迟中能起到的作用大约在2%-3%之间,而不是很多人认为的"NVMe降低4到5倍的延迟"。
Software:目前难以触动的部分
Software,也就是软件延迟。我认为这里主要指的是CPU执行软件指令的效率问题、操作系统底层驱动的效率问题,不管是使用新型闪存,还是升级NVMe协议,都无法撼动这部分"死重"。这涉及到底层的软件开发,包括系统软件和驱动层面,还有软件的设计、CPU对指令的执行。
总结:
现在就可以明确了,NVMe协议所起到的降延迟效果。在QD=1队列深度、使用MLC NAND闪存介质的情况下进系4K随机读取,NVMe大约能降低2到3微妙延迟,占总体延迟的2%-3%。同时NVMe固态硬盘所用的PCIe信道也带来了大约6%的传输延迟优势。总体来看,在相同存储介质的条件下,NVMe固态硬盘能降低的4K单线程随机读取延迟在10%左右。这个数值可随着读写区块以及队列深度而改变。