说到Retry,最先想到的就是一次读不成功,那就再读一次好啦。确实,有时候简单的再读一遍的确就好了,但这并不是所有的情况。需要Retry的大部分场景都还是比较复杂,下面我们展开了讲一讲。
俗话说的好,“知己知彼,百战百胜”,对于Retry,我们需要对症下药。我们需要找到读失败的原因。由于NAND介质的原因,当读一个没有写满的Block时,这时候Block很不稳定,所以非常容易读失败,这种Block我们称之为OpenBlock。第二种情形是Data Retention, 说的是数据由于长时间存放,随着NAND充电单元的缓慢放电,将导致数据比特发生翻转从而导致数据读取失败。第三种是Read disturb,我们知道,NAND介质是一个巨大的存储矩阵,如果一个存储单元周围的数据总是被频繁读取,那么会对本储存单元造成干扰,从而有可能导致读取本储存单元数据的时候发生错误。有Read disturb,那么相应的也有program disturb,同样的如果一个数据存储单元周围的存储单元总是被频繁的擦除写入,也会对本存储单元的数据造成干扰,从而导致读失败。还有一种场景,那就是温度的变化也会引起读失败,众所周知,在不同温度下半导体器件载流子的活跃程度是不一样的,我们在高温情形下写入的数据在低温下去读,或者低温场景下写入的数据在高温下去读,都有可能发生错误需要进行Retry。最后,不可避免的,随着SSD固体硬盘的使用,NAND器件的EP cycle也越来越高,数据存储单元中栅极氧化层也磨损越来越严重,导致的后果就是用来表示数据信息的栅极电路中的电荷流失会加剧,从而导致数据读取失败。
表1 一些常见读取失败的原因
好了,在上面我们的描述,几乎所有的原因都不外乎NAND数据存储单元的比特翻转,那我们怎么判定读失败呢?是这样的,根据NAND存储介质的特性,存储单元比特的翻转几乎是不可避免的(工艺成本的考虑,我们或许可以制作出不会比特翻转的器件,但成本会高到与机械硬盘相比较的性能优势无法弥补的程度),但我们通过专门的数据冗余保护技术来解决这个问题。我们将用户的数据随机化扰码处理后,进行编码,将编码后的数据和冗余校验数据都写入NAND介质。在读取数据时,如果存在少量的比特翻转,是可以通过冗余校验数据纠错回来的。但是,当翻转的比特数目超过了解码器的解码能力后,就解码失败了,也就是上面我们说的读取失败了。
图1 数据写入与读取流程示意图
既然有这么多可能导致读取失败的原因,那么在SSD固体硬盘运行起来后,我们怎么知道某一次读失败究竟是哪一个原因导致的呢?答案是并不知道。因为读失败的现场并不会提供确切的信息来告诉我们具体的失败原因。但是,我们可以根据实际的测试数据结合理论进行分析,将读失败的场景按照出现频率进行分类。针对高频场景对相应的Retry 策略进行改进优化,降低Retry 的Latency,从而提高读取性能和效率。
说完了发生Retry的场景,那我们到底是怎么做Retry呢?根据NAND存储数据原理我们知道,读取NAND存储单元中的数据,就是将NAND单元的存储的电荷量通过电压比较器读取出电压值来,电压值所处于的档位信息就是所存储的数据。在读取失败的场景中,这些电压值都发生了不同程度的波动,偏离了写入时的位置。因此,我们做Retry就是要改变电压比较器的参考电压值,去尝试得出正确的电压档位。通过改变读取电压参考值,使得我们数据的读取操作可以根据产品不同的使用场景,产品不同的寿命阶段进行灵活调整。目前大部分NAND器件都提供了调整参考电压的接口,并且针对一些普遍的场景给出了Retry的推荐参考电压值。但是SSD固态硬盘厂家还是要对NAND颗粒进行大量的测试,以彻底摸清其特性规律,为充分发掘产品潜力打下坚实的基础。DapuStor针对产品中使用的NAND颗粒做了大量的深入研究,针对NAND特性优化了一系列的Retry策略,极大的提高了Retry的效率,这里就不一一说明了,感兴趣的同学可以与DapuStor联系交流。
图2 正常数据读取比较过程
图3 Retry读取数据时参考电压调整
如果通过调整参考电压去Retry都没有成功,该怎么办呢?这时候我们可以使用更高级的解码技术:DEEP RETRY技术。DEEP RETRY以默认的参考电压为基准,在其附近不同位置进行多次数据读取。这样,以默认参考电压读取的数据我们称为Hard data,以附近不同位置参考电压读取的数据我们称为Soft data,将Hard data和Soft data送入专门的解码器进行解码,将大大的提高解码的成功率。也就是说,单独对Hard data和Soft data进行解码不能成功,但读取的Soft data能提供额外的判决信息,从而提高解码成功率。
图4 DEEP RETRY技术
DEEP RETRY技术拥有强大的解码能力,但同时DEEP RETRY解码功能也是复杂的而耗时的,启用DEEP RETRY也会对产品的性能带来一定冲击。在DapuStor的产品中,经过完整的测试,对软件进行了充分的优化,将DEEP RETRY带来的性能波动将至最小,尽可能利用DEEP RETRY技术来保护好用户数据。
最后,可能还有人要问,如果DEEP RETRY也失败了怎么办?我想那可能要用到别的数据保护技术了,比如RAID技术,可以参考我们的其他文章介绍。
扫一扫
关注我