专利名称:一种快速响应的相变存储器损耗均衡方法
技术领域:
本发明属于计算机存储技术领域,具体涉及一种相变存储器的损耗均衡方法。
背景技术:
相变存储器(Phase Change Memory, PCM)是一种新型的非易失性存储器,它有着高密度、低功耗、高速读写等性能,并已开始在嵌入式系统中使用以替代传统的NOR存储器。尽管相变存储器比NOR的寿命要持久,但它还是摆脱不了寿命有限的困局。一个典型的相变存储器单元能够承受IO7到IO9次写操作,而向同一个相变存储器单元重复地写将可能在几秒钟内就对该单元造成破坏,这就为相变存储器在嵌入式系统中的使用带来了很大的挑战。近年来随着相变存储器容量的不断增大,它可以存储文件系统的元数据以及页表等关键信息,对这些信息的频繁更新将加速相变存储器寿命的缩短。由于嵌入式系统主要面向各类特定应用,若能考虑到访存模式、更新频率等嵌入式应用的内在特征,并结合这些特征进行优化,那么相变存储器的优势在嵌入式系统中将发挥的更加明显。此外,嵌入式系统中的有限资源也为相变存储器的有效管理带来了挑战。针对相变存储器在嵌入式系统中的有效利用的研究已经展开,这些研究主要从系统结构级、软件级和编译级等方面进行优化,并在相变存储器的寿命及损耗均衡等方面做出了相应的贡献。然而,目前已有的研究工作并没有考虑到嵌入式系统中特定应用的访存规律,大多数研究主要针对应用层优化,这无疑会增加嵌入式应用开发的复杂程度,从而限制了相变存储器在嵌入式系统上的推广。
发明内容
针对上述研究方法的不足,本发明所要解决的技术问题是从操作系统中资源管理的层面,提供一种快速响应的相变存储器损耗均衡方法,它能延长相变存储器在嵌入式系统中的使用寿命,且能保证系统快速响应。要解决的上述技术问题,
本发明提供一种相变存储器的损耗均衡方法,包括以下步骤
判定相变存储器中频繁写的热区和不频繁写的冷区;
将热区划分为多个热区小块;
依次将每一个热区小块与对应冷区物理位置交换,实现热区小块的移动,所有热区小块移动结束后完成热区移动,直至热区移动遍及全部存储区后再循环移动;
通过逻辑-物理地址的转换公式获得需要访问的相变存储器物理地址。由于通过不断移动热区的物理地址,避免了大量写操作集中在热区造成相变存储器的破坏,实现了延长相变存储器的寿命的目的,由于将热区划分为多个热区小块,每次仅移动一个热区小块,减小了损耗均衡所带来的移动量,缩短系统响应的时间。本发明具有如下的优点避免了大量写操作集中在热区,实现了相变存储器损耗均衡,能延长相变存储器的寿命,又能保证系统快速响应。
本发明的
如下
图1为本发明的热区移动流程 图2为相变存储器中热区移动示意 图3为相变存储器的访问流程图。
具体实施例方式下面结合附图和实施例对本发明作进一步说明
在相变存储器中,针对具体应用程序有一个频繁进行写操作的区域,简称为“热区”,其他大量的区域很少有写操作,甚至没有写操作,这部分区域简称“冷区”。本方法发明是首先判定相变存储器中频繁写的热区和不频繁写的冷区;将热区划分为多个热区小块;在处理一个请求时,依次将每一个热区小块向冷区移动,直至热区移动遍及全部存储区后再循环移动;通过逻辑-物理地址的转换公式获得需要访问的相变存储器物理地址。判定储器热区和冷区的方法属于现有技术,〃Bloom filter-based dynamicwear leveling for phase-change RAM〃,Joosung Yun; Sunggu Lee; Sungjoo Yoo,Design, Automation & Test in Europe Conference & Exhibition (DATE),2012,Page(s) 1513-1518,ISSN 1530-1591 (“基于布隆过滤器的相变存储器动态损耗均衡方法”,Joosung Yun ;Sunggu Lee ; Sungjoo Yoo,欧洲设计自动化与测试研讨会2012,第1513-1518页,国际标准连续出版物编号ISSN :1530-1591)于2012年3月公开了一种用布隆过滤器(bloom filter)识别热地址的方法,该方法是先给每个布隆过滤器设置一个计数器,然后使用与布隆过滤器数量相同的hash函数对每个有写操作的地址进行散列,hash函数能将写操作的次数映射到与地址相关的计数器,增加计数器的值,通过计数器确定热 区地址。图1是本发明的热区移动流程图,该流程开始于步骤101,然后
在步骤102,数据初始化,根据具体应用程序,指定热区的起始逻辑地址、热区长度和移动热区的阈值,保存热区起始物理地址R_H_START_P,保存位于热区之后的冷区起始逻辑地址;设置损耗均衡计数器,计数器初始值为O ;记录上一个热区的起始物理地址LAST_R_H_START ;确定热区小块的总数η和每个热区小块的存储单元数m ;
损耗均衡计数器用于累计访问请求的次数,该损耗均衡计数器记录包括冷区热区在内所有的写操作请求,或者单独记录对读热区的写操作请求,或者记录全部读/写操作请求,依据实验效果来选定上述三个之一;
在步骤103,确认请求类型,若该访问请求会使得损耗均衡计数器累加,则执行步骤104,否则,对下一个请求进行确认;
请求类型由上述损耗均衡计数器的类型决定。例如指定损耗均衡计数器只记录热区内的写操作访问,若此请求不是写请求或不是热区写请求,则不进入本流程,直接进入图3所示的相变存储器的数据访问流程;
在步骤104,判定已经移动的热区小块数i是否为0,若为0,则执行步骤105,若不为0,则执行步骤110 ;
在步骤105,损耗均衡计数器值与移动热区阈值比较,若计数器值大于等于热区移动阈值,则执行步骤107 ;若计数器值小于热区移动阈值,则执行步骤106 ;
在步骤106,损耗均衡计数器累加1,返回步骤103 ;
在步骤107,保存当前热区物理起始地址R_H_START_P到上一个热区的起始物理地址LAST_R_H_START ;
在步骤108,计算新的热区物理起始地址R_H_START_P,将热区起始地址R_H_START_P加上热区长度H_LEN ;
在步骤109,判定新的热区地址是否溢出,溢出是指最大热区热区物理地址大于热区冷
区总长度,若是,则将新的热区物理起始地址R_H_START_P设为0,执行步骤110 ;否则,直接执行步骤110 ;
在步骤110,根据已完成移动的热区小块数i确定将要移动的下一个热区小块,将该热区小块存储单元数计数器j置为O ;
在步骤111,判定热区小块存储单元数计数器j的值是否为m,若是,则执行步骤113,否则执行步骤112 ;
在步骤112,移动热区小块存储单元,将第i+Ι热区小块的第j个热区存储单元地址与热区之后对应的冷区存储单元地址交换;
保存当前热区存储单元的物理地址为old_addr ;
计算新的热区物理地址new_addr,计算式为R_H_START_P+地址索弓I,例如R_H_START_P后的第一存储单元则加I,第二存储单元则加2……,依次递推;
将当前热区存储单元的值保储在临时变量val内;
复制new_addr所指存储单元的值到old_addr所指存储单元;
复制val到new_addr所指的存储单元;
热区小块存储单元数计数器j+Ι,返回步骤111;
在步骤113,已完成移动的热区小块数i+Ι ;
在步骤114,判定已完成移动的热区小块数i是否等于热区小块的总数n,若是,则执行步骤115,若不是,则返回步骤103 ;
在步骤115,重置损耗均衡计数器为0,重置已完成移动的热区小块数i为0,返回步骤
103。相变存储器中热区移动如图2所示,该图中将热区分成O和I两个小块,图中(a)为相变存储器的物理地址PA与逻辑地址LA完全匹配的情况,(b)为热区小块O与热区之后对应的冷区交换后的情况,此时热区小块逻辑地址O与对应的冷区2换位;(c)热区小块I与其对应的冷区交换后的情况,热区小块逻辑地址I与其对应的冷区3换位;通过(b)和(c)两步移动完成整个热区的移动。当请求次数累计达到阀值之后就开始一个一个地顺序移动,第一个请求移动第一个热区小块0,第二个请求移动第二个热区小块I。按图1所示流程,移动热区小块所使用的请求则不进行累计,若将步骤106放在步骤103之后,则移动热区小块所使用的请求要累计。整个热区的移动结束后,已完成移动的热区小块数i置为0,损耗均衡计数器重新计数,达到阀值时,进行第二次移动,(d)为第二次移动的开始,热区小块逻辑地址O与热区之后的下一块冷区逻辑地址4换位;(b) - (d)则出现了相变存储器的物理地址PA与逻辑地址LA不一致。由于移动热区会导致逻辑-物理地址映射不一致,每次数据访问都必须通过地址转换公式来获取正确的物理地址。因此对于每个被访问的逻辑地址,首先根据已经移动过的热区块数i的值和当前访问存储单元的序号来取得正确的热区起始物理地址,热区起始物理地址由热区起始物理地址R_H_START_P或者上一个热区的起始物理地址LAST_R_H_START指定。即访问首先判断逻辑地址LA是否已经移动若已经移动,则读取热区物理起始地址R_H_START_P ;若未移动,则读取上一个热区的起始物理地址LAST_R_H_START。相变存储器的物理地址PA与逻辑地址LA的地址转换公式为
热区地址物理地址PA=(热区物理起始地址R_H_START_P+ (逻辑地址LA-热区逻辑起始地址R_H_START_L) ) mod热区冷区总长度LEN,
冷区地址
(I)若待转换逻辑地址LA < R_C_START_L,则,
物理地址PA=(热区物理起始地址R_H_START_P -(位于热区之后的第一个冷区单元的逻辑地址R_C_START_L -逻辑地址LA) +热区冷区总长度LEN) mod热区冷区总长度LEN ;
也就是说若待转换逻辑地址LA < R_C_START_L,则说明PA位于热区之前。若不考虑溢出问题,则 PA= R_H_START_P - (R_C_START_L - LA)。相当于由 R_H_START_P 开始倒数R_C_START_L - LA个单位。考虑溢出问题,则需再加上LEN最后取模LEN。(2)若待转换逻辑地址LA >= R_C_START_L,则,
物理地址PA=(热区物理起始地址R_H_START_P +热区长度H_LEN + (逻辑地址LA-位于热区之后的第一个冷区单元的逻辑地址R_C_START_L)+热区冷区总长度LEN) mod热区冷区总长度LEN,
也就是说若待转换逻辑地址LA >= R_C_START_L,则该冷区逻辑地址位于热区之后。则PA的计算方法为从热区开始,加上热区长度(此时PA指向R_C_START_L的物理地址),再加上(LA - R_C_START_L)即可(相当于从R_C_START_LK项之后开始的偏移量)。考虑溢出问题,则对当前结果取模LEN即可。注意若位于热区之后的第一个冷区单元的逻辑地址为0,则应将R_C_START_L设置为热区冷区总长度LEN来保持上述公式正确。为了简便计算,R_C_START_L在此时仍然设置为0,但在取模之前应加上热区冷区总长度LEN。由于热区移动后,相变存储器的物理地址PA与逻辑地址LA不一致,每次访问相变存储器时,则需要进行逻辑-物理地址映射过程。图3为相变存储器的数据访问流程图,
在步骤301,访问开始,接收到访问指令;
在步骤302,判定已经移动的热区小块数i是否为0,若为0,则执行步骤305,若不为0,则执行步骤303 ;
在步骤303,判断逻辑地址LA是否属于已经移动的热区小块数i或与热区小块数i互换的冷区,若是,则执行步骤305 ;否则执行步骤304 ;
在步骤304,将上一个热区的起始物理地址LAST_R_H_START作为当前起始物理地址R_H_START_P,然后执行步骤305
在步骤305,判断要访问的逻辑地址LA是否属于热区,若是,则执行步骤306 ;若不是,则执行步骤307 ;
在步骤306,计算物理地址物理地址PA=(热区物理起始地址R_H_START_P+ (逻辑地址LA-热区逻辑起始地址R_H_START_L) ) mod热区冷区总长度LEN,然后执行步骤310 ;在步骤307,判断逻辑地址LA是否小于位于热区之后的第一个冷区单元的逻辑地址R_C_START_L,若是,则执行步骤308 ;若不是,则执行步骤309 ;
在步骤308,计算物理地址物理地址PA=(热区物理起始地址R_H_START_P -(位于热区之后的第一个冷区单元的逻辑地址R_C_START_L -逻辑地址LA) +热区冷区总长度LEN) mod热区冷区总长度LEN ;然后执行步骤310 ;
在步骤309,计算物理地址物理地址PA=(热区物理起始地址R_H_START_P +热区长度H_LEN + (逻辑地址LA -位于热区之后的第一个冷区单元的逻辑地址R_C_START_L)+热区冷区总长度LEN) mod热区冷区总长度LEN ;然后执行步骤310 ;
在步骤310,从物理地址PA的存储单元进行数据传输,进入步骤311结束。一个访问请求在启动图1所示流程之后,都应当进入图3所示的相变存储器的数据访问流程才能完成请求操作。
权利要求
1.一种快速响应的相变存储器损耗均衡方法,其特征是包括以下步骤判定相变存储器中频繁写的热区和不频繁写的冷区; 将热区划分为多个热区小块; 依次将每一个热区小块与对应冷区物理位置交换,实现热区小块的移动,所有热区小块移动结束后完成热区移动,直至热区移动遍及全部存储区后再循环移动; 通过逻辑LA-物理PA地址的转换公式获得需要访问的相变存储器物理地址。
2.根据权利要求I所述的方法,其特征是在确认没有热区小块移动之后,损耗均衡计数器对访问请求计数,预设阀值,根据访问请求的次数达到阀值确定热区移动。
3.根据权利要求2所述的方法,其特征是在确定热区小块移动之后,保存当前热区物理起始地址R_H_START_P为上一个热区的起始物理地址LAST_R_H_START,计算新的热区物理起始地址,判定新的热区物理地址是否溢出,若是,则新的热区物理地址R_H_START_P设为0,然后开始移动热区小块存储单元。
4.根据权利要求I所述的方法,其特征是在确认已经有热区小块移动之后,直接依据已经移动的热区小块数,移动下一热区小块存储单元。
5.根据权利要求3或4所述的方法,其特征是热区存储单元移动包括以下步骤 保存当前热区存储单元的物理地址为old_addr ; 计算新的热区物理地址new_addr,计算式为R_H_START_P +地址索引; 将热区存储单元的值保储在临时变量val内; 复制new_addr所指存储单元的值到old_addr所指存储单元; 复制val到new_addr所指的存储单元。
6.根据权利要求5所述的方法,其特征是热区移动完成之后,损耗均衡计数器置0,已完成移动的热区小块数置O。
7.根据权利要求6所述的方法,其特征是在访问过程中的逻辑LA-物理PA地址转换之前,依据有无已经移动的热区小块和逻辑地址LA有没有移动来获得正确的热区起始物理地址。
8.根据权利要求7所述的方法,其特征是逻辑LA-物理PA地址的转换公式为 热区地址,则物理地址PA=(热区物理起始地址R_H_START_P+ (逻辑地址LA-热区逻辑起始地址R_H_START_L) ) mod热区冷区总长度LEN, 冷区地址 若待转换逻辑地址LA < R_C_START_L,则, 物理地址PA=(热区物理起始地址R_H_START_P -(位于热区之后的第一个冷区单元的逻辑地址R_C_START_L -逻辑地址LA) +热区冷区总长度LEN) mod热区冷区总长度LEN ; 若待转换逻辑地址LA >= R_C_START_L,则, 物理地址PA=(热区物理起始地址R_H_START_P +热区长度H_LEN + (逻辑地址LA-位于热区之后的第一个冷区单元的逻辑地址R_C_START_L)+热区冷区总长度LEN) mod热区冷区总长度LEN。
全文摘要
本发明涉及一种相变存储器的损耗均衡方法。它包括以下步骤判定相变存储器中频繁写的热区和不频繁写的冷区;将热区划分为多个热区小块;依次将每一个热区小块与对应冷区物理位置交换,实现热区小块的移动,所有热区小块移动结束后完成热区移动,直至热区移动遍及全部存储区后再循环移动;通过逻辑LA-物理PA地址的转换公式获得需要访问的相变存储器物理地址。本发明具有如下的优点避免了大量写操作集中在热区,实现了相变存储器损耗均衡,能延长相变存储器的寿命,又能保证系统快速响应。
文档编号G06F12/02GK102981971SQ20121056891
公开日2013年3月20日 申请日期2012年12月25日 优先权日2012年12月25日
发明者刘铎, 沙行勉, 诸葛晴凤, 王添正, 邵子立, 谭玉娟, 梁靓 申请人:重庆大学