存储器系统架构的制作方法

文档序号:13950614阅读:181来源:国知局
存储器系统架构的制作方法

本申请要求2015年5月27日提交的美国临时专利申请号62/166,993的优先权,其整体公开内容通过引用的方式并入本文中。



背景技术:

高速缓存(cache)和进行高速缓存(caching)的发展近年来已大大增加,并且从超低功率芯片到高端微控制器的几乎各个现代cpu内核都使用高速缓存,或者至少提供它们来作为选项。甚至在超低功率设计中,高速缓存的性能优势也太大而无法忽视。cpu高速缓存是存储cpu接下来最可能需要的信息的存储器的小池(smallpools)。高速缓存的目标是为了确保cpu开始寻找它将需要的数据的下一个比特的时候cpu已经使所述将需要的数据的下一个比特加载到高速缓存中。



技术实现要素:

本发明内容以简化形式引入构思的选择以便提供对本公开的一些方面的基本理解。本发明内容不是对本公开的广泛概述,并且不旨在标识本公开的关键或重要要素或者划定本公开的范围。本发明内容仅仅将本公开的一些构思作为在下面提供的具体实施方式的前言而呈现。

本公开一般地涉及计算机存储器系统。更具体地,本公开的各方面涉及存储器高速缓存操作的高效和有效管理。

本公开的一个实施例涉及如下方法,其包括:接收对系统存储器高速缓存的访问请求;确定为与所述访问请求相关联的高速缓存行所指定的策略标识符,其中所述策略标识符对应于用于控制所述系统存储器高速缓存的操作的至少一个策略;以及基于与所述策略标识符相对应的所述至少一个策略来对所述系统存储器高速缓存执行控制操作。

在另一实施例中,所述控制操作包括高速缓存行过滤、高速缓存行分配和高速缓存行逐出中的一个。

在另一实施例中,所述访问请求包括与所述访问请求源自于的硬件装置相关联的策略标识符,并且所述方法还包括:确定包括在所述访问请求中的所述策略标识符与为与所述访问请求相关联的所述高速缓存行所指定的所述策略标识符匹配。

在另一实施例中,所述方法中的所述控制操作包括高速缓存行过滤,并且所述高速缓存行过滤包括:标识所述高速缓存行具有低于阈值的利用水平;以及防止所标识的高速缓存行被随后加载到所述系统存储器高速缓存中。

在另一实施例中,所述方法中的所述高速缓存行过滤还包括将所标识的高速缓存行添加到被防止加载到所述系统存储器高速缓存中的高速缓存行的集合。

在又一个实施例中,在所述方法中标识所述高速缓存行具有低于阈值的利用水平包括:将所述高速缓存行被访问的次数的访问计数与和所述高速缓存行过滤的策略相关联的阈值计数相比较;以及响应于所述访问计数小于所述阈值计数,将所述高速缓存行添加到被防止加载到所述系统存储器高速缓存中的所述高速缓存行的集合。

在再一个实施例中,在所述方法中标识所述高速缓存行具有低于阈值的利用水平包括:检查所述高速缓存行的子块的单独的被访问比特以确定在所述高速缓存行内被访问的子块的数目;将所述被访问的子块的数目与和所述高速缓存行过滤的策略相关联的阈值相比较;以及响应于所述被访问的子块的数目小于所述阈值,将所述高速缓存行添加到被防止加载到所述系统存储器高速缓存中的所述高速缓存行的集合。

在又一个实施例中,所述方法中的所述控制操作包括高速缓存行过滤,并且所述高速缓存行过滤包括:基于所述一个或多个高速缓存行具有低于阈值的利用水平,使用布隆过滤器滤出所述系统存储器高速缓存的一个或多个行;以及将滤出的高速缓存行添加到被防止加载到所述系统存储器高速缓存中的所述高速缓存行的集合。

本公开的另一实施例涉及如下的系统,所述系统包括:系统高速缓存存储器;系统存储器;耦合到所述系统存储器和所述系统高速缓存存储器的至少一个处理器;以及与所述至少一个处理器相关联的非暂时性计算机可读的介质,所述非暂时性介质具有存储在其上的指令,所述指令当由所述至少一个处理器执行时使所述至少一个处理器:接收对所述系统高速缓存存储器的访问请求;确定为与所述访问请求相关联的高速缓存行所指定的策略标识符,其中所述策略标识符对应于用于控制所述系统高速缓存存储器的操作的至少一个策略;并且基于与所述策略标识符相对应的所述至少一个策略来对所述系统高速缓存存储器执行控制操作。

在另一实施例中,还使得所述系统中的所述至少一个处理器执行作为所述控制操作的高速缓存行过滤、高速缓存行分配和高速缓存行逐出中的一个。

在另一实施例中,所述访问请求包括与所述访问请求源自于的硬件装置相关联的策略标识符,并且还使得所述系统中的所述至少一个处理器:确定包括在所述访问请求中的所述策略标识符与为与所述访问请求相关联的所述高速缓存行所指定的所述策略标识符匹配。

在另一实施例中,所述控制操作包括高速缓存行过滤,并且还使得所述至少一个处理器:标识所述高速缓存行具有低于阈值的利用水平;并且防止所标识的高速缓存行被随后加载到所述系统高速缓存存储器中。

在另一实施例中,还使得所述系统中的所述至少一个处理器:将所标识的高速缓存行添加到被防止加载到所述系统高速缓存存储器中的高速缓存行的集合。

在又一个实施例中,还使得所述系统中的所述至少一个处理器:将所述高速缓存行被访问的次数的访问计数与和所述高速缓存行过滤的策略相关联的阈值计数相比较;并且响应于所述访问计数小于所述阈值计数,将所述高速缓存行添加到被防止加载到所述系统高速缓存存储器中的所述高速缓存行的集合。

在再一个实施例中,还使得所述系统中的所述至少一个处理器:检查所述高速缓存行的子块的单独的被访问比特以确定在所述高速缓存行内被访问的子块的数目;将所述被访问的子块的数目与和所述高速缓存行过滤的策略相关联的阈值相比较;并且响应于所述被访问的子块的数目小于所述阈值,将所述高速缓存行添加到被防止加载到所述系统高速缓存存储器中的所述高速缓存行的集合。

在再一个实施例中,所述控制操作包括高速缓存行过滤,并且还使得所述至少一个处理器:基于所述一个或多个高速缓存行具有低于阈值的利用水平,使用布隆过滤器滤出所述系统高速缓存存储器的一个或多个行;并且将滤出的高速缓存行添加到被防止加载到所述系统高速缓存存储器中的所述高速缓存行的集合。

在一个或多个其它实施例中,本公开的方法和系统可以可选地包括以下附加特征中的一个或多个:所述控制操作是高速缓存行过滤、高速缓存行分配和高速缓存行逐出中的一个;所述策略标识符为包含用于控制所述系统存储器高速缓存的操作的多个策略的表编索引;所述策略标识符使用物理地址比特被包括在所述访问请求中;所述策略标识符与存储器管理单元或转换后备缓冲器中的一个或多个页面相关联;所述策略标识符与所述访问请求源自于的一个或多个计算引擎相关联;为所述高速缓存行所指定的所述策略标识符是多个策略标识符中的一个,并且所述系统存储器高速缓存中的各个高速缓存行指定所述多个策略标识符中的一个策略标识符;和/或为各个高速缓存行所指定的所述策略标识符基于与对所述高速缓存行的最近访问请求相关联的源。

应该注意的是,本文中所公开的处理器和存储器系统中的一些或全部的实施例也可以被配置成实施上面所公开的方法实施例中的一些或全部方法实施例。此外,上面所公开的方法中的一些或全部的实施例也可以被表示为在暂时性或非暂时性处理器可读的存储介质(诸如光学或磁存储器)上具体实现的指令或者表示为经由诸如因特网或电话连接的通信网络提供给处理器或数据处理装置的传播信号。

另外本公开的方法和系统的适用性的范围将根据在下面给出的具体实施方式变得显而易见。然而,应该理解的是,具体实施方式和特定示例在指示方法和系统的实施方式的同时,仅通过说明来给出,这是因为根据所述具体实施方式在本文中所公开的构思的主旨和范围内的各种改变和修改对于本领域的技术人员而言将变得显而易见。

附图说明

根据结合所附权利要求和附图对以下详细描述的研究,本公开的这些及其它目的、特征和特性对于本领域的技术人员而言将变得更显而易见,所附权利要求和附图及以下详细描述形成了本说明书。在附图中:

图1是说明根据本文中所描述的一个或多个实施例的使用策略标识符来控制存储器高速缓存操作的示例性高级操作的框图。

图2是说明根据本文中所描述的一个或多个实施例的用于基于策略标识符来控制系统存储器高速缓存的操作的示例性方法的流程图。

图3说明根据本文中所描述的一个或多个实施例的高速缓存控制器的示例性逻辑状态。

图4是说明根据本文中所描述的一个或多个实施例的用于标识未充分利用的高速缓存行的示例性方法的流程图。

图5是说明根据本文中所描述的一个或多个实施例的基于高速缓存行的利用水平来确定高速缓存行的分配的示例性方法的流程图。

图6是说明根据本文中所描述的一个或多个实施例的用于控制分配给任何给定策略标识符的高速缓存行的示例性方法的流程图。

图7是说明根据本文中所描述的一个或多个实施例的被布置用于使用特定于高速缓存的缓存策略来控制存储器高速缓存的示例性计算装置的框图。

本文中所用的标题仅是为了方便,而不一定影响在本公开中要求保护的范围或含义。

在附图中,为了易于理解和方便,相同的附图标记和任何首字母缩略词标识为具有相同或类似的结构或功能性的要素或行为。将在以下详细描述的过程中对附图进行详细描述。

具体实施方式

现在将描述本公开的方法和系统的各种示例和实施例。以下描述为了这些示例的透彻理解并使得能实现这些示例的描述而提供具体细节。然而,相关领域的技术人员将理解,可以在没有许多这些细节的情况下实施本文中所描述的一个或多个实施例。同样地,相关领域的技术人员也将理解,本公开的一个或多个实施例可包括在本文中未详细地描述的其它特征。附加地,下面可以不详细地显示或者描述一些众所周知的结构或功能,以避免不必要地使相关描述不清楚。

在本公开中,术语“应用”和“程序”可以包括具有可执行内容的文件,所述可执行内容例如为目标代码、脚本、标记语言文件、字节代码等。“应用”也可以包括不一定可执行的文件,例如需要被访问或者以其它方式打开的文档或其它数据文件。

本文中所使用的术语“组件”、“模块”、“系统”、“数据库”等指代计算机相关实体,其可以是例如硬件、软件、固件、硬件和软件的组合或执行中的软件。“组件”可以是例如但不限于处理器、对象、在处理器上运行的进程、可执行文件、程序、执行线程和/或计算机。在至少一个示例中,在计算装置上运行的应用以及计算装置本身皆可以是组件。

也应该注意的是,一个或多个组件可以驻留在进程和/或执行线程内,组件可以集中在一个计算机上和/或分布在多个(例如,两个或更多个)计算机之间,并且此类组件可以从其上存储有各种数据结构的各种计算机可读的介质执行。

本公开的实施例涉及用于管理并操作存储器高速缓存特别是在最靠近cpu的那些高速缓存外部的系统级高速缓存的方法、系统和设备。此类系统高速缓存通常作为设计过程的一部分与cpu分开地设计,然后像计算机系统的其它松散的连接的组件所连接的方式一样经由公共总线架构链接到其它组件,所述公共总线架构例如为北/南桥架构、i/o装置以及“片上系统”(soc)设计上的ip块。如将在本文中更详细地描述的,本公开提供被设计成允许对这些一般系统级高速缓存的行为进行具体控制的过程以及实现所述过程的代表性硬件结构。

当在本文中的比特或字段的上下文中使用时,术语“清零”和“被清零”表示该值为零或者将被设定为零。当在本文中的比特或字段的上下文中使用时,术语“置位”指示该值为1或者将被设定为1。也应该理解的是,除非另外明确地指示,否则本公开中的所有算术向计数器的最小值和最大值饱和。

依照本公开的一个或多个实施例,可以假定控制高速缓存管理和操作的各个方面所需的配置状态被集中存储在高速缓存控制器本身中。然而,应该注意的是,基于分布式存储、分布式副本或缓存副本的实施方式不会从根本上改变本文中所描述的各种高速缓存控制特征。

此外,一个或多个实施例假定存在一个或多个结构(例如,表),所述结构各自保持用于控制高速缓存的各种操作和/或特征的策略或参数的合集(例如,高速缓存管理策略、高速缓存管理参数等)。如将在下面更详细地描述的,这些结构通过被称为策略id(pid)的标识符来索引(例如,关联地或直接地)。

本文中所使用的pid是给予或者分配给控制一组高速缓存管理结构的行为的参数的合集的名称(例如,标识符、数字等)。本文中所提供的高速缓存管理方法和系统的各种特征和功能不依赖于或者以其它方式受pid的精确表示的影响。作为一般构思,pid可以是已经存在于系统中的任何标识值(通常为数字)或者软件可显式地构建的一个标识值。出于本公开的方法、系统和设备的目的,提供对存储器事务的发起者或请求者(例如,cpu0、cpu1、gpu内核0、gpu共享内核5、视频编码器、视频解码器或通常为任何总线主控)的洞察的任何值可以被用作适合的pid。因此,本公开考虑了构建pid的若干可能的方法,所述若干可能的方法可以通过以下非限制性代表性示例来说明:

(1)使用片上系统(soc)中的请求者单元的硬件标识符(“hwid”)。例如,在典型的soc中,该值被作为现有协议的一部分随着各个事务而发送。

(2)使用上下文id(其有时被称作地址空间id)。这是应用或程序与程序可使用来生成每页权限和行为的转换后备缓冲器(tlb)/存储器管理单元(mmu)协商的id。

(3)使用hw结构按相对于正常的事务净荷和控制信息的带外的请求而保持、发送和解释的完全程序生成的“地址空间标识符”。

图1是依照本文中所描述的一个或多个实施例的在高速缓存级使用pid的高级操作100。例如,pid可以用于确定高速缓存控制逻辑140并且引导各种存储器高速缓存操作。

pid可以被附连到(例如,包括在其中)请求者与存储器结构(例如,主存储器、暂存缓冲器或高速缓存存储器)之间的请求/事务(110),其中请求者可以是例如请求访问系统高速缓存的任何装置硬件,并且可以例如是中央处理单元(cpu)(诸如cpu0或cpu1)、通用处理单元(gpu)(诸如gpu内核0或gpu共享内核5)、视频编码器、视频解码器、任何总线主控等。包括在请求/事务(110)中的pid为对应的策略表120编索引,所述策略表120包含被设计成控制存储器高速缓存的各个方面和/或操作的策略。例如,作为pid用于引用所对应的策略表120的结果,可以考虑到特定情况基于确定为适用于高速缓存的一个或多个策略来输出(例如,生成、提供等)策略比特(130)。此类策略比特(130)可以用于控制/确定高速缓存140(例如,高速缓存控制器)的各种逻辑。

应该注意的是,pid的传送机制可以基于特定实施方式而变化,并且本公开决不受在下面所描述的示例性传输机制的限制。例如,依照至少一个实施例,可以使用物理地址比特的未用(例如,上部)部分来将pid传输到存储器高速缓存。在这样的示例中,所关联的应用或程序将管理pid,并且tlb和高速缓存将存储未用比特,但是能为了所有其它寻址功能而以其它方式忽略它们的内容。在另一示例中,可以修改引用存储器的系统的各种装置以便将pid的副本从其源(例如,系统的mmu)自动地复制到被使用的适用协议中的额外的用户定义的比特(例如,此类比特通常可用在片上网络协议中)中。

本公开提供了用于开发基于pid的缓存策略的技术。例如,存储器高速缓存将从其传送机制接收pid并且以在下面进一步描述的方式解释pid。在至少一个实施例中,为了某些策略可实现,高速缓存将使至少一个pid的副本保持在各个高速缓存行中。高速缓存行因此可以是块,其可以是固定大小的、包含在存储器与高速缓存之间传输的数据、存储器位置以及至少一个pid。组成pid的比特的具体数目可以在不同的实施方式中变化,并且可基于给定系统的特定特性来选取。

图2是用于使用一个或多个策略标识符来控制系统存储器高速缓存的操作的示例过程200。在块205处,可以接收对系统存储器高速缓存(或系统高速缓存存储器)的访问请求。在块205处接收的访问请求可以是对系统存储器高速缓存的特定高速缓存行的访问请求。例如,该访问请求可以是对高速缓存行的写入请求、读取请求等。

在块210处,可以确定为与访问请求(例如,在块205处接收的)相关联的高速缓存行所指定的策略标识符(例如,pid)。例如,可以基于存储在高速缓存行中的pid字段中的pid来确定pid。

在块215处,可以基于与块210处确定的策略标识符相对应的至少一个策略对系统存储器高速缓存执行至少一个控制操作。例如,依照至少一个实施例,对系统存储器高速缓存执行的控制操作可以是高速缓存行过滤、高速缓存行分配和高速缓存行逐出中的一个。将在以下部分中提供关于可以基于由高速缓存行指定的pid对系统存储器高速缓存执行的这些和其它示例性操作的附加细节。

图3说明高速缓存控制器的示例性逻辑状态300。如上所述,依照一个或多个实施例,出于说明性目的假定了控制存储器高速缓存的各个方面和操作所需的配置状态被集中存储在高速缓存控制器中,但是此类状态能以分布式方式进行存储。应该注意的是,下文仅描述在计算机高速缓存中通常实现的状态之外的示例状态。此外,为状态所定义的各种名称仅用于说明性目的,而决不旨在限制本公开的范围。

下文描述依照本公开的一个或多个实施例的用于控制高速缓存管理和操作的方法和系统的各种特征。在图3中说明了这些特征所需要的各种逻辑状态,并且可以在本文中参考对应字段以帮助理解这些特征。可以在所提供的方法和系统中使用的示例性控制机制包括但不限于:过滤、分配、配额控制和牺牲者选择(脏逐出),将在下面对它们各自进行更详细的描述。在不失一般性的情况下,本领域的普通技术人员可合理地推测此功能的子集。

过滤

依照一个或多个实施例,本文中所描述的方法和系统可以包括高速缓存行过滤功能(例如,可以被实现的一个或多个过滤策略)。例如,硬件组件(其在本文中可以被称为“黑名单”)可以通过标识未充分利用的(或不良利用的)高速缓存行并且在将来防止此类高速缓存行随后被带入高速缓存中来执行过滤操作。如果被启用,则可以检查黑名单以查看特定高速缓存行是否很可能被充分地利用。一旦知道了黑名单检查的结果,就可以采取后续步骤。

图4是用于标识未充分利用的高速缓存行并且训练(例如,构建)黑名单的示例过程400。在下文中,可以参考图4所示出的示例过程400以及图3所示的示例高速缓存控制器逻辑状态两者。

当通过检查包括例如access_count(332)和被访问的子块的总数的一个或多个字段(例如,通过检查单独的被访问的比特(340))来逐出高速缓存行时可以训练黑名单。在至少一个操作中,可以(在块405处)将每高速缓存行access_count(332)字段与每pid阈值(access_count_threshhold(329))相比较。如果在块410处确定了高速缓存行的access_count(332)小于适用的过滤策略阈值(329),则在块415处可以将该高速缓存行添加到黑名单。另一方面,如果在块410处确定了高速缓存行的access_count(332)不小于过滤策略阈值(329),则在块420处可以将该高速缓存行停用或者从黑名单中排除。

在另一示例操作(未示出)中,可以将跨越被访问的比特(340)字段的行的子块的和与blocks_used_threshold(318)值相比较,并且如果该和小于blocks_used_threshold(318),则该行被添加到黑名单。应该注意的是,可以连同图4所示的示例过程400一起或分开地使用上述的示例操作(例如,过程)。

图5是用于基于确定的高速缓存行的利用水平来确定高速缓存行的分配的示例过程500。例如,依照至少一个实施例,是否将给定行分配给高速缓存的确定可以基于从相关黑名单获得(例如,接收、检索、引用等)的数据(如依照图4所示的示例过程400训练/构建并且在上面详细地描述的)。在下文中,可以参考图5所示的示例过程500以及图3所示的示例高速缓存控制器逻辑状态两者。

在块505处,可以作出关于是否针对特定pid启用黑名单的确定。例如,可以通过对use_blacklist比特(316)进行编程在每pid基础上启用或者禁用黑名单。如果在块505处确定了黑名单未被启用(例如,禁用),则过程500可以结束。如果在块505处发现黑名单被启用,则在块510处,可以检查(例如,查阅)黑名单以确定要加载到高速缓存中的高速缓存行是否存在于其上。

如果发现要加载到高速缓存中的高速缓存行不存在于黑名单上(在块510处),则在块515处可以将该高速缓存行分配给高速缓存策略确定的每下一级高速缓存。例如,如果黑名单过滤器是活动的并且一行在黑名单过滤器搜寻中命中,则它可强制“无分配”条件。然而,如果行在黑名单过滤器中缺失,则在块515处可以评估策略的“下一级”(例如,pid读取/写入分配策略、配额确定、默认高速缓存策略等)。这可以包括例如关于如何基于黑名单过滤器外部的其它基于pid的机制(例如,读取分配、写入分配、写入时部分分配等)来分配行的后续检查。

另一方面,如果在块510处确定了要加载到高速缓存中的高速缓存行存在于黑名单上,则高速缓存控制器将基于黑名单分配策略来分配。为此,高速缓存控制器可以查阅(例如,检查、分析、审查等)每pidblacklist_alloc_policy(314)字段以确定(在块520处)要采取什么分配动作(若有的话)。依照一个或多个实施例,黑名单分配策略可以具有多个设定。例如,分配策略可以包括但不限于以下四个设定(在下面的示例中被表示为“0”、“1”、“2”和“3”):

no_alloc(0)-在特定高速缓存中根本不分配高速缓存行并且(例如,由soc中的适当的请求者单元)所请求的地址将被返回到高速缓存在该高速缓存的本机行大小下的下一级。

128b(1)、256b(2)、512b(3)-仅加载由该字段指定的大小的总体高速缓存行的自然对齐的部分。因为这些是典型线或子行大小(例如,64b)的倍数,所以其可以以本领域的普通技术人员所知的许多不同的方式实现。

一旦关于是否将新行分配给高速缓存已经查阅(例如,检查、查询、分析等)黑名单,就可以应用或者执行一个或多个附加策略,如在下面详细地描述的。如果作为黑名单的结果未分配高速缓存行,则高速缓存中的进一步处理可能不是必要的

依照本公开的至少一个实施例,过滤控制/功能可以利用简化的布隆过滤器并且可以在查找和训练(更新)动作期间使用一个或多个散列函数(例如,可以使用至少两个散列函数)。虽然散列函数的精确细节可以在实施方式之间变化,但是不论使用什么散列函数都应该是快速的、高效的,并且生成不相关的散列值。应该注意的是,可以基于对此参数的最终调谐来调整布隆过滤器查找功能。与布隆过滤器一样,针对所实现的各个散列函数设定(或者检查)过滤器数组中的一个比特。在示例实施方式中,相关物理地址比特被用作散列函数的输入。

在至少一个实施例中,过滤器实施方式可以包括并排使用布隆过滤器比特数组的两个副本(例如,a和b)(例如,针对副本a的filtera[n_filter_bits]和针对副本b的filterb[n_filter_bits](312))的老化机制(例如,系统、组件、单元等)。在查找被执行的任何时候,可以检查两个数组(例如,副本a和副本b)。如果任何一个数组指示命中,则引用可以被视为被列入黑名单。另外,在更新(训练)被执行的任何时候,可以更新两个数组。

在至少本示例实施方式中,可以周期性地重清(refresh)布隆过滤器以防止该过滤器被填满。例如,对应的应用或程序(例如,计算机软件)可以指定“重清”循环(周期)并且也可以维护针对a和b数组的单独的计数器(例如,bloom_refresh_cycles_countera和bloom_refresh_cycles_counterb(310))。当任何一个这样的计数器递减到零时,所对应的比特数组(a或b)被清零并且计数器被重置。也可以通过对布隆过滤器可以被重清的次数指定极限(例如,bloom_refresh_cycles_limit(311))来控制布隆过滤器。应该注意的是,老化的一个关键是将a计数器的初始值编程(倒计数)为等于重清周期并且将b数组初始化为重清周期的一半。例如,如果布隆过滤器每100个循环将被清零,则数组的副本a在100个循环、200个循环、300个循环等被清零,而数组的副本b在50个循环、150个循环、250个循环等被清零。应该基于对芯片设计者感兴趣的特定实施方式和/或特定工作负载的实验来调整任何一个计数器(例如,用于a的计数器和/或用于b的计数器)计数的速率。优选不提前硬编码适当的老化值,并且因此本公开的方法和系统允许一旦决定了将要放置芯片的目标系统和芯片将要运行的工作负载就适当地(例如,基于实验)调整(例如,由硬件和/或软件设计者)阈值。

应该理解的是,上述的示例老化机制是依照本公开的至少一个实施例的适合于与布隆过滤器一起使用的许多此类机制的一个示例。除上述的示例老化方法之外或者代替上述的示例老化方法,可以类似地使用各种其它老化系统或技术。例如,另一老化机制基于在过滤器数组中设定的比特的百分比(例如,当它们通过某个阈值时,数组被清零)。

本文中所描述的方法和系统的过滤控制/功能允许展示不良地再使用或最终使用仅带入字节的子集的高速缓存行(例如,将次优利用高速缓存的那些行)的优美“节流”(graceful“throttling”)。例如,可以即时“禁止”此类高速缓存行(例如,在图3所示的示例中的blacklist_alloc_policy(314)下的no_alloc),或者只允许这些行加载围绕缺失的地址的物理地址(pa)的子块。虽然此类技术仍然消耗高速缓存容量,但是它们减少在主存储器(通常例如为动态随机存取存储器(dram))之间消耗的潜在不必要的带宽(bw)的量。以这种方式节流也意味着如果黑名单功能太保守,则不会完全防止良好的行进入高速缓存。

分配控制

依照本公开的一个或多个实施例,所提供的方法和系统可以包括一个或多个分配控制或功能(例如,可以被实现的一个或多个分配控制策略)。例如,每当将要在给定高速缓存中分配高速缓存行的全部或一部分时可以执行分配控制。与上述的过滤控制一样,可在每pid基础上管理/控制本公开的各种分配控制和特征,并且pid可以与各种系统mmu/tlb中的单独的页面或者与特定请求子帧单元(sub-unit)(例如,cpu0、cpu1、gpu内核0、gpu共享内核5、视频编码器、视频解码器、任何总线主控等)相关联。

下文继续参考图3描述分配控制逻辑的各种特征。当置位时,allocate_on_read(322)引起在高速缓存中分配行的读取请求,然而allocate_on_write(323)引起在高速缓存中分配行的写入请求。使两个比特(例如,allocate_on_read(322)和allocate_on_write(323))置位分配所有请求,并且使两个比特清零防止通过来自给定pid(例如,pid(334))的请求进行分配。

依照至少一个实施例,当partial_allocate_on_write(324)和allocate_on_write(322)比特两者被置位时,写入缺失可以仅分配单个子块。在这样的场景中,如果对高速缓存行进行后续读取,则将加载剩余的子块。后续写入将分配另外的子块,但是需要读取来加载整个块。对于未列入黑名单的分配(例如,由于检查黑名单而未排除或者黑名单根本未被查阅的引用),分配控制逻辑提供仅加载高速缓存行的子块的子集(例如通过subblock_size字段(328)所指示的)的能力。附加地,控制逻辑允许适用的编程(例如,软件)配置特定pid,使得对于通过该pid控制的所有高速缓存行,整个行将仅在对该行进行了一定数目的访问(例如通过access_count_threshold字段(329)所指示的)之后被加载。

配额控制

图6是用于控制分配给pid的高速缓存行的示例过程600。例如,依照本文中所描述的一个或多个实施例,本公开的方法和系统可以包括被设计成解决涉及高速缓存行和pid的分配的各种情形的一个或多个配额控制或功能(例如,可以被实现的一个或多个配额控制策略)。在下文中,可以参考图6所示的示例过程600以及图3所示的示例高速缓存控制器逻辑状态。

在至少一个示例中,配额控制策略可以防止任何给定pid获取超过给定高速缓存的line_count_max(326)行。当特定pid达到如通过line_count_max(326)提供的配额控制阈值时,不再将高速缓存行分配给该pid,并且请求将被转发到适用系统的存储器层级中的下一级。

在块605处,可以在高速缓存处接收分配请求(例如,用于向给定pid分配高速缓存行的请求)。依照至少一个实施例,在缓存处接收到分配请求的任何时候,可以在块610处查阅适用于给定pid的配额控制阈值(例如,通过line_count_max(326)字段所提供的)。

如果在块610处确定了已经分配给给定pid的行的总数目(例如,通过line_count(327)字段所提供的)例如大于或者等于通过配额控制阈值(line_count_max(326)字段)指定的值,则在块615处可以不在该特定高速缓存中分配该行(然而应该注意的是,可以在该层级的较高或较低级处缓存该行)。

如果在块610处确定了已经分配给给定pid的行的总数目(例如,通过line_count(327)字段所提供的)小于通过配额控制阈值指定的值(line_count_max(326)字段),则在块620处可以在高速缓存中分配该行。每当为给定pid分配行时,例如在块625处,每pid计数器(例如,line_count(327))可以递增(并且在逐出时类似地递减)。

依照至少一个实施例,高速缓存中的每一行保持(例如,存储、维持等)支配其行为的pid的副本。在高速缓存被访问的任何时候,如果被访问行的pid字段(334)是不同的,则可以将其更新为最新访问的pid。转移pid的所有权的过程对于由一个硬件装置生成并且随后由其它硬件装置消耗的行来说特别重要,并且在高速缓存的有效管理方面是重要的。

当高速缓存行的pid改变时,高速缓存控制器在此类情况下适当地更新对于先前和新pid的line_count(327)(例如,已经分配的行的数目)。因此,作为高速缓存行的所有权从一个pid改变为另一pid的结果,新pid的line_count(327)可超过通过line_count_max(326)提供的阈值。

依照至少一个实施例,高速缓存可以实现一个或多个高级策略以解决超配额条件。例如,为了在多个(例如,两个)pid共享高速缓存行并且这些pid中的一个超过其配额(例如,通过line_count_max(326)所提供的)的情况下避免颠簸(thrashing),高速缓存可以实现以下示例策略中的任何一个:(1)保持高速缓存行被访问的次数的计数并且根据被访问最多的高速缓存行的pid来分配行的pid;或者(2)将高速缓存行分配给具有最多配额或余量的pid。应该注意的是,如果新pid超过配额,则让行留在原始pid中是使该行无效或者使目标pid中的其它行牺牲的替代方案。

牺牲者选择控制

依照一个或多个实施例,本公开的方法和系统可以包括一个或多个牺牲者选择(例如,脏逐出)控制或功能(例如,可以被实现的一个或多个牺牲者选择控制策略)。例如,可以实现victim_policy,该victim_policy是当在高速缓存中新的分配需要空间时控制高速缓存控制器如何选择牺牲者(例如,要从高速缓存中逐出的高速缓存行)的策略。可以例如在达到了给定pid的配额时与上述的配额控制策略相结合地使用此控制,以控制/防止一个pid使来自其它pid的配额的行颠簸。在至少一个示例实施方式中:

victim_policy==0:可对策略/pid进行编程以根据对可能的牺牲者(例如,通常为某种类型的最近最少使用的(lru)状态)的全局选择来控制牺牲者选择过程;以及

victim_policy==l:选择可以仅来自相同pid内的那些牺牲者候选者。

依照本公开的一个或多个其它实施例,高速缓存管理与控制系统和/或设备可以被设计成实现与上述的高速缓存管理与控制系统和设备类似的目标,但是同时使用一个或多个不同的状态存储、分配、锁定和/或逐出策略。

例如,这样的高速缓存管理与控制设备可以被设计成(1)提供用于隔离不同的硬件代理(例如,soc环境中的cpu、i/o装置等)之间的工作集的机制,和/或(2)提供用于避免由于稀疏引用的大型高速缓存行而导致的外部dram带宽浪费(换句话说,使稀疏引用的行保持在高速缓存之外)的机制。

应该理解的是,依照这一个或多个其它实施例,高速缓存管理与控制设备和/或系统可以包括与在上面描述的并且在图1-7中说明的设备和系统的特征和功能中的一些或全部类似的特征和功能。也应该注意的是,在上面描述的(并且在图1-7中说明的)用于高速缓存管理和控制的方法、系统和设备可以可选地包括在下面详细地描述的附加和/或替代特征中的一个或多个。

除了包括以下附加/替代特征外,在下文中描述的高速缓存管理和控制设备与上述的示例管理和控制设备有共同之处:(1)状态跨越机器分布并且基于pid的策略存储的影子副本被保持在中央位置;以及(2)此方法提供了行级锁定和回写策略。

例如,依照至少一个实施例,可以在高速缓存中构建以下结构以控制分配:

(i)在高速缓存的级别下,每流一个副本(例如,假定的16个流):

(a)影子控制寄存器(例如,32比特)

(1)配额(高速缓存行的数目)(例如,16比特、2^16×4kb高速缓存行大小);

(2)模式(例如,1比特);0→1被启用;1→0被禁用(应该注意的是,如果被禁用,则清零选项(在下面描述)可以确定要做什么);以及

(3)清零选项(1比特);如果为0:使干净行无效,写回脏行;如果为1:不管干净或脏状态都使行无效。

(b)状态寄存器(例如,32比特)

(1)使用(高速缓存行的数目)(例如,16比特、2^16×4kb高速缓存行大小);

(2)使用中(例如,1比特);当模式比特被置位时0→1;当清零过程完成时1→0。

(ii)在高速缓存行的级别下:

(a)被锁定(例如,1比特);

(b)pid;

(c)lfu(最不常用)的引用计数(例如,至多6’d63的6个比特);以及

(d)lru(最近最少使用)的引用历史(分层散列表)。

(iii)在64b子高速缓存行的级别下:

(a)无效(2’b00)、有效且干净(2’b01)、有效且脏(2’b11)。

应该注意的是,计数器、结构和/或总线的精确大小可以由设备和控制系统被应用于的底层高速缓存来确定。本示例是为具有大的行大小(出于本说明书的目的为4kb,但是精确大小可以变化)的dram高速缓存而提供的。

此外,依照至少一个实施例,示例代理(例如,cpu、i/o装置等)控制器状态可以为如下:

(i)16个流idl4(16stream-idl4)主控制寄存器(例如,32比特):

(a)l4配额(高速缓存行的数目)(例如,16比特、2^16×4kb高速缓存行大小);

(b)流id(streamid)控制启用(1比特);

(c)l4分配策略:

(1)在读取缺失时分配(1比特);

(2)在写入缺失时分配(1比特);

(3)部分写入缺失时分配(1比特);

(4)分配n子高速缓存行(其中n=1意指一次64b);

(5)在n次缺失之后分配(其中n=1意指在第一次缺失之后立刻分配);以及

(6)分配和锁定(1比特);一旦被锁定,就不可替换。

(d)替换策略(例如,lru对lfu)。

(ii)16个流idl3主控制寄存器(例如,32比特):

(a)l3配额(高速缓存行的数目)(例如,16比特、2^16×64b高速缓存行大小);

(b)流id控制启用(1比特)

(c)l3分配策略:

(1)在读取缺失时分配(1比特);

(2)在写入缺失时分配(1比特);

(3)在命中(专为l2c所独享,1比特)时解除分配;

(4)分配并锁定(1比特);一旦被锁定,就不可被替换。

(d)替换策略(例如,lru)。

依照一个或多个实施例,可以以一个或多个方式修改用于高速缓存管理和控制的方法、系统和设备以除上述的那些特征和/或功能之外或者代替上述的那些特征和/或功能可选地包括其它特征和/或功能。例如,该系统或设备可以被配置有对高速缓存的附加控制。此类控制可以包括例如用于开始脏回写的可编程阈值和/或“锁定”高速缓存以防止新分配(例如,如果检测到颠簸)的能力。

在另一示例中,可以使用“守则比特(chickenbits)”来仅允许某些代理使用高速缓存。被允许使用高速缓存的此类代理的主要候选者可以包括例如gpu、显示控制器、isp和视频控制器。在这样的实施方式中,将不允许将cpu(或例如zram的其它代理)分配到高速缓存中。在一个示例中,高速缓存硬件能在一组id上匹配并且防止分配。然而,被防止分配给高速缓存的那些代理仍然能从高速缓存中读取。以这种方式限制分配能力的一些非详尽优点包括使硬件保持相对简单并且避免复杂的策略决定。

另一个示例包括向高速缓存添加性能计数器以允许计算机程序(例如,软件)确定特定代理何时在使高速缓存颠簸并且具有“旁路模式”以防止新分配。能以这样的方式使用的示例计数器的非限制性和非详尽列表包括:

(i)在设定时间间隔内对分配的数目和/或脏逐出的数目进行计数并且在该数目超过阈值的情况下中断;

(ii)对进入带宽与输出带宽的比(高速缓存有效性的度量)进行计数;

(iii)对脏高速缓存行与干净高速缓存行的比进行计数;和

(iv)对脏逐出与分配的比进行计数。

应该注意的是,为了以上述方式使用性能计数器,可能有必要具有通过代理对计数器进行限幅的能力,并且因此可能有必要具有与一组特定代理相关联的几个计数器。在一个示例中,如果超过阈值,则软件能被配置成临时地锁定高速缓存(例如,防止新分配直到先前分配/锁定的行被显式地解锁为止)。

图7是依照本文中所描述的一个或多个实施例的被布置用于使用特定于高速缓存的缓存策略来控制存储器高速缓存的示例性计算装置(700)的高级框图。在非常基本的配置(701)中,计算装置(700)通常包括一个或多个处理器(710)、系统存储器(720)和系统高速缓存(740)。存储器总线(730)可被用于在处理器(710)与系统存储器(720)之间通信。其它硬件可连接到处理器(710)、存储器(720)、存储器总线(730)和/或系统高速缓存(740)。

取决于所期望的配置,处理器(710)可以是任何类型的,包括但不限于微处理器(μp)、微控制器(μc)、数字信号处理器(dsp)等或任何它们的组合。处理器(710)可包括一级或多级高速缓存(诸如一级高速缓存(711)和二级高速缓存(712))、处理器内核(713)和寄存器(714)。处理器内核(713)可包括算术逻辑单元(alu)、浮点单元(fpu)、数字信号处理内核(dsp内核)等或它们的任何组合。存储器控制器(715)也可与处理器(710)一起使用,或者在一些实施方式中存储器控制器(715)可以是处理器(710)的内部部分。在一个或多个其它实施方式中,存储器控制器(715)可以与系统高速缓存(740)一起使用(例如,作为配置有上述的各种特征和功能的高速缓存控制器)。

取决于所期望的配置,系统存储器(720)可以是任何类型的,包括但不限于易失性存储器(诸如ram)、非易失性存储器(诸如rom、闪速存储器等)或它们的任何组合。系统存储器(720)通常包括操作系统(721)、一个或多个应用(722)和程序数据(724)。应用(722)可以包括用于使用缓存策略来控制一个或多个高速缓存的系统(723)。依照本公开的至少一个实施例,用于使用高速缓存策略来控制一个或多个高速缓存的系统(723)被设计成提供对此类系统级高速缓存的行为(例如,操作、功能等)的详细控制。

程序数据(724)可以包括存储的指令,所述指令当由一个或多个处理装置执行时,实现用于使用高速缓存策略来控制一个或多个高速缓存的系统(723)和方法。附加地,依照至少一个实施例,程序数据(724)可以包括策略标识符(pid)数据(725),其可以涉及例如给予或者分配给控制一组高速缓存管理结构的行为的参数的合集的名称(例如,标识符、数字等)。依照至少一些实施例,应用(722)可被布置成在操作系统(721)上与程序数据(724)一起运行。

计算装置(700)可具有附加特征或功能,以及用于方便基本配置(701)与任何所需装置和接口之间的通信的附加接口。

依照至少一个实施例,系统高速缓存(740)可以由多个不同的硬件组件或单元使用。例如,在soc设计(例如,被用在诸如电话、平板等的便携式装置中)中,系统高速缓存(740)可以是在系统的许多不同的硬件单元之间共享的公共高速缓存。

系统存储器(720)是计算机存储介质的示例。计算机存储介质包括但不限于ram、rom、eeprom、闪速存储器或其它存储器技术、cd-rom、数字通用盘(dvd)或其它光学存储器、磁盒、磁带、磁盘存储器或其它磁存储装置,或者可用于存储所期望的信息并且可由计算装置700访问的任何其它介质。任何此类计算机存储介质可以是装置(700)的一部分。

计算装置(700)可以作为小形状因子便携式(或移动)电子装置的一部分被实现,所述便携式电子装置为诸如蜂窝电话、智能电话、个人数字助理(pda)、个人媒体播放器装置、平板计算机(平板)、无线web观看装置、个人头戴式耳机装置、专用装置,或者包括任何上述功能的混合装置。此外,计算装置(700)也可以作为包括膝上型计算机和非膝上型计算机配置两者的个人计算机、一个或多个服务器、物联网系统等被实现。

前面的详细描述已经由框图、流程图和/或示例的使用阐述了装置和/或过程的各种实施例。只要此类框图、流程图和/或示例包含一个或多个功能和/或操作,本领域的技术人员将理解,此类框图、流程图或示例内的各个功能和/或操作可通过各式各样的硬件、软件、固件或实际上它们的任何组合单独地和/或共同地实现。依照至少一个实施例,可以经由专用集成电路(asic)、现场可编程门数组(fpga)、数字信号处理器(dsp)或其它集成格式来实现本文中所描述的主题的若干部分。然而,本领域的技术人员将认识到,本文中所公开的实施例的一些方面整个地或部分地可用集成电路、作为在一个或多个计算机上运行的一个或多个计算机程序、作为在一个或多个处理器上运行的一个或多个程序、作为固件或者作为实际上它们的任何组合被等效地实现,并且设计电路和/或编写软件和/或固件的代码鉴于本公开将完全在本领域的技术人员的技能内。

此外,本领域的技术人员将了解的是,本文中所描述的主题的机制能够以各种形式作为程序产品被分发,并且本文中所描述的主题的说明性实施例不管用于实际地执行分发的非暂时性信号承载介质的具体类型如何均适用。非暂时性信号承载介质的示例包括但不限于如下介质:可记录型介质,诸如软盘、硬盘驱动器、光盘(cd)、数字视频盘(dvd)、数字磁带、计算机存储器等;以及传输型介质,诸如数字和/或模拟通信介质(例如,光纤电缆、波导管、有线通信链路、无线通信链路等)。

除非受到相应上下文明确地限制,否则在本公开中使用的情况下,术语“生成”指示其普通含义中的任一个,例如计算或以其它方式产生,术语“计算”指示其普通含义中的任一个,例如计算、评估、估计和/或从多个值中选择,术语“获得”指示其普通含义中的任一个,例如接收(例如,从外部装置)、派生、计算和/或检索(例如,从存储元件的阵列中),并且术语“选择”指示其普通含义中的任一个,例如标识、指示、应用和/或使用两个或更多个的集合中的至少一个和不到全部的所述集合。

术语“包括”在它被用在本公开(包括权利要求书)中的情况下,不排除其它元件或操作。术语“基于”(例如,“a基于b”)在本公开中用于指示其普通含义中的任一个,包括情况(i)“得自”(例如,“b是a的前体”)、(ii)“至少基于”(例如,“a至少基于b”),以及在特定上下文中适当的情况下的(iii)“等于”(例如,“a等于b”)。类似地,术语“响应于”用于指示其普通含义中的任一个,包括例如“至少响应于”。

应该理解的是,除非另外指示,否则本文中对具有特定特征的设备的操作的任何公开也明确地旨在公开具有类似特征的方法(并且反之亦然),并且对根据特定配置的设备的操作的任何公开也明确地旨在公开根据类似配置的方法(并且反之亦然)。在使用术语“配置”的情况下,可以参考如通过特定上下文所指示的方法、系统和/或设备。除非通过特定上下文另外指示,否则术语“方法”、“过程”、“技术”和“操作”被通用地且可互换地使用。类似地,除非通过特定上下文另外指示,否则术语“设备”和“装置”也被通用地且可互换地使用。术语“元件”和“模块”通常用于指示较大配置的一部分。除非明确地受其上下文限制,否则术语“系统”在本文中用于指示其普通含义中的任一个,包括例如“交互以为公共目的服务的一组元件”。

关于基本上任何复数和/或单数术语在本文中的使用,本领域的技术人员可依照上下文和/或应用从复数转化为单数和/或从单数转化为复数。为了清楚起见,可以在本文中明确地阐述各种单数/复数置换。

因此,已经对主题的特定实施例进行了描述。其它实施例在以下权利要求书的范围内。在一些情况下,权利要求中书记载的动作可被以不同的次序执行并且仍然实现所希望的结果。此外,附图中所描绘的过程不一定要求所示的特定次序或顺序次序来获得所希望的结果。在某些实施方式中,多任务处理和并行处理可以是有利的。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1