相比于传统HDD,SSD最大的不同在于使用的NAND闪存无法进行覆盖操作。在已经被写入数据的位置,要重复写入的话,SSD就必须先对该位置进行擦除的操作,而且擦除操作的最小单位(block)比写入操作单位(page)的要大。
SSD闪存基本组成:
SSD基本组成page(页面)、block(区块)、plane(平面)、die(核心)、NAND(闪存芯片)组成的,page是最基本的组成,大小一般是4KB,每个Block通常包含64个page(容量256KB),或128个page(容量512KB),多个Block组成plane,而plane就是闪存中一颗核心Die,一颗闪存芯片就由多颗Die封装而成。
国外的媒体就有做一个SSD写入数据的描述。在这里,搬过来,跟大家分享一下!
为了简化说明,假设每个block只有12个page,每个page大小1Byte。
保存时,SSD不能直接覆盖原有文件,需要重新占用8个page文件
这种状态下,代表着Block已满,通俗一点就“脏”了。要恢复性能就需要删除整个block区块,此时需要把有用的数据拷贝到另一个空白blokc中然后再清除Block A。
实际过程中数据显然不是只有这么简单,略微复杂一点的情况就如上图所示,1234.txt文档占用了8个page,xyz.dll也是占用8个page,分别在两个block区块中。word.doc文件也是占用了两个block,其中占满一个,另一个占用了8个page。
此时如果用户删除了xyz.dll文件,那么数据就要重新洗牌。Block B中的1234.txt重新拷贝到block A中,doc文件中的4B也要写入block A中,还有多余的4个page要再占用block D的4个page空间,而block E中的数据是满的,不需要移动,此时的排列就如上图所示,腾出来的block B和block C也就可以清除数据以恢复性能了。
真实的应用环境情况会更复杂,SSD需要不断地在各个block之间进行写入-转移-清空操作,SSD用久了需要擦除的区块就会越多,性能自然也会变慢。当然,SSD工作原理要复杂得多,涉及到很多层面,比如GC垃圾回收、磨损平衡、写入放大等,对SSD性能影响都非常之大。