flash memory缺陷与改进
SSD(solid state drive)是一种利用flash芯片或者DRAM芯片作为数据永久存储的硬盘,这里不能再叫磁盘了,因为flash drive 不再使用磁技术存储数据。其中flash drive与DRAM的区别是DRAM其内部利用SDRAM内存条存储数据,所有在外部电源断开后,需要使用电池来维持DRAM中的数据。基于flash介质的SSD,所有的ROM和flash芯片都是使用一种叫做“浮动门场效应晶体管”的晶体管保存数据,每个这样的晶体管叫一个cell 也就是单元。有两种类型的cell Single Level cell(SLC)每个cell 保存1B数据,第二种是Multi Level cell(MLC)每个cell保存2B数据。cell是电子,也就是只能带负电荷,不能带正电荷,所有cell只有两种状态,带电表示0,不带电表示1, flash芯片的读是以page为单位的,也就是SSD的IO最小单位是1个page。但是对flash芯片的写入有一些特殊的步骤,flash芯片要求在修改一个I饿cell中的位的时候,在修改之前必须先erase即擦出这个cell。这里的erase动作就是将一大片连续的cell一下子全部放电,全变为1,这一片连续的cell是一个block,也就是每次erase只能擦除一整个block。然后向其中写入数据,如果刚好是1则不动作,如果是0则改变其电位,这个写0 的的动作也叫program。 flash的通病:flash芯片在写入时候有诸多效率低下的地方。 (1)erase before overwrite 对于机械磁盘,磁盘可以直接用磁头将对应 区域磁化,如果之前是1,新数据是1,则磁头对1磁化结果还是1,如果新数据是0,则磁头对1磁化变为0.而flash则不然,当要写入时候,必须先erase整个block为1,然后才向block写入新数据,而且,在erase之前,需要将整个block数据读入SSD的RAM buffer,然后erase整个block,再将待写入的新page中的数据在ram中覆盖到block占用对应的page,然后将整个更新后的block写入flash芯片。这种写惩罚叫write amplification(写扩大)。 当SSD向flash中的free space写入数据时候,并没有写惩罚,因为free space从上次被整盘erase后没任何写动作,而只有文件系统知道存储介质里边哪些是free space,但对于文件系统而言,删除文件的过程并不是向这个文件对应的存储介质空间覆盖为全0或1,而只是对元数据的更改,因此,删除文件并没有为存储介质自身制造free space,因此对于SSD本身来说,free space只会越来越少,最后没有free space导致每个写动作都产生写惩罚。因此存储介质看到的space space永远比文件系统的少。 (2)wear off 随着float gate 充放电次数增多,二氧化硅的绝缘能力逐渐损耗,最后失去绝缘性,无法保证FG中的电荷,此时,这个cell就是损坏,即wear off。而因为SSD寻址和IO单位是page,损坏的page对应的逻辑地址将被重定向到完好的page,而写惩罚大大加速了wear off。 SSD给自己的五个良药 (1)为了避免同一个cell被不断的擦写,SSD每次针对某个或者某段逻辑LBA地址的写都写到SSD的free space,即上一次全盘erase后从未被写入的block/page 这样只要直接写入则可,如果再遇到针对这个或者这段LBA地址的写操作,那么SSD再次将待写入的数据重定向到free space,而将之前的这个逻辑地址占用的page标记为garbage,可以回收再利用,等到block中大部分的page被标志为garbage时候,SSD将批量回收这些block,执行copy on write,将尚未标志为garbage的page复制到RAM buffer中,然后写入一个新的erase的block,再将所有待回收的block进行erase操作成free space,SSD这样做就是为了将写操作平衡到所有可能的block中,降低单位时间内内个block的擦写次数,既解决了wear off问题,也解决了大倍数的写惩罚。但是,SSD自己认为的纯free space只会越来越少,那么重定向写的几率也少了,此时大倍数的写惩罚无可避免。并且因为page的逻辑地址对应的PA不断的被重定向,SSd内部需要维护一个地址映射表且很复杂,这种算法叫wear leveling 即损耗平衡算法。 (2)定期清除体内垃圾 因为存储介质所看到的free space永远比文件系统少,所以必须让文件系统来通知SSD告诉他哪些逻辑地址现在并未被任何文件或者元数据占用,可以被擦出,这个思想已经实现。所有SSD厂商都提供一个工具叫wiper。运行此工具会扫描文件系统内不用的LA并将这些LA通知给SSD . wiper 不是实时通知SSD,这个每次是手动清除的。 (3)TRIM可以让文件系统在删除某个文件好后实时的通知SSd回收对应的空间,TRIM是ATA指令标准中的一个功能指令,在linuxkernel2.6.28中已经囊括但尚未完善,在windows中已经完善。 (4)delay write是一种存储系统常用的写IO优化措施,比如有先后两个针对同一个地址的IO,write1,write2先后被控制器收到,而在write1尚未写入之前,恰好write到达,此时控制器可以直接覆盖write1直接将write2写入。这种机制是写命中的一种情况。 SSD前景: 以上一切缓解SSD效率问题的方法都是治标不治本的,随着cell的不断损坏,SSD效率会大大降低。 可以将多块SSD组成raid,但是raid卡目前未支持TRIM。而seagate等厂商也相继推出了SSD+HHD混合式存储硬件,这种磁盘就是将flash芯片用于磁盘的二级缓存,一级缓存是RAm,二级是Flash,三级是磁盘片。利用这种多级缓存更大程度上降低了磁头寻道的影响,如果是只有RAM作为缓存它很快被充满后一定要连续的刷到盘片中,这样不可避免的导致性能下降。而使用flash芯片再加入一级缓存,这样数据从RAM中出来后先被存入flash,不用寻道,同时可以掉电保护,write back后,磁盘驱动器再在后台将数据从flash中写入磁盘片保存并清空flash。这样做,比传统纯SSD便宜,还保证了性能,有效屏蔽了磁头寻道带来的高迟延。但目前这个还不能取代传统纯SSD,因为其读取操作依然需要从磁盘片中读取几乎所有数据而不是从flash中。但是其取代趋势是存在的,今后磁盘如果都这么做将会大大增加单个磁盘的随机写性能,对RAID的更新与设计也是一个挑战,因为磁盘阵列控制器作为一个嵌在主机与后端物理磁盘之间的角色,其本质就是提升性能,而提升性能的原理是让众多的磁盘同时工作以屏蔽寻道所浪费的时隙。而现在每块磁盘自身利用flash屏蔽寻道时隙。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |