ningxueqin 发表于 2024-2-24 08:55:42

高性能方案加固NVMe模组闪存的遗忘

  一、记忆与遗忘
  正如艾宾浩斯记忆曲线所示:输入的信息经过人脑的注意过程后被学习,学习的信息进入人脑短时记忆。遗忘在学习后立即开始,若不及时加以复习,短时记忆中的信息就会被遗忘;但遗忘的速度并不均衡——遵循先快后慢的原则。
  任何记忆体都会遗忘,闪存也不例外。对于闪存,通常用出错率(RBER)来衡量其对数据的遗忘程度。出错率小于ECC纠错能力的可以被纠错,反之则没法纠错。没法纠错的数据就相当于被“遗忘”了。
  影响闪存遗忘的因素主要有以下三种:
  1.1、Read Retry
  一般来说,高性能方案加固NVMe模组闪存都是用默认的读取参考电压(Default Vread,简称DVread)来读取。用默认Vread读取的出错率称之为DRBER。采用更优的Vread读取的数据的出错率为更优RBER,记为ORBER。相同条件下,ORBER通常比DRBER要小很多。
  下图为某一款闪存在1000P/E cycles,1年40℃保持时间下,某一个Block中所有Frame的出错率频度统计。其中Frame大小为1Kbyte+Parity。
  纵坐标是对应RBER的Frame个数。ECC是ECC纠错能力。从上图可以看出,DRBER很多都不能被ECC引擎纠错。如果DRBER不能被ECC引擎纠错,那么就会启动Read Retry流程。Read Retry就是逐步逼近ORBER的过程。
  下图说明了Read Retry的实际效果。DR是默认Vread。虚线是之前的阈值分布,实线是现在的阈值分布。区域A是默认读的出错数,区域B+A是当前默认Vread读出数据的出错bit数。区域B就是增加的错误bit数。可以看出,默认读出错的增加是很恐怖的。所以需要Read Retry。
  而区域C和区域D则是前后更优Vread下出错的个数。很显然,不管是增加的出错数还是出错数都是很少的。
  总结:Read Retry可以减少数据出错率,使得数据出错率趋近ORBER。
  1.2、Retention 与 P/E cycle
  P/E cycle和Retention时间是经常一起出现的一对。很难脱离一个来说明另一个对出错率的影响。由于DRBER变化过于剧烈,实际中倾向于用ORBER来衡量出错率。
  下图是以Retention Time这个维度来看一个Block平均ORBER的变化趋势。(更大值离散性比较大,不容易看出规律)
  从图上可以看出,出错率随着时间的增加而增加,然后增加量却在减小。P/E cycle越大,增加的速度也越大。
  这个趋势跟遗忘曲线正好反过来。这一点很好理解。出错越多,那么遗忘度就越多。一开始出错增加很快,遗忘率就下降很快。
  用对数函数来很好的拟合这个增减率:
  如果用P/E cycle这个维度来看待一个Block的平均ORBER,那么情况会变得更加有趣。下图是不同Retention时间下,出错率跟P/E cycle的关系:
  如图中所示,在P/E cycle大于100的时候,出错率跟P/E cycle几乎是呈线性。总结:P/E cycle越大,Retention时间越长,出错率就越大,遗忘的信息也就越多。
  1.3、温度
  温度加剧了混乱度,温度对混乱度的加剧可以用的阿伦尼乌斯公式(Arrhenius equation )来定量描述:
  这个公式说明对于温度T1下,保持时间t1等效于温度T2下等效的保持时间t2。简单的来说,就是对于Flash的出错率来说,在温度T1下保持t1时间,跟T2下保持t2时间是等效的。
  不过这个公式不能直观的看出温度的“威力”。下表可以充分展示这种威力。
  上表可以看出,120℃下,保持1个小时,相当于常温20℃下保持7.37年。
  总结:高温是闪存遗忘的一个重要原因,温度越高,闪存遗忘信息也就越快。
  二、延缓遗忘的做法
  我们人类延缓遗忘的有效方法就是复习。而闪存延缓遗忘的办法更多,主要有以下几种:
  1、增加ECC的纠错能力
  这一点本质上是延缓了Flash的遗忘。纠错能力强了,那么可以保持的时间就更久。
  2、刷新
  时不时的去读一下闪存,如果发现数据出错超过一个阈值,那么就把这些数据读出来,重新写入Flash的另一个Block。
  3、Read Retry
  Read Retry可以减少数据出错率,使得数据出错率趋近最小出错率。
  4、降低温度
  降低温度是一个有效的办法,只是对于普通存储来说,降低温度成本较高。

页: [1]
查看完整版本: 高性能方案加固NVMe模组闪存的遗忘