CN102289409A - 分层可伸缩的存储器分配器 - Google Patents
分层可伸缩的存储器分配器 Download PDFInfo
- Publication number
- CN102289409A CN102289409A CN2011101613536A CN201110161353A CN102289409A CN 102289409 A CN102289409 A CN 102289409A CN 2011101613536 A CN2011101613536 A CN 2011101613536A CN 201110161353 A CN201110161353 A CN 201110161353A CN 102289409 A CN102289409 A CN 102289409A
- Authority
- CN
- China
- Prior art keywords
- memory
- divider
- request
- storer
- piece
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Memory System (AREA)
Abstract
本发明公开了分层可伸缩的存储器分配器。此处所描述的主题的各方面涉及存储器管理。在各方面中,可创建将存储器分配给存储器消费者的分层的定制存储器分配器。存储器分配器可使用数据结构根据存储器块的填充因子来对分层结构中每一层的存储器块进行分类。分配可基于生存期特征,与消费者的邻近度、填充因子或其他因素。分配器可使用一个或多个活动块来将存储器分配给消费者。分配器的活动块的数量可取决于争用。
Description
技术领域
本发明涉及计算机技术,具体涉及计算机技术中的存储器管理。
背景技术
在计算机上,应用程序请求、使用并且释放存储器。例如,当应用程序打开文件时,该应用程序或其他组件可请求存储器创建与该文件相关的数据结构。作为另一示例,当用户浏览网站时,web浏览器可请求存储器存储来自网站的内容,以准备在显示器上呈现内容。在用户关闭浏览器之后,web浏览器可指示用于存储和呈现先前网站的内容的存储器可被释放并且返回到存储池。
相比于客户机计算机,处理来自其他组件的请求的服务器常常对高效地使用存储器有更大压力。在客户机和服务器机器两者中,低效存储器管理器可能浪费存储器并导致差性能。不幸的是,对某些存储器消费者工作良好的存储器管理器可能对其他存储器消费者工作并不良好。
在此要求保护的主题不限于解决任何缺点或仅在诸如上述环境中操作的各个实施例。相反,提供该背景仅用以示出在其中可实践在此描述的部分实施例的一个示例性技术领域。
发明内容
简言之,此处所描述的主题的各方面涉及存储器管理。在各方面中,可创建将存储器分配给存储器消费者的分层的定制存储器分配器。存储器分配器可使用数据结构根据存储器块的填充因子来对分层结构中每一层的存储器块进行分类。分配可基于生存期特征,与消费者的邻近性、填充因子或其他因素。分配器可使用一个或多个活动块来将存储器分配给消费者。分配器的活动块的数量可取决于争用。
提供本发明内容是为了简要地标识在以下详细描述中进一步描述的主题的一些方面。本发明内容并不旨在标识出所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。
除非上下文清楚地指出,否则短语“此处所描述主题”指的是详细描述中所描述的主题。术语“方面”被当作“至少一个方面”。标识详细描述中所描述的主题的各方面不旨在标识所要求保护的主题的关键特征或必要特征。
上述各方面和此处所描述主题的其它方面是借助于示例说明的,并且不受附图限制,附图中相同的标号指出相似的元素。
附图说明
图1是表示其中可结合此处所描述主题的各方面的示例性通用计算环境的框图;
图2是表示此处所描述的主题的各方面可在其中实现的示例性环境的框图;
图3是示出根据此处所描述的主题的各方面的示例性分配器的示例性组件的框图;
图4是概括地表示根据此处所描述的主题的各方面的、在不同工作空间中的示例性分配器的框图;
图5是概括地表示根据此处所描述的主题的各方面的、用于对存储器块的填充因子进行分类的示例性数据结构的框图;
图6是概括地表示此处所描述的主题的各方面可以在其中实现的具有多个处理器和存储器的环境的框图;以及
图7-8是概括地表示根据此处所描述的主题的各方面的可发生的动作的流程图。
具体实施方式
定义
如此处所使用的,术语“包括”及其变体被当作开放式术语,表示“包括但不限于”。除非上下文清楚地指示出,否则术语“或”被当“作和/或”。术语“基于”被当作“至少部分基于”。术语“一个实施例”和“一实施例”被当作“至少一个实施例”。术语“另一实施例”被当作“至少一个其他实施例”。其他显式或隐式定义可包括在下文中。
示例性操作环境
图1示出可在其上实现此处所描述主题的各方面的合适的计算***环境100的示例。计算***环境100仅为合适的计算环境的一个示例,并非旨在对此处所描述主题的各方面的使用范围或功能提出任何限制。也不应该将计算环境100解释为对示例性操作环境100中示出的任一组件或其组合有任何依赖性或要求。
此处所描述的主题的各方面可与众多其他通用或专用计算***环境或配置一起操作。可适用于这里所述的主题的各方面的已知计算***、环境或配置的例子包括个人计算机、服务器计算机、手持或膝上型设备、多处理器***、基于微控制器的***、机顶盒、可编程消费电子设备、网络PC、微型计算机、大型计算机、个人数字助理(PDA)、游戏设备、打印机、包括机顶盒,媒体中心或其他家电的家电设备、嵌入汽车或附加到汽车的计算设备、其他移动设备、包括任何上述***或设备的分布式计算环境等等。
此处所描述主题的各方面可在由计算机执行的诸如程序模块等计算机可执行指令的一般上下文中描述。一般而言,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。此处所描述的主题的各方面也可以在其中任务由通过通信网络链接的远程处理设备执行的分布式计算环境中实现。在分布式计算环境中,程序模块可以位于包括存储器存储设备在内的本地和远程计算机存储介质中。
参考图1,用于实现此处所描述主题的各方面的示例性***包括计算机110形式的通用计算设备。计算机可包括能够执行指令的任何电子设备。计算机110的组件可包括处理单元120、***存储器130以及将包括***存储器的各类***组件耦合至处理单元120的***总线121。***总线121可以是几种类型的总线结构中的任何一种,包括存储器总线或存储控制器、***总线、以及使用各种总线体系结构中的任一种的局部总线。作为示例,而非限制,这样的体系结构包括工业标准体系结构(ISA)总线、微通道体系结构(MCA)总线、增强型ISA(EISA)总线、视频电子技术标准协会(VESA)局部总线、也称为夹层(Mezzanine)总线的***部件互连(PCI)总线、扩展***部件互连(PCI-X)总线、高级图形端口(AGP)、以及快速PCI(PCIe)。
计算机110通常包括各种计算机可读介质。计算机可读介质可以是能由计算机110访问的任何可用介质,并包含易失性和非易失性介质以及可移动、不可移动介质。作为示例而非限制,计算机可读介质可以包括计算机存储介质和通信介质。
计算机存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括但不限于,RAM、ROM、EEPROM、闪存或其它存储器技术、CD-ROM、数字多功能盘(DVD)或其它光盘存储、磁盒、磁带、磁盘存储或其它磁存储设备、或可以用来储存所期望的信息并可由计算机110访问的任一其它介质。
通信介质通常以诸如载波或其他传输机制等已调制数据信号来体现计算机可读指令、数据结构、程序模块或其他数据,并包括任何信息传送介质。术语“已调制数据信号”指的是一个或多个特征以在信号中编码信息的方式被设定或更改的信号。作为示例而非限制,通信介质包括有线介质,如有线网络或直接线连接,以及如声学、RF、红外及其他无线介质之类的无线介质。上述的任意组合也应包含在计算机可读介质的范围内。
***存储器130包括易失性和/或非易失性存储器形式的计算机存储介质,如只读存储器(ROM)131和随机存取存储器(RAM)132。基本输入/输出***133(BIOS)包括如在启动时帮助在计算机110内的元件之间传输信息的基本例程,它通常储存在ROM131中。RAM132通常包含处理单元120可以立即访问和/或目前正在操作的数据和/或程序模块。作为示例而非限制,图1示出了操作***134、应用程序135、其它程序模块136和程序数据137。
计算机110还可以包括其他可移动/不可移动、易失性/非易失性计算机存储介质。仅作为示例,图1示出了从不可移动、非易失性磁介质中读取或向其写入的硬盘驱动器141,从可移动、非易失性磁盘152中读取或向其写入的磁盘驱动器151,以及从诸如CD ROM或其它光学介质等可移动、非易失性光盘156中读取或向其写入的光盘驱动器155。可以在该示例性操作环境中使用的其他可移动/不可移动、易失性/非易失性计算机存储介质包括磁带盒、闪存卡、固态设备、数字多功能盘、其他光盘、数字录像带、固态RAM、固态ROM等等。硬盘驱动器141通常通过诸如接口140等不可移动存储器接口连接到***总线121,而磁盘驱动器151和光盘驱动器155则通常由诸如接口150等可移动存储器接口连接至***总线121。
以上描述并在图1中示出的驱动器及其相关联的计算机存储介质为计算机110提供了对计算机可读指令、数据结构、程序模块和其它数据的存储。例如,在图1中,硬盘驱动器141被示为存储操作***144、应用程序145、其它程序模块146和程序数据147。注意,这些组件可以与操作***134、应用程序135、其他程序模块136和程序数据137相同,也可以与它们不同。操作***144、应用程序145、其他程序模块146和程序数据147在这里被标注了不同的附图标记是为了说明至少它们是不同的副本。
用户可以通过输入设备,如键盘162和定点设备161(通常指鼠标、跟踪球或触摸垫)向计算机110输入命令和信息。其它输入设备(未示出)可包括话筒、操纵杆、游戏手柄、圆盘式卫星天线、扫描仪、触敏屏、写字板等。这些和其他输入设备通常通过耦合至***总线的用户输入接口160连接至处理单元120,但也可以由其他接口和总线结构,诸如并行端口、游戏端口或通用串行总线(USB)来连接。
监视器191或其他类型的显示设备也通过接口,诸如视频接口190,连接至***总线121。除监视器之外,计算机还可以包括可以通过输出***接口195连接的诸如扬声器197和打印机196之类的其他***输出设备。
计算机110可以使用到诸如远程计算机180之类的一个或多个远程计算机的逻辑连接在联网环境中操作。远程计算机180可以是个人计算机、服务器、路由器、网络PC、对等设备或其它常见网络节点,并且通常包括上面相对于计算机110所描述的许多或所有元件,但在图1中只示出存储器存储设备181。图1中所示的逻辑连接包括局域网(LAN)171和广域网(WAN)173,但也可以包括其它网络。这样的联网环境常见于办公室、企业范围计算机网络、内联网和因特网中。
当在LAN联网环境中使用时,计算机110通过网络接口或适配器170连接至LAN171。当在WAN联网环境中使用时,计算机110可包括调制解调器172或用于通过诸如因特网等的WAN173来建立通信的其它装置。可为内置或可为外置的调制解调器172可以经由用户输入接口160或其他合适的机制连接至***总线121。在联网环境中,相对于计算机110所描述的程序模块或其部分可被存储在远程存储器存储设备中。作为示例而非限制,图1示出了远程应用程序(RAP)185驻留在存储器设备181上。可以理解,所示的网络连接是示例性的,且可以使用在计算机之间建立通信链路的其他手段。
存储器管理
如上面提到的,低效的存储器管理可导致浪费的存储器、差的性能以及其他问题。图2是表示所描述的主题的各方面可在其中实现的示例性环境的框图。该环境可包括低层存储器分配器205(在下文中有时被称为存储器分配器205)、块分配器210、一个或多个存储器消费者215-218,并且可包括其他实体(未示出)。
此处所使用的分配器可包括分配存储器以及解除存储器的分配的一个或多个组件,或由其组成。在一个实施例中,每一分配器可被实现为分开的软件对象。在另一实施例中,一个或多个组件可实现多个分配器。如这里所使用的,术语组件要被当作包括以下的全部或一部分:设备、一个或多个软件模块或其部分的集合、一个或多个软件模块或其部分与一个或多个设备或其部分的某种组合等等。
此处,将参考多个分配器,在其他实施例中,这些参考还被解释成覆盖执行所指示的动作的单个分配器。由此,分配器的“分层结构”可指代按与分配器的分层结构相似的方式来对存储器块进行分配和解除分配的单个分配器。
存储器分配器205可负责将虚拟和物理存储器分配给块分配器210。块分配器210可向存储器分配器205请求虚拟存储器块,并且提供该存储器块的大小。作为响应,存储器分配器205可找出合适的虚拟存储器的连续块,并且将虚拟存储器的起始虚拟地址返回给块分配器210。
存储器分配器205可具有可指示可经由物理地址来寻址的物理存储器元件(例如字节)的地址范围(例如从0至N)。存储器分配器205还可具有可指示可经由虚拟地址来寻址的虚拟存储器元件的虚拟地址范围(例如从0至M)。虚拟地址的数量可大于物理地址的数量。结果,虚拟地址可能不能全部被并发地映射到物理存储器。存储器分配器205可被实现为操作***(OS)或某一其他组件。
存储器页(下文常常简称为页)是在物理和虚拟存储器寻址中连续的固定长度的存储器块。换言之,页的地址散布在物理或虚拟存储器各处。例如,如果物理存储器的逻辑地址从0至N(其中N是某个数值),则页可驻留在地址范围为X1至Y1(其中X1>=0且Y1<=N)的物理存储器中。类似地,如果虚拟存储器的逻辑地址为0至M,则页可与虚拟存储器地址范围X2>=0且Y2<=M相关联。
虚拟页可具有与物理页或存储器相同或不同的大小。物理页可被映射到多个虚拟范围(例如以实现共享存储器)。虚拟页可被映射到多个连续或非连续的物理页。
页的大小可与供应用程序使用的操作***所允许的物理存储器分配的最小量相对应,即被允许在主存储器与诸如硬盘等其他存储之间传送的数据的最小量,或某一其他大小。在某些操作***中,页大小为4千字节(KB),尽管并不旨在将页大小限制于4KB或任何其他数量。在某些操作***中,可存在多个页大小。此处所描述的主题的各方面可被应用于各种页大小。
虚拟地址范围(下文有时称为虚拟页)可以被映射或可以不被映射到物理存储器。例如,响应于对分配虚拟页的请求,存储器分配器205可获得虚拟存储器地址范围。在已经获得虚拟存储器地址范围之后,块分配器210可请求为虚拟页保留物理页。作为响应,存储器分配器205可向块分配器210发送为虚拟页保留了物理页的确认。保留物理页并不一定意味着实际物理页已被获得并被映射到虚拟页。例如,保留物理页可包括改变所使用的物理页的计数器,而无需实际地将物理页映射到一个或多个虚拟页。为虚拟页保留物理页在此处有时被称为将物理页提交给虚拟页。
在一个实施例中,当存储器分配器205为虚拟页保留物理页时,存储器分配器205可在那时将虚拟页映射到物理页。在另一实施例中,在将虚拟页映射到物理页之前,存储器管理器205可进行等待,直到过程第一次尝试访问虚拟页的存储器。此处使用的访问可包括读取数据、写入数据、删除数据、更新数据、以及包括以上两个或多个的组合等。
虚拟存储器中的顺序页可映射到物理存储器中的非顺序页。例如,具有起始虚拟地址1000、2000、3000和4000的页可映射到物理存储器中具有起始物理地址5000、3000、4000和2000的页。
存储器消费者215-218可从块分配器210或低层存储器分配器205请求连续虚拟存储器块。存储器消费者的某些示例包括堆管理器、数据库组件(例如缓冲器池管理器、查询执行管理器等)、需要较大存储器块的其他过程等。存储器消费者可以是最终消费者、或对另一存储器消费者的存储器提供者。例如,堆管理器可向寻找存储器以执行各种功能的程序提供存储器。
块分配器210可由图3所示的子组件组成,该图3是示出根据此次所描述的主题的各方面的示例性分配器的示例性组件的框图。图3中所示的示例性组件包括片段管理器305、顶层块管理器310、分配器315-321、指示器325、并且可包括更多、更少或其他组件(未示出)。
片段管理器305(例如从操作***中)获得虚拟地址空间中的片段。片段是虚拟地址空间的单个连续部分。片段可被提交或不被提交给物理存储器。片段可以有各种大小。例如,在一个实现中,片段为4兆字节(MB)。在另一实现中,片段是物理存储器的总大小。以上示例并不旨在是包括一切的或穷举的片段大小。实际上,在其他实现中,片段可以是其他大小而不背离此处所描述主题的各方面的精神或范围。
顶层块管理器310从片段管理器305中获得存储器块。从片段存储器中获得的块可以与片段305的大小相同或小于片段305的大小。在从片段管理器305获得存储器块之后,顶层块管理器310可将块划分成子块,以供分配给其他存储器分配器。
分配器315-321中的每一个具有在有需要时可从其获得附加存储器的父分配器。例如,顶层块管理器310是分配器315和320的父分配器。作为另一示例,分配器316可以是分配器317-318的父分配器。
分配器可负责维护向消费者指示对于分配可用的存储器的数据结构。分配器还可负责当不再需要存储器块时将这些存储器块返回给其父分配器。
分配器315-321中的每一个请求特定大小的块。例如,分配器315和320可请求4MB大小的块,而分配器316-319和321可分别请求512KB、128KB、64KB、8KB和8KB的块。
一旦接收到块,分配器就可将该块划分成各部分以供用于提供给用户。术语消费者可指代子分配器或最终消费者。当分配器接收来自对存储器的请求时,分配器可首先确定其当前是否具有足够的空闲存储器来满足该请求。如果分配器具有足够的空闲存储器,则分配器可向请求者提供存储器。如果分配器没有足够的空闲存储器,则存储器可从其父分配器请求附加存储器块,如果有需要,则该父分配器可从其父亲请求附加存储器块等等。如果顶层块管理器310不具有足够的空闲存储器,则顶层块管理器310可从片段管理器305请求附加存储器。
指示器325可确定(例如选择)分配器用于满足对存储器的请求。为此,指示器325可遍历指示分配器中的每一个所分配的块的大小的树,并且寻找合适的分配器来满足该请求。这里,“合适的”分配器是最接近于请求的大小且同时大至足以提供请求的大小的块的分配器。指示器325还可考虑如稍后描述的生存期特征、与消费者的邻近性以及其他因素。可以说,指示器基于由存储器分配器分配的存储器大小以及所请求的存储器大小,来从一组分配器中选择存储器分配器以满足请求。
指示器325可被实现为所谓的代码(例如功能或组件)以确定合适的分配器。在存在不止一个工作空间的情况下,可存在多个指示器(例如每一工作空间一个指示器),或单个指示器也可具有用于确定从其中选择分配器的适当工作空间。
在一个实施例中,存储器消费者可指示从其中选择分配器的特定工作空间。在另一实施例中,可约束指示器以从由存储器消费者指示的工作空间中选择分配器。在又一实施例中,指示器可将指示作为提示,但不被约束成遵循该提示。
例如,如果消费者请求16KB的块,则指示器325可通过使用分配器318而不是通过使用分配器319来获得该块。作为另一示例,如果消费者请求8KB的块,则指示器325可基于生存期特征或其他因素来确定分配器312比分配器319更适合于满足该请求。
可选择分配器的数量、类型和结构来适应指定类型的存储器消费者。此处“类型”是指分配器处理的块大小,而“结构”是指分配器之间的父/子关系。例如,知道了特定数据库的存储器分配的模式,可创建适合于该数据库的分配器树,以便在为数据库分配存储器中减少开销。此外,存储器消费者可在运行时之前或期间配置分配器树,以便针对消费者的特定存储器分配请求优化分配器。
分配器可被分成如图4所示的工作空间,该图4是概括地表示根据此处所描述的主题的各方面的、在不同工作空间中的示例性分配器的框图。
图4示出具有位于其中的分配器的两个工作空间415和420。具有分开的工作空间的一个原因与期望的块分配的生存期特征相关。例如,一个存储器消费者可获得存储器块并随后相对地快速释放它们,而另一存储器消费者可对存储器块持有相对较长的时间段。
当相同的相对生存期特征的块分配请求被路由到相同工作空间的分配器时,这可帮助减少分段。例如,在程序指示块的存储器可被解除分配时,分配器可将所分配的块返回给父分配器。如果返回给父分配器的块在没有其他突出的所分配的块的存储器块内,则该块还可被解除分配并返回给父块的父亲等。这样做对存储器块进行碎片整理。使相似生存期特征的分配从相同工作空间来分配可由此帮助对存储器进行碎片整理。
可基于关于存储器消费者的知识来静态地确定块分配的生存期特征(例如,数据库的缓冲器池的页可具有可预测生存期特征),动态地确定(例如,从对请求者对存储器的分配和解除分配的请求的运行时分析),显式地确定(例如,通过指示分配的生存期特征的存储器分配请求者),或以上某种组合等。分配器可被划分到分层结构中任何层处的多个工作空间,而不是正好在顶层块管理器下面。另外,指派给工作空间的空闲或变成空闲的存储器可被重新指派给另一工作空间。
当分配器从其父分配器获得存储器块时,该分配器可将该块分成子块,子块的大小是分配器可给予消费者或从该分配器请求块的其他分配器的大小。例如,如果4KB分配器从其父分配器获得16KB的块,则该分配器可将该块划分成4个4KB的子块。
分配器可维持关于存储器的块的数据结构。这一数据结构可包括例如块的大小、块的起始地址、块中可用的子块列表、关于每一块的状态、关于每一块的其他数据等。
可按包括活动、满、部分满以及空的若干状态中的任一个来标识块。当块首次被给予分配器时,可将该块标识为活动、空或其他状态中的一个。活动块是分配器首先尝试使用来满足来自消费者的新分配请求的块。在一个实施例中,分配器的诸块中仅一个被标记为活动。在另一实施例中,分配器的不止一个块被标记为活动。
一旦分配器的块已经被完全分配(例如,块的每一子块都已经被分配),该块就可被标记或以其他方式与状态满相关联。此时,另一块可被标记为活动。
当满块中的存储器被返回给分配器时,分配器随后可将该块标记为部分满。另外,分配器可更新根据与块相关联的填充因子(例如,块有多满)来对块进行分类的数据结构。
图5是概括地表示根据此处所描述的主题的各方面的、用于对存储器块的填充因子进行分类的示例性数据结构的框图。图5中所示的示例性数据结构505是包括以25%递增的4个桶集合的分桶数据结构,但其他数据结构可具有带有不同且可能是非均匀的百分比范围或其他度量单位的更少或更多的桶。
桶510-513中的每一个可指代具有变化的填充因子的块列表。例如,由桶510指引(reference)的块可具有75%与100%之间的填充因子,由桶511指引的块可具有50%与75%之间的填充因子,由桶512指引的块可具有25%与50%之间的填充因子,而由桶513指引的块可具有0%与25%之间的填充因子。每一分配器的桶的数量可以是可配置的。出于分类目的,存储器块的大小还不是多个物理页的大小,存储器块的大小可被舍入到多个物理页的大小。
当活动块不能满足分配请求时,可使用数据结构505来选择能够满足分配请求的新的活动块。例如,如果活动块不能满足分配请求时,分配器可选择桶(例如基于填充因子),并且获得从其中分配请求的块。在一个实施例中,分配器可始于具有最大填充因子的桶,并且移动到具有较小填充因子的桶等等,直到找到满足请求的块。
在块被找到之后,可将其标记为活动,并且可从该块中分配存储器以供消费者使用。另外,先前被标记为活动的块在适当时可被标记为满或部分满。在一个实施例中,当分配器从桶中分配块时,如果适当,分配器还可将该块重新分类到另一桶中。在另一实施例中,仅当块被释放时,分配器可将该块重新分类到另一桶。
当块的所有子块被释放时,分配器可将块标记为空,并且将块返回给分配器的父分配器。如前面提到的,对存储器分配的新请求可被指向具有较高填充因子的块。这可允许部分满的块被释放并返回到其父分配器。这一概念可被扩展以创建部分满块的分层结构,使得可作出选择新的活动块的全局决定(在分层结构的每一层),并且可改进将存储器一直释放到顶层的机会。
某些环境可通过使每一分配器具有超过一个活动块来获益。例如,在分配器可由许多请求者调用的情况下,对该分配器的访问的争用可足以证明若干活动块。每一分配器的一个或多个活动块的数量可以是固定的、可配置的、或基于硬件、对分配模式、争用、其他因素等的知识来动态确定的。例如,软件开发者可为每一分配器设置活动块的固定数量。作为另一示例,***管理器、最终用户、软件过程(例如消费者)等可配置分配器的活动块数量。作为另一示例,基于对从分配器分配的争用或与其相关联的争用,分配器可通过就活动而言对附加块进行标记或解标记来增加或减少活动块的数量。可同时使用被标记为活动的块来满足存储器分配的请求。
如果高争用保证该动作(例如达到争用阈值),则具有增加的活动块数量的分配器可再次增加活动块的数量。类似地,如果争用程度下落,则具有减少的活动块数量的分配器可再次进一步减少活动块数量(并且将至少一个活动块剩下)。
存储器可通过可导致不同等待时间的零跳或多跳来与存储器分开。例如,图6是概括地表示此处所描述的主题的各方面可以在其中实现的具有多个处理器和存储器的环境的框图。该环境包括处理器605-608、存储器610-613(有时被称为存储器模块)、存储器控制器615-618、存储器管理器625、存储630,并且还可包括其他实体(未示出)。
存储630包括能够存储数据的任何存储介质,该数据尤其是包括关于块分配的信息的分层数据结构。分层数据结构具有至少某些带有父/子关系的存储器块。术语数据被理解为包括信息、程序代码、程序状态、程序数据、其他数据等等。存储630可包括文件***、数据库、诸如RAM等易失性存储器、其它存储、以上的某种组合等,并可以跨多个设备分布。存储630可以是外部的、内部的、或包括主存存储器管理器625的装置的内部以及外部的组件。
存储630还可包括指示存储器块的时间特征(例如由分配周期评估)的数据。分配器可用于结合满足存储器分配请求来考虑活动块的时间特征。
存储器610-613可被实现为RAM、ROM、EEPROM、闪存或提供相对快速存储器访问的其他存储器技术(例如相比于旋转、磁带或其他机械存储)。
每一处理器可被链接到存储器控制器以及共享存储器控制器的某些处理器(例如处理器606和处理器607)。存储器控制可被链接,使得存储器控制器615被直接连接到存储器控制器616和存储器控制器617,而存储器控制器618被直接连接到存储器控制器616和存储器控制器617。
为访问存储器610,处理器308可向存储器控制器618发出存储器访问请求。存储器控制器618可将该请求发送给存储器控制器616或存储器控制器617。请求被发送至的存储器控制器可将请求转发给存储器控制器615,该存储器控制器615随后可如所请求地访问存储器610。
从以上示例中可以看出,访问远的存储器可涉及遍历多个组件。访问较近的存储器可涉及遍历较少的组件(例如诸如单个存储器控制器)。其他东西(例如对存储器的争用)是相同的,访问远的存储器常常将比访问较近的存储器花更长时间。
图6的组件可与管理(例如分配以及解除分配)存储器610-613中的存储器的存储器管理器625(例如操作***)进行交互。对于最快访问,存储器请求者可能期望得到最接近于存储器请求者的存储器中的存储器块。存储器请求者可能需要处理从存储器管理器625获得存储器分配时的各种可能性。例如,存储器请求者(例如处理器)可能能够指示要从其中将存储器分配器存储器请求者的具体存储器控制器。例如,处理器605可能能够指示所分配的存储器要来自存储器610。在该示例中,处理器可能能够指望从指定位置获得存储器。
然而,在某些实现中,存储器请求者可能只能提示存储器请求者被给予最接近于存储器分配请求的处理器的存储器。存储器管理器625可在考虑将哪个物理存储器分配器给存储器请求者中使用该提示,但存储器管理器625可最终确定向存储器请求者给予对于存储器请求者是次优的存储器(例如比最接近的存储器更远)。
在该情况下,存储器请求者可尝试通过其他手段来获得较近的存储器。例如,在一个实施例中,存储器请求者可请求附加存储器,希望获得较近的存储器。一旦获得了附加存储器,请求者就可释放次优的存储器。在另一实施例中,在存储器请求者是分配器的情况下,存储器请求者可维护指示存储器的物理位置的数据,并且可使用该数据基于消费者对于存储器的等待时间来向消费者分配物理存储器。例如,如果存储器分配器具有跨存储器610和存储器611的存储器块,并且存储器分配器接收来自处理器605上的消费者的请求,则存储器分配器可尝试满足来自存储器610中的块的请求。
如果存储器分配器在存储器610上没有足够的存储器,则存储器分配器可请求附加存储器分配,希望从存储器610获得物理存储器,或存储器分配器可分配对消费者更远的存储器。
具有图6中所示的体系结构,存储器分配器可以具有每一处理器一活动块、共享存储器的每一组处理器一活动块、所有处理器一单个活动块、或如先前描述的不同安排的活动块。活动块的数量可取决于对活动块的争用来动态地调整。
虽然上述环境包括不同数量的实体中,但可以理解,可以采用更多、更少的这些实体和其他实体或这些实体和其他实体的不同组合而不背离此处所描述的主题的各方面的精神或范围。此外,以上提到的实体和通信路径可以用本领域技术人员所理解的各种方式来配置而不背离此处所描述的主题的各方面的精神或范围。
图7-8是概括地表示根据此处所描述的主题的各方面的可发生的动作的流程图。为解释简明起见,结合图7-8描述的方法被描绘和描述为一系列动作。可以理解和明白,此处所描述的主题的各方面不受所示出的动作和/或动作次序的限制。在一个实施例中,动作以如下描述的次序发生。然而,在其它实施例中,动作可以并行地发生,以另一次序发生,和/或与此处未呈现和描述的其它动作一起发生。此外,并非所有示出的动作都是实现根据此处所描述的主题的各方面的方法所必需的。另外,本领域的技术人员将了解和明白,方法也可以替代地经由状态图或作为事件表示为一系列相互相关联的状态。
转向图7,在框705处,动作开始。在框710处,配置分配器分层结构。例如,参考图3,可在那里示出的示例性分层结构中配置分配器。注意,分配分配器分层结构可涉及初始化一个或多个数据结构(例如,以指示指派给各分配器的存储器)、实例化一个或多个分配器、设置分配器之间的关系等。
在715处,接收对分配存储器的请求。例如,参考图3,指示器325可从存储器消费者接收对分配存储器的请求。
在框720处,确定用于处理分配请求的分配器。作出该确定可涉及导航树数据结构以基于存储器分配器的分配大小来找到适当的存储器分配器。树数据结构可定义子分配器与父分配器之间的关系、以及指示与每一分配器相关联的分配大小。树数据结构还可指示(并且部分地基于)所预测的分配器的生存期特征。例如,参考图3,如果存储器消费者请求16KB,则指示器325可选择分配器318来处理分配请求。
在框725处,确定分配器的活动块是否具有足够的空闲存储器来满足该请求。如果分配器具有多个活动块,则为满足请求所选择的活动块可基于所预测的存储器分配的生存期特征、活动块中的物理存储器块与存储器消费者的邻近性、其他因素等。例如,参考图3,分配器318可确定它是否有空闲的16KB来分配给消费者。
在框730处,如果有足够的空闲存储器分配给消费者,则动作在框740处继续;否则,动作在框735处继续。
在框735处,执行搜索以找到新的活动块。该搜索可使用根据相关联的填充因子来对块进行组织的数据结构。例如,参考图5,可搜索数据结构505以找到具有足够的空闲空间来分配给消费者的新的活动块。如果没有具有足够空闲空间以满足请求的分配器的块,则可从存储器分配器的父分配器请求附加存储器,并且可使用这一附加存储器分配来满足请求。
在框740处,来自活动块的存储器被分配以满足请求。例如,参考图3,可使用来自分配器318的活动块的存储器来满足请求。
在框745处,可在适当时更新填充因子数据结构。例如,参考图5,如果在分配所请求的存储器之后分配器318变成完全满,则块可被放置在完全满块列表中。块是完全满的指示可被推迟,直到对从该块分配的尝试不成功。
另外,可按另一种方式来指示满块,而不是将块放置在完全满块列表中。例如,在一个实施例中,满块可通过未被标记为部分满或空的任何块来指示。在一种意义上,在该实施例中,可以不把满块包括在列表中,并且可将满块称为“自由浮动”。
如果在分配后块没有完全满,则可增加块的填充因子,并且如果适当,可基于该填充因子将块放置在不同的桶中。改变块的填充因子被推迟,直到分配时间。
在框750处,可以执行其他动作(如果存在)。其他动作可包括例如基于争用来创建(例如标记)、维护以及移除活动块的动作。
图8是概括地表示根据此处所描述的主题的各方面的、可在配置分配器时发生的、对应于图7的框710的某些示例性动作的流程图。再次,注意图7中所描述的动作顺序仅仅是示例性的。基于此处的教示,本领域技术人员可认识到可执行动作的其他顺序来配置分配器,而不背离此处所描述的主题的各方面的精神或范围。在框805处,动作开始。
在框810处,选择第一分配器。例如,参考图3,可选择片段管理器308。
在框815处,配置分配器。例如,参考图3,片段管理器305可被配置成顶层块管理器310的父分配器。还可配置由片段管理器305获得的片段大小。对于配置分配器的其他分配器可涉及设置分配器的大小、父/子关系、更新数据结构以初始化关于由每一分配器分配的初始存储器的数据(例如,指示分配器在启动时没有存储器)、指示分配器的生存期特征、初始化数据结构以保持对每一分配器的块的标记等。
在框820处,确定分层结构中是否存在另一分配器。如果是,则动作在框825继续;否则,动作在框830继续。
在框825处,选择另一分配器以供配置。例如,参考图3,可选择分配器315以供配置。
在框830处,按分层结构来安排分配器。例如,参考图3,各分配器可按父/子关系来相关联。安排分层结构的这一动作可代替为在框815处配置每一分配器时完成。
在框825处,可以执行其他动作(如果存在)。
如从上述详细描述中可以看到,已经描述了关于存储器管理的各方面。尽管此处所描述主题的各方面易于作出各种修改和替换构造,但其某些说明性实施例在附图中示出并在上面被详细地描述。然而,应当理解,并不旨在将所要求保护主题的各方面限制于所公开的具体形式,而是相反地,目的是要覆盖落入此处所描述主题的各方面的精神和范围之内的所有修改、替换构造和等效方案。
Claims (15)
1.一种至少部分地由计算机实现的方法,所述方法包括:
接收(715)对分配存储器的请求;
确定(725)活动块是否具有足够的空闲存储器来满足所述请求;
如果所述活动块具有足够的空闲存储器来满足所述请求,则分配(740)存储器来满足来自所述活动块的请求;以及
如果所述活动块没有足够的空闲存储器来满足所述请求,则使用(735)根据相关联的填充因子来对块进行组织的数据结构来搜索新的活动块以满足所述请求。
2.如权利要求1所述的方法,其特征在于,为具有从其中分配存储器或向其释放存储器的块确定新的填充因子,并且更新所述数据结构以指示所述块与所述新的填充因子相关联。
3.如权利要求2所述的方法,其特征在于,更新所述数据结构包括更新分桶数据结构,所述分桶数据结构中的每一桶指引具有对应填充因子的零个或多个块。
4.如权利要求1所述的方法,其特征在于,使用根据相关联的填充因子来对块进行组织的数据结构包括使用基于块中可用的或所分配的存储器的百分比来将所述块分类到桶中的数据结构,每一桶与可用的或所分配的存储器的一个或多个百分比范围相对应。
5.如权利要求1所述的方法,其特征在于,还包括通过导航树数据结构以基于存储器分配器的分配大小找到所述存储器分配器,来选择存储器分配器来处理所述请求,所述树数据结构指引所述存储器分配器以及其他存储器分配器,所述树数据结构定义子分配器与父分配器之间的关系,所述树数据结构还指示与所述分配器相关联的分配大小。
6.如权利要求5所述的方法,其特征在于,还包括接收定义所述子分配器和父分配器以及所述关系的数据,并且从中创建所述树数据结构,所述数据适于为指定存储器消费者创建存储器分配器的分层结构。
7.如权利要求5所述的方法,其特征在于,选择存储器分配器来处理所述请求进一步包括基于为所述请求所确定的生存期特征来确定分配器,所述树数据结构中的分配器基于所预测的存储器分配的生存期特征来划分。
8.如权利要求1所述的方法,其特征在于,还包括基于对所述活动块的争用来创建另一活动块、维护所述活动块、或移除所述活动块。
9.一种具有计算机可执行指令的计算机存储介质,所述计算机可执行指令在被执行时执行以下动作,包括:
配置(815)第一存储器分配器以便响应于对分配存储器的请求来分配第一存储器大小的存储器;
配置(820、825、815、830)第二存储器分配器以便响应于对分配存储器的请求来分配第二存储器大小的存储器,所述第二存储器大小小于所述第一存储器大小,所述第二存储器分配器用于从所述第一存储器分配器获得附加存储器;
接收(715)对第三存储器大小的存储器的存储器分配请求;
基于所述第一、第二以及第三存储器大小,从所述第一和第二存储器分配器中选择(720)存储器分配器以满足所述存储器分配请求;以及
尝试(730、735、740)从所选择的存储器分配器的活动块满足所述请求,所选择的存储器分配器的存储器块根据与所述存储器块相关联的填充因子来分类。
10.如权利要求9所述的计算机存储介质,其特征在于,还包括基于与发出所述存储器分配请求的处理器的邻近度来选择所述活动块的子块以便为所述存储器分配请求进行分配。
11.如权利要求9所述的计算机存储介质,其特征在于,还包括配置第三存储器分配器以分配所述第二存储器大小的存储器,所述第三存储器分配器用于从所述第一存储器分配器请求附加存储器,所述第三存储器分配器用于为具有与针对所述第二存储器分配器的分配存储器的请求不同的生存期特征的存储器分配请求分配存储器。
12.如权利要求11所述的计算机存储介质,其特征在于,还包括基于请求者对存储器的分配和解除分配请求的运行时分析来确定所述生存期特征。
13.一种在计算环境中的***,包括:
一组存储器(610、611、612、613),包括可分配存储器元件;
存储(630),其上具有包括关于所述存储器块的分配的数据的至少一个数据结构,所述至少一个数据结构被分层地安排,其中至少某些存储器块具有父/子关系,所分配的子存储器块已从所分配的父存储器块中获得;以及
至少一个分配器(205、210、305、310、315-321、625)用于确定存储器的第一活动块是否具有足够的空闲存储器来满足请求,所述分配器还用于执行动作,包括如果所述存储器的第一活动块没有足够的存储器来满足所述请求,则使用由所述至少一个分配器管理的存储器块的一个或多个填充因子来确定第二活动块以满足所述请求。
14.如权利要求13所述的***,其特征在于,该组存储器包括多个存储器模块,每一存储器模块对于一个或多个处理器比一个或多个其他处理器具有更短的等待时间,所述至少一个分配器还用于结合确定所述第二活动块来考虑所述第二活动块的存储器模块的等待时间。
15.如权利要求13所述的***,其特征在于,所述存储还包括指示所述存储器块的各时间特征的数据,所述存储器块的一时间特征为所述存储器块的分配指示所评估的分配周期,所述至少一个分配器还用作结合满足所述请求来考虑活动块的时间特征。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/792,734 | 2010-06-03 | ||
US12/792,734 US8225065B2 (en) | 2010-06-03 | 2010-06-03 | Hierarchical scalable memory allocator |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102289409A true CN102289409A (zh) | 2011-12-21 |
CN102289409B CN102289409B (zh) | 2015-11-25 |
Family
ID=45065392
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110161353.6A Active CN102289409B (zh) | 2010-06-03 | 2011-06-02 | 分层可伸缩的存储器分配器 |
Country Status (2)
Country | Link |
---|---|
US (1) | US8225065B2 (zh) |
CN (1) | CN102289409B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2024067348A3 (zh) * | 2022-09-28 | 2024-05-16 | 维沃移动通信有限公司 | 内存分配器确定方法、装置、电子设备及存储介质 |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9697047B2 (en) * | 2012-09-25 | 2017-07-04 | International Business Machines Corporation | Cooperation of hoarding memory allocators in a multi-process system |
US9003223B2 (en) * | 2012-09-27 | 2015-04-07 | International Business Machines Corporation | Physical memory fault mitigation in a computing environment |
US9164915B2 (en) | 2013-01-15 | 2015-10-20 | International Business Machines Corporation | Reserving fixed page areas in real storage increments |
US8966220B2 (en) | 2013-01-15 | 2015-02-24 | International Business Machines Corporation | Optimizing large page processing |
KR102146334B1 (ko) * | 2013-01-17 | 2020-08-20 | 삼성전자 주식회사 | 동적 페이지 할당자 변경 방법 및 시스템 |
US9904337B2 (en) * | 2015-06-25 | 2018-02-27 | International Business Machines Corporation | Affinity-aware parallel zeroing of pages in non-uniform memory access (NUMA) servers |
US10073872B2 (en) * | 2015-09-09 | 2018-09-11 | Sap Se | Hybrid heap memory management |
FR3045182A1 (fr) * | 2015-12-15 | 2017-06-16 | Stmicroelectronics Rousset | Procede et dispositif de gestion d'espace memoire |
US10346306B2 (en) * | 2016-04-02 | 2019-07-09 | Intel Corporation | Processor and method for memory performance monitoring utilizing a monitor flag and first and second allocators for allocating virtual memory regions |
US20230128077A1 (en) * | 2021-10-22 | 2023-04-27 | EMC IP Holding Company, LLC | System and Method for Aggregation of Write Commits To Control Written Block Size |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080183958A1 (en) * | 2007-01-26 | 2008-07-31 | Cheriton David R | Hierarchical immutable content-addressable memory processor |
CN101320351A (zh) * | 2008-06-27 | 2008-12-10 | 华中科技大学 | 内存的分配、清理和释放方法及内存管理的装置 |
CN101329655A (zh) * | 2008-07-31 | 2008-12-24 | 北京天碁科技有限公司 | 一种内存管理方法和内存管理装置 |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO1994002898A1 (en) * | 1992-07-24 | 1994-02-03 | Microsoft Corporation | Computer method and system for allocating and freeing memory |
US5784699A (en) * | 1996-05-24 | 1998-07-21 | Oracle Corporation | Dynamic memory allocation in a computer using a bit map index |
US6175900B1 (en) | 1998-02-09 | 2001-01-16 | Microsoft Corporation | Hierarchical bitmap-based memory manager |
US7315894B2 (en) | 2001-07-17 | 2008-01-01 | Mcafee, Inc. | Network data retrieval and filter systems and methods |
US20050268049A1 (en) | 2002-08-30 | 2005-12-01 | Koninklijke Philips Electronics N.V. | Dynamic memory management |
US20070067366A1 (en) | 2003-10-08 | 2007-03-22 | Landis John A | Scalable partition memory mapping system |
US7246216B2 (en) | 2004-07-14 | 2007-07-17 | Lsi Corporation | Dynamic partitioning of storage media for mixed applications |
US20070214314A1 (en) | 2006-03-07 | 2007-09-13 | Reuter James M | Methods and systems for hierarchical management of distributed data |
US7792879B2 (en) | 2008-03-11 | 2010-09-07 | Intel Corporation | Efficient heap utilization and partitioning |
-
2010
- 2010-06-03 US US12/792,734 patent/US8225065B2/en active Active
-
2011
- 2011-06-02 CN CN201110161353.6A patent/CN102289409B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080183958A1 (en) * | 2007-01-26 | 2008-07-31 | Cheriton David R | Hierarchical immutable content-addressable memory processor |
CN101320351A (zh) * | 2008-06-27 | 2008-12-10 | 华中科技大学 | 内存的分配、清理和释放方法及内存管理的装置 |
CN101329655A (zh) * | 2008-07-31 | 2008-12-24 | 北京天碁科技有限公司 | 一种内存管理方法和内存管理装置 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2024067348A3 (zh) * | 2022-09-28 | 2024-05-16 | 维沃移动通信有限公司 | 内存分配器确定方法、装置、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
US8225065B2 (en) | 2012-07-17 |
US20110302388A1 (en) | 2011-12-08 |
CN102289409B (zh) | 2015-11-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102289409A (zh) | 分层可伸缩的存储器分配器 | |
US11188457B1 (en) | Nonvolatile memory geometry export by memory controller with variable host configuration of addressable memory space | |
CN113508368B (zh) | 存储器子***及其操作方法 | |
US9836409B2 (en) | Seamless application access to hybrid main memory | |
CN111008155B (zh) | 管理计算机设备的存储器的方法、计算机设备、介质 | |
KR102427120B1 (ko) | 저장 장치용 자동 i/o 스트림 선택 | |
CN100573477C (zh) | 管理锁定的高速缓冲存储器中的组替换的***和方法 | |
JP5238685B2 (ja) | フラッシュ・ストレージの離散領域を記述して問い合わせること | |
Jung et al. | Memorage: Emerging persistent RAM based malleable main memory and storage architecture | |
JP6785204B2 (ja) | メモリシステムおよび制御方法 | |
CN103164346A (zh) | Lba位图使用 | |
EP2972747B1 (en) | Data storage, file and volume system providing mutliple tiers | |
KR20140035416A (ko) | 강화된 어플리케이션 메타데이터를 갖는 메모리 매니저 | |
US20160147670A1 (en) | Page cache device and method for efficient mapping | |
CN112684976A (zh) | 用于执行迁移操作的存储器***及其操作方法 | |
US9552295B2 (en) | Performance and energy efficiency while using large pages | |
CN1573747A (zh) | 阴影分页 | |
CN114281719A (zh) | 用于通过地址映射来扩展命令编排的***及方法 | |
US20100299672A1 (en) | Memory management device, computer system, and memory management method | |
Micheloni et al. | Efficient wear leveling in NAND Flash memory | |
JP7102482B2 (ja) | メモリシステムおよび制御方法 | |
Choi et al. | Separating the File System Journal to Reduce Write Amplification of Garbage Collection on ZNS SSDs |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
ASS | Succession or assignment of patent right |
Owner name: MICROSOFT TECHNOLOGY LICENSING LLC Free format text: FORMER OWNER: MICROSOFT CORP. Effective date: 20150722 |
|
C41 | Transfer of patent application or patent right or utility model | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20150722 Address after: Washington State Applicant after: Micro soft technique license Co., Ltd Address before: Washington State Applicant before: Microsoft Corp. |
|
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |