内存处理方法、装置、电子设备及可读介质与流程

文档序号:30514238发布日期:2022-06-25 02:48阅读:72来源:国知局
内存处理方法、装置、电子设备及可读介质与流程

1.本发明实施例涉及电子设备技术领域,尤其涉及一种内存处理方法、装置、电子设备及可读介质。


背景技术:

2.随着网络技术的不断发展,虚拟机得到了越来越多的应用。而在使用虚拟机时,为了方便外接设备访问宿主机中虚拟机的内存,需要将外接设备直通给虚拟机。
3.现有方式在进行设备直通时,会将虚拟机的所有内存均分配给外接设备,以便外接设备访问该虚拟机的内存。这种方式中,在宿主机出现主机内存紧张的情况下,会影响宿主机的处理性能。


技术实现要素:

4.本发明实施例提供一种内存处理方法、装置、电子设备及可读介质,以避免在宿主机出现主机内存紧张的情况下,会影响宿主机的处理性能的问题。
5.第一方面,提供了一种内存处理方法,应用于连接有外接设备的宿主机,所述方法包括:
6.针对所述宿主机中的任一虚拟机,根据所述虚拟机的当前已分配内存,确定当前已分配内存量;所述当前已分配内存为所述虚拟机的虚拟机内存中当前可供所述外接设备直接访问的内存;
7.在所述当前已分配内存量不小于预设内存量阈值的情况下,取消对所述已分配内存中指定内存页的分配;其中,所述预设内存量阈值不大于所述虚拟机的虚拟机内存。
8.可选的,所述方法还包括:
9.在所述虚拟机的启动环节中,选择x个内存页,以作为第一内存页;所述x小于所述虚拟机内存中内存页的总数量m;
10.建立所述第一内存页对应的第一映射项,以将所述第一内存页初始化为可供所述外接设备直接访问的内存页。
11.可选的,所述方法还包括:
12.在所述虚拟机的运行环节中,若接收到对第二内存页的访问请求,建立所述第二内存页对应的第二映射项,以将所述第二内存页设置为可供所述外接设备直接访问的内存页;所述第二内存页与所述第一内存页不同;
13.相应地,所述在所述当前已分配内存量不小于预设内存量阈值的情况下,取消对所述已分配内存中指定内存页的分配,包括:
14.在所述第一内存页以及所述第二内存页的内存量总和不小于所述预设内存量阈值的情况下,根据当前已分配内存页的使用记录,选择所述指定内存页;取消对所述指定内存页的分配。
15.可选的,所述方法还包括:若接收到内存释放指令,将所述内存释放指令指示的内
存页作为第三内存页,并将所述第三内存页加入预设保留池;
16.所述根据当前已分配内存页的使用记录,选择所述指定内存页之前,所述方法还包括:
17.在所述预设保留池不为空的情况下,将最早加入所述预设保留池的第三内存页确定为所述指定内存页;
18.在所述预设保留池为空的情况下,执行所述根据当前已分配内存页的使用记录,选择所述指定内存页的操作。
19.可选的,所述将所述第三内存页加入预设保留池之前,所述方法还包括:
20.在所述第一内存页、所述第二内存页以及所述第三内存页对应的内存量之和不大于所述预设内存量阈值的情况下,执行所述将所述第三内存页加入预设保留池的操作;
21.在所述第一内存页、所述第二内存页以及所述第三内存页对应的内存量之和大于所述预设内存量阈值的情况下,直接取消对所述第三内存页的分配。
22.可选的,所述方法还包括:
23.检测所述虚拟机的当前负载量;
24.基于所述当前负载量调整所述预设内存量阈值;所述预设内存量阈值与所述当前负载量正相关。
25.第二方面,提供了一种内存处理装置,应用于连接有外接设备的宿主机,所述装置包括:
26.第一确定模块,用于针对所述宿主机中的任一虚拟机,根据所述虚拟机的当前已分配内存,确定当前已分配内存量;所述当前已分配内存为所述虚拟机的虚拟机内存中当前可供所述外接设备直接访问的内存;
27.第一取消模块,用于在所述当前已分配内存量不小于预设内存量阈值的情况下,取消对所述已分配内存中指定内存页的分配;其中,所述预设内存量阈值不大于所述虚拟机的虚拟机内存。
28.可选的,所述装置还包括:
29.选择模块,用于在所述虚拟机的启动环节中,选择x个内存页,以作为第一内存页;所述x小于所述虚拟机内存中内存页的总数量m;
30.第一建立模块,用于建立所述第一内存页对应的第一映射项,以将所述第一内存页初始化为可供所述外接设备直接访问的内存页。
31.可选的,所述装置还包括:
32.第二建立模块,用于在所述虚拟机的运行环节中,若接收到对第二内存页的访问请求,建立所述第二内存页对应的第二映射项,以将所述第二内存页设置为可供所述外接设备直接访问的内存页;所述第二内存页与所述第一内存页不同;
33.相应地,所述第一取消模块,具体用于:
34.在所述第一内存页以及所述第二内存页的内存量总和不小于所述预设内存量阈值的情况下,根据当前已分配内存页的使用记录,选择所述指定内存页;取消对所述指定内存页的分配。
35.可选的,所述装置还包括:加入模块,用于若接收到内存释放指令,将所述内存释放指令指示的内存页作为第三内存页,并将所述第三内存页加入预设保留池;
36.所述装置还包括:
37.第二确定模块,用于根据当前已分配内存页的使用记录,选择所述指定内存页之前,在所述预设保留池不为空的情况下,将最早加入所述预设保留池的第三内存页确定为所述指定内存页;
38.第一执行模块,用于在所述预设保留池为空的情况下,执行所述根据当前已分配内存页的使用记录,选择所述指定内存页的操作。
39.可选的,所述装置还包括:
40.第二执行模块,用于所述将所述第三内存页加入预设保留池之前,在所述第一内存页、所述第二内存页以及所述第三内存页对应的内存量之和不大于所述预设内存量阈值的情况下,执行所述将所述第三内存页加入预设保留池的操作;
41.第二取消模块,用于在所述第一内存页、所述第二内存页以及所述第三内存页对应的内存量之和大于所述预设内存量阈值的情况下,直接取消对所述第三内存页的分配。
42.可选的,所述装置还包括:
43.检测模块,用于检测所述虚拟机的当前负载量;
44.调整模块,用于基于所述当前负载量调整所述预设内存量阈值;所述预设内存量阈值与所述当前负载量正相关。
45.第三方面,提供了一种电子设备,包括:
46.一个或多个处理器;和其上存储有指令的一个或多个机器可读介质,当由所述一个或多个处理器执行时,使得所述电子设备执行所述内存处理方法。
47.第四方面,提供了一个或多个机器可读介质,其上存储有指令,当由一个或多个处理器执行时,使得所述处理器执行所述内存处理方法。
48.本发明实施例中,连接有外接设备的宿主机针对任一虚拟机,根据虚拟机的当前已分配内存,确定当前已分配内存量。当前已分配内存为虚拟机的虚拟机内存中当前可供外接设备直接访问的内存。在当前已分配内存量不小于预设内存量阈值的情况下,取消对已分配内存中指定内存页的分配;其中,预设内存量阈值不大于虚拟机的虚拟机内存。这样,可以避免分配虚拟机的所有内存,从而一定程度上可以避免宿主机内存紧张的情况下,影响宿主机的处理性能的问题。
49.上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
50.通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
51.图1是本发明实施例提供的一种内存处理方法的步骤流程图;
52.图2是本发明实施例提供的一种内存处理装置的结构框图;
53.图3是根据一示例性实施例示出的一种电子设备的结构框图。
具体实施方式
54.下面将参照附图更详细地描述本发明的示例性实施例。虽然附图中显示了本发明的示例性实施例,然而应当理解,可以以各种形式实现本发明而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本发明,并且能够将本发明的范围完整的传达给本领域的技术人员。
55.图1是本发明实施例提供的一种内存处理方法的步骤流程图,该方法可以应用于连接有外接设备的宿主机,如图1所示,该方法可以包括:
56.步骤101、针对所述宿主机中的任一虚拟机,根据所述虚拟机的当前已分配内存,确定当前已分配内存量;所述当前已分配内存为所述虚拟机的虚拟机内存中当前可供所述外接设备直接访问的内存。
57.本发明实施例中,虚拟机内存可以是虚拟机的所有内存。在一种示例性的应用场景中,在宿主机中部署虚拟机时,可以将宿主机的部分内存资源配置给虚拟机,以作为该虚拟机的虚拟机内存。宿主机中可以部署有一个或多个虚拟机,由于宿主机的部分内存配置给了虚拟机,因此,宿主机可使用的内存会相应减少。相应地,在虚拟机将所有的内存全部初始化为可供外接设备直接访问的情况下,即,虚拟机的所有内存均已分配,所有内存均被固定住的情况下,如果宿主机出现主机内存紧张的情况,由于配置给虚拟机的内存均被固定住无法供宿主机暂时使用,因此会影响宿主机的处理性能。其中,本发明实施例中的虚拟机(virtual machine)可以指的是基于内核的虚拟机(kernel-based virtual machines),该虚拟机可以通过软件模拟完整硬件系统功能,在物理机上为用户提供模拟的所有硬件资源,并在硬件资源上创建可运行的完整计算机系统。kvm是linux的一部分,使用常规的linux调度程序和内存管理,由一个可加载的内核模块和一个处理器特定模块(与处理器架构关联的)组成,该模块提供核心虚拟化基础设施。使用kvm,可以运行多个运行未修改的linux或windows映像的虚拟机。每个虚拟机都有私有的虚拟化硬件:网卡、磁盘、图形适配器等。kvm可以将运行在虚拟机上的操作系统(guest os)交换到磁盘以释放ram。在本实施例中以kvm为例进行详细说明,值得说明的是,本技术可以应用于能够虚拟cpu和内存的虚拟机,其具体采用的虚拟机类型可以根据实际设置,例如,虚拟机可以为vmware、virtualbox,等等。
58.进一步地,本发明实施例中的内存可以理解为内存区域,内存区域一般可以被划分为内存页,由内存页组成。当前已分配内存量可以为当前已分配并初始化为可供外接设备直接访问的内存页的数量。其中,当前已分配并可供外接设备直接访问的内存页可以是之前任一环节分配给外接设备,本发明实施例对此不作限制。虚拟机将内存页分配给外接设备使用,可以理解为建立表征该外接设备对应的输入输出虚拟地址(input output virtual address,iova)与该内存页对应的主机物理地址(host physical address,hpa)之间的映射关系的映射项,将该内存页固定给该外接设备使用。
59.步骤102、在所述当前已分配内存量不小于预设内存量阈值的情况下,取消对所述已分配内存中指定内存页的分配;其中,所述预设内存量阈值不大于所述虚拟机的虚拟机内存。
60.其中,预设内存量阈值可以是根据实际需求预先设置的,示例性地,预设内存量阈值可以小于虚拟机的虚拟机内存,例如,预设内存量阈值可以为虚拟机内存的70%,这样,
在当前被固定住的内存量较多时,就取消对指定内存页的分配,从而一定程度上可以确保虚拟机留有充足的内存。指定内存页可以根据实际需求选取,示例性地,可以随机选取也可以选择特定的已分配的内存页,例如选择使用频率低于预设频率阈值的内存页、选择被分配给活跃程度低于预设程度阈值的外接设备的内存页,等等,本发明实施例对此不作限制。这样,通过将使用频率低于预设频率阈值的内存页、被分配给活跃程度低于预设程度阈值的外接设备的内存页作为指定内存页,一定程度上可以避免外接设备在使用的内存页被取消分配,从而尽可能降低取消分配操作对外接设备的影响。
61.本发明实施例中,可以检测当前已分配内存量是否小于预设内存量阈值,如果不小于则可以确定当前被固定住的内存页的数量较多。因此,可以在这种情况下取消对已分配内存中指定内存页的分配,以使当前已分配内存量小于预设内存量阈值为止,进而一定程度上可以确保虚拟机留有内存。可以避免一开始就要分配虚拟机的所有内存,同时,可以避免运行过程中虚拟机的内存全部被分配。这样,在宿主机出现主机内存紧张的情况下,可以基于虚拟机未分配的内存缓解宿主机的主机内存紧张的问题,从而一定程度上确保宿主机的处理性能。需要说明的是,也可以直接设置小于虚拟机内存的预设内存量阈值,从而尽可能留有更多的内存,本发明实施例对此不作限制。
62.综上所述,本发明实施例提供的内存处理方法,连接有外接设备的宿主机针对任一虚拟机,根据虚拟机的当前已分配内存,确定当前已分配内存量。当前已分配内存为虚拟机的虚拟机内存中当前可供外接设备直接访问的内存。在当前已分配内存量不小于预设内存量阈值的情况下,取消对已分配内存中指定内存页的分配;其中,预设内存量阈值不大于虚拟机的虚拟机内存。这样,可以避免虚拟机的所有内存全被分配,从而一定程度上可以避免宿主机内存紧张的情况下,影响宿主机的处理性能的问题。
63.可选的,本发明实施例中还可以执行下述步骤:
64.步骤s21、在所述虚拟机的启动环节中,选择x个内存页,以作为第一内存页;所述x小于所述虚拟机内存中内存页的总数量m。
65.步骤s22、建立所述第一内存页对应的第一映射项,以将所述第一内存页初始化为可供所述外接设备直接访问的内存页,从而完成分配。
66.本发明实施例中,建立第一内存页对应的第一映射项,以将第一内存页初始化为可供外接设备直接访问的内存页,从而完成对该第一内存页的分配。可供外接设备直接访问的内存页即为已分配内存页。x的具体数量可以根据实际需求设置,第一内存页的内存量可以记为m1,其中,m1小于预设内存量阈值。具体的,进行分配时,可以建立所述第一内存页对应的第一映射项,并固定该第一内存页。例如,设置为页锁定内存。第一内存页对应的第一映射项可以用于表征外接设备对应的iova与该第一内存页对应的hpa之间的映射关系。第一内存页可以是单页大小大于常规页大小的内存页,即,虚拟机启动时可以将m1这部分内存采用大页映射。可以将第一映射项保存至i/o页表,具体可以保存至输入输出转译后备缓冲区(input output translation lookaside buffer,iotlb)。通过在i/o页表中记录映射项,可以方便宿主机获知哪些内存页可供外接设备直接访问。
67.进一步地,外接设备可以为一个或多个。在外接设备为多个的情况下,可以分别建立各外接设备对应的iova与该第一内存页对应的hpa之间的映射关系,即,多个外接设备共享所有的第一内存页。或者也可以是,建立各外接设备对应的iova与部分第一内存页对应
的hpa之间的映射关系,即,一个外接设备使用部分第一内存页,本发明实施例对此不作限定。
68.本发明实施例中,在虚拟机的启动环节中,选择x个内存页,以作为第一内存页。x小于虚拟机内存中内存页的总数量m。然后,建立第一内存页对应的第一映射项,以将第一内存页初始化为可供所述外接设备直接访问的内存页。这样,通过设置x小于虚拟机内存中内存页的总数量m,在虚拟机启动环节预先仅固定一部分内存,可以避免在虚拟机的启动环节,虚拟机的可用内存均被全部固定给外接设备,从而可以在确保运行环节中外接设备可以基于分配的内存进行访问的同时,避免宿主机内存紧张的情况下,影响宿主机的处理性能的问题。
69.可选的,本发明实施例中还可以执行下述步骤:
70.步骤s31、在所述虚拟机的运行环节中,若接收到对第二内存页的访问请求,建立所述第二内存页对应的第二映射项,以将所述第二内存页设置为可供所述外接设备直接访问的内存页;所述第二内存页与所述第一内存页不同。
71.实际应用场景中,外接设备在访问时可以优先使用第一内存页。示例性地,在外接设备以直接存储器访问(direct memory access,dma)方式访问的情况下,外接设备可以优先从m1表征的内存中分配dma页。其中,m1表征的内存中的内存页可以用作dma实现,虚拟机可以预先将能够用作dma实现的内存页的相关信息发送给宿主机,以便于宿主机可以基于相关信息获取哪些页可以用作dma实现,即,哪些页可以作为dma页进行分配。当然,可能出现外接设备需要访问除m1之外的其他内存页,即,访问第二内存页。因此,可以在接收到访问请求的情况下,检测当前是否存在该访问请求指示的内存页对应第一映射项,即,检测发起的dma地址(访问请求指示的内存页对应的地址)是否在i/o页表中存在映射。如果不存在,则可以确定接收到对第二内存页的访问请求,相应地,可以建立第二内存页对应的第二映射项,并固定该第二内存页。第二内存页对应的第二映射项可以用于表征外接设备对应的iova与该第二内存页对应的hpa之间的映射关系。第二内存页也可以是单页大小大于常规页大小的的内存页,即,在建立新的映射时,也可以采用大页映射。可以将第二映射项也保存至i/o页表,具体可以保存至iotlb。
72.相应地,上述在所述当前已分配内存量不小于预设内存量阈值的情况下,取消对所述已分配内存中指定内存页的分配的操作,具体可以包括:
73.步骤s41、在所述第一内存页以及所述第二内存页的内存量总和不小于所述预设内存量阈值的情况下,根据当前已分配内存页的使用记录,选择所述指定内存页。
74.步骤s42、取消对所述指定内存页的分配。
75.随着第二内存页的不断增多,虚拟机中实际分配出去的内存量越来越多,因此,本发明实施例中可以在新映射一个第二内存页的情况下,检测当前已分配的内存量是否不小于预设内存量阈值,即,检测第一内存页以及第二内存页的内存量总和是否不小于预设内存量阈值。其中,对于宿主机中的任一虚拟机,第一内存页以及第二内存页的内存量总和可以是该虚拟机的所有第一内存页的内存量与所有第二内存页的内存量之和。如果是,则可以确定指定内存页,以取消对指定内存页的分配,从而确保当前已分配内存量小于预设内存量阈值。需要说明的是,随着使用分配的第二内存页会越来越多,建立的第二内存页的映射项可以一直保持。相应地,在需要分配的某个第二内存页的情况下,可能会导致第一内存
页以及第二内存页的内存量总和不小于预设内存量阈值。
76.进一步地,可以根据已分配内存页的使用记录,确定各已分配内存页在指定时段中的被使用次数,将被使用次数最小的已分配内存页确定为指定内存页。其中,指定时段可以是距离当前时刻预设时长的时段。具体的,可以基于最近最少使用(least recently use,lru)算法确定指定内存页。具体的,可以通过将内存页对应的映射项清除并释放内存页,以实现取消对内存页的分配。
77.本发明实施例中,在虚拟机的运行环节中,若接收到对第二内存页的访问请求,建立第二内存页对应的第二映射项,以将第二内存页设置为可供外接设备直接访问的内存页;第二内存页与第一内存页不同。相应地,在第一内存页以及第二内存页的内存量总和不小于预设内存量阈值的情况下,根据当前已分配内存页的使用记录,选择指定内存页;取消对指定内存页的分配。这样,可以在支持新增分配的内存页的同时,一定程度上确保虚拟机留有较为充足的内存,从而确保宿主机的处理性能。
78.可选的,本发明实施例中还可以执行下述步骤:
79.步骤s51、若接收到内存释放指令,将所述内存释放指令指示的内存页作为第三内存页,并将所述第三内存页加入预设保留池。
80.其中,内存释放指令可以用于指示释放固定的内存页,内存释放指令可以是外接设备发送的,也可以是电子设备内部触发的,例如,当解除设备直通或者释放内存区域(例如,data buffer)的情况下,可以触发生成内存释放指令。内存释放指令指示的内存页可以是之前已分配的内存页,例如,内存释放指令指示的内存页可以属于第一内存页或第二内存页,第三内存页对应的第三映射项可以属于之前建立的第一映射项或第二映射项。
81.进一步地,本发明实施例中在收到内存释放指令之后,可以先仅解除该dma页面的固定,即,解除对该第三内存页的固定,但是保留该第三内存页的第三映射项,并将该第三内存页加入预设保留池。其中,预设保留池可以是预先设置的存储区。
82.相应地,本发明实施例中可以在根据当前已分配内存页的使用记录,选择所述指定内存页之前,先检测检测所述预设保留池是否为空。进一步地,在所述预设保留池不为空的情况下,将最早加入所述预设保留池的第三内存页确定为所述指定内存页。相应地,在预设保留池不为空的情况下,可以确定存在之前被解除固定但是还未取消分配的第三内存页,因此,可以从预设保留池中选择指定内存页。这种情况下,由于选中的指定内存页是之前已经解除固定的页面,因此,取消对所述内存页的分配的操作可以具体为:清除所述指定内存页对应的第三映射项,具体的,可以使用最近建立的第二映射项覆盖该指定内存页对应的第三映射项。进一步地,还可以将该指定内存页从预设保留池中清除,以避免不必要的占用。通过选择最早加入预设保留池的第三内存页作为指定内存页,一定程度上可以尽可能确保第三内存页能够尽快被取消分配。在所述预设保留池为空的情况下,执行所述根据当前已分配内存页的使用记录,选择指定内存页的操作。如果预设保留池为空的情况下,则可以直接选择最近最少使用的已分配内存页,从而尽可能保留更大概率会被使用的内存页。这种情况下,取消对所述内存页的分配的操作可以具体为:清除指定内存页对应的映射项,例如,使用最近建立的第二映射项替换该指定内存页对应的映射项,并释放指定内存页以取消对该指定内存页的固定。
83.可选的,本发明实施例中还可以执行下述步骤:
84.步骤s61、检测所述虚拟机的当前负载量。
85.示例性地,可以基于预设的负载检测算法,检测虚拟机的当前工作负载量,从而得到当前负载量。或者,也可以统计虚拟机当前的待处理任务数量以及已处理但未完成任务的数量,基于统计得到的数量,确定当前负载量。其中,数量越大,当前负载量越大。其中,检测当前负载量的操作可以周期性自动执行,也可以是响应于用户的指示操作执行,本发明实施例对此不作限制。
86.步骤s62、基于所述当前负载量调整所述预设内存量阈值;所述预设内存量阈值与所述当前负载量正相关。
87.本发明实施例中,如果当前负载量越大,那么预设内存量阈值可以被调整的越高。示例性地,可以检测当前负载量是否大于上一次检测到的负载量,如果大于,则为当前的预设内存量阈值增加指定值,以完成调整。如果不大于,则为当前的预设内存量阈值减去指定值,以完成调整。其中,指定值可以是预先设定的,也可以是将当前负载量与上一次检测到的负载量的差值的绝对值作为预设函数的输入,将该预设函数的输出作为指定值。其中,指定值为大于0的数值,预设函数的输出与输入正相关。其中,动态调整的过程可以基于气泡(balloon)机制实现。
88.如果预设内存量阈值过大,可能会导致宿主机的内存紧张,如果预设内存量阈值过小,可能会导致内存浪费,且影响虚拟机的性能。本发明实施例中,在虚拟机的运行过程中,基于虚拟机的工作负载,动态调整预设数据量阈值,一定程度上可以设置更合适的预设内存量阈值,从而可以避免设置的过小,导致内存浪费且影响虚拟机的性能的问题,以及,避免预设内存量阈值过大,导致宿主机的内存紧张的问题。当然,预设内存量阈值也可以静态配置,本发明实施例对此不作限制。
89.需要说明的是,本发明实施例中还可以在执行选择x个内存页以作为第一内存页的操作时,可以先获取虚拟机的预估负载量。然后根据预估负载量,确定x的取值。其中,x的取值与预估负载量正相关。这样,针对直通设备按需映射,从而一定程度上确保可以选择合适数量的第一内存页。其中,预估负载量可以是预先根据经验确定的,或者是,基于以该虚拟机的历史运行参数作为输入,基于预设预估算法预估得到的。
90.可选的,上述将所述第三内存页加入预设保留池之前,本发明实施例中还可以执行下述步骤:
91.步骤s71、在所述第一内存页、所述第二内存页以及所述第三内存页对应的内存量之和不大于所述预设内存量阈值的情况下,执行所述将所述第三内存页加入预设保留池的操作。
92.步骤s72、在所述第一内存页、所述第二内存页以及所述第三内存页对应的内存量之和大于所述预设内存量阈值的情况下,直接取消对所述第三内存页的分配。
93.本发明实施例中,第三内存页虽然被解除固定,但是第三内存页对应的第三映射项还不会被清除,也就是说,目前还未成功取消对第三内存页的分配。因此,可以检测第一内存页、第二内存页以及第三内存页对应的内存量之和,在三者内存量之和不大于预设内存量阈值的情况下,才将第三内存页加入预设保留池。否则,直接取消对所述第三内存页的分配,不将该第三内存页加入预设保留池。具体的,可以在响应于内存释放指令解除对该第三内存页的固定之后,删除第三内存页的第三映射项,以完成取消对第三内存页的分配的
操作,进而避免当前已分配内存量超出预设内存量阈值,确保虚拟机留有较为充足的内存。示例性地,以m1表示第一内存页集合的内存量,以m2表示第二内存页集合的内存量、m3表示保留在预设保留池中的内存页集合的内存量,m1+m2+m3≤t。其中,t为预设内存量阈值。内存量可以为内存页的数量,或者,是内存页所占据的数据量。
94.下面对本发明实施例涉及的一种应用场景进行说明。目前,基于输入输出内存管理单元(input output memory managerment unit,iommu)技术可以实现将外接设备直通给虚拟机,允许外接设备直接访问虚拟机的内存。外接设备发起请求使用的地址是iova,如果要访问到虚拟机实际存储的数据,需要采用hpa,因此iommu能将iova翻译成hpa。dma映射策略中,针对外接设备以dma方式进行访问时所使用的每个有效的iova,虚拟机都需要建立该iova到hpa的映射。也就是说,在iommu直通环境中,只要设备可以合理合法地使用该iova,就必须将该内存页固定住。但是如果预先固定住整个虚拟机的内存,在主机内存紧张的情况下,会影响主机性能。
95.在一种相关技术中,是采用持久映射。一旦映射了就一直保持这个映射,这样下次就可以重新使用这个映射,但是这种方式中依旧会固定虚拟机所有的内存。在一种解决方式中,是采用单次映射,在直接访问之前只映射一次内存,并在dma操作完成后立即取消映射。这种方式会导致运行开销过大。
96.在本发明实施例中,通过在虚拟机启动时为外接设备固定住一部分内存并直接进行映射,后续随着固定的内存越来越多,会基于预设内存量阈值进行动态调整,避免超出预设内存量阈值。这样,通过提供内存友好的内存处理方式,可以确保能够留有未被分配的内存,进而可以在缓解主机内存紧张情况的同时,获得一定的i/o性能,以及,避免过大的运行开销。
97.图2是本发明实施例提供的一种内存处理装置的结构框图,该装置应用于连接有外接设备的宿主机,该装置20包括:
98.第一确定模块201,用于针对所述宿主机中的任一虚拟机,根据所述虚拟机的当前已分配内存,确定当前已分配内存量;所述当前已分配内存为所述虚拟机的虚拟机内存中当前可供所述外接设备直接访问的内存;
99.第一取消模块202,用于在所述当前已分配内存量不小于预设内存量阈值的情况下,取消对所述已分配内存中指定内存页的分配;其中,所述预设内存量阈值不大于所述虚拟机的虚拟机内存。
100.可选的,所述装置20还包括:
101.选择模块,用于在所述虚拟机的启动环节中,选择x个内存页,以作为第一内存页;所述x小于所述虚拟机内存中内存页的总数量m;
102.第一建立模块,用于建立所述第一内存页对应的第一映射项,以将所述第一内存页初始化为可供所述外接设备直接访问的内存页。
103.可选的,所述装置20还包括:
104.第二建立模块,用于在所述虚拟机的运行环节中,若接收到对第二内存页的访问请求,建立所述第二内存页对应的第二映射项,以将所述第二内存页设置为可供所述外接设备直接访问的内存页;所述第二内存页与所述第一内存页不同;
105.相应地,所述第一取消模块201,具体用于:
106.在所述第一内存页以及所述第二内存页的内存量总和不小于所述预设内存量阈值的情况下,根据当前已分配内存页的使用记录,选择所述指定内存页;取消对所述指定内存页的分配。
107.可选的,所述装置20还包括:加入模块,用于若接收到内存释放指令,将所述内存释放指令指示的内存页作为第三内存页,并将所述第三内存页加入预设保留池;
108.所述装置20还包括:
109.第二确定模块,用于根据当前已分配内存页的使用记录,选择所述指定内存页之前,在所述预设保留池不为空的情况下,将最早加入所述预设保留池的第三内存页确定为所述指定内存页;
110.第一执行模块,用于在所述预设保留池为空的情况下,执行所述根据当前已分配内存页的使用记录,选择指定内存页的操作。
111.可选的,所述装置20还包括:
112.第二执行模块,用于所述将所述第三内存页加入预设保留池之前,在所述第一内存页、所述第二内存页以及所述第三内存页对应的内存量之和不大于所述预设内存量阈值的情况下,执行所述将所述第三内存页加入预设保留池的操作;
113.第二取消模块,用于在所述第一内存页、所述第二内存页以及所述第三内存页对应的内存量之和大于所述预设内存量阈值的情况下,直接取消对所述第三内存页的分配。
114.可选的,所述装置20还包括:
115.检测模块,用于检测所述虚拟机的当前负载量;
116.调整模块,用于基于所述当前负载量调整所述预设内存量阈值;所述预设内存量阈值与所述当前负载量正相关。
117.综上所述,本发明实施例提供的内存处理装置,连接有外接设备的宿主机针对任一虚拟机,根据虚拟机的当前已分配内存,确定当前已分配内存量。当前已分配内存为虚拟机的虚拟机内存中当前可供外接设备直接访问的内存。在当前已分配内存量不小于预设内存量阈值的情况下,取消对已分配内存中指定内存页的分配;其中,预设内存量阈值不大于虚拟机的虚拟机内存。这样,可以避免分配虚拟机的所有内存,从而一定程度上可以避免宿主机内存紧张的情况下,影响宿主机的处理性能的问题。
118.所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
119.图3是根据一示例性实施例示出的一种电子设备的结构框图。例如,电子设备400可以是移动电话,计算机,数字广播终端,消息收发设备,游戏控制台,平板设备,医疗设备,健身设备,个人数字助理等。
120.参照图3,电子设备400可以包括以下一个或多个组件:处理组件402,存储器404,电源组件406,多媒体组件408,音频组件410,输入/输出(i/o)的接口412,传感器组件414,以及通信组件416。
121.处理组件402通常控制电子设备400的整体操作,诸如与显示,电话呼叫,数据通信,相机操作和记录操作相关联的操作。处理元件402可以包括一个或多个处理器420来执行指令,以完成上述的方法的全部或部分步骤。此外,处理组件402可以包括一个或多个模块,便于处理组件402和其他组件之间的交互。例如,处理部件402可以包括多媒体模块,以
方便多媒体组件408和处理组件402之间的交互。
122.存储器404被配置为存储各种类型的数据以支持在设备400的操作。这些数据的示例包括用于在电子设备400上操作的任何应用程序或方法的指令,联系人数据,电话簿数据,消息,图片,视频等。存储器404可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(sram),电可擦除可编程只读存储器(eeprom),可擦除可编程只读存储器(eprom),可编程只读存储器(prom),只读存储器(rom),磁存储器,快闪存储器,磁盘或光盘。
123.电源组件406为电子设备400的各种组件提供电力。电源组件406可以包括电源管理系统,一个或多个电源,及其他与为电子设备400生成、管理和分配电力相关联的组件。
124.多媒体组件408包括在所述电子设备400和用户之间的提供一个输出接口的屏幕。在一些实施例中,屏幕可以包括液晶显示器(lcd)和触摸面板(tp)。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。所述触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与所述触摸或滑动操作相关的持续时间和压力。在一些实施例中,多媒体组件408包括一个前置摄像头和/或后置摄像头。当电子设备400处于操作模式,如拍摄模式或视频模式时,前置摄像头和/或后置摄像头可以接收外部的多媒体数据。每个前置摄像头和后置摄像头可以是一个固定的光学透镜系统或具有焦距和光学变焦能力。
125.音频组件410被配置为输出和/或输入音频信号。例如,音频组件410包括一个麦克风(mic),当电子设备400处于操作模式,如呼叫模式、记录模式和语音识别模式时,麦克风被配置为接收外部音频信号。所接收的音频信号可以被进一步存储在存储器404或经由通信组件416发送。在一些实施例中,音频组件410还包括一个扬声器,用于输出音频信号。
126.i/o接口412为处理组件402和外围接口模块之间提供接口,上述外围接口模块可以是键盘,点击轮,按钮等。这些按钮可包括但不限于:主页按钮、音量按钮、启动按钮和锁定按钮。
127.传感器组件414包括一个或多个传感器,用于为电子设备400提供各个方面的状态评估。例如,传感器组件414可以检测到设备400的打开/关闭状态,组件的相对定位,例如所述组件为电子设备400的显示器和小键盘,传感器组件414还可以检测电子设备400或电子设备400一个组件的位置改变,用户与电子设备400接触的存在或不存在,电子设备400方位或加速/减速和电子设备400的温度变化。传感器组件414可以包括接近传感器,被配置用来在没有任何的物理接触时检测附近物体的存在。传感器组件414还可以包括光传感器,如cmos或ccd图像传感器,用于在成像应用中使用。在一些实施例中,该传感器组件414还可以包括加速度传感器,陀螺仪传感器,磁传感器,压力传感器或温度传感器。
128.通信组件416被配置为便于电子设备400和其他设备之间有线或无线方式的通信。电子设备400可以接入基于通信标准的无线网络,如wifi,2g或3g,或它们的组合。在一个示例性实施例中,通信部件414经由广播信道接收来自外部广播管理系统的广播信号或广播相关信息。在一个示例性实施例中,所述通信部件414还包括近场通信(nfc)模块,以促进短程通信。例如,在nfc模块可基于射频识别(rfid)技术,红外数据协会(irda)技术,超宽带(uwb)技术,蓝牙(bt)技术和其他技术来实现。
129.在示例性实施例中,电子设备400可以被一个或多个应用专用集成电路(asic)、数
字信号处理器(dsp)、数字信号处理设备(dspd)、可编程逻辑器件(pld)、现场可编程门阵列(fpga)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述方法。
130.本发明实施例还提供一种电子设备,包括一个或多个处理器;和其上存储有指令的一个或多个机器可读介质,当由所述一个或多个处理器执行时,使得所述电子设备执行上述方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
131.本发明实施例还提供一个或多个机器可读介质,其上存储有指令,当由一个或多个处理器执行时,使得所述处理器实现上述方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。其中,所述的机器可读介质,如只读存储器(read-only memory,简称rom)、随机存取存储器(random access memory,简称ram)、磁碟或者光盘等。
132.需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
133.通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。
134.上面结合附图对本发明的实施例进行了描述,但是本发明并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本发明的启示下,在不脱离本发明宗旨和权利要求所保护的范围情况下,还可做出很多形式,均属于本发明的保护之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1