一种内存管理方法、装置及设备
文献发布时间:2023-06-19 11:19:16
技术领域
本申请涉及通信技术领域,尤其涉及一种内存管理方法、装置及设备。
背景技术
通过虚拟机软件,可以在物理计算机上模拟出多个虚拟机(Virtual Machine),这些虚拟机完全就像真正的计算机那样进行工作,例如,可以安装操作系统、安装应用程序、访问网络资源等。虚拟机是运行在物理计算机上的一个应用程序,但是对于虚拟机中运行的应用程序而言,虚拟机就是一个真正的计算机。
随着虚拟机技术的快速发展,与虚拟机有关的技术也越来越多,内存伸缩技术和设备直通技术是针对虚拟机内存的技术。其中,内存伸缩技术是指:可以将虚拟机的内存释放出来给宿主机(本文将虚拟机所在的物理计算机称为宿主机)使用,或者,可以将宿主机的内存给虚拟机使用,从而实现虚拟机内存的伸缩。设备直通技术是指:外部设备(如网卡、硬盘等)能够直接访问虚拟机的内存,避免与虚拟机进行数据的交互,缩短了数据传输路径。
但是,目前无法实现设备直通技术和内存伸缩技术的共存。若针对虚拟机内存使用设备直通技术,就无法针对虚拟机内存使用内存伸缩技术,若针对虚拟机内存使用内存伸缩技术,就无法针对虚拟机内存使用设备直通技术。
发明内容
本申请提供一种内存管理方法,所述方法包括:
接收针对虚拟机内存的缩容请求;
根据所述缩容请求确定需要被缩容的虚拟机物理内存地址;
在访问页表中对所述虚拟机物理内存地址进行操作,以使外部设备对虚拟机内存进行访问时,根据所述访问页表禁止访问所述虚拟机物理内存地址。
本申请提供一种内存管理方法,所述方法包括:
接收针对虚拟机内存的扩容请求;
根据所述扩容请求确定需要被扩容的虚拟机物理内存地址;
在访问页表中对所述虚拟机物理内存地址进行操作,以使外部设备对虚拟机内存进行访问时,根据所述访问页表允许访问所述虚拟机物理内存地址。
本申请提供一种内存管理方法,所述方法包括:
接收针对虚拟机内存的伸缩请求;
根据所述伸缩请求确定需要被伸缩的虚拟机物理内存地址;
在访问页表中对所述虚拟机物理内存地址进行操作,以使外部设备对虚拟机内存进行访问时,根据所述访问页表禁止访问所述虚拟机物理内存地址,或者,根据所述访问页表允许访问所述虚拟机物理内存地址。
本申请提供一种内存管理方法,所述方法包括:
接收针对宿主机内存的伸缩请求;
根据所述伸缩请求确定需要被伸缩的宿主机物理内存地址;
在访问页表中对所述宿主机物理内存地址进行操作,以使外部设备对虚拟机内存进行访问时,根据所述访问页表禁止访问所述宿主机物理内存地址,或者,根据所述访问页表允许访问所述宿主机物理内存地址。
本申请提供一种内存管理方法,所述方法包括:
接收针对宿主机内存的扩容请求;
根据所述扩容请求确定需要被扩容的宿主机物理内存地址;
在访问页表中对所述宿主机物理内存地址进行操作,以使外部设备对虚拟机内存进行访问时,根据所述访问页表禁止访问所述宿主机物理内存地址。
本申请提供一种内存管理方法,所述方法包括:
接收针对宿主机内存的缩容请求;
根据所述缩容请求确定需要被缩容的宿主机物理内存地址;
在访问页表中对所述宿主机物理内存地址进行操作,以使外部设备对虚拟机内存进行访问时,根据所述访问页表允许访问所述宿主机物理内存地址。
本申请提供一种内存管理装置,所述装置包括:
接收模块,用于接收针对虚拟机内存的伸缩请求;
确定模块,用于根据所述伸缩请求确定需要被伸缩的虚拟机物理内存地址;
处理模块,用于在访问页表中对所述虚拟机物理内存地址进行操作,以使外部设备对虚拟机内存进行访问时,根据所述访问页表禁止访问所述虚拟机物理内存地址,或者,根据所述访问页表允许访问所述虚拟机物理内存地址。
本申请提供一种内存管理装置,所述装置包括:
接收模块,用于接收针对宿主机内存的伸缩请求;
确定模块,用于根据所述伸缩请求确定需要被伸缩的宿主机物理内存地址;
处理模块,用于在访问页表中对所述宿主机物理内存地址进行操作,以使外部设备对虚拟机内存进行访问时,根据所述访问页表禁止访问所述宿主机物理内存地址,或者,根据所述访问页表允许访问所述宿主机物理内存地址。
本申请提供一种内存管理设备,包括:
处理器和机器可读存储介质,所述机器可读存储介质上存储有若干计算机指令,所述处理器执行所述计算机指令时进行如下处理:
接收针对虚拟机内存的伸缩请求;
根据所述伸缩请求确定需要被伸缩的虚拟机物理内存地址;
在访问页表中对所述虚拟机物理内存地址进行操作,以使外部设备对虚拟机内存进行访问时,根据所述访问页表禁止访问所述虚拟机物理内存地址,或者,根据所述访问页表允许访问所述虚拟机物理内存地址。
本申请提供一种内存管理设备,包括:
处理器和机器可读存储介质,所述机器可读存储介质上存储有若干计算机指令,所述处理器执行所述计算机指令时进行如下处理:
接收针对宿主机内存的伸缩请求;
根据所述伸缩请求确定需要被伸缩的宿主机物理内存地址;
在访问页表中对所述宿主机物理内存地址进行操作,以使外部设备对虚拟机内存进行访问时,根据所述访问页表禁止访问所述宿主机物理内存地址,或者,根据所述访问页表允许访问所述宿主机物理内存地址。
基于上述技术方案,本申请实施例中,能够实现设备直通技术和内存伸缩技术的共存,也就是说,针对虚拟机内存使用设备直通技术时,也能够针对虚拟机内存使用内存伸缩技术,或者,针对虚拟机内存使用内存伸缩技术时,也能够针对虚拟机内存使用设备直通技术。上述方式能够同时实现内存伸缩技术的效果和设备直通技术的效果,例如,实现虚拟机内存的伸缩,外部设备能够直接访问虚拟机的内存,避免与虚拟机进行数据的交互,缩短数据传输路径。
附图说明
为了更加清楚地说明本申请实施例或者现有技术中的技术方案,下面将对本申请实施例或者现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据本申请实施例的这些附图获得其它的附图。
图1是本申请一种实施方式中的应用场景示意图;
图2是本申请一种实施方式中的内存管理方法的流程示意图;
图3是本申请另一种实施方式中的内存管理方法的流程示意图;
图4是本申请另一种实施方式中的内存管理方法的流程示意图;
图5是本申请另一种实施方式中的内存管理方法的流程示意图;
图6是本申请一种实施方式中的内存管理装置的结构示意图;
图7是本申请一种实施方式中的内存管理设备的结构示意图。
具体实施方式
在本申请实施例使用的术语仅仅是出于描述特定实施例的目的,而非限制本申请。本申请和权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其它含义。还应当理解,本文中使用的术语“和/或”是指包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本申请实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,此外,所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
参见图1所示,为本申请实施例的应用场景示意图,宿主机10(即物理计算机)可以包括虚拟机11、外部设备12、内存管理单元13和虚拟机管理单元14,图1中以1个虚拟机为例,实际应用中,虚拟机的数量可以大于1个。
虚拟机11是运行在宿主机10上的应用程序,对于虚拟机11中运行的应用程序而言,虚拟机11就是一个真正计算机,虚拟机11可以安装操作系统、安装应用程序、访问网络资源等,本实施例对虚拟机11的功能不做限制。
外部设备12(简称外设)是计算机系统中输入设备、输出设备的统称,是计算机系统的重要组成部分,如网卡、各种存储器(如硬盘存储器、移动存储器、光存储器等)、显示器、键盘、鼠标等,对此外部设备12不做限制。
内存管理单元13可以是IOMMU(Input Output Memory Management Unit,输入输出内存管理单元),内存管理单元13能够管理访问页表(如page table),该访问页表用于记录虚拟机物理内存地址与宿主机物理内存地址的映射关系。在外部设备12访问虚拟机11的内存时,外部设备12向内存管理单元13发送针对某个虚拟机物理内存地址A的访问请求,内存管理单元13根据访问页表确定与虚拟机物理内存地址A对应的宿主机物理内存地址B,使得外部设备12直接对宿主机物理内存地址B进行访问,从而能够直接访问虚拟机11的内存。
虚拟机管理单元14用于实现虚拟机的管理,虚拟机管理单元14可以是用于管理虚拟机的软件,也可以是用于管理虚拟机的硬件,对此不做限制。例如,虚拟机管理单元14可以是hypervisor,hypervisor是一种运行在虚拟环境中的“元”操作系统,也可以称为VMM(Virtual Machine Monitor,即虚拟机监视器)。
内存伸缩技术是指:将虚拟机11的内存释放出来给宿主机10使用,或者,将宿主机10的内存给虚拟机11使用,从而实现虚拟机内存的伸缩。
设备直通技术是指:外部设备12直接访问虚拟机11的内存,避免与虚拟机11进行数据的交互,缩短了数据传输路径。具体的,外部设备12能够获知虚拟机11的虚拟机物理内存地址,在外部设备12需要访问虚拟机11的虚拟机物理内存地址A时,可以向内存管理单元13发送针对虚拟机物理内存地址A的访问请求,内存管理单元13根据访问页表确定与虚拟机物理内存地址A对应的宿主机物理内存地址B,使得外部设备12直接对宿主机物理内存地址B进行访问。在上述过程中,外部设备12不需要将数据发送给虚拟机11,而是直接对虚拟机11的内存进行访问,从而绕过性能代价巨大的虚拟机陷入陷出。
但是,目前无法实现设备直通技术和内存伸缩技术的共存。例如,基于内存伸缩技术,将虚拟机11的虚拟机物理内存地址A释放出来给宿主机10使用,而外部设备12能够对虚拟机11的所有内存进行访问,那么,在外部设备12对虚拟机11的虚拟机物理内存地址A进行访问时,就会出现访问异常。
针对上述发现,本申请实施例提出一种内存管理方法,能够实现设备直通技术和内存伸缩技术的共存,突破设备直通与内存伸缩无法共存这一限制。在虚拟机混部等应用场景,在外部设备(如网卡等)直通到虚拟机内存的前提下,依然可以进行虚拟机的内存伸缩。其中,虚拟机混部是指:将多个虚拟机部署在同一宿主机上,这些虚拟机有不同的负载峰值,在特定的时间段内,可以减少低负载虚拟机的内存,将释放的内存交给高负载的虚拟机或者宿主机使用。
以下结合几个具体实施例,对本申请实施例的内存管理方法进行说明。
实施例1:参见图2所示,为内存管理方法的流程图,该方法可以包括:
步骤201,接收针对虚拟机内存的缩容请求。
步骤202,根据该缩容请求确定需要被缩容的虚拟机物理内存地址。
步骤203,在访问页表中对该虚拟机物理内存地址进行操作,以使外部设备对虚拟机内存进行访问时,根据该访问页表禁止访问该虚拟机物理内存地址。
在一个例子中,可以向内存管理单元发送针对该虚拟机物理内存地址的未映射请求,该未映射请求可以包括该虚拟机物理内存地址,以使内存管理单元根据该未映射请求在访问页表中对该虚拟机物理内存地址进行操作。
在一个例子中,在访问页表中对该虚拟机物理内存地址进行操作,可以包括但不限于:从该访问页表中删除该虚拟机物理内存地址,这样,外部设备对虚拟机内存进行访问时,由于该访问页表中不存在该虚拟机物理内存地址,因此,能够禁止访问该虚拟机物理内存地址。或者,在该访问页表中为该虚拟机物理内存地址添加禁止标记,该禁止标记用于指示禁止对该虚拟机物理内存地址进行访问,这样,外部设备对虚拟机内存进行访问时,由于该虚拟机物理内存地址对应有该禁止标记,因此,能够禁止访问该虚拟机物理内存地址。
在一个例子中,上述执行顺序只是为了方便描述给出的一个示例,在实际应用中,还可以改变步骤之间的执行顺序,对此执行顺序不做限制。而且,在其它实施例中,并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其它实施例中可能被分解为多个步骤进行描述;本说明书中所描述的多个步骤,在其它实施例也可能被合并为单个步骤进行描述。
基于上述技术方案,本申请实施例中,能够实现设备直通技术和内存伸缩技术的共存,同时实现内存伸缩技术的效果和设备直通技术的效果,例如,能够实现虚拟机内存的伸缩,且外部设备能够直接访问虚拟机的内存。
实施例2:参见图3所示,为内存管理方法的流程图,该方法可以包括:
步骤301,接收针对虚拟机内存的扩容请求。
步骤302,根据该扩容请求确定需要被扩容的虚拟机物理内存地址。
步骤303,在访问页表中对该虚拟机物理内存地址进行操作,以使外部设备对虚拟机内存进行访问时,根据该访问页表允许访问该虚拟机物理内存地址。
在一个例子中,步骤302之后,还可以根据该虚拟机物理内存地址确定宿主机物理内存地址。基于此,在步骤303中,可以在访问页表中添加该虚拟机物理内存地址与该宿主机物理内存地址的映射关系,以使外部设备对虚拟机内存进行访问时,根据该访问页表允许访问该虚拟机物理内存地址。
在一个例子中,可以向内存管理单元发送映射请求,该映射请求可以包括该虚拟机物理内存地址和该宿主机物理内存地址,以使内存管理单元根据该映射请求在访问页表中添加该虚拟机物理内存地址与该宿主机物理内存地址的映射关系。进一步的,由于访问页表中包括该虚拟机物理内存地址与该宿主机物理内存地址的映射关系,因此,外部设备对虚拟机内存进行访问时,该访问页表中存在该虚拟机物理内存地址,从而能够访问该虚拟机物理内存地址。
在一个例子中,根据虚拟机物理内存地址确定宿主机物理内存地址,可以包括但不限于:根据该虚拟机物理内存地址确定虚拟内存地址,并根据该虚拟内存地址确定宿主机物理内存地址,对此确定方式不做限制。
在一个例子中,上述执行顺序只是为了方便描述给出的一个示例,在实际应用中,还可以改变步骤之间的执行顺序,对此执行顺序不做限制。而且,在其它实施例中,并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其它实施例中可能被分解为多个步骤进行描述;本说明书中所描述的多个步骤,在其它实施例也可能被合并为单个步骤进行描述。
基于上述技术方案,本申请实施例中,能够实现设备直通技术和内存伸缩技术的共存,同时实现内存伸缩技术的效果和设备直通技术的效果,例如,能够实现虚拟机内存的伸缩,且外部设备能够直接访问虚拟机的内存。
实施例3:参见图4所示,为内存管理方法的流程图,该方法可以包括:
步骤401,接收针对虚拟机内存的伸缩请求。
步骤402,根据该伸缩请求确定需要被伸缩的虚拟机物理内存地址。
步骤403,在访问页表中对该虚拟机物理内存地址进行操作,以使外部设备对虚拟机内存进行访问时,根据该访问页表禁止访问该虚拟机物理内存地址,或者,根据该访问页表允许访问该虚拟机物理内存地址。
在一个例子中,若该伸缩请求用于对虚拟机内存进行缩容,则在步骤403中,可以在访问页表中对该虚拟机物理内存地址进行操作,以使外部设备对虚拟机内存进行访问时,根据该访问页表禁止访问该虚拟机物理内存地址。
具体的,从该访问页表中删除该虚拟机物理内存地址,这样,外部设备对虚拟机内存进行访问时,由于该访问页表中不存在该虚拟机物理内存地址,因此,能够禁止访问该虚拟机物理内存地址。或者,在该访问页表中为该虚拟机物理内存地址添加禁止标记,该禁止标记用于指示禁止对该虚拟机物理内存地址进行访问,这样,外部设备对虚拟机内存进行访问时,由于该虚拟机物理内存地址对应有该禁止标记,因此,能够禁止访问该虚拟机物理内存地址。
在一个例子中,若该伸缩请求用于对虚拟机内存进行扩容,则在步骤403中,可以在访问页表中对该虚拟机物理内存地址进行操作,以使外部设备对虚拟机内存进行访问时,根据该访问页表允许访问该虚拟机物理内存地址。
具体的,可以根据该虚拟机物理内存地址确定宿主机物理内存地址,在访问页表中添加该虚拟机物理内存地址与该宿主机物理内存地址的映射关系,以使外部设备对虚拟机内存进行访问时,根据该访问页表允许访问该虚拟机物理内存地址。基于此,由于访问页表中包括该虚拟机物理内存地址与该宿主机物理内存地址的映射关系,因此,外部设备对虚拟机内存进行访问时,该访问页表中存在该虚拟机物理内存地址,从而能够访问该虚拟机物理内存地址。
在一个例子中,根据虚拟机物理内存地址确定宿主机物理内存地址,可以包括但不限于:根据该虚拟机物理内存地址确定虚拟内存地址,并根据该虚拟内存地址确定宿主机物理内存地址,对此确定方式不做限制。
在一个例子中,上述执行顺序只是为了方便描述给出的一个示例,在实际应用中,还可以改变步骤之间的执行顺序,对此执行顺序不做限制。而且,在其它实施例中,并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其它实施例中可能被分解为多个步骤进行描述;本说明书中所描述的多个步骤,在其它实施例也可能被合并为单个步骤进行描述。
基于上述技术方案,本申请实施例中,能够实现设备直通技术和内存伸缩技术的共存,同时实现内存伸缩技术的效果和设备直通技术的效果,例如,能够实现虚拟机内存的伸缩,且外部设备能够直接访问虚拟机的内存。
实施例4:参见图5所示,为内存管理方法的流程图,该方法可以包括:
步骤501,hypervisor接收针对虚拟机内存的伸缩请求,并根据该伸缩请求确定需要被伸缩的虚拟机物理内存地址,后续记为虚拟机物理内存地址X。
本实施例中,以通过hypervisor(也称为VMM)实现虚拟机的管理为例。
本实施例中,hypervisor在接收到伸缩请求后,该伸缩请求可以携带需要被伸缩的虚拟机物理内存地址X,根据该伸缩请求确定虚拟机物理内存地址X。
步骤502,hypervisor判断该伸缩请求用于对虚拟机内存进行缩容,还是对虚拟机内存进行扩容。若该伸缩请求用于对虚拟机内存进行缩容,则该伸缩请求是针对虚拟机内存的缩容请求,执行步骤503。若该伸缩请求用于对虚拟机内存进行扩容,则该伸缩请求是针对虚拟机内存的扩容请求,执行步骤504。
步骤503,hypervisor从访问页表中删除虚拟机物理内存地址X,也就是说,针对内存管理单元的访问页表,从该访问页表中删除虚拟机物理内存地址X。
在一个例子中,若hypervisor能够对内存管理单元的访问页表进行操作,则hypervisor直接从该访问页表中删除虚拟机物理内存地址X。若hypervisor无法对内存管理单元的访问页表进行操作,则hypervisor向内存管理单元发送未映射请求(unmap请求),该未映射请求包括虚拟机物理内存地址X。内存管理单元在接收到该未映射请求后,可以从访问页表中删除虚拟机物理内存地址X。
示例性的,基于内存管理单元扩展的unmap方法,可以在hypervisor与内存管理单元之间扩展一种消息类型,即未映射请求。hypervisor对虚拟机物理内存地址X进行缩容时,向内存管理单元发送未映射请求,该未映射请求包括虚拟机物理内存地址X。内存管理单元接收到未映射请求后,需要改写访问页表(page table),即从访问页表中删除虚拟机物理内存地址X。这样,虚拟机物理内存地址X不存在于访问页表中,避免外部设备访问虚拟机物理内存地址X。
在设备直通过程中,外部设备需要访问虚拟机的虚拟机物理内存地址A时,向内存管理单元发送针对虚拟机物理内存地址A的访问请求,内存管理单元根据访问页表确定与虚拟机物理内存地址A对应的宿主机物理内存地址B,使得外部设备直接对宿主机物理内存地址B进行访问。外部设备需要访问虚拟机的虚拟机物理内存地址X时,向内存管理单元发送针对虚拟机物理内存地址X的访问请求。由于访问页表中不存在虚拟机物理内存地址X,内存管理单元也无法确定与虚拟机物理内存地址X对应的宿主机物理内存地址,因此,禁止外部设备访问虚拟机物理内存地址X。显然,上述方式能够使外部设备无法访问虚拟机物理内存地址X,将虚拟机物理内存地址X与外部设备有效的隔离。
示例性的,访问页表用于记录虚拟机物理内存地址与宿主机物理内存地址的映射关系,虚拟机物理内存地址是虚拟机的物理内存地址,宿主机物理内存地址是宿主机的物理内存地址。例如,宿主机的物理内存地址为1-1000,假设将101-200分配给虚拟机使用,则从虚拟机的角度来说,虚拟机物理内存地址是1-100,从宿主机的角度来说,虚拟机物理内存地址对应的宿主机物理内存地址是101-200,虚拟机物理内存地址1对应宿主机物理内存地址101,虚拟机物理内存地址2对应宿主机物理内存地址102,以此类推。在虚拟机的操作过程中,针对虚拟机物理内存地址1进行操作时,实际操作的是宿主机物理内存地址101。
由于访问页表记录虚拟机物理内存地址与宿主机物理内存地址的映射关系,因此,内存管理单元可以根据访问页表确定与虚拟机物理内存地址对应的宿主机物理内存地址,使得外部设备直接对该宿主机物理内存地址进行访问。
示例性的,由于访问页表记录虚拟机物理内存地址与宿主机物理内存地址的映射关系,因此,在从访问页表中删除虚拟机物理内存地址X时,可以从访问页表中删除虚拟机物理内存地址X与宿主机物理内存地址的映射关系。
示例性的,虚拟机物理内存地址X可以是虚拟机物理内存地址区间,如虚拟机物理内存地址1-10。例如,虚拟机物理内存地址X可以是虚拟机物理内存页X,而该虚拟机物理内存页X可以包括虚拟机物理内存地址区间。
在一个例子中,若该伸缩请求用于对虚拟机内存进行缩容,则hypervisor还可以释放虚拟机的虚拟机物理内存地址X,将虚拟机物理内存地址X归还给宿主机使用,对此虚拟机内存的缩容过程不做限制。至此,结束内存伸缩过程。
在上述实施例中,在对虚拟机内存进行缩容时,可以使用未映射请求将虚拟机物理内存地址X同步到内存管理单元,使得内存管理单元从访问页表中删除虚拟机物理内存地址X,这样的机制使得内存伸缩与设备直通能够并存。
为了实现上述过程,可以对IOMMU接口进行扩展,即扩展新的IOMMU接口(在宿主机层面),这个IOMMU接口用于实现hypervisor与IOMMU(即内存管理单元)的交互,如上述未映射请求就是基于这个IOMMU接口的消息。
示例性的,基于IOMMU接口的未映射请求,可以动态的分割IOVA(Input Outputvirtual address,输入输出虚拟地址)区域(range),而IOVA就对应上述虚拟机物理内存地址。假设IOVA区域为[0x40000,0x70000],当基于IOMMU接口的未映射请求包括(0x50000,0x60000)时,则可以将IOVA区域分割成:[0x40000,0x50000]和[0x60000,0x70000],并相应地更新访问页表。
综上所述,虚拟机内存缩容的场景,基于IOMMU接口的未映射请求,能够动态分割IOVA区域,实现访问页表更新,有效管理外部设备的IOVA区域。
步骤504,hypervisor根据虚拟机物理内存地址X确定虚拟内存地址Y。
步骤505,hypervisor根据虚拟内存地址Y确定宿主机物理内存地址Z。
在一个例子中,hypervisor并不记录虚拟机物理内存地址与宿主机物理内存地址的映射关系,而是会记录虚拟机物理内存地址与虚拟内存地址的映射关系、虚拟内存地址与宿主机物理内存地址的映射关系,因此,hypervisor可以根据虚拟机物理内存地址与虚拟内存地址的映射关系,确定虚拟机物理内存地址X对应的虚拟内存地址Y。hypervisor可以根据虚拟内存地址与宿主机物理内存地址的映射关系,确定虚拟内存地址Y对应的宿主机物理内存地址Z。
当然,上述基于虚拟内存地址Y的方式只是示例,还可以采用其它方式确定虚拟机物理内存地址X对应的宿主机物理内存地址Z,对此不做限制,只要能够确定虚拟机物理内存地址X对应的宿主机物理内存地址Z即可。
示例性的,虚拟内存地址Y可以是hypervisor进程的虚拟内存地址。
步骤506,hypervisor在访问页表中添加虚拟机物理内存地址X与宿主机物理内存地址Z的映射关系,也就是说,针对内存管理单元的访问页表,在该访问页表中添加虚拟机物理内存地址X与宿主机物理内存地址Z的映射关系。
在一个例子中,若hypervisor能够对内存管理单元的访问页表进行操作,则hypervisor直接在访问页表中添加虚拟机物理内存地址X与宿主机物理内存地址Z的映射关系。若hypervisor无法对内存管理单元的访问页表进行操作,则hypervisor向内存管理单元发送映射请求(map请求),映射请求包括虚拟机物理内存地址X和宿主机物理内存地址Z。内存管理单元在接收到该映射请求后,在访问页表中添加虚拟机物理内存地址X与宿主机物理内存地址Z的映射关系。
示例性的,基于内存管理单元扩展的map方法,可以在hypervisor与内存管理单元之间扩展一种消息类型,即映射请求。hypervisor对虚拟机物理内存地址X进行扩容时,向内存管理单元发送映射请求,该映射请求包括虚拟机物理内存地址X和宿主机物理内存地址Z。内存管理单元接收到映射请求后,需要改写访问页表(page table),即在访问页表中添加虚拟机物理内存地址X与宿主机物理内存地址Z的映射关系。这样,虚拟机物理内存地址X和宿主机物理内存地址Z存在于访问页表中,使得外部设备能够访问虚拟机物理内存地址X。
在设备直通过程中,外部设备需要访问虚拟机的虚拟机物理内存地址X时,向内存管理单元发送针对虚拟机物理内存地址X的访问请求。由于访问页表中存在虚拟机物理内存地址X,因此,内存管理单元可以确定与虚拟机物理内存地址X对应的宿主机物理内存地址Z,使得外部设备直接对宿主机物理内存地址Z进行访问。显然,上述方式能够使外部设备访问虚拟机物理内存地址X。
示例性的,虚拟机物理内存地址X可以是虚拟机物理内存地址区间,如虚拟机物理内存地址1-10。例如,虚拟机物理内存地址X可以是虚拟机物理内存页X,而该虚拟机物理内存页X可以包括虚拟机物理内存地址区间。同理,虚拟机物理内存地址X对应的宿主机物理内存地址Z也是宿主机物理内存地址区间,例如,与虚拟机物理内存地址1-10对应的宿主机物理内存地址101-110。
在一个例子中,若该伸缩请求用于对虚拟机内存进行扩容,则hypervisor还可以将虚拟机物理内存地址X分配给虚拟机使用,至此,结束内存伸缩过程。
在上述实施例中,在对虚拟机内存进行扩容时,hypervisor可以使用映射请求将虚拟机物理内存地址X和宿主机物理内存地址Z的映射关系同步到内存管理单元,使得内存管理单元在访问页表中添加虚拟机物理内存地址X与宿主机物理内存地址Z的映射关系,这样的机制使得内存伸缩与设备直通能够并存。
为了实现上述过程,可以对IOMMU接口进行扩展,即扩展新的IOMMU接口(在宿主机层面),这个IOMMU接口用于实现hypervisor与IOMMU(即内存管理单元)的交互,如上述映射请求就是基于这个IOMMU接口的消息。
示例性的,基于IOMMU接口的映射请求,可以动态合并分散的IOVA区域(也可以称为DMA区域)。假设IOVA区域为[0x40000,0x50000]和[0x60000,0x70000],当基于IOMMU接口的映射请求包括(0x50000,0x60000)时,则可以将IOVA区域合并成[0x40000,0x70000],并相应地更新访问页表。
综上所述,虚拟机内存扩容的场景,基于IOMMU接口的映射请求,能够合并IOVA区域,实现访问页表更新,有效管理外部设备的IOVA区域。通过将宿主机释放的物理内存地址重新纳入IOMMU管理,减少IOVA区域的碎片。
在一个例子中,针对KVM(Keyboard Video Mouse,键盘、视频和鼠标)的虚拟化解决方案,上述hypervisor可以为QEMU(即虚拟化模拟器)。针对balloon虚拟机内存伸缩技术,上述伸缩请求可以为balloon伸缩请求。当然,QEMU和balloon伸缩请求也只是一个示例,对此不做限制。
在一个例子中,上述执行顺序只是为了方便描述给出的一个示例,在实际应用中,还可以改变步骤之间的执行顺序,对此执行顺序不做限制。而且,在其它实施例中,并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其它实施例中可能被分解为多个步骤进行描述;本说明书中所描述的多个步骤,在其它实施例也可能被合并为单个步骤进行描述。
基于上述技术方案,本申请实施例中,能够实现设备直通技术和内存伸缩技术的共存,同时实现内存伸缩技术的效果和设备直通技术的效果,例如,能够实现虚拟机内存的伸缩,且外部设备能够直接访问虚拟机的内存。
在上述实施例中,伸缩请求、扩容请求、缩容请求均是针对虚拟机内存的,针对虚拟机内存的缩容请求,是指将虚拟机内存释放给宿主机,也就是说,外部设备对虚拟机内存进行访问时,禁止访问被缩容的虚拟机物理内存地址。针对虚拟机内存的扩容请求,是指将宿主机内存提供给虚拟机,也就是说,外部设备对虚拟机内存进行访问时,允许访问被扩容的虚拟机物理内存地址。
在另一种可能的实施方式中,伸缩请求、扩容请求、缩容请求还可以是针对宿主机内存的,针对宿主机内存的扩容请求,是指将虚拟机内存释放给宿主机,即增加宿主机内存,也就是说,外部设备对虚拟机内存进行访问时,禁止访问被扩容的宿主机物理内存地址(这个宿主机物理内存地址是从虚拟机内存中释放的,因此,外部设备对虚拟机内存进行访问时禁止访问)。
此外,针对宿主机内存的缩容请求,是指将宿主机内存提供给虚拟机,即减少宿主机内存给虚拟机,也就是说,外部设备对虚拟机内存进行访问时,允许访问被缩容的宿主机物理内存地址(这个宿主机物理内存地址被提供给虚拟机内存,因此,外部设备对虚拟机内存进行访问时允许访问)。
以下结合几个具体实施例,对针对宿主机内存的处理过程进行说明。
实施例5:本申请实施例的内存管理方法,可以采用如下步骤实现:
步骤a1、接收针对宿主机内存的扩容请求。
步骤a2、根据该扩容请求确定需要被扩容的宿主机物理内存地址。
步骤a3、在访问页表中对该宿主机物理内存地址进行操作,以使外部设备对虚拟机内存进行访问时,根据该访问页表禁止访问该宿主机物理内存地址。
在一个例子中,可以向内存管理单元发送针对该宿主机物理内存地址的未映射请求,该未映射请求可以包括该宿主机物理内存地址,以使内存管理单元根据该未映射请求在访问页表中对该宿主机物理内存地址进行操作。
在一个例子中,在访问页表中对该宿主机物理内存地址进行操作,可以包括但不限于:从该访问页表中删除该宿主机物理内存地址,这样,外部设备对虚拟机内存进行访问时,由于该访问页表中不存在该宿主机物理内存地址,因此,能够禁止访问该宿主机物理内存地址。或者,在该访问页表中为该宿主机物理内存地址添加禁止标记,该禁止标记用于指示禁止对该宿主机物理内存地址进行访问,这样,外部设备对虚拟机内存进行访问时,由于该宿主机物理内存地址对应有该禁止标记,因此,能够禁止访问该宿主机物理内存地址。
实施例6:本申请实施例的内存管理方法,可以采用如下步骤实现:
步骤b1、接收针对宿主机内存的缩容请求。
步骤b2、根据该缩容请求确定需要被缩容的宿主机物理内存地址。
步骤b3、在访问页表中对该宿主机物理内存地址进行操作,以使外部设备对虚拟机内存进行访问时,根据该访问页表允许访问该宿主机物理内存地址。
在一个例子中,步骤b2之后,还可以根据该宿主机物理内存地址确定虚拟机物理内存地址。基于此,在步骤b3中,可以在访问页表中添加该宿主机物理内存地址与该虚拟机物理内存地址的映射关系,以使外部设备对虚拟机内存进行访问时,根据该访问页表允许访问该宿主机物理内存地址。
在一个例子中,可以向内存管理单元发送映射请求,该映射请求可以包括该虚拟机物理内存地址和该宿主机物理内存地址,以使内存管理单元根据该映射请求在访问页表中添加该虚拟机物理内存地址与该宿主机物理内存地址的映射关系。进一步的,由于访问页表中包括该虚拟机物理内存地址与该宿主机物理内存地址的映射关系,因此,外部设备对虚拟机内存进行访问时,该访问页表中存在该宿主机物理内存地址,从而能够访问该宿主机物理内存地址。
在一个例子中,根据该宿主机物理内存地址确定虚拟机物理内存地址,可以包括但不限于:根据该宿主机物理内存地址确定虚拟内存地址,并根据该虚拟内存地址确定虚拟机物理内存地址,对此确定方式不做限制。
实施例7:本申请实施例的内存管理方法,可以采用如下步骤实现:
步骤c1、接收针对宿主机内存的伸缩请求。
步骤c2、根据该伸缩请求确定需要被伸缩的宿主机物理内存地址。
步骤c3、在访问页表中对该宿主机物理内存地址进行操作,以使外部设备对虚拟机内存进行访问时,根据该访问页表禁止访问该宿主机物理内存地址,或者,根据该访问页表允许访问该宿主机物理内存地址。
在一个例子中,若该伸缩请求用于对宿主机内存进行扩容,则在步骤c3中,可以在访问页表中对该宿主机物理内存地址进行操作,以使外部设备对虚拟机内存进行访问时,根据该访问页表禁止访问该宿主机物理内存地址。
具体的,从该访问页表中删除该宿主机物理内存地址,这样,外部设备对虚拟机内存进行访问时,由于该访问页表中不存在该宿主机物理内存地址,因此,能够禁止访问该宿主机物理内存地址。或者,在该访问页表中为该宿主机物理内存地址添加禁止标记,该禁止标记用于指示禁止对该宿主机物理内存地址进行访问,这样,外部设备对虚拟机内存进行访问时,由于该宿主机物理内存地址对应有该禁止标记,因此,能够禁止访问该宿主机物理内存地址。
在一个例子中,若该伸缩请求用于对宿主机内存进行缩容,则在步骤c3中,可以在访问页表中对该宿主机物理内存地址进行操作,以使外部设备对虚拟机内存进行访问时,根据该访问页表允许访问该宿主机物理内存地址。
具体的,可以根据该宿主机物理内存地址确定虚拟机物理内存地址,在访问页表中添加该虚拟机物理内存地址与该宿主机物理内存地址的映射关系,以使外部设备对虚拟机内存进行访问时,根据该访问页表允许访问该宿主机物理内存地址。基于此,由于访问页表中包括该虚拟机物理内存地址与该宿主机物理内存地址的映射关系,因此,外部设备对虚拟机内存进行访问时,该访问页表中存在该宿主机物理内存地址,从而能够访问该宿主机物理内存地址。
在一个例子中,根据宿主机物理内存地址确定虚拟机物理内存地址,可以包括但不限于:根据该宿主机物理内存地址确定虚拟内存地址,并根据该虚拟内存地址确定虚拟机物理内存地址,对此确定方式不做限制。
示例性的,实施例5-实施例7的实现流程,与上述实施例1-实施例4类似,只是伸缩请求、扩容请求、缩容请求是针对宿主机内存的,而不是针对虚拟机内存的,针对宿主机内存的扩容请求对应针对虚拟机内存的缩容请求,针对宿主机内存的缩容请求对应针对虚拟机内存的扩容请求,在此不再重复赘述。
基于与上述方法同样的申请构思,本申请实施例还提供一种内存管理装置,如图6所示,为所述内存管理装置的结构图,所述内存管理装置包括:
接收模块61,用于接收针对虚拟机内存的伸缩请求;
确定模块62,用于根据伸缩请求确定需要被伸缩的虚拟机物理内存地址;
处理模块63,用于在访问页表中对所述虚拟机物理内存地址进行操作,以使外部设备对虚拟机内存进行访问时,根据所述访问页表禁止访问所述虚拟机物理内存地址,或者,根据所述访问页表允许访问所述虚拟机物理内存地址。
若所述伸缩请求用于对虚拟机内存进行缩容,所述处理模块63在访问页表中对所述虚拟机物理内存地址进行操作,以根据所述访问页表禁止访问所述虚拟机物理内存地址,具体用于:从所述访问页表中删除所述虚拟机物理内存地址;或者,在所述访问页表中为所述虚拟机物理内存地址添加禁止标记,所述禁止标记用于指示禁止对所述虚拟机物理内存地址进行访问。
若所述伸缩请求用于对虚拟机内存进行缩容,所述处理模块63在访问页表中对所述虚拟机物理内存地址进行操作时具体用于:向内存管理单元发送针对所述虚拟机物理内存地址的未映射请求,以使所述内存管理单元根据所述未映射请求在访问页表中对所述虚拟机物理内存地址进行操作。
若所述伸缩请求用于对虚拟机内存进行扩容,所述处理模块63在访问页表中对所述虚拟机物理内存地址进行操作,以根据所述访问页表允许访问所述虚拟机物理内存地址,具体用于:根据所述虚拟机物理内存地址确定宿主机物理内存地址,并在所述访问页表中添加所述虚拟机物理内存地址与所述宿主机物理内存地址的映射关系,以根据所述访问页表允许访问虚拟机物理内存地址。
若所述伸缩请求用于对虚拟机内存进行扩容,所述处理模块63在所述访问页表中添加所述虚拟机物理内存地址与所述宿主机物理内存地址的映射关系时具体用于:向内存管理单元发送映射请求,所述映射请求包括所述虚拟机物理内存地址和所述宿主机物理内存地址,以使内存管理单元根据映射请求在访问页表中添加所述虚拟机物理内存地址与所述宿主机物理内存地址的映射关系。
在一个例子中,所述处理模块63根据所述虚拟机物理内存地址确定宿主机物理内存地址时具体用于:根据所述虚拟机物理内存地址确定虚拟内存地址;根据所述虚拟内存地址确定所述宿主机物理内存地址。
基于与上述方法同样的申请构思,本申请实施例还提供一种内存管理设备,包括:处理器和机器可读存储介质,所述机器可读存储介质上存储有若干计算机指令,所述处理器执行计算机指令时能够实现上述的方法。
例如,所述处理器执行所述计算机指令时进行如下处理:
接收针对虚拟机内存的伸缩请求;
根据所述伸缩请求确定需要被伸缩的虚拟机物理内存地址;
在访问页表中对所述虚拟机物理内存地址进行操作,以使外部设备对虚拟机内存进行访问时,根据所述访问页表禁止访问所述虚拟机物理内存地址,或者,根据所述访问页表允许访问所述虚拟机物理内存地址。
本申请实施例还提供一种机器可读存储介质,所述机器可读存储介质上存储有若干计算机指令;所述计算机指令被执行时进行如下处理:
接收针对虚拟机内存的伸缩请求;
根据所述伸缩请求确定需要被伸缩的虚拟机物理内存地址;
在访问页表中对所述虚拟机物理内存地址进行操作,以使外部设备对虚拟机内存进行访问时,根据所述访问页表禁止访问所述虚拟机物理内存地址,或者,根据所述访问页表允许访问所述虚拟机物理内存地址。
基于与上述方法同样的申请构思,本申请实施例还提供一种内存管理装置,所述内存管理装置包括:接收模块,用于接收针对宿主机内存的伸缩请求;
确定模块,用于根据所述伸缩请求确定需要被伸缩的宿主机物理内存地址;
处理模块,用于在访问页表中对所述宿主机物理内存地址进行操作,以使外部设备对虚拟机内存进行访问时,根据所述访问页表禁止访问所述宿主机物理内存地址,或者,根据所述访问页表允许访问所述宿主机物理内存地址。
示例性的,若所述伸缩请求用于对宿主机内存进行扩容,所述处理模块在访问页表中对所述宿主机物理内存地址进行操作,以根据所述访问页表禁止访问所述宿主机物理内存地址,具体用于:从所述访问页表中删除所述宿主机物理内存地址;或者,在所述访问页表中为所述宿主机物理内存地址添加禁止标记,所述禁止标记用于指示禁止对所述宿主机物理内存地址进行访问。
若所述伸缩请求用于对宿主机内存进行缩容,所述处理模块在访问页表中对所述宿主机物理内存地址进行操作,以根据所述访问页表允许访问所述宿主机物理内存地址,具体用于:根据所述宿主机物理内存地址确定虚拟机物理内存地址,并在所述访问页表中添加所述宿主机物理内存地址与所述虚拟机物理内存地址的映射关系。
所述处理模块根据所述宿主机物理内存地址确定虚拟机物理内存地址时具体用于:根据所述宿主机物理内存地址确定虚拟内存地址;根据所述虚拟内存地址确定所述虚拟机物理内存地址。
基于与上述方法同样的申请构思,本申请实施例还提供一种内存管理设备,包括:处理器和机器可读存储介质,所述机器可读存储介质上存储有若干计算机指令,所述处理器执行计算机指令时能够实现上述的方法。
例如,所述处理器执行所述计算机指令时进行如下处理:
接收针对宿主机内存的伸缩请求;
根据所述伸缩请求确定需要被伸缩的宿主机物理内存地址;
在访问页表中对所述宿主机物理内存地址进行操作,以使外部设备对虚拟机内存进行访问时,根据所述访问页表禁止访问所述宿主机物理内存地址,或者,根据所述访问页表允许访问所述宿主机物理内存地址。
本申请实施例还提供一种机器可读存储介质,所述机器可读存储介质上存储有若干计算机指令;所述计算机指令被执行时进行如下处理:
接收针对宿主机内存的伸缩请求;
根据所述伸缩请求确定需要被伸缩的宿主机物理内存地址;
在访问页表中对所述宿主机物理内存地址进行操作,以使外部设备对虚拟机内存进行访问时,根据所述访问页表禁止访问所述宿主机物理内存地址,或者,根据所述访问页表允许访问所述宿主机物理内存地址。
参见图7所示,为本申请实施例中提出的内存管理设备的结构图,所述内存管理设备70可以包括:处理器71,网络接口72,总线73,存储器74。存储器74可以是任何电子、磁性、光学或其它物理存储装置,可以包含或存储信息,如可执行指令、数据等等。例如,存储器74可以是:RAM(Radom Access Memory,随机存取存储器)、易失存储器、非易失性存储器、闪存、存储驱动器(如硬盘驱动器)、固态硬盘、任何类型的存储盘(如光盘、dvd等)。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可以由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其它可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其它可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
而且,这些计算机程序指令也可以存储在能引导计算机或其它可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或者多个流程和/或方框图一个方框或者多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其它可编程数据处理设备上,使得在计算机或者其它可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其它可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。
- 一种直接内存访问内存管理方法、装置和主控设备
- 一种直接内存访问内存管理方法、装置和主控设备