内存分配加速器的制造方法
【专利说明】内存分配加速器
【背景技术】
[0001 ] 除非本文中另有指示,本部分中描述的材料和术语并不是针对本申请中权利要求 的现有技术,并且不因包括在本部分中而被承认是现有技术。
[0002] 在多核架构中,多个处理器内核可被包括在单个集成电路晶粒中或包括在设置在 单个芯片封装件中的多个集成电路晶粒上。高速缓存可以被用于存储供处理器内核中的一 个或多个访问的数据。数据能够是存储在通常定位在晶粒外部的较大内存中的数据子集。 每个内核可以被提供有为内核存储数据的高速缓存。
[0003] 概述
[0004] 在一些示例中,大致描述了用于为处理器分配内存的方法。该方法可以包括由处 理器生成分配所请求内存块的请求。该方法还可以包括由内存分配加速器接收请求,该内 存分配加速器被配置为与处理器通信。该方法可以包括由内存分配加速器处理该请求,以 识别与该请求相对应的特定内存块的地址。该方法还可以包括由内存分配加速器将该地址 返回至处理器。
[0005] 在一些示例中,片(tiles)可以包括处理器内核、高速缓存以及内存分配加速器, 该内存分配加速器被配置为与内核以及高速缓存通信。处理器可以被配置为由处理器生成 分配所请求内存块的请求。该内存分配加速器可以被配置为接收该请求。该内存分配加速 器可以被配置为处理该请求,以识别与该请求相对应的特定内存块的地址。该内存分配加 速器可以被配置为将该地址返回至处理器。
[0006] 在一些示例中,内存分配加速器可以包括存储器和控制器,该控制器与该存储器 通信。该控制器可以被配置为接收分配所请求内存块的请求。该控制器可以被配置为处理 该请求,以识别与该请求相对应的特定内存块的地址。该控制器可以被配置为将地址返回。
[0007] 前面的概述仅仅是示例性的,而不意在以任何方式进行限制。通过参考附图以及 下面的详细说明,除了上文所描述的示例性的方面、实施例、术语和特征之外,另外的方面、 实施例、术语和特征将变得清晰可见。
【附图说明】
[0008] 通过下面结合附图给出的详细说明和随附的权利要求,本公开的前述特征以及其 它特征将变得更加清晰。应理解的是,这些附图仅描绘了依照本公开的多个实施例,因此, 不应视为对本公开范围的限制,将通过利用附图结合附加的具体描述和细节对本公开进行 说明,在附图中:
[0009] 图1示出了能够用于实施内存分配加速器的示例系统;
[0010] 图2示出了能够用于实施图1的内存分配加速器的示例系统,其显示与可以使用 的元数据相关的额外细节;
[0011] 图3示出了能够用于实施图2的内存分配加速器的示例系统,其显示包括预分配 表的额外细节;
[0012] 图4描述了用于实施内存分配加速器的示例处理的流程图;
[0013] 图5示出了能够用于实施内存分配加速器的计算机程序产品;以及
[0014] 图6是示出了被设置为实施内存分配加速器的示例计算设备的框图;
[0015] 所有附图都根据本文中所描述的至少一些实施例设置。
【具体实施方式】
[0016] 在下面的详细说明中,将参考附图,附图构成了详细说明的一部分。在附图中,除 非上下文指出,否则相似的符号通常表示相似的组件。在详细说明、附图和权利要求中所描 述的示例性实施例不意在限制。可以使用其它实施例,并且可以做出其它改变,而不偏离本 文呈现的主题的精神或范围。将易于理解的是,如本文大致描述且如图中所图示的,本公开 的方面能够以各种不同配置来布置、替代、组合、分离和设计,所有这些都在本文中明确地 构思出。
[0017] 本公开一般尤其涉及与内存分配加速器有关的方法、装置、系统、设备和计算机程 序广品。
[0018] 简而言之,大致描述了用于实施内存分配加速器的方法和系统的技术。处理器可 以生成分配所请求内存块的请求。该请求可以由内存分配加速器接收,该内存分配加速器 被配置为与处理器通信。内存分配加速器可以处理该请求,以识别与该请求相对应的特定 内存块的地址并可将该地址返回至处理器。
[0019] 图1示出了根据本文描述的至少一些实施例设置的用于实施内存分配加速器的 示例系统。示例系统100可以包括晶粒102、硬件控制器106和/或内存108,其都被配置 为与彼此通信。硬件控制器106和/或内存108可以被物理地定位在晶粒102外部。晶 粒102可以包括片200,片200包括片200a、200b、200c和/或200d。片200可以包括处理 器内核(本文中为"内核"或"处理器"或"处理器内核")110 (包括内核ll〇a、110b、110c、 110d)、高速缓存114(包括高速缓存114a、114b、114c和/或114d)和/或路由器300(包 括路由器300a、300b、300c和/或300d)。路由器300可以被配置为通过网络150通信。高 速缓存114可以是例如L2或L3高速缓存。
[0020] 片200a可以包括内核110a、高速缓存114a和/或路由器300a。片200b可以包括 内核110b、高速缓存114b和/或路由器300b。片200c可以包括内核110c、高速缓存114c 和/或路由器300c。片200d可以包括内核110d、高速缓存114d和/或路由器300d。
[0021] 硬件控制器106可以被配置为从程序80或操作系统104接收指令90。指令90可 以与程序80的运行相关。响应于指令90,硬件控制器106可以在晶粒102中选择一个或多 个片200,以运行程序80。
[0022] -个或多个内核110可以包括内存分配加速器。针对如所示出的内核110a,内核 110a可以包括内存分配加速器116。内存分配加速器116可以被配置为与内核110a通信 并且可以是内核ll〇a的功能单元。
[0023] 如以下将更具体描述的,内存分配加速器116可以是针对特定功能性能的硬件实 施功能单元。内存分配加速器116可以针对分配由内核110a使用的内存的功能。内核110a 可以例如向内存108请求分配内存块。分配内存的请求可以由内存分配加速器116接收和 处理。内存分配加速器116可以识别与该请求相对应的内存块的起始地址。响应于该请求, 内存分配加速器116可以向内核110a分配内存块。内存分配加速器116可以向内核110a 提供分配至内核ll〇a的内存块的起始位置的地址。在分配内存块并提供地址之后,内核 110a可以使用内存块来继续处理程序80。
[0024] 图2示出了根据本文描述的至少一些实施例设置的能够用于实施图1的内存分配 加速器的示例系统,其显示与可以使用的元数据相关的额外细节。图2大致与图1的系统 1〇〇类似,其具有额外的细节。为清楚描述的目的,图2中与图1中的组件标记相同的那些 组件将不再次描述。
[0025] 内存分配加速器116可以存储并保持元数据表122。元数据表122可以被用于跟 踪待分配至处理器ll〇a的地址。元数据表122可以被存储在例如高速缓存114中,其在所 分配的地址处开始(以下描述)。可与由处理器ll〇a执行的处理的固定地址区域相关地 存储元数据122的地址。例如,由程序80使用的堆(heap)的第一页可以被保留为元数据 122可以被存储的地址。在另一示例中,处理器110a可以包括寄存器132,其被用于存储元 数据122的起始地址或地址。由于环境或程序在处理器110a中转换,内核110a的处理器 状态(包括元数据表122的地址)可以被保持在内核110a中的寄存器132中。
[0026] 元数据表122可以包括空闲列表124和/或池列表(poollist) 126。空闲列表124 可以包括最近可用的内存块的标识。例如,在空闲列表124中标识的内存块可以在当前被 存储在高速缓存114a中但已经被解除分配。这些内存块能够被迅速重新使用,并且这种重 新使用可以避免高速缓存缺失的发生。循环解除分配的块可以利用时间局部性(temporal locality),因为所循环的块能够被快速循环。池列表126可以包括内存108中地址的标识, 其中新的内存块可用于被分配。池列表126可以包括储存器(bins),其包括各种尺寸的内 存块。例如,储存器可以包括具有8或16字节的倍数(如图2中所示为16字节的倍数) 的尺寸的块。池列表126可以帮助利用类似尺寸的块的空间格局(spatialpattern)的分 配。池列表126还可以包括剩余块数量字段"Nleft"。剩余块数量字段Nleft可以指示所 指示块尺寸的池中的可用块的数量。
[0027] 空闲列表124可以被配置为存储指向所指示尺寸的内存块的起始地址的指针 ("HeadPtr")。例如,空闲列表124可以包括指向尺寸为16字节("szl6")的内存块的 起始地址的指针。类似地,空闲列表124可以包括指向尺寸为32字节("sz32")、48字节 ("sz48")或512字节("sz512")的内存块的起始地址的指针。
[0028] 池列表126可以存储适于指向具有所指示尺寸的内存块的当前起始地址的当前 指针("CurPtr")。池列表126可以包括指向池的预先分配的块的指针。池可以是内存108 中具有统一尺寸的块的连续内存地址范围。来自池的块可以通过识别指向块的开始的当前 指针的值而被分配。内存分配加速器116可以将在块的开始处地址的值返回至内核110a。 内存分配加速器116之后可以按照块的尺寸增加指针的地址,从而指向内存108中的新地 址。例如,池列表126