一种基于多层单元的非易失内存的磨损均衡方法技术领域
本发明属于固态存储领域,更具体地,涉及一种基于多层单元的非易
失内存系统的磨损均衡方法。
背景技术
随着多核技术的发展,计算机系统对内存的需求越来越高,包括容量、
功耗、性能、可扩展性等多个方面。传统的动态随机存取存储器(Dynamic
RandomAccessMemory,DRAM)内存由于受到可扩展性和漏电功耗的约
束,面对新的应用环境,其发展受到了限制。
新型非易失存储(Non-VolatileMemory,NVM)技术的出现,为内存系
统的发展提供了一种新的解决思路。当前的新型非易失存储器主要有相变
存储器(PhaseChangeMemory,PCM)和忆阻器(ResistiveRandomAccess
Memory,RRAM)等,它们具有容量大、功耗低、性能高的优点,是下一代
内存最有竞争力的候选者。相比DRAM技术,这些非易失存储器在能耗、
性能、可扩展性等方面具有显著的优势,引起学术界和产业界大量的关注,
当前基于非易失内存的研究也是一个热点方向。
为了提高NVM芯片的性价比,多层单元技术(Multi-LevelCell,MLC)
将会被应用到NVM系统中,这使得一个单元可以存储2个或者4个数据位,
因此,MLC-2/MLC-4芯片相对其单层的版本(Single-LevelCell,SLC)具有
更大容量和更低的价格优势。但是由于材料限制和过度编程操作,导致
MLC-2/MLC-4芯片的耐久性比其单层的版本降低100倍。其较低的耐久性限
制所带来的寿命问题,成为了它们扮演内主存角色的主要瓶颈。在SLC技术
中,PCM芯片中每个单元的最大写次数是107~108,而RRAM是108~1012。在
MLC技术中,PCM芯片中每个单元的耐久性是105~106,而RRAM可以达到
107。均匀的写访问可以使得NVM芯片达到几年的使用寿命,但是不均匀的
写访问可以使得一些存储单元在几秒钟内被磨穿,从而导致内存失效。因
此,利用磨损均衡技术,把不均衡的上层写访问转化为均衡的底层写访问,
以延长这些NVM系统的使用寿命,显得格外重要。
针对非易失内存的磨损均衡算法,已有的研究工作可以分为两类——
基于表格的磨损均衡算法(TBWL)和基于代数的磨损均衡算法(AWL)。(1)
基于表格的磨损均衡算法:该类算法记录了每个逻辑块和物理块的映射关
系,同时也统计了每个逻辑块的写次数。通过周期性的交换写次数最高和
最低的块来平衡块之间的写差距。典型的基于表格的磨损均衡算法有行交
换(LineSwapping)、段交换(SegmentSwapping),页交换(PageSwapping)
等。它们的区别是最小交换单元的粒度不同,其存储空间开销和交换的时
间开销有很大差距。为了达到高的寿命,映射和交换单元的粒度要求足够
小,例如行交换,但是这会招致非常高的空间开销。除此之外,大部分的
基于表格的磨损算法采用确定的交换策略,这使得恶意的程序可以猜测出
待交换区域的新位置,从而对一个特定区域进行强力攻击,导致这个区域
的所有行都被磨穿。(2)基于代数的磨损均衡算法:典型的算法有Start-Gap
和SecurityRefresh等。基于代数的磨损均衡算法通过代数映射,周期性的移
动物理行,通过大量的行交换从概率上使得“热”的逻辑行可以移动到各
个物理行上,其物理地址可以通过给定的逻辑地址和代数函数计算获得。
基于代数的磨损均衡算法具有低开销,高安全性的优点,目前已经被应用
在基于NVM的原型平台中。
随着MLC技术应用到NVM系统中,内存容量成倍增加导致了基于表格
的磨损均衡算法的空间开销也伴随着大量增加,例如在64GB的系统中,空
间开销达到2.5GB,无法应用到真实的系统。而耐久性下降导致基于代数磨
损均衡算法交换的次数降低,不充足的交换次数导致不平衡的写分布问题,
从而直接导致低的使用寿命。为了提升基于代数的磨损均衡算法的效率,
典型的方法有提高交换频率和增加区域数量。提高交换频率会导致性能下
降,而增加区域数量会恶化区域间不平衡的写通信量,反而降低使用寿命。
发明内容
针对现有技术的以上缺陷或改进需求,本发明提供了一种基于多层单
元的非易失内存系统的磨损均衡方法,有机结合了基于表格的磨损均衡算
法和基于代数的磨损均衡算法的优势并且克服了各自的缺陷,具有高寿命
和安全可靠的优点。
为实现上述目的,本发明提供了一种基于多层单元的非易失内存系统
的磨损均衡方法,其特征在于,包括如下步骤:(1)将非易失内存系统的
存储区域的每个晶元划分为多个子存储区域,每个子存储区域由若干个物
理行组成;(2)对每个子存储区域,在其每执行P个写请求之后,使用基
于代数的磨损均衡算法随机交换该子存储区域的物理行中的数据,从而实
现子存储区域内部的写次数平衡;其中,P为预定的基于代数的磨损均衡算
法的交换周期;(3)在非易失内存系统的存储区域每执行T个写请求之后,
从各子存储区域中选取一个“热”子存储区域和一个“冷”子存储区域进
行数据交换,从而实现子存储区域之间的写次数平衡;其中,T为区域交换
间隔,为预定值或随机数,“热”子存储区域是指访问较频繁,累积写次
数较多的子存储区域,“冷”子存储区域是指访问不频繁,累积写次数较
少的子存储区域。
优选地,T为预定值,所述步骤(3)进一步包括如下步骤:(3-1)计
算子存储区域的平均累积写次数将累积写次数高于平均值的子
存储区域作为“热”子存储区域,将累积写次数低于平均值的子存储区域
作为“冷”子存储区域;其中,n为子存储区域的个数,wi为第i个子存储
区域的累积写次数;(3-2)计算各“热”子存储区域的权值和
各“冷”子存储区域的权值进而计算“热”子存储区域的权
值总和和“冷”子存储区域的权值总和(3-3)生成随机数X1
和X2,使得(3-4)将X1顺序逐一减去“热”
子存储区域的权值,当X1≤0时,选中对应的“热”子存储区域,将X2顺
序逐一减去“冷”子存储区域的权值,当X2≤0时,选中对应的“冷”子存
储区域;(3-5)交换选中的“热”子存储区域和选中的“冷”子存储区域
的所有物理行的数据,执行T个写请求之后,返回步骤(3-1)。
优选地,T为随机数,所述步骤(3)进一步包括如下步骤:(3-1)生
成随机数N,计算得到区域交换间隔T=N*K,其中,K是每个子存储区域
包含的物理行数;(3-2)在执行T个写请求后,将累积写次数最多的子存
储区域作为“热”子存储区域,将累积写次数最少的子存储区域作为“冷”子
存储区域;(3-3)交换“热”子存储区域和“冷”子存储区域的所有物理
行的数据,返回步骤(3-1)。
优选地,通过如下方法完成“热”子存储区域和“冷”子存储区域的
数据交换:(A1)计算待交换的“热”子存储区域和“冷”子存储区域的单
个物理行的交换间隔t=T/K,其中,K是每个子存储区域包含的物理行数;
(A2)每执行t个写请求,就从待交换的“热”子存储区域中选取一个物
理行,与待交换的“冷”子存储区域中偏移地址相同的物理行进行数据交
换,直至完成待交换的“热”子存储区域和“冷”子存储区域的所有物理
行的数据交换。
优选地,所述步骤(2)中,由数据交换引起的内存读写操作直接在晶
元内部执行,不占用内存控制器和总线资源。
优选地,所述步骤(3)由内存控制器执行,由数据交换引起的内存读
写操作占用总线资源。
总体而言,通过本发明所构思的以上技术方案与现有技术相比,具有
以下有益效果:
1、有机结合了基于表格的磨损均衡算法和基于代数的磨损均衡算法。
其核心思想是把整个空间划分为很多个子存储区域,在区域内部采用基于
代数的磨损均衡算法,在区域之间采用基于表格的磨损均衡算法,从而实
现低的空间开销和高的使用寿命。
2、在NVM晶元(bank)中执行单层的基于代数的磨损均衡算法,即
各个子存储区域之间完全独立,这既避免了由基于代数的磨损均衡算法发
送出的额外请求占用总线导致性能降级问题,同时使得上层的内存控制器
可以精确记录每个存储子区域的累积写次数。
3、在内存控制器中执行基于表格的子存储区域磨损均衡算法,可以有
效利用更多的硬件资源,采用更复杂的交换策略平衡所有晶元内部和晶元
之间的子存储区域的写次数,同时获得高的使用寿命和安全性。
附图说明
图1是本发明实施例的基于多层单元的非易失内存系统的磨损均衡方
法的原理示意图;
图2是细粒度的交换方法的原理示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图
及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体
实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的
本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可
以相互组合。
为了便于理解本发明,首先对本发明中出现的以下名词进行解释:
物理行:内存系统最基本的访问单元。在不同的系统中,行大小可以
不同,通常一个行大小可以为64字节,128字节,256字节。
子存储区域:由若干个物理行组成,通常一个子存储区域可以由2048、
4096或8192个行组成。
物理地址:物理设备所对应的地址,它是一个真实地址。
逻辑地址:上层应用程序请求的地址,是一个虚拟地址。
“热”子存储区域:特指访问较频繁,累积写次数较多的子存储区域。
“冷”子存储区域:特指访问不频繁,累积写次数较少的子存储区域。
图1是本发明实施例的基于多层单元的非易失内存系统的磨损均衡方
法的原理示意图。非易失内存控制器中包含区域交换、地址映射和请求队
列模块。地址映射表统计了每个逻辑区域号对应的物理区域号,累积的写
次数和最近一次交换的时间。累积写次数和交换时间是为了精确地进行冷
热区域的交换。除此之外,区域交换还需要使用一个寄存器组,包含4个
寄存器,其中两个寄存器分别记录当前正在交换的区域,一个寄存器记录
已经交换行数,最后一个寄存器记录内存累积写入次数,这个寄存器用来
触发区域交换。单层的基于代数的磨损均衡模块集成在NVMbank中,每
个基于代数的磨损均衡模块独立管理一个区域。基于代数的磨损均衡模块
使用纯硬件实现,具有低开销和低延时的优势。
除此之外,针对基于表格的磨损均衡算法安全性较差的问题,本发明
使用了一种随机交换策略,使得恶意的程序无法猜测交换时间和新的物理
位置。同时本发明设计了一种细粒度的交换方式,可以避免区域交换时的
性能降级。
为了平衡一个区域内部各个行之间不均衡的写分布,本发明使用单层
的基于代数的磨损均衡算法独立地管理各个区域,使得写次数多的“热”
行可以快速的与这个区域内的其他行进行交换,避免一个行被过早的磨穿。
典型的基于代数的磨损均衡算法有Start-Gap和SecurityRefresh。Start-Gap
是在每个区域内部预留一个空白行,周期性的交换空白行和其邻居行。
Start-Gap需要3个寄存器,分别存储最小逻辑地址对应的物理地址,空白
行指针和写计数器。SecurityRefresh周期性的把所有行移动一个随机的偏
移,每轮交换完成后,再随机生成一个新的秘钥(key),作为下一轮移动的
距离。SecurityRefresh需要4个寄存器,分别存放上一轮的秘钥,当前轮
的秘钥,当前内部交换指针和写计数器。基于代数的磨损均衡算法以非常
低的计算和存储开销平衡区域内部各行之间的写次数。在代数映射中,逻
辑行地址与物理行地址存在函数映射关系,通过简单的代数计算,就可以
得到逻辑行地址所对应的物理行地址。在本发明中,每个区域都独立进行
基于代数的磨损均衡策略,以使得“热”的区域可以进行更多有效的移动。
基于代数的磨损模块使用纯硬件实现,具有低延时的优势。
如上所述,基于代数的磨损均衡算法使得在非易失内存中的每一个区
域内部,都能很好的达到负载均衡的目标。
本发明实施例的基于多层单元的非易失内存系统的磨损均衡方法包括
如下步骤:
(1)将NVM系统的存储区域的每个晶元划分为多个子存储区域,每
个子存储区域由若干个物理行组成。
(2)对每个子存储区域,在其每执行P个写请求之后,使用基于代数
的磨损均衡算法随机交换该子存储区域的物理行中的数据,从而实现子存
储区域内部的写次数平衡。
其中,由数据交换引起的内存读写操作直接在晶元内部执行,不占用
内存控制器和总线资源;P为基于代数的磨损均衡算法的交换周期,为预定
值,综合考虑本发明的磨损均衡方法的寿命和性能选取P的值。优选地,P
∈(8,128),此时,本发明的磨损均衡方法的寿命适中,同时其性能降级维
持在0.78%和12.5%之间。
(3)在NVM系统的存储区域每执行T个写请求之后,从各子存储区
域中选取一个“热”子存储区域和一个“冷”子存储区域进行数据交换,
从而实现子存储区域之间的写次数平衡。
其中,T为预定值或随机数,“热”子存储区域是指访问较频繁,累积
写次数较多的子存储区域,“冷”子存储区域是指访问不频繁,累积写次
数较少的子存储区域。该步骤由内存控制器执行,由数据交换引起的内存
读写操作占用总线资源。
通过执行上述步骤(2)和(3),分别在不同层次完成子存储区域内
部和子存储区域之间的写次数平衡,从而实现磨损均衡。
为了平衡区域之间的写通信量并且避免强力的区域攻击,采用传统的
确定性的交换算法,例如周期性的交换最冷和最热的区域,会导致恶意的
程序跟踪并强力攻击特定的物理区域,致使设备很早就失效。例如一个包
含2048个行的区域,采用确定性的算法,被恶意磨穿只需要39分钟,为
了避免这种现象,本发明设计了一种基于加权的随机选择算法或者动态随
机调整交换周期来完成区域之间的交换。因此恶意的程序无法探测出被交
换区域的新位置和交换时间,从而有效的避免攻击。
在本发明的一个实施例中,通过基于加权的随机选择算法选择出待交
换的“冷”子存储区域和“热”子存储区域,上述步骤(3)进一步包括如
下步骤:
(3-1)计算子存储区域的平均累积写次数将累积写次数高
于平均值的子存储区域作为“热”子存储区域,将累积写次数低于平均值
的子存储区域作为“冷”子存储区域;其中,n为子存储区域的个数,wi为
第i个子存储区域的累积写次数。
(3-2)计算各“热”子存储区域的权值和各“冷”子存
储区域的权值进而计算“热”子存储区域的权值总和和
“冷”子存储区域的权值总和
(3-3)生成随机数X1和X2,使得 X 1 ∈ [ 0 , Σ w i > w ‾ W i ] , X 2 ∈ [ 0 , Σ w i < w ‾ W i ] . ]]>
(3-4)将X1顺序逐一减去“热”子存储区域的权值,当X1≤0时,选
中对应的“热”子存储区域,将X2顺序逐一减去“冷”子存储区域的权值,
当X2≤0时,选中对应的“冷”子存储区域。
(3-5)交换选中的“热”子存储区域和选中的“冷”子存储区域的所
有物理行的数据,执行T个写请求之后,返回步骤(3-1)。
其中,T为区域交换间隔,为预定值,综合考虑磨损均衡方法的寿命和
性能选取T的值。优选地,T=128*K,此时,磨损均衡方法的寿命适中,
同时其性能降级维持在1.56%左右,其中,K为是每个子存储区域包含的物
理行数。
在本发明的一个实施例中,通过动态随机调整交换间隔的方法选择出
待交换的“冷”子存储区域和“热”子存储区域,上述步骤(3)进一步包
括如下步骤:
(3-1)生成随机数N,计算得到区域交换间隔T=N*K,其中,K是每
个子存储区域包含的物理行数。
N越小,该磨损均衡方法的寿命越长,但同时会导致其性能下降,反
之亦然。优选地,N∈(64,256),此时磨损均衡方法的寿命适中,同时其性
能降级维持在3.13%和0.78%之间。
(3-2)在执行T个写请求后,将累积写次数最多的子存储区域作为“热”
子存储区域,将累积写次数最少的子存储区域作为“冷”子存储区域。
(3-3)交换“热”子存储区域和“冷”子存储区域的所有物理行的数
据,返回步骤(3-1)。
在对两个子存储区域进行数据交换时,会迁移两个子存储区域的所有
物理行,交换的请求占满请求队列,这会阻塞正常执行的请求。此时,NVM
内存无法提供上层的服务。例如,一个子存储区域包含2048个行,完成数
据交换需要6.1ms。为了避免性能降级,本发明实施例采用细粒度的交换方
法,逐次迁移所有物理行的数据。
细粒度的交换方法包括如下步骤:
(A1)计算待交换的“热”子存储区域和“冷”子存储区域的单个物
理行的交换间隔t=T/K。
(A2)每执行t个写请求,就从待交换的“热”子存储区域中选取一
个物理行,与待交换的“冷”子存储区域中偏移地址相同的物理行进行数
据交换,直至完成待交换的“热”子存储区域和“冷”子存储区域的所有
物理行的数据交换。
具体地,如图2所示,将待交换的区域号存储到寄存器中,每执行t
个写请求,就从待交换的两个区域中选取偏移相同的两个行交换,即从两
个区域中分别读取一个行的数据,并写到对方的位置去,同时交换指针加1,
当交换指针值达到N时,交换完成,清除寄存器的值。
下面从空间开销、时间开销、额外写开销和性能影响等方面对本发明
的基于多层单元的非易失内存系统的磨损均衡方法进行评估。
我们把地址映射表存储在SRAM中,便于容量扩展,支持更多数量的
bank。用四个32位的寄存器存储区域交换时所需要的值。假设整个非易失
内存的容量C=64GB,其包含有M个子存储区域(M=65536),每个子存储
区域需要12个字节的存储空间,分别使用一个4字节的空间存储物理地址,
累积写次数和最近交换时间。所有的空间开销为:OSUM=(3*M*4+4*4)字
节=(12*M+16)字节=256KB。可见,本发明的基于多层单元的非易失内存系
统的磨损均衡方法对硬件资源的要求很低。
本发明的方法存在两部分时间开销:地址转换的时间开销和执行区域
选择算法的时间开销。内存请求在控制器内部需要进行逻辑区域地址到物
理区域地址的转换,因此需要在SRAM中查找地址映射表,查表的时间为
3~5个处理周期。内存请求在非易失晶元内部需要进行逻辑偏移地址到物理
偏移地址的抓换,需要1~2个处理周期。相对于读写操作消耗的时间,这
个延时可以忽略。而执行基于加权的随机选择算法需要访问SRAM中的所
有数据,消耗的时间达到微秒级别,我们在后台执行,从而隐藏执行时间,
缓解其对正常请求的影响。
额外写开销和性能影响:由于磨损均衡算法引入了额外的请求,这些
交换请求会阻塞正常的请求的执行,并且占用系统总线和其他硬件资源,
导致了性能降级。额外写开销计算公式是1/P+2/t,其中P是基于代数的磨
损均衡算法的交换周期,t是子存储区域的单个物理行的交换间隔。通常
t=128,P=8~64,此时额外写开销分别是3.1%~14.1%。而我们采用分层的磨
损均衡结构可以有效缓解高的基于代数的磨损均衡算法的开销对系统性能
的影响,因此系统性能降级的主要影响是在控制器内部执行的存储子区域
的交换,此开销对性能的影响维持在1.56%左右。
本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,
并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等
同替换和改进等,均应包含在本发明的保护范围之内。