CN103885838A - 一种获取虚拟机内存工作集的方法及内存优化分配方法 - Google Patents
一种获取虚拟机内存工作集的方法及内存优化分配方法 Download PDFInfo
- Publication number
- CN103885838A CN103885838A CN201410119508.3A CN201410119508A CN103885838A CN 103885838 A CN103885838 A CN 103885838A CN 201410119508 A CN201410119508 A CN 201410119508A CN 103885838 A CN103885838 A CN 103885838A
- Authority
- CN
- China
- Prior art keywords
- page
- virtual machine
- lru
- memory
- vmm
- 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.)
- Pending
Links
Images
Landscapes
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明公开了一种获取虚拟机内存工作集的方法及内存优化分配方法。本方法为:1)修改虚拟机管理器VMM的内存页访问机制:将虚拟机VM的所有一级页表的页表项PTE的访问权限设置为系统态;2)当一内存页面被一VM访问时,产生次要页面失效陷入到VMM中,VMM获取该页面的虚拟地址和其所属的页表地址,并将该页面的PTE访问权限设置为用户态;3)VMM将每一VM访问过的页面地址分别记录到一对应的最近使用LRU直方图中,通过绘制失效率曲线,得到每一虚拟机VM的内存工作集WSS;4)VMM根据虚拟机的WSS为每一VM按需分配内存。本方法能够低开销获取每一虚拟机的内存集,并按照VM的内存按需分配,极大提高资源利用率。
Description
技术领域
本发明涉及一种获取虚拟机内存工作集的方法及内存优化分配方法,属于虚拟化技术领域。
技术背景
在当前常见的虚拟化应用中,有这样一种场景:同一虚拟化管理器(Virtual MachineMonitor,VMM)上管理着多个虚拟机(Virtual Machine,VM),且多个VM之间共享内存等硬件资源。而在一台物理机上往往运行着多个虚拟机,这些虚拟机的内存通常由VMM静态设置(如图1所示)。当一台虚拟机内存超载时,它不得不将一些物理页面交换到磁盘上去,即便其它虚拟机有空闲内存,也会导致性能急剧下降。为了改善或者避免类似的情况,最合适的方法是让虚拟化环境下的资源的管理者、分配者VMM能够为多台虚拟机进行按需、动态内存调控。实现这一目标的关键是能够准确、低开销地预测虚拟机的内存需求。
在静态分配内存的时候,由于无法提前预知虚拟机所需内存的大小,因此只能尽可能多的分配内存,这样的策略造成了内存的很大浪费。更极端的情况是在所分配内存之和大于物理内存的情况下,内存初始化无法完成(如图2所示)。
虚拟机的行为具有很强的可变性,其内存需求是动态变化的。在这种情况下如果没有一个有效的物理内存管理和调度机制,数据中心的内存资源会出现利用率低下或者资源浪费的问题,甚至导致整体性能急剧下降。而现有操作系统只报告系统占用和空闲内存的大小,而不能统计每个程序所需要内存的大小。并且,系统性能和分配内存大小没有正比关系,占用的内存不一定在被有效使用。最理想的情况是按照虚拟机的需求,动态预测内存需求,用历史预测未来。
目前已经有一些基于内存工作集的研究工作。VMware ESX采用的方法是”采样”,即在每个采样间隔内监控一组随机的内存页面,一段时间后统计出这组页面的利用率作为整个物理内存的利用率。这种方法可以估计出有多少不活动的页面。但是因为程序性能和分配内存大小并不是呈线性关系的,所以该方法不能预测当把这些不活动的页面回收后,对程序性能产生多大的影响。通过监控磁盘I/O来推断当前内存压力并计算所超载的内存大小也是有一种探测内存工作集的方法,但是这只能预测当内存超载时的应用程序的工作集大小,并不适用于系统有空闲内存的情况,因此无法对回收多余的内存做出决策。
发明内容
本发明的目的是提供一种获取虚拟机内存工作集的方法及内存优化分配方法,可实时高效的探测出虚拟机的内存工作集的大小,实现虚拟化平台上内存的按需分配,有效的提高资源利用率。
内存工作集(Working Set Size,WSS)是程序访存行为的直接体现,是度量程序内存需求的重要指标。而失效率曲线(Miss Ratio Curve,MRC)刻画了不同内存分配值所对应的总的页面访问失效率,因而可以用来度量程序性能和内存大小之间的关系。根据程序的MRC,我们可以将它的WSS重新理解为:在页面失效率不显著影响程序性能的范围内,应用程序所需要的物理内存。
本发明的技术方案为:
一种获取虚拟机内存工作集的方法,其步骤为:
1)修改虚拟机管理器VMM的内存页访问机制:将虚拟机VM的所有一级页表的页表项PTE的访问权限设置为系统态;
2)当一内存页面被一虚拟机VM访问时,产生次要页面失效陷入到虚拟机管理器VMM中,虚拟机管理器VMM获取该页面的虚拟地址和其所属的页表地址,并将该页面的页表项PTE的访问权限设置为用户态;
3)虚拟机管理器VMM将每一虚拟机VM访问过的页面地址分别记录到一对应的最近使用LRU直方图中,通过绘制失效率曲线MRC,进而得到每一虚拟机VM的内存工作集。
一种虚拟机内存优化分配的方法,其步骤为:
1)修改虚拟机管理器VMM的内存页访问机制:将虚拟机VM的所有一级页表的页表项PTE的访问权限设置为系统态;
2)当一内存页面被一虚拟机VM访问时,产生次要页面失效陷入到虚拟机管理器VMM中,虚拟机管理器VMM获取该页面的虚拟地址和其所属的页表地址,并将该页面的页表项PTE的访问权限设置为用户态;
3)虚拟机管理器VMM将每一虚拟机VM访问过的页面地址分别记录到一对应的最近使用LRU直方图中,通过绘制失效率曲线MRC,进而得到每一虚拟机VM的内存工作集WSS;
4)虚拟机管理器VMM根据虚拟机的内存工作集WSS为每一虚拟机VM按需分配内存。
进一步的,使用陷入俘获机制抓取虚拟机的访存地址,采用一FIFO队列动态记录虚拟机俘获的地址;当有新的页面加入到该FIFO队列时,将其页面号加入队尾;如果队列已满,则将队头的页面淘汰,并将其权限重新设为系统态。
进一步的,使用LRU堆栈存储内存工作集中被访问的页面号。虚拟机管理器VMM将全部的机器地址空间P划分为N个标签,每一标签Ti对应一计数器Hit(i);当一页面被访问时,虚拟机管理器VMM首先定位该页面所对应的标签Ti;然后计算该标签Ti在LRU访问序列中的距离d;然后将该标签Ti移到LRU序列的起始位置,并将计数器Hit(d)加一。
进一步的,虚拟机管理器VMM根据每一虚拟机VM的LRU直方图计算该虚拟机VM的失效率 其中,D为LRU堆栈当前深度,d为LRU堆栈减小后的深度。
进一步的,如果设定时间长度内虚拟机VM访问的页面总数与其对应的FIFO队列所能容纳页面数比例大于设定值H,则增大该虚拟机VM的FIFO队列长度;如果设定时间长度内虚拟机VM访问的页面总数与其对应的FIFO队列所能容纳页面数比例小于设定值h,则减小该虚拟机的FIFO队列长度。
进一步的,虚拟机管理器VMM对LRU堆栈进行监控,并且根据设定的硬件事件状态开启或关闭对LRU堆栈监控;当设定的硬件事件状态变化超过设定阈值时,则开启对LRU堆栈的监控,否则关闭监控。
进一步的,使用优化的AVL树存储被访问的页面号,且LRU堆栈每一位置i设置一计数器Hist(i);虚拟机管理器VMM根据每个计数器的值和它在LRU堆栈所处的深度生成一基于AVL树的LRU直方图,其中为AVL树的每个结点添加一size域,记录以该结点为根的子树结点个数;当一页面被访问时,计算该页面距栈顶的距离 其中,size(x)为以标签x为根的子树的容量,LC(x)表示以标签x为根的子树的左孩子,ANC(x)为返回标签x的祖先y或者Null;然后将该标签x删除,再将它作为AVL树最左的叶子插入。
进一步的,当台虚拟机VM1和VM2竞争内存资源时,虚拟机管理器VMM调整内存的方法为:
a)将VM1的内存减少S,将VM2的内存增大S;
b)计算调整后的页面失效数C,重复步骤a)、b)直至求出C最小值C1;
c)将VM1的内存增大S,将VM2的内存减小S;
d)计算调整后的页面失效数C,重复步骤c)、d)直至求出C最小值C2;
e)选出Min(C1,C2),并将虚拟机各自的内存分配值作为调整后的最终结果。
为了捕捉虚拟机上应用程序的访问内存行为并以此构造MRC,首先通过修改虚拟机管理器的内存页访问机制:取消用户访问指定页面的权限,则用户程序读写页面的所有请求都会产生次要页面失效(由于访问权限导致的失效)陷入到VMM中,从而俘获VM中访问过的所有内存页面。
然后就可以根据页面访问的局部性和频度建立最近最少使用(Least Recently Used,LRU)直方图和MRC曲线。使用LRU堆栈来存储被访问的页面号,栈的第i个位置对应一个计数器Hist(i)。可以根据每个计数器的值和它在LRU堆栈所处的深度(与栈顶的距离)来得到LRU直方图:当一个页面被命中时,首先计算出它距栈顶的距离dist,将Hist(dist)加一,然后将该页面移到LRU栈顶。
根据这个LRU直方图计算MRC的方法如下:如果一个栈的深度为D,现在我们将它深度减小到d,此时d所对应的失效率为:
但由于页面方法需要俘获所有的页面访问,系统开销较大(直接使用页面俘获机制带来的系统开销高达173%)因此需要采取多种优化措施,在保证跟踪WSS精确度的前提下有效降低系统开销(流程如图3所示。)。
1、动态热页集(Dynamic Hot Set,DHS)
WSS跟踪的系统开销和陷入次数是成正比的。如果让每一个页面访问都陷入VMM中去,那么代价是相当昂贵的。并且,根据数据访问具有的时间局部性和空间局部性,对一小部分的页面的访问在总的访问的页面中占了相当大的比例。图4所示的动态热页集可以在保证精度的同时降低系统开销:通过访问的频度可以把所有物理页面划分为热页集(Hot Page Set,HS)和冷页集(Cold Page Set,CS)两个集合,最近经常被访问的页面称为热页,热页之外其余的页面都是冷页。虚拟机可以正常访问热页,只有对冷页面的访问会陷入到VMM。这样,热页集越大,可能产生的陷入次数就越少。HS是一个先进先出(First In First Out,FIFO)队列。当一个页面从冷的变成热的时候,我们就把它的机器页面号加入队尾。当这个队列满了之后,队头的页面就会被淘汰。我们将它的用户级访问权限取消,于是它又变成了冷的,如此循环往复。
初始状态时我们将所有页面都记成冷页:当某一VM上的客户操作系统GuestOS新建一个页表时,我们将VM的所有一级页表的页表项PTE(Page Table Entry)的访问权限设置为系统态。接下来任何一个对冷页面的访问都会陷入VMM中去。VMM的页面失效处理程序能够从上下文获知陷入页面的虚拟地址和其所属的页表地址,然后只需要O(1)的时间定位到对应的PTE和机器地址。接着我们将PTE的用户访问权限恢复,这个页面就变成热的了。以后对这个热页的所有访问请求都不会再陷入VMM,因此避免了产生多余的开销。
并且,HS大小的是动态变化的,当VM实际内存大于WSS的1.1倍时,则以4096的步长增加HS,反之则缩小HS。这样可以根据内存的实际压力,动态调整监控的力度。
2、基于AVL树的LRU直方图(AVL-Based LRU,ABL)
用双向链表维护LRU直方图的时间代价为O(N)。若程序局部性好的话,被命中的页面的标签往往离链表头很近;但是若程序内存需求很大同时局部性又很差的情况下,双向链表的搜索的代价就很糟糕。通过把传统的双向链表数据结构改变为AVL树,可以与有效的利用树状存储结构的高效率,把数据存储的代价从O(N)降低到O(log(N))。
3、间断式LRU监控(Intermittent LRU Monitoring,ILM)
程序的访存行为呈现出周期性的特征。在一个周期内部,它的内存需求往往趋于稳定。这个特性启发我们可以在程序处于一个稳定的周期时暂时关闭LRU监控而在它进入到一个新的周期时再次开启LRU监控。通过这种方法,我们可以大大减少监控时间和系统开销。但关闭了监控之后,前面所述的WSS跟踪机制本身就不能检测到周期的交替了,所以需要借助另外的方法发现程序内存需求发生的变化并“唤醒”LRU监控。我们发现在内存需求发生剧烈的变化时,一些与访存相关的硬件事件,如DLTB Miss,L2Miss,L1Access等也往往伴随有大幅度的波动。当内存需求比较稳定时,这些事件也会比较稳定。这些硬件事件的数据能够在Intel CPU的PMU中读取,且监控的代价是微乎其微的。通过硬件事件状态对LRU监控开关的反馈,可以在保证监控精度的同时大幅降低监控开销。
与现有技术相比,本发明的积极效果为:
1.对虚拟机的计算特征进行分析,通过性能监控事件、特定的监控机制等方法进行动态监控预测,更准确地掌握虚拟机的主要计算特征和运行时刻的资源需求变化,为虚拟机静态部署和动态资源调配提供技术保障。
2.在内存层次提升虚拟机服务质量的优化技术研究。
3.通过实时准确的感知VM的真实WSS,实现了数据中心中内存的按需分配,大大提
高了内存资源的利用率。
为了测试我们的内存预测系统在虚拟化环境下的性能,我们在开源的虚拟机监控器Xen4.2.1框架下实现了WSS跟踪系统以及优化。我们使用的基准测试程序是SPEC CPU2006和Dacapo程序组。测试中给虚拟机分配3G内存以保证满足所有程序的内存需求。实验的环境如下:CPU(Intel I7930,2.8GHz,12MB cache)、内存(8GB)、硬盘(7200转/分钟,2MBcache),主机的Linux内核版本是3.10.12.6,XEN为4.2.1。
为了测试三种优化方法对减小WSS跟踪的系统开销的影响,我们首先测试了SPEC CPU2006和Dacapo程序组在没有任何WSS跟踪情况下的程序性能作为基准性能。然后我们分别比较了使用不同方法的WSS跟踪的性能:基于双向链表的LRU直方图,DHS,ABL和同时使用后两者的组合。表1显示了标准化到基准数据的WSS跟踪性能。对于整个SPEC2006程序组,使用双向链表所导致的平均系统开销有173%。而单独使用DHS或ABL时,系统开销发减少到39%,43%。同时使用DHS和ABL能够进一步将系统开销减小到16%。当WSS比较小或者程序局部性非常好,ABL和DHS的优势并不突出。但是对WSS很大或局部性很差的程序,优化所带来的提高就显而易见了。例如,SPEC2006中WSS最大的三个程序459.GemsFDTD,429.mcf和410.bwaves,WSS分别为800M,680M,474M。使用了DHS和ABL优化后,系统开销比双向链表的LRU减少了69.8%,98.7%,和85.7%。而程序483.xalancbmk,虽然WSS只有28MB,但是由于它本身的局部性非常差,在双向链表的测试中它的系统开销竟然达到了681%。而我们加入优化以后,经测试它的开销减小到仅仅5%。
表1WSS跟踪的性能优化
附图说明
图1为单机多虚拟机内存模型。
图2为多虚拟机共享物理内存模型图。
图3为优化后的WSS跟踪系统图。
图4为DHS原理示意图。
图5为LRU直方图算法示意图。
图6基于AVL树的LRU直方图。
图7单机内存资源调配。
具体实施方式
下面通过实施例并结合附图,对本发明作进一步说明。
我们基于开源的虚拟化虚拟机管理器XEN,以及64位的Linux客户操作系统,实现了一个实时高效的内存工作集跟踪原型系统。为了让虚拟机上应用程序对物理内存的访问陷入到VMM,我们采用的是页面保护的方法,即取消用户访问指定页面的权限。在X86机器上,页表项(Page Table Entry,PTE)的第2位指定了访问权限为用户态或系统态。将它的属性变为系统态之后,用户程序读写页面的所有请求都会产生次要页面失效(由于访问权限导致的失效)陷入到VMM中。
操作系统或者GuestOS的内存管理器多是基于LRU算法,那么这样的系统的内存需求主要由两个访问内存的因素决定:局部性和失效率。从失效率我们可以进一步估算出页面失效的代价。考虑多个虚拟机竞争资源的情况,我们希望做出一个最佳的内存分配决策使得系统总的页面失效率最小。为了达到这个目的,我们采取的方法是让VMM截获虚拟机对物理页面的访问请求,建立LRU访问直方图,直观地观察到程序的局部性特征以及失效率。
在半虚拟化下,当虚拟机的内存不足时会发生页表更新,超级调用Hypercall是客户机通过Xen间接修改页表的方式,Xen为此提供了两个Hypercall:do_mmu_update和do_update_via_mapping,前者一次可以更新大量页表项,后者每次只能更新一个页表项。所以我们的做法就是在这两个函数里面将更新之后的页表项设置为系统态,与此同时,利用页表项中闲置的位_PAGE_AVAIL2,标记这是人为设置的Page fault而不是系统本身产生的Pagefault。
由于页面被设置为系统态,所以虚拟机对页面的访问将会发生Page fault,为了区别系统本身产生的Page fault和人为修改系统位产生的Page fault,我们需要判断闲置位_PAGE_AVAIL2,这样我们就成功地截获了虚拟机的访存情况,然后我们只需要清除这些标志位即可。
接下来我们根据页面访问的局部性以及频度建立LRU直方图。我们将全部的机器地址空间P划分为N个标签来管理,每一个标签(记作T)作为一个跟踪单位,包含P/N个连续的物理页面。每个标签对应一个计数器Hit(i)。当捕捉到对一个页面的访问请求时,VMM需要进行以下操作:(1)定位该页面所对应的标签Ti;(2)计算Ti在LRU访问序列中的距离d;(3)将Ti移到LRU序列的起始位置;(4)将标签的计数器Hit(d)加一。
图5显示了建立LRU直方图的算法示意:初始时LRU堆栈为空,当标签T1,T3第一次被访问时,将它们依次加入栈顶,它们在堆栈的LRU距离为无穷,因此现在的LRU序列为:3,1且Hit(∞)=2;接着再次访问T1时,它已经在堆栈中且LRU距离为2,因此我们将它移动到栈顶并且Hit(2)加一,现在的LRU序列为:1,3。当T1第二次被命中时,它的LRU距离为1,因此Hit(1)加一,而现有LRU序列保持不变,仍为:1,3。
一般常用的组织地址标签的数据结构是双向链表。下面我们来简要分析一下LRU直方图的算法的复杂度。由于一台物理主机的机器页面数量是固定的,我们可以用一个全局的数组记录所有的N个标签,那么第(1)步中定位到被访问的页面所属标签的时间代价是O(1)。第(3)步移动标签的操作也只需要O(1)的时间。但是第(2)步中计算标签在LRU序列中的位置则必须从链表头依次查找,时间代价是O(N)。综上,更新一次LRU直方图的总的时间代价是O(N)。
WSS跟踪的系统开销和陷入次数是成正比的。如果让每一个页面访问都陷入VMM中去那么代价无疑是相当昂贵的。为此我们采取了“热页集”的概念,虚拟机可以正常访问热页,只有对冷页面的访问会陷入到VMM。这样,热页集越大,可能产生的陷入次数就越少,从而有有效降低了系统开销。
用双向链表维护LRU直方图的时间代价为O(N)。若程序局部性好的话,被命中的页面的标签往往离链表头很近;但是若程序内存需求很大同时局部性又很差的情况下,双向链表的搜索的代价就很糟糕。为了解决这个问题,我们将传统的双向链表数据结构改变为AVL树,中序遍历AVL树的结果与双向链表相同。为了加速计算LRU距离,我们为每个结点添加了“size”域,代表以该结点为根的子树结点个数。图6给出了一个基于AVL树的LRU访问序列的例子,其中方括号内的值就是每个结点的“size”。对于任何节点x,它的LRU距离LD可以由下式递归计算:
其中size(x)和LC(x)分别表示以x为根的子树的容量以及它的左孩子。ANC(x)返回x的祖先y(y的左孩子不是x也不是x的祖先,且是满足上述条件x最近的祖先)或者Null。也就是说LC(y)?{x and x’s ancestors}。简单地说,若中序遍历,y恰好是x最左边的孩子的前一个元素。如果y不存在,ANC(x)就为Null。如图(a),ANC(c)=Null,ANC(f)=a。因为ANC函数朝着树根遍历,树在遍历的过程中不断调整平衡,LD的时间复杂度是O(log(N))。当一个页面访问陷入时,先算出它对应的标签的LRU距离,然后将标签删除,再将它作为AVL树的最左的叶子插入。在插入和删除的过程中,有N个结点的AVL树上至多所有标签的祖先的size域都需要更新,其时间复杂度为O(log(N)),与调整树平衡的复杂度一样。因此基于AVL树的LRU算法将总的时间复杂度降低到O(log(N)),而空间复杂度仍然为O(N)。
程序的访存行为呈现出周期性的特征。在一个周期内部,它的内存需求往往趋于稳定。这个特性启发我们可以在程序处于一个稳定的周期时暂时关闭LRU监控而在它进入到一个新的周期时再次开启LRU监控。通过这种方法,可以大大减少监控时间和系统开销。但问题是,当监控关闭后,前面所述的WSS跟踪机制本身就不能检测到周期的交替了,所以需要借助另外的方法发现程序内存需求发生的变化并“唤醒”LRU监控。我们发现在内存需求发生剧烈的变化时,一些与访存相关的硬件事件,如DLTB Miss,L2Miss,L1Access等也往往伴随有大幅度的波动。当内存需求比较稳定时,这些事件也会比较稳定。这些硬件事件的数据都能够通过特殊寄存器直接读取到,而且监控的代价是微乎其微的。与访存操作相关的CPU硬件事件有很多,包括L1/L2accesses/misses,TLB accesses/misses等等。因为WSS跟踪是在物理页面的层次上进行的,我们选择的硬件事件应该能够反映页面级别的访存行为的变化。现代的操作系统为了加速内存访问,会先查询数据是否在TLB中,如果没有找到才会查找页表。由于Data TLB能缓存的数据量很小,DTLBMiss和访存操作是最直接相关的。除此之外L1Access,L2Miss也是能直接影响访存行为的事件。通过监控这些特定的CPU事件,可以间接监控程序运行的状态,在程序状态平稳时暂时关闭LRU监控,而程序状态发生突变时唤醒LRU监控,从而最大的降低系统开销。
当多台VM竞争内存资源时,通过计算出每个虚拟机的MRC,可以获取到VM对内存的真实需求,并为内存的动态调度提供决策依据。内存管理器将尝试找到一个最佳的调配策略使得虚拟机整体性能达到最优。
我们在Xen虚拟器管理上实现了内存调配器。IMT控制接口和内存调配器程序运行在叫做Domain0的特权级虚拟机。IMT控制接口通过超级系统调用(Hypercall)关闭或开启WSS跟踪器。图7显示了单机内存资源调配的系统结构图。
内存调配器的关键是调配算法的设计。在考虑算法设计时我们遵循以下原则:
●性能:调整后的内存分配使得虚拟机产生的总的页面交换次数最少。
●公平性:内存调配过程中不应当有虚拟机被“饿死”。
●QoS:保证虚拟机能提供最低标准的服务。
●可扩展性:当物理主机上运行的虚拟机个数增加时算法依然具有普适性。
假设P是物理主机上所有可用内存,V是所有运行的虚拟机的集合,调配后虚拟机VMi的内存为Ti。预测器根据虚拟机VMi的MRC得出的内存需求为WSSi。为了保证QoS,分配给VMi∈V的最小内存为Li。设Ei=max(Li,WSSi)为VMi的内存期望值。当P≥∑Ei时,可用物理内存能够满足所有的VM的内存需求。剩余的(P-∑Ei)可以作为bonus灵活地分配给各个VM。在我们的设计中,是把bonus按照Ei的比例分配给各个VM,即Ti=bonus×(Ei/∑Ei)。当P<∑Ei,那么说明至少有一台虚拟机的内存需求没有得到满足。假设所有的虚拟机具有相同的优先级,我们的目标是要减少系统总的页面失效次数。设虚拟机VMi当前的失效率曲线函数为MRCi(x),访问内存次数为NRi。那么当它的内存分配值为m时,会产生Missi(m)=MRCi(m)×NRi个页面失效。我们的目的是为了找到一组{Ti}使得∑i∈VMissi(Ti)的值最小。
我们采用近似贪心的算法来求最优值。虽然可以在页面的粒度上调整内存大小,但是这样的话找到最优值的时间复杂度就是O(M|v|),其中M是VM可以获得的最大物理页面个数,显然这对于在线算法来说是不现实的。因此我们采用一个较为简单的近似算法,将搜索的步长从一个页面扩大到S。我们以调整两台虚拟机VM1,VM2的内存为例来说明它是如何工作的。
1.将VM1的内存减少S,将VM2的内存增大S;
2.计算调整后的页面失效数C,重复步骤1直至求出C最小值C1;
3.再将VM1的内存增大S,将VM2的内存减小S;
4.计算调整后的页面失效数C,重复步骤3直至求出C最小值C2;
5.选出Min(C1,C2),并将虚拟机各自的内存分配值作为调整后的最终结果。
Claims (10)
1.一种获取虚拟机内存工作集的方法,其步骤为:
1)修改虚拟机管理器VMM的内存页访问机制:将虚拟机VM的所有一级页表的页表项PTE的访问权限设置为系统态;
2)当一内存页面被一虚拟机VM访问时,产生次要页面失效陷入到虚拟机管理器VMM中,虚拟机管理器VMM获取该页面的虚拟地址和其所属的页表地址,并将该页面的页表项PTE的访问权限设置为用户态;
3)虚拟机管理器VMM将每一虚拟机VM访问过的页面地址分别记录到一对应的最近使用LRU直方图中,通过绘制失效率曲线MRC,进而得到每一虚拟机VM的内存工作集。
2.一种虚拟机内存优化分配的方法,其步骤为:
1)修改虚拟机管理器VMM的内存页访问机制:将虚拟机VM的所有一级页表的页表项PTE的访问权限设置为系统态;
2)当一内存页面被一虚拟机VM访问时,产生次要页面失效陷入到虚拟机管理器VMM中,虚拟机管理器VMM获取该页面的虚拟地址和其所属的页表地址,并将该页面的页表项PTE的访问权限设置为用户态;
3)虚拟机管理器VMM将每一虚拟机VM访问过的页面地址分别记录到一对应的最近使用LRU直方图中,通过绘制失效率曲线MRC,进而得到每一虚拟机VM的内存工作集WSS;
4)虚拟机管理器VMM根据虚拟机的内存工作集WSS为每一虚拟机VM按需分配内存。
3.如权利要求1或2所述的方法,其特征在于使用陷入\俘获机制抓取虚拟机的访存地址,采用一FIFO队列动态记录虚拟机俘获的地址;当有新的页面加入到该FIFO队列时,将其页面号加入队尾;如果队列已满,则将队头的页面淘汰,并将其权限重新设为系统态。
4.如权利要求3所述的方法,其特征在于如果设定时间长度内虚拟机VM访问的页面总数与其对应的FIFO队列所能容纳页面数比例大于设定值H,则增大该虚拟机VM的FIFO队列长度;如果设定时间长度内虚拟机VM访问的页面总数与其对应的FIFO队列所能容纳页面数比例小于设定值h,则减小该虚拟机的FIFO队列长度。
5.如权利要求1或2所述的方法,其特征在于使用LRU堆栈存储内存工作集中被访问的页面号,且LRU堆栈每一位置i设置一计数器Hist(i);虚拟机管理器VMM根据每个计数器的值和它在LRU堆栈所处的深度生成一LRU直方图;当一个页面被访问时,首先计算该页面距栈顶的距离dist,将计数器Hist(dist)加一,然后将该页面移到LRU栈顶。
6.如权利要求1或2所述的方法,其特征在于虚拟机管理器VMM将全部的机器地址空间P划分为N个标签,每一标签Ti对应一计数器Hit(i);当一页面被访问时,虚拟机管理器VMM首先定位该页面所对应的标签Ti;然后计算该标签Ti在LRU访问序列中的距离d;然后将该标签Ti移到LRU序列的起始位置,并将计数器Hit(d)加一。
7.如权利要求5所述的方法,其特征在于虚拟机管理器VMM根据每一虚拟机VM的LRU直方图计算该虚拟机VM的失效率 其中,D为LRU堆栈当前深度,d为LRU堆栈减小后的深度。
8.如权利要求5所述的方法,其特征在于虚拟机管理器VMM对LRU堆栈进行监控,并且根据设定的硬件事件状态开启或关闭对LRU堆栈监控;当设定的硬件事件状态变化超过设定阈值时,则开启对LRU堆栈的监控,否则关闭监控。
9.如权利要1或2所述的方法,其特征在于使用LRU堆栈存储内存工作集中被访问的页面号,且LRU堆栈每一位置i设置一计数器Hist(i);虚拟机管理器VMM根据每个计数器的值和它在LRU堆栈所处的深度生成一基于AVL树的LRU直方图,其中为AVL树的每个结点添加一size域,记录以该结点为根的子树结点个数;当一页面被访问时,计算该页面距栈顶的距离 其中,size(x)为以标签x为根的子树的容量,LC(x)表示以标签x为根的子树的左孩子,ANC(x)为返回标签x的祖先y或者Null;然后将该标签x删除,再将它作为AVL树最左的叶子插入。
10.如权利要求1或2所述的方法,其特征在于当台虚拟机VM1和VM2竞争内存资源时,虚拟机管理器VMM调整内存的方法为:
a)将VM1的内存减少S,将VM2的内存增大S;
b)计算调整后的页面失效数C,重复步骤a)、b)直至求出C最小值C1;
c)将VM1的内存增大S,将VM2的内存减小S;
d)计算调整后的页面失效数C,重复步骤c)、d)直至求出C最小值C2;
e)选出Min(C1,C2),并将虚拟机各自的内存分配值作为调整后的最终结果。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410119508.3A CN103885838A (zh) | 2014-03-27 | 2014-03-27 | 一种获取虚拟机内存工作集的方法及内存优化分配方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410119508.3A CN103885838A (zh) | 2014-03-27 | 2014-03-27 | 一种获取虚拟机内存工作集的方法及内存优化分配方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103885838A true CN103885838A (zh) | 2014-06-25 |
Family
ID=50954746
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410119508.3A Pending CN103885838A (zh) | 2014-03-27 | 2014-03-27 | 一种获取虚拟机内存工作集的方法及内存优化分配方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103885838A (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104536800A (zh) * | 2014-09-29 | 2015-04-22 | 杭州华为数字技术有限公司 | 一种虚拟机放置方法及装置 |
CN104598524A (zh) * | 2014-12-23 | 2015-05-06 | 苏州博远容天信息科技有限公司 | Sql server数据库集群多实例内存管理及分配方法 |
CN107783812A (zh) * | 2016-08-24 | 2018-03-09 | 阿里巴巴集团控股有限公司 | 虚拟机内存管理方法及装置 |
CN109923523A (zh) * | 2016-08-29 | 2019-06-21 | 宏潮公司 | 关联工作集和线程 |
CN110865869A (zh) * | 2019-11-05 | 2020-03-06 | 北京大学 | 一种申威架构上的虚拟机访存特征提取方法及系统 |
CN112817767A (zh) * | 2021-02-24 | 2021-05-18 | 上海交通大学 | 分离可组合式架构下的图计算工作集优化实现方法及系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20070049885A (ko) * | 2005-11-09 | 2007-05-14 | 삼성전자주식회사 | 가상 메모리를 제어하는 장치 및 방법 |
CN102193814A (zh) * | 2010-03-09 | 2011-09-21 | 上海拜翰网络科技有限公司 | 嵌入式虚拟化内存动态分配方法及系统 |
US20120117299A1 (en) * | 2010-11-09 | 2012-05-10 | Vmware, Inc. | Efficient online construction of miss rate curves |
-
2014
- 2014-03-27 CN CN201410119508.3A patent/CN103885838A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20070049885A (ko) * | 2005-11-09 | 2007-05-14 | 삼성전자주식회사 | 가상 메모리를 제어하는 장치 및 방법 |
CN102193814A (zh) * | 2010-03-09 | 2011-09-21 | 上海拜翰网络科技有限公司 | 嵌入式虚拟化内存动态分配方法及系统 |
US20120117299A1 (en) * | 2010-11-09 | 2012-05-10 | Vmware, Inc. | Efficient online construction of miss rate curves |
Non-Patent Citations (3)
Title |
---|
WEIMING ZHAO等: "Dynamic memory balancing for virtual machines", 《VEE"09 PROCEEDINGS OF THE 2009 ACM SIGPLAN/SIGOPS INTERNATIONAL CONFERENCE ON VIRTUAL EXECUTION ENVIRONMENTS》 * |
WEIMING ZHAO等: "Efficient LRU-Based Working Set Size", 《MICHIGAN TECHNOLOGICAL UNIVERSITY COMPUTER SCIENCE TECHNICAL REPORT》 * |
WEIMING ZHAO等: "Low Cost Working Set Size Tracking", 《USENIXATC"11 PROCEEDINGS OF THE 2011 USENIX CONFERENCE ON USENIX ANNUAL TECHNICAL CONFERENCE》 * |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104536800A (zh) * | 2014-09-29 | 2015-04-22 | 杭州华为数字技术有限公司 | 一种虚拟机放置方法及装置 |
CN104536800B (zh) * | 2014-09-29 | 2018-05-11 | 杭州华为数字技术有限公司 | 一种虚拟机放置方法及装置 |
CN104598524A (zh) * | 2014-12-23 | 2015-05-06 | 苏州博远容天信息科技有限公司 | Sql server数据库集群多实例内存管理及分配方法 |
CN107783812A (zh) * | 2016-08-24 | 2018-03-09 | 阿里巴巴集团控股有限公司 | 虚拟机内存管理方法及装置 |
CN107783812B (zh) * | 2016-08-24 | 2022-03-08 | 阿里巴巴集团控股有限公司 | 虚拟机内存管理方法及装置 |
CN109923523A (zh) * | 2016-08-29 | 2019-06-21 | 宏潮公司 | 关联工作集和线程 |
CN109923523B (zh) * | 2016-08-29 | 2023-08-25 | 慧与发展有限责任合伙企业 | 计算机系统及用于计算机系统的方法 |
CN110865869A (zh) * | 2019-11-05 | 2020-03-06 | 北京大学 | 一种申威架构上的虚拟机访存特征提取方法及系统 |
CN110865869B (zh) * | 2019-11-05 | 2022-05-03 | 北京大学 | 一种申威架构上的虚拟机访存特征提取方法及系统 |
CN112817767A (zh) * | 2021-02-24 | 2021-05-18 | 上海交通大学 | 分离可组合式架构下的图计算工作集优化实现方法及系统 |
CN112817767B (zh) * | 2021-02-24 | 2021-11-16 | 上海交通大学 | 分离可组合式架构下的图计算工作集优化实现方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Luo et al. | S-cave: Effective ssd caching to improve virtual machine storage performance | |
Xiang et al. | DCAPS: Dynamic cache allocation with partial sharing | |
CN103885838A (zh) | 一种获取虚拟机内存工作集的方法及内存优化分配方法 | |
Zhou et al. | Dynamic tracking of page miss ratio curve for memory management | |
Wang et al. | SWAP: Effective fine-grain management of shared last-level caches with minimum hardware support | |
US9619399B2 (en) | Large-page optimization in virtual memory paging systems | |
US20170364430A1 (en) | Optimization of operating system and virtual machine monitor memory management | |
US8793427B2 (en) | Remote memory for virtual machines | |
KR101761301B1 (ko) | 메모리 자원 최적화 방법 및 장치 | |
US20160378655A1 (en) | Hot page selection in multi-level memory hierarchies | |
CN103870341A (zh) | 一种调整虚拟机资源的方法和系统 | |
KR101587579B1 (ko) | 가상화 시스템에서 메모리 조정방법 | |
Liu et al. | Object-level memory allocation and migration in hybrid memory systems | |
Min et al. | Vmmb: Virtual machine memory balancing for unmodified operating systems | |
CN103631729A (zh) | 一种基于块级的分级存储方法及系统 | |
Wang et al. | Dynamic memory balancing for virtualization | |
Wang et al. | Efficient management for hybrid memory in managed language runtime | |
Choi et al. | Dancing in the dark: Profiling for tiered memory | |
Zhang et al. | “Anti-Caching”-based elastic memory management for Big Data | |
US11385983B1 (en) | Hardware assisted memory profiling aggregator | |
Olson et al. | Cross-layer memory management to improve dram energy efficiency | |
Jiang et al. | A cost-aware buffer management policy for flash-based storage devices | |
US8650367B2 (en) | Method and apparatus for supporting memory usage throttling | |
Prabhakar et al. | Adaptive multi-level cache allocation in distributed storage architectures | |
Koller et al. | Estimating application cache requirement for provisioning caches in virtualized systems |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20140625 |