PCEVA,PC绝对领域,探寻真正的电脑知识
打印 上一主题 下一主题
开启左侧

别只顾着围观看热闹,解读SSD专业词汇

[复制链接]
跳转到指定楼层
1#
Essence 发表于 2014-10-27 10:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
点击数:11834|回复数:9
本帖最后由 Essence 于 2014-10-27 15:06 编辑

很多人都喜欢看浴大的帖子,不过限于知识水平,很多人其实只是停留在“不明觉厉”的阶段。围观看热闹之余大家是否也想看懂、了解更多内容呢?一起来补习些基础知识吧,这对于认识固态硬盘工作原理也是很有用的。

何为ECC,ECC的原理是什么?

ECC是 “Error Checking and Correction”的缩写,即错误检测与修正。

要纠正错误,首先需要发现错误,这就是纠错校验码的作用。纠错码无所不在,举个常见的例子,身份证号码有18位长,输入的时候容易输错,那么就在18位身份证号码的最后一位设置了一个校验位,他是由前17位数字经过计算生成的一个校验码。在输入身份证号码的时候,系统就可以通过运算检验输入是否正确。如果感兴趣的话你可以百度一下“ISO 7064:1983.MOD 11-2”,这就是身份证校验码的计算标准。另外像ISBN国际标准书号的末位也是一个校验码,当然计算方法是不同的。

回到电脑领域,就我来说,最早接触到ECC一词是和内存有关。内存的工作原理类似用电容储存电荷来表示0和1,8个二进制0/1组成一个字节。早期的内存错误检测使用的是奇偶校验的方式,把每个字节的8个二进制位相加,得到的结果用奇数偶数区分,存储在奇偶校验位。如果读取时候发现奇偶校验位不正确,计算机就能发觉数据已经出错,当然这种传统的奇偶校验方法只能用于发现错误,而无法纠正错误。

奇偶校验方式的开销比较大,而且只能发现错误无法进行修复,后来就发展出了通过特定算法,具备纠错能力的ECC内存。ECC内存同样需要额外空间存储纠错码,纠错码的算法并不唯一,其中的深层原理需要丰富的数学知识才能理解,这里就不多说了。

重要却也有其极限的BCH算法:

固态硬盘上使用的ECC算法最常见的是BCH码。BCH是 Bose、Ray-Chaudhuri 与 Hocquenghem 的缩写,是编码理论尤其是纠错码中研究得比较多的一种编码方法。在很多固态硬盘主控的技术参数中我们常常会看到他的身影。比如在SandForce 2281主控的介绍中对于纠错能力就是这样描述的:

Up to 55 bits correctable per 512-byte sector (BCH)

这代表SandForce的纠错能力允许在每512字节数据中最多纠正55个比特的错误。实际上,BCH纠错级别在开卡设置时未必会设定到最高级别,因为纠错级别设置越高,纠错所需运算越复杂,不但主控运算资源可能跟不上,额外的纠错码存储空间需求也会增长,性能也可能会受到影响。这也是为何SSD主控的纠错能力并不能随心所欲的无限制提高的原因。

事实上,还有一个很少被披露的参数,除了纠错比特数之外,纠错算法还会有个检测比特数的极限,如果错误比特数超过极限后,就会有错误无法被检测到,更不要说纠正了。

BCH纠错纠正不了的错误怎么办?

当颗粒进入寿命末期之后,出错会越来越多,如果检测到超出了BCH纠错所能纠正的范围,也就意味着数据读取失败。当然,一次的读取失败不会打败现代的固态硬盘主控,主控会放出大招——Read Retry重试读取

下面举个例子,用比较形象的方式形容Read Retry重试读取的过程:我们在去做视力检查的时候,医生会给我们指着视力对数表上的图形让我们辨别,当字越来越小时,我们看的就比较困难了。但这种情况下,我们还是会努力睁大眼睛去看(Read Retry,使劲再看看),然后告诉再医生看到的结果(其实多半已经是猜测出来的结果了),这个时候医生会告诉你答对了还是答错了(医生就像BCH算法,能够检测出读取出来的数据是否有错误)。

Read Retry其实并不新鲜,在机械硬盘出现坏道后也能体会到硬盘反复尝试读取的现象。对于固态硬盘来说,Read retry还包括更高级的阶段,也就是“Shift Read”,主控会通过调整多组不同的电压等参数来再度尝试读取。

还回到上面那个视力检查的例子中,如果医生发现我们的视力的确是坏掉了(近视了..类似颗粒进入寿命末期,出错越来越多),就会开始给我们配眼镜,通过添加和尝试不同的镜片让我们戴上后再尝试识别视力对数表上的图形(近视的同学应该都经历过…镜片就像是Shift Read,调整尝试多组读取参数尝试读取),经过调整后就有可能将数据正确地读取出来。

除了上边的纠错方式之外,有些固态硬盘主控还会使用类似RAID阵列原理的数据冗余存储方式来保证在前边所述的纠错都失败时能最终保住盘上的数据。比如SandForce支持的RAISE特性和美光M500上所使用的RAIN(Redundant Array of Independent NAND,独立NAND冗余阵列)。当然这些也是以消耗固态硬盘可用容量作为代价的,目的就是为数据安全树立最后一道屏障。

总结:

BCH纠错是最基本的纠错方式,他能够检测到错误并在一定范围内修正错误。如果BCH纠错无法解决则尝试Read Retry重试读取,重试读取还包括调整读取参数的Shift Read,当这些都无法纠正错误时,RAISE/RAIN这类冗余纠错措施将是最后一道防线(这道防线不是所有固态硬盘都具备)。纠错算法是有一定额外开销的,比如对于三星840Evo的掉速BUG,现在最为可能的原因就是三星为了提升TLC闪存在耐久度测试中的表现,降低了后台数据刷新的频率,出错增多后依靠Read Retry来强行读取,重试读取次数过多导致读取速度的下降。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

评分

参与人数 2活跃度 +10 收起 理由
bssharp + 5 很给力!
Suser + 5 很给力!

查看全部评分

2#
Aihuil 发表于 2014-10-27 10:47 | 只看该作者
讲的很详细,感谢 能不能多讲几个
3#
lzf19750908 发表于 2014-10-27 13:41 | 只看该作者
学习了,很详细明了,我关心浦科特的最后防线有没有?
4#
readium 发表于 2014-10-27 13:55 | 只看该作者
求楼主讲一下LDPC。BCH就快不够用了。
5#
huilailewo 发表于 2014-10-27 16:38 | 只看该作者
“事实上,还有一个很少被披露的参数,除了纠错比特数之外,纠错算法还会有个检测比特数的极限,如果错误比特数超过极限后,就会有错误无法被检测到,更不要说纠正了。”

这种缄默内容很难看到,希望更多
6#
mansea 发表于 2014-10-28 11:10 | 只看该作者
不知道intel的那招只读算什么
7#
cuiplay 发表于 2014-10-30 20:51 | 只看该作者
普及一下专业知识,以往都是看热闹
8#
初恋璀璨如夏花 发表于 2014-12-5 08:49 | 只看该作者
不错,柯普一下
9#
haierccc 发表于 2014-12-5 18:12 | 只看该作者
ECC内存能够用在PC上么
10#
xmiangui 发表于 2014-12-5 23:04 | 只看该作者
haierccc 发表于 2014-12-5 18:12
ECC内存能够用在PC上么

还要主板、CPU支持
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部