一种基于远程SSD的虚拟机内存扩展方法及系统与流程

文档序号:11276097阅读:229来源:国知局
一种基于远程SSD的虚拟机内存扩展方法及系统与流程

本发明涉及高性能虚拟化技术领域,特别涉及一种基于远程ssd的虚拟机内存扩展方法及系统。



背景技术:

大规模科学计算、大型内存数据库、海量数据分析与挖掘等高端应用对内存容量的要求较高,“大内存”系统不仅能够满足此类应用的需求,且与分布式方案相比,单一内存地址空间的编程模型更加简单易用,能够降低用户的心智负担、提高生产力,但是,大内存系统是一种scale-up的方案,受限于颗粒价格、插槽数量、容量密度等,大内存系统的售价较高、容量有限,当前商用服务器所主流采用的ddr(doubledatarate)内存技术,其设计为带宽而优化但功耗较高;在当前的数据中心中,内存能耗占比可达25%~30%,传统的采用磁盘作为内存后备的swap方式,受限于机械硬盘与内存的巨大性能差距,实际效果并不理想,难以满足大型应用的需求。

以infiniband、roce为代表的高性能网络技术发展迅速,当前主流的infinibandfdr网络的延迟可低至1微秒,而本地机械硬盘的访问延迟却在毫秒量级,性能上大幅落后于高性能网络,固态硬盘(solidstatedrive,ssd)采用了高速闪存颗粒阵列的结构,其并行度高、访问延迟低,性能相比传统机械硬盘有了显著提升;与传统sata/sas接口相比,基于pcie的nvme接口规范大幅简化了协议,进一步释放了ssd架构与nvm介质的性能潜力,目前,高端pciessd的访问延迟可低至20微秒以内,随着tlcnand以及3dnand闪存技术的成熟与普及,ssd的成本将得到进一步的降低,而以3dxpoint技术为代表的新型存储介质将进一步提高ssd的性能、容量以及耐久度,与内存相比,ssd在容量、功耗、成本方面的优势明显,目前许多方案已经采用ssd作为内存扩展层或者磁盘加速层。

在现代数据中心中,不同的应用、不同的时段对资源的需求不尽相同,故而很难设计cpu、内存、ssd资源均衡的服务器系统,在实际部署时往往采取超额配置(over-provision)的策略,但这导致了资源的低利用率以及总体拥有成本的提高。资源解聚(disaggregation)被提出以解决资源不均衡的挑战以及资源浪费的问题,这种模式将各项资源从服务器中解离并分别组成资源池,从而实现物理基础设施的细粒度灵活供给;资源池之间则通过高性能网络实现互联与远程访问。而回到传统的以服务器为中心的模式,例如ssd阵列存储的访问、跨节点ssd的共享等的场景也均需通过高性能网络。所以,远程ssd资源访问是一种常见的方式;基于高性能网络远程访问高性能ssd是扩展虚拟机内存、满足应用需求的一种兼顾成本、性能以及资源利用率的方法。

虚拟化是云计算的基础技术,但云中虚拟机的资源容量受限于物理宿主机资源配置,而对非本机内存与存储资源的共享与利用,传统的nas/nfs/smb、san/iscsi等的方案受限于协议处理的开销,无法提供最佳性能表现;fatcache、tachyon/alluxio等软件方案虽基于标准网络接口,无额外的协议处理开销,但其提供了自有的api接口,需要修改应用,兼容性方面存在一定的限制,flashcache、readyboost等本机方案由操作系统实现,能够对应用透明地实现对本地ssd的利用,但其需要修改内核,开发调试复杂且不利于维护。



技术实现要素:

针对现有技术的不足,本发明提出一种基于远程ssd的虚拟机内存扩展方法及系统。

本发明的一种基于远程ssd的虚拟机内存扩展方法,其中,包括:

在虚拟化节点中创建并运行虚拟机,所述虚拟化节点在进行二级页表缺页处理时,首先在本地内存为虚拟机分配内存空间,当本地内存使用量达到设定的阈值后,将部分本地内存分页置换至远程ssd节点,所述虚拟化节点通过影子客户物理地址映射表维护所述部分本地内存分页至所述远程ssd节点的分布,所述远程ssd节点在接收到分页数据后首先存于所述远程ssd节点的本地内存,当所述远程ssd节点的本地内存使用量达到设定的阈值后,将所述部分内存分页置换至本地ssd存储。

上述的基于远程ssd的虚拟机内存扩展方法,其中,所述虚拟化节点二级页表缺页处理,具体包括如下步骤:

步骤s100,若发生客户物理内存的二级页表缺页后切换至宿主模式,由宿主虚拟机监视器进行二级页表缺页处理;

步骤s200,进行二级页表缺页原因判断;

步骤s300,若二级页表缺页原因是二级页表尚未建立,则检查本地内存的使用量是否达到设定的阈值;

步骤s400,若本地内存的使用量尚未达到阈值,则在本地内存分配物理页框;

步骤s500,若本地内存的使用量已达到阈值,则执行分页换出流程,将部分本地内存分页置换至ssd节点并释放以得到空闲页框;

步骤s500’,若二级页表缺页原因是部分本地内存分页已被换出,则将部分本地内存分页置换至所述远程ssd节点并释放以得到空闲页框;

步骤s600,执行分页换入流程,从所述远程ssd节点读取需要的分页数据并存储至步骤s500’所释放的空闲页框;

步骤s700,更新二级页表,将二级页表缺页的客户物理地址映射至步骤s400或步骤s500或步骤s600释放的空闲页框中。

上述的基于远程ssd的虚拟机内存扩展方法,其中,所述s500中分页换出流程,具体包括如下步骤:

步骤s530,将部分本地内存分页传输至选择的所述远程ssd节点;

步骤s540,等待所述远程ssd节点的返回信息,若返回失败或超时,则重新选择所述远程ssd节点并发送部分本地内存分页;

步骤s550,若部分本地内存分页传输成功,则更新影子客户物理地址映射表,加入当前客户物理地址至接收部分本地内存分页的所述远程ssd节点的映射;

步骤s560,更新二级页表,清除已换出的客户物理分页映射并记录相关信息;

步骤s570,刷新tlb缓存以清除已换出的客户物理地址的失效映射缓冲。

上述的基于远程ssd的虚拟机内存扩展方法,其中,分页换出步骤中所述的ssd节点接收部分本地内存分页,具体包含如下步骤:

步骤s541,将部分本地内存分页传输至所述远程ssd节点预分配的缓冲区;

步骤s542,所述远程ssd节点检查所述远程ssd节点的本地内存的使用情况;

步骤s543,若所述远程ssd节点的本地内存的使用量已达到设定的阈值,则内存槽;

步骤s544,分配新的ssd槽并写入内存槽中的数据,更新ssd槽地址表,将原存储的客户物理地址映射至ssd槽,释放内存槽;

步骤s545,将缓冲区的部分本地内存分页写入内存槽,更新内存槽地址表,建立新接收的客户物理地址至内存槽的映射;

步骤s546,若所述远程ssd节点的本地内存的使用量未达到设定的阈值,则分配新的内存槽并写入缓冲区的部分本地内存分页,更新内存槽地址表,建立新接收的客户物理地址至内存槽的映射;

步骤s547,更新分页映射表,建立接收的客户物理分页的映射。

上述的基于远程ssd的虚拟机内存扩展方法,其中,步骤s600中分页换入流程,具体包括如下步骤:

步骤s601,虚拟化节点根据客户物理地址查询影子客户物理地址映射表确定部分本地内存分页所在的所述远程ssd节点;

步骤s602,虚拟化节点向所述远程ssd节点发起分页数据读取请求;

步骤s603,所述远程ssd节点在接收到分页数据读取请求后根据客户物理地址查询分页映射表,确定部分本地内存分页所属的内存槽或ssd槽;

步骤s604,所述远程ssd节点进一步查询内存槽地址表或ssd槽地址表确定部分本地内存分页的存储地址;

步骤s605,所述远程ssd节点根据存储地址从内存或ssd中读取部分本地内存至预先分配的缓冲区;

步骤s606,所述远程ssd节点将部分本地内存传输至虚拟化节点;

步骤s607,虚拟化节点在接收到部分本地内存后将其拷贝至释放的空闲页框中;

步骤s608,虚拟化节点更新二级页表,恢复页表信息并将页表描述符指向空闲页框;

步骤s609,虚拟化节点刷新tlb缓存,确保清除已失效的客户物理地址映射缓冲;

步骤s610,虚拟化节点释放所述远程ssd节点的对应内存槽或ssd槽。

本发明还提供一种基于远程ssd的虚拟机内存扩展系统,其中,包括:

扩展模块,用于在虚拟化节点中创建并运行虚拟机,所述虚拟化节点在进行二级页表缺页处理时,首先在本地内存为虚拟机分配内存空间,当本地内存使用量达到设定的阈值后,将部分本地内存分页置换至远程ssd节点,所述虚拟化节点通过影子客户物理地址映射表维护所述部分本地内存分页至所述远程ssd节点的分布,所述远程ssd节点在接收到分页数据后首先存于所述远程ssd节点的本地内存,当所述远程ssd节点的本地内存使用量达到设定的阈值后,将所述部分内存分页置换至本地ssd存储。

上述的基于远程ssd的虚拟机内存扩展系统,其中,所述虚拟化节点二级页表缺页处理,具体包括如下步骤:

步骤s100,若发生客户物理内存的二级页表缺页后切换至宿主模式,由宿主虚拟机监视器进行二级页表缺页处理;

步骤s200,进行二级页表缺页原因判断;

步骤s300,若二级页表缺页原因是二级页表尚未建立,则检查本地内存的使用量是否达到设定的阈值;

步骤s400,若本地内存的使用量尚未达到阈值,则在本地内存分配物理页框;

步骤s500,若本地内存的使用量已达到阈值,则执行分页换出流程,将部分本地内存分页置换至ssd节点并释放以得到空闲页框;

步骤s500’,若二级页表缺页原因是部分本地内存分页已被换出,则将部分本地内存分页置换至所述远程ssd节点并释放以得到空闲页框;

步骤s600,执行分页换入流程,从所述远程ssd节点读取需要的分页数据并存储至步骤s500’所释放的空闲页框;

步骤s700,更新二级页表,将二级页表缺页的客户物理地址映射至步骤s400或步骤s500或步骤s600释放的空闲页框中。

上述的基于远程ssd的虚拟机内存扩展系统,其中,所述s500中分页换出流程,具体包括如下步骤:

步骤s530,将部分本地内存分页传输至选择的所述远程ssd节点;

步骤s540,等待所述远程ssd节点的返回信息,若返回失败或超时,则重新选择所述远程ssd节点并发送部分本地内存分页;

步骤s550,若部分本地内存分页传输成功,则更新影子客户物理地址映射表,加入当前客户物理地址至接收部分本地内存分页的所述远程ssd节点的映射;

步骤s560,更新二级页表,清除已换出的客户物理分页映射并记录相关信息;

步骤s570,刷新tlb缓存以清除已换出的客户物理地址的失效映射缓冲。

上述的基于远程ssd的虚拟机内存扩展系统,其中,分页换出步骤中所述的ssd节点接收部分本地内存分页,具体包含如下步骤:

步骤s541,将部分本地内存分页传输至所述远程ssd节点预分配的缓冲区;

步骤s542,所述远程ssd节点检查所述远程ssd节点的本地内存的使用情况;

步骤s543,若所述远程ssd节点的本地内存的使用量已达到设定的阈值,则内存槽;

步骤s544,分配新的ssd槽并写入内存槽中的数据,更新ssd槽地址表,将原存储的客户物理地址映射至ssd槽,释放内存槽;

步骤s545,将缓冲区的部分本地内存分页写入内存槽,更新内存槽地址表,建立新接收的客户物理地址至内存槽的映射;

步骤s546,若所述远程ssd节点的本地内存的使用量未达到设定的阈值,则分配新的内存槽并写入缓冲区的部分本地内存分页,更新内存槽地址表,建立新接收的客户物理地址至内存槽的映射;

步骤s547,更新分页映射表,建立接收的客户物理分页的映射。

上述的基于远程ssd的虚拟机内存扩展系统,其中,步骤s600中分页换入流程,具体包括如下步骤:

步骤s601,虚拟化节点根据客户物理地址查询影子客户物理地址映射表确定部分本地内存分页所在的所述远程ssd节点;

步骤s602,虚拟化节点向所述远程ssd节点发起分页数据读取请求;

步骤s603,所述远程ssd节点在接收到分页数据读取请求后根据客户物理地址查询分页映射表,确定部分本地内存分页所属的内存槽或ssd槽;

步骤s604,所述远程ssd节点进一步查询内存槽地址表或ssd槽地址表确定部分本地内存分页的存储地址;

步骤s605,所述远程ssd节点根据存储地址从内存或ssd中读取部分本地内存至预先分配的缓冲区;

步骤s606,所述远程ssd节点将部分本地内存传输至虚拟化节点;

步骤s607,虚拟化节点在接收到部分本地内存后将其拷贝至释放的空闲页框中;

步骤s608,虚拟化节点更新二级页表,恢复页表信息并将页表描述符指向空闲页框;

步骤s609,虚拟化节点刷新tlb缓存,确保清除已失效的客户物理地址映射缓冲;

步骤s610,虚拟化节点释放所述远程ssd节点的对应内存槽或ssd槽。

由以上方案可知,本发明的优点在于:

1.相比dram内存,ssd在价格、容量、功耗方面优势明显,与传统机械硬盘相比,ssd单位性能价格已大幅领先,且随着新工艺技术的发展与成熟,ssd与机械硬盘单位容量价格的差距也将进一步拉近,采用ssd作为内存扩展是一种极具性价比的方案。

2.新型介质技术将进一步提高ssd的性能、容量、耐久度,更加适合作为内存的后备与扩展;本发明同样适用于采用新型介质的ssd,将随着ssd技术的进一步革新获得更为显著的益处。

3.高性能网络的性能远优于本地磁盘,通过高性能网络访问远程ssd并没有引入显著的开销,同时有助于跨节点的ssd资源共享以及ssd资源的池化,从而进一步提高资源利用率并降低总体拥有成本,符合数据中心资源解聚的发展趋势。

4.与已有的方案相比,本发明由虚拟化软件实现,可应用于标准商品硬件平台,不依赖专用存储产品,没有额外协议处理开销,不需修改操作系统,且对应用透明。

附图说明

图1是本发明的通过远程ssd扩展虚拟机内存的系统及方法的示意图;

图2是本发明涉及的虚拟化多级地址翻译的示意图;

图3是本发明支持的对ssd设备访问方式的示意图;

图4是本发明的分布式分页数据映射机制的示意图;

图5是本发明的二级页表缺页处理的流程图;

图6是本发明的分页换出的流程图;

图7是本发明的分页数据于ssd节点存储的流程图;

图8是本发明的分页换入的流程图。

具体实施方式

本发明的目的是提供一种基于远程ssd的虚拟机内存扩展方法,即采用大容量、高性能、低成本、低功耗的ssd作为内存的后备存储,且远程ssd的部署方式有助于资源共享与池化;内存分页的分布式管理由虚拟化软件实现,无需修改操作系统并对应用透明。

本发明所述的方法面向数据中心环境,涉及虚拟化节点与ssd资源节点两类节点,节点间通过高性能rdma网络进行通信。所述虚拟化节点至少包含cpu处理器、内存、nic网卡等硬件资源,运行操作系统及虚拟机监视器等虚拟化软件,负责运行客户虚拟机操作系统;虚拟化节点应提供硬件虚拟化支持。所述ssd资源节点除了包含cpu处理器、内存、nic网卡等基本硬件组件外,还包括ssd存储资源,并运行操作系统,负责提供对ssd资源的访问。所述高性能rdma网络负责提供低延迟、高带宽的网络通信服务,并提供类内存语义的rdma通信接口。在本发明所述的内存扩展方法中,所述虚拟化节点作为发起ssd存储请求的客户端,所述ssd节点作为提供ssd存储服务的服务端。

本发明所述的虚拟化节点应提供的硬件虚拟化支持主要要求基于硬件的处理器与内存虚拟化机制,尤其是内存虚拟化,需提供由硬件加速客户逻辑地址-客户物理地址-宿主物理地址的多级地址翻译,以及页目录寄存器配置、tlb缓存刷新、缺页处理等的支持。

本发明所述的ssd节点操作系统提供的对ssd资源的访问,包括通过文件系统层接口、块i/o层接口、公共设备接口(直接内核设备驱动访问)等,本发明所述的ssd访问方式还包括通过用户态驱动实现完全内核旁路的设备直接访问,以获得最佳性能。

本发明公开的基于远程ssd的虚拟机内存扩展方法,于所述虚拟化节点创建运行虚拟机,所述ssd节点的远程ssd资源具备不低于虚拟机内存大小的存储空间,所述虚拟化节点在进行二级页表缺页处理时,首先于本地内存分配内存供虚拟机使用;待本地内存使用量达到设定的限制后,按照既定的策略将部分本地内存分页通过所述高性能rdma网络置换至ssd节点,所述虚拟化节点通过影子客户物理地址映射表维护已经换出的内存分页至ssd节点的分布,所述ssd节点在接收到分页数据后首先存于所述ssd节点的本地内存,待所述ssd节点的本地内存使用量达到设定的限制后,按照既定的策略将部分内存分页置换至本地ssd存储,ssd节点使用内存槽或ssd槽存放分页数据,每个内存槽或ssd槽存放一页数据。ssd节点通过分页映射表索引分页数据的分布,并进一步映射至内存槽地址表或ssd槽地址表,从而最终得到存储分页数据的槽的地址。

所述的虚拟化节点二级页表缺页处理,具体包括如下步骤:

步骤s100,发生客户物理内存缺页异常后切换至宿主模式,由宿主虚拟机监视器进行缺页处理。

步骤s200,进行缺页原因判断。

步骤s300,若缺页原因是二级页表尚未建立,那么检查本地内存的使用是否达到设定的限制。

步骤s400,若本地内存的使用尚未达到限制,则于本地内存分配物理页框。

步骤s500,若本地内存的使用已达到限制,则触发分页换出流程,将部分本地内存分页换出至ssd节点并释放以得到空闲页框。

步骤s500’,若缺页原因是分页已被换出,则触发分页换出流程,将部分本地内存分页换出至ssd节点并释放以得到空闲页框。

步骤s600,执行分页换入,从ssd节点读取需要的分页数据并存储至步骤s500’所释放的页框。

步骤s700,更新二级页表,将缺页的客户物理地址映射至s400或s500或s600生成的物理页框。

步骤s800,返回客户模式继续虚拟机的执行。

二级页表缺页处理步骤中所述的分页换出,具体包括如下步骤:

步骤s510,根据既定的分页置换策略选择用于换出的分页;其中,分页置换策略可以是先进先出或最近最少使用或最不经常使用,但本发明并不以此为限。

步骤s520,根据既定的节点选择策略选择用于换出的ssd节点;节点选择策略可以是轮转或优先级或哈希散列,但本发明并不以此为限。

步骤s530,通过rdma操作将分页数据传输至选定的ssd节点。

步骤s540,等待ssd节点的返回;若返回失败或超时,则回退执行步骤s520以重新选择ssd节点并发送分页数据。

步骤s550,若分页数据传输成功,则更新影子客户物理地址映射表,加入当前客户物理地址至接收分页数据的ssd节点的映射。

步骤s560,更新二级页表,清除已换出的客户物理分页映射并记录其权限位、页描述符等相关信息。

步骤s570,刷新tlb缓存以清除已换出的客户物理地址的失效映射缓冲。

分页换出步骤中所述的ssd节点接收分页数据,具体包含如下步骤:

步骤s541,rdma操作将分页数据传输至ssd节点预分配的缓冲区。

步骤s542,ssd节点检查本地内存的使用情况。

步骤s543,若本地内存的使用已达到设定的上限,则根据既定的分页置换策略选择内存槽。

步骤s544,分配新的ssd槽并写入步骤s543选定的内存槽数据,更新ssd槽地址表,将原存储的客户物理地址映射至ssd槽。

步骤s545,将缓冲区的分页数据写至步骤s544所释放的内存槽,更新内存槽地址表,建立新接收的客户物理地址至内存槽的映射。

步骤s546,若本地内存的使用未达到设定的上限,则分配新的内存槽并写入缓冲区的分页数据,更新内存槽地址表,建立新接收的客户物理地址至内存槽的映射。

步骤s547,更新分页映射表,建立接收的客户物理分页的映射。

步骤s548,返回操作成功。

二级页表缺页处理步骤中所述的分页换入,具体包括如下步骤:

步骤s601,虚拟化节点根据客户物理地址查询影子客户物理地址映射表确定分页数据所在的ssd节点。

步骤s602,虚拟化节点向查得的ssd节点发起分页数据读取请求。

步骤s603,ssd节点在接收到请求后根据客户物理地址查询分页映射表,确定分页所属的内存槽或ssd槽。

步骤s604,ssd节点进一步查询内存槽地址表或ssd槽地址表确定分页数据的存储地址。

步骤s605,ssd节点根据上述地址从内存或ssd中读取分页数据至预先分配的缓冲区。

步骤s606,ssd节点通过rdma操作将数据传输至虚拟化节点。

步骤s607,虚拟化节点在接收到分页数据后将其拷贝至此前释放的物理页框中。

步骤s608,虚拟化节点更新二级页表,恢复此前记录的页表信息并将页表描述符指向上述的物理页框。

步骤s609,虚拟化节点刷新tlb缓存,确保清除已失效的客户物理地址映射缓冲。

步骤s610,虚拟化节点通过rdmarpc释放ssd节点的对应内存槽或ssd槽。

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明的一种基于远程ssd的虚拟机内存扩展方法进行进一步的详细说明。应当理解,此处所描述的具体实施例仅用于解释本发明,并不用于限定本发明。

本发明的一种基于远程ssd的虚拟机内存扩展方法,面向数据中心环境,其核心是由虚拟机监视器软件在进行客户虚拟机内存的页表管理时,将内存分页通过高性能网络跨节点与远程ssd进行置换,从而实现对客户操作系统及上层应用的透明内存扩展。

如图1所示,本发明所述方法的实现主要涉及虚拟化节点110与ssd节点120两类节点,节点间通过高性能rdma网络130进行通信。虚拟化节点110负责提供虚拟化支持并运行虚拟机,其至少包含cpu处理器111、内存112、nic网卡113等物理资源,并运行os操作系统及vmm虚拟机监视器114等虚拟化软件。os/vmm114可以是直接运行于裸机之上的type-i类虚拟机监视器,也可以是内嵌于传统操作系统中的type-ii类虚拟机监视器;os/vmm114负责提供对物理资源的隔离复用以及虚拟化环境,通过虚拟机抽象运行客户操作系统115。本发明要求虚拟化节点110应提供硬件虚拟化支持,而非基于软件的虚拟化方案。虚拟化节点110通过高性能rdma网络130访问拥有ssd资源的节点120,高性能rdma网络130提供低延迟、高带宽的网络通信服务,并提供类内存语义的rdma通信接口,比如infiniband、roce、iwarp等。ssd节点120除了包含cpu处理器111、内存112、nic网卡113等基本组件外,还包括ssd存储资源121,比如配有ssd的服务器节点、专用的ssd存储阵列等;ssd节点120运行操作系统122,可以是通用操作系统或者定制的存储专用操作系统等。从c/s模型的角度来看,虚拟化节点110可视作发起ssd存储请求的客户端,ssd节点120可视作提供ssd存储服务的服务端。单一虚拟化节点110客户端可以使用多个ssd节点120服务端作为其内存扩展与后备;同一虚拟化节点110的不同内存扩展ssd节点120之间可以各自存储独立的数据子集以最大限度地利用ssd资源,也可以互为镜像冗余以提供数据的高可用支持。

虚拟化节点110基于硬件内存虚拟化机制。现代处理器的内存管理单元大都提供了多级页表支持,即由硬件来加速客户逻辑地址-客户物理地址-宿主物理地址的多级地址翻译,比如intelept、amdnpt、armstage-2mmu等。得益于硬件加速的支持,虚拟机的内存效能有了大幅提升,多数应用场景下与裸机性能已无显著差别。如图2所示,客户虚拟地址211由客户/一级页表212映射得到客户物理地址213,再进一步由宿主/二级页表221翻译得到宿主物理地址222。上述过程由硬件加速,当页表映射存在时,处理器通过多级查询页表(pagewalk)以确定客户虚拟地址211所对应的宿主物理地址222,并支持虚地址映射缓冲(tlb缓存)以加速地址查询。当页表映射不存在时,处理器提供了缺页处理机制,即遇到缺页错误时硬件自动切换至更高级的特权模式以进行页表的维护,结束后返回原上下文环境以继续执行。一级页表212由客户操作系统210维护,其处理机制与传统操作系统的页表管理无异,客户操作系统210仍具有页目录寄存器设置、tlb缓存刷新、缺页执行等的权限。二级页表221由宿主虚拟机监视器220维护,客户虚拟机运行遇到二级页表缺页错误后将切换至宿主模式由虚拟机监视器220调配分页并填补页表。

ssd节点120的操作系统122提供对ssd资源121的软件访问接口。如图3所示,上层应用340对底层ssd设备或阵列310的访问可通过传统操作系统内核320。一般的,可通过传统操作系统文件系统323提供的接口访问。为获得更佳的性能,可采取直接打开的方式绕过文件系统层323而通过内核块i/o层322访问ssd。若要访问底层设备特性,可通过操作系统的公共设备接口机制(比如linuxioctl)直接访问内核设备驱动321;此种方式旁路了内核存储软件栈,可获得更佳的性能。不过,直接访问内核设备驱动的方式仍然存在用户态-内核态以及内核驱动中断处理的上下文切换的开销,要获得最佳的性能,可通过用户态驱动330实现完全内核旁路的设备直接访问。基于现代硬件平台的i/o子系统可以较容易的实现用户态设备驱动,比如x86平台的iommu提供了对dma与中断的重映射及隔离的硬件级支持,大大降低了安全的用户态驱动的实现难度。

本发明的方法在创建虚拟机时声明用户要求大小的客户虚拟机物理内存地址空间,远程ssd资源具备不低于该虚拟机内存大小的存储空间。如图4所示,虚拟化节点410在进行二级页表缺页处理时,首先于本地内存分配内存供虚拟机使用,可用的本地内存大小是可配置的。待本地内存用量达到设定的限制后,按照既定的策略将部分本地内存分页置换至ssd节点420;置换策略可以是先进先出、最近最少使用、最不经常使用等。虚拟化节点410通过影子客户物理地址映射表411维护已经换出的内存分页至ssd节点420的分布;一种简单的实现可以采用键值(key-value)哈希结构,即以客户物理地址作为key、以远程ssd节点作为value,记录被换出的客户物理分页所位于的ssd节点420。ssd节点420接收到分页数据后首先存于本地内存,待本地内存用量达到设定的限制后,将部分内存分页置换至本地ssd存储。ssd节点420将本地内存与ssd存储均视为线性连续的存储空间,使用内存槽或ssd槽存放分页数据,每个内存槽或ssd槽存放一页数据。ssd节点420通过分页映射表421索引分页数据的分布,分页物理地址可进一步映射至内存槽地址表422或ssd槽地址表423,最终得到存储分页数据的槽的地址。本发明的方法可看作构建了“本地内存-远程内存-远程ssd”的三层存储层级。

如图5所示,虚拟化节点按如下步骤进行二级页表的缺页处理:

步骤s100,虚拟机在运行时发生客户物理内存缺页异常,由硬件平台自动切换至宿主模式,再由宿主虚拟机监视器进行二级页表的缺页处理。

步骤s200,宿主虚拟机监视器进行缺页原因判断;在本发明机制下,只有两种原因能够导致缺页异常:二级页表尚未建立、分页已被换出至ssd节点。

步骤s300,若缺页原因是二级页表尚未建立,那么检查本地内存的使用是否达到设定的限制,即本地是否仍有空闲内存。

步骤s400,若本地内存的使用尚未达到限制,则宿主虚拟机监视器于本地内存分配物理页框(pageframe)以准备供虚拟机使用;本步骤与通常的虚拟机二级页表维护机制无异。

步骤s500,若本地内存的使用已达到限制,则宿主虚拟机监视器触发分页换出流程,将部分本地内存分页换出至ssd节点并释放以得到空闲页框。

步骤s500’,若缺页原因是分页已被换出,则说明所需内存分页已存在但存储于远程ssd中,且此时本地已无空闲内存。遂触发分页换出流程,将部分本地内存分页并换出至ssd节点并释放以得到空闲页框。

步骤s600,宿主虚拟机监视器执行分页换入流程,从ssd节点读取需要的分页数据并存储至步骤s500’所释放的页框。

步骤s700,宿主虚拟机监视器更新二级页表,将缺页的客户物理地址映射至s400或s500或s600生成的物理页框。

步骤s800,宿主虚拟机监视器加载客户寄存器状态至处理器并返回客户模式,继续客户虚拟机的执行。

这样,客户内存分页的置换、分页映射表的维护均由宿主虚拟机监视器完成;对客户虚拟机而言,内存是透明扩展的,无需应用与操作系统的修改。

如图6所示,上述步骤s500与s500’的分页换出具体包含如下步骤:

步骤s510,宿主虚拟机监视器根据既定的分页置换策略选择用于换出的分页;置换策略可以是先进先出、最近最少使用、最不经常使用等。

步骤s520,宿主虚拟机监视器根据既定的节点选择策略选择用于换出的ssd节点;选择策略可以是轮转、优先级、哈希散列等。

步骤s530,宿主虚拟机监视器发起rdma操作,将分页数据传输至选定的ssd节点。

步骤s540,宿主虚拟机监视器等待ssd节点的返回;若返回失败或超时,则回退执行步骤s520重新选择ssd节点并发送分页数据。

步骤s550,若分页数据传输成功,则宿主虚拟机监视器更新影子客户物理地址映射表,将当前客户物理地址映射至接收分页数据的ssd节点。

步骤s560,宿主虚拟机监视器更新二级页表,将换出的客户物理分页存在位清零(即设为不存在)并记录权限位、页描述符等相关信息。

步骤s570,宿主虚拟机监视器刷新tlb缓存以清除换出的客户物理地址的失效映射缓冲。

如图7所示,上述步骤中ssd节点接收分页数据的处理包含如下步骤:

步骤s541,通过rdma操作,分页数据已传输至ssd节点预分配的缓冲区。

步骤s542,ssd节点检查本地内存的使用情况。

步骤s543,若本地内存的使用已达到设定的上限,即本地已无空闲内存,则ssd节点根据既定的分页置换策略选择用于置换至ssd的内存槽;置换策略可以是先进先出、最近最少使用、最不经常使用等。

步骤s544,ssd节点分配新的ssd槽,将步骤s543选定的内存槽数据写入ssd槽,然后更新ssd槽地址表,即将置换至ssd的分页的客户物理地址映射至对应ssd槽;之后释放步骤s543选定的内存槽。

步骤s545,ssd节点将缓冲区的分页数据写至步骤s544所释放的内存槽,更新内存槽地址表,建立新接收的客户物理地址与相应内存槽地址的映射关系。

步骤s546,若本地内存的使用未达到设定的上限,即本地仍有空闲内存,则ssd节点分配新的内存槽并将缓冲区的分页数据写至新分配的内存槽,更新内存槽地址表,建立新接收的客户物理地址与新分配的内存槽地址的映射关系。

步骤s547,ssd节点更新分页映射表,建立客户物理分页至内存槽或ssd槽的映射关系。

步骤s548,ssd节点返回虚拟化节点操作成功。

如图8所示,上述步骤s600的分页换入具体包含如下步骤:

步骤s601,虚拟化节点根据客户物理地址查询影子客户物理地址映射表确定分页数据所在的ssd节点。

步骤s602,虚拟化节点向查得的ssd节点发起分页数据读取请求,客户物理地址作为请求参数。

步骤s603,ssd节点在接收到请求后根据客户物理地址查询分页映射表,确定分页所属的内存槽或ssd槽。

步骤s604,ssd节点进一步查询内存槽地址表或ssd槽地址表确定分页数据的存储地址。

步骤s605,ssd节点根据地址从内存或ssd中读取分页数据至预先分配的缓冲区。

步骤s606,ssd节点通过rdma操作将数据传输至虚拟化节点。

步骤s607,虚拟化节点在接收到分页数据后将其拷贝至此前释放的物理页框中。

步骤s608,虚拟化节点更新二级页表,恢复此前记录的页表信息(比如权限等)并将页表描述符指向接收分页数据的物理页框。

步骤s609,虚拟化节点刷新tlb缓存,确保清除已失效的客户物理地址映射缓冲。

步骤s610,虚拟化节点通过rdmarpc释放ssd节点的对应内存槽或ssd槽。

本发明还提出一种基于远程ssd的虚拟机内存扩展系统,包括:

扩展模块,用于在虚拟化节点中创建并运行虚拟机,所述虚拟化节点在进行二级页表缺页处理时,首先在本地内存为虚拟机分配内存空间,当本地内存使用量达到设定的阈值后,将部分本地内存分页置换至远程ssd节点,所述虚拟化节点通过影子客户物理地址映射表维护所述部分本地内存分页至所述远程ssd节点的分布,所述远程ssd节点在接收到分页数据后首先存于所述远程ssd节点的本地内存,当所述远程ssd节点的本地内存使用量达到设定的阈值后,将所述部分内存分页置换至本地ssd存储。

所述虚拟化节点二级页表缺页处理,具体包括如下步骤:

步骤s100,若发生客户物理内存的二级页表缺页后切换至宿主模式,由宿主虚拟机监视器进行二级页表缺页处理;

步骤s200,进行二级页表缺页原因判断;

步骤s300,若二级页表缺页原因是二级页表尚未建立,则检查本地内存的使用量是否达到设定的阈值;

步骤s400,若本地内存的使用量尚未达到阈值,则在本地内存分配物理页框;

步骤s500,若本地内存的使用量已达到阈值,则执行分页换出流程,将部分本地内存分页置换至ssd节点并释放以得到空闲页框;

步骤s500’,若二级页表缺页原因是部分本地内存分页已被换出,则将部分本地内存分页置换至所述远程ssd节点并释放以得到空闲页框;

步骤s600,执行分页换入流程,从所述远程ssd节点读取需要的分页数据并存储至步骤s500’所释放的空闲页框;

步骤s700,更新二级页表,将二级页表缺页的客户物理地址映射至步骤s400或步骤s500或步骤s600释放的空闲页框中。

所述s500中分页换出流程,具体包括如下步骤:

步骤s530,将部分本地内存分页传输至选择的所述远程ssd节点;

步骤s540,等待所述远程ssd节点的返回信息,若返回失败或超时,则重新选择所述远程ssd节点并发送部分本地内存分页;

步骤s550,若部分本地内存分页传输成功,则更新影子客户物理地址映射表,加入当前客户物理地址至接收部分本地内存分页的所述远程ssd节点的映射;

步骤s560,更新二级页表,清除已换出的客户物理分页映射并记录相关信息;

步骤s570,刷新tlb缓存以清除已换出的客户物理地址的失效映射缓冲。

分页换出步骤中所述的ssd节点接收部分本地内存分页,具体包含如下步骤:

步骤s541,将部分本地内存分页传输至所述远程ssd节点预分配的缓冲区;

步骤s542,所述远程ssd节点检查所述远程ssd节点的本地内存的使用情况;

步骤s543,若所述远程ssd节点的本地内存的使用量已达到设定的阈值,则内存槽;

步骤s544,分配新的ssd槽并写入内存槽中的数据,更新ssd槽地址表,将原存储的客户物理地址映射至ssd槽,释放内存槽;

步骤s545,将缓冲区的部分本地内存分页写入内存槽,更新内存槽地址表,建立新接收的客户物理地址至内存槽的映射;

步骤s546,若所述远程ssd节点的本地内存的使用量未达到设定的阈值,则分配新的内存槽并写入缓冲区的部分本地内存分页,更新内存槽地址表,建立新接收的客户物理地址至内存槽的映射;

步骤s547,更新分页映射表,建立接收的客户物理分页的映射。

步骤s600中分页换入流程,具体包括如下步骤:

步骤s601,虚拟化节点根据客户物理地址查询影子客户物理地址映射表确定部分本地内存分页所在的所述远程ssd节点;

步骤s602,虚拟化节点向所述远程ssd节点发起分页数据读取请求;

步骤s603,所述远程ssd节点在接收到分页数据读取请求后根据客户物理地址查询分页映射表,确定部分本地内存分页所属的内存槽或ssd槽;

步骤s604,所述远程ssd节点进一步查询内存槽地址表或ssd槽地址表确定部分本地内存分页的存储地址;

步骤s605,所述远程ssd节点根据存储地址从内存或ssd中读取部分本地内存至预先分配的缓冲区;

步骤s606,所述远程ssd节点将部分本地内存传输至虚拟化节点;

步骤s607,虚拟化节点在接收到部分本地内存后将其拷贝至释放的空闲页框中;

步骤s608,虚拟化节点更新二级页表,恢复页表信息并将页表描述符指向空闲页框;

步骤s609,虚拟化节点刷新tlb缓存,确保清除已失效的客户物理地址映射缓冲;

步骤s610,虚拟化节点释放所述远程ssd节点的对应内存槽或ssd槽。

通过结合附图对本发明具体实施例的描述与说明,本发明的其它方面及特征对本领域的技术人员而言是显而易见的。应当注意,这些实施例应被认为只是示例性的,并不用于对本发明进行限制。在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明做出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1