CN100383763C - 基于操作系统反向页表的页迁移和复制方法 - Google Patents
基于操作系统反向页表的页迁移和复制方法 Download PDFInfo
- Publication number
- CN100383763C CN100383763C CNB2004100229337A CN200410022933A CN100383763C CN 100383763 C CN100383763 C CN 100383763C CN B2004100229337 A CNB2004100229337 A CN B2004100229337A CN 200410022933 A CN200410022933 A CN 200410022933A CN 100383763 C CN100383763 C CN 100383763C
- Authority
- CN
- China
- Prior art keywords
- page
- leaf
- page table
- reverse
- physical
- 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.)
- Expired - Fee Related
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于操作系统反向页表的页迁移和复制方法,将操作系统内核反向页表数据结构应用于页迁移和页复制算法中,快速实现物理地址到虚拟地址的转换,迅速准确地定位页迁移和复制算法中需要更新的进程页表项,支持对这些页表项的灵活操作,从而解决了多个进程共享迁移页时必须遍历整个进程地址空间的问题,提高了页迁移和复制算法的效率,降低了算法引起的数据一致性维护开销。同时,建立新的物理地址到虚拟地址的映射关系只需要简单修改所有映射到源物理页的页表项即可,简化了算法的实现。
Description
技术领域
本发明涉及计算机领域中并行计算机操作系统的内存管理技术,具体地说,涉及面向ccNUMA体系结构的操作系统中的分布共享存储管理和优化技术,特指一种基于操作系统反向页表的页迁移算法。
背景技术
由于ccNUMA(Cache Coherent Non-Uniform Memory Access)体系结构结合了SMP系统的易编程性和分布式存储系统的易扩展性等优点,目前它已成为下一代并行计算机的主流体系结构之一。然而,在ccNUMA系统中,远程访存延迟通常远高于本地访存延迟,因此访存局部性的优劣严重影响了系统的整体性能。
当前的ccNUMA系统大多使用了remote cache来缓存远程数据,在一定程度上开发了数据的时间局部性,但由于cache容量和结构的限制,cache容量和冲突失效使得数据的时间局部性开发受限。另外,数据的空间局部性使用remote cache并不能很好地解决,因此单纯依赖ccNUMA系统本身硬件cache并不能妥善解决远程和本地访问延迟不一致的问题。
作为一种动态改善数据局部性的策略,操作系统级的页迁移机制能够通过将远程页面迁移或复制到本地的方法把远程访问变为本地访问,从而达到减少远程访问次数、提高访存性能的目的。在操作系统中可以结合页迁移机制和内存管理策略,尽量平衡远程和本地访问延迟的不一致,最大程度地发挥系统的性能,实现动态访存优化。
尽管页迁移机制从理论上能够优化系统性能,但是现有的页迁移算法并不适用于自行设计和实现基于不同微处理器平台的ccNUMA系统,其主要原因有三:
1)算法的实现同硬件平台密切相关
现有的面向ccNUMA系统的页迁移算法大多数都依赖于特殊的硬件支持,其实现策略与硬件平台的支持密不可分,因此缺乏足够的通用性。如SGI的Origin系统中专门实现了支持页迁移的同步总线错误处理机制和全局TLB刷新指令等,这些支持在其它系统中是没有的。
2)算法的具体实现缺乏参考
尽管页迁移机制的原理比较简单,但是具体的实现方法却属于各系统开发商的技术机密,因此在自行开发过程中,商用ccNUMA系统所实现的页迁移机制对我们缺乏足够的参考意义。
3)算法的实现开销大
传统页迁移和复制算法本身的开销较大,抵消了算法所带来的好处,这也是现有算法缺乏高效性和实用性的根本原因。算法的开销主要体现在两个方面,一个是数据移动本身的开销,它和页面大小、移动距离以及系统的拓扑结构相关;另一个是数据一致性维护的开销,迁移一个页后,由于源物理地址的数据是无效的,各进程的页表和各结点的TLB表中已有的这个物理页的表项都是无效的,必须进行额外的刷新工作。
发明内容
本发明所要解决的技术问题是:针对现有技术的弊端,提出一种高效的基于操作系统反向页表的页迁移和复制方法,从而达到效率高、开销小且通用性好的效果。
本发明提出的技术方案是:一种基于操作系统反向页表的页迁移和复制方法,其特征在于当页迁移机制得到决策结果后,该算法的具体步骤为:
①建立相应的反向页表数据结构,将共享同一物理页的页表项组织成一个反向页表项数组,并将反向页表数据结构加入描述物理页的数据结构中;
②决策结果是既不进行迁移也不进行复制时,算法直接退出;
③当决策结果为将页面迁移时,按页迁移算法分支处理;
④当决策结果为将页面复制时,按页复制算法分支处理;
⑤两种分支处理完毕后,均对新的反向页表进行维护,包括为迁移或复制后的新页建立反向页表数据结构,用新页的物理地址更新反向页表数据结构中的页表项内容,在迁移时还要删除旧的反向页表数据结构;
⑥方法结束,退出。
所述页迁移,即步骤③的具体步骤包括:
第一步:根据页的物理地址首先判断页是否为有效的物理页,再判断是否为一个脏页:如果页无效,则方法退出,否则继续执行下述第二步:如果页为脏页,将该页写回磁盘,继续执行下述第二步,否则方法退出;
第二步:在远程结点分配一个空闲页面,如果分配成功,则继续执行,否则报告错误信息,方法退出;
第三步:为源物理页设置迁移标志;
第四步:迁移页所在的宿主结点向系统中其它结点发送处理器间中断,该中断向各个处理器通知其TLB中可能存在无效项,因此必须同时进行刷新;
第五步:采用块传输机制将源物理页的内容拷贝到远程结点上分配的新页面;
第六步:利用反向页表更新所有映射到源物理页的页表项;
第七步:调用操作系统的页面释放函数释放源物理页,同时删除页的反向页表。
所述的页复制,即步骤④的具体步骤包括:
第一步:根据页的物理地址首先判断页是否为有效的物理页,再判断是否为一个脏页:如果页无效,则方法退出,否则继续执行下述第二步;如果页为脏页,将该页写回磁盘,继续执行下述第二步,否则方法退出;
第二步:在远程结点分配一个空闲页面,如果分配成功,则继续执行,否则报告错误信息,方法退出;
第三步:查找源物理页的反向页表,定位需要修改的页表项;
第四步:用新页面的物理地址来更新上一步中定位的页表项;
第五步:页的宿主结点向系统中其它各个结点发送处理器间中断,该中断各个处理器通知其TLB中可能存在无效项,因此必须同时进行刷新;
第六步:采用块传输机制将源物理页的内容拷贝到远程结点上分配的新页面;
第七步:建立或维护页的复制副本数据结构。
所述页迁移的第三步具体包括3个内容:首先,必须为源物理页加锁以防止迁移过程中其它进程对该物理页进行操作;其次,将源物理页置为中毒状态;最后,通过查找页的反向页表,找到所有映射到页的页表项,为每个页表项设置特殊标志位,以标志该项对应的页是一个迁移页面。
所述页迁移的第三步中,还将页表项的存在位清零,使进程访问源物理页时会产生页故障,另增加一类新的针对页迁移情况的页故障处理函数;页故障处理函数检查故障页的页表项中的迁移标志位,如果发现该位被置位,则表明进程访问的是一个正在迁移的页,进程睡眠等待,直到发现页表项中的迁移标志位重新被置1后才被唤醒,这时页表项中已经保存页面迁移后的新的映射关系,进程将重新进入调度队列并正确执行。
所述页迁移的第六步中,具体内容为:通过查找源物理页的反向页表数据结构,找到所有映射到该物理页的页表项,修改这些页表项的内容,将新分配页的物理地址填写到新的页表项中。为了能够正确从页故障处理过程中返回,还要将所有页表项的存在位重新置1。
所述页复制第七步的具体过程为:从描述源物理页的数据结构中引出一个复制副本数组,该数组中的每一项指向源物理页经页复制后产生的一个副本,方法为每个副本页置上一个特殊的复制副本标志;若一个物理页在系统中仅有一个副本,则该复制副本数组在页初始化时置为空;对于被复制的页,复制副本数组记录所有副本,记录内容包括副本的物理页帧号以及链接各副本的指针;对于复制的页,复制副本数组则仅记录原始副本;方法在操作系统的存储访问保护检测过程中进行副本一致性维护;当发现一个被访问的物理页是页复制产生的副本,即该页被设置为复制副本标志后,如果该访问操作是一个写请求,则按照写只读页的方式进入页故障中断处理过程;在页故障处理过程中,并不是象传统的对只读页进行写操作一样判定该访问为非法访问,而是调用一个副本撤销函数来释放复制页的复制副本数组,以保证进程运行的正确性和页数据的一致性。
所述步骤①的具体步骤是在描述物理页帧的数据结构中增加一个记录结构,描述该物理页帧的所有实虚映射,然后根据物理页帧被进程引用情况:独占和共享,记录结构可分为直接和链表两类;对仅有一个进程引用的物理页帧,表述进程引用该物理页帧的页表项的虚地址直接放在一个直接变量中;对于进程共享的物理页帧,存在多个页表项,这些页表项组织成一个数组链表。
所述步骤⑤中,在页迁移的情况下,需要释放源物理页,删除其反向页表,并为迁移后的新页分配反向页表,且把所有映射到该物理页的物理地址写入反向页表数据结构中的页表项中;在页复制的情况下,除了为新页分配反向页表数据结构外,还应将源物理页的反向页表中不必要的页表项删除,并将这些被删除的页表项增加到新页的反向页表中,从而使得每个物理页的反向页表都仅包含实际映射到该物理页的页表项。
传统的页迁移机制的原理是,在ccNUMA硬件系统提供的访问计数器支持下,记录页面的cache失效信息,即各个结点对每个页面访问的cache失效次数。由操作系统指定策略相关的一些参数,通过将收集到的信息与这些参数进行比较,决定是否进行页迁移或复制。
本发明基于传统页迁移机制的原理,在操作系统级设计了一种高效的实现算法。其主要思想是,当一个页p的远程cache失效次数达到系统指定的阈值时,引起CPU中断,相应的中断处理程序根据页p的物理地址,查找操作系统中描述页p的数据结构,通过对数据结构进行操作,为页p设置迁移或复制标志。在决策为迁移的情况下,还要为页p加锁以防止写操作。
令页p的HOME结点为A,令导致页p失效次数达到指定阈值的远程结点为B。接下来,中断处理程序调用操作系统的页分配函数在结点B分配一个空闲页面q,以便将页p的内容拷贝到远程结点B。
分配新页面后,由于ccNUMA系统中各个处理器可能存在旧的TLB表项,共享页p的各个进程中存在旧的页表项,它们都指向页p的源物理地址,而在页p迁移或复制到结点B后,这些表项中的内容可能部分或全部失效,因此在数据的真正拷贝之前,必须更新这些表项,通过建立新的映射关系来保证数据的一致性。为了实现表项的更新,操作系统必须首先正确定位所有映射到页p的页表项。在传统的存储管理机制中,这一过程包括遍历每个进程的页表,匹配对应的表项,是非常耗时的,特别是在多个作业同时运行的情况下。为此,本发明提出的页迁移/复制算法设计和实现了反向页表结构来加速页表项的定位过程,高效实现物理地址到虚地址的转换,从而减少了数据一致性维护的开销。
针对页迁移和复制算法中的数据移动开销,本发明采用块传输机制BTE(Block Transfer Engine)来进行页面的拷贝,针对页粒度的BTE通信,采用预留存储空间、连续发送和接收,减少中断开销,提高通信带宽。
在页p从结点A迁移到结点B的过程中,为了保证访存操作的正确性,任何进程对页p的访问都将被挂起,直到迁移结束。为了与现有的操作系统内存管理模块无缝集成,本发明将这类被挂起的访问按照页故障的方式进行处理,即,将由页迁移引起的访问失效定义为一种新的页故障类型,在操作系统的页故障处理过程中进行相应的处理,其好处是自然直观,容易集成到操作系统中,且不会同操作系统本身的存储管理机制冲突。
同现有的其它算法相比,本发明所述的页迁移实现算法采用了反向页表数据结构和高效BTE块传输机制的支持,解决了现有策略普遍存在的算法效率低、算法引起的额外开销大的缺点。此外,本算法在设计和实现时,尽量考虑到通用性和硬件平台无关性,解决了现有算法过分依赖特殊硬件和移植性差的问题,具有简洁高效、适用范围广的特点。本算法不仅适用于各种不同的ccNUMA硬件平台,也能方便地集成到我们自主研制的国产服务器操作系统和Linux、FreeBSD等开发源码操作系统中。
附图说明
图1是页迁移机制的原理示意图;
图2是本发明提出的页迁移和页复制算法流程示意图;
图3是页迁移具体的流程示意图;
图4是页复制具体的流程示意图;
图5是ia64微处理器中当页在内存时的页表项pte格式示意图;
图6是页复制过程中的副本维护示意图;
图7是反向页表数据结构组成示意图;
图8是反向页表及其映射关系示意图;
图9是反向页表数据结构在本发明提出的页迁移/复制算法中的应用示意图;
图10是删除反向页表表项的示例示意图。
具体实施方式
本发明所描述的算法目前已实现于自行研制的基于Intelia64平台的ccNUMA系统中,因此,在介绍发明的具体实施方式时,我们将结合该系统进行详细阐述。需要指出的是,本发明并不局限于任何具体的硬件平台和操作系统,算法可以方便地移植到其它环境中,具有较广泛的通用性。
下面结合附图,对本发明的具体实施做进一步的详细描述。
图1为页迁移机制的原理示意图,也是本发明的理论基础。页迁移/复制策略既可以由硬件计数器触发,也可以通过编译指导的方式来触发。在硬件访问计数器支持下,记录页面的cache失效信息,即各个结点对某个页面访问的cache失效次数。操作系统指定策略相关的一些参数,包括页面的失效次数阈值、共享率阈值、写频率阈值以及迁移率阈值等。通过将收集到的页面cache失效信息与这些阈值进行比较,决定是否进行页迁移或复制。当一个页的远程cache失效次数达到系统指定的阈值时,将引起CPU中断,中断处理程序调用页迁移/复制进程,该进程根据迁移/复制决策算法进行相应处理。如果某个页的cache失效率高,判断这个页的共享率情况,如果共享率低,迁移率(迁移的频率)低,则迁移这个页;如果共享率高,对这个页的写频率低且存储空间许可,则复制这个页。基于编译指导的方式则需要编译器根据应用程序的具体访存特征,作出相对比较准确的迁移或复制决策。
如图2、图3和图4所示的页迁移和复制方法流程示意图可知本算法的具体步骤为:
①在得到决策结果后,建立相应的反向页表数据结构,将共享同一物理页的页表项组织成一个反向页表项数组,并将反向页表数据结构加入描述物理页的数据结构中;
②当决策结果是既不进行迁移也不进行复制时,算法直接退出。
③当决策结果为将某一物理页面(用p来表示该页)从其HOME结点A迁移到远程结点B时,则按照页迁移算法分支进行处理,具体包括:
第一步:根据页p的物理地址判断页p是否为有效的物理页,在ia64微处理器中,这一步骤是通过检测该页是否位于系统中有效的内存区域来判定的。如果页p无效,算法退出,否则继续执行。判断页p是否是一个dirty页,在ia64微处理器中,一个页的64位长的页表项中有一位专门用于标记该页是否为dirty页,如图3所示,由PTE.d标识。如果是,则将该页写回磁盘,继续执行。
第二步:在远程结点B分配一个空闲页面q。在支持ccNUMA体系结构的操作系统中,通常存在这种在指定结点分配页面的函数,如在支持ccNUMA的Linux 2.6内核版本中,该函数名为alloc_pages_node()。如果分配成功,则继续执行,否则报告错误信息,算法退出。
第三步:为源物理页p设置迁移标志。这一步骤包括三个内容:首先,必须为源物理页p加锁以防止迁移过程中其它进程对该物理页进行操作;其次,将源物理页置为poison状态,在UNIX类操作系统中都存在描述每个物理页的数据结构,如在Linux中是struct page,在Free BSD中则是struct vm_page,通过扩充该数据结构中的flags域即可实现此功能。最后,通过查找页p的反向页表(有关反向页表的内容在下文中详细描述),找到所有映射到页p的页表项pte(page table entry),为每一项pte设置特殊标志位,标志该pte对应的页是一个迁移页面。以ia64微处理器为例,从图5中可以看到,PTE{63:53}这11位是专门预留给操作系统使用的,因此,我们选择第62位(最高位在某些操作系统中已经使用)来作为迁移标志位,将其置1。另外,在修改pte时还应将pte的present位清0,以保证迁移过程中任何进程访问该页都会引起页故障的发生,从而进入本算法扩充的页故障处理程序。
第四步:p所在的HOME结点A向系统中其它各个结点发送处理器间中断(Inter-Processor Interrupt,简称IPI),该中断向各个处理器通知其TLB中可能存在无效项,因此必须进行刷新。本步骤中,不同的硬件平台可以采用不同的优化实现方式,如SGI的Origin系统中就支持全局TLB flush指令来提高效率。而在没有特殊支持的系统中,则由各个处理器自行进行TLB的刷新工作。
第五步:将源物理页p的内容拷贝到结点B分配的新页q。为了提高页面拷贝的效率,本发明采用了块传输机制来进行快速的数据传输,从而减少了中断开销,提高了通信带宽和算法的效率。
第六步:更新所有映射到页p的pte。通过反向页表数据结构,修改所有相关的pte,将页q的物理地址填写到新的pte中,为正确从页故障处理过程中返回,还要将所有pte的present位重新置1。另外,在本步骤中还要同时建立和维护页q的反向页表。
第七步:调用操作系统的页面释放函数清除源物理页p,同时删除页p的反向页表。
由于第三步中pte的present位被清0,进程访问源物理页p时会产生页故障,本发明提出的算法针对操作系统中的页故障处理程序进行了扩充,在原有的几种页故障处理类型的基础上,增加一类新的针对页迁移情况的故障处理函数。页故障处理程序检查故障页的pte的迁移标志位,如果发现该位被置位,则表明进程访问的是一个正在迁移的页,进程睡眠等待,直到发现pte的present位重新被置为1后才被唤醒,这时pte中已经是迁移后的页q的映射关系,进程重新进入调度队列并正确执行。
第四步中,各个结点收到IPI中断后,刷新各自的cache和TLB,为了保证数据的一致性,相应的IPI中断处理函数需要通过特殊指令对所有结点的刷新过程进行同步。
④决策结果为将物理页面p从其HOME结点A复制到远程结点B时,则按照页复制算法分支进行处理。页复制算法流程类似于页迁移算法,其不同之处是页复制的候选页面对象主要是多进程共享的只读页。另外,由于一个物理页有多个副本同时存在于系统中,因此算法的具体实现策略上也有所不同。
第一步和第二步,即有效页和dirty页的判断以及远程结点空闲页面的分配,都类似于页迁移算法,唯一不同的是,在页复制算法中,如果发现源物理页p已设置迁移标志,则退出算法,因为一个正在迁移的页是不适于被复制的。
第三步:查找源物理页p的反向页表,从中找到属于结点B上运行的进程的pte表项。在页复制过程中,由于页p和q是同一物理页的不同副本,因此,共享源物理页p的某些进程的页表项可能在页复制之后指向物理页q。为了保证数据访问的局部性,必须使得运行于不同结点的进程就近访问同一个页的不同副本,即距离结点A近的结点上运行的进程要尽量访问页p这个副本,而运行在距离结点B近的结点上的进程应尽量访问页q这个副本。为此,本步骤需要结合ccNUMA操作系统提供的结点间距离等拓扑信息,利用反向页表数据结构,找到所有需要更新的页表项。现有的ccNUMA系统基本都以表的形式提供系统中处理器和内存布局信息,本算法通过简单的距离参数比较,定位页p的反向页表的一个子数组,用新页q的物理地址更新这些数组中的每一个pte项。
第四步:根据系统中处理器和内存布局信息表,结合反向页表,形成系统中结点集合的一个子集,HOME结点A向该子集中的每个结点发送IPI中断,这些结点收到IPI中断后,调用相应的flush函数更新结点中处理器的cache和TLB表项。
第五步:将源物理页p的内容拷贝到结点B分配的新页q。和页迁移算法相同,本发明采用块传输机制来提高页面拷贝的效率。
第六步:利用反向页表更新所有映射到源物理页的页表项。
第七步:为副本页q建立和维护反向页表数据结构,其过程同页迁移算法。
在本发明所提出的页复制算法中,还存在复制页的多个副本维护问题。因为页复制算法的候选页一般应为只读页,当对一个副本进行写操作时,其它副本中就会存在不一致的数据,导致程序无法正确执行。本算法在操作系统的存储访问保护检测中解决该问题。当发现一个被访问的物理页p是页复制产生的副本,即p的flags被设置为PG_REPLICA标志后,如果该访问操作是一个写访问请求,则按照写只读页的方式进入页故障中断处理过程。在页故障处理过程中,并不是象传统的对只读页进行写操作一样判定该访问为非法访问,而是调用一个副本撤销函数replica_free()来释放复制页的replica数组,以保证进程运行的正确性和页数据的一致性。如图6所示,p是原来的物理页,q是p的复制页,通过replica的结构来对p、q两个物理页进行不同的操作。当对物理页p写时,由p中的replica项可变无效所有的副本;当对物理页q写时,由q中的replica项可得到物理页p的地址,通过p可变无效所有的副本。
操作系统反向页表技术是高效实现本发明提出的页迁移和复制算法的一个重要基础。传统的操作系统内核都支持页表机制,通过页表能够将虚拟地址映射到物理地址。在页迁移机制中,由于迁移或复制的页面可能为多个进程共享,这种情况下,一个物理地址对应多个虚拟地址,需要通过该物理地址查找所有映射的虚拟地址,并对相应的页表项进行修改,因此,提高算法效率的关键之一就是迅速定位虚地址。为此,本发明设计和实现了专门支持页迁移/复制算法的反向页表数据结构,其思想是,在传统页表基础上,为每个物理页增加一个数组指针,指向映射到该物理页的各个页表项,形成物理地址到虚地址的反向映射。同时,为了保证正向页表和反向页表的一致性,在存储资源的使用过程中除了建立相应的反向页表数据结构外,还实现了针对反向页表的动态维护机制,其具体实施方式如下。
反向页表数据结构的建立首先是在操作系统的物理页描述结构中增加pte域,Linux为例,其定义如下:
struct page{
......
union{
struct pte_chain *chain;
pte_addr_t direct;
}pte;
......
}
当虚地址到物理地址的映射关系是一对一时,pte为一个直接指针(direct),直接指向使用本物理地址的唯一pte;当虚地址到物理地址的映射关系是多对一时,则定义一个pte_chain结构所构成的链表来记录所有使用本物理地址的pte。pte_chain数据结构由两个数据项组成,定义如下:
struct pte_chain{
pte_addr_t next_and_idx;
pte_addr_t ptes[NRPTE];
}
其中,NRPTE为数组ptes的元素个数,由系统一级cache大小决定,next_and_idx是下一个pte_chain数组的地址X和本结构ptes数组中最高位ptes[i]的偏移Y进行或运算所得。
图7给出了反向页表的结构示意图。当共享某物理页的pte数目大于NRPTE时,使用next_and_idx指向下一个pte_chain结构,如此扩展下去。通过与cache line的边界对齐使structpte_chain数据结构可以一次加载到一个cache line中,以提高存储访问效率。为了提高空间使用的合理性,next_and_idx指针除包含下一个pte_chain结构的地址信息外,还包含本pte_chain结构中ptes数组空闲项索引信息,在分配和回收ptes数组项时,可使用空闲索引来界定空闲项和占用项,以便于快速查找。
为了与系统正向页表保持一致性,必须对反向页表进行维护,简单地说,在系统运行过程中,任何一个pte表项中的物理地址发生改变时,相应的反向页表都需要进行修改,以正确反映新的实虚映射关系。图8说明了反向页表及其映射关系。ptes[1]、ptes[j]和ptes[k]分别是指向三个不同进程的页表项的指针,这三个页表项都指向同一物理页。建立反向页表时,在该物理页结构中加入pte_chain链表结构,在pte_chain链表的表项中填入共享进程pte表项的虚拟地址,即ptes[i]、ptes[j]和ptes[k]。当需要迁移该物理页时,可以通过搜索其pte_chain结构,找到所有共享进程的pte项(包括ptes[i]、ptes[j]和ptes[k]所指向的页表项),从而为迁移后修改页表项做好准备。
反向页表的维护点,即pte的变化点主要发生在页故障中断处理、页面交换和页迁移/复制过程中。主要的维护例程包括反向页表的建立、增加和删除,图9为反向页表数据结构在本发明提出的页迁移/复制算法中的应用示意图。算法被触发后,操作系统内核在分配新页的同时分配该页的反向页表。然后根据源物理页的物理地址,查询其反向页表,找到所映射的进程pte项。该pte项将映射到迁移或复制后的新页。把该新页插入到合适的数据结构中,修改源页所映射的进程页表项,并对新页的反向页表进行维护。拷贝数据到新页后,对于页迁移策略,还要释放源页,删除其反向页表。
由于pte_chain链表仅仅允许头部项有空闲区,所以在反向页表的增加和删除时,必须保证其头部的空闲。在增加例程中,每次增加一个新的pte元素,应当在头部项的最后空闲槽中插入,如果数组已满,则链出一个新的pte数组。在删除例程中,在链表中查找删除的pte元素,将它与数组头部项对换,并随后删除头部项。如图10所示,当删除反向页表中内容为ptes[3]的表项后,需要将高位表项内容(ptes[2])填入该空表项,保证仅仅在高位有空闲区。
综上所述,相比于传统的页迁移策略,本发明具有如下的明显优势:
1)将页迁移算法中涉及到的一致性维护处理过程和操作系统的页故障处理结合起来,因为页面的迁移从实质上可以看作是一类特殊的页故障,当源页迁移到目标页后,所有对源物理页的访问都会失效,直到目标页建立且所有数据结构更新完毕,对失效页面的访问才得以继续。这一结合具有自然直观、移植性好的特点,且易于无缝集成到现有的操作系统存储管理机制中。
2)将反向页表数据结构应用于页迁移和复制算法中,能够实现快速实虚转换,迅速准确地定位需要更新的页表项,灵活地对各个表项分别操作,减少了算法引起的数据一致性维护开销,同时,建立新的虚实映射关系只需要简单修改所有映射到源物理页的页表项即可,简化了实现,解决了多个进程共享迁移页时必须遍历整个进程地址空间的问题,提高了算法的效率。
3)采用BTE机制来实现页面数据的拷贝,由于采用预留的存储空间来进行页粒度数据传输,减少了通信中断的次数,提高了通信带宽,降低了本算法中的数据移动开销。
4)在本发明提出的页复制算法中,为了更好地进行多个副本的维护,本发明采用了写操作触发replica数组无效的技术,保证了页的多个副本的一致性和程序执行的正确性。
另外,本发明提出的算法引起的额外效果是对反向页表数据结构的维护(建立、增加和删除)。这些开销相对于页迁移算法本身的开销,是可以忽略不计的。
Claims (9)
1.一种基于操作系统反向页表的页迁移和复制方法,其特征在于当页迁移机制得到决策结果后,该方法的具体步骤为:
①建立相应的反向页表数据结构,将共享同一物理页的页表项组织成一个反向页表项数组,并将反向页表数据结构加入描述物理页的数据结构中;
②决策结果是既不进行迁移也不进行复制时,方法直接退出:
③当决策结果为将页面迁移时,按页迁移算法分支处理;
④当决策结果为将页面复制时,按页复制算法分支处理;
⑤两种分支处理完毕后,均对新的反向页表进行维护,包括为迁移或复制后的新页建立反向页表数据结构,用新页的物理地址更新反向页表数据结构中的页表项内容,在迁移时还要删除旧的反向页表数据结构;
⑥方法结束,退出。
2.根据权利要求1所述的基于操作系统反向页表的页迁移和复制方法,其特征在于所述步骤③的具体步骤包括:
第一步:根据页的物理地址首先判断页是否为有效的物理页,如果页无效,则方法退出,否则继续判断是否为一个脏页;如果页为脏页,将该页写回磁盘,继续执行下述第二步,否则方法退出;
第二步:在远程结点分配一个空闲页面,如果分配成功,则继续执行,否则报告错误信息,方法退出;
第三步:为源物理页设置迁移标志;
第四步:迁移页所在的宿主结点向系统中其它结点发送处理器间中断,该中断向各个处理器通知其TLB中可能存在无效项,因此必须同时进行刷新:
第五步:采用块传输机制将源物理页的内容拷贝到远程结点上分配的新页面;
第六步:利用反向页表更新所有映射到源物理页的页表项;
第七步:调用操作系统的页面释放函数释放源物理页,同时删除页的反向页表。
3.根据权利要求1所述的基于操作系统反向页表的页迁移和复制方法,其特征在于所述的步骤④的具体步骤包括:
第一步:根据页的物理地址首先判断页是否为有效的物理页,如果页无效,则方法退出,否则继续判断是否为一个脏页;如果页为脏页,将该页写回磁盘,继续执行下述第二步,否则方法退出;
第二步:在远程结点分配一个空闲页面,如果分配成功,则继续执行,否则报告错误信息,方法退出;
第三步:查找源物理页的反向页表,定位需要修改的页表项;
第四步:用新页面的物理地址来更新上一步中定位的页表项;
第五步:页的宿主结点向系统中其它各个结点发送处理器间中断,该中断向各个处理器通知其TLB中可能存在无效项,因此必须同时进行刷新;
第六步:采用块传榆机制将源物理页的内容拷贝到远程结点上分配的新页面;
第七步:建立或维护页的复制副本数据结构。
4.根据权利要求2所述的基于操作系统反向页表的页迁移和复制方法,其特征在于所述的第三步具体包括3个内容:首先,必须为源物理页加锁以防止迁移过程中其它进程对该物理页进行操作;其次,将源物理页置为中毒状态;最后,通过查找页的反向页表,找到所有映射到页的页表项,为每个页表项设置特殊标志位,以标志该项对应的页是一个迁移页面。
5.根据权利要求2所述的基于操作系统反向页表的页迁移和复制方法,其特征在于所述的第三步中,还需将页表项的存在位清零,使进程访问源物理页时会产生页故障,另增加一类新的针对页迁移情况的页故障处理函数;页故障处理函数检查故障页的页表项中的迁移标志位,如果发现该位被置位,则表明进程访问的是一个正在迁移的页,进程睡眠等待,直到发现页表项中的迁移标志位重新被置1后才被唤醒,这时页表项中已经保存页面迁移后的新的映射关系,进程将重新进入调度队列并正确执行。
6.根据权利要求2所述的基于操作系统反向页表的页迁移和复制方法,其特征在于所述的第六步中,具体内容为:通过查找源物理页的反向页表数据结构,找到所有映射到该物理页的页表项,修改这些页表项的内容,将新分配页的物理地址填写到新的页表项中,为了能够正确从页故障处理过程中返回,还要将所有页表项的存在位重新置1。
7.根据权利要求3所述的基于操作系统反向页表的页迁移和复制方法,其特征在于所述第七步的具体过程为:从描述源物理页的数据结构中引出一个复制副本数组,该数组中的每一项指向源物理页经页复制后产生的一个副本,方法为每个副本页置上一个特殊的复制副本标志;若一个物理页在系统中仅有一个副本,则该复制副本数组在页初始化时置为空;对于被复制的页,复制副本数组记录所有副本,记录内容包括副本的物理页帧号以及链接各副本的指针;对于复制的页,复制副本数组则仅记录原始副本;方法在操作系统的存储访问保护检测过程中进行副本一致性维护;当发现一个被访问的物理页是页复制产生的副本,即该页被设置为复制副本标志后,如果该访问操作是一个写请求,则按照写只读页的方式进入页故障中断处理过程;在页故障处理过程中,并不是象传统的对只读页进行写操作一样判定该访问为非法访问,而是调用一个副本撤销函数来释放复制页的复制副本数组,以保证进程运行的正确性和页数据的一致性。
8.根据权利要求1所述的基于操作系统反向页表的页迁移和复制方法,其特征在于所述步骤①的具体步骤是在描述物理页帧的数据结构中增加一个记录结构,描述该物理页帧的所有实虚映射,然后根据物理页帧被进程引用情况:独占和共享,记录结构可分为直接和链表两类;对仅有一个进程引用的物理页帧,表述进程引用该物理页帧的页表项的虚地址直接放在一个直接变量中;对于进程共享的物理页帧,存在多个页表项,这些页表项组织成一个数组链表。
9.根据权利要求1所述的基于操作系统反向页表的页迁移和复制方法,其特征在于所述步骤⑤中,在页迁移的情况下,需要释放源物理页,删除其反向页表,并为迁移后的新页分配反向页表,且把所有映射到该物理页的物理地址写入反向页表数据结构中的页表项中;在页复制的情况下,除了为新页分配反向页表数据结构外,还应将源物理页的反向页表中不必要的页表项删除,并将这些被删除的页表项增加到新页的反向页表中,从而使得每个物理页的反向页表都仅包含实际映射到该物理页的页表项。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2004100229337A CN100383763C (zh) | 2004-02-27 | 2004-02-27 | 基于操作系统反向页表的页迁移和复制方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2004100229337A CN100383763C (zh) | 2004-02-27 | 2004-02-27 | 基于操作系统反向页表的页迁移和复制方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1560746A CN1560746A (zh) | 2005-01-05 |
CN100383763C true CN100383763C (zh) | 2008-04-23 |
Family
ID=34441021
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2004100229337A Expired - Fee Related CN100383763C (zh) | 2004-02-27 | 2004-02-27 | 基于操作系统反向页表的页迁移和复制方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100383763C (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10013205B2 (en) | 2014-09-12 | 2018-07-03 | Huawei Technologies Co., Ltd. | Memory migration method and device |
Families Citing this family (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100399298C (zh) * | 2005-10-08 | 2008-07-02 | 浙江大学 | 操作Linux内核页表加速模拟PowerPC体系结构的方法 |
JP2008077144A (ja) * | 2006-09-19 | 2008-04-03 | Ricoh Co Ltd | 仮想化システム、メモリ管理方法及び制御プログラム |
US7802050B2 (en) * | 2006-09-29 | 2010-09-21 | Intel Corporation | Monitoring a target agent execution pattern on a VT-enabled system |
CN102214119A (zh) * | 2010-04-07 | 2011-10-12 | 腾讯科技(深圳)有限公司 | 搬移软件的方法及装置 |
CN102439577B (zh) * | 2011-10-31 | 2014-01-22 | 华为技术有限公司 | 一种构建内存访问模型的方法及装置 |
CN103049396B (zh) * | 2012-12-10 | 2015-10-28 | 浪潮(北京)电子信息产业有限公司 | 数据的刷写方法及装置 |
CN104301345B (zh) * | 2013-07-17 | 2018-04-27 | 阿里巴巴集团控股有限公司 | 一种Cache集群中删除数据的方法及系统 |
CN104391753B (zh) * | 2014-12-16 | 2017-12-05 | 浪潮电子信息产业股份有限公司 | 一种服务器主板内存系统无故障运行方法 |
CN105183668B (zh) * | 2015-09-21 | 2018-05-18 | 华为技术有限公司 | 缓存刷新方法及装置 |
EP3291103B1 (en) * | 2016-09-01 | 2019-11-06 | Huawei Technologies Co., Ltd. | System and method for creating a snapshot of a subset of a database |
CN107391391B (zh) * | 2017-07-19 | 2019-05-14 | 深圳大普微电子科技有限公司 | 在固态硬盘的ftl实现数据拷贝的方法、系统及固态硬盘 |
CN108710584B (zh) * | 2018-05-22 | 2021-08-31 | 郑州云海信息技术有限公司 | 一种提高tlb刷新效率的方法 |
CN109408273A (zh) * | 2018-11-13 | 2019-03-01 | 郑州云海信息技术有限公司 | 一种消除故障内存对系统影响的方法及装置 |
CN110781099B (zh) * | 2019-09-29 | 2021-12-03 | 苏州浪潮智能科技有限公司 | 一种硬盘碎片整理方法与装置 |
CN111597124B (zh) * | 2020-04-21 | 2023-05-05 | 重庆大学 | 持久化内存文件系统数据组织方法、系统及存储介质 |
CN112486854B (zh) * | 2020-12-28 | 2022-08-23 | 潍柴动力股份有限公司 | 与非型闪存Nand Flash存储管理方法及装置 |
CN113220469B (zh) * | 2021-03-23 | 2024-04-16 | 黑芝麻智能科技(上海)有限公司 | 进程间通信方法、装置和计算机设备和计算机可读介质 |
CN113674133B (zh) * | 2021-07-27 | 2023-09-05 | 阿里巴巴新加坡控股有限公司 | Gpu集群共享显存系统、方法、装置及设备 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO1996035169A1 (en) * | 1995-05-05 | 1996-11-07 | Silicon Graphics, Inc. | Page migration in a non-uniform memory access (numa) system |
CN1149736A (zh) * | 1995-06-05 | 1997-05-14 | 北京航空航天大学 | 一种分布式存储器共享管理方法 |
US6112286A (en) * | 1997-09-19 | 2000-08-29 | Silicon Graphics, Inc. | Reverse mapping page frame data structures to page table entries |
CN2569238Y (zh) * | 2002-07-01 | 2003-08-27 | 威盛电子股份有限公司 | 分布式共享内存系统中远程节点读取本地内存维护装置 |
CN1447255A (zh) * | 2002-04-09 | 2003-10-08 | 威盛电子股份有限公司 | 具有双节点分布式共享内存系统及其数据维护方法 |
-
2004
- 2004-02-27 CN CNB2004100229337A patent/CN100383763C/zh not_active Expired - Fee Related
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO1996035169A1 (en) * | 1995-05-05 | 1996-11-07 | Silicon Graphics, Inc. | Page migration in a non-uniform memory access (numa) system |
CN1149736A (zh) * | 1995-06-05 | 1997-05-14 | 北京航空航天大学 | 一种分布式存储器共享管理方法 |
US6112286A (en) * | 1997-09-19 | 2000-08-29 | Silicon Graphics, Inc. | Reverse mapping page frame data structures to page table entries |
CN1447255A (zh) * | 2002-04-09 | 2003-10-08 | 威盛电子股份有限公司 | 具有双节点分布式共享内存系统及其数据维护方法 |
CN2569238Y (zh) * | 2002-07-01 | 2003-08-27 | 威盛电子股份有限公司 | 分布式共享内存系统中远程节点读取本地内存维护装置 |
Non-Patent Citations (2)
Title |
---|
基于瞬时访问信息的动态页迁移机制. 戴华东,郑立刚,杨学军.计算机工程与科学,第25卷第1期. 2003 * |
操作系统对提高数据访问局部性的支持. 朱建涛.电子计算机,第139期. 1999 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10013205B2 (en) | 2014-09-12 | 2018-07-03 | Huawei Technologies Co., Ltd. | Memory migration method and device |
Also Published As
Publication number | Publication date |
---|---|
CN1560746A (zh) | 2005-01-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100383763C (zh) | 基于操作系统反向页表的页迁移和复制方法 | |
Shan et al. | Distributed shared persistent memory | |
US20220174130A1 (en) | Network attached memory using selective resource migration | |
EP2378421B1 (en) | Ownership reassignment in a shared-nothing database system | |
US9047351B2 (en) | Cluster of processing nodes with distributed global flash memory using commodity server technology | |
AU2004262370B2 (en) | Parallel recovery by non-failed nodes | |
US8732386B2 (en) | Sharing data fabric for coherent-distributed caching of multi-node shared-distributed flash memory | |
Amza et al. | Software DSM protocols that adapt between single writer and multiple writer | |
Sha et al. | A new design of in-memory file system based on file virtual address framework | |
CN109815163A (zh) | 基于预测的高效高速缓存行处理的系统和方法 | |
CN111095222A (zh) | 使用高速缓存一致性协议数据的基于高速缓存的追踪记录 | |
US11656878B2 (en) | Fast boot | |
CA3088558A1 (en) | Logging cache influxes by request to a higher-level cache | |
CN109815165A (zh) | 用于存储和处理高效压缩高速缓存行的系统和方法 | |
Zhou et al. | Parallel structured duplicate detection | |
US6298419B1 (en) | Protocol for software distributed shared memory with memory scaling | |
Keleher | Update protocols and cluster-based shared memory | |
Bjornerstedt | Secondary storage garbage collection for decentralized object-based systems | |
Banâtre et al. | Scalable shared memory multiprocessors: Some ideas to make them reliable | |
Hunt et al. | Using peer support to reduce fault-tolerant overhead in distributed shared memories | |
Dini et al. | An overview of Ulisse, a distributed single address space system | |
EP4295233A1 (en) | Treating main memory as a collection of tagged cache lines for trace logging | |
Isely et al. | Design notes for the next generation persistent object manager for CAP | |
O'Boyle et al. | Compiler reduction of invalidation tra c in virtual shared memory systems | |
Scott et al. | Using Peer Support to Reduce Fault-Tolerant Overhead in Distributed Shared Memories |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20080423 Termination date: 20130227 |