存储 频道

专家支招:解决SSD性能下降问题(一)

  【IT168 专稿】众所周知,固态硬盘(SSD)的性能会随时间的推移而下降,特别是早期推出的SSD更是如此,最新的SSD控制器通过各种手段降低了这个问题的影响,在这篇文章中,我们将一探SSD性能下降的根源,并介绍一些可行的解决方案。

  SSD和性能

  SSD性能下降问题与SSD的结构,以及文件系统和应用程序与它的交互有着紧密的联系,但几乎所有的问题都源于SSD的设计。在此前的文章中,我们已经介绍过了SSD构造的基本概念,写入SSD时,都是以一个页面为单元(通常是4KB),但SSD擦除时却是以块为单位,块的大小通常比页面的大小要大一些,一般来说,一块相当128个页面单元,即512KB,写入和擦除时使用的单位大小不同是理解SSD随时间推移性能下降的关键要素。下表从性能角度列出了单层单元(SLC)和多层单元(MLC)固态硬盘在读、写和擦除时的差异。

SSD和性能
表1 SLC和MLC的I/O操作时间

  从上表可以看出,对于SLC SSD,读操作比写操作要快10倍,而MLC则要快18倍,但更重要的是,擦除操作都很慢,如SLC SSD,擦除操作要比写入操作慢大约8倍,而读操作更是比擦除操作要快100倍,这就是为什么随时间推移,SSD速度会越来越慢的原因。

  假设我们需要擦除一个块中的部分数据,例如其中一些页面,但前面我们已经提到,SSD是以块为单位进行擦除的,通常,会先将块中的数据从NAND芯片读出,写入缓存,随之擦除缓存中不需要的页面,再添加新的页面到缓存中,然后擦除SSD中的块,最后用缓存中的数据重新写入SSD中的块,因此即便是只需要简单的4KB变化,也要做大量的I/O操作,这过程被称为“读-修改-擦除-写”,简单说来就是读出数据-->擦除SSD-->在缓存内修改-->最后写入SSD。

  这其中最大的问题就是擦除操作要比其它操作慢很多,从而影响了整体性能,由于应用程序可以同时写入多个数据块,文件系统也支持写入各种大小的数据块,数据将分布在很多块上,因此任何时候因数据变化或被擦除时,页面都需要更新,SSD就会执行一次“读-修改-擦除-写”操作,整体性能自然会下降。

  SSD设计人员利用未使用的块池来缓解了这个问题,缓存中更新的块写入到包含在池中的干净块,“旧”块则标记为可擦除,在适当的时候进行擦除,通常都是在SSD垃圾回收期间进行擦除,通过这种设计减少了I/O操作的总体时间,因为擦除操作被延后了,但在垃圾回收期间就会消耗更长的时间来擦除块,SSD的总体吞吐量(性能)也会受到影响,最怀的情况是,一个简单的4KB写入操作可能会导致512KB数据写入,SSD中发生的写入数据量和应用程序产生的数据量的比值被称为写放大系数,在最好的情况下,写放大系数等于1,如4KB应用程序数据导致4KB SSD写入,在最坏的情况下,写放大系数等于128,即需要写入4KB,但最后写入了512KB,这和SSD的结构也有关系,一般常见的SSD,一个块大小是512KB,一个页面大小是4KB。

  写放大系数和SSD、控制器、文件系统和应用程序紧密相关,因此无法准确给出特定SSD的平均写放大系数。写放大系数带来的问题是,随着时间的推移,文件系统的碎片会越来越多,数据散乱地分布在SSD块上,最后连一个干净的块也没有,一个简单的写操作都会有一个很大的写放大系数,最终就会导致性能下降。

  除了影响性能外,写放大系数还会影响到SSD的使用寿命,SSD的写/擦除周期是有限制的,写放大系数大于1意味着需要写入更多的数据,因此会消耗更多的写/擦除周期,SSD的寿命因此也就减少了。

1
相关文章