【IT168 专稿】众所周知,随使用时间的推移,SSD的性能会逐渐下降,特别是早期SSD产品更是如此,新的控制器通过各种技术有效缓解了这个问题。在这篇文章中,我们将执行一些企业级SSD基准测试,通过对比前后测试结果,加深对SSD性能下降的理解。
SSD性能问题回顾
前面我们分析了SSD性能问题的一些根源,晶体管的设计,底层NAND芯片的设计,以及SSD硬盘自身的设计都是其性能下降的根本原因。
在回顾SSD硬盘结构部分,我们曾介绍过SSD是以块为单位进行擦除的,大小通常是512KB,这意味着如果某个块上的一个页面(4KB)发生了变化,整个SSD都需要重写,重写过程需要经历漫长的“读-修改-擦除-写”周期,“读”通常指的是将块上的所有数据读入到缓存中,接着将“修改的”数据和缓存中已有的数据合并,然后“擦除”那个块上的全部数据,最后将缓存中的新数据“回写”到已被擦除的块上。
有人认为这个过程应该不需要多长时间,但SSD的擦除速度要比读取速度慢好多倍,导致整个“读-修改-擦除-写”周期花费的总时间变长。更糟糕的是,“读-修改-擦除-写”周期会产生一个所谓的写放大系数,它指的是即使是块上单个页面发生变化或更新,也会导致使用额外的写周期,理想情况下,写放大系数应等于1,即向存储介质写入数据时,不需要额外的写周期,如果写放大系数大于1,则意味着向存储介质写入数据时,不止发生一次写入操作,早期的SSD写放大系数通常是远远大于1。因此不要忘了SSD的写操作周期的限制,SLC SSD大约是10万次,MLC SSD大约只有1万次。
SSD硬盘制造商其实早已知道这些问题,它们已经想出许多方法来克服这些问题,写放大系数也变得越来越接近于1。其中一种技术叫做写合并,控制器将多个写操作收集到一起,然后一次性将这些数据写入到SSD的块上。合并的目标是将多个小的写操作合并成一个大的写操作,大多数时候,相邻页面的数据会同时发生变化,这些页面很可能属于同一个文件。通过写合并技术,写放大系数大大减小了,SSD的性能也显著提高了,但这也与发送数据的方式,以及数据块是否同属于同一个文件,或是否在同一时间发生变化有关。
另一种技术叫做超量供给,它保留了一定数量的储备块,连操作系统也不可见,例如,假设一块SSD硬盘的总容量是75GB,只将其中60GB暴露给操作系统,剩下的用作保留块,相当于是一个可用块池,操作系统无法占用,它们只是用来帮助提高性能的,确保任何时候都有可用的块,避免应用程序将数据真实写入SSD之前不会因漫长的“读-修改-擦除-写”周期而产生性能瓶颈。这个技术也能间接提高SSD的使用寿命,因为有一部分块的写周期相比其它块而言要少,以后可以切换保留池中的块,有助于均衡SSD存储块的磨损。
第三个技术是所谓的TRIM命令,SSD最大的性能问题之一是,写操作发生在一个尚未擦除的页面上,这个时候,包含该页面的整个块都要被读入到缓存中,新数据和块中已有的数据合并,再擦除整个块上的数据(这个操作需要的时间最长),最后将缓存中的数据回写到块上,这种“读-修改-擦除-写”过程需要的时间比仅仅只有“写”操作的时间要多得多,TRIM命令告诉SSD控制器,当一个页面不再需要时,就将其标记为擦除,这样SSD控制器就可以将新数据写入到一个干净的页面上,从而避免完整的“读-修改-擦除-写”周期,只留下“写”周期,因此整体写入性能要好得多。
这些技术不同程度地提高了SSD的性能和使用寿命,在设计时需要进行权衡和取舍,因为它们需要更精密的控制器,因此设计和制造成本会更高,超量供给还会使硬盘的可用容量减少,SSD制造商必须综合考虑它们的优缺点,同时兼顾性能和成本,才能设计出性价比很高的产品。
在这篇文章中,我要测试一款企业级SSD硬盘:英特尔X25-E,我会先执行一些基准测试,然后执行一些I/O密集型测试,最后再执行基准测试,通过对比两次基准测试结果,找出性能下降的迹象。