11

内存对抗损坏的坚实堡垒:封装后修复(PPR)是什么?

 2 years ago
source link: https://zhuanlan.zhihu.com/p/424346934
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

内存对抗损坏的坚实堡垒:封装后修复(PPR)是什么?

中央处理器 (CPU)话题下的优秀答主

就像生物终不免死去一样,设备的老化和损坏不可避免。如果问你现代计算机系统什么东西最容易损坏?首先映入你脑海中的是什么?在最严苛环境中7天24小时运行的云服务器可以告诉你答案。据IDC 2020年的数据,主板上失效率前四位分别是:硬盘、内存、IO设备和CPU。为了对抗失效率,为客户提供可靠的服务(RAS),服务器在设计的时候一定要考虑错误检测、汇报和修复。发生错误不可避免,如何才能无感的修复用户珍贵的数据呢?那一定是靠冗余了。排在第一的硬盘失效对抗方法十分成熟,在SMART信息预警后,依靠RAID或者分布式存储,让数据避免损失。那么同样存储了重要数据的内存呢?

内存开始老化出错的时间之早也许出乎你的意料。在24小时运行在高温的服务器环境下,由精挑细选的高品质DDR颗粒组成的服务器内存条,也平均在不到2年就开始有单比特错误了。这种错误并不会造成数据错误,会自动被修正。但这种错误往往是永久的,如果你忽略(甚至没有)这种报警,不理睬通过WHEA或者带外BMC的温柔抱怨,后果将是越来越严重的。就像屋角的霉斑不加处理会滋生蔓延一样,单比特错误的弱单元(weak cell),附近的Cell质量也一定不太好,错误将慢慢扩展。也许是相邻Row,也许是相邻Column,也许是隔壁Bank里的Cell也开始有错误了!Intel有一系列办法对抗这种传播,ADDDC,PLCS等,可以对抗甚至修复双比特的错误,但请出这些神器之前,JEDEC标准组织在制定标准的时候有没有考虑过修复错误呢?

答案是肯定的,JEDEC在DDR4标准制定的时候就加入相关考量,提出封装后修复(Post Package Repair,PPR)。PPR还分Hard PPR (以下简称hPPR)和Soft PPR(以下简称sPPR)。那么PPR究竟是怎么工作的,hPPR和sPPR有什么区别呢?DDR5在PPR有哪些改进呢?今天我们一起来了解一下。

内存中的冗余

对抗错误的大都是冗余,所以内存颗粒在设计的时候也考虑增加冗余,对抗错误。这种错误可以是生产中带来的,也可以是使用中。和Flash颗粒一样,DRAM内存颗粒在制作的时候也拥有多余的行,和相关的Fuse线路:

v2-fbb25171a470cd98b0aad083969056df_720w.jpg

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

v2-55256629860119acb674afa3132ea82c_720w.jpg失效率曲线

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

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

这时测试,发现有坏的行(Row),就用备份的单元整个Row换掉,同时更改行解码的逻辑。这个过程叫做Fuse。如果坏行太多,整个颗粒就报废了。Fuse是一次性的,变更后,用户没有办法再次更改映射关系。Fuse结束后,颗粒就可以出厂了,用户也不会有任何影响。

这些多余的Row往往用不完,那么剩余的Row是不是浪费了呢?我们的PPR是时候登场了。

Post Package Repair(PPR)

Post Package,顾名思义,是封装后再修复,也就是出厂后在用户那里修复。JEDEC DDR4标准规定,8Gb及以上的颗粒必须留一条冗余Row给每个Bank Group(什么是BG可以看我之前的文章,文下也有链接),而4Gb及以下的颗粒是可选的。

我们算一下,x4和x8的颗粒有4个bank group,x16只有2个bank group(为什么见这篇文章 老狼:选择内存条的必备知识:x16内存条为什么这么慢?2R和1R重要吗?),那么就是说x4和x8的颗粒,整个只有4个空闲Row,x16的颗粒甚至只有2个row,可以说非常之少了。现实中的内存厂家,如美光或者国产的长鑫存储DDR颗粒,会提供超过标准的Repair row。如美光每个bank提供至少一个row,而不是每个bank group,相比标准提高了4倍,如果生产fuse用到的少,则可以留存的更多。而长鑫存储的颗粒也有类似设计。

冗余空间准备好了,PPR是怎么工作的呢?PPR分为Hard PPR (以下简称hPPR)和Soft PPR(以下简称sPPR)。内存支付PPR与否、哪一种,可以通过读取MR(Mode Register)获得。

hPPR是一种永久的PPR修复,也就是会通过一次性更改fuse的办法来更改地址路由,用冗余Row替换受损Row。这种更改可以理解为熔断了一部分路由,所以是一次性和永久的,所以这种替换是永久的和不可逆的。它优点是更改后永久有效,内存就算修好了,掉电或者拿去别的机器也一样有效;缺点是耗时较长。

sPPR是一种临时性修复,是更改颗粒里面的软路由,将冗余row临时替换受损Row。可以理解为一个软件路由表更新了一下。它的优点是速度很快,缺点也是明显的,在掉电或者颗粒reset之后,改动就消失了。也就是如果还出错,还要再做一次。

hPPR和sPPR具体选择哪种?作为专栏的读者,也许你已经猜到了,服务器BIOS有个专门的选项,用户可以自己选择,也可以两者都不选。

PPR发生在什么时候?理论上,应该越早做越好。在实践中,发生在Write DQ/DQS Training后。在服务器环境下,因为需要5个9等长时间开机,理论上也可以在线修复,这叫做Runtime PPR。

hPPR和sPPR可以共存吗?不可以,但上一次做好了hPPR,如果还有row留下来,还可以做sPPR。

具体hPPR和sPPR的步骤,JEDEC DDR4 SPEC写的十分详细,感兴趣的同学可以参考一下。

DDR5对PPR的提升

DDR5对PPR提高比较有限。主要表现在删除了associated row的内容。DDR4在做Runtime PPR的时候,要备份Target Row和所有associated row,而DDR5只需要备份Target Row即可,速度可以大大提升。

在我的公众号里面留言“资料”可以有些芯片公开资料分享,有些同学留言还需要JEDEC的内存标准资料。因为这些资料不是公开资料,我不能分享,但其实想要这些资料也十分简单,完全可以自己去下载,大部分资料都是可以免费下载的。

打开JEDEC网站[1]Home | JEDEC

例如我们需要DDR4 spec,可以输入DDR4,开始搜索:

搜到145个资料:

好些如图所示是Free download,我们仅仅要做的是注册一下而已。

欢迎大家关注本专栏和用微信扫描下方二维码加入微信公众号"UEFIBlog",在那里有最新的文章。关注公众号,留言“资料”,有一些公开芯片资料供下载。

其他内存相关文章:


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK