SRAM 存储的容错设计和可靠性评估研究∗

2019-11-29 05:13程振洪熊庭刚
计算机与数字工程 2019年11期
关键词:汉明译码镜像

程振洪 阮 航 熊庭刚

(武汉数字工程研究所 武汉 430205)

1 引言

计算机系统离不开存储设备支持,恶劣环境中的存储设备的存储性能易受影响甚至引发故障,直接导致计算机系统的崩溃。据统计,80%以上的系统崩溃问题均由存储设备数据错误引起。近年来针对纠错码的研究推动了存储容错进程[1]。文献[2]针对硬件实现纠一检二的编码用于内存保护时纠错能力有限的问题,提出了一种软硬件协同的EDAC(error detection and correction)检错纠错方法。在硬件对水平方向的每个字进行纠一检二编码的基础上,该方法在软件上对垂直方向的每个位片进行奇偶编码,并通过软硬协同方式发现并纠正内存位翻转错误。该方法无需增加额外硬件开销,相比纯硬件EDAC 的可靠性有一定提高,不足之处是系统性能的开销有所增加。汉明纠错编码在硬件容错方向应用广泛,如文献[3]提出一种基于[12,8]拓展汉明编码[4]的AES(Advanced Encryption Standard)硬件容错设计方法。文献[5]基于一套ECC加固的SRAM 可靠性评估体系,采用广泛应用的MTTF(平均无故障失效时间)作为可靠性依据。文献[6]提出了基于闪存错误特征的联合译码策略,并研究了面向闪存系统的多进制LDPC 码。文献[7]针对内存单粒子翻转问题采用SEC-DED编码进行纠错。文献[8]用软件实现SEC-DED 编码,尽管多位错误翻转出现概率不大,但仍是该可靠计算机设计不得不考虑的问题。除了存储器本身出现的数据错误外,数据在片外传输通道上的信号衰变和损耗也会导致错误发生,故设计合适的纠错编码保证传输质量十分重要[9]。另外,NAND 闪存的纠错工作也是近年的研究热点,多种编码得到应用,如二维汉明编码[10],QC-LDPC码[11],RS码[12]。其他应用场景,如存储系统芯片级容错[13]、光存储纠错[14]、云存储容错[15]也有研究。

采用软件或者软硬件结合的纠错技术虽然能够一定程度上满足纠错需求,但存在数据纠正效率较低,难以解决内存在连续访问模式下的数据纠错问题,另外当前涉及镜像存储结构的可靠性研究十分稀少,本文针对此情况展开研究。

2 SRAM存储容错硬件设计

本文的SRAM 存储容错方案在硬件上采用镜像内存结构。镜像内存采用两片物理特性相同的内存,通过添加额外的特殊控制电路,使得内存的写操作得以同时进入两片内存。当错误发生时,可以快速切换至备份内存总进行读写操作。镜像内存通过内存热插拔技术,即使内存出现物理性的永久损坏,也可以在系统运行时替换内存。执行替换后,再通过内存间拷贝的方式,迅速从备份内存中恢复有效,提高内存系统的可靠性,从而达到延长系统无故障运行时间的目的。本文所采用的镜像内存系统原理框图如图1所示。

图1 原理框图中两套物理上独立的CPU 总线分别与存储模块A、B 连接,用于传递CPU 的读写事务和内存反馈的数据信息。总线协议解析/封装模块起到两个作用:1)从CPU总线解析得到内存访问的类型、类型、数据信息;2)将读取的内存数据封装成CPU 总线的协议。ECC 编码模块将CPU 总线写入内存的原始数据进行ECC编码处理,在其后添加校验码字段,形成ECC编码字段。ECC解码模块将从内存读出的ECC编码数据进行解码,解码过程中按照ECC 规则进行,如果数据校验不通过,则在ECC 的纠错能力范围内对错误数据位进行纠正。如果错误个数超出纠错能力范围,就通告总线协议解析模块,将错误信息反馈至CPU总线。内存分两部分:一部分是数据存储颗粒,用于存储数据,即ECC 的信息码;另一部分是校验码存储颗粒,用于存放校验数据,即ECC的校验码。

图1 镜像内存系统原理框图

板间修复控制器用于应对ECC 解码模块检出数据错误,但无法将错误纠正的情况。一旦出现ECC解码模块不能纠正的错误,ECC解码模块通告板间修复控制器,板间修复控制器向另一存储模块发出修复请求,获取相应数据单元的正确数据。在获取正确数据后,正确数据和其校验码将被存储控制器重新写入原出错单元,完成覆盖和纠正。

对于图1 镜像内存系统,当内存数据读出时,ECC 解码模块会存在两种可能性:第一种情况,数据位翻转导致的错误在纠错码的纠错能力范围内,ECC解码模块可以纠正这类错误,并获得正确的译码后数据交给总线协议封装模块进行封装;第二种情况,数据位翻转导致的错误超出纠错码的纠错能力范围。此时,ECC 解码模块可能检测到这类错误,并将这一错误通过信号传递给板间修复控制器。通过板间修复控制器,正确数据可以通过请求和应答的握手方式由存储模块间的数据通道传递,完成对纠错码不可纠正错误的纠正工作。

3 SRAM存储容错逻辑设计

3.1 存储容错逻辑顶层设计

根据图1 所述镜像内存系统原理框图,并结合自顶而下的数字逻辑设计思想,本文设计了如图2所示的镜像内存系统逻辑顶层。

图2 用于镜像内存的纠错系统具有数据/地址总线、存储模块A、存储模块B,其中存储模块A 与存储模块B 具有相同的内部结构,形成冗余关系。访问类型指定内存存储阵列的访问模式,如单次写、单次读、突发写、突发读;原始数据指定即将写入内存的数据流;无误读出数据指定从内存单元读出的经过纠错处理的正确数据流;交错通道A-B与交错通道B-A 实现存储模块A 与存储模块B 间的错误信息和正确数据片段的实时交换。另外,存储模块A与B结构相同,可以替换使用。

图2 镜像内存系统逻辑顶层

事件/数据缓冲单元实现了对访问类型和原始数据的忙时缓冲和闲时释放功能。当纠错控制核心处于数据纠错、恢复的繁忙状态时,事件/数据缓冲单元分别将访问类型和原始数据缓存到一级事件缓存和一级数据缓存中。当纠错控制核心完成纠错控制过程,只要一级事件缓存或一级数据缓存非空,则打开缓存使能,选择器将选择缓存类型和缓存数据分别作为事件输入和写入数据进行输出,从而提高下一个内存访问事务的处理速度。另外,如果纠错控制核心空闲时这两个一级缓存为空,则选择器选择访问类型和原始数据作为事件输入和写入数据,从而达到减少内存访问的延迟,提高内存响应速度的效果。

编码触发单元实现了对不同访问类型的编码和触发功能。它的输入为事件输入,来自事件/数据缓冲单元。它的输出为事件编码,连至纠错控制核心。ECC 编码/译码单元实现对写入数据的纠错编码和内存读出数据的纠错译码。它的写入数据来自事件/数据缓冲单元,即待编码数据,由它输出的编码数据连接数据修复存储控制器及存储阵列,是通过纠错编码处理后的结果。纠错译码过程相反,待译码数据来自数据修复存储控制器及存储阵列,经过ECC 编码/译码单元译码后输出译码结果交给纠错控制核心处理。交错修复单元实现存储模块间的错误字节码、正确字节段的交换和数据修复功能的辅助功能。

司大愣子媳妇遇见我,悄悄地说:“嫂子我是过来人,你呀,还是离别呦呦远点,她是妖精,你小小年纪,别被她吸干了。”

3.2 纠错控制核心设计

图2 中纠错控制核心采用状态机设计实现。该状态机在多个外部输入条件的变化下,在不同的状态间进行跳转,并控制内存控制器进行各种操作,如内存单次写、内存单次读、内存burst 读。纠错控制核心中重要的功能是多个出错状态的检测和对应的纠错控制状态。为了使纠错控制的过程更加明白清晰,在此使用图3 纠错控制核心状态机流程图进行解释。

图3 纠错控制核心状态机流程图

纠错控制核心状态机的行为如下。

在IDLE 状态下,等待各种类型内存访问事件的触发。在WRITE状态下,进行单次/突发写控制,指示内存控制器将编码数据写入存储阵列。在SINGLE_READ状态下,进行内存单次读控制,指示内存控制器将待译码数据从存储阵列读出。在ECC_CHECK 状态下,单次检查ECC 译码单元输出的错误字节码。在LOCAL_FIX 状态下,控制本模块内存数据修复过程,修复数据来自与之通过交错通道连接的另一存储模块。在OTHER_FIX 状态下,将本模块译码数据通过交错通道交给与之连接的另一存储模块,以满足其他存储模块数据修复需求。在BURST_READ 状态下,进行内存突发读,按照设定的突发长度管理内存控制器从存储阵列中连续读数。在BURST_CHECK 状态下,连续检查ECC 译码单元输出的错误字节码。在BURST_FIX状态下,控制交错修复单元在两个存储模块间交换错误字节码,并将对方错误字节码对应所需的正确字节片段进行互换,最后在各自存储模块通过内存控制器写入修复数据完成数据修复。

4 SRAM存储容错可靠性评估

为了提高系统存储的可靠性,针对每个字节增加了5位监督码元,构成了13位的汉明编码。汉明编码可以纠正存储字最多出现1 位错误,同时可以检出2 位错误,即俗称的“纠一检二”。令p 为单个位出错概率,并假设各个位的故障是独立的,提供了系统可靠性的上界。在这种情况下,可以容忍每个字一个故障。通过排列组合可以得到无错误概率Pno_error,一位错误概率Pone_error,两位错误概率Ptwo_error,如下所示。

通过汉明编码提高存储可靠性的原理可以通过以下公式证明:

这表明,通过向1 字节增加5 位监督码元构成的汉明编码比无纠错编码的原始字节数据的正确概率高。若系统使用的存储为16MB(含监督码元)的静态存储器,根据《电子设备可靠性预计手册》,查表可得该静态存储器的整体失效率:

现在需要根据整体失效率得到单bit 失效率,根据单bit 失效率继续求得无错、单错、双错概率,继而得出ECC 功能下的存储失效率。根据统计规律,充分的数据表明,整个芯片失效这一方式对大部分芯片来说不是主要失效方式,个别位、行、列失效才是导致芯片失效的主要原因,因此有理由使用单个位失效模型SBFM(Single Bit Failure Mode)进行存储失效性分析。该模型假设单个位的失效是独立事件,并且每个位单元都遵循指数失效规律,其失效率为λb,可靠度函数为Rb( )t ,每n个位组成一个字,存储器一共有w 字。根据可靠性函数与MTTF的关系:

即:

经过整理,得到:

为了在系统可靠性模型分析中使用单存储模型失效率参数λsingle和双存储模型的失效率参数λdouble,必须分情况求解存储器的整体失效率。单存储模型和镜像存储模型下的失效率:

在式(13)中,有:

在式(12)与式(13)中,n为13,w是存储器总字数,经计算得到:

根据式(12)与式(13)计算所得结果,证实本文采用的SRAM 容错存储方法在可靠性方面较未采用ECC 和存储镜像技术的方案均有明显提升。其中,含ECC 的单存储模型可靠性提高了大约22 倍,而镜像存储模型则比单存储模型的可靠性高三个数量级。

5 结语

针对SRAM 的数据纠错问题,本文提出一种基于汉明编码的镜像存储纠错方法,在汉明编码提供每个字节可纠正一位错误的基础上,利用两个SRAM 存储间数据片段共享的特征,建立数据交换信道,从而提高了纠错能力的提高。理论分析也表明,该方法较未采用ECC和存储镜像技术的方案均有明显提升。今后的工作可以进一步研究存储数据恢复技术对于可靠性的影响,用马尔可夫建模方法评估分析,并用实验方法对可靠性进行验证。

猜你喜欢
汉明译码镜像
一种5G系统自适应快速SCL极化码译码算法
基于扩大候选码元范围的非二元LDPC加权迭代硬可靠度译码算法
有限域上一类极小线性码的构造
分段CRC 辅助极化码SCL 比特翻转译码算法
基于校正搜索宽度的极化码译码算法研究
镜像
镜像
媳妇管钱
镜像
一种新的计算汉明距方法