首先要明确一件事情,严格的说,不是写入数千次,而是擦除数千次。
SSD的存储颗粒还是NAND flash,NAND flash的组织方式是,一片NAND分为很多块(Block),每个块又分为很多个页(page)。比如下图,就是一个典型的NAND flash的组织方式,它一共有4152个块,每个块有128个页。
知道了NAND flash的组织方式,下一步要说的就是读写方式。
NAND flash的读是以页为单位读的,不管你是读一个bit,还是一百个bit,NAND都是一次性读一个页(上图中的例子,就是一次性读8K的数据)。
NAND flash的写比较特殊,原则上,写是以页为单位的,但在一个块里,必须按顺序写,不能跳着写,不能先写第五个页,再写第八个页,这是不允许的,一定要按顺序写,还有一点,要写一个新的块时,一定要先擦除整个块,也就是说,擦除是以块为单位的。
这就回到我开头说的那句话了,严格的说,SSD的限制,不是写入数千次,而是擦除数千次,是每一个块的寿命是擦除数千次。
从直觉上看,这个数千次是一个很小的数目,对于我们电脑这么庞大的系统,几千次岂不是分分钟就坏了?
其实你大可不必担心,虽然擦除次数只有数千次,但是你想把它写坏,也不是件容易的事情。
这里不得不提的一个概念,就是磨损均衡(wear leveling)。
相信负载均衡这个概念大家都听说过,但是磨损均衡比较少听说,因为磨损均衡确实基本上只针对NAND flash这种必然会写坏的设备。
那磨损均衡到底是怎么一回事呢?我先举个很形象的例子:
大家都打过魔兽争霸这一类的对战游戏吧?你带领一队人马去跟别人对战,你的兵都有血条,对方打一下,就少一点血,打很多下,血没了,这个兵就死了。高手玩魔兽争霸的时候,非常在乎微操,他们总会把血比较少的那个兵拉到后面一点,减少伤害,把血多的兵放在前面吸收更多的伤害,保持这样的微操,就能尽可能降低死兵。我现在脑海中都能浮现当年那些经典的场面,对方一个牛逼哄哄的英雄跑到过来杀农民,然后对几个农民极限微操,最后每个农民都剩一滴血了,但是都没死,撑到了大部队来救援,对方无功而返。
这种微操,我可以用技术一点的命名:伤害均衡。
对应到NAND flash这边,磨损均衡也是一样的道理,每个块的剩余擦除次数,其实它