专利名称:基于双重跟踪的虚拟化平台的磁盘页面换入的方法
技术领域:
本发明涉及计算机技术领域,尤其涉及一种基于虚拟化平台上的支持 Host-Swapping机制的磁盘页面换入方法。
背景技术:
目前在内存的管理方面的研究方案数不胜数,但是这些研究基本上在五年之前就 中断了。近年来,由于受到内存模型的复杂性和缺少硬件技术发展的推动,对于内存管理的 关注进入低潮期。即使是先前的那些研究,对于虚拟化平台的内存管理,大部分的都集中于 分配策略和页面替换策略上,但是,对于虚拟机的页面替换引起的输入输出(10)操作所牵 涉的设备模型的影响却涉及较少。在虚拟化中,物理资源通常有一个定语称为宿主(Host),而虚拟出来的资源通常 有一个定语称为客户(Guest)。本质上,虚拟化就是由位于下层的软件模块,通过向上一层 软件模块提供一个与它原先所期待的运行环境完全一致的接口的方法,抽象出一个虚拟的 软件或硬件接口,使得上层软件可以直接运行在虚拟的环境上。KVM(Kernel-based Virtual Machine,基于内核的虚拟机)是一个新兴的基于Linux内核的虚拟机管理软件,它采用的 是基于Intel硬件虚拟技术的虚拟化方法,并结合模拟器Qemu来完成设备虚拟化(Device Model)。对于Linux而言,KVM是一个普通进程,因此其管理很简单,提供的虚拟化环境性 能很高,而且对现有系统影响很小从而扩展性很强。对于本文实现的技术而言,KVM最大的 优点在于它支持内存超额分配和Host-swapping机制。原来的虚拟机内存页面替换机制中,页面回收过程如下虚拟机本身发起页面回 收,其页面回收算法选中回收页框,然后向通用10层提出10操作请求。通用10层的磁盘 驱动接收请求并发出相应的10指令,这些10指令被硬件捕捉后引发异常退出虚拟机环境, 异常原因会被VMM检测到。接下来,检测到的异常原因与10指令被递交给用户态的守护进 程,它经过设备模型层(Device ModelLayer,DML)去调用本地磁盘设备驱动,从而完成内存 页面的换出(Swap out)操作;如图1虚线过程所示。这种Host-swapping机制的优点是虚 拟机的内存页面交换路径大大缩短,同时不必要的特权级切换得以避免,系统效率得以提 高提高,其过程如图1实线所示。在引入了 Host-Swapping的VMM上如果支持了多个客户机同时运行,不同的客户 机可能映射到物理连续页面。原来的页面换出策略中会尝试将物理连续页一起换出;但是 在引入了 Host-Swapping的虚拟化环境中,这会让属于不同虚拟机的页框被连续地存放在 交换分区中。为了利用磁盘访问的空间局部性来提供优化,磁盘页面换入机制得以提出。 Linux操作系统设置了一个可手动调节的磁盘页面换入大小,默认为一次交换分区读操作 尝试8个连续页面。但是在引入了 Host-Swapping的VMM上,由于单个虚拟机页面的“不连 续性”,调大页面换入范围不会有什么效果。这种不连续性导致磁盘页面换入命中率下降、 10次数增加以及磁盘寻道时间增加。如果10操作过多,则可能使得系统的运行时间在磁盘 操作上达到饱和。
内存Host-swapping机制通过大大缩短虚拟机的内存页面交换路径和避免了不 必要的特权级切换来提高虚拟机的性能,但是这种机制同时也使得磁盘页面换入命中率下 降、10次数增加并且磁盘寻道时间增加。
发明内容
本发明提供了一种智能管理磁盘页面换入时页面数的方法,以帮助换页机制动态 地改变每次调页时的换入页面数,在保证磁盘交换缓存命中的前提下充分减少磁盘10访 问次数,提高系统效率。一种基于双重跟踪的虚拟化平台的磁盘页面换入的方法,包括如下步骤(1)建立跟踪缓存,用于跟踪各个进程的页面换入操作,跟踪缓存为一个环形缓冲 区,其中包括了若干项(Entry),如图2所示,每个项中包含进程的基本信息以及两个槽,这 两个槽分别表示在该进程的两个热点交换区域中,或者一个热点交换区域以及其它零散的 换入操作中,其各自最近一次发生页面换入操作时的信息,包括PID表示该进程的进程ID号,即指明了该项记录的页面换入操作发生在进程ID号 为PID的进程中;Priority表示项的有效期;每个项中分别设置两个页槽(SlotO,Slotl),两个页槽共用一个进程ID号和项的 有效期Priority ;其中,一个页槽记录的是进程在某一个热点换入区域中最近一次页面换 入操作的相应信息,另一页槽则记录了另一个热点换入区域中最近一次页面换入操作的信 息。或者,其中一个槽表示某一热点换入区域中最近一次页面换入操作的相应信息,而另一 个槽则表示其它不在该热点换入区域中的最近一次页面换入操作的信息。在一个项中使用两个槽来描述一个进程的换入操作是基于这样一种考虑客户机 在运行过程中Swap in的页槽存在以某一个区域为主,零星穿插零散的交换分区其它位置 页面的访问;或者存在交换分区的某两个区域交替Swap in的访问模式。深入分析发现,当 客户机中一个主要用户进程在执行时,其它服务进程或者内核线程可能周期性的被唤醒执 行,由于长时间处于休眠状态,这些相关进程的匿名页面极可能被换出到交换分区中,一旦 这些内核进程被唤醒,他们的数据就要重新换入。由于内核线程没有自己的进程ID号,而 是临时使用它们被唤醒时的普通进程对应的进程号,这就使得动态页面换入时错把对这些 内核线程的换入操作当作是普通进程的换入操作,从而使得在项中计录的信息不能很好地 表述进程的页面换入操作信息,而使用双槽的方案正好可以解决这个问题。在换入操作发生的两个热点区域中其各自最近一次的页面换入操作时换入的页 面数则分别由PagesO和Pages 1来表示。在一个项的有效期内,也就是priority还不为0的时候,也即这个项还没有被替 换以前,一个项描述的信息总是对应同一个进程,而这个项的信息记录的是它描述的进程 在换入操作发生的两个热点区域中其各自最近一次的页面换入操作时的信息,(或者更确 切地说,是在该进程在换入操作发生的两个热点区域中其各自最近一次的页面换入操作完 成以后,把该操作的信息,比如是从交换空间上的什么位置读取的,读了几个页分别记录在 该项中,以便当对该进程发生下一次页面换入操作需要换页时,以该信息为参考计算出这 个时候发生的页面换入操作需要预读多少个页面)。这中间会混淆的可能是对进程的页面换入操作的不清楚,也就是说,系统中是有很多进程在同时运行的,从全局的角度来看,两 次页面换入操作只会对应一个进程,当页面操作执行完毕以后,就在对应于该进程的项中 对这次操作的信息进行更新,也即一个项只对应一个进程在在换入操作发生的两个热点区 域中其各自最近一次的页面换入操作的信息。(2)跟踪每个客户(Guest)进程的页面换入(swap in)操作,当发生缺页而中断 时,根据发生中断的进程的标识符在跟踪缓存中找到匹配的项。跟踪缓存中所有的项在系统启动过程中已经正确初始化,把相关字段清零。以当 前发生缺页中断的进程/Guest的进程ID号作为参数,去匹配跟踪缓存中的每个项的PID 字段。此函数采用线性扫描方式,这是基于对跟踪缓冲的公平访问原则,对于缓冲区项数不 是很大的情况,该方法简单易维护且性能可接受。扫描首先从上次Swap in选中的项开始;以匹配PID为优先级最高;次优先级为没有找到匹配PID的项,从而选择第一个扫描到的空闲项以记录此次 的换入操作,即记录一个新的项;被扫描的项如果不满足上述两种情况,则递减被扫描的项的有效期Priority,当 某一项的有效期Priority为0时,则清除该项。在一轮扫描之后如果没有选择到满足条件 的项则此返回NULL,随后的页面换入计算函数将返回一个默认值。显然,每个项最多可以有 Priority次机会不被替换。(3)根据得到的项,计算当前页面换入需要预取页面的个数。将当前页面换入操作所涉及的目标页面在交换分区上的页槽的位置记为Target。BaseO和EndO分别代表在匹配的项中,所记录的进程的最近一次页面换入操作时 换入的页面在交换分区上页槽的起始和终止偏移值;Basel和Endl分别代表在换入操作发 生的两个热点区域中其各自最近一次的页面换入操作中的另一次页面换入操作时换入的 页面在交换分区上页槽的起始和终止偏移值。当一个项被选中时,优先选择最近一次页面换入所使用的页槽,DistanceO取值 为|Target-BaseO|和| Target-EndO |中较小者如果DistanceO小于用户设定的中间值 (MDistance),则表明空间局部性高,因此增加换入的页面数,同时更新该槽对应的信息。页 面每次增加的单位是8,当换入的页面数达到最大值MPF时,将不再增加。MPF的值是32。如果DistanceO不小于MDistance,则直接切换到在换入操作发生的两个热点区 域中其各自最近一次的页面换入操作时换入的页面在交换分区上的页槽,Distancel取值 为!Target-Basel!和| Target-Endl |中较小者如果Distancel小于用户设定的中间值 (MDistance),则表明空间局部性高,因此增加换入的页面数,同时更新该槽对应的信息。用 户可以设定MDistance = 8,则页面每次增加的单位是8,当换入的页面数达到最大值MPF 时,将不再增加。MPF的值是32。Distancel不小于MDistance页面换入操作时换入的页面 数将直接取系统设定的默认最小值。此步骤中本发明引入了空间局部性的概念,如果空间局部性高,则一次换入更多 的页面,如果空间局部性低,则直接切换到另一个页槽中,如果在另一个页槽中空间局部性 高则换入更多的页,如果空间局部性低,则按照最小页面换入执行。由于尽可能批量换入有 效的页面是动态页面换入的最终目的,因此我们引入一个换入 窗口,此窗口在空间局部性高时增大,而在空间局部性低时减小,并且减小的速度快于增长的速度。每次增加的步长是 人为设定的,且减小的的步长大于增加的步长(实际上是增加时以固定步长增加,减少时 则是一次性减小到最小的窗口长度)。目前主流硬盘的转速为7200RPM,其平均寻道时间为8毫秒。基于此,并且同时考 虑平均寻道时间和内核访问代码路径所消耗的时间,测量值表明一次读取8个页面的磁盘 换入操作的总时间与一次读取2个页面的磁盘换入操作的总时间相差不多,因此一次页面 换入的最小变化单位被定为8个页面。概率统计原理表明,当概率超过某阈值以后,就可以认定为空间局部性较高从而 增加换入页面数。我们定义空间局部性为两次磁盘页面换入操作的页面之间的距离。在 跟踪缓存中,Base和End分别记录了一次页面换入操作换入的交换分区页槽起始和终止偏 移,同时,将本次调页的目标页面在交换分区上的页槽位置记为Target。目标页面与最近某 一次页面换入操作换入的页面的距离Distance取值为| Target-Base |和| Target-End |中 较小者,它与距离阈值MDistance相比较就可以预测本次换入的空间连续性。 前面已经将最小换入的页面数确定为8,即MDistance = 8。在页面换入时,首先 需要判断本次目标页槽与最近一此换入页槽偏移的距离,即检查空间局部性的高低。动态 页面换入计算函数的处理方法是将目标页面与最近某一次页面换入操作换入的页面的距 离Distance与最小换入的页面数MDistance相比较。如果Distance小于MDistance,则表明空间局部性高,因此增加换入的页面数。页 面每次增加的单位是8,即MDistance。当换入的页面数达到最大值MPF时,将不再增加。 MPF的值是32。据研究,数值32是页面换入和内存共享两种机制共同达到最佳效果的平衡 点。接下来,函数还需要判断本次页面换入与上次页面换入偏移之间的相对位置,进一步决 定本次页面换入页槽偏移的起始位置。如果Distance不小于MDistance,页面换入操作切换到另一个页面槽,进行类似 的判断,如果空间局部性高则增加换入的页面数,否则将取系统设定的默认最小值。在上述双重跟踪换入页面操作中,两个页槽共用一个进程PID和项有效期 Priority字段,同时增可以加一个页槽(CUr_Slot)用于指明最近换入操作的信息记录在 哪一个页槽中。每当一个项被选中时将优先选择CUr_Slot。页槽的切换由当前Swap in 的目标页槽偏移与当前页槽记录中的起止偏移的距离决定的,如果这个距离超过了设定阈 值,则直接切换到另一个页槽,然后再进行页面换入页面数的计算。如图2所示。该方案可 以推广到N重跟踪。本发明所实现的动态页面换入计算方法通过基于客户机内存状态的页面交换机 制来提高每个客户机内存在交换分区中的页面连续性,能够动态地改变每次调页时的页 面换入数,从而在保证磁盘交换缓存命中的前提下充分减少磁盘IO访问次数,提高系统效率。
图1 为内存页面替换对比示意图;图2 为跟踪缓存及其项结构。
具体实施例方式本发明方法实现于以Linux内核为基础、KVM为虚拟机的架构之上,试图解决 Host-swaping机制所带来的单个虚拟机页面不连续所导致磁盘页面换入命中率下降、IO 次数增加和磁盘寻道时间增加的问题。具体过程为Host在系统初始化时建立一个跟踪缓存,这是跟踪各个进程换入操 作的一个环形缓冲区,其中的每一项记录一个进程在换入操作发生的两个热点区域中其各 自最近一次的页面换入操作的相关信息。当进程/Guest由于发生缺页而中断时,Host中 的智能磁盘页面换入管理器就以它们的进程标识符(PID)为参数在跟踪缓存中找到匹配 的项;(1)扫描首先从上次Swap in选中的项开始;以匹配PID为优先级最高;接下来,根据扫描得到的项来计算这次应该预取多少个页面。将当前页面换入操作所涉及的目标页面在交换分区上的页槽的位置记为Target。 目标页面与匹配的项中记录的进程的最近一次页面换入操作时换入的页面的距离 Distance。取值为 Target-BaseO 和 Target-EndO 中较小者。如果DistanceO小于设定的中间值8,则表明空间局部性高,因此增加换入的页面 数。页面每次增加的单位是8,当换入的页面数达到最大值MPF时,将不再增加。MPF的值
32 ο如果DistanceO不小于中间值8,则直接切换到在换入操作发生的两个热点区域 中其各自最近一次的页面换入操作中的另一次页面换入操作时换入的页面在交换分区上 的页面槽,Distancel 取值为 | Target-Basel | 禾口 | Target-Endl | 中较小者如果 Distancel 小于用户设定的中间值(MDistance = 8),则表明空间局部性高,因此增加换入的页面数, 则页面每次增加的单位是8,当换入的页面数达到最大值MPF时,将不再增加。MPF的值是 32。Distancel不小于MDistance页面换入操作时换入的页面数将直接取系统设定的默认 最小值。页面换入操作时换入的页面数将直接取系统设定的默认最小值8。(2)若果没有找到匹配PID的项从而选择第一个扫描到的空闲项以记录此次的换 入操作,即记录一个新的项;Distance取默认最小值8。(3)被扫描的项如果不满足上述两种情况,则递减被扫描的项的有效期 Priority,当某一项的有效期Priority为0时,则清除该项。在一轮扫描之后如果没有选 择到满足条件的项则此返回NULL,随后的页面换入计算函数将返回一个Distance默认最 小值8。我们对动态页面换入方法所带来的实际效果进行了测试。在测试硬件,我们使用 Intel Q9300的CPU,768MB的内存,转速为7200而缓存为16MB的磁盘。Host和Guest所 使用的系统都是Fedora Core 9,但Host上Fedora Core的内核版本是2. 6. 31-RC5,约高 于Guest的内核版本2. 6. 25。对于测试软件,这里采用SpecJBB,并且设置SpecJBB堆为256MB。测试时为系统 配置了 3个Guest 0S,每个OS的内存都是320MB。系统性能测试
基于上述配置,我们比较了普通KVM和启用了动态页面换入器的KVM分别在使用预期(Anticipatory)和始终公平排队(CFQ)磁盘调度器下的性能得分。在动态页面换入 计算方法中,将最大换入页面数确定为32,最小换入页面数为8,测试结果表明,在SpecJBB 运行过程中,动态页面换入机制配合相应调度器的选择,性能提高近20%。磁盘IO操作比铰接下来将从磁盘的IO操作次数与交换缓存命中率层面分析,进一步说明动态页 面换入的优势所在。我们以SpecJBB为测试工具,对系统的磁盘读入数据量、读磁盘次数和交换缓存命中率进行了比较。结果表明,动态页面换入机制在IO减少次数方面虽然没有直接增加 Page Cluster (页簇)的值表现良好,但是动态页面换入机制取能够有效的保证交换区缓 存的命中率,同时使得磁盘消耗总时间降低最多。
权利要求
一种基于双重跟踪的虚拟化平台的磁盘页面换入的方法,其特征在于,包括如下步骤(1)建立跟踪缓存,用于跟踪各个进程的页面换入操作,跟踪缓存中包括了若干项,每个项记录一个进程在换入操作发生的两个热点区域中其各自最近一次的页面换入操作时的信息,包括该进程的进程ID号;项的有效期;该进程在换入操作发生的两个热点区域中其各自最近一次的页面换入操作时换入的页面在交换分区上页槽的起始和终止偏移值;该进程在换入操作发生的两个热点区域中其各自最近一次的页面换入操作时换入的页面数;(2)跟踪每个客户进程的页面换入操作,当发生缺页而中断时,根据发生中断的进程的标识符在跟踪缓存中找到匹配的项;(3)根据得到的项,计算当前页面换入需要预取页面的个数。
2.如权利要求1所述的基于双重跟踪的虚拟化平台的磁盘页面换入的方法,其特征在 于,所述的跟踪缓存为一个环形缓冲区。
3.如权利要求1所述的基于双重跟踪的虚拟化平台的磁盘页面换入的方法,其特征在 于,步骤(2)中,在跟踪缓存寻找匹配的项时,扫描首先从客户进程的最近一次页面换入操 作选中的项开始;以进程ID号匹配的项为优先级最高;次优先级为没有找到匹配进程ID号的项,从而选择第一个扫描到的空闲项以记录此 次的换入操作,即记录一个新的项;被扫描的项如果不满足上述两种情况,则递减被扫描的项的有效期,当某一项的有效 期为0时,则清除该项;在一轮扫描之后如果没有选择到满足条件的项则此返回NULL,随后 的页面换入计算函数将返回客户设定的默认最小值。
4.如权利要求1或2所述的基于双重跟踪的虚拟化平台的磁盘页面换入的方法,其特 征在于,步骤(3)中,当一个项被选中时,优先选择最近一次页面换入操作时换入的页面在 交换分区上所使用的页槽,将当前页面换入操作所涉及的目标页面在交换分区中的页槽的 位置记为Target,若Target-BaseO|和| Target-EndO |中较小者小于设定的中间值,则增加 换入的页面数;否则,直接切换到在换入操作发生的两个热点区域中其各自最近一次的页 面换入操作中另一次页面换入操作时换入的页面在交换分区上的页槽,若| Target-Basel 和| Target-Endl |中较小者小于设定的中间值,则增加换入的页面数,| Target-Basel 和Target-Endl中较小者不小于设定的中间值需要预取页面的个数为设定的默认最小值;其中,BaseO和EndO分别代表在匹配的项中,所记录的进程的最近一次页面换入操作 时换入的页面在交换分区上页槽的起始和终止偏移值,Basel和Endl分别代表在换入操作 发生的两个热点区域中其各自最近一次的页面换入操作中另一次页面换入操作时换入的 页面在交换分区上页槽的起始和终止偏移值。
全文摘要
本发明公开了一种基于双重跟踪的虚拟化平台的磁盘页面换入的方法,包括(1)建立跟踪缓存,用于跟踪各个进程的页面换入操作,跟踪缓存中包括了若干项,每个项中记录一个进程在换入操作发生的两个热点区域中其各自最近一次的页面换入操作信息;(2)跟踪每个客户进程的页面换入操作,当发生缺页而中断时,根据发生中断的进程的标识符在跟踪缓存中找到匹配的项;(3)根据得到的项,计算当前页面换入需要预取页面的个数。本发明的页面换入的方法提高了每个客户机内存在交换分区中的页面连续性,能够动态地改变每次调页时的页面换入数,从而在保证磁盘交换缓存命中的前提下充分减少磁盘IO访问次数,提高系统效率。
文档编号G06F12/10GK101859282SQ20101018357
公开日2010年10月13日 申请日期2010年5月26日 优先权日2010年5月26日
发明者陈小琴, 陈慧君, 陈文智, 黄炜 申请人:浙江大学