一种消息式内存模组的访存方法和装置制造方法

文档序号:6765037阅读:167来源:国知局
一种消息式内存模组的访存方法和装置制造方法
【专利摘要】本发明公开了一种消息式内存模组的访存装置,包括:读写模块,用于将当前读写周期内待存储的SCBC存储到对应的DRAM中;处理模块,用于对一个内存行中的每个SCBC分别计算一组检错码,对一个内存行中的全部SCBC计算一组纠错码;所述读写模块,还用于将检错码存储在该内存行的第(M+2)个DRAM中,将纠错码存储在该内存行的第Z个DRAM中,Z为正整数且1≤Z≤(M+1),连续(M+1)个内存行中的纠错码分别存储在不同的DRAM中。本发明实施例还提供相应的方法。本发明技术方案以SCBC为基本读写单位进行细粒度编码保护,支持可变粒度访存,可以实现对单个DRAM中任意多位错误进行纠错。
【专利说明】一种消息式内存模组的访存方法和装置

【技术领域】
[0001] 本发明涉及通信【技术领域】,具体涉及一种消息式内存模组的访存方法和装置。

【背景技术】
[0002] 在计算机系统运行中,内存的可靠性起着举足轻重的作用,一方面,随着系统配置 内存的数目越来越多,内存系统的失效率会成幂指数级上升;另一方面,随着低电压工作模 式技术的引进,内存发生错误的可能性增大,错误数目会增多。
[0003] 错误检查和纠正(Error Checking and Correcting,ECC)内存是当前普遍采用的 一种内存可靠性解决方案。ECC内存,即带有ECC校验码的内存模组,其基本思想是以内存 模组位宽为基本单位进行数据保护,以内存模组位宽为64位为例,每次写入64位数据的同 时为该数据计算8位的校验位存储于独立的ECC芯片中,这64个数据位与8个校验位一并 组成72位ECC字,这种编码方式可以对72位ECC字中任意一位出错进行纠正,但是,对于 两位出错的情况,就只能检测而不能纠正,对于更多位出错的情况,则更加无能为力了。
[0004] IBM公司在ECC内存的基础上提出了 Chipkill内存技术。Chipkill内存的设计 原理基于内存错误的集聚效应倾向于发生在同一块动态随机存取存储器(Dynamic Random Access Memory,DRAM)芯片上,Chipkill技术能容忍任意一个DRAM芯片的失效。Chipkill 内存的内存控制器(Memory Controller,MC)需要同时控制四个带有ECC的双列直插式内 存模组(Dual Inline Memory Module,DIMM)协同工作,MC的位宽由4个72位的ECC字组 成,在每个ECC字内部都可以纠检一位错误,每个DMM上的DRAM芯片的位宽必须是4位, 经过仔细地设计使同一块DRAM芯片的4位输入输出分别映射到4个不同的ECC字中,通 过这样的设计即使一片DRAM芯片的4个管脚的数据全部出错,4个不同的ECC字也可以 将其恢复,也就是说Chipkill技术可以容忍任意一个DIMM上任意的一个DRAM芯片损坏。 Chipkill技术通过更宽的MC位宽和更大粒度的数据编码取得了较高的可靠性,但是,该技 术理论上只能用于4位位宽的DRAM芯片,缺乏灵活性,且过大粒度的数据编码导致它每次 读取的数据远远大于实际访存请求的数据,造成了大量不必要的功耗损失。


【发明内容】

[0005] 本发明实施例提供一种消息式内存模组的访存方法和装置,以提供一种低功耗 的、高可靠性的、可变粒度的内存访存容错解决方案。
[0006] 本发明第一方面提供一种消息式内存模组的访存装置,所述内存模组包括(M+2) 块动态随机存取存储器DRAM,M等于2的m次方,m为正整数;每块DRAM中存储的可在一个 读写周期内访存的数据称为单芯片突发簇SCBC,全部DRAM中存储的可在同一个读写周期 内访存的数据的集合形成一个内存行;
[0007] 所述装置包括:
[0008] 读写模块,用于将当前读写周期内待存储的SCBC存储到对应的DRAM中且位于当 前内存行中,用于存储SCBC的所述DRAM不包括第(M+2 )个DRAM ;
[0009] 处理模块,用于对一个内存行中的每个SCBC分别计算一组检错码,对一个内存行 中的全部SCBC计算一组纠错码;
[0010] 所述读写模块,还用于将对一个内存行计算得到的检错码存储在该内存行的第 (M+2)个DRAM中,将对一个内存行计算得到的纠错码存储在该内存行的第Z个DRAM中,Z 为正整数且1彡Z彡(M+1),连续(M+1)个内存行中的纠错码分别存储在不同的DRAM中。 [0011] 在第一种可能的实现方式中,所述处理模块,还用于在收到读访存请求时,指示所 述读写模块从当前的内存行中读取需要的SCBC以及对应的检错码,根据所述检错码对读 取到的SCBC进行校验,判断是否有SCBC错误,在判断有SCBC错误时,获取发生错误的SCBC 的个数,若有且仅有一个SCBC发生错误,则指示所述读取模块读取该内存行的所有数据, 根据该内存行中的纠错码与其它未发生错误的SCBC,对发生的错误的SCBC进行恢复。
[0012] 结合第一方面或者第一方面的第一种可能的实现方式,在第二种可能的实现方式 中,所述处理模块,还用于在收到写访存请求时,首先判断待写入的第二SCBC的个数X是否 小于等于M/2 ;若X小于等于M/2,则指示所述读写模块读取当前的内存行中存储的第一检 错码和第一纠错码以及待写入第二SCBC的X个DRAM中存储的X个第一 SCBC,根据所述第 一检错码判断是否有第一 SCBC错误,没有第一 SCBC错误时,计算所述X个第二SCBC的第 二检错码,以及根据所述第一纠错码和所述X个第一 SCBC以及所述X个第二SCBC计算第 二纠错码,指示所述读写模块将所述X个第二SCBC和第二纠错码以及第二检错码写入对应 的DRAM中;若X大于M/2,则指示所述读写模块读取当前的内存行中存储的第一检错码和 第一纠错码以及不应被写入第二SCBC的(M-X)个DRAM中存储的第一 SCBC,根据所述第一 检错码判断是否有第一 SCBC错误,没有第一 SCBC错误时,计算所述X个第二SCBC的第二 检错码,以及根据(M-X)个第一 SCBC和X个第二SCBC计算第二纠错码,指示所述读写模块 将所述X个第二SCBC和第二纠错码以及第二检错码写入对应的DRAM中。
[0013] 结合第一方面的第二种可能的实现方式,在第三种可能的实现方式中,所述处理 模块,还用于在判断有第一 SCBC错误时,获取发生错误的第一 SCBC的个数,若有且仅有一 个第一 SCBC发生错误,则指示所述读取模块读取该内存行的所有数据,根据该内存行中的 纠错码与其它未发生错误的SCBC,对发生的错误的第一 SCBC进行恢复。
[0014] 本发明第二方面提供一种消息式内存模组的访存方法,所述内存模组包括(M+2) 块动态随机存取存储器DRAM,M等于2的m次方,m为正整数;每块DRAM中存储的可在一个 读写周期内访存的数据称为单芯片突发簇SCBC,全部DRAM中存储的可在同一个读写周期 内访存的数据的集合形成一个内存行;
[0015] 所述方法包括:
[0016] 将当前读写周期内待存储的SCBC存储到对应的DRAM中且位于当前内存行中,用 于存储SCBC的所述DRAM不包括第(M+2)个DRAM ;
[0017] 对一个内存行中的每个SCBC分别计算一组检错码,对一个内存行中的全部SCBC 计算一组纠错码;
[0018] 将对一个内存行计算得到的检错码存储在该内存行的第(M+2)个DRAM中,将对 一个内存行计算得到的纠错码存储在该内存行的第Z个DRAM中,Z为正整数且1 < Z < (M+1),连续(M+1)个内存行中的纠错码分别存储在不同的DRAM中。
[0019] 在第一种可能的实现方式中,所述方法还包括:在收到读访存请求时,从当前的内 存行中读取需要的SCBC以及对应的检错码,根据所述检错码对读取到的SCBC进行校验,判 断是否有SCBC错误,在判断有SCBC错误时,获取发生错误的SCBC的个数,若有且仅有一个 SCBC发生错误,则读取该内存行的所有数据,根据该内存行中的纠错码与其它未发生错误 的SCBC,对发生的错误的SCBC进行恢复。
[0020] 结合第一方面或者第一方面的第一种可能的实现方式,在第二种可能的实现方式 中,所述方法还包括:在收到写访存请求时,判断待写入的第二SCBC的个数X是否小于等 于M/2 ;若X小于等于M/2,则读取当前的内存行中存储的第一检错码和第一纠错码以及待 写入第二SCBC的X个DRAM中存储的X个第一 SCBC,根据所述第一检错码判断是否有第一 SCBC错误,没有第一 SCBC错误时,计算所述X个第二SCBC的第二检错码,以及根据所述第 一纠错码和所述X个第一 SCBC以及所述X个第二SCBC计算第二纠错码,将所述X个第二 SCBC和第二纠错码以及第二检错码写入对应的DRAM中;若X大于M/2,则读取当前的内存 行中存储的第一检错码和第一纠错码以及不应被写入第二SCBC的(M-X)个DRAM中存储的 第一 SCBC,根据所述第一检错码判断是否有第一 SCBC错误,没有第一 SCBC错误时,计算所 述X个第二SCBC的第二检错码,以及根据(M-X)个第一 SCBC和X个第二SCBC计算第二纠 错码,将所述X个第二SCBC和第二纠错码以及第二检错码写入对应的DRAM中。
[0021] 结合第一方面的第二种可能的实现方式,在第三种可能的实现方式中,所述的判 断是否有SCBC错误之后还包括:获取发生错误的第一 SCBC的个数,若有且仅有一个第一 SCBC发生错误,则读取该内存行的所有数据,根据该内存行中的纠错码与其它未发生错误 的SCBC,对发生的错误的第一 SCBC进行恢复。
[0022] 本发明实施例技术方案以SCBC为基本读写单位进行细粒度编码保护,但对于 SCBC的大小没有特别限定,S卩,对DRAM内存芯片的位宽和突发长度不做限定,因此可以支 持可变粒度访存,并且,利用独立的DRAM存储检错码可以对不同访存粒度实现检错,检错 码配合纠错码可以实现对单个DRAM中任意多位错误进行纠错,是一种低功耗高可靠性的 解决方案。

【专利附图】

【附图说明】
[0023] 图1是本发明实施例提供的消息式内存模组的访存装置的示意图;
[0024] 图2是本发明实施例提供的消息式内存模组的访存装置的原理图;
[0025] 图3是本发明实施例提供的消息式内存模组的访存方法的流程图;
[0026] 图4a和4b是本发明实施例提供的内存控制系统的示意图。

【具体实施方式】
[0027] 本发明实施例提供一种消息式内存模组的访存方法,以提供一种低功耗的、高可 靠性的、可变粒度的内存访存容错解决方案。本发明实施例还提供相应的装置。以下分别 进行详细说明。
[0028] 实施例一、
[0029] 请参考图1,本发明实施例提供一种消息式内存模组的访存装置。该装置可以部署 在内存模组的外围控制电路中,也可以部署在内存控制器中;内存控制器则可以集成中央 处理器(CentralProcessingUnit,CPU)中或者集成在计算机主板上。
[0030] 所说的内存模组具体可以是DIMM,该DIMM包括多个DRAM。本文中假定DRAM的位 宽为N位,N等于2的n次方,n为正整数;DRAM的突发长度(Burst Length,BL)为Q,Q为 正整数,优选Q等于2的若干次方,例如等于4或8 ;假定DMM包括(M+2)块DRAM,(MXN) 即是整个内存模组的位宽,由于计算机内存模组位宽(MXN) -般是2的若干次方,例如通 常是32或64,因此,M也是2的若干次方,可以记M等于2的m次方,m为正整数;在计算机 内存模组的位宽已确定时,可以根据单个DRAM的位宽确定所需要的DRAM的个数。
[0031] 本实施例中,每块DRAM中存储的可在一个读写周期内访存的数据称为单芯片突 发族(Single Chip Burst Cluster,SCBC),每个 SCBC包括(NXQ)bit 数据,全部 DRAM 中存 储的可在同一个读写周期内访存的数据即SCBC的集合形成一个内存行。每一块DRAM也可 以视为一个内存列。换句话说,一个内存行表不一个读写周期,一个内存列表不一块DRAM。
[0032] 所说的访存装置100包括读写模块110和处理模块120 ;其中,
[0033] 所述读写模块110,用于将当前读写周期内待存储的SCBC存储到对应的DRAM中且 位于当前内存行中,用于存储SCBC的DRAM不包括第(M+2 )个DRAM ; -个读写周期内待存储 的SCBC的个数不超过M ;
[0034] 所述处理模块120,用于对一个内存行中的每个SCBC分别计算一组检错码,对一 个内存行中的全部SCBC计算一组纠错码;
[0035] 所述读写模块110,还用于将对一个内存行计算得到的检错码存储在该内存行的 第(M+2)个DRAM中,将对一个内存行计算得到的纠错码存储在该内存行的第Z个DRAM中, Z为正整数且1彡Z彡M+1),连续(M+1)个内存行中的纠错码分别存储在不同的DRAM中。
[0036] 可选的,所述处理模块120,还用于在收到读访存请求时,指示所述读写模块从当 前的内存行中读取需要的SCBC以及对应的检错码,根据所述检错码对读取到的SCBC进行 校验,判断是否有SCBC错误,在判断有SCBC错误时,获取发生错误的SCBC的个数,若有且 仅有一个SCBC发生错误,则指示所述读取模块读取该内存行的所有数据,根据该内存行中 的纠错码与其它未发生错误的SCBC,对发生的错误的SCBC进行恢复。若有两个或者两个以 上SCBC发生错误,则处理模块120向主控设备例如内存控制器报告不可恢复错误。
[0037] 可选的,所述处理模块120,还用于首先判断待写入的第二SCBC的个数X是否小 于等于M/2 ;若X小于等于M/2,则指示所述读写模块读取当前的内存行中存储的第一检错 码和第一纠错码以及待写入第二SCBC的X个DRAM中存储的X个第一 SCBC,根据所述第一 检错码判断是否有第一 SCBC错误,没有第一 SCBC错误时,计算所述X个第二SCBC的第二 检错码,以及根据所述第一纠错码和所述X个第一 SCBC以及所述X个第二SCBC计算第二 纠错码,指示所述读写模块将所述X个第二SCBC和第二纠错码以及第二检错码写入对应的 DRAM中;若X大于M/2,则指示所述读写模块读取当前的内存行中存储的第一检错码和第一 纠错码以及不应被写入第二SCBC的(M-X)个DRAM中存储的第一 SCBC,根据所述第一检错 码判断是否有第一 SCBC错误,没有第一 SCBC错误时,计算所述X个第二SCBC的第二检错 码,以及根据(M-X)个第一 SCBC和X个第二SCBC计算第二纠错码,指示所述读写模块将所 述X个第二SCBC和第二纠错码以及第二检错码写入对应的DRAM中。
[0038] 进一步的,所述处理模块120,还用于在判断有第一 SCBC错误时,获取发生错误的 第一 SCBC的个数,若有且仅有一个第一 SCBC发生错误,则指示所述读取模块读取该内存 行的所有数据,根据该内存行中的纠错码与其它未发生错误的SCBC,对发生的错误的第一 SCBC进行恢复。在有两个以上DRAM中的SCBC发生错误时,所述处理模块120向主控设备 例如内存控制器报告不可恢复错误。
[0039] 上述的第一 SCBC、第一纠错码和第一检错码可以理解为当前存储的SCBC、纠错码 和检错码;第二SCBC、第二纠错码和第二检错码则是将要重新写入的SCBC、纠错码和检错 码,这些数据将会覆盖上述的第一 SCBC、第一纠错码和第一检错码。
[0040] 一般的,目前计算机系统的内存模组通常是64位,假设选用位宽N定于8的DRAM, 则用于存储SCBC的DRAM的数量应为64除以8等于8。下面,以M和N均等于8为例,对本 发明实施例装置做进一步详细说明:
[0041] 当M和N均等于8时,所述内存模组的数据编码结构如图2所示,图中10列分别 表不第一至第(M+2)DRAM。其中,第(M+2)DRAM即图中最后一列用于存放检错码,第一至第 (M+l )DRAM中的一块DRAM用于存放纠错码,另外八块DRAM用于存放SCBC。假设每块DRAM 的突发长度也是8位,则每个SCBC包括8bit*8=64bit数据。图中,用Data (D)表示访存 数据,用Parity (P)表示纠错码,用Checksum (C)表示检错码。同一个内存行中存储的 SCBC分别用D0?D7表示,连续(M+1)个内存行中存储的纠错码分别用P0?P8表示,连续 (M+1)个内存行中存储的检错码分别用C0?C8表示。广义上,所述的访存数据,纠错码和 检错码都是SCBC,但在本文中,所述SCBC专指所述的访存数据(D)。
[0042] 本实施例中的容错编码分为检错码和纠错码两部分,其中,检错码部分的计算包 括:对同一内存行上的8个SCBC依次计算校验和,校验和的算法可以采用8位模2加法或 8位二进制反码和,每个SCBC计算得到8位校验码,同一行的8个SCBC计算得到64位校验 码,存储在专用的第(M+2) DRAM芯片的第一内存行对应位置,作为检错码;纠错码部分的计 算包括:对同一内存行中8个SCBC的对应位进行异或运算,运算产生64位奇偶校验码,即 所述纠错码P,如D0?D7对应位异或得到纠错码P0存储在第(M+1) DRAM的同一行;需要 指出,连续多个内存行的纠错码分别存储在不同的DRAM,呈条带状分布于第一至第(M+1) DRAM的内存数据区用以纠错。
[0043] 纠错码呈条带状分布设计的原因在于:如果所有内存行的纠错码P都保存在同一 个DRAM芯片上,当连续写数据时都需要更新该芯片上相对应位置的纠错码P,会使该DRAM 芯片成为访问热点,导致两个写操作之间延迟增加,更新性能下降;并且,写入纠错码P时, 需要预读整个内存行上存储的全部数据,会进一步导致性能下降;而通过使纠错码呈条带 状分布,可以解决上述问题。
[0044] 容错编码详细的配置参数如表1所示。
[0045] 表 1
[0046]

【权利要求】
1. 一种消息式内存模组的访存装置,其特征在于: 所述内存模组包括(M+2)块动态随机存取存储器DRAM,M等于2的m次方,m为正整数; 每块DRAM中存储的可在一个读写周期内访存的数据称为单芯片突发簇SCBC,全部DRAM中 存储的可在同一个读写周期内访存的数据的集合形成一个内存行; 所述装置包括: 读写模块,用于将当前读写周期内待存储的SCBC存储到对应的DRAM中且位于当前内 存行中,用于存储SCBC的所述DRAM不包括第(M+2 )个DRAM ; 处理模块,用于对一个内存行中的每个SCBC分别计算一组检错码,对一个内存行中的 全部SCBC计算一组纠错码; 所述读写模块,还用于将对一个内存行计算得到的检错码存储在该内存行的第(M+2) 个DRAM中,将对一个内存行计算得到的纠错码存储在该内存行的第Z个DRAM中,Z为正整 数且1《Z《(M+1),连续(M+1)个内存行中的纠错码分别存储在不同的DRAM中。
2. 根据权利要求1所述的装置,其特征在于: 所述处理模块,还用于在收到读访存请求时,指示所述读写模块从当前的内存行中读 取需要的SCBC W及对应的检错码,根据所述检错码对读取到的SCBC进行校验,判断是否有 SCBC错误,在判断有SCBC错误时,获取发生错误的SCBC的个数,若有且仅有一个SCBC发生 错误,则指示所述读取模块读取该内存行的所有数据,根据该内存行中的纠错码与其它未 发生错误的SCBC,对发生的错误的SCBC进行恢复。
3. 根据权利要求1所述的装置,其特征在于: 所述处理模块,还用于在收到写访存请求时,首先判断待写入的第二SCBC的个数X是 否小于等于M/2; 若X小于等于M/2,则指示所述读写模块读取当前的内存行中存储的第一检错码和第 一纠错码W及待写入第二SCBC的X个DRAM中存储的X个第一 SCBC,根据所述第一检错码 判断是否有第一 SCBC错误,没有第一 SCBC错误时,计算所述X个第二SCBC的第二检错码, W及根据所述第一纠错码和所述X个第一 SCBC W及所述X个第二SCBC计算第二纠错码,指 示所述读写模块将所述X个第二SCBC和第二纠错码W及第二检错码写入对应的DRAM中; 若X大于M/2,则指示所述读写模块读取当前的内存行中存储的第一检错码和第一纠 错码W及不应被写入第二SCBC的(M-X)个DRAM中存储的第一 SCBC,根据所述第一检错码 判断是否有第一 SCBC错误,没有第一 SCBC错误时,计算所述X个第二SCBC的第二检错码, W及根据(M-X)个第一 SCBC和X个第二SCBC计算第二纠错码,指示所述读写模块将所述X 个第二SCBC和第二纠错码W及第二检错码写入对应的DRAM中。
4. 根据权利要求3所述的装置,其特征在于: 所述处理模块,还用于在判断有第一 SCBC错误时,获取发生错误的第一 SCBC的个数, 若有且仅有一个第一 SCBC发生错误,则指示所述读取模块读取该内存行的所有数据,根据 该内存行中的纠错码与其它未发生错误的SCBC,对发生的错误的第一 SCBC进行恢复。
5. -种消息式内存模组的访存方法,其特征在于: 所述内存模组包括(M+2)块动态随机存取存储器DRAM,M等于2的m次方,m为正整数; 每块DRAM中存储的可在一个读写周期内访存的数据称为单芯片突发簇SCBC,全部DRAM中 存储的可在同一个读写周期内访存的数据的集合形成一个内存行; 所述方法包括: 将当前读写周期内待存储的SCBC存储到对应的DRAM中且位于当前内存行中,用于存 储SCBC的所述DRAM不包括第(M+2)个DRAM ; 对一个内存行中的每个SCBC分别计算一组检错码,对一个内存行中的全部SCBC计算 一组纠错码; 将对一个内存行计算得到的检错码存储在该内存行的第(M+2)个DRAM中,将对一个内 存行计算得到的纠错码存储在该内存行的第Z个DRAM中,Z为正整数且1《Z《(M+1 ),连 续(M+1)个内存行中的纠错码分别存储在不同的DRAM中。
6. 根据权利要求5所述的方法,其特征在于,还包括: 在收到读访存请求时,从当前的内存行中读取需要的SCBC W及对应的检错码,根据所 述检错码对读取到的SCBC进行校验,判断是否有SCBC错误,在判断有SCBC错误时,获取发 生错误的SCBC的个数,若有且仅有一个SCBC发生错误,则读取该内存行的所有数据,根据 该内存行中的纠错码与其它未发生错误的SCBC,对发生的错误的SCBC进行恢复。
7. 根据权利要求5所述的方法,其特征在于,还包括: 在收到写访存请求时,判断待写入的第二SCBC的个数X是否小于等于M/2 ; 若X小于等于M/2,则读取当前的内存行中存储的第一检错码和第一纠错码W及待写 入第二SCBC的X个DRAM中存储的X个第一 SCBC,根据所述第一检错码判断是否有第一 SCBC错误,没有第一 SCBC错误时,计算所述X个第二SCBC的第二检错码,W及根据所述第 一纠错码和所述X个第一 SCBC W及所述X个第二SCBC计算第二纠错码,将所述X个第二 SCBC和第二纠错码W及第二检错码写入对应的DRAM中; 若X大于M/2,则读取当前的内存行中存储的第一检错码和第一纠错码W及不应被写 入第二SCBC的(M-X)个DRAM中存储的第一 SCBC,根据所述第一检错码判断是否有第一 SCBC错误,没有第一 SCBC错误时,计算所述X个第二SCBC的第二检错码,W及根据(M-X) 个第一 SCBC和X个第二SCBC计算第二纠错码,将所述X个第二SCBC和第二纠错码W及第 二检错码写入对应的DRAM中。
8. 根据权利要求7所述的方法,其特征在于,所述的判断是否有SCBC错误之后还包 括: 获取发生错误的第一 SCBC的个数,若有且仅有一个第一 SCBC发生错误,则读取该内存 行的所有数据,根据该内存行中的纠错码与其它未发生错误的SCBC,对发生的错误的第一 SCBC进行恢复。
【文档编号】G11C29/42GK104347122SQ201310330220
【公开日】2015年2月11日 申请日期:2013年7月31日 优先权日:2013年7月31日
【发明者】高翔, 李冰, 单书畅, 胡瑜 申请人:华为技术有限公司, 中国科学院计算技术研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1