用于损耗程度感知存储器分配的系统、方法和装置与流程

文档序号:32382164发布日期:2022-11-30 03:02阅读:34来源:国知局
用于损耗程度感知存储器分配的系统、方法和装置与流程
用于损耗程度感知存储器分配的系统、方法和装置
1.相关申请的交叉引用
2.本技术要求2021年5月28日提交的题为“systems,methods,and devices for wear-leveling aware memory allocation”的美国临时专利申请no.63/194,922的优先权和权益,该专利申请通过引用并入本文。
技术领域
3.本公开总体上涉及存储器分配,更具体地,涉及用于损耗程度感知(wear-level aware)存储器分配的系统、方法和装置。


背景技术:

4.存储器分配方案可以将存储器池中的存储器分配给诸如程序、应用、服务等的进程(process),以响应来自进程的分配请求。被分配给进程的存储器量可以基于一个或多个因素,诸如进程可以用来执行一个或多个操作的存储器量、存储器池中可用的存储器量等。在进程完成一个或多个操作之后,存储器可以从进程中被解除分配,并被返回到存储器池。
5.本背景技术部分公开的上述信息仅用于增强对本公开背景的理解,因此可能包含不构成现有技术的信息。


技术实现要素:

6.一种用于存储器分配的方法可以包括确定第一存储器页的使用量,其中第一存储器页被映射到第一组级别的第一页组,第二存储器页可以被映射到第一组级别的第二页组,并且第一存储器页和第二存储器页可以被映射到第二组级别的第三页组,以及基于分配请求,基于使用量来选择第一存储器页。使用量可以包括第一使用量,并且该方法还可以包括确定第二存储器页的第二使用量,其中可以基于第一使用量和第二使用量来选择第一存储器页。该方法还可以包括将第一存储器页分配给进程。第一使用量可以基于第一存储器页的写入计数。第一使用量可以基于第一存储器页的分配计数。该方法还可以包括基于第一使用量和第二使用量将第一存储器页与第二组级别相关联。第二组级别可以是最高组级别。选择第一存储器页可以包括基于第一使用量来搜索数据结构,以及基于搜索数据结构来选择空闲列表。该数据结构可以包括包含第一使用量的节点的树,并且该节点可以包括空闲列表。选择第一存储器页还可以包括基于第一存储器页的组级别从空闲列表中选择第一存储器页。第一使用量可以包括最低使用量,并且第一存储器页的组级别可以包括最高组级别。该方法还可以包括从空闲列表中移除第一存储器页。该方法还可以包括基于从空闲列表中移除第一存储器页来更新第一存储器页和第二存储器页的页状态图。页状态图的条目可以包括使用量。该方法还可以包括基于页状态图生成数据结构。第一存储器页和第二存储器页可以是连续的存储器页,并且该方法还可以包括基于分配请求来合并第一存储器页和第二存储器页以生成合并的存储器页的组,并且将该合并的存储器页的组分配给一个或多个进程。选择第一存储器页和选择第二存储器页可以包括基于第一使用量来搜索
数据结构,以及基于搜索数据结构来选择空闲列表。选择第一存储器页和选择第二存储器页还可以包括基于第一存储器页的组级别从空闲列表中选择第一存储器页,并且选择第二存储器页可以包括选择可以与第一存储器页连续的存储器页。可以与第一存储器页连续的存储器页可以包括第一存储器页的伙伴页。选择空闲列表可以包括选择与最低使用量相对应的空闲列表,该空闲列表具有与第一存储器页的组级别相对应的可用页。该方法还可以包括将第一使用量存储在存储器中,并且由主机存储器分配器读取第一使用量。将第一使用量存储在存储器中可以包括由主机存储器分配器将第一存储器页的第一分配计数存储在存储器中。将第一使用量存储在存储器中可以包括由设备将第一存储器页的第一写入计数存储在存储器中,并且存储器可以包括附接到设备的设备附接型存储器。
7.一种用于存储器解除分配的方法可以包括确定第一存储器页的第一使用量和第二存储器页的第二使用量,其中第一存储器页被映射到第一组级别的第一页组,第二存储器页被映射到第一组级别的第二页组,并且第一存储器页和第二存储器页被映射到第二组级别的第三页组,从进程解除分配第一存储器页,并且基于第一使用量来更新第一存储器页和第二存储器页的页状态图。第一存储器页可以与第二存储器页连续,并且更新页状态图可以包括基于第一使用量和第二使用量将第一存储器页与第一组级别相关联。更新页状态图可以包括基于第一使用量和第二使用量将第二存储器页与第二组级别相关联。第二使用量可以小于第一使用量。第一存储器页可以与第二存储器页连续,并且更新页状态图可以包括基于第一使用量和第二使用量将第一存储器页与第二组级别相关联。
8.一种装置可以包括存储器分配器,该存储器分配器配置为基于分配请求,从空闲列表中选择第一存储器页,该空闲列表包括组级别处第一存储器页的第一条目和该组级别处第二存储器页的第二条目。该组级别可以包括第一组级别,并且存储器分配器可以被配置为将第一组级别的第一存储器页分配给一个或多个进程之一,并且将第二组级别的第二存储器页和第三存储器页分配给一个或多个进程,其中第三存储器页可以与第二存储器页连续。空闲列表可以包括第一组级别处第三存储器页的第三条目。存储器分配器可以被配置为基于分配请求合并第二存储器页和第三存储器页。
9.一种系统可以包括包含第一存储器页和第二存储器页的设备,以及通过互连耦合到该设备的主机,该主机包括配置为确定第一存储器页的使用量的存储器分配器,其中第一存储器页可以被映射到第一组级别的第一页组,第二存储器页可以被映射到第一组级别的第二页组,并且第一存储器页和第二存储器页可以被映射到第二组级别的第三页组,并且基于分配请求,基于使用量来选择第一存储器页。使用量可以包括第一使用量,并且存储器分配器还可以被配置为确定第二存储器页的第二使用量,其中第一存储器页可以基于第一使用量和第二使用量来选择。
附图说明
10.在所有附图中,出于说明的目的,附图不一定是按比例绘制的,并且相似结构或功能的元件一般由相似的附图标记或其部分来表示。附图仅是为了便于描述本文描述的各种实施例。附图没有描述本文公开的教导的每一个方面,并且不限制权利要求的范围。为了防止附图变得模糊,不是所有的组件、连接等都被示出,并且不是所有的组件都具有附图标记。然而,从附图中可以容易地看出组件配置的模式。附图与说明书一起示出了本公开的示
例实施例,并且与描述一起用于解释本公开的原理。
11.图1示出了根据本公开的示例实施例的、其中主机可以访问设备附接型存储器的系统的实施例。
12.图2示出了根据本公开的示例实施例的伙伴(buddy)存储器分配方法的实施例。
13.图3示出了根据本公开的示例实施例的具有损耗程度感知的存储器分配方法的实施例。
14.图4a示出了根据本公开的示例实施例的具有分组页管理的伙伴存储器分配方法的数据结构的示例实施例,其中,数据结构在分配页之前以第一状态示出。
15.图4b示出了根据本公开的示例实施例的具有分组页管理的伙伴存储器分配方法的数据结构的示例实施例,其中,数据结构在分配页之后以第二状态示出。
16.图5a示出了根据本公开的示例实施例的具有分组页管理的伙伴存储器分配方法的数据结构的示例实施例,其中,数据结构在解除分配页之前以第一状态示出。
17.图5b示出了根据本公开的示例实施例的具有分组页管理的伙伴存储器分配方法的数据结构的示例实施例,其中,数据结构在解除分配页之后以第二状态示出。
18.图6a示出了根据本公开的示例实施例的具有单独页管理的伙伴存储器分配方法的数据结构的示例实施例,其中,数据结构在分配页之前以第一状态示出。
19.图6b示出了根据本公开的示例实施例的具有单独页管理的伙伴存储器分配方法的数据结构的示例实施例,其中,数据结构在分配页之后以第二状态示出。
20.图7a示出了根据本公开的示例实施例的具有单独页管理的伙伴存储器分配方法的数据结构的示例实施例,其中,数据结构在解除分配页之前以第一状态示出。
21.图7b示出了根据本公开的示例实施例的具有单独页管理的伙伴存储器分配方法的数据结构的示例实施例,其中,数据结构在解除分配页之后以第二状态示出。
22.图8示出了根据本公开的示例实施例的基于磨损程度(wear-out-level)分配存储器页的数据结构的实施例。
23.图9示出了根据本公开的示例实施例的用于生成树和一个或多个相关联的wol特定空闲(free)页列表的方法的示例实施例。
24.图10a示出了根据本公开的示例实施例的损耗程度感知伙伴页分配方法的示例实施例,其示出了在页分配之前处于第一状态的数据结构。
25.图10b示出了根据本公开的示例实施例的损耗程度感知伙伴页分配方法的示例实施例,其示出了在页分配之后处于第二状态的数据结构。
26.图11a示出了根据本公开的示例实施例的具有分组页管理的伙伴页分配方法的示例实施例,其示出了在页分配之前处于第一状态的数据结构。
27.图11b示出了根据本公开的示例实施例的具有分组页管理的伙伴页分配方法的示例实施例,其示出了在页分配之后处于第二状态的数据结构。
28.图12a示出了根据本公开的示例实施例的单页损耗程度感知伙伴页解除分配方法的示例实施例,其示出在页解除分配之前处于第一状态的数据结构。
29.图12b示出了根据本公开的示例实施例的单页损耗程度感知伙伴页解除分配方法的示例实施例,其示出在页解除分配之后处于第二状态的数据结构。
30.图13a示出了根据本公开的示例实施例的具有分组页管理的伙伴页解除分配方法
的示例实施例,其示出在页解除分配之前处于第一状态的数据结构。
31.图13b示出了根据本公开的示例实施例的具有分组页管理的伙伴页解除分配方法的示例实施例,其示出在页解除分配之后处于第二状态的数据结构。
32.图14a示出了根据本公开的示例实施例的多页损耗程度感知伙伴页分配方法的示例实施例,其示出了在多页分配之前处于第一状态的数据结构。
33.图14b示出了根据本公开的示例实施例的多页损耗程度感知伙伴页分配方法的示例实施例,其示出了在多页分配之后处于第二状态的数据结构。
34.图15示出了根据本公开的示例实施例的用于将存储器页划分为页单元的方法的示例实施例。
35.图16a示出了根据本公开的示例实施例的具有分组页管理的伙伴页分配方法的示例实施例,其示出了在多页分配之前处于第一状态的数据结构。
36.图16b示出了根据本公开的示例实施例的具有分组页管理的伙伴页分配方法的示例实施例,其示出了在多页分配之后处于第二状态的数据结构。
37.图17示出了根据本公开的示例实施例的用于以损耗程度感知存储器分配方案来存储存储器页的wol信息的系统的示例实施例。
38.图18示出了根据本公开的示例实施例的用于以损耗程度感知存储器分配方案来存储存储器页的wol信息的系统的另一个示例实施例。
39.图19示出了根据本公开的示例实施例的存储器分配方法的实施例。
40.图20示出了根据本公开的示例实施例的存储器解除分配方法的实施例。
具体实施方式
41.在一些实施例中,伙伴存储器分配方案可以包括被布置为单独分配的存储器页、或者以可以称为伙伴页的连续页的组分配的存储器。这些组可以按级别布置,其中较高级别的组可以包括更多的连续伙伴页。当单独的页被解除分配时,它们可以与其他的连续空闲伙伴页合并为组。
42.在一些实施例中,伙伴存储器分配器可以重新分配最近被解除分配的存储器页,同时可以允许其他存储器页保持为未被使用。如果这种类型的方案用于具有受限写入耐久性的存储器(例如,非and(nand)闪存、相变存储器(pcm)等),则可能导致不均匀损耗和/或早期存储器设备故障。
43.根据本公开的示例实施例的一些伙伴存储器分配方案可以在响应于分配请求而分配存储器页时,考虑一个或多个存储器页的使用量。例如,可以在具有较高使用量的其他存储器页之前分配具有较低使用量的存储器页。在一些实施例中,使用量可以指示例如具有受限耐久性(例如,读取和/或写入耐久性)的存储器类型的的参数值,诸如磨损程度(wear-out-level,wol)。取决于实现细节,这可以使存储器页更均匀地损耗,这进而可以延长存储器的寿命。出于说明的目的,下面可以在使用量可以指示磨损程度的上下文中描述一些实施例,但是这些原理可以应用于具有可以由使用量指示的值的任何其他参数。
44.在一些实施例中,根据本公开的示例实施例,损耗程度感知分配方案可以实现一个或多个页管理特征。这些特征可以具有独立的效用,并且可以单独实施,并且不是每个实施例都可以利用每个特征。此外,这些特征还可以以各种组合来实施,各种组合中一些可以
以协同的方式来放大单独的特征的益处。例如,取决于实现细节,页管理特征中的一个或多个可以使损耗程度感知分配方案能够在单独管理页的同时分配连续的(例如,伙伴)页和/或页组。
45.根据本公开的示例实施例的一些页管理特征可以涉及从最高组级别开始分配存储器页,其中具有最低磨损程度的页可以被分配到最高组级别。取决于实现细节,这可以使损耗程度感知分配方案能够实现具有相对较低复杂度o(1)的单页分配机制。这可能特别有益,因为在一些应用中,单页分配可能占分配请求的很大比例。
46.根据本公开的示例实施例的一些附加的页管理特征可以涉及一种或多种混合数据结构的使用。例如,用于损耗程度感知分配方案的数据结构可以包括(1)具有基于磨损程度的节点的损耗程度树、(2)用于管理空闲页的、与每个节点相关联的空闲列表和/或(3)用于检查伙伴页和/或页组的空闲状态和/或磨损程度的页状态图。在一些实施例中,响应于分配请求,页管理算法可以在该树中搜索具有最低磨损程度的节点。该算法然后可以从与该具有最低磨损程度的节点相关联的空闲列表的最高级别选择存储器页。该算法然后可以从页状态图的对应的组级别中清除条目和/或从该空闲列表中移除所选存储器页。
47.根据本公开的示例实施例的一些另外的页管理特征可以涉及空闲存储器页的按需合并(coalescing)。例如,在一些实施例中,当通过解除分配释放页时,页管理算法可以不合并页。相反,当接收到对多个连续页的分配请求时,页管理算法可以合并页。取决于实现细节,这可以改进对可能具有不同磨损程度的单独的页的管理。
48.根据本公开的示例实施例的一些附加的页管理特征可以涉及将被解除分配的存储器页的磨损程度与伙伴页或页组的磨损程度进行比较。如果伙伴页的磨损程度低于被解除分配的页的磨损程度,则可以在页状态图中提升伙伴页,并且被解除分配的页可以以伙伴页的原始级别被插入到页状态图中。在一些实施例中,损耗程度树和一个或多个对应的空闲列表可以基于对页状态图的修订来更新。
49.在一些实施例中,损耗程度感知分配方案可以例如使用写入计数、分配计数和/或任何其他合适的技术来监视一个或多个存储器页的磨损程度。每个页的磨损程度可以存储在例如设备附接型存储器的预留空间中。
50.图1示出了根据本公开的示例实施例的、其中主机可以访问设备附接型存储器的系统的实施例。图1所示的系统可以包括主机102和设备104。主机102可以包括存储器分配器106和主机存储器108。存储器分配器106可以被实现为例如伙伴存储器分配器。主机存储器108可以用任何类型的存储器(例如易失性存储器,诸如动态随机访问存储器(dram)、静态随机访问存储器(sram)等)来实现。
51.设备104可以包括设备存储器110。设备104可以被实现为例如诸如固态驱动(ssd)的存储设备,其中设备存储器110可以用诸如nand闪存的非易失性存储器(nvm)来实现。然而,在其他实施例中,可以使用任何其他类型的设备和/或设备存储器。
52.主机102和设备104可以通过任何类型的互连112(诸如计算快速链接(cxl))来通信。主机102可以通过互连112使用任何类型的协议来访问设备存储器110。在图1所示的实施例中,主机102可以使用可以在cxl互连112上操作的cxl.mem协议114来访问设备存储器110。cxl.mem协议可以以使存储器分配器106能够分配设备存储器110就好像设备存储器110是主机存储器108的部分一样的方式来向主机102暴露设备存储器。
53.图2示出了根据本公开的示例实施例的伙伴存储器分配方法的实施例。例如,可以使用图1所示的系统来实现图2所示的实施例。
54.参考图2,如操作216所示,伙伴存储器分配器206可以解除分配设备附接型存储器页220的组218。(解除分配存储器页也可以被称为释放存储器页。)设备附接型存储器页220可以被实现为例如非易失性存储器(nvm)210,其可以通过诸如cxl.mem的存储器访问协议来暴露。
55.伙伴存储器分配器206可以旨在用于无损耗限制的存储器,诸如dram。因此,当伙伴存储器分配器206接收到分配请求时,它可以在分配任何剩余页224之前,再次分配最近被解除分配的存储器页的组218中的一个或多个页,如操作222所示。存储器页220中示出的阴影量可以指示磨损程度(例如,写入次数)。因此,组218中的存储器页可能相对快速地磨损,而剩余的存储器页224可能经受很少损耗或未受损耗。
56.图3示出了根据本公开的示例实施例的具有损耗程度感知的存储器分配方法的实施例。例如,可以使用图1中所示的系统来实现图3中所示的实施例,其中存储器分配器106可以被重新配置为作为损耗程度感知伙伴存储器分配器306来操作,如下所述。
57.损耗程度感知伙伴存储器分配器306可以访问设备附接型存储器320的页的磨损程度信息。设备附接型存储器320可以被实现为例如非易失性存储器(nvm)310,其可以通过诸如cxl.mem的存储器访问协议来暴露。磨损程度信息可以作为来自设备附接型存储器320所在的设备(例如,图1中的设备104)的写入计数信息被提供给存储器分配器306。可替代地或附加地,存储器分配器306可以记录并使用设备附接型存储器320的页的分配计数信息作为磨损程度信息。可以使用磨损程度信息的任何其他来源。
58.损耗程度感知存储器分配器306可以协调一个或多个解除分配操作326和分配操作328,以基于一个或多个页的磨损程度来公平和/或均匀地分配存储器页。例如,在一些实施例中,可以响应于分配请求来分配在设备附接型存储器320的整个组330中具有最低磨损程度的一个或多个页和/或伙伴页。在下一个分配请求时,损耗程度感知存储器分配器306可以再次选择整个组330中具有最低磨损程度的一个或多个页和/或伙伴页,而不管任何特定页何时被解除分配。取决于实现细节,这可以使设备附接型存储器320的页更均匀地损耗,如设备附接型存储器320的每个页的相对均匀的阴影程度所示的。
59.在一些实施例中,可以将存储器的页分配给诸如程序、应用、服务等的进程。在一些实施例中,可以从诸如程序、应用、服务等的进程中解除分配存储器的页。
60.为便于说明,可以在设备附接型存储器的上下文中描述一些实施例。然而,与损耗程度感知存储器分配相关的原理可以应用于其中可以分配具有受限读取和/或写入耐久性的存储器的任何存储器分配上下文。例如,这些原理可以应用于其中主机中的存储器分配器仅可以访问主机存储器(主机存储器中的至少一些是损耗受限的(例如,pcm、闪存等))的实施例。此外,页尺寸可以用任何尺寸(诸如512字节、4k字节、8k字节等和/或它们的任何组合)来实现。
61.为便于说明,可以在cxl接口和/或协议的上下文中描述一些实施例。然而,实施例也可以用任何其他接口和/或协议(包括高速缓存一致和/或存储器语义接口和/或协议,诸如gen-z、一致加速器处理器接口(capi)、用于加速器的高速缓存一致互连(ccix)等)来实现。合适的接口和/或协议的其他示例可以包括快速外围组件互连(pcie)、快速非易失性存
储器(nvme)、nvme-over-fabric(nvme-of)、以太网、传输控制协议/互联网协议(tcp/ip)、远程直接存储器访问(rdma)、聚合以太网上rdma(roce)、光纤通道(fibrechannel)、无限带宽(infiniband)、串行ata(sata)、小型计算机系统接口(scsi)、串行附接scsi(sas)、iwarp等和/或其组合。
62.再次参考图1,设备104可以由任何类型的设备(诸如存储设备、加速器设备、网络接口卡(nic)、图形处理单元(gpu)等)来实现。用作设备104的存储设备可以基于任何类型的存储介质,包括磁介质、固态介质、光学介质等。例如,在一些实施例中,设备104可以被实现为基于非and(nand)闪存的固态驱动(ssd)、诸如交叉网格非易失性存储器的持久存储器、具有体电阻变化的存储器等和/或其任意组合。这种存储设备可以使用诸如串行ata(sata)、小型计算机系统接口(scsi)、串行附接scsi(sas)、u.2等的任何连接器配置,以诸如3.5英寸、2.5英寸、1.8英寸、m.2、企业和数据中心ssd形状因子(edsff)、nf1等的任何形状因子来实现。这种存储设备可以全部或部分地与服务器机箱、服务器机架、数据室、数据中心、边缘数据中心、移动边缘数据中心和/或其任何组合等一起实现并且/或者与它们结合使用。
63.在设备104被实现为存储设备(例如ssd)的一些实施例中,它可以包括总线接口、存储设备控制器和存储介质。存储设备控制器可以包括nvm逻辑和/或执行例行后台管理操作的其他逻辑,诸如闪存转换层(ftl)、闪存接口和/或可以执行垃圾收集(gc)、损耗均衡、从不安全关机中恢复等的逻辑。
64.尽管图1所示的实施例被示出为具有单个主机102和单个设备104,但可以包括任何数量的主机102和/或设备104,以及被配置为实现该系统的一个或多个交换机和/或其他组件。
65.图1所示的主机102(包括存储器分配器106)和/或设备104中的任一个、图3所示的存储器分配器306和/或本文所述的任何其他组件可以实现本文所述的任何功能,并可以通过硬件、软件或其任何组合(包括组合逻辑、时序逻辑、一个或多个定时器、计数器、寄存器、状态机、诸如动态随机访问存储器(dram)和/或静态随机访问存储器(sram)的易失性存储器、诸如包括nand闪存的闪存的非易失性存储器、诸如交叉网格非易失性存储器的永久存储器、具有体(bulk)电阻变化的存储器、和/或它们的任意组合、执行存储在任何类型的存储器中的指令的复杂可编程逻辑器件(cpld)、现场可编程门阵列(fpga)、专用集成电路(asic)、中央处理单元(cpu)(诸如复杂指令集计算机(cisc)处理器(诸如x86处理器)和/或精简指令集计算机(risc)处理器(诸如arm处理器))、图形处理单元(gpu)、神经处理单元(npu)等)来实现。在一些实施例中,一个或多个组件可以被实现为片上系统(soc)。
66.图4a示出了根据本公开的示例实施例的具有分组页管理的伙伴存储器分配方法的数据结构的示例实施例,其中,数据结构在分配页之前以第一状态示出。图4a所示的实施例可以包括页状态图402a和空闲列表404a。在这个示例中,页状态图402a可以映射由页帧号(pfn)0至7指示的八个存储器页,这八个存储器页可以被分组到由级别0到级别3指示的四个不同的组级别中。级别0可以指示单独的存储器页。级别1可以指示两个连续伙伴页的组。例如,pfn 0和pfn 1的存储器页可以被分组到级别1的两个伙伴页的组中。类似地,pfn 0至pfn 3的存储器页可以被分组到级别2的四个连续伙伴页的组中,并且pfn 0至pfn 7的存储器页可以被分组到级别3的八个连续伙伴页的组中。
67.因此,可以将存储器页映射到不同组级别的不同页组。例如,如图4a所示,pfn 7的第一存储器页可以被映射到级别0的第一页组401(在这个示例中该第一页组401可以包括单个页)。pfn 6的第二存储器页可以被映射到级别0的第二页组403(在这个示例中该第二页组403也可以包括单个页)。pfn6和pfn 7的两个存储器页可以被映射到级别1的第三页组405。
68.在页状态图402a和本文提及的其他页状态图中,级别0可以指示具有20个存储器页的组的级别,级别1可以指示具有21个存储器页的组的级别,级别2可以指示具有22个存储器页的组的级别,且级别3可以指示具有23个存储器页的组的级别。在一些实施例中,可以使用任何其他页组尺寸。
69.页状态图402a可以用于检查任何特定页或页的组的伙伴是否空闲。在图4a所示的页状态中,级别3的组中的对勾标记可以指示由页状态图402a映射的所有八个页都是空闲的。
70.可以用于分组管理空闲页的空闲列表404a可以包括与页状态图402a的组级别相对应的四个组级别0至3。在这个示例中,可以分组管理页,并且因为所有八个页都是空闲的,所以所有八个页都可以被包括在级别3的条目414中。因此,可以响应于下一个分配请求来分配级别3的条目414中的页。
71.在使用页状态图402a和空闲列表404a的伙伴存储器分配方法的实施例中,当伙伴存储器分配器接收到分配请求时,可以从最低级别开始寻找空闲页或页的组。例如,如果伙伴存储器分配器接收到对单页分配的请求,则它可以开始在空闲列表404a的级别0寻找空闲页。因为空闲列表404的级别0是空的,所以分配器可以继续在逐渐增高(例如,从最低到最高)的级别进行检查,直到它找到空闲页。在这个示例中,直到分配器到达级别3,才可以找到空闲页。在这个实施例中,可能没有选择pfn 0至pfn 7的任何页的基础。出于说明的目的,可以(例如)基于随机选择或基于预定模式(例如,最低pfn优先、最高pfn优先等)来选择页0以用于分配。
72.图4b示出了根据本公开的示例实施例的具有分组页管理的伙伴存储器分配方法的数据结构的示例实施例,其中,数据结构在分配页之后以第二状态示出。图4b中示出的示例实施例可以示出在分配了pfn 0的存储器页之后图4a中示出的数据结构的状态。因此,图4a和图4b可以共同示出根据本公开的示例实施例的具有分组页管理的页分配方法。
73.页状态图402b可以示出在分配了pfn 0的存储器页(也可以被称为页0或pfn 0)之后页状态图402a的状态。级别0处pfn 1的框中的对勾标记可以指示pfn 1的空闲页。级别1处pfn 2和pfn 3的框中的对勾标记可以指示pfn 2和pfn 3的两个空闲连续伙伴页的组。级别2处pfn 4至pfn 7的框中的对勾标记可以指示pfn 4至pfn 7的四个连续空闲伙伴页的组。
74.空闲列表404b可以示出在分配了pfn 0的存储器页之后空闲列表404a的状态。级别0的条目422可以指示级别0处可用的空闲页pfn 1。级别1的条目424可以指示级别1处可用的两个连续空闲伙伴页pfn 2和pfn 3。级别2的条目426可以指示级别2处可用的四个连续空闲伙伴页pfn 4至pfn 7。因此,在分配了页pfn 0之后,仍然可以在空闲列表404b中分组管理剩余的空闲页。此外,因为这种伙伴存储器分配方法可以从最低级别(级别0)开始搜索空闲页,所以可以响应于下一个单页分配请求来分配pfn 1的存储器页。
75.图5a示出了根据本公开的示例实施例的具有分组页管理的伙伴存储器分配方法的数据结构的示例实施例,其中,数据结构在解除分配页之前以第一状态示出。图5a中所示的页状态图502a和空闲列表504a可以分别类似于图4b中所示的页状态图402b和404b,但是具有可以指示仅分配了pfn 7的条目。具体地,pfn 6的单个存储器页可以在级别0处可用(空闲列表504a中级别0处的pfn 6的条目),pfn 4和pfn 5的两个连续伙伴页的组可以在级别1处可用(空闲列表504a中级别1处的pfn 4和pfn 5的条目),并且pfn 0至pfn 3处的四个连续伙伴页的组可以在级别2处可用(空闲列表504a中级别2处的pfn 0到pfn 3的条目)。因此,在空闲列表504a中,可以分组管理空闲页。
76.图5b示出了根据本公开的示例实施例的具有分组页管理的伙伴存储器分配方法的数据结构的示例实施例,其中,数据结构在解除分配页后以第二状态示出。图5b所示的页状态图502b和空闲列表504b可以示出在解除分配了pfn 7的存储器页之后页状态图502a和空闲列表504a的状态。因此,图5a和图5b可以共同示出根据本公开的示例实施例的具有分组页管理的页解除分配方法。
77.具体地,当解除分配了pfn 7的存储器页时,伙伴存储器分配器可以立即合并pfn 7及其伙伴页pfn 6,并且两个伙伴页的合并后的组可以移动到级别1。然而,组pfn 6和pfn 7然后可以立即与pfn 4和pfn 5合并,并且四个伙伴页的合并后的组可以移动到级别2。组pfn 4至pfn 7然后可以立即与pfn 0至pfn 3合并,并且八个伙伴页的合并后的组可以移动到级别3。可以在空闲列表504b中pfn 0至pfn 7的单个条目中反映八个伙伴页的合并后的组。
78.如上所述,用具有受限写入耐久性的存储器实现的存储器页可以具有不同的磨损程度,因此,单独管理存储器页可能是有利的。然而,使用如图4a、图4b、图5a和图5b所示的具有分组页管理和/或立即合并的伙伴存储器分配方法,可能难以为单独的存储器页提供磨损管理。
79.图6a示出了根据本公开的示例实施例的具有单独页管理的伙伴存储器分配方法的数据结构的示例实施例,其中,数据结构在分配页之前以第一状态示出。图6a所示的实施例可以包括页状态图602a和空闲列表604a。在这个示例中,pfn 0至pfn 7的所有八个页都可以是空闲的。然而,页状态图602a可以包括每个空闲存储器页的条目,而不是合并(例如,融合)空闲页。这些单独的页条目可以分布在整个组级别,以指示可用的伙伴页和/或伙伴页的组。因此,级别0的对勾标记可以指示单独的空闲页pfn 1、pfn 3、pfn 5和pfn 6。级别1的对勾标记可以指示pfn 2和pfn 4处单独的空闲页,如果被请求的话,其也可以用于分别与pfn 3和pfn 5形成两个连续伙伴页的组。级别2的对勾标记可以指示pfn 0处单独的空闲页,如果被请求的话,其也可以用于与pfn 1至pfn 3形成四个连续伙伴页的组。级别3的对勾标记可以指示pfn 7处单独的空闲页,如果被请求,其也可以用于与pfn 0至pfn 6形成八个连续伙伴页的组。
80.此外,空闲列表604a可以在每个组级别包括一个或多个空闲页的单独条目。具体地,空闲列表604a可以在级别处0包括pfn 1、pfn 3、pfn 5和pfn 6的存储器页的单独条目,在级别1处包括pfn 2和pfn 4的存储器页的单独条目,以及在级别2和级别3处分别包括pfn 0和pfn 7的存储器页的单独条目。
81.在一些实施例中,取决于实现细节,由页状态图602a和/或空闲列表604a提供的单
独页管理数据结构可以实现高效的最高到最低组级别搜索要分配的存储器页,包括单独的页和/或连续存储器页的组。例如,如图6a所示,pfn 7的存储器页可以用于下一个页分配请求。
82.图6b示出了根据本公开的示例实施例的具有单独页管理的伙伴存储器分配方法的数据结构的示例实施例,其中,数据结构在分配页之后以第二状态示出。图6b中示出的示例实施例可以示出在分配了pfn 7的存储器页之后图6a中示出的数据结构的状态。因此,图6a和图6b可以共同示出根据本公开的示例实施例的具有单独页管理的页分配方法。
83.在这个实施例中,由于页状态图602b和空闲列表604b的结构,以及由于最高到最低搜索,可以简单地从页状态图602b的级别3和/或空闲列表604b的级别3中移除pfn 7的条目,而不改变页状态图602b和/或空闲列表604b中的任何其他条目。此外,因为级别3现在是空的,所以要分配的下一个存储器页可以简单地向下移动到下一个更低的级别(级别2)。
84.图7a示出了根据本公开的示例实施例的具有单独页管理的伙伴存储器分配方法的数据结构的示例实施例,其中,数据结构在解除分配页之前以第一状态示出。图7a所示的页状态图702a和空闲列表704a的起始状态可以与图6b所示的基本相同。
85.图7b示出了根据本公开的示例实施例的具有单独页管理的伙伴存储器分配方法的数据结构的示例实施例,其中,数据结构在解除分配页之后以第二状态示出。图7b中示出的示例实施例可以示出在解除分配了pfn 7的存储器页之后图7a中示出的数据结构的状态。因此,图7a和图7b可以共同示出根据本公开的示例实施例的具有单独页管理的页解除分配方法。
86.在这个实施例中,由于页状态图702b和空闲列表704b的结构,pfn 7的条目可以简单地插入页状态图702b的级别3和/或空闲列表704b的级别3,而无需改变页状态图702b和/或空闲列表704b中的任何其他条目。此外,当存储器页pfn 7已被解除分配时,不是立即合并可用的伙伴页和/或页组,而是页状态图702b和/或空闲列表704b中的条目可以保持为单独的页条目。
87.图6a、图6b、图7a和图7b所示的实施例可以通过使用诸如图3所示的伙伴存储器分配器306的伙伴存储器分配器来实现。
88.图8示出了根据本公开的示例实施例的基于磨损程度分配存储器页的数据结构的实施例。图8所示的实施例可以例如使用诸如图3所示的伙伴存储器分配器306的伙伴存储器分配器来实现。
89.图8所示的实施例可以包括页状态图802和树830。页状态图802可以以类似于图6a、图6b、图7a和/或图7b所示的实施例的方式来包括单独的存储器页的条目。然而,条目中一个或多个可以各自包括对应的存储器页的页帧号(pfn)和/或可以指示例如对应的存储器页的磨损程度(wol)的使用量。例如,在级别3处示出为7(1)的条目中,7可以指示pfn 7,而(1)可以指示为1的wol。作为另一个示例,在级别0处示出为6(7)的条目中,6可以指示pfn 6,而(7)可以指示磨损程度7。在一些实施例中,较低的wol号可以指示较低的磨损程度,而较高的wol号可以指示较高的磨损程度。
90.树830可以包括对应于存储器页的wol的一个或多个节点。例如,在一些实施例中,树830可以用每个wol一个节点来实现。树830的每个节点可以具有空闲存储器页的一个或多个相关联的列表,这些列表具有与该节点相关联的wol。在图8所示的示例中,树830可以
包括wol=2的节点834、wol=1的节点836和wol=7的节点838。
91.wol=2的空闲存储器页的列表835可以与节点834相关联。例如,列表835可以是节点834的元素(如符号∈所示)、或者节点834可以包括从节点834访问列表835的指针或链接。类似地,具有wol=1的空闲存储器页的列表837可以与节点836相关联,并且具有wol=7的空闲存储器页的列表839可以与节点838相关联。
92.在一些实施例中,树830可以用可以被搜索以找到具有特定wol(例如,树中的最低wol)的节点的、任何类型的数据树(诸如二叉搜索树树、b树等)来实现。树830还可以包括根节点832,其可以用作例如搜索的起点。在一些实施例中,诸如835、837和839的列表可以用任何类型的列表(包括单向链表、双向链表等)来实现。
93.在一些实施例中,根据本公开的示例实施例,页状态图802、树830和/或列表835、837和839中的任一个或全部可以形成混合数据结构,该混合数据结构可以使伙伴存储器分配器(例如,使用树830)实现磨损(wear-out,wo)管理,(例如,使用列表835、837和/或839)管理单独的空闲页和/或(例如,使用页状态图802)检查伙伴页和/或页的组的空闲状态和/或wol。
94.在一些实施例中,可以基于具有与特定节点相关联的wol的存储器页的存在和/或不存在,在树830中添加和/或从其移除节点。例如,如果pfn 6的存储器页被分配,并且没有其他存储器页具有wol=7,则可以从树830中移除与wol=7相对应的节点838。如果从树830中移除了wol=7节点838,则可以删除对应的列表839。可替代地,如果稍后添加了与wol=7相对应的新节点,则该列表可以保持为空状态以供重新使用。作为另一个示例,如果一个或多个页到达wol 3,则与wol 3相对应的新节点可以被添加到树830,并且可以创建具有wol 3的存储器页的关联列表。
95.图9示出了根据本公开的示例实施例的用于生成树830和一个或多个相关联的wol特定空闲页列表的方法的示例实施例。该方法可以从类似于图6a所示的列表604a的空闲列表904开始,但是基于图8所示的页状态图802的条目中所示的pfn和wol号。
96.参考图9,可以基于单独的空闲页的wol来将初始空闲列表904拆分为多个wol特定空闲列表。例如,具有wol=1(如实线所示)的页可以被收集并插入到列表937中它们对应的组级别处。具有wol=2(如虚线所示)的页可以被收集并插入到列表935中它们对应的组级别处。具有wol=7的页(如点线所示)可以被收集并插入到列表939中它们对应的组级别处。在一些实施例中,列表935、937和/或939中的任一个可以分别用于图8中的列表835、837和/或839。
97.图9所示的方法可以用任何数量的wol特定空闲列表和/或每个列表中以及每个组级别的任何数量的空闲页来实现。诸如图8中所示的树830的对应的树可以被更新为包括与产生的空闲列表一样多的节点。
98.共同构成图10的图10a和图10b示出了根据本公开的示例实施例的损耗程度感知伙伴页分配方法的示例实施例。例如,可以使用类似于图8所示的混合数据结构和类似于图3所示的伙伴存储器分配器来实现图10所示的实施例。图10所示的方法可以例如由伙伴存储器分配器接收到的单页分配请求来启动。
99.参考图10a,页状态图1002a和树1030a的初始状态与图8所示的相关联的空闲列表1035a、1037a和1039a相似,但pfn 0和pfn 7的条目相反。单页分配方法可以如下进行。在第
一操作1042a,存储器分配器可以搜索树1030a以找到具有最低wol的节点。在这个示例中,节点1036a可以具有最低wol(wol=1)。在第二操作1044a,存储器分配器可以从与节点1036a相关联的wol特定空闲列表1037a的最高组级别中查找空闲页。在这个示例中,pfn 0的存储器页(可以被称为目标页)是与最低wol相关联的空闲列表的最高组级别处的空闲页。然后,存储器分配器可以响应于单页分配请求来分配目标页(pfn 0)。
100.参考图10b,在第三操作1046a,存储器分配器可以从空闲列表1037a中移除目标页(pfn 0)。在第四操作1048a,存储器分配器可以从页状态图1002b的级别3中清除条目0(1)。
101.取决于实现细节,图10中所示的单页分配方法可以以o(1)的时间复杂度来实现。
102.共同构成图11的图11a和图11b示出了根据本公开的示例实施例的具有分组页管理的伙伴页分配方法的示例实施例。
103.参考图11a,页状态图1102a和空闲列表1104a的初始状态可以与图4a所示的类似。在第一操作1150a,存储器分配器可以从空闲列表1104a的最低级别开始搜索空闲页。存储器分配器可以继续最低到最高搜索,直到在级别3找到八个空闲页为止。可以在不感知任何页的wol的情况下,随机地或者基于预定模式(例如,最低pfn优先、最高的pfn优先等)来选择pfn0的存储器页作为目标页。存储器分配器然后可以分配pfn 0。
104.参见图11b,在第二操作1152b,存储器分配器可以从空闲列表1104a的级别3中移除pfn 0的目标存储器页。在第三操作1154b,存储器分配器可以在空闲列表1104a的适当级别重新插入剩余的伙伴页pfn 1至pfn 7。在第四操作1156b,存储器分配器可以清除页状态图1156b的级别3处的比特(例如,对勾标记),并且在页状态图1102b的级别0至级别2处设置适当比特(例如,对勾标记)。
105.取决于实现细节,图11所示的单页分配方法可以以o(log n)的时间复杂度来实现。
106.共同构成图12的图12a和图12b示出了根据本公开的示例实施例的单页损耗程度感知伙伴页解除分配方法的示例实施例。例如,可以使用类似于图8所示的混合数据结构和类似于图3所示的伙伴存储器分配器来实现图12所示的实施例。例如,当单个存储器页不再被需要并准备好解除分配时,可以启动图12所示的方法。
107.参考图12a,该方法可以在pfn 0的存储器页被解除分配时开始。当它被分配时,pfn 0的存储器页可能已经被写入一次或多次,使得它现在可能具有为2的wol。因此,页状态图1202a中的pfn 0的条目可以被指定为0(2)。
108.在第一操作1258a的第一次迭代

,存储器分配器可以将被解除分配的页的wol与其最低级别(级别0)的伙伴页的wol进行比较。在第二操作1260a的第一次迭代,被解除分配的页或对应的伙伴页可以被提升到下一个更高的级别,例如基于以下算法:
109.如果伙伴页的wol小于被解除分配的页的wol
110.{
111.i.从当前级别移除伙伴页
112.ii.在当前级别插入被解除分配的页
113.iii.伙伴页在下一个更高的级别取代被解除分配的页
114.}
115.否则将被解除分配的页提升到下一个更高的级别
116.然后,该方法可以在第一操作1258a和第二操作1260a之间迭代进行,直到到达可以插入被解除分配的页的最高级别为止。
117.在图12所示的示例中,在第一次迭代,0(2)的wol与其伙伴页1(2)的wol相同,因此,被解除分配的页0(2)可以被提升到级别1。在第二次迭代

中,被解除分配的页0(2)的wol可以与下一个级别(级别1)的伙伴页的wol进行比较。在这个示例中,级别1的伙伴页2(2)的wol再次是2。因此,被解除分配的页0(2)可以被提升到级别2。在第三次迭代

时,被解除分配的页0(2)的wol可以与级别2的伙伴页的wol进行比较。
118.然而,如果在任何级别,被解除分配的页的wol小于伙伴页的wol,则可以从该级别移除该伙伴页,可以在该级别插入被解除分配的页,可以将该伙伴页提升到下一个级别,并且该伙伴页可以取代被解除分配的页,以用于在一个或多个更高的级别进行进一步的wol比较。
119.在这个示例中,级别2的伙伴页7(1)的wol为1。因此,可以从级别2移除页7(1),被解除分配的页0(2)可以被插入到级别2,并且页7(1)可以被提升到级别3。因为级别3是最高级别,所以第二操作可以终止而不再进行比较。
120.参考图12b,在第二操作1262b的第二部分(上述算法的部分ii.),页0(2)可以被插入到wol=2空闲列表1235b的级别2。在第三操作1264b,pfn 7的存储器页可以被提升到wol=1空闲列表1237b的级别3。
121.因此,具有最低wol的空闲页可以最终到达最高级别,如果任何级别的页之间出现wol平局,则最近被解除分配的页可以被提升到下一级别。因此,任何级别的空闲页的pfn可以取决于哪个页最近被解除分配。
122.在一些实施例中,如图12所示,根据本公开的示例实施例的损耗程度感知伙伴页解除分配方法在解除分配时可能不会合并空闲页。取决于实现细节,这可以减少或消除为响应于单页分配请求而拆分合并的页的需要。例如,在大多数分配请求是单页分配请求的许多应用中,这可能是有益的。
123.共同构成图13的图13a和图13b示出了根据本公开的示例实施例的具有分组页管理的伙伴页解除分配方法的示例实施例。
124.参考图13a,该方法可以在pfn 0的存储器页被解除分配时开始。在第一操作1366a的第一次迭代

,可以检查被解除分配的页pfn 0的伙伴页pfn 1的可用性。如果该伙伴页可用,则在第二操作1368a,可以从空闲列表中移除该伙伴页,并且在第三操作1370a,该伙伴页pfn 1可以与被解除分配的页pfn 0合并。
125.如果每个级别的伙伴页都是可用的,则可以在迭代



中重复第一、第二和第三操作。在这个示例中,伙伴页在每个级别都可用,因此,继续在每个级别合并伙伴页。
126.参考图13b,在所有页被合并之后,在第四操作1372b,所有八个页可以被插入空闲列表的级别3中。在第五操作1374b,可以设置页状态图1304b中级别3的比特。
127.共同构成图14的图14a和图14b示出了根据本公开的示例实施例的多页损耗程度感知伙伴页分配方法的示例实施例。例如,可以使用类似于图8所示的混合数据结构和类似于图3所示的伙伴存储器分配器来实现图14所示的实施例。图14所示的方法可以例如由伙伴存储器分配器接收到的多页分配请求来启动。
128.参考图14a,该方法可以由分配两个连续存储器页的请求来启动。因为可以在级别
1分配两个连续伙伴页,所以在第一操作1476a,存储器分配器可以在树1430a中搜索具有最低wol的节点,对于该节点,级别1或更高的级别不为空(例如,包括空闲页的一个或多个条目)。在这个示例中,wol=2的节点1434a可以具有最低wol,对于该节点1434a,级别1或更高的级别不为空。在第二操作1478a,存储器分配器可以在与wol=2节点相关联的空闲列表1435a的最高级别查找空闲页以及空闲伙伴页,以形成两个连续页的组。在这个示例中,页0(2)和1(2)可以是最高空闲页和伙伴页。在第三操作1480a,存储器分配器可以从与wol=2节点相关联的空闲表1435a中移除该最高页和伙伴页。
129.参考图14b,在第四操作1482b,存储器分配器可以合并pfn 0和pfn1的两个存储器页,然后可以响应于分配请求来分配pfn 0和pfn 1的两个存储器页。因此,可以从页状态图1402b中移除0(2)和1(2)的条目。
130.因此,根据本公开的示例实施例的多页损耗程度感知伙伴页分配方法可分配多个连续页,同时仍然单独地管理页(例如,管理单独的页的wol)。取决于实现细节,这可以增加非易失性存储器(诸如ssd中的闪存、pcm、非易失性ram(nvram)和/或具有受限写耐久性的其他类型的存储器)的寿命。
131.取决于实现细节,根据本公开的示例实施例的多页损耗程度感知伙伴页分配方法可以以例如o(n)的复杂度来实现。
132.图15示出了根据本公开的示例实施例的用于将存储器页划分为页单元的方法的示例实施例。例如,图15中所示的实施例可以用于确定可以基于多页分配请求来分配的伙伴页的组的首页(first page)。出于说明的目的,图15中所示的实施例可以使用一个或多个分配计数来确定每个页的wol,但是在其他实施例中,可以使用任何其他技术来确定一个或多个wol。
133.参考图15,页帧表1592可以包括顶行和底行,顶行具有页帧号(例如,pfn 0至pfn 7)的列表,底行具有与pfn相对应的每个存储器页的对应分配计数(ac)。可以用实线轮廓指示空闲页,用虚线轮廓指示分配的页。
134.图15所示的方法可以使用具有根节点1532、分配计数为2(ac=2)的节点1534、ac=1的节点1536和ac=7的节点1538的树结构1530。具有ac=2的空闲存储器页的列表1535可以与节点1534相关联。例如,列表1535可以是节点1534的元素(如符号∈所示)、或者节点1534可以包括从节点1534访问列表1535的指针或链接。类似地,具有ac=1的空闲存储器页的列表1537可以与节点1536相关联,并且具有ac=7的空闲存储器页的列表1539可以与节点1538相关联。例如,可以通过将页帧表1592的顶行中的每个存储器页分配给与存储器页的ac相对应的树结构1530的节点,来创建和/或更新树结构1530。
135.在一些实施例中,图15中所示的方法可以用于确定所选页的连续存储器地址空间中的一个或多个伙伴页。例如,给定所选页,可以使用一个或多个等式来找到具有由组级别指示的尺寸的伙伴组的首页。
136.在一些实施例中,组级别(gl)可以指示伙伴组中连续页的数量。例如,组中的页数(np)可以等于级别号加1。因此,对于级别3(gl=3),组中可能有四个页(np=4)。参考图15,如果用户请求八个连续页1594的组(gl=3),则pfn 0至pfn 7的首页可以是pfn 0。类似地,四个连续页pfn 0至pfn 3的组(gl=2)的首页可以是pfn 0,并且四个连续页pfn 4至pfn 7的组(gl=2)的首页可以是pfn 4。
137.可以用于基于所选页(sp)查找具有由所请求的组级别指示的尺寸的伙伴组的首页(fp)的示例等式如下:
138.首页=所选页&~((1《《组级别)-1)
ꢀꢀꢀꢀꢀꢀꢀ
(等式1)
139.其中&指示逻辑and运算,~指示逻辑not运算,并且《《指示逻辑左移。
140.在一些实施例中,树结构1530可以用可以被搜索以找到具有特定ac(例如,树中的最低ac)的节点的、任何类型的数据树(诸如二叉搜索树、b树等)来实现。根节点1532可以用作搜索的起点。在一些实施例中,根据本公开的示例实施例,页帧表1592、树1530和/或列表1535、1537和1539中的任一个或全部可以形成混合数据结构,该混合数据结构可以使伙伴存储器分配器能够(例如,使用树1530)实现磨损(wo)管理,(例如,使用列表1535、1537和/或1539)管理单独的空闲页和/或检查伙伴页和/或页的组的空闲状态和/或ac。在一些实施例中,可以基于具有与特定节点相关联的ac的存储器页的存在和/或不存在来向树1530添加节点和/或从树1530移除节点。
141.共同构成图16的图16a和图16b示出了根据本公开的示例实施例的具有分组页管理的伙伴页分配方法的示例实施例。
142.参考图16a,该方法可以由对两个连续存储器页的分配请求启动。在第一操作1684a,存储器分配器可以在空闲列表1604a中从级别1开始(因为分配请求是针对两个连续页的)并且从低到高渐进地查找两个连续空闲页的第一实例。在这个示例中,可以在级别2找到第一两个连续空闲页pfn 0和pfn 1。
143.参考图16b,在第二操作1686b,存储器分配器可以从空闲列表1604b中移除两个连续空闲页pfn 0和pfn 1。在第三操作1688b,存储器分配器可以在空闲列表1604b中重新插入伙伴页pfn 2和pfn 3,这次是在级别1,因为只有两个连续空闲页。在第四操作1690b,存储器分配器可以清除和设置页状态图1602b中的比特,以反映页pfn 0和pfn 1的分配。
144.取决于实现细节,图16中所示的多页分配方法可以以o(log n)的时间复杂度来实现。
145.在一些实施例中,当设备附接型存储器被映射到或以其他方式可用于(例如,主机处的)存储器分配器时,由存储器页执行的写入操作的数量可能对存储器分配器和/或系统软件不可见。例如,如图1所示,ssd处的设备nvm可以通过cxl.mem暴露给主机存储器分配器。在根据本公开的一些实施例中,系统可以使用硬件来对一个或多个存储器页的写入周期数进行计数。存储器分配器可以使用这些数来以可以为设备nvm提供损耗均衡的方式分配存储器页。
146.图17示出了根据本公开的示例实施例的用于以损耗程度感知存储器分配方案来存储存储器页的wol信息的系统的示例实施例。在图17所示的系统中,设备1704可以包括设备nvm 1710,其可以例如通过诸如cxl.mem的存储器协议被暴露为设备附接型存储器1720。设备附接型存储器1720的预留部分1721可以被预留用于设备nvm 1710中的一个或多个存储器页的wol信息。在这个示例中,设备1704可以(例如,如果设备1704被实现为ssd,则通过ftl)访问设备nvm 1710的写入计数信息。因此,设备1704可以基于设备nvm 1710的实际写信息来更新预留部分1721中的wol信息,如箭头1723所示。
147.存储器分配器1706可以如箭头1725所示访问设备附接型存储器1720的预留部分1721中的wol信息,并使用该wol信息来实现例如如上所述的损耗程度感知存储器分配方
案。
148.图18示出了根据本公开的示例实施例的用于以损耗程度感知存储器分配方案来存储存储器页的wol信息的系统的另一个示例实施例。在图18所示的系统中,设备1804可以包括设备附接型存储器1820。设备附接型存储器1820的预留部分1821可以被预留用于wol信息。
149.然而,在图18所示的实施例中,设备1804可能无法访问存储器写入计数信息。因此,存储器分配器1806可以将分配计数信息(其可以与写入计数信息正相关)存储在设备附接型存储器1820的预留部分1821中,如箭头1823所示。存储器分配器1806可以如箭头1825所示访问设备附接型存储器1820的预留部分1821中的wol信息,并使用该wol信息来实现例如如上所述的损耗程度感知存储器分配方案。
150.在一些实施例中,写入计数、分配计数和/或任何其他损耗相关度量的组合可以用于确定一个或多个存储器页的wol。
151.图19示出了根据本公开的示例实施例的存储器分配方法的实施例。该方法可以开始于操作1902。在操作1904,该方法可以确定第一存储器页的第一磨损程度(wol)和第二存储器页的第二wol,其中,第一存储器页和第二存储器页被布置在第一组级别和第二组级别中。在一些实施例中,wol可以基于第一存储器页的写入计数、第一存储器页的分配计数和/或其组合。在操作1906,该方法可以基于分配请求,基于第一wol和第二wol来选择第一存储器页。然后,可以基于分配请求来分配第一存储器页。该方法可以在操作1908结束。
152.图20示出了根据本公开的示例实施例的存储器解除分配方法的实施例。该方法可以开始于操作2002。在操作2004,该方法可以确定第一存储器页的第一磨损程度(wol)和第二存储器页的第二wol,其中,第一存储器页和第二存储器页被布置在第一组级别和第二组级别中。在操作2006,该方法可以解除分配第一存储器页。在操作2008,该方法可以基于第一wol来更新第一存储器页和第二存储器页的页状态图。在一些实施例中,第一存储器页可以与第二存储器页连续,并且可以通过基于第一wol和第二wol将第一存储器页与第一组级别相关联来更新页状态图。该方法可以在操作2010结束。
153.图19和图20所示的实施例以及本文所述的所有其他实施例是示例操作和/或组件。在一些实施例中,可以省略一些操作和/或组件和/或可以包括其他操作和/或组件。此外,在一些实施例中,操作和/或组件的时间和/或空间顺序可以变化。尽管一些组件和/或操作可以被示为单独的组件,但是在一些实施例中,单独示出的一些组件和/或操作可以被集成到单个组件和/或操作中,和/或被示为单个组件和/或操作的一些组件和/或操作可以用多个组件和/或操作来实现。
154.已经在各种实现细节的上下文中描述了上文公开的一些实施例,但本公开的原理不限于这些或任何其他具体细节。例如,一些功能已经被描述为由某些组件实现,但是在其他实施例中,这些功能可以分布在不同位置并具有各种用户界面的不同系统和组件之间。某些实施例已经被描述为具有特定的进程、操作等,但是这些术语也包含其中特定的进程、操作等可以用多个进程、操作等来实现的实施例;或者其中多个进程、操作等可以被集成到单个进程、步骤等中的实施例。对组件或元件的引用可以仅指该组件或元件的部分。例如,对集成电路的引用可以指集成电路的全部或仅部分,对块的引用可以指整个块或一个或多个子块。在本公开和权利要求中使用诸如“第一”和“第二”的术语可能仅是为了区分它们所
修饰的事物,并且可能不指示任何空间或时间顺序,除非从上下文中明显看出其他情况。在一些实施例中,对事物的引用可以指该事物的至少部分,例如,“基于”可以指“至少部分基于”等。对第一元素的引用并不意味着第二元素的存在。本文公开的原理具有独立的效用,并且可以单独实施,并且不是每个实施例都可以利用每个原理。然而,这些原理也可以以各种组合来实施,各种组合中的一些可以以协同的方式来放大单独的原理的益处。
155.上述各种细节和实施例可以根据本专利公开的发明原理进行组合,以产生附加实施例。由于本专利公开的发明原理可以在布置和细节上进行修改,而不背离发明构思,因此这种改变和修改被认为落入所附权利要求的范围内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1