在过去十几年中,CPU的性能提升了100倍以上,而传统的HDD硬盘(Hard Disk Drive)才提升了1.5倍不到,这种不均衡的计算存储技术发展,极大地影响了IT系统整体性能的提升。直到固态硬盘SSD(Solid State Drive)被发明出来,其性能有了颠覆性的提升,才解决了存储的瓶颈问题。然而,SSD作为一项新技术,仍然存在一些固有的缺陷,如何充分发挥SSD的优势,是一个值得研究的方向。下面从性能、持久性、使用成本等方面对此话题做一些探讨。
一、如何充分发挥出SSD的性能
首先,我们来看看传统HDD的使用方式: 协议一般都采用SAS、SATA接口;Linux的IO调度需要用电梯算法来对IO进行重排以优化磁头的路径;企业级存储通常使用Raid卡做数据保护。在接口协议方面,随着SSD的发明,NVMe协议应运而生。相较于SAS、SATA的单队列机制,NVMe最多可以有65535个队列,并且直接采用PCIe接口,消除了链路和协议瓶颈。
在控制卡生态方面,各大厂商也纷纷推出自己的NVMe控制卡芯片,有PMC(现属于Microchip)、LSI、Marvel、Intel、慧荣以及国内的得瑞等,技术也已经非常成熟。
在Linux 驱动和IO协议栈方面,也做了相应的优化,如下图所示,NVMe驱动可以直接绕过那些传统的、专为HDD设计的调度层,大大缩短了处理路径。 
到目前为止,为了充分发挥SSD的性能,上面提到的三个传统HDD的问题中前两个已经得到了解决,然而在企业级市场上,基于NVMe的Raid始终没有太好的方案。传统企业最广泛使用的Raid5/Raid6数据保护机制(N+1, N+2),通常是把数据条带化分片,然后计算出冗余的Parity Code(奇偶校验码),将数据存放到多块硬盘,写入新数据通常是一种“读改写”的机制。这种机制本身就成为了性能瓶颈,并且“读改写”对SSD的使用寿命有很大的损耗。另外,因为NVMe协议把控制卡放到了NVMe盘的内部,IO都由NVMe盘内部的DMA模块来完成,这就给基于NVMe的Raid卡设计带来了更大的困难。目前市场上这类Raid控制卡可用方案也很少,并且性能上也无法发挥出NVMe的优势,因此没能被广泛使用。
基于目前这种状况,很多企业级存储方案仍然在使用SAS/SATA的SSD加传统的Raid卡,这种方式又会出现前面已经解决的两个问题,SSD的性能得不到充分发挥。
然而,这样的情况也在发生改变,由Lightbits Labs发明的NVMe over TCP(NVMe/TCP)存储集群解决方案就对这个问题做了很好的处理。该解决方案通过自主研发的一块数据加速卡,采用Erasure Code(纠删码)机制可以做到超过1M IOPS的随机写性能,并且可以避免“读改写”带来的使用寿命损耗。另外,Lightbits提出了Elastic Raid机制,该机制提供弹性的N+1保护(类似于Raid5),相较于传统的Raid5需要热备盘或者需要及时替换损坏盘,该机制在一块硬盘发生损坏之后能自动平衡形成新的保护。比如一个节点内原先有10块盘,采用9+1的保护,当某块盘损坏后,系统会自动切换成8+1的保护状态,并且把原先的数据再平衡到新的保护状态,从而在可维护和数据安全性方面实现了大幅提升。此外,该数据加速卡还能做到100Gb的线速压缩,显著提高了可用容量,进而能大幅降低系统使用成本。
二、如何提升NVMe盘的持久性
目前使用最广泛的SSD是基于NAND颗粒的,而NAND一个与生俱来的问题就是持久性(endurance)。并且随着技术的发展,NAND的密度也越来越高,最新一代已经到了QLC(4bits per Cell),同时每个Cell可被擦写的次数也在减少(1K P/E Cycles)。发展趋势如下图所示。

另外,对NAND的使用有一个特点,就是可擦的最小单位比较大,如下图所示,写的时候可以4KB为单位往里面写,但是擦的时候(比如修改原有数据)却只能以256KB为颗粒来操作(不同的SSD大小不一样,但原理都一样)。这就容易形成空洞而触发SSD的GC(Garbage collection)数据搬移,进而导致所谓的写放大现象,对盘的持久性会产生进一步影响。
在企业级存储中,通常使用Raid5/6这种“读改写”的机制,会对盘的写操作数量进一步放大,一般使用场景下大约是直接写入方式的2倍损耗。此外,很多Raid5还会启动Journal机制,对盘的使用寿命会进一步损耗。
最后,对于最新的QLC来说,使用中还需要考虑另一个因素——Indirection Unit (IU)。比如有些QLC盘使用 16KB的IU,如果要写入较小的IO,也会触发内部“读改写”,对使用寿命又多一重损伤。
由此可以看出,基于NAND的SSD还是比较娇弱的。不过,只要能正确地使用,还是可以避免这些问题。比如以某常用的QLC盘为例,通过如下两组关于性能和持久性相关的参数可以看出,在持久性上顺序写是随机写的5倍,而性能更是26倍:
- 顺序写 0.9 DWPD, 随机4K写0.18 DWPD;
- 顺序写 1600 MB/s, 随机4K写15K IOPS(60MB/s)。
新闻来源:EETOP易特创芯,文中所述为作者独立观点,不代表icspec立场。更多精彩资讯请下载icspec App。如对本稿件有异议,请联系微信客服specltkj。