闪存的可靠性问题与解决方案
天硕(TOPSSD) G40系列工业级固态硬盘采用自研主控及全链路国产化替代方案,可在 -40℃~85℃ 宽温范围内稳定运行;遵循国家军用标准进行设计验证,更能胜任严苛环境下的长时任务。系列产品长期服务军用嵌入式计算机、指挥控制系统、雷达、电子对抗、轨道交通与高端工业自动化等关键应用,是舰载、机载、装甲车辆等装备的优选核心部件。
闪存的可靠性会随着存储密度越来越高,逐级下降。并且由于其物理特性,所有的闪存都会遇到一些共性问题。本文将对这些问题做简要阐述,并说明现在的SSD厂商的主要解决方案。
1. 磨损
一个闪存块的磨损程度可以用“擦写次数”来衡量。闪存不像内存那样几乎可以无限次使用,每擦除、写入一次,保存在里面的数据就会变得不那么可靠。当错误多到连控制器自带的纠错功能都修不过来时,这个闪存块就会被标记为坏块,无法再使用。随着擦写次数增加,闪存的原始比特错误率(RBER)会逐渐升高。
闪存厂家通常会在规格书里标一个擦写次数,比如某款3D TLC闪存标称3000次。但这个数字其实是在某一种纠错能力的假设下给出的。如果SSD控制器使用的纠错算法更强,闪存寿命就可以超过3000次;反之,控制器纠错能力更弱,寿命就会缩水。所以,闪存的实际寿命不是固定值,它和使用时的纠错能力紧密相关。

此外,闪存寿命也和“数据保持时间”有关系。厂家标称的3000次,基于默认你写进去的数据需要保留一定时间(比如一年)。如果你对数据保存时间要求不高,只是临时存一下,那么闪存能承受的擦写次数可能远远超过标称值。所以标称次数只能作为参考,实际能写多少次,完全取决于你的使用场景。

正因为闪存块会被写“坏”,SSD的固件里都会有一套“磨损均衡”算法,它的任务就是让所有块轮流承担写入任务,而不是总逮着几个块拼命写。否则,那几块很快就坏掉,整块SSD也会提早报废。
2. 读干扰
在读某个闪存页时,为了能让其他位置上的晶体管正常导通,需要给它们加一个较高的电压,这会让这些晶体管被顺带轻轻“编程”一下。随着读取次数越来越多,未被读取的页面会受到微弱的电场诱导,导致电荷状态发生改变。简单说,读干扰是“读这个页,却影响到了别的页”。
从内部看,读干扰会让受影响存储单元的电压整体向右偏移。这就导致原来能正确区分数据状态的参考电压变得不准了,比如原来能分清“01”和“00”,现在再用同样的电压去读,有一部分“01”就会被误认成“00”,数据就会读错。

需要强调的是,读干扰本身并不会直接损耗闪存的寿命,它只会威胁到当前存储数据的可靠性。但为了解决读干扰问题,SSD固件会执行“刷新”操作,把受影响的数据搬走重写。但这会产生额外的写入,也就是写放大,从而间接缩短闪存寿命。
3. 写干扰与抑制编程干扰
写干扰指的是,在一条字线上执行编程操作时,会“误伤”到这条字线上那些本不需要写入的存储单元。
闪存编程需要高达15V~20V的高压。对于同一条字线上需要编程的单元,其位线电压为0V,高电压差形成强电场,电子顺利注入;但对于同字线上不需要编程的单元,它们同样会暴露在这个高压下,面临被意外注入电子的风险。
为了解决这个问题,SSD采用了编程抑制(Program Inhibit)技术。具体做法是:先对不需要编程的单元的沟道预充一个正电压,然后关闭位线选择管,使沟道处于浮空状态。当字线上高压到来时,浮空沟道通过电容耦合自动升高电压(接近字线电压),从而大幅减小沟道与字线之间的电压差,有效抑制意外电子注入。

然而,编程抑制技术本身也会引入新的可靠性问题:抑制编程干扰。因为被抑制的单元沟道电压较高(如8~10V),而相邻的、需要编程的单元沟道电压为0V,两者之间会产生很强的横向电场。这个电场可能激发高能热电子(Hot Electron),注入到某些本该保持数据的单元中,导致:
l 已写入的页发生位翻转(“0”变“1”或“1”变“0”),或
l 尚未写入的页偏离干净的擦除状态。
可以看到,写干扰与抑制编程干扰是同一编程高压下的两个对立面。前者源于字线-沟道压差过大(意外FN隧穿),后者源于相邻沟道间的横向电场(热电子注入)。优化抑制电压以减轻其中一种,往往会加重另一种,因此工程上必须联合权衡。

总之,无论是磨损、读干扰还是写干扰,最终都可能表现为数据出错。此时,纠错引擎就是最后一道防线,闪存能用多久、多可靠,极度依赖它的强大程度。天硕自研的增强型LDPC ECC,每4KB可纠正高达700比特的错误。正是这样的硬实力,才让高密度的闪存在复杂工况下依然值得信赖。
▎相关文章