SSD内部的IO抖动因素

与磁盘相比,SSD具备很高的IO性能,可是和磁盘相比,SSD的性能稳定性不如磁盘好。在使用过程当中,SSD的性能会发生变化,而不能保持很强的一致性。这是SSD的一个特性,性能会随着时间、使用寿命发生变化。对于存储系统设计而言,这种不肯定的性能变化以及抖动都会对系统总体性能形成影响。所以,对于闪存存储系统设计者而言,须要了解SSD内部的工做机制以及熟悉致使IO抖动的因素。ide

 

可能你们会说,SSD性能发生变化的一个重要因素是内部GC(垃圾回收)机制的影响。其实不全是,GC会致使SSD性能发生变化,NAND Flash上的数据布局方式会对GC性能形成影响,其本质问题是数据迁移与用户IO之间的资源竞争。另外,企业级SSD标称的性能每每都是在GC全速运行状况下的稳态性能,而不是出厂时的空盘性能。因此,在通常状况下,应用测试的IO稳定性都仍是能够的。存储系统在使用SSD时,也都会只考虑稳态性能,而不是空盘性能。问题是在稳态性能状况下,在不一样的IO Pattern状况下,不一样的使用寿命状况下,其性能稳定性、IO抖动性还会发生变化。而这种性能变化偏偏是存储系统设计者须要考虑和解决的重要问题。对于存储系统设计者来讲,不能将SSD当成一个黑盒进行使用,这是与磁盘存储系统设计来讲是一个重大差异。布局


wKioL1g5eIygkqcbAAA1PjA0Ei8634.jpg


纵观SSD的设计,咱们能够发现影响SSD性能不稳定的因素有不少,其中主要因素有NAND介质自己的比特错误;读与写、擦除的冲突;Read DisturbGC等问题致使性能变差。从外在表现来看,Bit Error的增多会致使SSD在使用过程当中出现性能抖动问题,尤为是随着使用寿命的耗尽,SSD性能会发生明显的变化。另外在不一样的IO Pattern下,性能也不尽相同,有些SSD甚至会存在写后读的问题,紧随着写以后的读延迟会变得很大,达到毫秒级,这是因为内部IO冲突致使的。此外,在同一区域大量读以后,也可能发现性能会出现抖动,这也是因为内部的Read Disturb机制开始工做了,会与用户IO发生竞争,从而致使性能抖动,甚至降低。性能

 

NAND Flash做为半导体存储介质,其存在严重的比特错误(BitError)。不一样制造工艺会致使NAND具备不一样的比特出错率;不一样的NAND类型,MLCTLC以及将来的QLC都会具备不一样的比特出错率;3D TLC在使用不当的状况下,其出错几率会发生变化;不一样的使用寿命状态,NAND存放时间,其比特出错几率也会发生变化。因此,对于NAND介质来讲,多种因素会致使出错几率发生变化。对于SSD而言,这种Error Bit会致使IO的性能发生不肯定的抖动。例如对于读操做,若是Bit Error控制在必定范围以内,BCH或者LDPC×××能够快速解码,那么一个正常的读请求能够控制在100us左右。若是Bit Error超出了快速解码的范围,那么×××将会花费大量的时间进行解码,引入延迟;若是Bit Error过多,×××没法进行正确解码,那么在SSD内部会经过Read Retry机制尝试经过调整NAND的参考电压来从新读取数据,这必然会致使更大的延迟;若是read retry也搞不定,那么须要依赖企业级SSD内部的NAND级别RAID来进行数据恢复,一样须要引入很大的延迟。当一个盘的使用寿命在不断耗尽的过程当中,NAND FlashBit Error错误将会呈上升趋势,而不少译码器的解码能力不会呈现线性变化趋势,而更多的会呈现突变,相似于e指数变化趋势。也就是说当Bit Error的数量达到必定程度以后,译码时间将会急剧增长,从而致使IO延迟急剧增长,外在表现为IO性能的急剧抖动。测试

 

读写冲突、读写与擦除之间的冲突也是致使IO抖动的重要因素。当一个读请求和擦除请求落在了同一个通道的相同Die上,那么读请求将会因为擦除操做而被迫等待。NAND Flash的擦除操做基本上在2ms以上,若是发生这种冲突,那么IO的延迟将会从100us提高到2ms以上,从而发生严重的延迟。为了解决这个问题,如今有些NAND也会提供Erase Suspend的功能,经过该命令让擦除操做暂停,让读操做先进行,从而下降读延迟。在SSD内部的读写冲突也会引入延迟,当读写操做发生在同一个Block时,会致使读延迟增长。针对这个问题,在存储系统设计过程当中,须要将读写请求在空间上进行分离,从而避免读写请求在同一个Block上冲突。spa

 

NAND Flash存在Read Disturb的问题,当NANDFlash一个区域被重复读以后,其Bit Error将会上升。为了解决该问题,SSD内部的Firmware会进行Read Disturb的处理。一个区域被重复读取以后,会进行数据搬移操做,该操做过程相似于Garbage Collection过程。一旦该过程被触发以后,SSD内部的IO请求数量将会上升,从而对读请求形成必定的影响,致使性能下降及抖动。设计

 

SSD做为一种半导体存储介质,其性能一般会高于磁盘,可是在极端状况下,因为IO Pattern致使的读写冲突,Bit error的增长都会致使SSD性能的变化,而且出现性能抖动的问题。此外,SSD对于顺序写、随机写、顺序读、随机读以及混合读写状况下的性能都会有所变化,而且不一样的IO Pattern会致使数据在NAND上的布局发生变化,从而会致使各类读写状况下的性能都有所变化。例如,全盘顺序写以后的顺序写性能会比较高,可是在全盘随机写以后的顺序写性能会略差。其中的核心缘由在于NAND上的数据布局初始条件的不一样,GC行为会发生差别,从而致使后面的业务IO性能发生变化。在磁盘存储中不存在这些因素,可是在SSD存储中,必定须要考虑SSD固件的行为。一个比较好的设计是让SSD内部的FTL工做在最佳状态下,从系统软件层面总体控制存储IO的行为,从而保证IO的性能一致性,防止IO出现不肯定的抖动。blog