Friday, March 11, 2011

SSD notes

Cell: SLC(Single Level Cell)每一个cell可以存储一个bit,而MLC(Multiple Level Cell)每一个cell可以存储多个bit. MLC有更高的存储密度, 但是读和写一个cell也要花上更多时间.

Page: SSD一般把多个Cell组织成一个page,page的大小通常是4KB. page是SSD上读和写的最小单位.

Block: 而128个page又被组织成一个512KB大小的block. block是擦除数据的最小单位.

TRIM: 当要写的page为空的时候, 可以直接在这个page上写. 然而当这个page不为空的时候, 就需要把这个page所属于的block读入内存,然后在内存中改写相应的page内容,把SSD上的block完全擦除,再写入更改过后的block. 所以哪怕只是做一个bit的改动, 也需要完成上述步骤. 所以在SSD上做in-place或者random的写代价是非常的昂贵. 另外频繁的擦写也会对SSD的寿命造成损害因为一块MLC的SSD通常只能被反复擦写10000次.

这种独特的读写特性也给传统的文件系统带来的"困扰".比如文件系统通常自己维护可用page的信息并进行分配,而不会告知底层存储设备某个page的数据是依然有效还是已经被删除. 一旦有新的数据需要写入一个已有数据的page,就有可能需要等待先要擦除整个block,造成写的性能降低. 为了解决这个问题,很多SSD都支持TRIM这个功能来和操作系统交互. 当操作系统删除一个文件的时候, 除了更新文件系统外还会给SSD设备发送TRIM命令来告知这些文件占据的page已经不需要保存. 这样SSD可以提前用昂贵的block擦除更新把这些page清空. 在下次写的时候就不需要等待整个block的更新了.

No comments: