掌桥专利:专业的专利平台
掌桥专利
首页

DRAM感知高速缓存

文献发布时间:2024-04-18 19:58:30


DRAM感知高速缓存

背景技术

计算设备可以包括经由总线或其他互连彼此通信的多个子系统。例如,这样的计算设备可以是便携式计算设备(“PCD”),诸如笔记本电脑或掌上电脑、蜂窝电话或智能手机、便携式数字助理、便携式游戏控制台等。通信子系统可以被包括在同一集成电路芯片内或在不同芯片中。“片上系统”或“SoC”就是这样一种芯片的示例,它集成了很多组件以提供系统级功能。例如,SoC可以包括一种或多种类型的处理器,诸如中央处理单元(“CPU”)、图形处理单元(“GPU”)、数字信号处理器(“DSP”)和神经处理单元(“NPU”)。SoC可以包括其他子系统,诸如提供无线连接的收发器或“调制解调器”、主存储器或系统存储器、一个或多个高速缓冲存储器等。一些子系统可以包括可以与系统存储器执行存储器事务的处理引擎。PCD和其他计算设备中的系统存储器通常包括动态随机存取存储器(“DRAM”)。

DRAM被组织成行和列的阵列。必须先打开一行,然后才能访问其数据。在任何时候,阵列中只能有一行处于打开状态。为了帮助减少延迟,DRAM可以被组织成多个存储库(bank),每个存储库包括上述类型的阵列。DRAM控制器可以在等待对另一存储库的先前访问完成的同时发起对一个存储库的访问。为了提供进一步的性能优势,存储库可以被组织成多个存储库组。此外,DRAM可以被组织成多个存储体(rank),每个存储体具有多个存储库组。

DRAM控制器的一项任务是在存储体、存储库组与存储库之间调度或引导事务。术语“DRAM感知”调度有时用于描述DRAM控制器如何以利用由DRAM的组织所提供的效率的方式执行这种调度。例如,DRAM控制器可以随机化其对要访问的存储库的选择,使得顺序访问被引导到同一存储库中的不同行的可能性较低。此外,例如,DRAM控制器可以在切换到另一存储体之前将尽可能多的访问引导到一个存储体,因为切换存储体会导致高延迟损失。

高速缓冲存储器系统可以被插入请求事务的处理引擎与DRAM控制器之间的存储器事务路径中。当高速缓冲存储器充满或变得“脏”时,高速缓冲存储器控制器将一些脏的高速缓存行写回或“驱逐”到DRAM以释放高速缓冲存储器中的空间。DRAM控制器所采用的DRAM感知调度技术在某些情况下可能不足以使效率最大化。

发明内容

公开了用于以DRAM感知方式控制数据高速缓存的系统、方法、计算机可读介质和其他示例。

一种用于控制数据高速缓存的示例性系统可以包括集体具有与DRAM的结构组织相对应的组织的多个数据存储结构。示例性系统还可以包括高速缓存控制器系统。高速缓存控制器系统可以被配置为接收多个事务请求。高速缓存控制器系统还可以被配置为将与事务请求相关联的数据存储在基于与每个事务请求相关联的存储器地址而从多个数据存储结构中选择的一个或多个数据存储结构中。高速缓存控制器系统还可以被配置为使用多个数据存储结构来控制到DRAM的数据传送。

一种用于控制数据高速缓存的示例性方法可以包括接收多个事务请求。示例性方法还可以包括将与事务请求相关联的数据存储在基于与每个事务请求相关联的存储器地址而从多个数据存储结构中选择的一个或多个数据存储结构中。示例性方法还可以包括使用多个数据存储结构来控制到DRAM的数据传送。多个数据存储结构集体具有与DRAM的结构组织相对应的组织。

一种用于控制数据高速缓存的另一示例性系统可以包括用于接收多个事务请求的装置。示例性系统还可以包括用于将与事务请求相关联的数据存储在基于与每个事务请求相关联的存储器地址而从多个数据存储结构中选择的一个或多个数据存储结构中的装置。示例性系统还可以包括用于使用多个数据存储结构来控制到DRAM的数据传送的装置。多个数据存储结构集体具有与DRAM的结构组织相对应的组织。

一种用于控制数据高速缓存的示例性计算机可读介质可以包括其上存储有计算机可执行形式指令的非暂态计算机可读介质。该指令在由处理器执行时可以将处理器配置为接收多个事务请求。该指令还可以将处理器配置为将与事务请求相关联的数据存储在基于与每个事务请求相关联的存储器地址而从多个数据存储结构中选择的一个或多个数据存储结构中。该指令还可以将处理器配置为使用多个数据存储结构来控制到DRAM的数据传送。

附图说明

在附图中,除非另有说明,否则在各个视图中,相同的附图标记指代相同的部分。对于具有字母字符名称的附图标记(诸如“102A”或“102B”),字母字符名称可以区分同一图中的两个相似部件或元素。当附图标记旨在涵盖所有图中具有相同附图标记的所有部件时,可以省略附图标记的字母字符名称。

图1是示出根据示例性实施例的用于以DRAM感知方式控制数据高速缓存的系统的框图。

图2是根据示例性实施例的包括用于以DRAM感知方式控制数据高速缓存的系统的存储器系统的框图。

图3是根据示例性实施例的用于以DRAM感知方式控制数据高速缓存的系统的框图。

图4是根据示例性实施例的被配置用于控制高速缓存数据到DRAM的驱逐的数据结构和选择逻辑的框图。

图5是根据示例性实施例的用于控制与DRAM写入事务请求相关联的数据高速缓存的各方面的方法的流程图。

图6是示出根据示例性实施例的被配置为存储高速缓存地址信息和页命中位的链表的数据结构图。

图7是根据示例性实施例的图3的标签处理器的框图。

图8是根据示例性实施例的用于调节事务请求中的高速缓存提示的方法的流程图。

图9A是根据示例性实施例的用于基于写入请求来分配高速缓存行并且将相关联的信息存储在所选择的链表队列中的方法的流程图。

图9B是图9A的流程图的继续。

图10是根据示例性实施例的用于搜索用于替换的牺牲高速缓存行的方法的流程图。

图11是根据示例性实施例的用于从一组链表队列中选择链表队列的方法的流程图。

图12是根据示例性实施例的用于在与两个DRAM存储体相对应的两组链表队列中进行选择的方法的流程图。

图13是根据示例性实施例的用于使用链表队列来激活和停用高速缓存数据的驱逐以保持窗口内的高速缓存脏度的方法的流程图。

图14是根据示例性实施例的用于控制与DRAM事务请求相关联的数据高速缓存的各方面的方法的流程图。

图15是根据示例性实施例的便携式计算设备或PCD的框图。

具体实施方式

“示例性”一词在本文中用于表示“用作示例、实例或说明”。“说明性”一词在本文中可以与“示例性”同义使用。本文中描述为“示例性”的任何方面不一定被解释为比其他方面更优或更有利。

如图1所示,可以提供用于控制数据高速缓存的各方面的系统100。系统100可以被配置用于控制与客户端设备(未示出)与DRAM(未示出)之间的存储器事务相关的数据的高速缓存的各方面。尽管在本文中描述的示例性实施例中,写入事务用作存储器事务的示例,但是本文中描述的系统、方法和其他实施例的各方面也可以应用于其他类型的事务。系统100可以包括多个数据存储结构102。多个数据存储结构102可以集体具有与DRAM的组织相对应的组织。例如,如下所述,DRAM可以被组织成存储库、存储库组、存储体等。多个数据存储结构102可以具有与DRAM的存储库组织、DRAM的存储库组组织、DRAM的存储体组织等中的一个或多个相对应的组织。

系统100还可以包括高速缓存控制器系统104。高速缓存控制器系统104可以被配置为从一个或多个客户端设备(未示出)接收DRAM事务请求。客户端设备可以是能够发起总线事务的任何类型,例如CPU或其他处理器。事务请求可以包括读取事务请求和写入事务请求(为了简洁起见,本文中也可以称为读取请求和写入请求)。图1中的箭头指示与事务相关的逻辑流,并且更具体地,指示与事务的请求相关方面相关的逻辑流;为了清楚起见,响应相关方面在图1中没有用箭头指示,诸如与响应于请求的数据返回流相关的方面。还应当理解,图1中的箭头以概念方式指示逻辑流,而不是旨在指示特定的物理互连,诸如特定的信号线、总线等。此外,在本公开中对“指示”的引用可以被广泛地解释为包括信号、位、命令、指令等的任何类型或组合。

事务请求可以包括目标存储器(即,DRAM)地址,还可以包括如下所述的其他信息。高速缓存控制器系统104还可以被配置为将与事务请求相关联的数据存储在数据存储结构102中的所选择的一个中。其中存储有数据的数据存储结构102可以基于与事务请求相关联的目标存储器地址等信息从数据存储结构中选择。例如,在写入请求的情况下,存储在所选择的数据结构102中的信息或数据可以是高速缓存地址的形式。如下所述,这样的高速缓存地址可以指示有效载荷高速缓存中的位置(图1中未示出),作为写入请求的主题的数据被高速缓存在该位置中。

高速缓存控制器系统104还可以被配置为使用数据存储结构102来控制到DRAM的数据传送。例如,如下所述,存储在数据存储结构102中的数据可以用于指示要驱逐到DRAM的高速缓存数据的位置或地址。高速缓存控制器系统104可以被配置为通过基于序列在数据存储结构102中进行选择来控制数据传送。该序列可以基于例如在数据存储结构102之间的轮循选择。该序列可以基于例如在与DRAM的第一存储体相关联的数据存储结构102的第一子集和与DRAM第二存储体相关联的数据存储结构102的第二子集之间进行选择。该序列可以基于例如数据存储结构中的条目是否指示DRAM页命中。以下进一步描述与在数据存储结构102中进行选择相关的这些方面。

如图2所示,系统200可以包括客户端设备202(即,处理器或其他处理引擎)、高速缓存系统204、存储器控制器206和DRAM 208。客户端设备202可以发出DRAM事务请求,该DRAM事务请求可以包括读取请求(即,从DRAM 208读取数据的请求)、以及写入请求(即,在DRAM 208中存储数据的请求)。DRAM事务请求也可以称为访问DRAM 208的请求。每个DRAM事务请求可以包括DRAM 208中的目标地址、要访问的数据的大小或量、以及其他信息。写入请求还包括存储器控制器206将响应于写入请求而存储在DRAM 208中的数据,该数据可以称为有效载荷。

高速缓存系统204可以包括上述系统100(图1)的特征和操作方式。高速缓存系统204还可以包括常规特征。例如,在某些方面,高速缓存系统204可以以常规回写高速缓存的方式操作,这是本领域普通技术人员所熟知的。例如,高速缓冲存储器系统204可以临时存储或“高速缓存”响应于写入请求而请求被写入DRAM 208的数据或者响应于读取请求而从DRAM 208读取的数据。如本领域普通技术人员所理解的,已经存储在高速缓存系统204中但尚未写入DRAM 208的数据通常称为“脏”数据。常规上,脏数据被周期性地写入DRAM 208,该过程通常称为驱逐或清理。代替常规的驱逐方法或除了常规的驱逐法之外,可以包括本文中描述的驱逐相关方法。清理高速缓存也可以通俗地称为“洗涤”。尽管为了清楚起见没有单独示出,但高速缓存系统204可以包括一个或多个处理器(通过软件或固件可配置)或可配置为以本文中描述的方式操作的其他逻辑,包括根据下文所述的方法。

存储器控制器206可以具有常规结构并且以常规方式操作。例如,除了其他功能之外,存储器控制器206还可以将事务请求转换为DRAM命令和物理DRAM地址。由于存储器控制器206及其操作方式是本领域普通技术人员所熟知的,因此在此不描述存储器控制器206的这些方面。

DRAM 208可以具有常规结构并且以常规方式操作。DRAM 208可以是与本文中的描述不一致的任何类型。例如,DRAM 208可以是双倍数据速率同步DRAM(“DDR-SDRAM”),有时为了简洁起见称为“DDR”。随着DDR技术的发展,已经开发出了诸如第四代低功耗DDR(“LPDDR4”)和第五代低功耗DDR(“LPDDR5”)等DDR版本。DRAM 208可以是例如LPDDR4、LPDDR4X、LPDDR5、LPDDR5X等。尽管DRAM 208的结构和操作被本领域普通技术人员充分理解,但是提供以下简要描述作为背景。

DRAM 208可以包括两个存储体210,这两个存储体可以称为Rank_0和Rank_1。由于两个存储体210彼此相同,以下描述适用于每个存储体210。存储体210包括两个或更多个(“M”)存储库212,其可以称为Bank_0至Bank_M-1。每个存储库212被组织为单元或存储位置的二维阵列213,其中阵列213中的存储位置通过选择行和列来访问。示例性的行和示例性的列在图2中的交叉阴影中被突出显示以用于说明的目的。此外,尽管为了清楚起见没有在图2中示出,但是DRAM 208可以进一步被组织成存储库组。例如,每个存储体210可以由四个存储库组(未示出)组成,并且这些存储库组中的每个存储库组可以包括四个存储库。在这样的实施例中,DRAM 208因此由32个不同的(即,个体可寻址的)存储库212组成。尽管在本文中描述的示例性实施例中,DRAM 208具有两个存储体210,每个存储体210具有四个存储库组,并且四个存储库组中的每个存储库组具有四个存储库212,但是在其他实施例中,这样的DRAM可以以任何其他方式来组织,包括比示例性实施例中更多或更少的存储体、存储库、存储库组等。

存储器控制器206用于访问DRAM 208的物理地址可以包括行地址、列地址、存储库组地址和存储库地址。此外,尽管出于清楚的目的未示出,但是响应于由存储器控制器206提供的存储体地址(例如,被包括在读取或写入命令中的芯片选择位),存储体地址解码逻辑可以选择存储体210中的一个。尽管出于清楚的目的同样未示出,但是响应于由存储器控制器206提供的存储库地址,存储库地址解码逻辑可以选择所选择的存储体210的所选择的存储库组中的存储库212中的一个。响应于由存储器控制器206提供的行地址,行地址解码器214可以选择所选择的存储体210中的所选择的存储库组的所选择的存储库212中的行中的一个。类似地,响应于由存储器控制器206提供的列地址,列地址解码器216可以选择所选择的存储体210中的所选择的存储库组的所选择的存储库212中的列中的一个。

每个存储体210可以具有用于缓冲读取数据的读取锁存器218和用于缓冲写入数据的写入锁存器220。每个存储体210还可以具有输入/输出(“I/O”)逻辑222,该I/O”逻辑222被配置为引导读取和写入数据来自和去往所选择的存储器位置。

每个存储库212可以具有行缓冲器224。行缓冲器224存储所选择的行(也称为“页”)的内容。必须先选择或“打开”一行,然后才能向其写入或从中读取。一旦一行被打开,DRAM 208就可以响应于读取或写入命令而从行缓冲器224中的任何数目的列读取或写入。在读取或写入命令之后,数据以称为“突发”的单元在存储器控制器206与DRAM 208之间串行传送,例如,“突发”可以是每数据信号线八位。在向行缓冲器224写入或从行缓冲器224读取之后,该行必须被恢复或“关闭”。

对已打开的行的读取或写入事务称为“页命中”。对未打开(因此需要打开)的行的读取或写入事务称为“页未命中”。页未命中比页命中延迟更大。可取的是,对同一打开行执行多个顺序事务(即,顺序页命中),而不是必须关闭一行再打开另一行,因为这可以减少延迟。此外,与被引导到不同存储库的顺序事务相比,被引导到同一存储库的顺序事务产生更多的延迟。存储库组和存储库中的DRAM208的结构或组织使得DRAM控制器206能够在等待对另一存储库的行的先前访问完成的同时发起对一个存储库中的行的访问。这种时间重叠有助于使事务延迟最小化。DRAM控制器206可以采用常规的存储库散列算法来帮助随机化其对要访问的存储库的选择,使得顺序访问被引导到同一存储库的可能性较低。这种随机化效应通常称为增加存储库和/或存储库组的“扩展”。DRAM控制器206可以采用其他算法来尝试减少其他延迟源,诸如读取到写入切换、写入到读取切换或存储体到存储体切换。高速缓存系统204可以包括如下所述的特征,该特征可以进一步增加存储库扩展,增加页命中率,并且减少读取到写入切换、写入到读取切换或存储体到存储体切换,目的是进一步减少延迟。

如图3所示,可以提供用于控制数据高速缓存的各方面的系统300。系统300可以是上述系统100(图1)的示例。系统300可以被配置为以上面关于图1-图2描述的方式接收来自客户端设备(图3中未示出)的事务(“txn”)请求,该请求被引导到DRAM(图3中未示出)。系统300可以包括洗涤器302。洗涤器302可以包括多个队列304。队列304可以是上述数据存储结构102(图1)的示例。如下面进一步描述的,队列304可以以与DRAM的组织相对应的方式来组织。例如,每个队列304可以对应于DRAM的一个存储库。

系统300还可以包括高速缓存数据(或“有效载荷”)存储器306。高速缓存数据存储器306可以被配置为存储(即,高速缓存)作为DRAM事务请求的对象的数据。存储在高速缓存数据存储器306中的数据可以称为高速缓存数据。数据可以以通常称为高速缓存行的单元存储在高速缓存数据存储器306中。高速缓存数据存储器306可以被组织为集合关联高速缓存。尽管集合关联高速缓存被本领域普通技术人员很好地理解,但是提供以下简要描述作为背景。

集合关联高速缓存可以使用通常称为“集合”和“路径”的地址部分进行寻址。从概念上讲,集合是高速缓存中的一行。每个DRAM地址映射到集合中的一个。“N路集合关联高速缓存”由一定数目(N)的路径组成,并且每个DRAM地址可以映射到(或选择)集合中的N个路径中的任何一个。本文中对查找标签的引用表示读取所有N个路径的内容(例如,从下面描述的标签存储器310),并且检查每个路径的标签以及每个路径的有效标志,以确定该集合的一个路径中是否发生高速缓存命中。路径中的一个中的命中表示数据被高速缓存在与该路径相关联的位置(例如,在高速缓存数据存储器306中)。高速缓存数据存储器306可以在静态RAM(“SRAM”)中实现。

系统300还可以包括标签处理器308,该标签处理器308可以是上述高速缓存控制器系统104(图1)或其一部分的示例。尽管出于清楚的目的在图3中未示出,但是标签处理器308可以包括处理器(例如,通过软件或固件可配置)或可配置为提供下面描述的功能的其他逻辑(例如,有限状态机等)。如下面进一步描述的,当作为写入请求的对象的数据被存储在高速缓存数据存储器306中(在高速缓存地址处)但尚未被写入DRAM时,即,高速缓存数据是“脏的”时,标签处理器308可以将脏数据的高速缓存地址存储在队列304中的所选择的队列中。换言之,队列304可以用于存储脏高速缓存行的高速缓存地址(例如,集合和路径)。对在队列304中“登记”的高速缓存行的引用表示高速缓存数据被存储在高速缓存数据存储器306中的高速缓存地址被存储在队列304。存储有该数据(即,高速缓存地址)的队列304可以基于例如哪个DRAM存储库对应于与写入请求相关联的目标存储器地址来选择。尽管在图3所示的示例性实施例中,队列304由标签处理器308用来存储脏高速缓存行的高速缓存地址,但是在其他实施例(未示出)中,这样的队列可以用于存储与事务请求相关联的其他类型的信息或数据。

系统300可以包括标签存储器310。标签存储器310可以被配置为存储与高速缓存数据相关联的标签。如本领域普通技术人员所理解的,标签可以从存储器事务请求中的目标地址的一部分导出,并且可以用于标识高速缓存数据。存储在标签存储器310中的每个标签可以标识存储在高速缓存数据存储器306中的一个高速缓存行。标签存储器310可以用SRAM来实现。由于寻址高速缓冲存储器(例如,通过集合和路径)、使用存储的标签来标识高速缓存数据、以及其他这样的数据高速缓存原理被本领域普通技术人员充分理解,因此本文不进一步详细描述这样的方面。

标签存储器310可以被配置为不仅存储标签本身,还存储与标签相关联的信息。这样的信息可以包括与每个标签相关联的一个或多个标志,该标志可以指示由该标签标识的高速缓存行的各种状态。例如,“有效”标志可以指示由标签标识的高速缓存行是有效的(即,“有效”标志为真)还是无效的(即,“有效”标志为假)。脏标志可以指示由标签标识的高速缓存行是脏的(即,脏标志为真)还是干净的(即,脏标志为假)。“可清理”标志可以指示由标签标识的高速缓存行是在队列304中登记(即,“可清理”标志为真)还是没有在队列304中登记(例如,“可清理”标志为假)。“停滞”标志可以指示由标签标识的高速缓存行是早于预定阈值时长(即,“停滞”标志为真)还是不早于阈值时长(例如,“停滞”标志为假)。下面描述与高速缓存行时长相关的方面。

系统300还可以包括仲裁器312,在所示实施例中,仲裁器312可以被包括在洗涤器302中。然而,更一般地,仲裁器312可以是上述高速缓存控制器系统104(图1)的与对脏高速缓存行到DRAM的驱逐的控制相关的部分的示例。由于仲裁器312可以包括基于DRAM的存储体、存储库组和存储库组织的选择逻辑(未单独示出),所以仲裁器312可以称为具有“DDR感知”特性。尽管出于清楚的目的在图3中未示出,但是仲裁器312的选择逻辑可以包括处理器(例如,由软件或固件可配置)或者根据选择算法或方法(诸如下面描述的示例性方法)可配置的其他逻辑(例如,有限状态机等)。如下面进一步描述的,基于这样的选择方法,仲裁器312可以从队列304中进行选择。所选择的队列304用于控制哪些脏的高速缓存行从高速缓存数据存储器306被驱逐到DRAM。系统300可以包括高速缓存业务处理器314,除了其他功能之外,高速缓存业务处理器314还可以控制从高速缓存数据存储器306驱逐的高速缓存行的传送。由仲裁器312提供的标识要驱逐或清理的高速缓存行的结果或输出可以称为“清理”事务请求。标签处理器308可以将“清理”事务请求引导到高速缓存业务处理器314。存储器控制器(例如,如以上关于图2所述)可以从高速缓存业务处理器314接收被驱逐的高速缓存行数据,并且控制数据最终被写入DRAM的方式。

系统300还可以包括事务缓冲器316,事务缓冲器316被配置为接收和缓冲(例如,在事务池中)来自客户端设备(图3中未示出)的传入写入请求。系统300还可以包括输入仲裁器318,输入仲裁器318被配置为从可以在缓冲器316中的任何事务和可以由仲裁器312提供的任何干净事务中进行选择,并且将所选择的事务请求提供给标签处理器308。输入仲裁器318可以使该选择基于各种因素,这可以包括例如与每个事务相关联的优先级、与每个事务请求相关联的时长(例如,写入事务请求在事务缓冲器316中已经存在多长时间)或其他因素。

系统300接收的传入事务请求不仅可以包括目标地址、数据、长度等,还可以包括附加信息。附加信息可以包括高速缓存“提示”。客户端可以在写入请求中包括高速缓存提示,以指示例如客户端是偏好高速缓存事务(“写入分配”提示)还是偏好在没有高速缓存(“写入不分配”)提示的情况下通过系统300传递事务。事务请求还可以包括标识子高速缓存的指示。尽管出于清楚的目的在图3中未示出,但是系统300可以包括多个子高速缓存,并且不同的子高速缓存可以对应于不同的优先级,其中被引导到一个子高速缓存的事务相对于被引导到另一子高速缓存的事务被处理。

应当注意,图3中的箭头指示与写入事务的请求相关方面相关的流程;出于清楚的目的,响应相关方面没有由图3中的箭头指示,诸如响应于请求的数据的返回流。此外,除了被配置为以本文中描述的方式处理写入请求之外,系统300还可以被配置为处理读取请求。系统300可以被配置为以任何方式处理读取请求,包括以常规方式。还应当理解,图3中的箭头以概念方式指示信息流,而不是旨在指示特定的物理互连,诸如特定的信号线、总线等。

如图4所示,洗涤器结构402可以包括链表队列(“LLQ”)404和选择逻辑406。LLQ404可以是上面关于图3描述的队列304的示例、以及上面关于图1描述的数据存储结构102的示例。LLQ 404可以以与DRAM(未示出)的存储体、存储库组和存储库组织相对应的方式来组织。因此,在DRAM具有两个存储体(Rank_0和Rank_1)的实施例中(其中每个存储体由四个存储库组(BG0、BG1、BG2和BG3)组成,每个存储库组由四个存储库组成(总共32个存储库)),LLQ 404可以被组织为与存储体中的一个(例如,Rank_0)的16个存储库相对应的16个LLQ404的第一子组404A、和与另一存储体(例如,Rank_1)的16个存储库相对应的16个LLQ 404的第二子组404B。

在每个子组404A和404B中,LLQ 404可以按存储库和存储库组来组织。根据示例性模式或组织,存储库组可以通过每个存储库从一个LLQ 404到下一LLQ 404递增:每个子组404A和404B中的第一LLQ 404可以对应于BG_0中的Bank_0;每个子组404A和404B中的第二LLQ 404可以对应于BG_1中的Bank_0;每个子组404A和404B中的第三LLQ 404可以对应于BG_2中的Bank_0;并且每个子组404A和404B中的第四LLQ 404可以对应于BG_3中的Bank_0。针对下一存储库(即,Bank_1)继续这种模式或组织:每个子组404A和404B中的第五LLQ 404可以对应于BG_0中的Bank_1;每个子组404A和404B中的第六LLQ 404可以对应于BG_1中的Bank_1;每个子组404A和404B中的第七LLQ 404可以对应于BG_2中的Bank_1,并且每个子组404中的第八LLQ 404可以对应于BG_3中的Bank_1。这种模式或组织可以针对Bank_2和Bank_3继续。根据该模式或组织,第16LLQ 404对应于BG3中的Bank_3。

每个LLQ 404可以被实现为链表(数据结构)。尽管下面描述了示例性链表结构,但是可以注意到,每个LLQ 404中的每个条目标识脏高速缓存行。每个LLQ 404中的头部条目标识脏高速缓存行,该脏高速缓存行可以是用于在该LLQ 404中的下一条目成为候选之前进行清理(即,驱逐)的候选。

选择逻辑406可以用于从候选脏高速缓存行中选择用于清理的高速缓存行。也就是说,选择逻辑406可以用于从32个LLQ 404中选择一个LLQ,并且从而选择或标识在所选择的队列(LLQ)404的头部处的脏高速缓存行。应当理解,选择逻辑406在图4中以概念性的方式示出,并且可以包括例如处理器(例如,通过软件或固件可配置)、有限状态机或其他逻辑。选择逻辑406可以被包括在上面关于图3描述的仲裁器312中。

从概念上讲,选择逻辑406可以包括第一队列选择逻辑408A和第二队列选择逻辑408B,第一队列选择逻辑408A被配置为从与Rank_0的存储库相对应的第一子组404A的16个LLQ 404中选择LLQ 404,并且第二队列选择逻辑408B被配置为从与Rank_1的存储库相对应的第二子组404B的16个LLC 404中选择LLC 404。从概念上讲,由第一队列选择逻辑408A和第二队列选择逻辑408B产生的结果可以分别操作多路复用器或队列选择器414A和414B。第一队列选择逻辑408A和第二队列选择逻辑408B中的每个可以彼此独立地操作,但是根据下面描述的相同的队列选择方法操作。选择逻辑406还可以概念性地包括存储体选择逻辑410,存储体选择逻辑410被配置为在由第一队列选择逻辑408A选择的LLQ 404与由第二队列选择逻辑408B选择的LLQ 404之间进行选择。存储体选择逻辑410可以根据下面描述的存储体选择方法来操作。概念上,由存储体选择逻辑410产生的结果可以操作多路复用器或存储体选择器416。存储体选择器416的输出标识一个选择的LLQ 404。下面描述的另一种方法可以控制选择逻辑406是输出一个选择的LLQ 404的指示(即,高速缓存行已经被标识用于驱逐的指示)还是不输出选择(即,当时没有高速缓存行被标识用于驱逐的指示)。控制存储体选择器416是否输出所选择的LLQ 404的指示(以及因此标识高速缓存行的指示)的方法可以称为洗涤器启用或洗涤器激活方法。选择性地启用存储体选择器416的输出在图4中概念性地由2-输入逻辑-AND 412表示,该AND 412具有表示所选择的LLQ 404的指示的一个输入和表示由洗涤器启用方法进行的控制确定的另一输入。

再次简要参考图3,选择逻辑406的输出形成洗涤器输出320。洗涤器输出320被提供给输入仲裁器318。如上所述,如果高速缓存行已经被标识为用于驱逐,则输入仲裁器318可以选择继续驱逐所标识的高速缓存行。如果当时没有标识出用于驱逐的高速缓存行,则输入仲裁器318可以从事务缓冲器316中选择传入事务。输入仲裁器318可以根据优先级选择由洗涤器输出320提供的清洁请求或者来自事务缓冲器316的事务。在一个实施例中,由洗涤器输出320提供的清洁请求可以具有最低优先级,并且只有在事务缓冲器316中没有事务未决时才被服务。在另一实施例中,由洗涤器输出320提供的清洁请求的优先级可以根据洗涤器LLQ的充满度被动态地改变。

在图5中,以流程图的形式描绘了用于控制数据高速缓存的方法500。例如,方法500可以表示系统300(图3)的上述操作的各个方面。尽管图5(以及图8-图14)中的箭头指示各种块之间的顺序,但是应当理解,为了便于描述和引导读者理解该方法,按顺序来描绘块,并且由块指示的操作或动作不限于这样的顺序。相反,在其他示例性方法中,这样的动作可以以各种顺序执行或以其他方式发生。此外,某些操作可以与其他操作同时发生。例如,关于图5,与接收事务、将信息存储在队列中等相关的动作可以与与从队列中进行选择以及使用存储在所选择的队列中的信息来驱逐高速缓存数据相关的动作基本上同时发生。关于图3,标签处理器308和相关元件的操作可以与洗涤器302的操作基本上同时发生。此外,在其他示例性方法中,动作或操作中的一些可以被省略或与其他动作组合。

如框502所示,可以接收写入请求。写入请求可以由例如标签处理器(图3)接收。如框504所示,可以高速缓存与写入请求相关联的数据(例如,在上面关于图3描述的高速缓存数据存储器306中的位置中)。

如框506所示,可以基于与写入请求相对应的DRAM存储库来选择队列,并且可以将与写入请求相关联的信息存储在所选择的队列中。例如,链表LLQ 404(图4)可以由洗涤器302(图3)选择,并且指示高速缓存数据存储器306(图3中)中高速缓存有与写入请求相关联的数据的位置的高速缓存地址信息(例如,集合和路径)可以存储在所选择的LLQ 404中(图4中),如以上关于图4所述。

尽管出于清楚的目的未示出,但上文关于框502-506描述的动作可以基本上连续执行,而与其他动作无关。因此,LLQ 404(图4)可以随着接收到附加写入请求以及将与附加写入请求相关联的信息存储在队列中而填充。在本文中描述的示例性实施例中,与写入请求相关联的信息不仅可以包括高速缓存地址信息(例如,路径和集合),还可以包括页命中指示,如下所述。

在图6中,示出了链表队列或LLQ 600,其可以是上述数据存储结构102(图1)、队列304(图3)或LLQ 404(图4)中的每个的示例。LLQ 600可以包括从第一或“尾部”条目602A到最后或“头部”条目602N的任何数目的条目602(或有时称为链表“节点”)。由于链表原理是本领域普通技术人员所熟知的,为了清楚起见,诸如链接节点的指针等细节在图6中未示出。每个条目602可以包括高速缓存地址信息(例如,路径和集合)和页命中信息(例如,位)。页命中位指示该条目602是否是关于LLQ 600中的先前条目的页命中。

再次参考图3,标签处理器308对写入请求的处理可以包括控制(例如,经由高速缓存业务处理器314)将作为写入请求的主题的数据(有效载荷)存储在高速缓存数据存储器306中。标签处理器308对写入请求的处理还可以包括从写入请求的目标地址导出标签、路径和集合。如本领域普通技术人员所理解的,标签处理器308可以以常规方式导出该高速缓存地址信息。该路径和集合确定高速缓存数据存储器306中存储或高速缓存有数据的位置(即,高速缓存行)。标签可以存储在标签存储器360中,并且与后续事务请求(例如,读取请求)的目标地址一起使用,以唯一地标识后续事务请求是否被引导到相同的高速缓存数据。

当作为写入请求主题的数据被存储在高速缓存数据存储器306中的一定位置中时,洗涤器302(或者替代地,标签处理器308)也可以确定写入请求是否被引导到相同的DRAM页,即,在同一存储体中的同一存储库组中的同一存储库中的同一行,作为写入请求被引导到的队列304的尾部所指示的DRAM页。如果两个连续的写入请求被引导到同一DRAM页,则第二写入请求可以称为相对于第一写入请求的页命中,因为在DRAM行保持打开的同时,对该DRAM行的对应访问可以连续发生。

基于目标地址,洗涤器302(或者替代地,标签处理器308)可以确定DRAM行、存储库、存储库组和存储体地址。当作为写入请求的主题的数据被存储在高速缓存数据存储器306中的位置中时,标签处理器308可以向洗涤器302提供共同指示该位置的路径和集合。洗涤器302可以选择队列304中的对应队列并且添加新条目(或者关于图6,选择LLQ 602中的一个并且添加新的(尾部)条目或节点)。洗涤器302可以在新条目中存储路径和集合、以及指示位于该路径和集合处的高速缓存行数据是否是相对于先前条目的页命中的位。

返回图5,方法500的另一部分可以涉及控制到DRAM的数据传送。在与系统300(图3)的操作相关的实施例中,从高速缓存数据存储器306到DRAM的数据传送可以使用队列304来控制。

如框508所示,控制数据传送可以包括在队列304中进行选择。例如,再次参考图3,仲裁器312可以在队列304中进行选择。仲裁器312可以以重复或迭代的方式选择队列304,即,在选择前一队列304之后选择每个连续或下一队列304。仲裁器312可以部分基于从链表队列的头部条目获取的信息(例如,页命中(位)信息)来进行队列选择。注意,本文中对队列304的选择的引用还是指选择队列304中的条目,并且因此还是指选择由该条目标识的脏高速缓存行。仲裁器312可以基于例如以下中的一个或多个以这种方式选择队列304:序列;页命中信息;高速缓存脏度的阈值水平;所选择的存储体;等。仲裁器312的操作的这些方面在下文中关于图11-图13进行描述。

如框510(图5)所示,方法500可以包括驱逐由所选择的队列指示的高速缓存数据。例如,队列304(图3)可以由仲裁器312选择。高速缓存数据存储器306中由所选择的(以下也称为“赢家”)队列条目标识的位置中的脏高速缓存行可以被驱逐。洗涤器输出320可以(经由输入仲裁器318)向标签处理器308标识所选择的脏高速缓存行。标签处理器308继而可以向高速缓存业务处理器314标识所选择的脏高速缓存行。高速缓存业务处理器314然后可以控制脏高速缓存行从高速缓存数据存储器306的传送。

如图7所示,标签处理器702可以包括与存储或高速缓存作为写入请求的主题的数据相关的特征。标签处理器702可以是上述标签处理器308(图3)的示例。在所示示例中,这样的特征可以包括写入提示改变逻辑704、停滞逻辑706、牺牲搜索逻辑708、以及标签查找和可清理行搜索逻辑710。

写入提示改变逻辑704涉及一定特征,通过该特征,客户端的写入请求可以包括高速缓存“提示”,该“提示”指示与写入请求相关联的数据是要被高速缓存(“分配”提示)还是在没有高速缓存(“不分配”)提示的情况下通过系统300。示例性实施例可以通过在大多数情况下将“不分配”提示改变为“分配”来解决客户端对高速缓存提示的使用。

如图8所示,上述写入提示改变逻辑704(图7)可以被配置为控制方法800。传入事务(例如,来自仲裁器318(图3))可以被提供给写入提示改变逻辑704,并且以以下方式进行处理。

如框802所示,可以确定传入事务请求是否用于写入事务。本文中描述的示例性实施例涉及写入事务。然而,本文中描述的实施例的各方面可以应用于其他实施例中以读取事务。如果确定(框802)传入事务不是写入请求,则不执行方法800的剩余部分。

如果确定(框802)传入事务是写入请求,则可以确定所选择的队列(例如,上面关于图4描述的LLQ 404中的一个)是否已满,或者LLQ 404中是否没有剩余空间来存储新条目,如框804所示。在本文中描述的示例性实施例中,每个队列可以不具有预定大小或容量,并且只有当LLQ 404使用的存储容量未满时,才可以向队列添加新条目。然而,在其他实施例中,队列可以具有预定大小。如上所述,可以基于例如哪个DRAM存储库对应于与事务请求相关联的目标存储器地址来选择队列。如果确定(框804)所选择的队列已满,则不执行方法800的剩余部分。

如果确定(框804)所选择的队列还有空间用于存储新条目,则可以确定写入请求是否包括“不分配”高速缓存提示,如框806所示。如果确定(框806)写入请求不包括“不分配”高速缓存提示,则不执行方法800的剩余部分。例如,如果写入请求包括“分配”高速缓存提示,则方法800不改变该事务的高速缓存提示,因此该高速缓存提示保持为“分配”

如果确定(框806)写入请求包括“不分配”高速缓存提示,则该高速缓存提示可以改变为“分配”。然而,“不分配”高速缓存提示是否改变为“分配”可以取决于写入请求被引导到的子高速缓存的属性。如上所述,事务请求可以包括标识高速缓存系统可以被划分为的一定数目的子高速缓存中的子高速缓存的指示。一个这样的子高速缓存(可以称为写入子高速缓存或“WRSC”)可以用于高速缓存其位置在LLQ 404中被登记的有效载荷。每个子高速缓存可以具有本文中称为“写入缓冲区”属性的属性,并且一些子高速缓存的写入缓冲区属性可以不同于其他子高速缓存的写入缓冲区属性。写入缓冲区属性可以有两个值中的一个:真或假。如框808所示,可以确定写入请求被引导到的子高速缓存的写入缓冲区属性是否为真。如果确定写入缓冲区属性为真,则具有“不分配”提示的写入请求可以被分配给WRSC子高速缓存,并且相关联的信息可以如上所述被登记在(即,存储在)队列中。如果确定(框808)写入请求被引导到的子高速缓存的写入缓冲区属性不为真,即为假,则具有“分配”提示的写入请求可以在稍后(图8中未示出)在高速缓存数据停滞并且由标记查找和可清理行搜索逻辑710(图7)选择时被登记在所选择的队列中。下面描述了一种方法,通过该方法,可以用“停滞”指示来标记高速缓存数据,称为“停滞”方法。如果确定(框808)写入缓冲区属性为真,则该写入请求的“不分配”高速缓存提示可以被替换为“分配”高速缓存缓存提示,如框810所示。同样如框810所示,写入事务被引导到的子高速缓存的指示可以被替换为写入子高速缓存的指示。

再次简要参考图7,标签查找和可清理行搜索逻辑710涉及在写入提示改变逻辑704执行了上述方法800(图8)之后进一步处理写入请求。如下所述,这样的处理可以包括查找与写入请求相关联的标签、搜索用于存储或高速缓存与写入请求相关联的数据的位置等。

如图9A-图9B所示,标签查找和可清理行搜索逻辑710(图7)可以被配置为控制方法900。替代地或另外地,洗涤器302(图3)可以被配置为控制方法900的一部分。

尽管图9A-图9B中未示出,但在执行标签查找之前(如下所述),停滞逻辑706(图7)可以操作以检查由标签查找操作访问的集合中的每个高速缓存行的时长。如果高速缓存行的时长超过预定阈值,则停滞标志可以设置为真。高速缓存行的时长可以通过将当前时间与在高速缓存中分配高速缓存行时与该高速缓存行相关联的时间戳进行比较来计算。每个子高速缓存可以有自己的当前时间,该时间在该子高速缓存中的每个新分配中进行。

如框902所示,可以确定写入请求是否导致高速缓存命中。(注意,“高速缓存命中”与上述DRAM“页命中”不同。)写入请求是否导致高速缓存命中可以以常规方式确定。例如,如本领域普通技术人员所理解的,对于N路集合关联高速缓存,每个集合包含N个路径或关联度。每种路径包括数据块、标签、以及上述有效标志、脏标志、可清理标志和停滞停滞标志。集合和路径可以根据与写入请求相关联的目标地址的一部分来确定。在示例性实施例中,然后可以从标签存储器310(图3)读取标签和相关联的标志。(在示例性实施例中,高速缓存数据(行)可以单独存储在高速缓存数据存储器306中。)对于集合中的每个路径,将从标签存储器310读取的标签与写入请求的目标地址的标签位进行比较,并且如果它们匹配,并且如果有效标志为真,则确定写入请求导致高速缓存命中。注意,上述目标地址解码还可以标识写入请求被引导到的DRAM存储体、存储库组和存储库,从而标识或选择LLQ 404中的一个(其在本文中可以称为LLQ 404或所选择的LLQ 404)。

如果确定(框902)写入请求没有导致高速缓存命中,则可以执行进一步的处理以确定高速缓存数据存储器306(图3)中可以存储数据的位置,并且向LLQ 404添加指示该位置包含脏数据的条目。在该进一步处理之前,可以确定写入请求是否包括“分配”高速缓存提示,如框904所示。

如果确定(框904)写入请求包括“分配”高速缓存提示,则可以执行牺牲搜索方法。框906指示执行下面进一步描述的牺牲搜索方法。执行牺牲搜索方法的结果可以是高速缓存数据存储器306(图3)中的“牺牲”高速缓存行的位置。然而,牺牲搜索方法的另一可能结果可以是没有找到牺牲高速缓存行。此外,牺牲搜索方法可以更倾向于选择干净牺牲行,以使脏行驱逐的发生最小化,该脏行驱逐会污染与洗涤器操作连续的DRAM感知写回流。

如框908所示,可以确定是否找到了牺牲高速缓存行。如果确定(框910)找到了牺牲高速缓存行,则可以为与写入请求相关联的数据分配该高速缓存行。因此,与写入请求相关联的数据被存储在高速缓存数据存储器306中的所分配的高速缓存行中。此外,如下所述,标签存储器310可以被更新,并且条目可以被添加到LLQ 404。向LLQ 404添加条目可以以一些另外的条件为条件,其中的一个是LLQ 404还未满,如框912所示。

返回框902,如果确定写入请求导致命中,则可以如框914所示确定命中是否在“干净”行上(即,“脏”标志具有假状态)。如果确定命中在干净行上,则方法900可以返回到上述框912,其中可以确定LLQ 404是否已满。如果确定(框912)LLQ 404已满,则方法900针对该写入请求的处理而结束,并且不向LLQ 404添加条目。

如果确定(框912)LLQ 404未满,则可以确定条件的另一组合,如框916所示:高速缓存行是脏的(即,脏标志具有真状态),并且高速缓存行可清理(即,可清理标志具有真状态),并且上述写入缓冲区属性具有真状态。如上所述,真可清理标志表示,高速缓存行尚未在LLQ 404中登记。

如果上述条件组合被确定(框916)为真,则可以向LLQ 404添加条目,如框918所示。LLQ 404的新的“头部”(包括所分配的高速缓存行的集合和路径地址)可以被“推送”或添加到LLQ 404,从而有效地将先前是头部的条目放置在新的头部之后。可以将新的头部的行信息与前一头部的行信息进行比较,以确定页命中标志是否为真。页命中标志也被推入队列。标签存储器310中与所分配的高速缓存行相关联的位置中的可清理标志可以被设置为假状态。已经以上述方式处理的写入请求可以表示方法900相对于该写入请求的结束。

然而,如果根据上述框914确定高速缓存命中不在干净行上,或者如果根据上述框904确定高速缓存提示不是“分配”,或者如果根据上述框908确定没有找到牺牲高速缓存行,或者如果确定上面关于框916描述的条件组合不成立,则方法900可以继续(参见图9B),如框920所示。

然后可以确定(框920)LLQ 404是否已满。如果确定LLQ 404已满,则方法900针对该写入请求的处理结束,并且不向LLQ 404添加条目。

如果确定(框920)LLQ 404未满,则如框922所示,可以确定该集合是否具有具有以下条件组合的任何高速缓存行:脏、可清理和停滞(即,脏、可清理和停滞标志都为真)。如果条件组合被确定为真,则可以选择那些高速缓存行中的一个(例如,找到的第一这样的高速缓存行)以添加到LLQ 404中的脏高速缓存行的列表中,如框924所示。返回到框918(图9A),然后可以将该高速缓存行的条目添加到LLQ 404。

如图10所示,“牺牲搜索”方法1000可以是由框906指示的上述方法900(图9A)的子方法的示例。如框1002所示,可以确定集合中是否存在一个或多个无效行(即,“有效”标志为假)。如果确定(框1002)集合中存在一个或多个无效行,则可以选择这些无效行中的一个作为牺牲行,如框1004所示。如果找到多于一个这样的行,则可以根据框1004来选择找到的第一这样的行。

然而,如果确定(框1002)集合中不存在无效行,则可以确定集合中是否存在一个或多个干净的停滞的行(即,“干净和停滞”标志为真),如框1006所示。如果确定(框1006)集合中存在一个或多个干净的停滞的行,则可以选择这些干净的停滞的行中的一个作为牺牲行,如框1008所示。如果找到多于一个这样的行,则可以根据框1008来选择找到的第一这样的行。应当理解,找到干净的停滞的行的可能性很高,因为洗涤器确保高速缓存中的脏行水平较低,并且停滞过程确保在每个集合中找到停滞行的概率很高。

然而,如果确定(框1006)集合中不存在干净的停滞的行,则可以确定集合中是否存在一个或多个脏的停滞的行(如框1010所示)。如果确定(框1010)集合中存在一个或多个脏的停滞的行,则可以选择这些脏的停滞的行中的一个作为牺牲行,如框1012所示。如果找到多于一个这样的行,则可以根据框1012来选择找到的第一这样的行。应当理解,选择脏牺牲将导致脏驱逐,并且因此污染与洗涤器操作连续的DRAM感知写回流。

然而,如果确定(框1010)集合中不存在干净的停滞的行,则可以确定集合中是否存在优先级低于传入行(即,正在处理的写入请求的优先级)的一个或多个干净行,如框1014所示。如上所述,写入请求的“优先级”可以是指写入请求被引导到的子高速缓存的优先级,因为每个子高速缓存相对于其他子高速缓存可以具有预定优先级。如果确定(框1014)集合中存在优先级低于传入行的一个或多个干净行,则可以选择那些具有最低优先级的行中的一个作为牺牲行,如框1016所示。如果两个或更多个行每个具有最低优先级,则可以根据框1016来选择找到的第一这样的行。

然而,如果确定(框1014)集合中不存在优先级低于传入行的干净行,则可以确定集合中是否存在优先级低于传入行的一个或多个脏行,如框1018所示。如果确定(框1018)集合中存在优先级低于传入行的一个或多个脏行,则可以选择这些行中的一个作为牺牲行,如框1020所示。如果找到多于一个这样的行,则可以根据框1020来选择找到的第一这样的行。然而,如果确定(框1018)集合中不存在优先级低于传入行的干净行,则方法1000的结果可以是没有找到牺牲行。

一种替代的牺牲搜索方法(未示出)可以类似于上述方法1000(图10),不同之处在于,可以省略脏行作为牺牲行候选。因此,在替代方法中,可以省略框1010、1012、1018和1020。也就是说,方法流程可以从框1006中的“否”确定直接进行到框1014。

上述方法800(图8)、900(图9A-图9B)和1000(图10)涉及高速缓存与传入事务请求相关联的数据以及在LLQ 404(图4)中登记脏高速缓存行。因此,方法800、900和1000还可以表示上面关于方法500(图5)的框502、504和506描述的处理的示例。

如图11所示,以流程图的形式描绘了与使用LLQ 404(图4)对将高速缓存数据传送到DRAM的控制相关的方法1100。方法1100可以表示上面关于方法500(图5)的框508和510描述的处理的一部分。方法1100可以表示基于序列在子组404A或404B(图4)的LLQ 404中进行选择的示例。方法1100可以控制在图4中由队列选择逻辑408A和408B概念性地表示的选择。第一队列选择逻辑408A和第二队列选择逻辑408B(图4)可以彼此独立地操作。换言之,方法1100的两个实例可以彼此独立并且并发地操作,方法1100的第一实例控制由第一队列选择逻辑408A表示的选择,方法1100的第二实例控制由第二队列选择逻辑408B表示的选择。选择逻辑406(图4)可以被配置为控制方法1100的两个实例。

如框1102所示,可以确定页命中列表计数(Page_Hit_List_Count)是否大于或等于预定阈值数目(LLQ_PH_TH)。页命中列表计数是头部条目(页命中位)指示页命中的LLQ404(图4)的数目。如果确定(框1102)页命中列表计数大于或等于阈值数目,则可以确定是否存在一个或多个LLQ 404具有指示与“最后赢家”(即,方法1100最近选择的LLQ 404)不同的存储库组中的页命中的头部条目,如框1104所示。如果由于框1104中的确定是最初开始方法1100之后的第一次迭代而不存在“最后赢家”,则框1104的确定可以默认为结果“是”。如果确定(框1104)存在一个或多个LLQ 404具有指示与“最后赢家”不同的存储库组中的页命中的头部条目(或者该确定默认为“是”),则当前列表(Current_list)可以递增。方法1100维护到可以称为“当前列表”的列表或LLQ 404(图4)中的一个的记录或指针。

递增当前列表表示,序列中的下一LLQ 404成为新的当前列表。例如,如果当前列表是BG0中的存储库0的LLQ 404,则序列中的下一列表是BG1中的存储库0的LLQ 404。换言之,将BG0中的Bank_0的LLQ 404称为第一LLQ 404,将BG3中的Bank_3的LLQ 404称为第16LLQ 404时,则列表可以从第一LLQ 404递增到第二LLQ 404等,再递增到第16LLQ 404。根据框1106执行的递增是模16。也就是说,如果第16LLQ 404(即,BG3中的Bank_3)是当前列表,则递增当前列表表示第一LLQ 404(即,BG0中的Bank_0)变为新的当前列表。可以注意到,由方法1100表示的序列基于LLQ 404中的轮循序列。尽管常规的轮循序列将在不考虑其他条件的情况下从每个LLQ 404前进到下一LLQ 404,但是方法1100表示基于页命中信息的常规轮循序列的修改。

如框1108所示,在递增当前列表之后,然后可以确定当前列表(头部条目)是否指示页命中,并且该页命中是否在与最后赢家不同的存储库组中。如果确定当前列表指示页命中并且在与最后赢家不同的存储库组中,则选择当前列表,如框1110所示。参考图4,标识第一选择列表的信息在概念上是第一选择逻辑408A的输出,而标识第二选择列表的信息在概念上是第二选择逻辑408B的输出。该方法流程以迭代的方式从框1110返回到框1102。注意,出于框1104、1108等的目的,所选择的列表也成为新的“最后赢家”。

如果确定(框1102)页命中列表计数不大于或等于阈值数目,即页命中列表计数小于阈值数目,则可以向当前列表分配保存列表的值(Saved_List)。也就是说,保存列表将成为新的当前列表。如果由于方法流在方法1100的第一次迭代中已经到达框1112而不存在“保存列表”,则保存列表可以与当前列表相同。也就是说,当方法1100开始操作时,保存列表最初可以被设置为与当前列表相同的列表。此外,返回到框1104,如果确定在与最后赢家不同的存储库组中不存在具有指示页命中的头部条目的LLQ 404,则方法1100继续,如上文关于框1112所述。

如框1114所示,在保存列表变为新的当前列表(框1112)之后,可以递增当前列表。然后,如框1116所示,然后可以确定当前列表是否为空。如果确定当前列表为空,则可以递增当前列表(框1114),直到当前列表不为空。

如框1118所示,确定(框1116)当前列表不为空,则可以确定与最后赢家不同的存储库组中是否存在一个或多个列表、或者当前列表是否在与最后赢家不同的存储库组中。如果确定与最后赢家不同的存储库组中不存在列表、或者当前列表在与最后赢家不同的存储库组中,则当前列表可以变为保存列表(即,保存当前列表以用于方法1100的下一次迭代),如框1120所示。然而,如果确定与最后赢家不同的存储库组中存在一个或多个列表并且当前列表不在与最后赢家的不同存储库组中,则当前列表可以递增,并且方法1100可以继续,如上文关于框1114所述。

如图12所示,以流程图的形式描绘了与对存储体的选择相关的方法1200。方法1200可以表示上面关于方法500(图5)的框508描述的处理的一部分。进一步参考图4,选择逻辑406可以被配置为控制方法1200。方法1200选择存储体(例如,在示例性实施例中为Rank_0或Rank_1)。存储体选择逻辑410可以根据方法1200来配置。存储体选择逻辑410因此被配置为选择存储体。在图12中,在框1202指示的确定开始时先前选择的Rank_0和Rank_1中的任何一个称为“当前存储体”(Current_Rank),并且Rank_0和Rank_2中的不是当前存储体的任何一个称为为“另一存储体”(Other_Rank)。当前存储体可以在通过方法1200的第一次迭代之前初始化为任一存储体。在图12中,术语“列表扩展”(List_Spread)是指在不为空的存储体中的LLQ 404的数目。术语“最小列表扩展”是指可以预先确定或固定的阈值数目。

如框1202所示,可以确定第一条件:当前存储体的列表扩展是否小于最小列表扩展,并且另一存储体的列表扩展是否大于或等于最小列表扩展。同样如框1202所示,可以确定第二条件:当前存储体的列表扩展等于零。并且另一存储体的列表扩展不等于零。如果确定第一条件或第二条件中的任一个为真,则当前存储体可以被改变或切换到另一存储体,如框1204所示。也就是说,当前存储体变为另一存储体,反之亦然。在框1204之后,方法1200可以返回到框1202。然而,如果确定(框1202)第一条件和第二条件都不成立,则方法1200可以返回到框1202,而不改变当前存储体。也就是说,只要第一条件和第二条件都不成立,由框1202指示的确定可以基本上连续地重复而不改变存储体。

再次简要参考图4,存储体选择逻辑410的输出是标识由第一队列选择逻辑408A选择的Rank_0中的LLQ 404或由第二队列选择逻辑408B选择的Rank_1中的LLQ 404的指示。在所示实施例中,仅当选择启用逻辑412被启用时,存储体选择逻辑410的输出变为选择逻辑406的输出(在概念上由图4中的逻辑AND符号表示);如果选择启用逻辑412未被启用,则选择逻辑406的输出是当前未选择LLQ 404的指示。在所示实施例中,下文关于图13描述的洗涤器启用或洗涤器激活方法可以控制选择启用逻辑412是否被启用。然而,应当理解,这样的洗涤器启用或激活方法可以启用与使用LLQ 404控制高速缓存数据到DRAM的传送相关的任何上述逻辑和方法;在由队列选择逻辑408A和408B进行队列选择以及存储体选择逻辑410进行存储体选择之后启用选择逻辑406的输出作为紧接在输出之前的最终动作仅旨在作为示例。

方法1300(图13)可以控制洗涤器302(图3)是活动的还是非活动的,因为在示例性实施例中,选择逻辑406(图4)有效地控制洗涤器操作。当洗涤器302是活动的时,它标识脏的高速缓存数据以用于驱逐到DRAM。驱逐(或“清理”)可以减少高速缓存的脏度。方法1300试图调节洗涤器活动的水平,以将高速缓存脏度的水平保持在高阈值(HT)与低阈值(LT)之间的范围或窗口内。该特征在读取和写入业务相互竞争存储器控制器带宽的操作示例中可以是有益的。例如,在PCD中,来自相机客户端的写入请求业务可以与来自显示客户端的读取请求业务竞争。

选择逻辑406(图4)或洗涤器302(图3)的其他元件可以被配置为监测所有LLQ 404中的链表条目的总数,作为高速缓存脏度的度量。例如,所有LLQ 404中的条目总数的计数在添加(或“推送”)条目时可以增加,而在结合驱逐来移除(或“弹出”)条目时可以减少。在方法1300中,高速缓存脏度的这种度量称为“LLQ水平”。

尽管为了清楚起见,图13或本文的其他流程图中未示出初始化,但洗涤器302(图3)可以被初始化为非活动状态。如框1302所示,可以确定LLQ水平是否大于或等于预定最小阈值(即,“最底层阈值”或RBT)。最小阈值可以根据经验来确定。例如,可以统计地确定,如果在存储体中用于驱逐的候选高速缓存行的池保持在80个候选之上,则结果很有可能是大约16的存储库扩展。由框1302指示的确定可以重复,直到可以确定LLQ水平大于或等于最小阈值为止。如果确定LLQ水平大于或等于最小阈值,则可以确定洗涤器是否是活动的,如框1304所示。如果确定洗涤器不活动,则可以确定LLQ水平是否大于或等于高阈值、或者存储器控制器(MCreadOT)中未决的读取请求的数目是否小于预定或固定阈值(readOTthreshold),如框1306所示。如果确定LLQ水平大于或等于高阈值、或者存储器控制器(MCreadOT)中未决的读取请求的数目小于预定或固定阈值(readOTthreshold),则洗涤器可以被激活或启用,如框1308所示。方法1300然后可以返回到上述框1302。如果确定LLQ水平不大于或等于高阈值,并且存储器控制器中未决的读取请求的数目(MCreadOT)不小于预定固定阈值(readOTthreshold),则方法1300可以返回到上述框1302。

如果确定(框1304)洗涤器是活动的,则可以确定LLQ水平是否小于低阈值、或者存储器控制器(MCreadOT)中未决的读取请求的数目是否大于或等于预定固定阈值,如框1310所示。如果确定LLQ水平小于低阈值、或者存储器控制器中未决的读取请求的数目(MCreadOT)大于或等于预定或固定阈值(readOTthreshold),则洗涤器可以被停用或禁用,如框1312所示。方法1300然后可以返回到上述框1302。如果确定LLQ水平不小于低阈值并且存储器控制器中未决的读取请求的数目(MCreadOT)不大于或等于预定或固定阈值(readOTthreshold),则方法1300可以返回到上述框1302。

上述与处理写入请求相关的方法500(图5)、800(图8)、900(图9A-图9B)、1000(图10)、1100(图11)和1200(图12)可以称为“DRAM感知”,因为它们利用了DRAM的延迟减少组织。可以为其他类型的存储器事务的DRAM感知处理提供类似的方法。例如,为了处理读预取请求,代替如上文关于例如方法500所描述的在所选择的LLQ或其他数据存储结构中存储标识脏数据的高速缓存位置的信息,可以存储读预取要求。并且,代替如上文关于例如方法500所描述的以DRAM感知的顺序驱逐由存储在所选择的LLQ或其他数据存储结构中的内容所标识的高速缓存行,可以以这种DRAM感知顺序将预取请求从LLQ或其他数据存储结构发送到DRAM(经由存储器控制器)。

如图14所示,用于控制数据高速缓存的方法1400以流程图的形式示出。如框1402所示,方法1400可以包括接收DRAM事务请求。如框1404所示,该方法还可以包括将与事务请求相关联的信息存储在以与DRAM组织相对应的方式而组织的数据存储结构中。如框1406所示,方法1400还可以包括使用数据存储结构来控制到DRAM的数据传送。

如图15所示,用于以DRAM感知方式控制数据高速缓存的系统和方法的示例性实施例可以在便携式计算设备(“PCD”)1500中提供。为了清楚起见,数据总线或其他数据通信互连在图15中未示出。针对上下文描述了一些示例性互连,其中的一些可以表示经由这样的总线或互连的通信。然而,应当理解,更一般地,下面描述的各种元件可以经由一个或多个总线或系统互连彼此通信。

PCD 1500可以包括SoC 1502。SoC 1502可以包括CPU 1504、GPU 1506、DSP 1507、模拟信号处理器1508或其他处理器。CPU 1504可以包括多个核,诸如第一核1504A、第二核1504B等、直到第N核1504N。

显示器控制器1510和触摸屏控制器1512可以耦合到CPU 1504。SoC 1502外部的触摸屏显示器1514可以耦合到显示器控制器1510和触摸屏控制器1512。PCD 1500可还包括耦合到CPU 1504的视频解码器1516。视频放大器1518可以耦合到视频解码器1516和触摸屏显示器1514。视频端口1520可以耦合到视频放大器1518。通用串行总线(“USB”)控制器1522也可以耦合到CPU 1504,并且USB端口1524可以耦合到USB控制器1522。订户身份模块(“SIM”)卡1526也可以耦合到CPU 1504。

一个或多个存储器可以耦合到CPU 1504。一个或多个存储器可以包括易失性存储器和非易失性存储器。易失性存储器的示例包括静态随机存取存储器(“SRAM”)1528以及动态RAM(“DRAM”)1530和1531。这样的存储器可以在SoC 1502外部,诸如DRAM 1530,或者在SoC 1502内部,诸如DRAM 1531。耦合到CPU 1504的DRAM控制器1532可以控制向DRAM 1530和1531写入数据以及从DRAM 1530和1531读取数据。在其他实施例中,这样的DRAM控制器可以被包括在处理器内,诸如CPU 1504。DRAM 1530和1531可以是DRAM 208(图2)的示例,或者更一般地,是上面参考图1-图14的任何DRAM的示例。可以是高速缓存系统204(图2)的示例的高速缓存系统1533可以耦合到DRAM控制器1532。

立体声音频CODEC 1534可以耦合到模拟信号处理器1508。此外,音频放大器1536可以耦合到立体声音频CODEC 1534。第一立体声扬声器1538和第二立体声扬声器1540可以分别耦合到音频放大器1536。此外,麦克风放大器1542可以耦合到立体声音频CODEC 1534,并且麦克风1544可以耦合到麦克风放大器1544。调频(“FM”)无线电调谐器1546可以耦合到立体声音频CODEC 1534。FM天线1548可以耦合到FM无线电调谐器1546。此外,立体声头戴式耳机1550可以耦合到立体声音频CODEC 1534。可以耦合到CPU 1504的其他设备包括一个或多个数字(例如,CCD或CMOS)相机1552。

调制解调器或RF收发器1554可以耦合到模拟信号处理器1508和CPU 1504。RF开关1556可以耦合到RF收发器1554和RF天线1558。此外,小键盘1560、具有麦克风的单声道头戴式耳机1562、和振动器设备1564可以耦合到模拟信号处理器1508。

SoC 1502可以具有一个或多个内部或片上热传感器1570A,并且可以耦合到一个或多个外部或片外热传感器1570B。模数转换器(“ADC”)控制器1572可以将热传感器1570A和1570B产生的电压降转换为数字信号。电源1574和电源管理集成电路(“PMIC”)1576可以向SoC 1502供电。

固件或软件可以存储在任何上述存储器中,诸如DRAM 1530或1531、SRAM 1528等,或者可以存储在可以由执行软件或固件的处理器硬件直接访问的本地存储器中。这种固件或软件的执行可以控制任何上述方法的各方面,或者配置任何上述系统的各方面。其中以计算机可读形式存储有固件或软件以供处理器硬件执行的任何这样的存储器或其他非暂态存储介质都可以是“计算机可读介质”的示例,正如该术语在专利词典中所理解的那样。

对于本发明所属领域的普通技术人员来说,替代实施例将变得很清楚。因此,尽管已经详细地示出和描述了所选择的方面,但是应当理解,可以对其进行各种替换和改变。

以下编号条款中描述了实现示例:

1.一种用于控制数据高速缓存的系统,包括:

多个数据存储结构,集体具有与动态随机存取存储器(DRAM)的结构组织相对应的组织;以及

高速缓存控制器系统,被配置为:

接收多个事务请求;

将与事务请求相关联的数据存储在基于与每个事务请求相关联的存储器地址而从多个数据存储结构中选择的一个或多个数据存储结构中;以及

使用多个数据存储结构来控制到DRAM的数据传送。

2.根据条款1的系统,其中多个数据存储结构中的每个数据存储结构是链表。

3.根据条款1的系统,其中多个数据存储结构中的每个数据存储结构对应于DRAM的多个存储库中的一个存储库。

4.根据条款3的系统,其中高速缓存控制器系统被配置为:

接收具有相关联的存储器地址的多个DRAM写入请求;以及

将与多个DRAM写入请求相关联的高速缓存地址信息存储在基于与DRAM写入请求相关联的存储库地址而选择的对应的所选择的数据存储结构中。

5.根据条款4的系统,其中高速缓存控制器系统被配置为通过被配置为进行以下操作来控制到DRAM的数据传送:

在多个数据存储结构中进行选择;以及

从由存储在所选择的数据存储结构中的数据指示的数据高速缓存中的位置向DRAM驱逐高速缓存数据。

6.根据条款5的系统,其中高速缓存控制器系统被配置为基于序列在多个数据存储结构中进行选择。

7.根据条款6的系统,其中序列基于轮循选择。

8.根据条款7的系统,其中序列还基于存储在数据存储结构中的DRAM页命中信息。

9.根据条款5的系统,其中高速缓存控制器系统被配置为在与DRAM的第一存储体相关联的多个数据存储结构的第一子集和与DRAM的第二存储体相关联的多个数据存储结构的第二子集之间进行选择。

10.根据条款5的系统,其中高速缓存控制器系统被配置为基于高速缓存脏度的至少一个阈值水平选择性地启用高速缓存数据的驱逐。

11.一种用于控制数据高速缓存的方法,包括:

接收多个事务请求;

将与事务请求相关联的数据存储在基于与每个事务请求相关联的存储器地址而从多个数据存储结构中选择的一个或多个数据存储结构中;以及

使用多个数据存储结构来控制到动态随机存取存储器(DRAM)的数据传送,其中多个数据存储结构集体具有与DRAM的结构组织相对应的组织。

12.根据条款11的方法,其中存储与事务请求相关联的数据包括将与事务请求相关联的数据存储在多个链表中。

13.根据条款11的方法,其中多个数据存储结构中的每个数据存储结构对应于DRAM的多个存储库中的一个存储库。

14.根据条款13的方法,其中:

接收多个事务请求包括接收具有相关联的存储器地址的多个DRAM写入请求;以及

存储与事务请求相关联的数据包括将与多个DRAM写入请求相关联的高速缓存地址信息存储在基于与DRAM写入请求相关联的存储库地址而选择的对应的所选择的数据存储结构中。

15.根据条款14的方法,其中控制到DRAM的数据传送包括:

在多个数据存储结构中进行选择;以及

从由存储在所选择的数据存储结构中的数据指示的数据高速缓存中的位置向DRAM驱逐高速缓存数据。

16.根据条款15的方法,其中在多个数据存储结构中进行选择基于序列。

17.根据条款16的方法,其中序列基于轮循选择。

18.根据条款17的方法,其中序列还基于存储在数据存储结构中的DRAM页命中信息。

19.根据条款15的方法,其中在多个数据存储结构中进行选择包括在与DRAM的第一存储体相关联的多个数据存储结构的第一子集和与DRAM的第二存储体相关联的多个数据存储结构的第二子集之间进行选择。

20.根据条款15的方法,其中控制到DRAM的数据传送包括基于高速缓存脏度的至少一个阈值水平选择性地启用高速缓存数据的驱逐。

21.一种用于控制数据高速缓存的系统,包括:

用于接收多个事务请求的装置;

用于将与事务请求相关联的数据存储在基于与每个事务请求相关联的存储器地址而从多个数据存储结构中选择的一个或多个数据存储结构中的装置;以及

用于使用多个数据存储结构来控制到动态随机存取存储器(DRAM)的数据传送的装置,其中多个数据存储结构集体具有与DRAM的结构组织相对应的组织。

22.根据条款21的系统,其中用于存储与事务请求相关联的数据的装置包括用于将与事务请求相关联的数据存储在多个链表中的装置。

23.根据条款21的系统,其中多个数据存储结构中的每个数据存储结构对应于DRAM的多个存储库中的一个存储库。

24.根据条款23的系统,其中:

用于接收多个事务请求的装置包括用于接收具有相关联的存储器地址的多个DRAM写入请求的装置;以及

用于存储与事务请求相关联的数据的装置包括用于将与多个DRAM写入请求相关联的高速缓存地址信息存储在基于与DRAM写入请求相关联的存储库地址而选择的对应的所选择的数据存储结构中的装置。

25.根据条款24的系统,其中用于控制到DRAM的数据传送的装置包括:

用于在多个数据存储结构中进行选择的装置;以及

用于从由存储在所选择的数据存储结构中的数据指示的数据高速缓存中的位置向DRAM驱逐高速缓存数据的装置。

26.根据条款25的系统,其中用于在多个数据存储结构中进行选择的装置基于序列。

27.根据条款26的系统,其中序列基于轮循选择。

28.根据条款27的系统,其中序列还基于存储在数据存储结构中的DRAM页命中信息。

29.根据条款25的系统,其中用于在多个数据存储结构中进行选择的装置包括用于在与DRAM的第一存储体相关联的多个数据存储结构的第一子集和与DRAM的第二存储体相关联的多个数据存储结构的第二子集之间进行选择的装置。

30.根据条款25的系统,其中用于控制到DRAM的数据传送的装置包括用于基于高速缓存脏度的至少一个阈值水平选择性地启用高速缓存数据的驱逐的装置。

31.一种用于控制数据高速缓存的计算机可读介质,包括其上存储有计算机可执行形式指令的非暂态计算机可读介质,指令在由处理器执行时,将处理器配置为:

接收多个事务请求;

将与事务请求相关联的数据存储在基于与每个事务请求相关联的存储器地址而从多个数据存储结构中选择的一个或多个数据存储结构中;以及

使用多个数据存储结构来控制到动态随机存取存储器(DRAM)的数据传送,多个数据存储结构中的每个数据存储结构对应于DRAM的多个存储库中的一个存储库。

32.根据条款31的计算机可读介质,其中处理器被配置为通过被配置为将与事务请求相关联的数据存储在多个链表中来存储与事务请求相关联的数据。

相关技术
  • 用于基于高速缓存类型来提供高速缓存一致性的技术
  • 使用动态随机存取存储器(DRAM)高速缓存指示符高速缓存存储器以提供可扩展DRAM高速缓存管理
  • 用于DRAM高速缓存标签预取器的方法和装置
技术分类

06120116501174