虚拟存储器元数据管理的制作方法

文档序号:29856110发布日期:2022-04-30 09:24阅读:79来源:国知局
虚拟存储器元数据管理的制作方法

1.本发明总体上涉及虚拟存储器的领域,并且更具体地涉及虚拟存储器元数据的管理。


背景技术:

2.虚拟存储器(vm)是由操作系统提供的功能。操作系统创建虚拟存储器空间,应用和程序可以访问该虚拟存储器空间,就好像该空间是单个连续的物理存储器设备。虚拟存储器空间可以是一起协同操作的物理存储器以及基于盘的存储资源的组合。虚拟存储器充当地址的替代集合并扩展可用存储器的范围。操作系统可以通过为要使用的虚拟存储器分配一定量的磁盘空间来配置虚拟存储器。应用和程序使用虚拟存储器空间内的这些虚拟地址来存储数据和指令,这些数据和指令可能不需要像可能被更频繁地寻址的其他数据集或指令那样被频繁地寻址。当操作系统调用虚拟存储器地址位置时,由虚拟存储器存储的数据和指令被复制到物理存储器的物理地址。为了将虚拟存储器复制到物理存储器,操作系统将虚拟存储器划分成页。每个页包含由基于盘的存储装置存储直到操作系统调用该地址的固定数量的地址。当被调用时,操作系统在被称为映射的处理中将虚拟地址转换成真实地址。虚拟页从基于盘的存储装置到主存储器的复制被称为分页(paging)或交换(swapping)。
3.存储器分配是按请求分配存储器块的过程。分配器以少量的大块从操作系统接收存储器,分配器划分这些大块以满足对较小块的请求。分配器使任何返回的块可用于操作系统以满足将来的分配请求。


技术实现要素:

4.本公开的实施例涉及用于管理可缩放虚拟存储器的计算机实现的方法、相关联的计算机系统和计算机程序产品。所述计算机实现的方法包括:由处理器实例化多个虚拟存储器(vm)元数据容器,其中vm元数据容器的总数包括足够的vm元数据块以将供应给计算机系统的总真实物理存储器表示为虚拟存储器;由所述处理器将所述多个vm元数据容器分成两个或更多个容器组,其中所述两个或更多个容器组中的每个由不同的锁控制;响应于向vm元数据块分配存储器对象元数据的请求,由所述处理器扫描所述两个或更多个容器组以得到最少使用容器组;由所述处理器在所述最少使用容器组中查询所述最少使用容器组内的最少使用vm元数据容器;由所述处理器将所述存储器对象元数据分配给所述最少使用vm元数据容器的vm元数据块,满足分配所述存储器对象元数据的请求。
5.本公开的实施例涉及一种用于管理可缩放虚拟存储器的计算机实现的方法、相关联的计算机系统和计算机程序产品,所述计算机实现的方法包括:由处理器接收对包括多个容器组的元数据块分配执行存储器管理操作的请求,所述多个容器组包括一个或多个vm元数据容器,其中对所述多个容器组中的各个容器组的访问由不同的锁控制;由所述处理器获取控制第一容器组的第一锁;由所述处理器对由作为所述元数据块分配的一部分的第
一容器组的vm元数据块存储的存储器对象元数据进行所有存储器管理操作;由所述处理器释放所述第一锁;以及由所述处理器获取控制第二容器组的第二锁。
6.本公开的另选实施例涉及一种用于管理可缩放虚拟存储器的计算机实现的方法、相关联的计算机系统和计算机程序产品,所述计算机实现的方法包括:由处理器实例化多个虚拟存储器(vm)元数据容器,其中vm元数据容器的总数包括足够的vm元数据块以将供应给计算机系统的总物理ram表示为虚拟存储器;由所述处理器将所述多个vm元数据容器分组成两个或更多个容器组,其中所述两个或更多个容器组中的每个由不同的锁控制;由处理器接收增长存储器对象并增加被分配用于存储所述存储器对象的存储器对象元数据的vm元数据块的数量的请求;由所述处理器确定负责先前分配至少一个vm元数据块以用于存储所述存储器对象的存储器对象元数据的第一容器组的第一vm元数据容器;由所述处理器计算满足所述增长请求的元数据块要求;由所述处理器确定满足所述增长请求的元数据块要求是否大于所述第一vm元数据容器的空闲vm元数据块的大小。
7.本公开的实施例涉及一种用于管理可缩放虚拟存储器的计算机系统和相关联的计算机实现的方法和计算机程序产品,所述计算机系统包括:处理器;以及计算机可读存储介质,所述计算机可读存储介质耦合到所述至少一个处理器,其中所述计算机可读存储介质包含执行计算机实现方法的程序指令,所述计算机实现方法包括:由所述处理器实例化多个虚拟存储器(vm)元数据容器,其中vm元数据容器的总数包括足够的vm元数据块以将供应给计算机系统的所有真实物理存储器表示为虚拟存储器;由所述处理器将所述多个vm元数据容器分组成两个或更多个容器组;响应于向vm元数据块分配存储器对象元数据的请求,由所述处理器扫描所述两个或更多个容器组以获得最少使用容器组;以及由所述处理器在所述最少使用容器组中查询所述最少使用容器组内的最少使用vm元数据容器。
附图说明
8.图1描述了根据本公开可实现本文所描述的实施例的数据处理系统的内部和外部部件的框图的实施例。
9.图2a描绘了根据本公开的用于分配存储器对象元数据的计算环境的实施例的框图。
10.图2b描绘了根据本公开的用于分配存储器对象数据的计算环境的另选实施例的框图。
11.图3a描绘了用于存储和检索存储在虚拟存储器中的数据或指令的计算环境的实施例的框图。
12.图3b示出用于存储和检索存储在虚拟存储器中的数据或指令的计算环境的另选实施例的框图,该计算环境包括逻辑高速缓存。
13.图3c描绘了用于存储和检索存储在虚拟存储器中的数据或指令的计算环境的另一另选实施例的框图,该计算环境包括物理高速缓存。
14.图4a示出了根据本公开描绘实现彼此并行地操作的预先实例化vm元数据容器的实施例的框图。
15.图4b示出了根据本公开描绘存储器对象元数据到彼此并行地操作的vm元数据容器的vm元数据块的分配的分布的框图。
16.图5示出了描绘元数据块分配的实施例的框图,该元数据块分配包括分布在由不同锁单独控制的多个容器组上的存储器对象元数据以及通过容器组对虚拟存储器对象元数据的管理区分优先级。
17.图6描绘了根据本公开的用于分配存储器对象元数据的计算环境的另一另选实施例的框图。
18.图7描绘了根据本公开的用于分配器实例化vm元数据容器的算法的实施例。
19.图8a描绘了实现将存储器对象元数据分配给vm元数据容器的vm元数据块的算法的实施例。
20.图8b描绘了实现用于创建用于分配存储器对象元数据的附加vm元数据容器的后内核过程的算法的实施例。
具体实施方式
21.本文中使用的术语仅用于描述具体实施方式的目的,而并非旨在限制本公开。如本文中使用的,除非上下文另有明确指示,否则单数形式“一”、“一个”和“该”旨在也包括复数形式。还应当理解,当在本说明书中使用术语“包括”和/或“包含”时,其指定所述特征、步骤、操作、元件和/或部件的存在,但不排除一个或多个其他特征、步骤、操作、元件、部件和/或其组合的存在或添加。
22.以下权利要求书中的所有装置或步骤加上功能元件的对应结构、材料、动作和等效物旨在包括用于结合如具体要求保护的其他要求保护的元件来执行所述功能的任何结构、材料或动作。已经出于说明和描述的目的呈现了对本公开的描述,但并不旨在是详尽的或限于所公开形式的本公开。在不背离本公开的范围的情况下,许多修改和变化对于本领域普通技术人员来说是显而易见的。选择和描述实施例以便最好地解释本公开的原理和实际应用,并且使本领域的其他普通技术人员能够针对具有适合于预期的特定用途的各种修改的各种实施例来理解本公开。
23.概述
24.本公开的实施例认识到存在对用于管理虚拟存储器元数据操作并且更具体地为可缩放虚拟存储器管理的高效方法、系统和计算机程序产品的需要。随着系统存储器和处理器的数量和/或处理功率的增加,来自不同进程的对系统的需求按比例增加。随着系统存储器需求的缩放增加,现有的存储器分配技术遭受虚拟存储器管理操作的性能降级。现有的虚拟存储器管理技术通常按需实现vm元数据容器的创建。“vm元数据容器”可以指代可以保持负责存储元数据的vm元数据块的容器,所述元数据可以描述由应用、程序或进程使用的存储器对象。包含大量存储器的计算系统可以利用多个vm元数据容器,以便获得足够的vm元数据块,所述vm元数据块可以用虚拟存储器表示所有现有的物理存储器。
25.当前可用的vm管理技术使用跨越计算系统的所有vm元数据容器并控制对其访问的单个锁来控制vm元数据块的分配。向vm元数据容器分配存储器对象元数据可以遵循“首次适应(first fit)”算法,由此将填充足够大以包含存储器对象元数据的可用的第一个vm元数据容器,并且如果现有vm元数据容器不能适应该存储器对象元数据的空间要求,则可以添加后续vm元数据容器。由于vm元数据容器由管理虚拟存储器操作的系统按需创建,因此仅一个锁被创建和利用,导致一次仅使用一个vm元数据容器,即使多个元数据容器可能
是可用的。这进而会致使vm元数据容器被前向加载存储器对象元数据,因为管理虚拟存储器分配的系统将偏好找到的具有足够空间的第一个元数据容器并在移动到下一可用元数据容器之前使用第一个找到的元数据容器直到该元数据容器已满。结果,剩余的元数据容器会保持为空或大部分为空,直到系统移动到空的元数据容器并开始用存储器对象元数据填充空的vm元数据容器。
26.虚拟存储器管理所采用的首次适应算法的不利效果在具有少量存储器的系统上可能不太明显,因为具有少量存储器的系统不使用大量vm元数据容器。然而,本公开的实施例认识到,利用大量存储器的系统创建大量vm元数据容器并且不能彼此并行地访问这些vm元数据容器,因为首次适应技术使用仅获取单个锁的实现方式。本技术的实施例针对利用大量存储器的系统改进虚拟存储器管理操作的缩放,从而导致当与利用首次适应算法的系统相比时改进的性能、以及虚拟存储器管理操作的更少降级。本公开的实施例通过使用多个锁定机构进一步增加虚拟存储器锁机构的粒度,允许系统并行访问多个vm元数据容器(而不是一次利用一个vm元数据容器),提高存储器分配性能。
27.本公开的实施例可以例如在引导系统时预先实例化多个vm元数据容器。实施例可以以这样的方式实例化vm元数据容器:供应到vm元数据容器的虚拟存储器的总量等于系统可用的真实物理存储器(诸如ram)的量。例如,如果系统可用的ram的总量是32tb,则从组合的所有vm元数据容器可用的虚拟存储器的组合总量是32tb。可根据需要创建附加元数据容器。使用如本文所公开的预先实例化的vm元数据容器,可以允许系统在系统需要创建附加vm元数据容器之前将所有物理存储器分配为虚拟存储器。本公开的实施例可遵循引导系统的操作系统确定要实例化的vm元数据容器的数量的一个或多个算法。确定可基于可用的处理器和存储器资源的量,并且可将一个或多个vm元数据容器放入容器组中,其中vm元数据容器的分组中的每一个可被分配给由系统获取的单个锁。
28.本公开的实施例可以利用“最少使用”分配算法(而不是“首次适应”)。在此描述的“最少使用”技术利用了vm元数据容器的预先实例化的组,这些vm元数据容器可以被分配给所述多个容器组之一。当请求新的元数据块分配时,存储器分配器可以查询vm元数据容器。分配器可以对元数据容器组的使用水平进行采样,并且分配器然后可以在容器组内选择最少使用或较少使用的元数据容器以满足分配请求。在采样期间,分配器可以在元数据容器被解锁时扫描元数据容器或元数据容器组,以便将锁竞争保持在最小值。结果,按照锁组织的元数据容器组可以以相等速率或几乎相等速率用存储器对象元数据填充。此外,通过在单个锁内维护包括多个元数据容器的容器分组,分配器的实施例可以选择最少使用的元数据容器分组内的最少使用元数据容器来用存储器对象元数据填充。
29.本公开的实施例进一步认识到,在一些情况下,存储器对象可请求增长,从而增加已接收了vm元数据块分配的存储器对象所消耗的虚拟存储器的量。接收增长请求的分配器的实施例可以通过将先前分配来接收存储器对象元数据的原元数据容器作为目标来满足增长请求。在目标元数据容器不包括足够的空闲空间来满足增长请求的情况下,分配器可以通过将存储器对象元数据分配给与分配器最初作为目标的目标元数据容器相同的容器组内的另一vm元数据容器、将该存储器对象的vm元数据块分配保持在相同的容器组内并且访问因此由单个锁来控制,来满足该请求。将存储器对象元数据保持在单个锁内可帮助防止锁颠簸(thrashing),锁颠簸可由使存储器对象分配跨越多个锁而引起。将存储器对象分
配维持在单个锁内可通过避免需要获取一个以上的锁来执行操作或存取存储器对象元数据,来优化存储器分配的管理。
30.本公开的实施例进一步认识到,在接收到增长请求或新存储器分配并且单个锁内的vm元数据容器几乎满的一些情况下,将存储器对象分配限于单个vm元数据容器或由单个锁管理的vm元数据容器组可能在请求时是不可行的。存储器对象元数据可以跨越不同容器组内的多个vm元数据容器。本公开的实施例可以在执行存储器管理操作之前基于容器组对操作的执行进行排序,以避免必须多次获取相同的锁。vm操作可以同时管理驻留在单个获取的锁下的存储器对象元数据,然后可以在操作结束时释放该锁,并且可以从不需要再次重新获取锁,而不是按照元数据块被原始分配的顺序来执行针对元数据块分配的存储器操作。vm元数据块可以基于分配vm元数据的容器组来分组。例如,vm元数据块的分配可以被分配给驻留在锁a、b和c下的多个vm元数据容器,其中前三个块被分配给“锁a”,第四个块被分配给“锁b”,第五个块被分配给“锁c”,并且第六个块被分配给“锁b”。代替通过首先针对前三个块获取“锁a”、然后针对第四个块获取锁b、针对第五个块获取锁c随后针对第六个块再次重新获取锁b来执行vm管理操作,本公开的实施例可以通过针对前三个块获取“锁a”、释放前三个元数据块、释放“锁a”然后获取“锁b”、释放第四个块和第六个块并释放“锁b”来执行存储器管理操作。存储器管理操作可以完全释放“锁b”,因为对第四个和第六个块的分配已经被释放,而不必在释放位于“锁c”中的第5块之后重新获取“锁b”。
31.数据处理系统
32.本发明可以是任何可能的技术细节集成度的系统、方法和/或计算机程序产品。计算机程序产品可包括其上具有用于使处理器执行本发明的各方面的计算机可读程序指令的计算机可读存储介质。
33.计算机可读存储媒体可为可保留和存储供指令执行装置使用的指令的有形装置。计算机可读存储介质可以是,例如但不限于,电子存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备、或者上述的任意合适的组合。计算机可读存储介质的更具体示例的非穷尽列表包括以下各项:便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、静态随机存取存储器(sram)、便携式紧凑盘只读存储器(cd-rom)、数字通用盘(dvd)、记忆棒、软盘、诸如穿孔卡之类的机械编码设备或具有记录在其上的指令的槽中的凸出结构、以及上述各项的任何合适的组合。如本文所使用的计算机可读存储媒体不应被解释为暂时性信号本身,例如无线电波或其他自由传播的电磁波、通过波导或其他传输媒体传播的电磁波(例如,穿过光纤电缆的光脉冲)或通过电线发射的电信号。
34.本文中所描述的计算机可读程序指令可以经由网络(例如,互联网、局域网、广域网和/或无线网络)从计算机可读存储介质下载到相应的计算/处理设备,或者下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光传输纤维、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配器卡或网络接口接收来自网络的计算机可读程序指令,并转发计算机可读程序指令以存储在相应计算/处理设备内的计算机可读存储介质中。
35.用于执行本发明的操作的计算机可读程序指令可以是汇编指令、指令集架构(isa)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、集成电路的配置数
据、或以一种或多种程序设计语言的任何组合编写的源代码或目标代码,这些程序设计语言包括面向对象的程序设计语言(诸如smalltalk、c++等)和过程程序设计语言(诸如“c”程序设计语言或类似程序设计语言)。计算机可读程序指令可以完全地在用户计算机上执行、部分在用户计算机上执行、作为独立软件包执行、部分在用户计算机上部分在远程计算机上执行或者完全在远程计算机或服务器上执行。在后一种情况下,远程计算机可通过任何类型的网络(包括局域网(lan)或广域网(wan))连接至用户计算机,或者可连接至外部计算机(例如,使用互联网服务提供商通过互联网)。在一些实施例中,包括例如可编程逻辑电路、现场可编程门阵列(fpga)或可编程逻辑阵列(pla)的电子电路可以通过利用计算机可读程序指令的状态信息来使电子电路个性化来执行计算机可读程序指令,以便执行本发明的各方面。
36.下面将参照根据本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述本发明。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。
37.这些计算机可读程序指令可被提供给计算机或其他可编程数据处理装置的处理器以产生机器,使得经由计算机或其他可编程数据处理装置的处理器执行的指令创建用于实现在流程图和/或框图的或多个框中指定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置、和/或其他设备以特定方式工作,从而,其中存储有指令的计算机可读存储介质包括包含实现流程图和/或框图中的或多个方框中规定的功能/动作的方面的指令的制造品。
38.也可以把计算机可读程序指令加载到计算机、其他可编程数据处理装置、或其他设备上,使得在计算机、其他可编程装置或其他设备上执行一系列操作步骤,以产生计算机实现的处理,使得在计算机、其他可编程装置或其他设备上执行的指令实现流程图和/或框图中的或多个方框中规定的功能/动作。
39.附图中的流程图和框图示出了根据本发明的不同实施例的系统、方法和计算机程序产品的可能实现方式的架构、功能和操作。对此,流程图或框图中的每个框可表示指令的模块、段或部分,其包括用于实现指定的逻辑功能的一个或多个可执行指令。在一些备选实现中,框中标注的功能可以不按照图中标注的顺序发生。例如,连续示出的两个方框实际上可以作为一个步骤完成,同时、基本上同时、以部分或完全时间上重叠的方式执行,或者方框有时可以以相反的顺序执行,这取决于所涉及的功能。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作或执行专用硬件与计算机指令的组合的专用的基于硬件的系统来实现。
40.已经出于说明的目的呈现了本发明的各种实施方式的描述,但并不旨在是详尽的或者限于所公开的实施方式。在不背离本发明的范围的情况下,许多修改和变化对于本领域普通技术人员来说是显而易见的。在此所使用的术语被选择来最好地解释实施例的原理、实际应用、或优于市场中所发现的技术的技术改进、或使得本领域普通技术人员能够理解在此所披露的实施例。
41.图1示出了数据处理系统100的框图,数据处理系统100可以是能够执行在本文中描述的计算操作的计算系统的简化示例。数据处理系统100可以表示在计算环境200、290、600中描绘的一个或多个计算系统或设备,如图2a至6中所示,并且根据本公开的实施例。应
当理解,图1仅提供数据处理系统100的一个实现方式的图示,并且不暗示关于其中可以实施不同实施例的环境的任何限制。通常,图1中示出的组件可以表示能够执行机器可读程序指令的任何电子设备。
42.虽然图1示出了数据处理系统100的一个示例,但是数据处理系统100可以采取许多不同的形式,包括裸机计算机系统和虚拟计算机系统。例如,数据处理系统100可以采取以下形式:个人台式计算机系统、膝上型计算机、笔记本计算机、平板计算机、服务器、客户端系统、网络设备、网络终端、瘦客户端、厚客户端、自助服务终端、电话通信设备(例如,智能电话)、多处理器系统、基于微处理器的系统、小型计算机系统、大型计算机系统、智能设备或物联网(iot)设备。数据处理系统100可以在联网计算环境和/或分布式云计算环境中操作,其可以包括本文描述的任何系统或设备和/或本领域普通技术人员已知或使用的附加计算设备或系统。
43.数据处理系统100可以包括通信结构112,其可以在一个或多个处理器103、存储器105、持久性存储装置106、高速缓存107、通信单元111和一个或多个输入/输出(i/o)接口115之间提供电子通信。通信结构112可以用设计用于在处理器103(诸如微处理器、通信和网络处理器等)、存储器105、外部设备117和数据处理系统100内的任何其他硬件组件之间传递数据和/或控制信息的任何架构来实现。例如,通信结构112可以实现为一个或多个总线,诸如地址总线305或数据总线307。
44.存储器105和持久性存储装置106可以是计算机可读存储介质。存储器105的实施例可以包括随机存取存储器(ram)和高速缓存107存储器。通常,存储器105可包括任何合适的易失性或非易失性计算机可读存储介质,并且可包括被编程到存储器105中的固件或其他软件。本文中描述的程序114、软件应用程序223、用户进程221和服务可以存储在存储器105和/或持久性存储装置106中,用于由计算机系统100的相应处理器103中的一个或多个执行和/或访问。
45.持久性存储装置106可以包括多个磁性硬盘驱动器。可替代地,或除了磁硬盘驱动器之外,持久性存储装置106可以包括一个或多个固态硬盘驱动器、半导体存储设备、只读存储器(rom)、可擦可编程只读存储器(eprom)、闪存、或能够存储程序指令或数字信息的任何其他计算机可读存储介质。持久性存储装置106所使用的介质的实施例还可以是可移除的。例如,可移动硬盘驱动器可以用于持久性存储装置106。其他示例包括光盘和磁盘、拇指驱动器和智能卡,它们被插入到驱动器中以便转移到另计算机可读存储介质(其也是持久性存储装置106的一部分)上。
46.通信单元111提供了数据处理系统100之间的电子通信的便利。例如,在一个或多个计算机系统或设备之间经由通信网络250。在示例性实施例中,通信单元111可以包括网络适配器或接口,诸如tcp/ip适配器卡、无线wi-fi接口卡、3g、4g或5g无线接口卡或其他有线或无线通信链路。通信网络可包括例如铜线、光纤、无线传输、路由器、防火墙、交换机、网关计算机、边缘服务器和/或其他网络硬件,所述其他网络硬件可以是通信网络的节点的一部分或连接到通信网络的节点,所述通信网络包括设备、主机系统201、终端或其他网络计算机系统。用于实施本发明的实施例的软件和数据可以通过通信单元111(例如,经由互联网、局域网或其他广域网)下载到在网络环境中操作的计算机系统。程序114的软件和数据可以从通信单元111加载到持久性存储装置106中。
47.一个或多个i/o接口115可允许与可连接到数据处理系统100的其他设备进行数据的输入和输出。例如,i/o接口115可提供到一个或多个外部设备117(诸如一个或多个智能设备、iot设备)、记录设备(诸如音频系统、相机系统)、一个或多个传感器设备、输入设备(诸如键盘、计算机鼠标、触摸屏、虚拟键盘、触摸板、定点设备)或其他人机接口设备的连接。外部设备117还可包括便携式计算机可读存储介质,诸如例如拇指驱动器、便携式光盘或磁盘、以及存储卡。i/o接口115可连接到人类可读显示器118。人类可读显示器118提供向用户显示数据的机制,并且可以是例如计算机监视器或屏幕。人类可读显示器118还可以是结合的显示器并且可以用作触摸屏,诸如平板计算机的内置显示器。
48.用于管理虚拟存储器元数据的分配的系统
49.参考附图,图2a-6描绘了可以使用在计算环境200、290、600内操作的一个或多个数据处理系统100来执行以实现用于使用一个或多个vm元数据容器402a-402f(统称为“vm元数据容器402”)来管理将虚拟存储器分配给存储器对象的系统、方法和计算机程序产品的方案。计算环境200、290、600的实施例可以包括经由设备网络250互连的一个或多个数据处理系统100。连接到设备网络250的数据处理系统100可以是专用系统或设备,其可以包括但不限于一个或多个主机系统201和/或一个或多个客户端系统227a、227b...227n(统称为客户端系统227)的互连,客户端系统227可以请求并利用主机系统201的资源来处理数据或输入指令,该数据或输入指令可能需要分配虚拟存储器以存储用于用户进程221、应用程序223、程序114或服务的一个或多个存储器对象的数据和指令。
50.在图2a-6的实施例中举例说明的数据处理系统100不仅可以包括在图2a-6的附图中描述的系统和设备的元件,而且描述的专用数据处理系统可以进一步包含在图1中示出的并且在上文描述的数据处理系统100的一个或多个部件。尽管未在附图中完全示出,数据处理系统100的一个或多个部件可以被集成到主机系统201和/或客户端系统227的实施例中作为系统硬件203,包括(但不限于)一个或多个处理器103、程序114、存储器105、持久性存储装置106、高速缓存107、通信单元111、输入/输出(i/o)接口115、外部设备117和人类可读显示器118的集成。
51.计算环境200的实施例示出描绘主机系统201的实施例的部件的框图,而计算环境290描绘通过网络250与一个或多个客户端系统227通信的图2a中的主机系统201的框图。术语“主机系统”201可以指数据处理系统100,诸如连接到计算机网络并且向连接到主机系统201的客户端系统227的用户提供对计算资源、服务、用户进程221、应用程序223、程序114等的访问的计算机或其他设备。例如,主机系统201可以是作为web主机、云主机、虚拟主机、远程主机和/或大型计算机操作的服务器(真实的或虚拟的)。连接至主机系统201的客户端系统227可以是可以通过网络250连接至主机系统201并且访问由主机系统201提供的可用资源的计算机系统、计算设备或另一类型的数据处理系统100。例如,访问一个或多个程序114、应用程序223、用户进程221、服务等。
52.网络250的实施例可以将主机系统201链接到客户端系统227,并且可以使用有线、无线或光纤连接来构造。主机系统201、客户端系统227和其他数据处理系统100的实施例可以经由通信单元111(诸如网络接口控制器、网络接口卡或能够促进与网络250的连接的其他网络通信设备)通过网络250连接和通信。在计算环境200、290、600的一些实施例中,一个或多个主机系统201和客户端系统227可以表示在通过网络250访问时利用集群计算机和组
件充当单个无缝资源池的数据处理系统100。例如,这样的实施例可以在数据中心、云计算、存储区域网络(san)和网络附加存储(nas)应用中使用。
53.通信单元111的实施例可以实现专用电子电路,允许使用特定物理层和数据链路层标准进行通信。例如,以太网、光纤信道、wi-fi或令牌环在主机系统201、客户端系统227和连接到网络250的其他数据处理系统100之间传输数据。通信单元111可进一步允许全网络协议栈,从而实现通过网络250与通过网络250的通信信道链接在一起的主机系统201、客户端系统227和其他数据处理系统100的群组通信。网络250可以促进主机系统201、客户端系统227和连接到网络250的其他数据处理系统100(例如,网络可访问存储介质)之间的通信和资源共享。网络250的示例可以包括局域网(lan)、家庭域网络(han)、广域网(wan)、骨干网(bbn)、对等网络(p2p)、校园网络、企业网络、互联网、云计算网络和本领域技术人员已知的任何其他网络。
54.返回参考附图,图2a描绘了描述能够管理虚拟存储器、存储器对象和vm元数据块分配请求的主机系统201的实施例的框图。如附图所描绘的,负责管理虚拟存储器和vm元数据的分配的主机系统201(或其他类型的数据处理系统100)可以包括如所示的抽象层中的一个或多个。例如,主机系统201的实施例可以包括系统硬件203层、操作系统205层(其可以包括内核206)和用户空间207层。系统硬件203的实施例可包括主机系统201的一个或多个物理组件,其可提供可由主机系统201利用和/或供应到请求访问资源或访问由主机系统201提供的一个或多个应用程序223、程序114和/或服务的一个或多个客户端系统227的计算机资源。例如,通过创建分配给客户端系统227的一个或多个虚拟化计算系统。在系统硬件203层中发现的系统硬件203的示例可以包括(但不限于)如所描绘的一个或多个处理器103、存储器105、持久性存储装置106和/或i/o接口115。
55.用户空间207层的实施例可以是被分配给运行应用程序223、用户进程221、程序114、服务和其他软件的主机系统201的存储器105的一部分。在一些实施例中,用户空间207可以指在操作系统205的内核206之外运行的所有代码。用户空间207可以不仅包括不同程序114、服务和/或应用程序223,而且还可以包括操作系统205可以访问以便在用户空间207的软件代码和内核206之间对接的一个或多个库224。当应用程序223和其他软件由主机系统201打开时,操作系统205(“os 205”)的实施例可以将程序114和任何所需的资源连同任何插件和库224加载到用户空间207中。用户空间207的实施例可以随着存储器105的量增加而增大。例如,增加主机系统201的ram和/或可用的其他类型的物理存储器301,更多的用户空间207可用于同时运行多个应用程序223。
56.操作系统205层的实施例可以包括操作系统205,包括操作系统205的内核206。os 205的实施例可以管理系统硬件203的资源、用于访问系统硬件203资源的设备独立接口并且促进与一个或多个客户端系统227共享那些资源。os 205可以在系统程序114和正被用户访问的应用程序223之间协调系统硬件203的使用。在一些实施例中,os 205可以包括内核206。内核206可以是操作系统205的中心模块。内核206可独立于可在用户空间207内执行的程序114、应用程序223、用户进程221、服务等运行。内核206可以被加载到主机系统201的存储器105中,并且当引导主机系统201或其他数据处理系统100时,内核206通常可以是要被加载的os 205的第一部分。内核206的实施例一旦被加载到存储器105中,可以保留在存储器105中,以便运行操作系统205的必要服务、应用和部分。内核206可以负责将系统硬件203
连接到在用户空间207内执行或运行的软件。由内核206提供的程序和服务的示例可以包括(但不限于)用于执行应用程序223的进程/任务管理209、用于控制虚拟存储器和存储器对象元数据的分配的虚拟存储器管理器213、通过使用设备驱动程序的设备管理217、以及用于管理持久性存储装置106空间(诸如硬盘和固态驱动器)的分配的文件系统管理器219。
57.虚拟存储器管理器213的实施例可以负责主机系统201的存储器分配过程。存储器分配是通过其向应用程序223、程序114、服务和其他形式的软件分配虚拟存储器空间和/或物理存储器空间的过程。在一些实施例中,存储器分配可以主要是系统硬件203操作,但是可以通过os 205和/或软件应用来管理。程序114、应用程序223和服务可以根据正在执行的程序114、应用程序223或服务的要求被分配存储器105内的特定地址,并且一旦所执行的软件已经完成操作或所执行的软件空闲,存储器105就可以被释放和/或分配给另一个软件或者与主机系统201的主存储器105合并。
58.数据处理系统100(诸如主机系统201)能够寻址比安装到系统上的总物理存储器301更多的存储器105。额外存储器可被称作虚拟存储器。虚拟存储器的实施例可以被部署为持久性存储装置106设备的一部分或区段。例如,硬盘可以设置有专用于模拟主机系统201的存储器105并提供虚拟存储器空间的虚拟存储器部分。例如,通过在持久性存储装置106设备上模拟ram。通过使用虚拟存储器方案,在用户空间207中运行的程序114、应用程序223和其他软件可大于物理存储器301,从而允许主机系统201通过使用持久性存储装置106来扩展物理存储器301的使用,并且进一步提供了存储器105保护,因为虚拟存储器的每个虚拟地址被转换为物理地址。虚拟存储器管理器213的实施例可以在持久性存储装置106上创建被称为页文件(或“交换文件”)的存储器105映像,并且os 205可以对持久性存储装置106上的虚拟存储器位置进行寻址,就如同虚拟存储器被存储在物理存储器301上一样。每当os 205请求未被物理存储器301存储的存储器块时,虚拟存储器管理器213可以从物理存储器301取得最近未被使用的存储器块并且将其写到分页文件。虚拟存储器管理器213可以进一步从分页文件中读取os 205已经请求的存储器块。虚拟存储器管理器213然后可以从分页文件取得存储器块并将其移动到物理存储器301中来代替最近未使用的旧块。由于来自物理存储器301的页文件与由持久性存储装置106存储为虚拟存储器的页文件的交换,这个过程可以被称为交换。
59.参照图3a,描述了示出虚拟存储器技术如何使用交换来用存储在物理存储器301上的页文件替换持久性存储装置106内的页文件的示例。如图所示,处理器103例如经由地址总线305从物理存储器301的地址请求存储器块(即,由应用程序223使用的存储器对象)。如果页文件位于持久性存储装置106上而不是物理存储器301上,那么虚拟存储器的页文件可以交换到物理存储器301的地址,并且数据通过数据总线307返回处理器103。在一些实施例中,处理器103可以使用可以构建到系统硬件203中的存储器管理单元303(mmu)。mmu 303可以执行将描述保存在持久性存储装置106的虚拟存储器中的页文件的位置的逻辑地址转换为物理存储器301的物理地址的功能。mmu 303的实施例可以执行将虚拟地址转换为如图3a至图3c所示的物理地址的功能或任务,以便从物理存储器301检索请求的存储器块和/或将页文件从持久性存储装置106交换到物理存储器301。在一些实施例中,高速缓存107可包含于主机系统201中以改进mmu 303在虚拟存储器管理期间频繁或最近使用的逻辑或物理地址的检索。例如,逻辑高速缓存(如图3b中所示)可由mmu 303存取以检索正转换成物理地
址的最近或经常使用的逻辑地址。类似地,可以包括物理高速缓存(如图3c所示)以提供可对应于所转换的逻辑地址的频繁使用的物理地址的更快查找。
60.在一些实施例中,主机系统201的虚拟存储器管理器213可以包括分配器215。分配器215的实施例可以负责执行与管理存储器对象(应用程序223使用的存储器块)以及主机系统201可用于分配给部署在用户空间207内的应用程序223或软件的空闲存储器块相关联的任务或功能。为了更有效地管理存储器对象和由分配器215管理的空闲存储器块,分配器215的实施例可以创建和存储描述分配器215可访问的虚拟存储器的组块(chunk)的元数据(在此称为“存储器对象元数据”)。例如,元数据可以描述物理或虚拟存储器存储的存储器对象的大小、状态和指针地址。分配器215的实施例可以将存储器对象元数据组织和存储到专用于描述正在被管理的虚拟存储器块的元数据的一个或多个vm元数据块。在一些实施例中,vm元数据块可以是可用于分配给存储器对象的虚拟存储器的组块的头部。
61.vm元数据块的实施例可以由分配器215组织成一个或多个vm元数据容器402a至402f(统称为vm元数据容器402),如在图4a至图4b的说明性示例中所描绘的。vm元数据容器402的实施例可包括多个vm元数据块。每个容器的vm元数据块的数量可以取决于主机系统201可用的物理存储器301的总量、vm元数据容器402的大小和由主机系统201创建的vm元数据容器402的数量而变化。在一些实施例中,vm元数据容器402的大小和数量可以由操作系统205自动确定。在另选实施例中,由操作系统205创建的vm元数据容器的存储大小和/或数量可以是用户指定的。因此,分配器215可用的每个vm元数据容器402的vm元数据块的数量可以根据主机系统201、用于实例化vm元数据容器402的计算环境和方法而变化。
62.在图4a中描述的示例性实施例中,由操作系统205实例化的vm元数据容器402的大小和数量可以包括足够的vm元数据容器402以表示主机系统201可用作虚拟存储器的物理存储器301的总量。通过一次实例化足够的vm元数据容器402以表示总的物理存储器301的总量,分配器215可以能够在请求创建新容器403之前将所有物理存储器301分配为虚拟存储器。分配器215的实施例可预先实例化vm元数据容器的总数以在主机系统201启动时将总物理存储器301表示为虚拟存储器。在由操作系统205确定vm元数据容器402的实例化的实施例中,vm元数据容器403的实例化可基于根据可用于主机系统201的处理器103和存储器105资源的量来确定vm元数据容器402的最优数量和/或其大小的算法来实现。例如,如果os 205为单个vm元数据容器选择包括128gb的虚拟存储器,则物理存储器301的总量可以除以单个vm元数据容器402的选定大小以确定要实例化的vm元数据容器402的总数。例如,如果主机系统201包括1024gb的物理存储器301,则操作系统可以实例化八个vm元数据容器,它们各自表示128gb。
63.本领域的技术人员将认识到,通过调整单个元数据容器402的大小,可以实例化更多或更少的个体vm元数据容器402。例如,代替将128gb分配给个体vm元数据容器402,单个vm元数据容器可被分配64gb。因此,包括1024gb的物理存储器301的主机系统可以由操作系统205用十六个vm元数据容器402来实例化,以便完全表示物理存储器301的全部1024gb。同样地,在一些实施例中,用户可以输入单个元数据容器402的期望大小,并且取决于主机系统201的总物理存储器301,操作系统205可以创建单独地与用户规定的大小相对应的多个vm元数据容器402,所述多个vm元数据容器402将反映主机系统的物理存储器301的总量。
64.如图4a所示,由主机系统201实例化的多个vm元数据容器402可以进一步被组织成
多个容器组407a至407d(在附图中被描绘为“组407a”至“组407d”并且在此统称为容器组407)。每个容器组407可以被分配给控制对容器组的访问的锁。在图4a-4b中描绘的示例性实施例中,vm元数据容器402被组织为两个或更多个容器组407。通过将vm元数据容器402划分成两个或更多个容器组407,代替使用单个锁来控制对所有vm元数据容器402的访问,两个或更多个锁可以独立地控制对其所分配的容器组的访问并且允许可以执行多个并行的存储器分配操作。在单锁系统下,主机系统201可能由于在移动到随后的存储器分配操作之前必须等待每个正在进行的存储器分配操作被执行而受到阻碍。如图4a的实施例所示,由操作系统205预先实例化的vm元数据容器402被划分为三个单独的容器组407a、407b、407c,其中单独的容器组407进一步包括每个容器组407的两个vm元数据容器402。尽管在图4a中示出的该示例中描绘了每个容器组仅具有两个vm元数据容器402的仅三个容器组407,但是可以每个容器组407实例化任何数量的vm元数据容器402。例如,3个、4个、5个、10个、15个、20个等或更多个vm元数据容器402可以被分配给各个容器组407中的每一个。此外,可以获取任何数量的容器组407以组织vm元数据容器402。例如,操作系统205可将多个vm元数据容器402组织成2个、4个、6个、12个、25个、50个、100个等或更多个容器组407。此外,由于新的vm元数据容器403由操作系统205创建,新的vm元数据容器403可以被添加到由所分配的锁407a、407b、407c控制的现有容器组,或者被组织成由新获得的锁407d控制的新容器组407d。
65.在一些实施例中,所获取的容器组407中的每一个可以包括相等数量的vm元数据容器402,如图4a所示。在一些实例中,每个容器组407的vm元数据容器402的数量可以不对称地组织,其中在一些容器组407中,与其他容器组407相比,可以包括更多或更少的vm元数据容器402。vm元数据容器402的非对称数量的原因可能因系统而异。例如,可存在被实例化以将主机系统的总物理存储器301表示为虚拟存储器的奇数个vm元数据容器。在其他实例中,诸如图4a所示,新元数据容器403的创建可破坏容器组407之间的vm元数据容器402的先前对称性。例如,在图4a中,容器组407a、407b和407c包括两个元数据容器402a-402f,然而,在创建被放入容器组407d中的新的vm元数据容器403时,容器组407d仅包括一个新的vm元数据容器403(至少直到下一个vm元数据容器402被创建)。在一些实例中,可以一次创建多个新的vm元数据容器403。例如,创建被分配给容器组407d的两个新vm元数据容器403而不是图4a中所示的一个。
66.分配器215的实施例可根据分配算法将vm元数据块分配到vm元数据容器402。分配器215使用的分配算法的示例性实施例可以利用由分配的锁控制的多个容器组407系统,如图4a中所描绘的,通过遵循使用将描述存储器对象的元数据分配给最少使用的vm元数据容器402内的vm元数据块的算法来将存储器对象元数据分配给vm元数据块的算法。与如上所述的导致按顺序填充vm元数据容器402的用于分配元数据的第一可用算法相反,将元数据分配给最少使用的元数据容器402,可导致vm元数据容器402跨容器组407更均匀地分配vm元数据块,如图4b中所示。在图4b的示例性实施例中,所分配的vm元数据块408a-408f在跨越多个容器组407a-407c的vm元数据容器402a-402f之间均匀地(或几乎均匀地)散布。当请求新的元数据块分配时,分配器215可以通过执行扫描来执行对容器组407和/或容器组407内的vm元数据容器402的使用水平进行采样的任务。基于采样扫描的结果,分配器215的实施例可以在多个容器组407中选择作为最少使用的容器组407的容器组407。在一些实施例
中,分配器215可以在使用水平的采样扫描期间扫描容器组407而不获取锁,以将锁竞争保持到最小。采样扫描可以是简短的或非穷尽的,并且可提供对容器组407内的vm元数据容器402的使用水平的快速近似。采样扫描的实施例可以不必提供最少使用的容器组407的绝对测量,而是提供所估计的使用水平。在标识最少使用的容器组407时,分配器215可以将分配请求的实现对准容器组407内可以包含足够的vm元数据块以满足该请求的一个或多个vm元数据容器402。分配器215可将存储器对象元数据存储到最少使用容器组407内的最少使用vm元数据容器402的vm元数据块。
67.分配器215的实施例还可执行与虚拟存储器管理功能相关联的任务,这些任务涉及使现有存储器对象元数据已被分配给vm元数据块的存储器对象增长的请求。分配器215可以通过首先将可能已经将存储器对象的元数据存储在vm元数据块中的一个或多个vm元数据容器402作为目标来满足增长现有存储器对象的请求。分配器215可以扫描包括与存储器对象相关联的现有存储器对象元数据的vm元数据容器402,并且使用先前存储该存储器对象的元数据的同一vm元数据容器402确定分配器215是否可以满足增长请求。如果在先前使用的vm元数据容器402中不存在足够的空闲空间,则分配器215可尝试使用与先前使用的vm元数据容器402相同的容器组407内的另一vm元数据容器402来满足该请求。例如,如果增长请求正在寻求增长分配器215先前已将元数据分配给vm元数据容器402a内的vm元数据块的存储器对象,则分配器215将扫描vm元数据容器402a以确定是否存在足够的vm元数据块来满足增长请求。如果有足够的空闲空间可用,则分配器可以将用于存储器对象的元数据写到vm元数据容器402a内的vm元数据块。否则,分配器将扫描vm元数据容器402b以确定是否有足够的空闲空间可用于向该存储器对象分配vm元数据块,以便将该存储器对象的所有元数据保持在容器组407a内。
68.在一些实例中,分配器215可能无法将存储器对象维持元数据保持在同一容器组407内,从而导致将存储器对象元数据分配给跨由不同锁控制的多个容器组407的两个单独的vm元数据容器402内的vm元数据块。例如,将用于存储器对象的vm元数据块分配给驻留在容器组407a内的vm元数据容器402b和驻留在容器组407b内的vm元数据容器402d。跨多个锁407的这样的情形可在单个容器组407内的vm元数据容器402变满和/或缺少足够的vm元数据块以适应增长现有存储器对象的请求时发生。
69.在一些实施例中,当存储器对象元数据503可以跨多个容器组407散布并且被多个锁507a-507e控制访问时,分配器215可以使对由主机系统201访问和使用以执行操作的存储器对象元数据503的存储器管理操作流水线化。例如,执行释放不再需要存储存储器对象元数据503的vm元数据块的操作,代替按照分配元数据的顺序对与存储器对象相关联的元数据块分配501执行操作,分配器215的实施例可以基于容器组407执行存储器管理操作,并且因此通过一次获取锁507并且然后释放锁507来执行所有操作。通过一次对整个容器组407执行操作,分配器215不必多次获取和重新获取锁507a-507e。相反,可以对整个容器组407执行vm管理操作,然后可以释放锁507,而不必再次重新获取锁以执行未来操作。
70.例如,图5描绘了分配器215对包括跨多个容器组407和锁507的存储器对象元数据503的存储器对象的元数据块分配501执行存储器操作的示例。存储器对象元数据503a1至503a8被分配给由锁507a控制的容器组407a。存储器对象元数据503b1-503b6被分配给受锁507b控制的容器组407b,而存储器对象元数据503c、503d和503e分别被分配给受锁507c、
507d、507e分别控制的容器组407c、407d和407e。当分配器215执行存储器管理操作(诸如释放存储描述存储器对象的存储器对象元数据503的vm元数据块)时,分配器215可以通过基于容器组407而不是按照元数据块分配501所示的顺序来执行存储器操作来简化操作。例如,分配器215可以避免首先获取锁507a控制存储器对象元数据503a1,释放存储器对象元数据503a1,并且如图5中所示沿着元数据块分配501a移动,并且获取下一个锁507b以释放存储器对象元数据503b1,随后获取锁507c以释放存储器对象元数据503c1(等等),这导致根据需要多次获取单独的锁507。例如,按照元数据块分配501中示出的存储器对象元数据503的顺序执行存储器操作将导致锁507a被获取八次,锁507b被获取六次,并且锁507c、507d和507e各自被获取四次。相反,分配器215可以每次获取锁507a-507e中的一个,针对由所获取的锁507控制的所有存储器对象元数据503执行存储器管理操作,释放锁507并且移动到下一个锁507。例如,分配器215可以获取锁507a并全部在已经获取锁507a时对存储器对象元数据503a1-503a8执行存储器操作(诸如释放与其相关联的vm元数据块),释放锁507a并继续获取锁507b,释放存储存储器对象元数据503b1-503b6的元数据块,并释放锁507b。因此,分配器215可以针对与锁507c、507d、507e相关联的剩余容器组407c、407d、407e重复该过程。
71.分配器215的实施例可以支持并行和/或同时发生的多个分配和去分配操作。vm元数据容器402的使用的实施例可以是流体过程,并且取决于主机系统201的变化状态,主机系统201的os 205可能无意地创建比所需更多的vm元数据容器402。当应用程序223被关闭或变得空闲时,与应用程序223相关联的存储器对象可以从存储器105中释放,从而允许分配器215移除所释放的存储器对象的存储器对象元数据并且向vm元数据容器402返回空闲的vm元数据块。因而,通过释放存储器对象并创建空闲vm元数据块,vm元数据容器402的存储空间变得可用于待写入到新释放的vm元数据块的新vm元数据或为待增长的存储器对象的现有元数据提供空间。
72.分配器215的实施例可以遵循操作系统205系统范围方案,用于保持最小量的资源空闲和容易由主机系统201使用(称为
““
最小空闲”方案”)。分配器215的实施例可以使请求创建新vm元数据容器403的系统调用与最小空闲方案平衡,以确定是否应当从内核206请求新vm元数据容器。如上所述,vm元数据块的可用性可以不断地改变,并且虽然主机系统201的当前状态可以向分配器215指示创建新的vm元数据容器403的请求可能是必要的,但是一个或多个vm元数据块可以在执行创建请求和/或实例化新的vm元数据容器403之前释放。例如,vm元数据块分配请求由分配器215接收,并且分配器查询vm元数据容器402并且发现vm元数据容器中没有一个包括足够的空闲空间来满足该请求。分配器215发布内核进程以创建新的vm元数据容器403。然而,同时,应用程序223的另一进程已经释放了所有vm元数据块,导致足够的空闲块来满足该请求。在实例化vm元数据容器403之前,内核进程可以查询主机系统201的状态,并且确定在所有vm元数据容器402上是否存在足够的空闲空间以满足最小空闲方案的要求,即指定量的空闲可用资源。如果查询返回满足空闲可用资源的最低级别的指示(指示在发布的内核进程请求与查询的时间之间已经释放资源),则内核进程不满足创建新vm元数据容器403的请求,防止虚拟存储器管理的流动性和不需要的vm元数据容器402的无意创建。
73.在主机系统201的示例性实施例中,分配器215调用以创建新的vm元数据容器403
的内核进程可以是负责创建新的vm元数据容器403的单个实体。因而,在这样的实施例中,新vm元数据容器403的创建被串行化,导致按照发布内核进程请求的顺序一次一个地创建新vm元数据容器403。由于请求和创建过程的串行化,内核过程的示例性实施例可在新vm元数据容器403的创建之间查询主机系统201的状态,以确定是否遵循最小空闲方案和是否存在最小量的空闲可用资源。通过在新vm元数据容器403的创建之间执行查询,内核进程可以在一检测到最小量的空闲可用资源(即,vm元数据块被一个或多个应用程序223或进程释放)时就防止新vm元数据容器403的连续创建,从而防止当足够的vm元数据块已经变得可用于满足系统范围最小空闲级别时新vm元数据容器403的无意的过度创建。
74.在主机系统201的一些实施例中,当所有现有vm元数据容器402已满或几乎满时,可以实现防护措施以防止主机系统201的虚拟存储器管理转移到单个锁407方案。为了避免由于主机系统201等待vm元数据块被释放而仅具有单个新元数据容器403作为用于将vm元数据块分配到新分配请求的选项的情形,内核进程的实施例可以在由分配器215发布这样做时创建多个新vm元数据容器403。如上所述,内核进程可连续地检查新vm元数据容器403的创建之间的空闲可用资源的最小量,并且一旦现有vm元数据容器402之间的足够可用vm元数据块可空闲可用以满足系统范围最小空闲级别方案,则停止新vm元数据容器403的创建。
75.参考附图,图6描绘了另选实施例,包括计算环境600,其中主机系统201可以将正被客户端系统227访问的一个或多个应用程序223容器化到容器群集602(被描绘为容器603a-603n)的多个单独的容器化环境中。主机系统201的实施例可以经由操作系统205以与本公开一致的方式针对由主机系统201提供和托管的容器化应用来管理虚拟存储器操作。容器603的实施例包括在容器603的操作环境内的应用映像607a-607n和软件依赖性605a-605。主机系统201可以运行多用户操作系统(即,主机操作系统205),并且经由主机系统硬件203向包括用于运行和执行应用程序223的功能的容器化计算机环境的一个或多个容器603a-603n(统称为容器603)提供计算资源。由容器群集602中的容器603共享的操作系统205的实施例可管理分配给容器603的虚拟存储器以便运行应用映像607。
76.计算环境600的实施例可被组织成可跨越多个网络、域和/或地理位置的多个数据中心。在一些实施例中,数据中心可驻留在物理位置处,而在其他实施例中,数据中心可包括跨云网络分布的多个主机系统201和/或物理局部式和分布式主机系统201的组合。数据中心可包括一个或多个主机系统201,其提供主机系统硬件203、主机操作系统205和/或容器化软件601(诸如但不限于开源docker和/或openshift软件),以执行和运行封装在容器603的环境内的容器化的应用映像607,如图6所示。尽管图6中描绘的示例性实施例包括三个容器603,但图6的实施例仅说明多个容器603可由主机系统201托管和管理的概念。图6的实施例决不应被视为暗示主机系统201限于仅托管三个容器603。由主机系统201管理的虚拟存储器操作以及托管的容器603的数量可以根据可用的计算资源的量、基于主机系统硬件267和在容器603内由容器化软件601执行的应用映像607所需的计算资源量而变化。
77.容器化软件601的实施例可以用作软件平台,用于开发、递送和运行容器化程序114和应用程序223,以及允许在容器603的计算环境内快速部署代码。容器603的实施例可以在主机系统201之间以及在可以在不同地理位置操作的不同数据中心之间传输,从而允许容器603在运行容器化软件601的任何主机系统201上运行。容器化软件601使得主机系统
201能够将容器化应用程序223和程序221与主机系统硬件203和主机系统201的其他基础设施分离,并经由主机系统的操作系统205管理用于在主机系统201上运行和执行的容器化应用程序223的虚拟存储器操作。
78.容器化软件601为主机系统201提供在容器603的隔离环境内打包和运行应用映像607的能力。由单独的容器603提供的隔离和安全性可以允许主机系统201运行应用映像607的多个实例,同时在单个主机系统201上同时管理用于所有应用映像607的虚拟存储器操作。由于消除了对典型地由虚拟机使用的管理程序的任何需要,容器603可以是轻量级的。相反,容器603可以直接在主机操作系统205的内核206内运行。然而,应用映像607的实施例可受益于将虚拟机的虚拟化与容器化进行组合。例如,主机系统201可以是运行容器化软件601的虚拟机。
79.容器化软件601的实施例可以包括容器化引擎(未示出)。容器化引擎可以是客户机-服务器应用,该客户机-服务器应用可包括运行守护进程的服务器程序、指定应用程序223和/或其他程序可用于与守护进程对话并向应用映像607提供指令的一个或多个接口的rest api、以及用于输入指令的命令行接口(cli)客户机。在一个实施例中,客户端系统227可以使用cli输入命令以与主机系统201的容器化软件601通信。在图6所示的示例性实施例中,由客户端系统227提供给主机系统201的命令可以经由加载到与主机系统201对接的客户端系统227的存储器105或持久性存储装置106中的应用接口229来输入。
80.cli的实施例可以使用容器化引擎的rest api来通过自动化脚本或经由直接cli命令来控制守护进程或与之交互。响应于通过rest api从cli接收的指令,守护进程可以创建和管理容器化软件601的存储器对象,包括驻留在容器601内的一个或多个软件映像、容器601本身、网络、数据卷、插件等。映像可以是具有用于创建容器603的指令的只读模板并且可以是可定制的。容器603可以是软件映像的可运行实例。可以使用容器化软件601api或经由cli创建、启动、停止、移动或删除容器603。容器603可连接至一个或多个网络250,可附接至存储装置和/或基于容器603的当前状态创建新映像。
81.用于管理虚拟存储器元数据的分配的方法
82.图7至图8b的附图表示执行用于管理存储器对象元数据的分配的计算机实现的方法的算法700、800的实施例。如图示和描述的算法700、800可使用一个或多个计算机系统,一般由图1的数据处理系统100限定,并且更具体地由如本文描述的图2a-图6中描述的专用数据处理系统的实施例限定。本领域技术人员应当认识到,图7和图8a至图8b描述的算法700、800的步骤可以以不同于呈现的顺序执行。算法700、800可能不一定需要执行本文描述的所有步骤。相反,算法700、800的一些实施例可通过使用下文论述的步骤中的一个或多个来执行步骤的子集来改变方法。
83.算法700的实施例可描述用于在主机系统201的启动过程期间预实例化多个vm元数据容器402的过程。算法700可开始于步骤701。在步骤701中,数据处理系统100(诸如主机系统100或另一类型的计算系统)发起启动过程以打开主机系统201并且加载操作系统205。操作系统205的内核206可以被加载到存储器105中。在步骤703中,操作系统205和/或内核206可确定用于创建vm元数据容器402的实例化模式。例如,vm元数据容器402的实例化是在操作系统205的参数的指导下还是在用户指出的参数的指导下创建的。在步骤705中可以进行确定,并且如果用于创建vm元数据容器的实例化模式被检测为os 205指导,则算法700可
以进行到步骤707。相反,如果在步骤705中检测到用户指导的实例化模式,则算法700可前进至步骤709并基于用户指导的参数创建规定数量的vm元数据容器402。
84.在步骤707中,对于os指导的实例化模式,操作系统205可以基于主机系统201的可用资源来计算要创建的vm元数据容器402的数量。具体地,操作系统可以计算专用于主机系统201或其他数据处理系统100的物理存储器301的总量(其被分派管理虚拟存储器的任务),并且将物理存储器301的总量除以如由os 205确定的vm元数据容器402的预先选择的、优化的或期望的大小,以便将总的真实物理存储器准确地表示为具有vm元数据容器402的虚拟存储器。在步骤709中,操作系统205的内核进程可以基于实例化模式是os指导的还是用户指导的,根据os指导的参数和/或用户指导的参数来创建具有所选大小的多个vm元数据容器402。在算法700的步骤711中,操作系统205可以将在步骤709中创建的vm元数据容器402分组成由分配给各个容器组407的锁507控制的容器组407。在示例性实施例中,操作系统205可将vm元数据容器402组织成至少两个容器组407。然而,操作系统205可以创建任何数量的容器组407,如被确定为最佳的,或如由用户定义的参数所设置的。因此,在步骤713中,操作系统完成将主机系统713引导到操作系统205中并且准备好进行进一步的操作,包括用户驱动的操作和使用在引导过程期间实例化的vm元数据容器402来管理虚拟存储器元数据。
85.算法700的实施例可以在如上所述的vm元数据容器402的实例化之后导致算法800。算法800可从步骤801开始。在步骤801中,主机系统201可以接收请求将存储器对象分配给由应用程序223、程序114、服务或其他执行的软件使用的存储器块的存储器分配。虚拟存储器管理器213的分配器215可被分派任务来管理分配请求并将描述存储器对象的存储器对象元数据写到vm元数据容器402的一个或多个vm元数据块。分配器215可以在步骤803中分析分配请求并确定在步骤801中接收的分配请求的类型。例如,确定分配请求是用于管理描述新存储器对象的元数据还是用于增长已经包括存储到一个或多个vm元数据容器402的元数据的现有存储器对象的请求。
86.在步骤805中,可以基于步骤803中的分析来确定分配请求是要存储描述新存储器对象的新元数据还是要增长具有先前存储到现有vm元数据容器402的一个或多个vm元数据块的元数据的现有存储器对象。如果确定该请求是针对管理新的存储器对象元数据,则算法800可以进行到步骤817。相反,如果请求是要增长现有存储器对象元数据,则算法800可以前进到步骤807。在步骤807中,分配器215可以初始地将先前使用的vm元数据容器402作为目标,该先前使用的vm元数据容器先前已经存储了描述被请求增长的存储器对象的存储器对象元数据。分配器215可以扫描目标vm元数据容器402以确定目标vm元数据容器402内可用的空间量是否大于或等于满足增长请求所需的空间量。
87.在步骤809中,基于在步骤807中执行的对目标vm元数据容器402的扫描来确定目标vm元数据容器是否包括足够的空闲空间来将附加存储器对象元数据写入到至少一个可用vm元数据块。如果在vm元数据容器402中存在足够的空间,则算法800可以前进至步骤825,并且分配器215可以将目标vm元数据容器402的vm元数据块分配到先前存储用于是增长请求的主体的存储器对象的存储器对象元数据的vm元数据容器402。相反,在步骤809中,如果分配器215确定在目标vm元数据容器402内没有足够空间来满足增长请求,则算法800可以前进到步骤811。在步骤811中,分配器215可以进一步确定在与先前作为目标和扫描以
在步骤807和809中确定足够空间的vm元数据容器402相同的容器组407内是否存在多个vm元数据容器402。如果在步骤811中确定在相同的容器组407内没有另外的vm元数据容器402,则该算法可以前进到步骤817。此外,如果在步骤811中分配器215确定了在同一容器组407内存在另外的vm元数据容器402,则该算法可前进至步骤813并且进一步确定所有vm元数据容器402是否已经被扫描和针对足够的空间量进行评估。如果在步骤813中,已经在同一容器组407内扫描了所有vm元数据容器402,并且没有vm元数据容器402被确定为包括足够的空间,则算法800可前进至步骤817。
88.相反,在步骤813中,如果分配器215确定尚未扫描同一容器组407内的所有vm元数据容器402,则算法800可前进至步骤815。在步骤815中,分配器215可以扫描与在步骤807中扫描的vm元数据容器相同的容器组407内的剩余vm元数据容器402。在一些实施例中,分配器215可基于扫描来首先以最少使用的vm元数据容器402为目标以确定容器组407内的最少使用的元数据容器402是否包括满足增长请求的足够空间。算法800可以回到步骤809,并且做出在步骤815中扫描的新目标vm元数据容器402是否包括足够的空闲空间的另一确定,并且根据如上所述的算法800进行。
89.在步骤817中,分配器215可以扫描容器组407以寻找包括vm元数据容器402的最少使用的容器组。在步骤819中,可基于对容器组407的扫描来确定最少使用容器组407是否包括多个vm元数据容器402。如果扫描确定在最少使用容器组407内没有多个vm元数据容器402,则该算法可以前进到步骤823并确定在最少使用容器组407内的唯一vm元数据容器402是否包含足够的空间来满足增长请求或对存储器对象元数据的新分配的请求。相反,在步骤819中,如果分配器215确定在最少使用的容器组407内存在多个vm元数据容器402,则分配器215可以以在最少使用的容器组407内的最少使用的vm元数据容器402为目标并扫描,以确定足够的空间是否足以满足待决分配请求(新的或增长请求)。
90.在步骤823中,确定在最少使用容器组407内的最少使用vm元数据容器402内是否有足够的空间可用。如果在最少使用容器组407的vm元数据容器402之一内找到足够的空间,则该算法可以前进到步骤825并且将存储器对象元数据分配给所选vm元数据容器402内的vm元数据块。然而,如果在步骤823中确定最少使用的容器组内的最少使用的vm元数据容器缺乏足够的空间来填充分配请求,则算法800可前进至步骤826。
91.在步骤826中,分配器215可以向内核进程(kproc)发布请求,以创建具有足够空间来满足分配请求的一个或多个新vm元数据容器403。在步骤827中,算法确定kproc创建请求是否已经发布到内核206。如果创建新vm元数据容器403的kproc请求没有发布,则不满足新vm元数据容器403的创建,并且kproc返回至睡眠模式。另一方面,如果确定发布了对内核进程的创建请求,则算法800可以前进到步骤829并且扫描系统上的所有现有vm元数据容器402以确定主机系统201可用的vm元数据块的量。基于步骤829中的扫描,在步骤831中,内核206确定在做出请求的时间和创建请求已经发布到内核206的时间之间空闲资源变得可用于满足分配请求的情况下,系统范围的最小空闲资源量是否可用于满足分配请求。如果空闲可用的全系统资源量大于由os 205建立的最小空闲方案所设置的阈值,则算法前进到步骤837并且kproc返回到睡眠模式,并且可以使用具有足够空闲空间以完成分配请求的现有vm元数据容器402来实现资源分配。
92.如果在步骤831中,内核206确定系统范围的空闲资源可用性低于由os 205的最小
空闲方案建立的量,则内核206可以进入容器创建模式。在步骤833中,进一步确定内核206已经进入单容器创建模式还是多容器创建模式。如果内核206已经进入单容器创建模式,则算法800前进到步骤834,并且内核206创建具有满足分配请求的足够空间的新vm元数据容器403,并且kproc返回到睡眠模式。如果在步骤833中,内核206进入多容器创建模式,则算法可前进至步骤835,并创建包括满足分配请求的足够空间的新vm元数据容器403。在步骤836中,算法800进一步确定是否已经满足对多个新vm元数据容器403的创建请求。如果没有满足对多个vm元数据容器403的创建请求,则算法800可返回步骤835并创建附加的新vm元数据容器403。在一些实施例中,在创建多容器请求的新vm元数据容器403之间,算法可返回到步骤831,并确定操作系统205的最小空闲方案是否已达到适当水平以用新创建的vm元数据容器403来满足方案。如果在步骤835中创建的新vm元数据容器403没有将空闲可用资源量提高到最小空闲方案的阈值,则算法800可返回步骤835并在多容器请求中创建下一新vm元数据容器403。如果在步骤836已经确定多容器请求已经完成,则算法800前进到步骤837并且kproc返回到睡眠模式。
93.已经出于说明的目的呈现了对本披露的不同实施例的描述,但并不旨在是详尽的或限于所披露的实施例。在不背离本发明的范围的情况下,许多修改和变化对于本领域普通技术人员来说是显而易见的。在此所使用的术语被选择来最好地解释实施例的原理、实际应用、或优于市场中所发现的技术的技术改进、或使得本领域普通技术人员能够理解在此所披露的实施例。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1