内存的容错设计是怎样的?内存容量比你看到的更大!

【注:本文作者原创作品,未经允许禁止抄袭。侵权必究!全网追踪】

如果生活阅历足够丰富,你就会慢慢地懂得这个世界上没有什么是完美无缺的。年轻时看病总是希望根治,认为可以治好,满血复活。痴长了几岁后在医生那里开始听到了“不太影响生活”这样的句子,渐渐地对慢性疾病也变得云淡风轻起来,尝试与生活中那些不完美和平共处。人生观也改变了许多,对那些号称美好而无瑕疵的东西常抱有怀疑的态度,Too good to be true。同样道理,芯片制造行业也是一个和不完美打交道的行业,且不说工程师人为引入的各种硬件软件bug,单单从芯片生产的源头来讲,缺陷就已经深埋其中了。

由高纯净单晶硅做出来圆柱体的硅锭本身就自带缺陷:

硅锭在切片后得到元晶圆自然有问题:

这些缺陷就像撒芝麻粒,分布在整个Wafer上:

缺陷管理是芯片设计和生产必须处理的重要问题。

由Wafer生产出来的CPU中,我们可以在封测阶段关掉不好的内核或者功能:

CPU制造的那些事之一:i7和i5其实是孪生兄弟?!

由Wafer生产的Flash产品中,我们也可以提供冗余。在内存设计和生产过程中,怎么处理缺陷呢?其实还是提供冗余。下面我们就从封测阶段和使用阶段分别来讲一下各自用到的技术。

封测阶段

和Flash一样,DRAM内存颗粒在制作的时候也拥有多余的行,和相关的Fuse线路:

和大多数半导体设备一样,内存颗粒的可靠性我们可以通过失效率来衡量。如果我们以时间为x轴,y轴为失效率。失效率曲线如下:

失效率曲线

综合上面三种曲线,综合失效率是紫色曲线,它呈现两头高,中间低的特征,形状像个浴缸,我们把它叫做浴缸曲线(Bathtub)模型。内存颗粒在生命周期中的这种特点,表现在开始时故障率很高,如果没有问题,则可以稳定工作很久,到最后开始老化失效,故障率急剧升高。

内存颗粒在成产结束后,在封测期间,会被放入高温的环境下洗个澡(heat soaking),并加上高压。这样几个小时就相当于过了好几周。再拿出来测试,这时颗粒已经进入了浴缸曲线的底部稳定期。这个工序叫做老化(Burn-in)。如图:

这时测试,发现有坏的行(Row),就用备份的单元整个Row换掉,同时更改行解码的逻辑。这个过程叫做Fuse。如果坏行太多,整个颗粒就报废了。

Fuse是一次性的,变更后,用户没有办法再次更改映射关系。Fuse结束后,颗粒就可以出厂了,用户也不会有任何影响。

现在问题来了,如果颗粒很好,备份的空间完全没有用上,是不是我们可以把它们作为更多的内存自己来用呢,就像标称8Gb,实际可以用8.1Gb呢?答案是不行的,至于为什么,大家可以回去思考一下,也可以在评论区相互讨论。

既然不可以废物利用,这个空间浪费了好可惜啊,有没有别的办法可以用到它们呢?办法还是有的。

运行阶段

Believe me or not,内存故障在服务器故障中占比非常大:

内存的单元Cell出错后,有时可以被ECC等级制纠正,有时并不行。无论结果如何,操作系统都会被告知:

计算机硬件出错了会发生什么?

开始的时候只有个别cell出错,慢慢它附近的cell也开始出错。滴水汇合成小溪,溪流汇聚成江河,频繁的出差,即使是可以纠正的出错,也会严重影响性能。而不可以纠正的出错,可能会造成服务器宕机,对个人用户来说就是蓝屏了:

以前内存Cell损坏,整根内存条只有报废了。聪明的工程师把目光瞄准了冗余的内存单元,提出一种叫做Post Pacakge Repair(PPR)的技术,也叫做Fail Row Address Repair。顾名思义,所谓Post Package,就是封装后还可以修复,可以把损坏的部分行Row,用冗余的行代替。它分为软PPR和硬PPR,区别在于是否更改Fuse而变成永久性的替换。这样我们在使用中也可以变费为宝,延长DRAM的使用时间,太棒了!

尽管PPR技术只出现在LPDDR4的标准中,不在DDR4的JEDEC标准中,但几乎所有主流内存颗粒厂商都在普通的DDR4中,支持了这个功能。当然最终主板支持与否,要依赖不同厂家的BIOS,准确的来说就是内存初始化代码。

结语

除了内存冗余,DDDC和SDDC等技术也可以看作某种程度的冗余:

服务器的黑科技:服务器是怎么做到每年只停机30秒的?

【注:本文作者原创作品,未经允许禁止抄袭。侵权必究!全网追踪】

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190329A0NCEZ00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券