CN107193646B - 一种基于混合主存架构的高效动态页面调度方法 - Google Patents
一种基于混合主存架构的高效动态页面调度方法 Download PDFInfo
- Publication number
- CN107193646B CN107193646B CN201710371726.XA CN201710371726A CN107193646B CN 107193646 B CN107193646 B CN 107193646B CN 201710371726 A CN201710371726 A CN 201710371726A CN 107193646 B CN107193646 B CN 107193646B
- Authority
- CN
- China
- Prior art keywords
- page
- stack
- storage medium
- pages
- read
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0877—Cache access modes
- G06F12/0882—Page mode
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明公开一种基于混合主存架构的高效动态页面调度方法,应用于包括第一存储介质和第二存储介质的水平存储架构的内存控制器,在各存储介质中分别配置一张访问表,在内存控制器中为各存储介质分别配置一个堆栈;根据页面在堆栈中记录的状态标记及在访问表中记录的读写访问次数对存储介质中近期被访问的页面实行动态管理,以将写热度高的页面放置于第一存储介质,将读频繁的页面保存在到第二存储介质,第一存储介质是DRAM,第二存储介质是NVM。该方法能够更精准地把握历史访问信息以适用于局部性较弱的应用场景,能极大地减少在混合内存介质之间频繁无效的页迁移数量,提高主存利用率以及访问命中率。
Description
技术领域
本发明属于计算机数据存储领域,具体涉及一种基于混合主存架构的高效动态页面调度方法。
背景技术
基于DRAM/PCM的混合内存大致可分为两种不同的结构:将DRAM(动态随机存储器)作为PCM(相变存储器)高速缓存的“垂直模型”和DRAM和PCM共同作为主存的“水平模型”。“水平模型”由DRAM和PCM共同构成主存的模型使用统一的地址空间,并且进行同级管理,能够充分利用两种存储介质的优势有效分配数据存放空间,根据内存控制器中的读写信息将写频繁的数据存放在DRAM上,读密集型的数据存放在PCM上,突出DRAM性能优势的同时发挥了PCM低功耗的特点。相比于“垂直模型”以DRAM作为缓存的混合内存结构,同级存储架构少一层映射转换机制,避免了频繁的数据交互,与此同时,主存的存储容量和存储密度也有显著提升。
构建基于DRAM和PCM的水平结构主存***,在发挥各自优点的同时,也需要克服DRAM高能耗和PCM写性能不足、写寿命有限的缺陷。高效的混合内存页面调度机制能够针对这些缺陷,实现数据按照读写访问频率分别存放在不同的存储介质上,减少PCM磨损的同时降低***能耗,保证了两种混合介质扬长避短,各尽其职,故选择合适的页面调度策略显得格外重要。
现有的混合内存页面调度技术主要对传统的LRU、CLOCK算法进行改进,利用局部性原理和读写请求按存储介质存放的基本原则,通过不同的数据结构实现了不同阶段页面的迁移操作。大致可以划分为被动式迁移、主动式迁移和主动和被动相结合的迁移方式。被动式页面迁移策略在主存未命中时将请求数据直接写到DRAM中,而当DRAM写满时便会触发迁移操作,再将访问频率低的冷页面或者读写倾向性不明确的页面迁移到PCM。这种被动迁移方式能够充分利用DRAM高读写带宽的特点,将尽可能多的写操作集中在DRAM,达到增加PCM寿命的目标。但是这种被动式迁移策略,缺乏从PCM到DRAM的写频繁页面迁移,读写预测机制的不足导致PCM写次数减少程度有限。主动式页面迁移策略通过访问频率和访问间隔定义页面的冷热,选择合适的数据结构开发时间局部性和空间局部性,并判断页面的读写倾向性进行相应的页迁移,保证DRAM存放写倾向页面,而PCM存放读倾向页面。这些方法能够有效预测页面的读写热度,在页面表现出读写倾向时执行迁移操作,但是需要较大的空间开销去记录读写访问频率和局部访问热度,并且各算法预测结果也存在较大差异。基于CLOCK提出一种主动和被动相结合的页面调度算法,对DRAM中的页面采取被动方式管理页面迁移到PCM,而对PCM中的页面采用主动方式区分写频繁页面,再迁移到DRAM。主动和被动相结合的页面调度算法能够充分发挥DRAM和PCM两种存储介质的优点,实现的开销也相对较小,但是这种管理方式会造成读写热度判断上的不统一,并且页面迁移比例也会出现差异。这些算法能够有效发挥DRAM写性能上的优势,控制PCM的写操作数量,但是普遍存在以下问题:第一、无法有效避免在混合内存介质之间频繁无效的页迁移,造成不必要的***开销;第二、对于弱局部性应用场景下数据读写倾向性的预测效果不佳,容易产生不准确的迁移操作;第三、没有能够把尽可能多的读频繁数据迁移到PCM,不能进一步开发PCM读功耗和静态功耗低的优势。其中,所谓的弱时间局部性,从时间角度上讲,访问在时间维度上比较分散,不呈现出某一时间段对某一块数据集中访问的现象,称为弱时间局部性;从空间角度上讲,不呈现对某一地址范围集中访问的特性,称为弱空间局部性。本专利所指的弱局部性更侧重于弱时间局部性。
可见,现有的混合内存页面调度算法在有限的统计信息下对于读写热度的预测仍有进一步提升的空间,并且对于不同的应用场景缺乏相适应的调度策略,尤其是在局部性较弱的情况下不能准确预测页面的读写热度,容易造成页面迁移频繁的问题,不能充分发挥混合内存***的I/O性能和节能水平。因此,在面向大数据分析的内存计算环境中,设计一种基于动态页排序的混合内存页面调度策略显得格外重要。
发明内容
本发明针对混合内存的水平存储架构,提出了一种改善弱局部性应用场景的混合主存页面调度方法,即,基于第一存储介质和第二存储介质的混合主存构架的页面调度方法,我们又将这种方法简称为“DualStack算法”。
本发明所公开的的页面调度方法(DualStack)借鉴LIRS(Low Inter ReferenceRecency Set)算法中IRR(Inter-reference recency)的基本思想,利用两次访问同一页面之间的距离作为尺度,动态的将访问页进行排序。DualStack算法利用页面在不同存储介质上的短期时间局部性特征,结合页面的读写信息,将写热度高的页面放置于DRAM,将大量读频繁的页面保存在到PCM,以达到减少PCM写操作、降低主存***能耗的目标。DualStack算法还同时维护两个堆栈,分别管理DRAM和PCM中被经常访问的页面,并且根据不同存储介质下页面的读写热度实现写频繁页面和读频繁页面的迁移。DualStack算法采取不均衡的迁移方案,严格筛选DRAM中读频繁的页面迁移至PCM,以避免回迁操作带来的额外开销;而对于PCM中写频繁的页面,综合短时间内的读写情况,把写热度高的页面尽可能迁移至DRAM。具体技术方案如下:
一种基于混合主存架构的高效动态页面调度方法,应用于包括第一存储介质和第二存储介质的水平存储架构的内存控制器,在第一存储介质和第二存储介质中分别配置一张用于记录每个页面的访问信息的访问表,访问信息包含每个页面唯一标识的页号、读访问次数以及写访问次数,操作***在响应页面的访问请求时会根据请求类型(读或写)对该页面的访问表中读或写的访问次数进行更新,(操作***根据请求的地址找到要访问的页面,再通过请求类型对读写操作次数进行更新);在内存控制器中为第一存储介质和第二存储介质各配置一个堆栈(Stack),即第一堆栈和第二堆栈,用于记录其所对应的存储介质中近期被访问的页面的页号及状态标记,其中,状态标记用于反映页面在近期被访问的频率;根据页面在堆栈中记录的状态标记及在访问表中记录的读写访问次数对存储介质中近期被访问的页面实行动态管理,以将写热度高的页面放置于第一存储介质,将读频繁的页面保存在到第二存储介质。第一存储介质是DRAM,第二存储介质是NVM。
进一步的,第二存储介质是PCM或STT-RAM。
进一步的,对存储介质中近期被访问的页面实行的动态管理包括以下操作中的一种或多种:1)对该页面所在堆栈中的页面进行动态排序;2)更新该页面的状态标记;3)对堆栈中的页面进行栈剪枝操作以将一段时间内访问频率不高的页面淘汰出栈;4)对符合迁移条件的页面进行迁移。
进一步的,页面的状态标记包括LIR和HIR,其中,LIR表示近期被频繁访问且保存在堆栈中的页面,HIR又分为residentHIR和nonresidentHIR,residentHIR表示近期被访问次数较少但仍然保存在堆栈中的页面,nonresidentHIR表示被淘汰出堆栈的页面。
进一步的,对存储介质中不同状态标记的被访问的页面的动态管理方式包括:访问LIR页面时,不改变其状态标记,对符合迁移条件的页面触发迁移操作,否则只对堆栈进行动态排序(排序更新);访问residentHIR页面时,在更新堆栈排序的同时还需要将该数据的状态标记升级为LIR;而对于nonresidentHIR页面,被访问后重新被压入堆栈并置于栈顶,同时将该数据的状态标记升级为residentHIR。
进一步的,在对被访问且不位于栈顶的LIR页面和residentHIR页面进行动态管理的同时,还需要对堆栈执行剪枝操作,将堆栈中一段时间内访问频率不高的页面淘汰出栈,以保证栈底始终是LIR页面。
进一步的,动态排序是指:利用两次访问同一页面之间的距离作为尺度,动态的将访问页进行排序。将被访问的页面抽取出来置于栈顶,其它页面。
进一步的,触发页面迁移的迁移条件是指该页面在堆栈中记录的状态标记是LIR且所对应的访问表中记录的读访问次数或写访问次数达到阈值。
进一步的,对页面的读访问次数和写访问次数的统计并不是相互独立的,而是采取不均衡的触发迁移操作的方案,在第一存储介质中响应写访问将限制读访问次数的累加,在第二存储介质中响应读访问将限制写访问次数的统计。
进一步的,对第一存储介质只关注页面的读访问频率,对第一存储介质中页面进行读访问次数的计数方法及触发迁移操作的条件是:一旦页面响应了写请求,就需要将该数据对应的读次数置0并重新开始计数,当页面的读次数累加超过阈值,该页面将会被迁移至第二存储介质中。
进一步的,对第二存储介质结合读写两方面的信息作为触发页面迁移操作的判断,对第二存储介质中页面读写访问次数的计数方法及触发迁移操作的条件是:当页面的读次数累加到一定数值时,需要对写次数进行减1,当页面的写次数累加超过阈值,该页面将会被迁移至第一存储介质中。
进一步的,在对一存储介质中满足迁移条件的页面进行迁移操作时,会在另一存储介质中抽取一替换页作为该页面的替换对象与之进行位置交换。
进一步的,被抽取的替换页必须是冷页面。
进一步的,被抽取的替换页是在一定的条件下顺序选择,以保证替换页的选择更加均匀。
进一步的,对满足迁移条件的页面,需要检查它是否被迁移过,如果在本次操作之前该页面已经发生过迁移,那么将原有的迁移映射关系删除,将页面回迁到原始存储介质的最初存放位置,无需寻找新的替换页进行替换。
本发明所具有的有益效果如下:
区别于其它混合内存页面调度方法,DualStack算法能够更精准地把握历史访问信息以适用于局部性较弱的应用场景,按照读写访问频率将页面存储在不同的内存介质中,同时能够极大地减少在混合内存介质之间频繁无效的页迁移数量,提高主存利用率以及访问命中率。
混合内存***既能充分利用DRAM的带宽和访问时延优势来保证整个混合内存的读写性能,又能在PCM写寿命受限和写功耗较大的情况下实现混合内存磨损均衡和降低功耗的目标。
DualStack算法需要对读写信息进行区分,对访问频繁的数据进行管理的同时还需要进行数据读写倾向性的预测,并且利用这些信息指导页面的迁移操作。通过这种方法,可以更准确地预测出页面未来一段时间的读写趋势,不会因为周期性访问或者大量冷数据的访问的特殊情况造成页面读写热度的错误判断,从而完美解决弱局部性的问题。
实验结果表明,该算法可以充分利用PCM的低功耗优势,降低主存***能耗,同时能够有效减少频繁的混合内存迁移操作,提高混合内存性能和PCM的寿命。
附图说明
图1DualStack内存控制器的混合内存架构示意图
图2页面迁移的具体流程示意图
图3各类页面迁移的流程示意图
图4栈剪枝示例
具体实施方式
LIRS(Low Inter Reference Recency Set)算法是针对LRU弱局部性这一缺陷所提出的改进算法,利用IRR(Inter-reference recency)的概念来定义同一页面最近两次访问期间其他被访问页面的个数,参考recency进行页面排序的同时根据IRR对队列进行更新,在弱局部性的应用环境下实现对数据访问热度的精确把握。其中,每一个页面对应一个entry,每个entry是一个结构体,即,包含页面地址、读写次数、状态标记等信息的数据结构。一个缓存块的IRR是指在相继地访问这个块之间访问其它非重复缓存块的个数,一个块从最近一次访问到当前时间之间访问其它块的非重复个数叫做这个块的recency,所述的块也就是本发明中的页面。可见,在存储***中,LIRS在选择被替换数据块时不仅仅考虑recency,同时通过考量一个数据块的IRR增强对这个块的访问历史的精确把握,针对弱局部性的问题提出了解决方案。在混合内存的页面调度算法的实现过程中,我们借鉴LIRS的思想,结合混合内存特殊的应用环境,针对读写访问预测、读写数据存储分布等问题提出DualStack算法。
实施例中公开一种基于DRAM和PCM的混合主存构架的页面调度方法,借鉴LIRS算法中IRR的基本思想,利用两次访问同一页面之间的距离作为尺度,动态的将访问页进行排序。其中,两次访问之间的距离就是指两次访问同一页面,在这两个页面之间其他页面的个数。举个例子,现在又1234561这7个数字,在两个1之间有234565个其他数字,那么这两个1之间的距离就是5)。
值得注意的是,实施例中DRAM和PCM两种存储介质共同作为主存的混合主存架构,DRAM和PCM能够优势互补。在实际应用中,NVM(新型非易失性存储器)的种类包括PCM、STT-RAM等,PCM是最具代表性的NVM,具有非易失、低功耗和大容量的优势。STT-RAM和PCM有差异,内部结构和工作原理不同,但是基本性能差不多,因此,同样也可以构建基于STT-RAM和DRAM的混合主存构架。
DualStack算法利用页面在不同存储介质上的短期时间局部性特征,结合页面的读写信息,将写热度高的页面放置于DRAM,将大量读频繁(本专利中的读写热度高与读写频繁是一个意思。)的页面保存在到PCM,以达到减少PCM写操作、降低主存***能耗的目标。DualStack算法还同时维护两个堆栈,分别管理DRAM和PCM中被经常访问的页面,并且根据不同存储介质下页面的读写热度实现写频繁页面和读频繁页面的迁移。DualStack算法采取不均衡的迁移方案,严格筛选DRAM中读频繁的页面迁移至PCM,以避免回迁操作带来的额外开销;而对于PCM中写频繁的页面,综合短时间内的读写情况,把写热度高的页面尽可能迁移至DRAM。其中,读写热度是由读写访问次数以及状态标识共同决定的,只有在被标记为LIR的前提下,读写次数达到阈值,才能被称为读热或者写热。可见,DualStack算法需要对读写信息进行区分,对访问频繁的数据进行管理的同时还需要进行数据读写倾向性的预测,并且利用这些信息指导页面的迁移操作。通过这种方法,可以更准确地预测出页面未来一段时间的读写趋势,不会因为周期性访问或者大量冷数据的访问的特殊情况造成页面读写热度的错误判断,从而完美解决弱局部性的问题。
DualStack算法将存在于主存里面的页面分为LIR和HIR两大类,也就是页面的状态标记分为LIR和HIR两大类。其中,近期被频繁访问且依然贮存在堆栈中的状态标记为LIR,LIR根据请求类别可分为读频繁页面read-LIR和写频繁页面write-LIR,但只是区别DRAM和PCM中LIR页面,而在相应的存储介质中LIR并无分类标记;HIR根据是否在主存中分为residentHIR和nonresidentHIR两类,即,对于近期被访问次数较少但是还保存在堆栈中的状态标记为residentHIR,而被淘汰出堆栈的状态标记为nonresidentHIR。
为了充分发挥DRAM和PCM各自的优势,在保证I/O性能的前提下,实现低功耗的设计目标,实施例中采用软硬件结合的方式实现了混合内存架构读写信息管理和页面调度操作。
如图1所示,实施例中示出了DualStack内存控制器的混合内存架构。该内存控制器通过硬件的方式实现混合存储介质读写访问信息的统计。在DRAM和PCM中,我们分别管理一个访问表来记录每个页面的访问信息(即图1中Accesses Management),访问表中的信息包含每个页面唯一标识的页号、读访问次数以及写访问次数。其中,页面的页号是根据虚拟地址计算得到的,操作***根据请求的地址找到要访问的页面,再通过请求类型对读写操作次数进行更新。实施例中,每个页面对应的读写访问次数并不是相互独立的,在DRAM中响应写访问将限制读访问次数的累加,在PCM中响应读访问次数同样将制约写访问次数的统计。
对混合存储介质中访问信息的管理方面,我们在DualStack内存控制器中以软件的形式通过两个堆栈实现页面的动态排序以及迁移操作,即DRAMStack和PCMStack。对于刚进入堆栈的页面,都被标记为residentHIR,如果再次被访问就被标记为LIR。residentHIR和LIR之间的相互转化情况分为两种:一个是在栈剪枝的时候,访问非栈顶的residentHIR页面时,位于从栈底向上算的第一个LIR页面会被标记为residentHIR,另一个是在堆栈中再次被访问的时候residentHIR会被标记为LIR。在内存控制器中的DRAMStack和PCMStack分别记录DRAM和PCM在最近一段时间内被访问的页面的页号以及状态标记,这些状态标记反映了页面在近期的访问频率,一旦操作***响应读写请求,我们都将对堆栈进行动态排序,并判定是否触发迁移操作。
值得注意的是,本专利所述的“近期”是一个时间上的概念,因为页面停留在Stack(堆栈)中的时间是有限的,长时间不被访问就会被踢除出Stack,而即使存在于Stack中,这些页面通过读写次数的统计,也有访问频繁与不频繁的区别,如LIR页面和residentHIR页面。因此,仍然存在于stack中的页面我们可以认为是近期被访问过或者被访问较为频繁的页面。因为堆栈的维护是一个个entry,如果在一段时间内不被访问了,就会被“剪枝”出堆栈,只有被频繁访问的,才能一直保留在堆栈里面。而对于每一个entry都有一个近期的概念,自从这个entry进入堆栈开始,到被淘汰出堆栈。
尽管这种软硬件结合的方式将会增加***开销,但是相比于GB级的内存而言,我们提出的双堆栈设计所带来的开销微乎其微。在适当增加***开销的情况下,我们能够对页面面访问读写倾向性进行精确预测,实现读写频率不同的页面按内存介质分别存放。
值得注意的是,在本文所述的“读写访问”、“读写请求”、“读写操作”是同一个意思,相应的,“响应读写访问”、“响应读写请求”、“响应读写操作”也是同一个意思。响应读写访问表示的是对读写请求进行相应的处理。“数据”、“页面”、“页面”、“页”也表示的是同一个意思。
实施例中,DualStack算法利用DRAMStack和PCMStack双堆栈的数据结构分别对DRAM和PCM中最近一段时间内页面访问频率进行管理。DRAMStack只保存驻留在DRAM主存中的页面,根据DRAM中存储的不同页面的读写信息及页面的状态标记将页面划分为读访问频率较高的页面(read-LIR)和访问频率较低的页面(HIR)。由于DRAM的写性能和写功耗均优于PCM,在迁移策略中我们将写频繁的页面尽可能保存在DRAM中,降低功耗的同时减少PCM上面的写操作数量。所以,在DRAM中我们可以不关注数据的写访问频率,而是对于读操作密集的页面进行筛选,把一段时间内连续响应读请求的页面定义为严格意义上的读频繁页面,并且迁移到PCM中。
为了尽可能避免已经迁移到PCM中的读倾向性页面在未来再次变成写操作频繁的页面被回迁到DRAM中,我们需要严格控制DRAM中触发页面迁移的条件,通过更加严格的方法筛选DRAM中的读倾向性强的页面进行迁移,来确保被迁移到PCM的页面在未来一段时间内呈现明显的读访问趋势。实施例中,在对页面进行读请求次数统计的过程中,一旦该页响应了写请求,就需要将读次数置0,并重新开始计数,严格控制写倾向性页面存储在DRAM中。而对于DRAMStack中在一段时间内访问频率不是很高的页面(可能是residentHIR,也可能是LIR),我们通过栈剪枝的方式将这些页面淘汰出去。通过栈剪枝,一方面避免这些页面长时间保存在堆栈中造成缓存污染,并且在特殊情况下容易被误判为访问热度高的页面;另一方面我们需要保证DRAMStack中的都是在近期被访问过或者被访问较为频繁的页面,有助于页面读写倾向性的预测。
如算法1所示,在DRAMStack中,访问LIR页面时,我们不改变其状态标记,在页面读写次数达到阈值时触发迁移操作,否则仅对堆栈进行排序更新;访问residentHIR时,在更新堆栈的同时需要将该页标记升级为LIR;而对于nonresidentHIR页面,被访问后将重新被压入堆栈,被置于栈顶,不引起页面排序的变化,同时改变状态为residentHIR。其中,更新堆栈包括两种方式,一种是栈剪枝,另一种是新的entry进入堆栈并置于栈顶,或者是访问了LIR页面并置于栈顶。
PCM读取数据的性能接近于DRAM,并且读功耗以及静态功耗都低于DRAM,因此,PCM更加适合存储更新不频繁的静态数据。如算法2所示,PCMStack中对被访问的不同类型的页面的处理过程和DRAMStack类似,但是针对堆栈中修改频繁的数据(即被频繁访问的数据)进行迁移操作。不同于DRAM中过于严苛的读操作倾向性定义,PCM结合读写两方面的信息作为触发迁移操作的判断。前文已提到了实施例中针对DRAM读写次数进行管理的策略,而实施例中对PCM读写次数累加方式进行管理的策略是:当读次数累加到一定的数值,需要对写次数进行减1,当页面的写次数累加超过阈值,才会被保存到DRAM当中。通过这种权衡的方式可以避免大量读写趋势不明确的页面被执行迁移操作,同时又可以保证不是读频繁的页面被迁移到DRAM,这部分页面往往要响应更多的写请求。
在DualStack算法中,所有的页都管理各自的页面信息(即读次数、写次数以及状态标记等),每次访问页面都要对页面信息进行更新。堆栈DRAMStack和PCMStack分别记录DRAM和PCM中页面的状态标记以及页号,状态标记只能反映页面最近一段时间的访热度,不涉及读写分类。页号是根据虚拟地址编码得到的页面唯一标识,通过虚拟地址能够区分是否在DRAM还是PCM,故从页号中就可以知道页面处于DRAM还是PCM。而堆栈中的排序以recency作为度量,即一个页面从最近一次访问到当前访问之间其它非重复页面的个数。每次访问主存中的页面就将该页面置于堆栈的顶端,之后需要进行“栈剪枝”来动态更新堆栈中页面的排序及数量。
对符合触发迁移条件的页面,在进行页面替换时,DualStack算法在不同介质的主存中按一定规律找到一个替换页作为“交换对象”或“替换对象”。例如:在DRAM中存在一个页面满足读频繁的迁移条件,那么就在PCM抽取一个冷页面进行页替换,在选择抽取待替换的冷页面(即交换对象)时,可以按每间隔n个页面顺序抽取的规则进行。当选定待迁移页面,必须确保准备接收待迁移页面的“目的地”不能是堆栈中的页面,这样可以防止当前访问频繁的页面被错误地替换出堆栈,造成命中率的下降。替换页的选择遵循两个条件:首先要是冷页面;其次是在一定的条件下顺序选择,这样可以保证替换页的选择更加均匀,以免造成同一个页面被多次重复作为替换对象,特别是在PCM中还能起到磨损均衡的效果。
进一步的,对于满足迁移条件的页面,需要检查它是否被迁移过,如果在本次操作之前该页面已经发生了迁移,那么将原有的迁移映射关系删除,将页面回迁到原始存储介质的最初存放位置,不再需要寻找新的替换页进行替换。因为,如果再选择另一个地址进行迁移的话,需要再加一层映射关系,更加复杂。
如图2所示的是对PCM中页面的迁移流程的实施例。首先操作***对PCM中且存在PCMStack中的页面5响应写请求(step1);其次,对页面5的写次数和在堆栈中的位置进行更新(step2),当页面5被标记为LIR且写次数超过设定的阈值,将会触发迁移操作,即页面5将被替换出PCM;随后,从DRAM中找到不在DRAMStack的冷页面8作为替换对象(step3);然后,把页面5上的数据迁移到DRAM中页面8所在的位置(step4),并且同样将页面8中的数据保存在PCMStack中页面5所在的位置(step5)。从而完成一次响应请求且符合迁移条件时的页面的迁移全过程。
“栈剪枝”操作是对堆栈进行动态更新的重要一环,其目的是确保栈底的页面永远处于LIR状态。具体可见剪枝算法①,即,对栈底的entry进行删除,直到其状态为LIR,使得被访问命中的HIR或者LIR页面的新IRR一定小于栈底LIR页面的recency。
下面结合图3对“栈剪枝”的几种具体操作方法进行说明。
若访问的是存在于堆栈中的页面,就需要对堆栈进行更新,执行剪枝操作。栈里面的页面状态包括LIR和residentHIR两种,对应的剪枝操作也分为以下两种情况:
1)如果访问的是堆栈中的LIR页且该页面位于栈底,需要将该页面置于栈顶,保持原有的LIR状态,并对栈底执行剪枝操作直到被访问的LIR页面的下一个LIR页面(从栈底向上算)之后的所有residentHIR页被淘汰出堆栈。具体可见剪枝算法②,即,命中LIR页,如果这个entry就位于栈顶,不采取任何操作;否则,将这个entry移到栈顶,并执行剪枝操作。对被访问命中且位于栈底的LIR页,在访问命中之后要移至栈顶,并需要删除原先的倒数第二个LIR页(从栈底向上算)之后的所有residentHIR页,以保证栈底始终是LIR页。
2)如果访问的是堆栈中的residentHIR页,那么将该页面置于栈顶并且更新状态为LIR,然后将栈底页面的状态更改为residentHIR,并执行栈剪枝操作。具体可见剪枝算法③,即,命中residentHIR页,如果在栈顶,只是更改状态为LIR,不执行剪枝;否则,将residentHIR页置于栈顶,并将从栈底向上算的第一个LIR页面的entry状态标记为residentHIR后开始剪枝操作,此处剪枝操作需要删除原先的倒数第一个LIR页(从栈底向上算))之后的所有residentHIR页,以要保证栈底始终是LIR页。
若访问的是被替换出堆栈的nonresidentHIR页,需要对页面的信息进行更新,将页面装入堆栈并置于栈顶,同时更名为residentHIR,但不执行剪枝操作。
可见,通过“栈剪枝”操作可以将一段时间内不再频繁访问的页面替换出堆栈,把最近连续访问的页面放入堆栈,确保堆栈中的页面在最近一段时间内都被访问至少一次。
如图4所示,页面3是被标记为residentHIR的页面,当对其进行读写访问时,需要将其状态改变为LIR并且压入栈顶。与此同时,被访问命中的residentHIR页的新IRR一定小于栈底LIR页面的recency,因此需要对堆栈进行栈剪枝操作,淘汰最近一段时间访问频率不会超过页面3的页面,从栈底开始删除直到出现LIR页面为止。
尽管以上结合附图对本发明的实施方案进行了描述,但本发明并不局限于上述的具体实施方案和应用领域,上述的具体实施方案仅仅是示意性的、指导性的,而不是限制性的。本领域的普通技术人员在本说明书的启示下,在不脱离本发明权利要求所保护的范围的情况下,还可以做出很多种的形式,这些均属于本发明保护之列。
Claims (5)
1.一种基于混合主存架构的高效动态页面调度方法,应用于采用水平存储架构的内存控制器,其中的存储介质包括第一存储介质和第二存储介质,其特征在于,
在第一存储介质和第二存储介质中分别配置一张用于记录每个页面的访问信息的访问表,访问信息包含每个页面唯一标识的页号、读访问次数以及写访问次数,操作***在响应页面的访问请求时会根据请求类型对该页面的访问表中读或写的访问次数进行更新,其中,所述页号能用于识别页面所位于的存储介质;
在内存控制器中为第一存储介质和第二存储介质各配置一个堆栈,即第一堆栈和第二堆栈,用于记录其所对应的存储介质中近期被访问的页面的状态信息,所述状态信息包含页号及状态标记,其中,状态标记用于反映页面在近期被访问的频率;
根据页面的状态标记及在访问表中记录的读写访问次数对存储介质中近期被访问的页面实行动态管理,以将写热度高的页面保存在第一存储介质,读频繁的页面保存在到第二存储介质;
其中,第一存储介质是DRAM,第二存储介质是NVM;
所述页面的状态标记包括LIR和HIR,其中,LIR表示近期被频繁访问且状态信息保存在堆栈中的页面,HIR又分为residentHIR和nonresidentHIR,residentHIR表示近期被访问次数较少但状态信息仍然保存在堆栈中的页面,nonresidentHIR表示状态信息被淘汰出堆栈的页面;刚进入堆栈的页面,都被标记为residentHIR,如果再次被访问就被标记为LIR;
所述对存储介质中近期被访问的页面实行的动态管理包括:
若访问的是LIR页面,不改变其状态标记,若所述LIR页面位于栈顶,保持原有状态,若所述LIR页面位于栈底,需将该页面的状态信息置于栈顶,并对栈底执行剪枝操作;若所述LIR页面满足触发迁移条件,对其进行迁移操作;
若访问的是residentHIR页面,将该页面的状态标记升级为LIR,若被访问的residentHIR页面的状态信息位于栈顶,保持原有状态,若被访问的residentHIR页面位于栈底,需将该页面的状态信息置于栈顶,并对栈底执行剪枝操作;若访问的是nonresidentHIR页面,将该页面的状态信息压入堆栈并置于栈顶,同时将该页面的状态标记升级为residentHIR,不执行剪枝操作;
在对被访问且不位于栈顶的LIR页面和residentHIR页面进行动态管理的同时,还需要对堆栈执行剪枝操作,将堆栈中一段时间内访问频率不高的页面淘汰出栈,以保证栈底始终是LIR页面;
所述剪枝操作是指,从栈底开始删除页面信息,直到出现LIR页面为止,然后将该LIR页的标记修改为residentHIR;
所述迁移操作是指,将所述LIR页与从另一存储介质中抽取的替换页进行位置交换,所述替换页为冷页面。
2.如权利要求1所述的高效动态页面调度方法,其特征在于,触发页面迁移的迁移条件是指该页面在堆栈中记录的状态标记是LIR且所对应的访问表中记录的读访问次数或写访问次数达到阈值。
3.如权利要求1所述的高效动态页面调度方法,其特征在于,对页面的读访问次数和写访问次数的统计并不是相互独立的,在第一存储介质中响应写访问将限制读访问次数的累加,在第二存储介质中响应读访问将限制写访问次数的统计。
4.如权利要求3所述的高效动态页面调度方法,其特征在于,对第一存储介质只关注页面的读访问频率,对第一存储介质中页面进行读访问次数的计数方法及触发迁移操作的条件是:一旦页面响应了写请求,就需要将该页面对应的读次数置0并重新开始计数,当页面的读次数累加超过阈值,该页面将会被迁移至第二存储介质中。
5.如权利要求3所述的高效动态页面调度方法,其特征在于,对第二存储介质结合读写两方面的信息作为触发页面迁移操作的判断,对第二存储介质中页面读写访问次数的计数方法及触发迁移操作的条件是:当页面的读次数累加到一定数值时,需要对写次数进行减1,当页面的写次数累加超过阈值,该页面将会被迁移至第一存储介质中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710371726.XA CN107193646B (zh) | 2017-05-24 | 2017-05-24 | 一种基于混合主存架构的高效动态页面调度方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710371726.XA CN107193646B (zh) | 2017-05-24 | 2017-05-24 | 一种基于混合主存架构的高效动态页面调度方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107193646A CN107193646A (zh) | 2017-09-22 |
CN107193646B true CN107193646B (zh) | 2020-10-09 |
Family
ID=59875780
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710371726.XA Active CN107193646B (zh) | 2017-05-24 | 2017-05-24 | 一种基于混合主存架构的高效动态页面调度方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107193646B (zh) |
Families Citing this family (27)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108572799B (zh) * | 2018-04-12 | 2021-05-04 | 上海理工大学 | 一种双向哈希链表的异构内存***数据页迁移方法 |
CN110413215B (zh) * | 2018-04-28 | 2023-11-07 | 伊姆西Ip控股有限责任公司 | 用于获取访问权限的方法、设备和计算机程序产品 |
CN108897490A (zh) * | 2018-05-14 | 2018-11-27 | 浙江工商大学 | 一种dram/pram异质混合内存***的数据管理方法 |
CN108920386B (zh) * | 2018-07-20 | 2020-06-26 | 中兴通讯股份有限公司 | 面向非易失性内存的磨损均衡及访问方法、设备和存储介质 |
CN109558093B (zh) * | 2018-12-19 | 2022-04-15 | 哈尔滨工业大学 | 一种针对图像处理型负载的混合内存页面迁移方法 |
CN109656482B (zh) * | 2018-12-19 | 2022-03-25 | 哈尔滨工业大学 | 一种基于存储器访问的写热页面预测方法 |
CN109753246B (zh) * | 2019-01-14 | 2021-08-27 | 南京航空航天大学 | 面向混合异构内存的标签化数据与作业调度方法及*** |
CN109901800B (zh) * | 2019-03-14 | 2020-05-19 | 重庆大学 | 一种混合内存***及其操作方法 |
CN109992451A (zh) * | 2019-03-28 | 2019-07-09 | 联想(北京)有限公司 | 非易失性内存和易失性内存混合管理方法及其*** |
CN110221984A (zh) * | 2019-05-07 | 2019-09-10 | 中国科学院微电子研究所 | 存储***的建立方法、装置、存储***和访问方法 |
CN110347338B (zh) * | 2019-06-18 | 2021-04-02 | 重庆大学 | 混合内存数据交换处理方法、***及可读存储介质 |
CN110532200B (zh) * | 2019-08-26 | 2023-08-01 | 北京大学深圳研究生院 | 一种基于混合内存架构的内存*** |
CN110795363B (zh) * | 2019-08-26 | 2023-05-23 | 北京大学深圳研究生院 | 一种存储介质的热页预测方法和页面调度方法 |
CN110727405A (zh) * | 2019-10-10 | 2020-01-24 | 广州华多网络科技有限公司 | 数据处理方法、装置、电子设备及计算机可读介质 |
CN110851273B (zh) * | 2019-10-31 | 2022-07-15 | 山东省计算中心(国家超级计算济南中心) | 一种基于混合内存的程序处理方法和基于混合内存的设备 |
CN111258923B (zh) * | 2020-01-16 | 2023-03-14 | 重庆邮电大学 | 一种基于异构混合内存***的页面分配方法 |
CN111984188B (zh) * | 2020-06-30 | 2021-09-17 | 重庆大学 | 混合内存数据的管理方法、装置及存储介质 |
CN112181870B (zh) * | 2020-09-17 | 2022-10-28 | 重庆大学 | 内存页面管理方法、装置、设备及可读存储介质 |
CN112148486B (zh) * | 2020-09-17 | 2024-07-02 | 重庆大学 | 内存页面管理方法、装置、设备及可读存储介质 |
CN112527695B (zh) * | 2020-12-17 | 2022-10-11 | 重庆邮电大学 | 一种基于效益感知的slc/mlc混合内存的页面转换方法 |
CN113590045B (zh) * | 2021-08-03 | 2023-05-16 | 中国联合网络通信集团有限公司 | 数据分层式存储方法、装置及存储介质 |
CN115904212A (zh) * | 2021-09-30 | 2023-04-04 | 华为技术有限公司 | 数据处理的方法、装置、处理器和混合内存*** |
CN115904689A (zh) * | 2021-09-30 | 2023-04-04 | 华为技术有限公司 | 控制内存带宽的方法、装置、处理器及计算设备 |
CN114153545A (zh) * | 2021-12-09 | 2022-03-08 | 深圳市华锴信息技术有限公司 | 一种基于多页面的管理***和方法 |
CN117666936A (zh) * | 2022-08-31 | 2024-03-08 | 华为技术有限公司 | 存储介质的迁移带宽调整方法、装置、***以及芯片 |
CN117917649A (zh) * | 2022-10-20 | 2024-04-23 | 华为技术有限公司 | 数据处理方法、装置、芯片以及计算机可读存储介质 |
CN117234432B (zh) * | 2023-11-14 | 2024-02-23 | 苏州元脑智能科技有限公司 | 一种混合内存***的管理方法、管理装置、设备及介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104317739A (zh) * | 2014-10-28 | 2015-01-28 | 清华大学 | 一种混合内存页面调度方法及装置 |
CN104899154A (zh) * | 2015-06-10 | 2015-09-09 | 山东大学 | 基于嵌入式***混合主存的页面管理方法 |
-
2017
- 2017-05-24 CN CN201710371726.XA patent/CN107193646B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104317739A (zh) * | 2014-10-28 | 2015-01-28 | 清华大学 | 一种混合内存页面调度方法及装置 |
CN104899154A (zh) * | 2015-06-10 | 2015-09-09 | 山东大学 | 基于嵌入式***混合主存的页面管理方法 |
Non-Patent Citations (1)
Title |
---|
基于相变存储器的混合存储***关键技术研究;吴章玲;《中国优秀硕士学位论文全文数据库工程科技辑》;第I137-3页;20160915(第9期);第I137-3页 * |
Also Published As
Publication number | Publication date |
---|---|
CN107193646A (zh) | 2017-09-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107193646B (zh) | 一种基于混合主存架构的高效动态页面调度方法 | |
CN103885728B (zh) | 一种基于固态盘的磁盘缓存*** | |
CN103777905B (zh) | 一种软件定义的固态盘融合存储方法 | |
US11188262B2 (en) | Memory system including a nonvolatile memory and a volatile memory, and processing method using the memory system | |
CN110888600B (zh) | 一种面向nand闪存的缓冲区管理方法 | |
US11861204B2 (en) | Storage system, memory management method, and management node | |
CN109344092A (zh) | 一种提高冷存储数据读取速度的方法和*** | |
CN107423229B (zh) | 一种面向页级ftl的缓冲区改进方法 | |
CN110795363B (zh) | 一种存储介质的热页预测方法和页面调度方法 | |
CN110532200B (zh) | 一种基于混合内存架构的内存*** | |
CN108845957B (zh) | 一种置换和回写自适应的缓冲区管理方法 | |
CN110347338B (zh) | 混合内存数据交换处理方法、***及可读存储介质 | |
CN111580754B (zh) | 一种写友好的闪存固态盘缓存管理方法 | |
US20180113815A1 (en) | Cache entry replacement based on penalty of memory access | |
CN113590045B (zh) | 数据分层式存储方法、装置及存储介质 | |
CN110297787A (zh) | I/o设备访问内存的方法、装置及设备 | |
CN108572799B (zh) | 一种双向哈希链表的异构内存***数据页迁移方法 | |
CN111078143B (zh) | 基于段映射进行数据布局和调度的混合存储方法及*** | |
CN106909323B (zh) | 适用于dram/pram混合主存架构的页缓存方法及混合主存架构*** | |
CN109478164A (zh) | 用于存储用于高速缓存条目传输的高速缓存位置信息的***和方法 | |
CN112685337B (zh) | 一种存储集群中分级缓存读写数据的方法 | |
CN111258923A (zh) | 一种基于异构混合内存***的页面分配方法 | |
CN112559384B (zh) | 一种基于非易失存储器的混合固态盘动态分区方法 | |
KR101373613B1 (ko) | 환형 구조의 비휘발성 메모리 캐쉬를 포함하는 하이브리드 스토리지 장치 | |
CN115048056B (zh) | 基于页面替换代价的固态硬盘缓冲区管理方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |