一种DRAM内存行扰动错误解决方法与流程

文档序号:19725223发布日期:2020-01-18 03:19阅读:819来源:国知局
一种DRAM内存行扰动错误解决方法与流程

本发明针对现有计算机中dram内存的行扰动错误问题,提出基于内存行被动激活信息的解决方案。



背景技术:

dram存储器被广泛用于计算机的主存。dram存储器的每个存储单元包含一个电容,数据主要以电荷的方式存储于电容。大量的存储单元构成二维存储阵列,横向的存储单元构成行,纵向的单元则是列。dram存储器读写数据以行为单位,每次读写时,需要激活目标数据所在的行。当dram中某个数据行(row)频繁因为读写而被激活时,其上下相邻的数据行的存储单元因为耦合效应,使得阀值电压降低,漏电流增加,存储单元电容中的电荷迅速流失,导致存储的数据丢失。这种内存行数据因为相邻行频繁激活而导致数据丢失的现象称为行扰动错误。

行扰动错误的主要原因是行存储单元的电荷流失加速,所以一种解决方案是及时对行存储单元进行刷新操作,补充电荷,保护数据。dram存储器常见的默认数据刷新操作周期是64毫秒。导致其他行因为行扰动而出现数据错误的行称为致害行,而出现行扰动错误的行则称为受害行。如果致害行在默认的刷新周期内,激活的次数超过特定阀值,就会导致受害行的数据出现行扰动错误,还无法及时受到默认刷新操作的保护。所以,一旦致害行的激活次数接近特定阀值,就需要主动的激活操作来保护受害行的数据。

主动的激活操作在电路层面与刷新操作等同。与主动刷新操作相对应的是被动刷新操作,主要发生在内存行读写或者默认的刷新操作时。被动的激活操作与主动的激活操作的保护行数据、对抗扰动错误的效果等同。如果内存行最近发生过被动激活操作,就不需要再发起主动刷新操作来保护数据。以往的解决行扰动错误的方法依赖于主动激活操作,没有考虑被动激活操作的数据保护作用,导致不必要的主动激活操作过多,带来性能上的不利影响。



技术实现要素:

本发明要克服现有技术的上述缺陷,提出结合内存行被动激活信息的dram行扰动错误解决方法。本发明的内容和特征包含以下:

s1:每个dram内存行采用两位的最近访问计时器,追踪其最近的被动激活

信息;

s2:当某内存行发生读写访问时,按概率n对其相邻行产生主动激活命令;

s3:主动激活命令确定产生后,再根据内存行的最近访问计时器信息,决定

是否实行主动激活操作;

其中s1步骤具体为:每个内存行配备一两位的最近访问计时器,当内存行发生被动激活操作(因读写、默认刷新等操作)时,其对应的最近访问计时器初始化为11,并且按照11,10,01,00的顺序周期性更新,直至最终变为00;令内存行出现扰动错误的相邻行频繁激活的次数阀值为r,激活r次所需的时间t决定了最近访问计时器更新周期;两位的最近访问计时器的更新周期为t/3,因此从11更新至00需要周期t。

其中s2步骤具体为:每次发生数据访问时,内存控制器中的随机数生成器产生一[0,n)之间的随机数r,概率n等价于随机数r的值在[0,rn)之间;如果r小于等于nn,说明概率为n的事件发生,即产生对相邻行的主动激活命令;否则,不产生主动激活命令。

其中s3步骤具体为:主动激活命令产生后,查看将被激活内存行的最近访问计时器值,如果值为00,则发送主动激活命令至dram内存;否则,主动激活命令取消。

本发明的优点是:在存储代价可忽略的前提下,能准确发送主动激活命令到受害内存行,同时避免不必要的主动激活命令,最小化对性能的不利影响。

附图说明

图1是本发明方法描述的dram行扰动错误问题的示意图。

图2是本发明方法的最近访问计时器的更新过程。

图3是本发明方法的主流程图。

具体实施方式

下面结合附图和实施例,进一步说明本发明方法的技术方案。

图1是dram行扰动错误问题的描述,dram中的存储单元构成二维阵列,其中的致害行(aggressorrow)因为频繁地访问,对其上下相邻的两受害行(victimrow)造成扰动,导致受害行出现行扰动错误。r表示受害行发生行扰动错误时,致害行因数据访问被激活次数的下限。周期t是致害行激活r次所耗费的时间。因为不同应用程序的不同致害行,同样的激活次数耗费的时间不同,所以最终的周期t可以选择当前所采集到的周期t中的最小值。周期t必须小于默认的数据刷新周期,否则,默认的数据刷新操作就能对抗行扰动错误,保护数据。如果时间段小于周期t,则受害行不会出现行扰动错误;而时间段大于周期t时,受害行可能会受到出现行扰动错误,需要必要的保护。

每个内存行有一两位的最近访问计时器,用于显示当前内存行最近是否有被动激活操作。图2是两位的最近访问计时器的更新过程,时刻t1时,内存行发生被动激活(因为读写、默认刷新等操作)的同时,其对应的最近计时器置为11,以后每隔t/3计时器的值降序递减,直到00。根据计时器的值,可以判断最近t时段,内存行是否有过被激活操作。如果计时器的值为00,表示内存行最近t时段没有激活操作;反之,则有。

如果最近访问计时器的值还在递减过程中(未到00),但内存行发生被动激活操作,则最近计时器的值重置为11,然后再按原先默认的t/3间隔递减。此时,计时器的值不能表征过去的时段t内存行没有出现激活操作,只能说明过去(2/3t,t)时段,内存行没有出现激活操作。因为被动激活发生的时机不可提前预知,一旦出现在计时器降序递减的过程中,将导致计时器最终的00值提前出现。图2中,时刻t2出现被动激活操作,计时器重置为11,时刻t4计时器置为00。如果时刻t2计时器被置为11且没有出现被动激活操作,计时器直到时刻t5才置为00。时刻t4与时刻t5之间的差值就是被动激活操作引入的表征错误(error)。表征错误的最大值为t/3。

表征错误的存在使得最近访问计时器表征的值t要比真实的短,即认为致害行在短于时段t情况下,出现r次激活操作,提前发起主动激活操作。所以,表征错误引发对受害行的过度保护,可以将最终的周期t适当延长,来抵消表征错误的影响。

图3是本发明的主流程图,首先以概率n产生主动激活命令。当内存行row[i]发生读写访问时,产生0~n之间的随机数r并且比较r与nn的值。如果r小于nn,则说明概率为n的事件发生,满足对受害行row[i-1]和row[i+1]发起主动激活命令的第一个条件。第二个条件是检查受害行row[i+1]和row[i-1]的最近访问计时器(rac)的值,如果值为00,则发送主动激活命令到内存;如果值非00,则说明受害行仍处在周期t内,受到最近一次被动激活操作的保护,所以不需要发送主动激活命令。

以概率方式产生主动刷新命令,可以避免记录每个内存行访问次数的存储代价,缺点是可能出现漏诊率,即应该产生主动激活命令实际却没有产生。合理地选择概率值n,可以控制漏诊率。概率n与漏诊率p之间的关系:p=1-(1-en*r)k。其中k表示内存行在正常工作年限内的访问次数,按正常的10年工作时间,k的值取250亿,r=32000次,只要将概率n的值设定为0.2%,就可以将漏诊率控制在4.0×10-18的可忽略程度。

每个内存行的最近访问计时器,只需要两位的存储空间。考虑8gb的dram内存和8kb的内存行,所有的最近访问计时器只占据2m的存储空间,并且按组的方式构建,每组的大小为512位。因为内存行的最近访问计时器要频繁访问,为加快访问速度,所以将计时器设置于内存控制器。同时,扩展内存控制器,添加随机数生成器,使得每次有数据访问时产生[0,n)之间的随机数,并且访问最近计时器组,确定是否发送主动激活命令到dram存储器。

本说明书实施例所述的内容仅仅是对发明构思的实现形式的列举,本发明的保护范围不应当被视为仅限于实施例所陈述的具体形式,本发明的保护范围也及于本领域技术人员根据本发明构思所能够想到的等同技术手段。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1