在过去十几年中,CPU的性能提升了100倍以上,而传统的HDD硬盘(Hard Disk Drive)才提升了1.5倍不到,这种不均衡的计算存储技术发展,极大地影响了IT系统整体性能的提升。直到固态硬盘SSD(Solid State Drive)被发明出来,其性能有了颠覆性的提升,才解决了存储的瓶颈问题。然而,SSD作为一项新技术,仍然存在一些固有的缺陷,如何充分发挥SSD的优势,是一个值得研究的方向。下面从性能、持久性、使用成本等方面对此话题做一些探讨。 一、如何充分发挥出SSD的性能 首先,我们来看看传统HDD的使用方式: 1. 协议一般都采用SAS、SATA接口; 2. Linux的IO调度需要用电梯算法来对IO进行重排以优化磁头的路径; 3. 企业级存储通常使用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)。 通过上面的分析发现,能把盘使用在一个最佳的工作状态至关重要。好消息是目前一些先进的解决方案,比如Lightbits的全NVMe集群存储解决方案就可以解决这个问题。该方案通过把随机IO变成顺序IO的方式,以及独有的Elastic Raid技术避免了Raid“读改写”的弊端,从而能大幅提高盘的持久性及随机性能。 由于SSD相对于HDD而言是一项新技术,再加上产业的生产规模和需求量的矛盾,目前价格相比HDD仍然偏高。那么如何降低SSD使用成本就变得非常重要。 降低使用成本最重要的一环就是要把SSD充分使用起来,无论是容量还是性能。不过就目前而言,大多数NVMe盘都是直接插在应用服务器上使用,而这种方式非常容易造成大量的容量和性能浪费,因为只有这台服务器上的应用才能使用它。根据调研发现,使用这种DAS(Direct Attached Storage,直连式存储)方式,SSD的利用率大概在15%-25%。 针对这个问题比较好的解决方法是近几年来市场上被广泛接受的“解耦合”架构。解耦合之后,把所有的NVMe盘变成一个大的存储资源池,应用服务器用多少就拿多少,只要控制总数量够用就行,可以非常容易地将利用率推到80%。另外,因为资源集中起来,可以有更多的手段和方法用于降低成本,比如压缩。例如,平均应用数据压缩比在2:1,就相当于多了一倍的可用容量,也相当于每GB价格降了一半。当然压缩本身也会带来一些问题,比如压缩本身比较费CPU,另外很多存储解决方案在开启压缩之后性能就会大大降低。 针对压缩方面的问题,Lightbits的NVMe/TCP集群存储解决方案可以通过存储加速卡来予以解决。该卡可以做到100Gb的线速压缩能力,并且不消耗CPU,不增加延迟。利用这样的解决方案,压缩功能几乎没有额外的成本。此外,正如前面在介绍提高持久性时所提到的,Lightbits解决方案能提高使用寿命并支持使用QLC盘,从整个使用周期来看,在使用成本方面也会有非常大的降低。总的来说,通过解耦合提高使用效率,压缩提高可用容量,优化提高使用寿命或启用QLC,经过这样的重重提升,SSD的使用成本可以得到极大的控制。 以上从性能、持久性、使用成本三个方面分析了如何用好SSD盘,可以看到要用好NVMe SSD盘还是不容易的。因此,对一般用户而言,选择一个好的存储解决方案就至关重要。为此,以色列创新公司Lightbits以充分发挥NVMe盘的最大价值为使命,发明了NVMe/TCP协议,并推出了新一代的全NVMe集群存储解决方案,可以帮助使用者轻松地将SSD盘用好。