本公开的实施例大体上涉及存储器子系统,且更具体地,涉及存储器子系统中的基于类别的动态存储器插槽分配。
背景技术:
存储器子系统可以是存储系统,如固态驱动器(ssd),且可包含存储数据的一或多个存储器组件。存储器组件可以例如是非易失性存储器组件和易失性存储器组件。一般来说,主机系统可以利用存储器子系统以在存储器组件处存储数据且从存储器组件检索数据。
附图说明
根据下文提供的具体实施方式和本公开的各种实施例的附图将更加充分地理解本公开。
图1说明根据本公开的一些实施例的包含存储器子系统的实例计算环境。
图2是说明根据本公开的一些实施例的插槽分配管理器的组件的框图。
图3是说明根据本公开的一些实施例的在执行根据动态更新的基于类别的分配约束来分配存储器资源的方法时,在基于类别的分配系统的组件之间的交互的交互图式。
图4和5是根据本公开的一些实施例的根据基于类别的分配约束来分配存储器资源的实例方法的流程图。
图6是其中可操作本公开的实施例的实例计算机系统的框图。
具体实施方式
本公开的方面针对于存储器子系统中的基于类别的动态存储器插槽分配。存储器子系统在下文也称为“存储器装置”。存储器子系统的实例是存储系统,例如ssd。在一些实施例中,存储器子系统是混合式存储器/存储子系统。一般来说,主机系统可利用包含一或多个存储器组件的存储器子系统。主机系统可提供数据以存储于存储器子系统处,且可请求从存储器子系统检索数据。
在许多情况下,存储器子系统的存储器组件由多个请求者共享。共享的存储器组件通常分割成多个单元,所述单元分配给指定请求者以供其自身的特定用途。举例来说,在给定存储器组件中,可分配存储器块的小片以供给定请求者使用,且仅允许所述请求者写入到所述块或更新所述块。
已设计管理此类存储器子系统内的可用资源的分配和解除分配的不同方案。在多种常规方案中,固件完全管理分配所有存储器的方式。使固件完全管理存储器的行为提供灵活性,但通常需要高中央处理单元(cpu)开销且会造成性能损失。在其它常规方案中,硬件处置资源分配以分担固件的任务。
对于硬件资源分配,多种常规方案使用位图跟踪哪些存储器资源处于使用中且哪些存储器资源可用。在这些寄存器位图实施方案中,寄存器位设置为标记资源何时处于使用中。一种典型算法是“查找第一个零(findfirstzero)”方法,其扫描寄存器位图并且接着返回第一未设寄存器,这意指不分配特定资源。识别符映射到寄存器位,且识别器供请求者用以跟踪资源的使用率。对于存储器分配,识别器用作存取存储器区的索引。由于为请求者指配用于所述存储器插槽的唯一识别符,因此其它请求者将不覆写所述存储器区。
当多个独立请求者全都试图获得存储器资源时,所述请求者的本性通常是贪婪的且尝试获得尽可能多的存储器资源。如果任由不管,那么贪婪的请求者可最终将所有的存储器资源分配给自己,从而损害其它请求者的利益。此情境可最终会严重阻碍性能或锁定系统。管理此情境的常规解决方案包含用高层级系统固件通过监测所有资源活动来直接管理此情境,这会引起额外的固件开销。另一解决方案是跨不同请求者静态分割所有可用资源;这防止贪婪的请求者占用所有资源,原因是所述贪婪的请求者仅具有固定的限额。然而,静态分割可限制性能,原因是这不允许针对当特定的贪婪客户端实际上可能需要更多资源,而其它较低优先级客户端能够以较少资源进行管理时的情境,对资源分配进行任何类型的动态实时调整。
本公开的方面通过允许跨可配置数目的“类别”分割存储器资源的存储器子系统来解决以上和其它缺陷。每一“类别”用以定义对给定请求者的资源分配约束。对给定类别的资源分配约束包含为所述类别中的请求者保证的最小数目的存储器资源,以及请求者可获得的最大数目的存储器资源。用于一类别的最小数目的资源是基于可编程最小阈值设置且用于所述类别的最大数目的资源是基于可编程最大阈值设置。如本文中所使用,术语“存储器插槽”是指固定大小的共同存储器分配单元。术语“类别请求者”是指请求给定的经定义类别内的资源的请求者。
给定类别的最小阈值设置指示定义保证可用于分配给类别请求者的最小数目的存储器插槽的最小阈值。这确保用于所述类别请求者的最小资源分配,以使得所述类别请求者可始终具有至少一些存储器插槽可用于其操作继续进行。此数目可设置为低至‘0’,意味着在最差情境中,将不存在可用于给定类别请求者的存储器插槽。最大阈值设置指示定义可分配给类别请求者的最大数目的存储器插槽的最大阈值。这限制给定类别请求者可获得的存储器插槽的数目,进而防止所述类别请求者占用所有存储器资源。跨所有类别请求者的最大阈值有可能大于总的可用存储器插槽。最大阈值表示类别请求者可需要的存储器插槽的数目,但在任何给定时间,类别请求者可具有小于最大阈值的存储器插槽,这取决于哪些存储器插槽目前分配给其它请求者。
存储器子系统的约束管理器可为多个类别中的一个指配不同系统功能以为每一系统功能配置资源分配大小范围(例如,由最小和最大阈值设置定义)。这些功能中的每一个可在单个处理器上运行或充当用于给定处理器的工作负载的部分。每一功能可请求某一数目的存储器插槽分配以完成是负责的特定任务。
插槽分配管理器监测资源分配请求并且管理定义资源分配大小范围的不同类别和阈值。硬件插槽分配管理器将不同类别最小和最大阈值设置、所用的存储器资源的总数目和可用的存储器资源的总数目全都作为输入。插槽分配管理器可预分配一或多个存储器插槽以在给定类别请求者做出资源分配请求后即刻授予所述给定类别请求者。插槽分配管理器基于用于所有类别的最小和最大阈值设置以及可用存储器资源的总数目决定是否将预分配的存储器插槽授予类别请求者。如果剩余的存储器插槽足以满足请求和剩余类别的最小阈值,那么硬件插槽分配管理器响应于请求而将预分配的存储器插槽授予类别请求者,并且接着预分配另外的存储器插槽。如果剩余的存储器插槽不足以满足请求和剩余类别的最小阈值,或如果请求大于最大阈值数目的存储器插槽,那么硬件插槽分配管理器拒绝资源分配请求。
可实时地动态改变最小和最大阈值。举例来说,如果约束管理器检测到其中给定类别可需要比当前阈值设置允许的存储器资源更多的存储器资源的情境,那么约束管理器可更新最小或最大阈值中的任一个以适应此需求。经更新阈值对插槽分配管理器即刻可见,所述插槽分配管理器会相应地作出响应。
应了解,上文所描述的存储器子系统优于常规存储器子系统之处在于:这与静态固定资源分配的方案相比允许硬件更灵活地动态优化存储器资源分配并且提高系统处理量。通常,当一功能(例如,系统写入)需要更高性能时,其自然需要比不在作用中的功能(例如,较低优先级系统垃圾收集任务)所需的资源更多的资源。举例来说,如果大量写入涌入存储器子系统,那么前端主机写入和后端写入功能两者均将需要更多存储器插槽资源来服务于写入请求。在其中每一功能仅具有固定数目的总存储器插槽的静态分配中,这可能会限制写入性能。然而,通过本文中所描述的基于类别的动态分配系统,当大量写入出现在系统中时,可为前端主机写入业务分配额外存储器插槽,并且可为后端写入业务分配额外存储器插槽。
图1说明根据本公开的一些实施例的包含存储器子系统110的实例计算环境100。存储器子系统110可包含媒体,例如存储器组件112-1到112-n。存储器组件112-1到112-n可以是易失性存储器组件、非易失性存储器组件或这类组件的组合。在一些实施例中,存储器子系统是存储系统。存储系统的实例是ssd。在一些实施例中,存储器子系统110是混合式存储器/存储装置子系统。一般来说,计算环境100可包含使用存储器子系统110的主机系统120。举例来说,主机系统120可将数据写入到存储器子系统110以及从存储器子系统110读取数据。
主机系统120可以是计算装置,例如台式计算机、膝上型计算机、网络服务器、移动装置或包含存储器和处理装置的此类计算装置。主机系统120可包含或耦合到存储器子系统110使得主机系统120可从存储器子系统110读取数据或将数据写入到存储器子系统110。主机系统120可经由物理主机接口耦合到存储器子系统110。如本文中所使用,“耦合到”通常是指组件之间的连接,其可以是间接通信连接或直接通信连接(例如不具有介入组件),无论有线还是无线,包含例如电连接、光学连接、磁性连接等连接。物理主机接口的实例包含但不限于串行高级技术附件(sata)接口、外围组件互连高速(pcie)接口、通用串行总线(usb)接口、光纤通道、串行连接的scsi(sas)等。物理主机接口可用于在主机系统120与存储器子系统110之间发射数据。当存储器子系统110通过pcie接口与主机系统120耦合时,主机系统120可另外利用非易失性存储器(nvm)高速(nvme)接口存取存储器组件112-1到112-n。物理主机接口可提供用于在存储器子系统110与主机系统120之间传送控制、地址、数据和其它信号的接口。
存储器组件112-1到112-n可以包含不同类型的非易失性存储器组件和/或易失性存储器组件的任何组合。非易失性存储器组件的实例包含与非(nand)类型快闪存储器。存储器组件112-1到112-n中的每一个可包含存储器单元的一或多个阵列,所述存储器单元如单层级单元(slc)或多层级单元(mlc)(例如,三层级单元(tlc)或四层级单元(qlc))。在一些实施例中,特定存储器组件可以包含存储器单元的slc部分和mlc部分两者。存储器单元中的每一个可存储供主机系统120使用的一或多个数据位(例如,数据块)。虽然描述如nand类型快闪存储器的非易失性存储器组件,但存储器组件112-1到112-n可基于任何其它类型的存储器,如易失性存储器。在一些实施例中,存储器组件112-1到112-n可以是(但不限于)随机存取存储器(ram)、只读存储器(rom)、动态随机存取存储器(dram)、同步动态随机存取存储器(sdram)、相变存储器(pcm)、磁随机存取存储器(mram)、或非(nor)快闪存储器、电可擦除可编程只读存储器(eeprom)以及非易失性存储器单元的交叉点阵列。非易失性存储器的交叉点阵列可结合可堆叠交叉网格化数据存取阵列而基于体电阻的改变来进行位存储。另外,与许多基于闪存的存储器对比,交叉点非易失性存储器可执行就地写入操作,其中可在不预先擦除非易失性存储器单元的情况下对非易失性存储器单元进行编程。此外,如上所述,存储器组件112-1到112-n的存储器单元可分组到存储器插槽中,所述存储器插槽可以指存储器组件的用于分配给请求者并且将用以存储数据的固定大小的共同单元。
存储器子系统控制器115(下文称为“控制器”)可与存储器组件112-1到112-n通信以执行操作,例如在存储器组件112-1到112-n处读取数据、写入数据或擦除数据,以及其它此类操作。控制器115可包含硬件,如一或多个集成电路和/或离散组件、缓冲存储器或其组合。控制器115可以是微控制器、专用逻辑电路(例如,现场可编程门阵列(fpga)、专用集成电路(asic)等)或其它合适的处理器。控制器115可包含被配置成执行存储在本地存储器119中的指令的处理器(处理装置)117。在所说明的实例中,控制器115的本地存储器119包含被配置成存储指令以用于执行控制存储器子系统110的操作(包含处置存储器子系统110与主机系统120之间的通信)的各种过程、操作、逻辑流程以及例程的嵌入式存储器。在一些实施例中,本地存储器119可包含存储存储器指针、提取的数据等的存储器寄存器。本地存储器119还可包含用于存储微码的rom。虽然图1中的实例存储器子系统110已说明为包含控制器115,但在本公开的另一实施例中,存储器子系统110可能不包含控制器115,且可改为依靠(例如由外部主机或由与存储器子系统分离的处理器或控制器提供的)外部控制。
一般来说,控制器115可从主机系统120接收命令或操作且可将所述命令或操作转换成指令或适合的命令以实现对存储器组件112-1到112-n的所需存取。控制器115可负责其它操作,例如耗损均衡操作、垃圾收集操作、错误检测和错误校正码(ecc)操作、加密操作、高速缓存操作以及在与存储器组件112-1到112-n相关联的逻辑块地址与物理块地址之间的地址转译。控制器115可另外包含主机接口电路系统以经由物理主机接口与主机系统120通信。主机接口电路系统可将从主机系统接收到的命令转换成命令指令以存取存储器组件112-1到112-n,以及将与存储器组件112-1到112-n相关联的响应转换成用于主机系统120的信息。
存储器子系统110还可包含未说明的额外电路系统或组件。在一些实施例中,存储器子系统110可包含高速缓存器或缓冲器(例如,dram)和地址电路系统(例如,行解码器和列解码器),其可从控制器115接收地址且对地址进行解码以存取存储器组件112-1到112-n。
存储器子系统110包含基于类别的分配系统113,其负责将来自存储器组件112-1到112-n的存储器资源分配给请求者。在一些实施例中,控制器115包含基于类别的分配系统113的至少一部分。举例来说,控制器115可包含处理器117(处理装置),其被配置成执行存储于本地存储器119中的指令以用于执行本文中所描述的操作。在一些实施例中,基于类别的分配系统113是主机系统120、应用程序或操作系统的部分。
基于类别的分配系统113跨可参数化数目的类别分隔存储器组件112-1到112-n的存储器资源。约束管理器123定义针对每一类别的约束可分配给每一类别的存储器插槽的数目的分配约束。对于每一类别,约束管理器123定义最小和最大阈值设置。最小阈值设置定义可用于分配给给定类别的存储器插槽的最小数目,且最大阈值设置定义可分配给所述类别的存储器插槽的最大数目。在一些情况下,约束管理器123动态地调整分配约束以考虑系统配置改变(例如,添加或移除存储器组件)、操作模式、分配请求业务模式或其它这类考虑因素。
插槽分配管理器125接收来自请求者的存储器插槽分配请求并且基于分配约束确定是否准予所述请求。插槽分配管理器125可为请求者提供请求接口,借以请求者可提交存储器资源请求并且接收对基于分配约束是准予还是拒绝请求的指示。为提高处理量,插槽分配管理器125可为每一类别预分配一或多个存储器插槽,并且在准予给定类别请求者的存储器插槽分配请求时,插槽分配管理器125可将预分配的存储器插槽与满足请求所需的额外存储器插槽一起授予类别请求者。下文描述关于基于类别的分配系统113的操作的另外细节。
图2是说明根据本公开的一些实施例的插槽分配管理器125的组件的框图。如所示出,插槽分配管理器125包括插槽预分配器202和插槽识别符(id)处置器204。插槽预分配器202包含插槽读取请求者206-0到206-n和预分配插槽id存储组件208-0到208-n。插槽读取请求者206-0到206-n中的每一个读取对特定类别插槽的请求。插槽读取请求者206-0到206-n中的每一个包含可由系统的cpu读取的存储器映射寄存器。发出请求的cpu对寄存器的读取映射到特定类别插槽读取请求。发出的读取请求返回来自预分配类别插槽id存储组件208-0到208-n中的对应一个的一或多个有效预分配插槽id。
预分配类别插槽id存储组件208-0到208-n存储用于每一类别(类别0到类别n)的预分配插槽的id。预分配类别插槽id存储组件208-0到208-n中的每一个包括触发器,其用以存储插槽id以及指示存储的插槽id是否有效的有效位。可为每一类别存储两个或更多个预分配插槽。在将有效插槽返回到插槽读取请求者206-0到206-n时,清除有效位。
预分配类别插槽id存储组件208-0到208-n中的每一个使用传送到插槽管理器有限状态机(fsm)210上的“清空”信号。清空信号指示不存在更多可用的有效插槽(例如,因为有效插槽已被插槽读取请求者206-0到206-n中的一个读出),这用信号指示插槽管理器fsm210分配更多类别插槽(如果可能的话)。在预分配新插槽时,将所述新插槽作为“新插槽id”进行发送并且存储在预分配类别插槽id存储组件208-0到208-n中的一个内。
插槽预分配器202还包含插槽解除分配器请求者212,其负责向插槽管理器fsm210做出插槽解除分配请求。解除分配器请求者212发出将被插槽管理器fsm210解除分配的插槽的id。将这些解除分配的插槽释放回到可用插槽池中。
插槽管理器fsm210管理插槽回到预分配类别插槽id存储组件208-0到208-n的预分配。插槽管理器fsm210为插槽id处置器204提供接口并且管理预分配和解除分配两者。插槽管理器fsm210接收来自类别分配器状态控制214的输入以确定是否可预分配用于特定类别的插槽或是否已达到最大限度。
插槽管理器fsm210包含跟踪已分配每一类别的多少个插槽的计数器。这些计数器供类别分配器状态控制214用以确定应预分配额外类别插槽。
插槽分配管理器125还包括配置寄存器214-0到214-n。配置寄存器214-0到214-n存储对每一类别的分配约束。也就是说,配置寄存器214-0到214-n中的每一个存储用于单个类别的最小阈值设置和最大阈值设置。类别分配器状态控制214使用分配约束确定是否可预分配类别插槽或是否已达到最大阈值。
类别分配器状态控制214接收对每一类别的分配约束作为输入并且接收每类别的经分配插槽的当前计数。类别分配器状态控制214使用此信息确定插槽管理器fsm210是否可预分配用于特定类别的插槽。基于此确定的结果,类别分配器状态控制214将“类别可分配”信号提供给插槽管理器fsm210以指示插槽预分配器202是否可为特定类别预分配更多插槽或是否已达到最大阈值。
插槽id处置器204管理寄存器位图216以跟踪哪些存储器资源处于使用中且哪些存储器资源可用。插槽id处置器204包括查找第一可用扫描组件218、第一可用插槽id组件220和设置/清除位图组件222。寄存器位图216跟踪并存储所有可用插槽id。每插槽id指配一个寄存器位。存在‘处于使用中”位以指示插槽是否使用。寄存器位图216包含用于每个位的类别类型寄存器,用以指示所述特定插槽指配给哪个类别。类别类型寄存器跟踪每类别指配多少个总插槽。
查找第一可用扫描组件218扫描寄存器位图216以查找将分配的第一可用插槽。通过寄存器位图216中的第一零“处于使用中”位字段来识别分配的第一可用插槽。
第一可用插槽id组件220存储从查找第一可用扫描组件218返回的第一可用插槽id并且将可用插槽id作为将预分配的下一自由插槽提供到插槽管理器fsm210。
设置/清除位图组件222更新寄存器位图216。设置/清除位图组件222设置“处于使用中”位并且更新经分配插槽的类别类型。设置/清除位图组件222还识别并清除用于将解除分配的插槽的“处于使用中”位。
图3是说明根据本公开的一些实施例的在执行根据动态更新的基于类别的分配约束来分配存储器资源的方法300时,在约束管理器123与插槽分配管理器125之间的交互的交互图式。方法300可通过处理逻辑执行,所述处理逻辑可包含硬件(例如,处理装置、电路系统、专用逻辑、可编程逻辑、微码、装置的硬件、集成电路等)、软件(例如,在处理装置上运行或执行的指令),或其组合。在一些实施例中,示出为由约束管理器123执行的方法300的操作可由固件(例如,由处理器117执行)执行,且示出为由插槽分配管理器125执行的方法300的操作可由硬件执行。虽然以特定顺序或次序来展示,但是除非另有指定,否则可修改过程的次序。因此,应理解,所说明实施例仅为实例,且所说明过程可以不同次序进行,且一些过程可并行地进行。另外,在各个实施例中可以省略一或多个过程。因此,在每个实施例中并不需要所有过程。其它过程流也是可能的。
在方法300的上下文中,多个请求者可向基于类别的分配系统113提交资源分配请求。每一请求者可对应于存储器子系统110或主机系统120的组件或过程。在操作305处,约束管理器123将每一请求者指配给多个类别中的一个。约束管理器123可例如基于请求者或外部输入的功能或类型,将给定请求者指配给特定类别。
作为实例,在一些实施方案中,存储器子系统控制器115可为使用多个处理器功能管理数据流的ssd控制器。在此实例中,每一处理器功能可需要存储器资源用于以下功能:前端写入数据业务;前端读取数据业务;后端写入数据业务;后端读取数据业务;和系统垃圾收集。这些功能中的每一个可在单个处理器上运行或充当用于给定处理器的工作负载的部分,但每一功能需要某一数目的存储器插槽分配。约束管理器123可如下将这些功能中的每一个指配给不同类别:将前端写入数据业务指配给“类别1”,将前端读取数据业务指配给“类别2”,将后端写入数据业务指配给“类别3”,将后端读取数据业务指配给“类别4”,且将系统垃圾收集指配给“类别5”。
在操作310处,约束管理器123定义对每一类别的分配约束。也就是说,约束管理器123定义用于每一类别的最小和最大阈值设置。约束管理器123可基于例如默认设置、外部输入、资源请求业务分布、操作模式(例如,主机系统120或存储器子系统110的操作模式)或基于监测从请求者接收的请求而确定的请求者的所学习行为,定义用于每一类别的最小和最大阈值设置。约束管理器123可配置配置寄存器表示针对每一类别定义的分配约束。
依据以上实例,存储器组件112a-112n的存储器资源可分割成将由5个类别请求者共享的1000个存储器插槽。因此,约束管理器123可定义:用于类别1的最多350个插槽和最少50个插槽;用于类别2的最多400个插槽和最少50个插槽;用于类别3的最多350个插槽和最少50个插槽;用于类别4的最多400个插槽和最少50个插槽;和用于类别5的最多200个插槽和最少50个插槽。
基于上述实例分配约束,前端主机写入业务可消耗1000个插槽中至多350个但不会超过350个插槽。这设置了上限以使得前端主机业务不能够消耗全部1000个插槽并且不能够阻止任何其它功能因缺少可用资源而无法运行。后端快闪写入业务也可消耗至多350个插槽。此意味着跨前端和后端区段的写入操作可消耗总计700个插槽。分配的每功能50个最小数目的插槽保证每一功能始终具有一些可用资源并且将始终能够继续进行。在此实例中,如果写入业务最初消耗700个插槽,那么剩余300个插槽用于主机和后端读取的剩余读取业务以及用于系统垃圾收集。50个插槽的最小阈值设置保证那些功能将始终具有至少一些插槽以便工作继续。如果已为写入功能分配了所有700个插槽,且读取操作正在起始,那么即使读取可能尝试在前端和后端请求中请求至多700个插槽,将仅剩下300个可用插槽供使用。然而,由于系统垃圾收集具有最少50个插槽,因此将预留50个插槽供垃圾收集功能使用,这意味着可仅为跨前端和后端请求者的系统读取分配剩余300个插槽中的最多250个插槽。
在操作315处,插槽分配管理器125接收来自多个请求者中的一个的第一存储器插槽分配请求。第一存储器插槽分配请求规定第一数目个请求的存储器插槽。在操作320处,插槽分配管理器125存取分配约束(例如,来自配置寄存器216-0到216-n中的对应一个)。在操作325处,插槽分配管理器125基于分配约束确定是否准予请求者的插槽分配请求。特定来说,插槽分配管理器125基于可用资源的剩余数目确定是否准予插槽分配请求并且确定第一数目个请求的存储器插槽的分配是否满足分配约束。
在操作330处,约束管理器123检测引发对改变一或多个存储器分配约束的需求的触发事件。触发事件可包含请求业务改变、操作模式(例如,主机系统120或存储器子系统115的操作模式)改变、系统配置改变,或外部输入(例如,用户或系统命令)。在操作335处,约束管理器123响应于检测到触发事件而动态地更新一或多个存储器分配约束。更具体地,插槽分配管理器125可增加或减小用于一或多个类别的一或多个最小或最大阈值设置。插槽分配管理器125配置配置寄存器216-0到216-n中的一或多个以反映经更新分配约束。
依据以上实例,约束管理器123可检测将服务的极大数目的读取。作为响应,约束管理器123可将用于类别2(前端主机读取业务)和类别4(后端快闪读取业务)的最大阈值增加到500个插槽,而将用于类别1、3和5的最小阈值减小到0。这将允许所有存储器插槽可用于读取业务(类别2和4),不过这可引起在某一时间段内没有存储器插槽可用于写入业务(类别1和3)和垃圾收集(类别5)。
在操作340处,插槽分配管理器125接收来自多个请求者中的一个的第二存储器插槽分配请求。第二存储器插槽分配请求规定第二数目个请求的存储器插槽。在操作345处,插槽分配管理器125存取经更新分配约束(例如,来自配置寄存器216-0到216-n中的一个)。在操作350处,插槽分配管理器125基于经更新分配约束确定是否准予请求者的插槽分配请求。特定来说,插槽分配管理器125基于可用资源的剩余数目确定是否准予插槽分配请求并且确定第二数目个请求的存储器插槽的分配是否满足经更新分配约束。
图4和5是根据本公开的一些实施例的根据基于类别的分配约束来分配存储器资源的实例方法400的流程图。方法400可通过处理逻辑执行,所述处理逻辑可包含硬件(例如,处理装置、电路系统、专用逻辑、可编程逻辑、微码、装置的硬件、集成电路等)、软件(例如,在处理装置上运行或执行的指令),或其组合。在一些实施例中,方法300是由图1的存储器基于类别的分配系统113执行。虽然以特定顺序或次序来展示,但是除非另有指定,否则可修改过程的次序。因此,应理解,所说明实施例仅为实例,且所说明过程可以不同次序进行,且一些过程可并行地进行。另外,在各个实施例中可以省略一或多个过程。因此,在每个实施例中并不需要所有过程。其它过程流也是可能的。
在操作405处,处理装置预分配(例如,预留)一或多个存储器插槽供多个类别中的一个使用。在操作410处,处理装置接收来自属于类别的请求者的存储器插槽分配请求。存储器插槽分配请求规定请求的存储器插槽数目。
在操作415处,处理装置存取当前分配约束(例如,来自配置寄存器216-0到216-n中的一个)。分配约束包含用于每一类别的最小和最大阈值设置,所述最小和最大阈值设置共同决定可分配给每一类别的存储器插槽的数目。更具体地说,如上所述,对于给定类别,最小阈值设置定义将保持可用于分配给类别的存储器插槽的最小数目,且最大阈值设置定义将分配给类别的存储器插槽的最大数目。
在操作420处,处理装置确定所请求的数目的存储器插槽是否可用(例如,未经分配)。如果在操作420处,处理装置确定可用于满足所述请求的存储器插槽的数目不足(例如,剩余可用存储器插槽数目小于所请求的存储器插槽数目),那么在操作425处,处理装置拒绝存储器插槽分配请求。在这些情况下,请求者可继续提交存储器请求分配请求,所述存储器请求分配请求将被拒绝直到另外的资源变得可用(例如,这是由于一或多个存储器插槽被解除分配)为止。
如果在操作420处,处理装置确定存在可用于准予所请求的数目的存储器插槽的足够数目个存储器插槽(例如,剩余的可用存储器插槽数目大于或等于所请求的存储器插槽数目),那么方法400持续到操作430,其中处理装置确定所请求的数目的存储器插槽的分配是否满足分配约束。下文参考图5论述关于所请求的数目的存储器插槽的分配是否满足分配约束的确定的另外细节。
如果在操作430处,处理装置确定所请求的数目的存储器插槽的分配将造成违反一或多个分配约束(例如,所请求的数目的存储器插槽的分配将引起所分配的存储器插槽数目超过类别的最大阈值),那么在操作425处,处理装置拒绝所述请求。
另一方面,如果在操作430处,处理装置确定所请求的数目的存储器插槽的分配将引起满足分配约束,那么在操作435处,处理装置准予存储器分配请求。在准予存储器分配请求时,处理装置将预分配的存储器插槽授予请求者。如果所请求的存储器插槽数目超过预分配的存储器插槽数目,那么处理装置可将一或多个额外存储器插槽分配给所述请求以实现所述请求。
在操作440处,处理装置确定分配给类别的存储器单元的数目是否超过类别的最大阈值。如果在操作440处,处理装置确定尚未达到最大阈值(例如,分配给类别的存储器单元的数目不超过类别的最大阈值),那么在操作445处,处理装置预分配用于类别的一或多个额外存储器插槽。如果在操作440处,处理装置确定分配给类别的存储器单元的数目超过类别的最大阈值,那么方法400转到操作450,其中处理装置在预分配用于类别的额外存储器单元之前等待从类别解除分配存储器插槽。
如图5中所示,在一些实施例中,方法400可包含操作431和432。与一些实施例一致,操作431和432可作为操作430的部分(例如,子例程)执行,其中处理装置确定所请求的数目的存储器单元的分配是否满足分配约束。
在操作431处,处理装置确定所请求的数目的存储器插槽的分配是否引起分配给类别的存储器插槽的数目超过类别的最大阈值。如果所请求的数目的存储器插槽的分配引起分配给类别的存储器插槽的数目超过类别的最大阈值,那么违反类别的最大阈值约束,且因此,所请求的数目的存储器单元的分配不满足分配约束。在这些情况下,如上文所描述,处理装置拒绝插槽分配请求(操作425)。
另一方面,如果为所述类别的所请求的数目的存储器插槽的分配不致使分配给类别的存储器插槽的数目超过类别的最大阈值,那么至少满足类别的最大阈值约束。
在操作432处,处理装置确定所请求的数目的插槽的分配是否引起所有其它类别的最小阈值的满足。也就是说,处理装置确定在分配所请求的数目的存储器插槽之后剩余的可用存储器插槽的数目是否大于或等于所有剩余类别的最小阈值的总和。如果是请求的数目的插槽的分配不满足所有其它类别的最小阈值(例如,因为在分配所请求的数目的插槽之后剩余的可用存储器插槽的数目小于所有剩余类别的最小阈值的总和),那么处理装置确定所请求的数目的插槽的分配不满足分配约束。如上所述,在这些情况下,处理装置拒绝存储器插槽分配请求(操作425)。
另一方面,如果所请求的数目的插槽的分配确实满足所有其它类别的最小阈值(例如,因为在分配所请求的数目的插槽之后剩余的可用存储器插槽的数目大于或等于所有剩余类别的最小阈值的总和),那么处理装置确定所请求的数目的插槽的分配满足分配约束。如上所述,在这些情况下,处理装置准予插槽分配请求(操作435)。
图6说明计算机系统600的实例机器,可在其内执行用于使得机器进行本文中所论述的方法中的任何一或多种的指令集。在一些实施例中,计算机系统600可对应于主机系统(例如,图1的主机系统120),其包含、耦合到或利用存储器子系统(例如,图1的存储器子系统110)或可用于进行控制器的操作(例如,以执行操作系统从而进行对应于图1的基于类别的分配系统113的操作)。在替代实施例中,机器可连接(例如,联网)到局域网(lan)、内联网、外联网和/或因特网中的其它机器。机器可作为对等(或分布式)网络环境中的对等机器或作为云计算基础设施或环境中的服务器或客户端机器而以客户端-服务器网络环境中的服务器或客户端机器的容量进行操作。
机器可以是个人计算机(pc)、平板pc、机顶盒(stb)、个人数字助理(pda)、蜂巢式电话、网络器具、服务器、网络路由器、交换机或桥接器,或能够(依序或以其它方式)执行指定将由所述机器采取的动作的指令集的任何机器。另外,尽管说明单个机器,但还应认为术语“机器”包含机器的任何集合,所述集合单独地或共同地执行一(或多)个指令集以进行本文中所论述的方法中的任何一或多种。
实例计算机系统600包含处理装置602、主存储器604(例如,rom、快闪存储器、dram,例如sdram或rambusdram(rdram)等)、静态存储器606(例如,快闪存储器、静态随机存取存储器(sram)等),以及数据存储系统618,其经由总线630彼此通信。
处理装置602表示一或多个通用处理装置,例如微处理器、中央处理单元等。更特定来说,处理装置可以是复杂指令集计算(cisc)微处理器、精简指令集计算(risc)微处理器、超长指令字(vliw)微处理器或实施其它指令集的处理器,或实施指令集的组合的处理器。处理装置602也可以是一或多个专用处理装置,例如asic、fpga、数字信号处理器(dsp)、网络处理器等等。处理装置602被配置成执行指令626以用于执行本文中所论述的操作和步骤。计算机系统600可另外包含网络接口装置608以在网络620上通信。
数据存储系统618可包含机器可读存储媒体624(也称为计算机可读媒体),其上存储有一或多个指令集626或体现本文中所描述的方法或功能中的任一或多种的软件。指令626还可在由计算机系统600执行期间完全或至少部分地驻存在主存储器604内和/或处理装置602内,主存储器604和处理装置602也构成机器可读存储媒体。机器可读存储媒体624、数据存储系统618和/或主存储器604可对应于图1的存储器子系统110。
在一个实施例中,指令626包含用于实施对应于存储器分配系统(例如,图1的基于类别的分配系统113)的功能性的指令。尽管在实例实施例中机器可读存储媒体624展示为单个媒体,但是应认为术语“机器可读存储媒体”包含存储一或多组指令的单个媒体或多个媒体。术语“机器可读存储媒体”还应被认为包含能够存储或编码供机器执行的指令集合且致使机器执行本公开的方法中的任何一种或多种的任何媒体。术语“机器可读存储媒体”因此应被视为包含但不限于固态存储器、光学媒体和磁性媒体。
已在针对计算机存储器内的数据位的操作的算法和符号表示方面呈现了先前详细描述的一些部分。这些算法描述和表示是数据处理领域的技术人员用以将其工作的主旨最有效地传达给所属领域的其他技术人员的方式。在本文中,且一般将算法构想为产生所要结果的操作的自洽序列。操作是要求对物理量进行物理操纵的操作。通常(但未必),这些量采用能够存储、组合、比较以及以其它方式操纵的电或磁信号的形式。已经证实,主要出于常用的原因,将这些信号称为位、值、元素、符号、字符、项、编号等等有时是便利的。
然而,应牢记,所有这些和类似术语应与适当物理量相关联,且仅是应用于这些量的方便标记。本公开可以指操控和变换计算机系统的寄存器和存储器内的表示为物理(电子)数量的数据为计算机系统存储器或寄存器或其它这类信息存储系统内的类似地表示为物理量的其它数据的计算机系统或类似电子计算装置的动作和过程。
本公开还涉及用于执行本文中的操作的设备。这一设备可以出于所需目的而专门构造,或其可包含通过存储在计算机中的计算机程序选择性地激活或重新配置的通用计算机。此类计算机程序可存储在计算机可读存储媒体中,例如但不限于任何类型的盘(包含软盘、光盘、cd-rom和磁性光盘)、rom、ram、eprom、eeprom、磁卡或光卡,或适合于存储电子指令的任何类型的媒体,其各自耦合到计算机系统总线。
本文中呈现的算法和显示器在本质上并不与任何特定计算机或其它设备相关。各种通用系统可以与根据本文中的教示的程序一起使用,或可以证明构造用以执行所述方法更加专用的设备是方便的。将如上文描述中所阐述的那样呈现用于各种这些系统的结构。另外,未参考任何特定编程语言来描述本公开。应了解,可使用各种编程语言来实施如本文中所描述的本公开的教示内容。
本公开可提供为计算机程序产品或软件,其可包含在其上存储有可用于编程计算机系统(或其它电子装置)以进行根据本公开的过程的指令的机器可读媒体。机器可读媒体包含用于以机器(例如,计算机)可读的形式存储信息的任何机构。在一些实施例中,机器可读(例如计算机可读)媒体包含机器(例如计算机)可读存储媒体,例如rom、ram、磁盘存储媒体、光学存储媒体、闪存存储器组件等。
在前述说明书中,本公开的实施例已经参照其特定实例实施例进行描述。将显而易见的是,可在不脱离如所附权利要求书中阐述的本公开的实施例的更广精神和范围的情况下对本公开进行各种修改。因此,应在说明性意义上而非限制性意义上看待说明书及图式。
实例
实例1是一种系统,其包括:多个存储器组件,其分割成存储器插槽:配置寄存器,其存储对多个类别的资源分配约束,所述资源分配约束包含所述多个类别中的每一类别的第一阈值和第二阈值,每一第一阈值定义可用于分配给所述多个类别中的类别的所述存储器插槽的最小数目,每一第二阈值定义将分配给所述类别的存储器插槽的最大数目;和处理装置,其以操作方式与所述多个存储器组件耦合以执行包括以下各项的操作:从指配给特定类别的请求者接收存储器插槽分配请求,所述存储器插槽分配请求规定用于分配给所述请求者的存储器插槽的所请求数目;确定所述所请求的数目的存储器插槽为所述请求者的分配引起对所述多个类别的所述资源分配约束的满足;和基于确定所述所请求的数目的存储器插槽为所述请求者的分配引起对所述多个类别的所述资源分配约束的满足而准予所述存储器插槽分配请求,所述准予所述存储器插槽分配请求包含将来自所述多个存储器组件中的至少一个存储器组件的所述所请求的数目的存储器插槽分配给所述请求者。
在实例2中,实例1的处理装置任选地进一步在接收到所述存储器插槽分配请求之前预分配用于所述特定类别的存储器插槽;且实例1的所述准予所述存储器插槽分配请求任选地包括将所述预分配的存储器插槽授予所述请求者。
在实例3中,实例1和2中的任一个的所述准予所述存储器插槽分配请求任选地另外包括:基于所述所请求的存储器单元数目,将至少一个额外存储器插槽分配给所述请求者。
在实例4中,实例1到3中的任一个的标的物任选地包括确定用于所述特定类别的经分配存储器插槽数目小于所述类别的所述第二阈值;和基于确定用于所述特定类别的所述经分配存储器插槽数目小于对应于所述类别的所述第二阈值,在准予所述存储器插槽分配请求之后预分配用于所述特定类别的额外存储器插槽。
在实例5中,实例1到4中的任一个的标的物任选地包括进一步基于所述所请求的数目的存储器插槽是否可用来确定是否准予所述存储器分配请求。
在实例6中,所述确定所述所请求的数目的存储器插槽为所述请求者的分配引起实例1到5中的任一个的所述资源分配约束的满足任选地包括:确定所述所请求的数目的存储器插槽为所述请求者的分配是否引起所述多个类别中的剩余类别的第一阈值的满足。
在实例7中,实例1到6中的任一个的标的物任选地包括确定所述所请求的数目的存储器插槽为所述请求者的分配是否引起所述多个类别中的剩余类别的第一阈值的满足。
在实例8中,所述确定所述所请求的数目的存储器插槽为所述请求者的分配是否引起实例1到7中的任一个的所述多个类别中的所述剩余类别的所述第一阈值的满足包括:确定在所述所请求的数目的存储器插槽为所述请求者的分配之后剩余的可用存储器插槽数目是否大于或等于所有剩余类别的第一阈值的总和。
在实例9中,所述存储器插槽分配请求是第一存储器插槽分配请求;所述请求者是第一请求者;所述资源分配约束是初始资源分配约束;且实例1到8中的任一个的标的物任选地包括:接收来自第二请求者的第二存储器插槽分配请求;存取经更新资源分配约束,所述经更新资源分配约束包含基于检测到触发事件修改所述初始资源分配约束中的至少一个;和基于所述经更新资源分配约束确定是否准予所述第二存储器插槽分配请求。
在实例10中,实例9的触发事件任选地包括外部输入、操作模式改变、系统配置改变或业务分布改变中的至少一个。
在实例11中,实例9和10中的任一个的所述初始资源分配约束中的至少一个的所述修改任选地包括以下中的至少一个:一或多个第二阈值的增加或减小;或一或多个第一阈值的增加或减小。
实例12是一种方法,其包括:从配置寄存器存取对多个类别的资源分配约束,所述资源分配约束包含所述多个类别中的每一类别的第一阈值和第二阈值,每一第一阈值定义可用于分配给所述多个类别中的类别的存储器插槽的最小数目,每一第二阈值定义将分配给所述多个类别中的所述类别的存储器插槽的最大数目;从指配给特定类别的请求者接收存储器插槽分配请求,所述存储器插槽分配请求规定用于分配给所述请求者的存储器插槽的所请求数目;确定所述所请求的数目的存储器插槽为所述请求者的分配引起对所述多个类别的所述资源分配约束的满足;和基于确定所述所请求的数目的存储器插槽为所述请求者的分配引起对所述多个类别的所述资源分配约束的满足而准予所述存储器插槽分配请求,所述准予所述存储器插槽分配请求包含将来自所述多个存储器组件中的至少一个存储器组件的所述所请求的数目的存储器插槽分配给所述请求者。
在实例13中,实例12的标的物任选地包括:在接收到所述存储器插槽分配请求之前预分配用于所述特定类别的存储器插槽;且所述准予所述存储器插槽分配请求包含将所述预分配的存储器插槽授予所述请求者。
在实例14中,实例12和13中的任一个的标的物任选地包括确定用于所述特定类别的经分配存储器插槽数目小于所述类别的所述第二阈值;和基于确定用于所述特定类别的所述经分配存储器插槽数目小于对应于所述类别的所述第二阈值,在准予所述存储器插槽分配请求之后预分配用于所述特定类别的额外存储器插槽。
在实例15中,实例12到14中的任一个的标的物任选地包括确定所述所请求的数目的存储器插槽为所述请求者的分配是否引起分配给所述特定类别的存储器插槽数目超过所述特定类别的所述第二阈值。
在实例16中,实例12到15中的任一个的标的物任选地包括确定在所述所请求的数目的存储器插槽为所述请求者的分配之后剩余的可用存储器插槽数目是否大于或等于所有剩余类别的第一阈值的总和。
在实例17中,实例12到16中的任一个的标的物任选地包括检测触发事件;和响应于检测到所述触发事件,动态地修改一或多个资源分配约束以产生经更新资源分配约束。
在实例18中,实例12到17中的任一个的标的物任选地包括增加或减小一或多个第二阈值;或增加或减小一或多个第一阈值。
在实例19中,所述存储器插槽分配请求是第一存储器插槽分配请求;所述请求者是第一请求者;且实例12到18中的任一个的标的物任选地包括:接收来自第二请求者的第二存储器插槽分配请求;和基于所述经更新资源分配约束确定是否准予所述第二存储器插槽分配请求。
实例20是一种包括指令的非暂时性计算机可读存储媒体,所述指令当由处理装置执行时致使所述处理装置执行包括以下各项的操作:从配置寄存器存取对多个类别的资源分配约束,所述资源分配约束包含所述多个类别中的每一类别的第一阈值和第二阈值,每一最小阈值定义可用于分配给所述多个类别中的类别的存储器插槽的最小数目,每一第二阈值定义将分配给所述多个类别中的所述类别的存储器插槽的最大数目;预分配用于特定类别的存储器插槽;从指配给所述特定类别的请求者接收存储器插槽分配请求,所述存储器插槽分配请求规定用于分配给所述请求者的存储器插槽的所请求数目;确定所述所请求的数目的存储器插槽为所述请求者的分配引起对所述多个类别的所述资源分配约束的满足;和基于确定所述所请求的数目的存储器插槽为所述请求者的分配引起对所述多个类别的所述资源分配约束的满足而准予所述存储器插槽分配请求,所述准予所述存储器插槽分配请求包含将所述预分配的存储器插槽授予所述请求者。