基于Flash的SSD
- 基于Flash芯片的SSD中从整体到局部的分层为
Nand Flash => Chip => Plane => Block => Page
几个层次。其中Block
是Nand Flash
擦除的最小单位;Page
是读写操作的基本单位
Erase Before OverWrite
问题
- 基于Flash芯片的SSD往某个block写数据的过程中,不论原来的Block是什么,必须先
擦除(Erase)
整个Block为1,然后在往这个Block写入新数据,这个擦除操作增加了覆盖写的开销。如果是更改某个Block中的Page,操作还是和之前一致,必须擦除整个Block然后在写入新的Page.在擦除操作之前必须将需要更改的Block全部读入到内存中,然后擦除相关的Block,然后将新Page数据覆盖写到内存Block中Page的位置,最后将内存中的Block写入到Flash芯片中,整个更改Page操作就完成了。 - SSD首次格式化后,SSD中将会被写入的Block尾椎都会被记录下来,记录一份位图中,每个BIt对应一个Block.文件系统中删除文件的操作仅仅是更改文件系统中元数据对应的存储介质对应区域,并没有因为删除而获得更多的空闲空间,所以针对SSD自身,空闲空间越来越小,最后会导致没有空闲空间,如果是这样每次写都会到来写放大(读取一些包含无效数据的Block,读入然后擦除在写入),写性能会越来越差。Block中Page是必须按照一个方向进行数据写入,例如一个Block 512K,包含了128个Page,当这个Block被擦除后,SSD控制器可以先向这个Block写入32个Page,经过一段时间,在往其中追加剩余的Page而不用再次擦除这个Block,这是因为SSD控制器记录每个Block中最大连续空闲空间,每次Block中Page写不能跳跃的追加,写完063个Page后,在写64127个Page.SSD控制器尽量一次性写满整个Block来避免额外的开销。
Wear Off
问题
- 如果基于Flash 的SSD存储介质,其中的Flash中的Cell中的绝缘体被击穿一定次数(SLC为10万次,MLC为1万次)后,失去了绝缘的功能无法保证有足够的电荷,此时Cell就损坏了(Wear Off问题)。写放大会加加速
Wear Off
问题,本质是增加了很多不必要的擦除。
解决问题之道
厂商wiper工具
:基于Flash的SSD中内部的空闲空间决定了SSD的寿命和写入性能。要保持SSD内部更多的空闲空间就必须让文件系统通知SSD哪些未被文件或者文件元数据占用空间,可以被擦除。目前很多SSD的厂商会提供Wiper
工具,这个工具会扫描文件系统中哪些哪些无效或者未被使用的逻辑地址,并且告诉SSD进行擦除然后回收到空闲空间。如果业务系统是频繁删除和写入文件,建议定期运行来回收空间。TRIM
:TRIM
是ATA
标准指令集其中的指令,这个指令可以让文件系统的删除文件操作实时的通知到SSD回收对应的Block,然后放回到空闲空间。