0

如何用好你的SSD

 3 years ago
source link: http://www.dostor.com/p/73512.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

如何用好你的SSD

2021-03-31 分类:技术

在过去十几年中,CPU的性能提升了100倍以上,而传统的HDD硬盘(Hard Disk Drive)才提升了1.5倍不到,这种不均衡的计算存储技术发展,极大地影响了IT系统整体性能的提升。直到固态硬盘SSD(Solid State Drive)被发明出来,其性能有了颠覆性的提升,才解决了存储的瓶颈问题。然而,SSD作为一项新技术,仍然存在一些固有的缺陷,如何充分发挥SSD的优势,是一个值得研究的方向。下面从性能、持久性、使用成本等方面对此话题做一些探讨。

一、如何充分发挥出SSD的性能

首先,我们来看看传统HDD的使用方式:

  1. SAS、SATA接口;
  2. 的IO调度需要用电梯算法来对IO进行重排以优化磁头的路径;
  3. Raid卡做数据保护。

在接口协议方面,随着SSD的发明,NVMe协议应运而生。相较于SAS、SATA的单队列机制,NVMe最多可以有65535个队列,并且直接采用PCIe接口,消除了链路和协议瓶颈。

在控制卡生态方面,各大厂商也纷纷推出自己的NVMe控制卡芯片,有PMC(现属于Microchip)、LSI、Marvel、Intel、慧荣以及国内的得瑞等,技术也已经非常成熟。

在Linux 驱动和IO协议栈方面,也做了相应的优化,如下图所示,NVMe驱动可以直接绕过那些传统的、专为HDD设计的调度层,大大缩短了处理路径。

image-22.png

到目前为止,为了充分发挥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)。发展趋势如下图所示。

image-23.png

另外,对NAND的使用有一个特点,就是可擦的最小单位比较大,如下图所示,写的时候可以4KB为单位往里面写,但是擦的时候(比如修改原有数据)却只能以256KB为颗粒来操作(不同的SSD大小不一样,但原理都一样)。这就容易形成空洞而触发SSD的GC(Garbage collection)数据搬移,进而导致所谓的写放大现象,对盘的持久性会产生进一步影响。

image-24.png

在企业级存储中,通常使用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盘用好。

本文作者:陈定宝,Lightbits Labs解决方案架构师


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK