用于有效使用高速缓存及存储器的指令辅助高速缓存管理的制作方法

文档序号:85150阅读:225来源:国知局
专利名称:用于有效使用高速缓存及存储器的指令辅助高速缓存管理的制作方法
技术领域
本发明领域一般涉及存储器的高速缓存,尤其涉及但不专门涉及利用由指令提示(hint)标识的高速缓冲存储器策略来管理高速缓冲存储器的技术。
背景技术
处理网络业务中最重要的考虑因素之一是分组的吞吐量(即带宽)。网络处理器以及类似的装置被设计为每秒钟高效处理大量的分组。为了处理分组,网络处理器(和/或使用网络处理器的交换设备)需要从能指示分组目的地、服务类别等的分组报头提取数据,还需要在存储器中存储有效负载数据,执行各种系统开销功能,等。
通常,上述分组处理操作需要多次存储器存取。结果,分组的吞吐量固有地和存储器(存取)等待时间有关。理想地,所有的存储器存取都经由可能的最快方案。例如,新式的片上(即在处理器管芯上)静态随机存取存储器(SRAM)提供的存取速度是10纳秒或更少。然而,这种类型的存储器非常昂贵(从芯片实际的等级和芯片产量来看),因此典型地片上静态随机存取存储器的数量非常小。典型的新式网络处理器利用少量的片上静态随机存取存储器作为擦除存储器等。
第二快的存储器类型是芯片外(即外部的)静态随机存取存储器。因为这种存储器是芯片外的,(相比于片上存储器)存储较慢,因为它必须经由网络处理器与静态随机存取存储器存储之间的接口来存取,其中该接口要引入自身的等待时间。芯片外静态随机存取存储器通常被新式的网络处理器用来存储和处理分组元数据,以及存储其它的临时处理相关的信息。
典型地,各种类型的芯片外动态随机存取存储器(DRAM)被用作“大容量(bulk)”存储器。动态随机存取存储器比静态随机存取存储器慢(因为DRAM和SRAM单元之间在设计上和操作上的物理区别),且必须每几个时钟周期刷新,占据了额外的系统开销。如前所述,因为它是芯片外的,所以它也需要接口(例如专用的或共享的总线)来存取它。大多数现在的网络处理器设计中,使用性能增强的DRAM存储器存储设备,包括RDRAM(RambusDRAM)或DDR DRAM(双倍数据速率),RLDRAM(减少等待时间的RAM)等。
通常,DRAM存储器存取产生与许多其他处理活动例如数字计算相关的更显著的处理等待时间。为了解决这个问题,利用各种存储器高速缓存模式。高速缓存模式的基本观点是在具有比更大的经常存储数据的存储设备(时间局部性)更快的存取速度的较小存储器设备中高速缓存最近的存储器存取(或基于预定义高速缓存策略的其它数据)。同样,高速缓存策略也高速缓存物理上接近所需的高速缓存线路的数据,因为那个数据会在不远的将来用到(空间局部性)。
高速缓存的另一个方面涉及存储器一致性。在一致的存储器体系结构下,计算系统或装置中的所有部件都被确保存取相同的数据值。存储器一致性确保当处理器或存取共享的存储器资源的其他部件存取时,移入或移出存储器的数据不会出现不同的值。在最简单的方法中,整个系统中在任何时候仅有任何特定数据的一种副本,且一次仅有一个部件可以存取那个数据。虽然这种模式保证了存储器一致性,但是其并不允许存储器高速缓存。因为存储器高速缓存包括使至少一个数据副本存储在共享的内存空间中且接着允许该副本在共享内存空间的外部被修改,因此需要一种机制来确保只可以存取给定数据的有效(最近值)版本。这个问题典型地通过利用多个公知存储器和高速缓存一致性模式中的一种来解决,该高速缓存一致性模式由处理器和/或存储控制器来管理,例如通过使用存储器回写模式来管理。
当结合附图,本发明如前所述的方面以及许多附带的优点将通过参照下面的详细描述而变得更容易想到且更容易理解,其中在各视图中除非另外指定,相同的附图标记表示相同的部件图1是借助在此可实施的实施例的示范性执行环境的示意图;图2是图示在处理由入口设备接收的分组期间执行的各操作的流程图;图3a是图示根据一个实施例的存储器写期间执行的操作与逻辑流程图,在该实施例中,不使用对于剩余高速缓冲存储器线的存储器读和存储器填充来向部分高速缓冲存储器线写入临时数据;
图3b是图示图3a过程的扩展的流程图,进一步包括高速缓冲存储器线软锁状态的使用;图4a是图示根据一个实施例的存储器读期间执行的操作与逻辑流程图,在该实施例中,在高速缓冲存储器未命中的情况下没有分配高速缓冲存储器线就从存储器直接读取数据;图4b是图示图4a的过程的扩展的流程图,进一步包括高速缓冲存储器线软锁状态的使用;图5是图示由程序员执行的操作以形成包含实现临时数据高速缓存策略的提示的指令的流程图;图6是一种图示示范性注记语句的伪码列表,用以使编译器来代替包含实现临时数据高速缓存策略的提示的修改指令;图7是图示实现临时数据高速缓存策略的一个实施例的高速缓冲存储器体系结构的示意图;图8是一种网络处理单元和线路卡的示意图,进一步示出了图1所示执行环境的细节。
具体实施方式这里描述了用于为有效利用高速缓冲存储器及存储器而使用指令辅助高速缓冲存储器管理的方法和装置的实施例。在下面的说明中,提出许多特定细节来帮助彻底了解本发明实施例。但是,相关领域的技术人员可以想到,缺少一个或多个这些特定的细节,或利用其他方法、组件、材料等,本发明也可以实施。在其他的例子中,未示出或未详细描述熟知的结构、材料、或操作以避免模糊本发明的方面。
全文中提及的描述“一个实施例”或“一实施例”指的是结合本发明的一个实施例描述的特殊的特征、结构、或特性特征包含在本发明的至少一个实施例中。因此,全文中各处存在的词组“在一个实施例中”或“在一实施例中”未必都指的是相同的实施例。而且,特殊的特征、结构、或特性可以采用任何恰当的方式组合在一个或多个实施例中。
现在,根据实施例描述的方面,公开一种经由指令辅助的高速缓冲存储器管理来支持有效利用高速缓冲存储器和存储器的技术。该技术减少了存储器的带宽消耗(通过消除大量典型地结合传统的高速缓存策略执行的存储器读和存储器写),以及增加高速缓冲存储器的有效性。此外,该技术以程序员能够基于各种使用情况剪裁高速缓冲存储器行为的方式,实现高速缓冲存储器使用和高速缓冲存储器线分配的计划性控制。
作为例子,示出了可以借助其来实施指令辅助的高速缓冲存储器管理技术各方面的示范性执行环境100。环境100包括由入口线路卡104驻留的网络处理器单元(NPU)102。出于清楚的目的,图1仅示出了NPU部件及功能单元的选择性部分;下面将在图8中进一步详细介绍NPU/线路卡体系结构的一个实施例的细节。图示的部件包括SRAM接口单元106,处理器群108,其包括多个计算引擎(例如,IntelIXP NPU体系结构下的微引擎(ME))110,高速缓冲存储器控制器112,包括多重高速缓冲存储器线115的高速缓冲存储器114,DRAM接口单元116,以及包括接收(Rx)缓冲器120组和发送(Tx)缓冲器122组的缓冲器管理单元118。SRAM接口单元106提供对由入口线路卡104驻留的外部(相对于NPU102)SRAM124的访问。类似地,DRAM接口单元116提供对外部DRAM126的访问,该外部DRAM126包括多存储器块127。
在许多现代的网络设备(例如,路由器,交换机等)体系结构下,多个板(统称为线路卡)被集成在公共机座(chassis)上并经由一共享的底板或中间板来通信耦合。例如,这种线路卡可以在标准的模块体系结构例如ATCA(高级电信计算体系结构)中实现或在一种利用标准刀片的刀片式服务器环境中实现。可选地,可以使用一种专用的板结构和机座(例如,Cisco,Nortel,3Com,等)。这种模块体系结构典型地包括为特定目的而设计的卡,例如入口线路卡,出口线路卡,成帧器,以及交换结构(SF)卡。入口线路卡104是在这种模块体系结构下使用的入口线路卡的示意。然而,要注意这里对入口线路卡104描述的操作也可以使用其他类型的体系结构来实现,包括但不限于提供组合功能的板,例如入口和出口功能。
在典型的使用情况下,入口线路卡由网络设备或类似的装置使用来对在网络设备接收的网络分组执行初始分组处理。这在图1中用分组A1,A2……来描述,这些分组在入口线路卡104的输入/输出(I/O)端口接收且临时缓冲在Rx缓冲器120中。这种初始分组处理操作刚一完成,各种分组可以通过交换结构被发送到网络设备的其他线路卡中用以进一步的处理和/或被传输到网络中的另一个网络设备中(即出网传输)。这通过把分组A1和A2从Tx缓冲器122转送到该交换结构来说明。
典型的入口操作包括分组(流)分类,其中利用如由存取控制列表(ACL)规则集合等等定义的预定义分组分类模式,将分组分配给各种具有共同属性(例如,目标地址,QoS标准,安全度量,等)的流。许多分组分类规则集合利用一种N-元组分类模式,其中匹配分组报头中的N个字段(或地址前缀情况中的部分字段)的最高优先级ACL规则被用作分类规则。因此,在这种分组分类模式期间仅分组报头数据需要被存取。在其他的例子中,为了执行一些分组的分类可能还需要深度分组检查(例如,除报头之外还检查分组内容)。
在进一步的详述中,典型的传统入口分组处理过程如下所述进行。一接收到分组,就将该分组临时缓冲在Rx缓冲器中,分配DRAM中的缓冲器,且将该分组从Rx缓冲器复制到DRAM缓冲器。结合这些操作,队列描述符被写入到SRAM中的队列元素阵列中,其中队列描述符标识与该分组相关联的DRAM缓冲器的位置。在例如分类的分组处理操作期间,分组报头数据从DRAM缓冲器读出并写入到芯片上SRAM高速暂时存储器和/或芯片外SRAM中(或另外经由芯片上SRAM存取)。接着利用分组N-元组分组报头值,结合在SRAM和/或DRAM存储的规则表/数据库中的一次或多次查找以及由NPU执行的其他操作(例如形成一个散列索引到查找表中)来执行分组分类。分类刚一完成,分组被分配给流,其中对应的目标流队列位于出口线路卡上。因此,通过从DRAM读取分组到Tx缓冲器,、接着经由交换结构传输该数据到流队列,将该分组转送到流队列。
如上所述,最小的存储器等待时间是由芯片上SRAM提供的,然后是由芯片外SRAM提供的,接着是由芯片外DRAM提供的,其明显低于芯片外SRAM。因此,对DRAM的每次存取就相当大地加重了等待时间。与此同时,对于NPU体系结构的DRAM缓冲器的芯片上高速缓存一般局限于芯片上SRAM高速暂时存储器,如果使用的话。这一部分是因为芯片上存储器的费用(就成本,产量,以及芯片实际的等级(real-estate)而言)等原因造成的。
发明人已经认识到涉及分组数据本身的由入口元件(例如,入口线路卡或在包括入口和出口元件的线路卡上作为入口处理器使用的NPU)执行的大部分处理在性质上是临时的,并且这些处理不需要重复的存储器存取和/或重复的数据修改。此外,尽管芯片外DRAM典型地被应用于存储更多的数据,但是大部分这种数据,例如ACL数据库和路由表,基本上是不变的(即,非暂时的)。因此,也认识到利用具有有助于临时分组数据的高速缓存的优选高速缓冲存储器策略的芯片上高速缓冲存储器会非常便利。这种模式如图1中所示。
参考图2的流程图,入口分组处理实现体系结构100如下运行。在块200中,经由输入端口接收数据(或另外经由交换结构提供给入口线路卡104)并临时性地存储在Rx缓冲器120中。在块202中,在DRAM126中分配DRAM缓冲器,以及相应的队列描述符被写入到SRAM124中。接着在块204,分组数据被(逻辑地)写入到块202中分配的缓冲器中。可是,不是将分组数据写入到DRAM,而是在高速缓冲存储器114中分配一个或多个高速缓冲存储器线115(根据情况),且将数据写入到这个/这些高速缓冲存储器线中,如下面将进一步描述的。
继续在块206,接着执行各种分组处理操作,例如分类,计量,等。一完成这些操作,就在块208从缓冲器读取分组数据。如下讨论的,在高速缓冲存储器命中事件中,从高速缓冲存储器114而不是从DRAM126读取分组数据。接着在块210,该读取的数据被复制到Tx缓冲器122,且被传输到交换结构中。在块212接着取消对DRAM缓冲器和一个或者多个高速缓冲存储器线的分配。
图3a示出在一个实施例中进一步图示DRAM存储器写入过程细节的操作和逻辑。该过程在块300开始于要存取引用DRAM126部分的DRAM写指令(例如,可应用的存储器块和偏移量的地址)。在判定块302,确定该存储器写是否导致高速缓冲存储器命中。如果高速缓冲存储器114中存在对应于所引用的存储器模块的高速缓冲存储器线115,则产生高速缓冲存储器命中。从而在块304中,数据被写入到该高速缓冲存储器线中而且将该线标记为已修改。
如果结果是高速缓冲存储器未命中,那么该逻辑进行到块306来确定存储需求是否填充整个高速缓冲存储器线。例如,对接收的分组进行初始处理之后,当处理块204的写操作时,对应的数据也必须被高速缓存,从而导致高速缓冲存储器未命中。关于判定块306中进行的判断,在高速缓冲存储器线基础上分配高速缓冲存储器空间,其中高速缓冲存储器线的尺寸是固定的且典型地(但不必要)匹配DRAM126中的存储器模块127的尺寸,以支持高速缓冲存储器线和存储器块之间1∶1的关系。与此同时,分组的尺寸是可变的。在分组尺寸大于但不是高速缓冲存储器线尺寸的整数倍的情况下,为分组数据分配的最后的高速缓冲存储器线将不被分组数据“填充”。对于具有小于高速缓冲存储器线尺寸如最小化分组尺寸的分组来说同样如此。
对于将占据整个高速缓冲存储器线的数据的每一部分而言,逻辑进行到块308,其中数据被写入到高速缓冲存储器线,且该线被标记为已修改。此外,这里不执行DRAM读或写操作。与使用传统的回写高速缓冲存储器策略一样,结合清空(flush)高速缓冲存储器线(即,使高速缓冲存储器线可用于再分配),高速缓冲存储器线中的数据将被写到对应的存储器块128。结果,在这里,不再需要将数据存储(写)到DRAM中。
对于不完全占据高速缓冲存储器线的分组数据的每一部分而言,该逻辑进行到判定块310,其中确定写指令是否包括“分组-数据”修改符。例如,在一个实施例中,单独的一条存储器写指令被用于这种目的,例如“WRITEP”。可选地,可以修改传统的存储器写指令的位图以实现“分组-数据”修改符。通常,写指令将包含指示将要发生作用的高速缓冲存储器策略对应于和临时数据相一致的单独策略的某个标记,该临时数据例如是这里用于举例说明高速缓存技术的分组数据。
在进一步的详述中,“分组-数据”修改符用于区别分组数据(例如临时数据)与存储在DRAM中的其他数据。通过这种修改符的使用,可以提供一种提示来指示高速缓冲存储器控制器112数据是如何被高速缓存的。根据一个实施例,如果“分组-数据”修改符存在,在块312数据被写入到部分高速缓冲存储器线,并且高速缓冲存储器线被标记为已修改。正如和使用块308一样,没有DRAM读或写操作。相反,如果“分组-数据”修改符不存在,则在块314执行传统的局部高速缓冲存储器线写操作。在传统的方法下,利用提供的写数据来写高速缓冲存储器线的局部部分。但是,为了填充高速缓冲存储器线,对对应的存储器块127进行DRAM读取以复制存储器块的剩余部分(对应于映射到高速缓冲存储器线未填充部分的占用地址的数据)到高速缓冲存储器线。如前所述,该高速缓冲存储器线也标记为已修改。
图4a在一个实施例中进一步图示了DRAM存储器读过程细节的操作和逻辑。该过程开始于块400,其中由处理元件(例如,计算机引擎110)接收DRAM存储器读指令以用于执行的,引用将要存取的存储器块的地址。响应于读指令的执行,在判定块402确定读指令是否包括“分组-数据”修改符。以一种类似于上面讨论的写指令使用的方法,可以通过一种特定指令(例如,READP)来实现该修改符,或者可以修改现有读指令的位图以产生类似的结果。
通常,在最后一次存取数据时执行具有“分组-数据”修改符的读指令;否则,将典型地使用传统的读指令。这样做的原因涉及高速缓冲存储器如何处理读取的命中以及未命中。如果数据不再被存取,则不需要保留数据到高速缓冲存储器(命中时),或不需要使数据高速缓存(未命中时)。因此,需要一种特殊的指令用于这样的存取。但是,需要注意的是“分组-数据”修改符不需要(实际上不应该)被用于对分组数据的所有存取。例如,当想要读取分组报头时,推荐使用传统的读指令。这样做的原因将在下面的高速缓冲存储器策略的概念中变得清晰。
如果读指令不包含“分组-数据”修改符,则执行传统的高速缓存操作。首先,检查高速缓冲存储器114以了解读指令所引用的存储器块是否被高速缓存,结果由命中或未命中判断块404描述。如果命中,逻辑进行到块406从高速缓冲存储器线找回数据。如果未命中,从DRAM126读取数据,以及在高速缓冲存储器114中分配高速缓冲存储器线115,数据被写到高速缓冲存储器线,且该线被标记为“使用中”。这些操作在块408中示出。
如果存在“分组-数据”修改符,逻辑进行到命中或未命中判定块410以确定数据是否存在于高速缓冲存储器中。如果是,从高速缓冲存储器中找回数据,并标记该高速缓冲存储器线为无效的,如块412中描述的。标记该高速缓冲存储器线为无效的原因是用“分组-数据”修改符的分组数据读取典型地对应于图2中块204的读取操作,其被用于在传输之前复制分组到Tx缓冲器。结果,没有针对分组数据的后续DRAM存取,因此不需要将数据保留在DRAM或高速缓冲存储器中。标记高速缓冲存储器线为无效的进一步使该高速缓冲存储器线能被重新分配以便以后使用。
类似的流程被用于高速缓存未命中。如块414中描述的,响应于高速缓存未命中直接从DRAM126读取数据。但是,在高速缓冲存储器114中没有分配高速缓冲存储器线,也没有写入高速缓冲存储器的数据副本。此外,这样做的原因是由于以后不需要使用数据,也就不需要高速缓存该数据了。
一些实施例的另一个方面是可以有计划地定义高速缓冲存储器线的“软”锁。在“软锁”方案中,选择的高速缓冲存储器线可以被软锁定,意味着这些高速缓冲存储器线具有比其他高速缓冲存储器线更高的优先级,因此不会被替换,除非不能其他高速缓冲存储器线都是不可用的。在一个实施例中,用于读或写指令的“分组-数据”修改符的存在引起高速缓冲存储器线的软锁状态位被设置(用于写)或被清除(用于读)。该状态位常用于给高速缓冲存储器控制器提供一种提示对应的高速缓冲存储器线不应当被选择以重新分配。例如,下面用于选择高速缓冲存储器线以分配的示范性算法则可以利用“软锁”状态位来应用选择一条高速缓冲存储器线以高速缓存器未命中时替换的优先级1.任何无效线。如果没有线满足这种情况,则2.任何没有软锁定的线。如果没有线满足这种情况,则3.任何线。
前述的优先级规则偏向于利用程序控制的提示来选择优于软锁定的线的已使用过的线。这优于传统的高速缓存策略-例如像最近最少使用(LRU),因为不久将再次读取线的程序员知识比其最近被使用的事实更具有启发性。但是,这不暗示着这里描述的技术必须使用以代替那些传统的高速缓存策略,而更宁愿将这些技术与传统高速缓存策略进行组合。例如,下面将软锁与传统LRU策略相组合,该传统策略将已使用位在设置中标记高速缓冲存储器线为最近使用过1.任何无效线。如果没有线满足这种情况,则2.任何没有软锁定且没有使用过的位设置的线。如果没有线满足这种情况则3.任何没有软锁定的线。如果没有线满足这种情况则4.任何线。
图3b示出了利用“软锁”方案处理DRAM存储器写指令处理期间执行的操作和逻辑的实施例,其中与图3a中示出的以及上述讨论的块具有相似附图标记的块执行类似操作。因此,下面只针对两个流程之间的不同之处。
响应于块306的完全高速缓冲存储器线确定,在判定块316中确定“分组-数据”修改符是否存在。如果不存在,块308B的操作参照与图3a流程中块308的上述描述相似的方法来执行。但是,如果“分组-数据”修改符存在,除了块308A的写入数据到整个高速缓冲存储器线以及将该线标记为已修改之外,在块309设置“软锁”位。
如果高速缓冲存储器线不被填充且“分组-数据”修改符存在,则逻辑进行到块312以写入数据到局部高速缓冲存储器线并将该线标记为已修改。此外,在块313设置“软锁”状态位。
图4b示出了利用“软锁”方案在DRAM存储器读取指令处理期间执行的逻辑操作的一个例子,其中具有与上述讨论的图4a中相似的标记数字的块执行相似的操作。在这种情况下,附加操作属于块407,附加操作当存在“分组-数据”修改符且产生高速缓冲存储器命中的时候会碰到。因此,从该高速缓冲存储器找回数据,该高速缓冲存储器线被标记为无效,并且清除“软锁”状态位。这样可以使高速缓冲存储器线能被立即再分配。因为不再需要数据,所以同样也不需要将数据保留在高速缓冲存储器线中,因此可以释放该高速缓冲存储器线。
通常,可以利用多种技术来实现“分组-数据”修改符以及可选的相关联的“软锁”高速缓冲存储器线机制。但是最后,高速缓存策略标记被编码为适用于在目标处理器上运行的机器级代码,因为处理器不执行源级代码。如下面进一步详细描述的,在一个实施例中特殊的操作代码被添加到处理器指令集,以指示处理器利用置为有效的“分组-数据”修改符实现读和写操作。
在一个实施例中,在源代码等级中嵌入标记,结果在机器代码中形成对应的高速缓存策略提示。参照图5,该操作开始于块500,其中标记被插入到高级源代码来描绘用于不同代码部分的高速缓存策略。在一个实施例中,高级代码包括用C或C++语言编写的程序代码,且通过对应的注记语句来实现标记(marker)。图6示出了图示一组示范性注记语句来实现分组-数据打开/关高速缓存策略的伪代码。在这个实施例中,有两个高速缓存策略打开,表示“分组-数据”修改符策略在起作用;以及关闭,缺省策略,表示“分组-数据”修改符策略没有起作用。注记语句“高速缓存分组数据打开”被用于标记代码部分的开始,其中读和写指令使“分组-数据”修改符被置为有效,同时“高速缓存分组数据关闭”注记语句用于标记代码部分的结尾。
在另一个实施例中,特殊的指令被添加到传统的高级语言和关联的编译器中,使程序员能明确地实现对应于高级代码的“分组-数据”修改符。例如,像读分组数据指令,写分组数据指令等可以被包括在源等级代码中。
图6中的注记语句或显式源等级指令指示编译器形成机器代码,其包括指示处理器和/或高速缓冲存储器控制器如何执行高速缓冲存储器使用以及逐出策略的嵌入提示。在一个实施例中,通过用新的操作代码来代替传统的存储器存取操作代码实现上述策略,该新操作代码提供一种用于通知处理器和/或高速缓冲存储器控制器“分组-数据”修改符和/或“软锁”机制是否在起作用的手段,如块502所示。
在一个实施例中,一种显式操作代码被提供给每个存储器存取指令。例如,在一个公共指令集下,读指令用于在存储器和寄存器之间移动数据。为了实现“分组-数据”修改符,READP(读分组)汇编级指令可能被添加到助记指令集中。类似地,可以添加WRITEP(写分组)汇编级指令。这种方法进一步使程序员能够在汇编级上写代码和/或优化从已编译的源级代码中导出的汇编级代码部分。
在另一个实施例中,指令被用于明确地设置以及清除软锁标志。在这种方法下,结合解码选中的存储器存取指令来检查对应的标志寄存器,其中该标志标识对应的高速缓冲存储器线是否被软锁定了。
如块504中所示,在运行时,通过包含在执行的机器代码中的方向提示(特殊的操作代码和可选的操作数)来管理高速缓冲存储器使用情况。下面讨论了用于实现高速缓冲存储器逐出策略的硬件实施技术。
通常,可以对这里所描述的高速缓存技术采用不同类型的整体高速缓存方案(具有用于实施每个方案的各种不同技术)。这些包括全相联高速缓存,以及n路组相联高速缓存。(在特定的实施中,也可以利用直接映射的高速缓存器—然而直接映射的高速缓存器的命中率比其他设计弱,因为它的不灵活性)。在全相联高速缓存器中,任何存储器位置可以被高速缓存在任何高速缓冲存储器线中。这是最复杂的技术且当检查命中时需要更高级搜索算法。因为这一点会导致整个高速缓存变慢,但是它表现出最佳的理论命中率,因为有如此多的用于高速缓存任何存储器地址的选项。N路组相联高速缓存器结合直接映射高速缓存器和全相联高速缓存器的各方面。在这个方法下,高速缓存器被分为n条线的集合(例如,n=2,4,8,等),且任何存储器地址可以被高速缓存在选中集合的那些n条线路中。实际上,这些高速缓冲存储器线集合被逻辑地分为n组。这相对于直接映射高速缓存器来说提高了命中率,而不会导致严重的搜索加重(因为n被保持得很小)。
图7示出一种用于执行全相联高速缓存方案来支持高速缓存使用率以及逐出策略的有计划控制的高速缓冲存储器体系结构700的范例。通常,这个实施例中公开的原理可以在各种不同类型的公知高速缓冲存储器体系结构上实现,包括n路组相联高速缓冲存储器体系结构以及全相联高速缓冲存储器体系结构。还要注意其他高速缓冲存储器部件的细节,例如多路复用器,译码逻辑,数据端口等为了清楚起见而没有示出在图7中。本领域技术人员可以理解这些部件可以存在于实际体系结构实现方式中。该体系结构的主要部件包括处理器702,各种高速缓存控制元件(下面描述具体细节),它们被统称为高速缓冲存储器控制器,以及它的实际高速缓冲存储器存储空间本身,其由用于存储标签阵列的存储器以及高速缓冲存储器线组成,也统称为块。
高速缓冲存储器体系结构700的一般操作与传统的全相联高速缓冲存储器相似,除了“分组-数据”修改符和软锁机制的扩展之外。响应于存储器访问请求(通过执行对应的指令或指令序列产生),该请求所引用的地址被转发给高速缓冲存储器控制器。地址字段被分割为TAG(标签)704,和块OFFSET(偏移量)706。标签704通常称为块(或高速缓冲存储器线)地址。块偏移量706通常称为字节选择或字选择字段。字节/字选择或块偏移量的目的是为了从高速缓冲存储器线中的多个字或字节中选择所请求的字(典型地)或字节。例如,典型的高速缓冲存储器线尺寸的范围是8-128字节。因为高速缓冲存储器线是可以在高速缓冲存储器中存取的最小单元,所以有必要提供信息以便进一步解析该高速缓冲存储器线来返回所请求的数据。想要的字或字节的位置从该高速缓冲存储器线的基地起偏移,所以命名块“偏移量”。字的选择通过字选择多路复用器(mux)708实现。
典型地,l个最低有效位被用于块偏移量,其中高速缓冲存储器线宽度或块的宽度是2l字节宽。下一个n个(最高有效)位集合包括TAG 704。这些n位被用于在每个标签阵列查找对应的标签。此外,每个高速缓冲存储器线包括一个“有效”位。
除了这些元件之外,高速缓冲存储器体系结构700利用一个软锁位710。该软锁位被用于为关联的高速缓冲存储器线设置或清除软锁。在一个实施例中,软锁位被存储在一个1位寄存器中,而地址被存储在另一个w位寄存器中,其中w是地址的宽度。在另一个实施例中,软锁位和地址的组合被存储在w+1宽度的寄存器中。在高速缓冲存储器体系结构700下,高速缓冲存储器线被分成一个标签阵列712和一个高速缓冲存储器线阵列714。
响应于存储器存取请求,高速缓冲存储器体系结构700的操作如下执行。在图示的实施例中,处理器702接收引用存储器地址的READP指令716。如上所述,在一个实施例中,READP指令指示处理器/高速缓冲存储器控制器来实现与具有激活的(设置的)“数据-分组”修改符的读指令相关联的动作。
响应于高速缓存未命中,高速缓冲存储器控制器通过选择一个要被替换的现有高速缓冲存储器线来分配一个新的高速缓冲存储器线。在图示的实施例中,上述软锁定高速缓冲存储器线锁定策略利用软锁定高速缓冲存储器分配策略逻辑718来实现。
结合高速缓冲存储器线分配执行的另一个操作是从DRAM126获取所请求的数据。用于实现对应存储器读或写策略的逻辑通过高速缓冲存储器使用策略逻辑720来实现。例如,对于不使用高速缓冲存储器线的软锁的实施例,高速缓冲存储器使用策略720利用图3a和4a中流程图所示的逻辑,同时它为实现使用软锁的实现方式实现图3b和4b中流程图所示的逻辑。
请求的数据返回到高速缓冲存储器控制器之后,数据被复制到分配的高速缓冲存储器线,且在标签阵列712中更新对应的标签和有效位。不是返回请求的数据,而是返回大量接近于并包括请求数据的连续数据字节,其中字节数等于高速缓冲存储器线的宽度。例如,对于32字节宽度的高速缓冲存储器线,返回32字节的数据。接着在字选择mux708的帮助下,包含在新的高速缓冲存储器线中的字(对应于初始请求)被从高速缓冲存储器读取到处理器702的输入寄存器726。
以类似于传统方法的方式来执行为高速缓冲存储器体系结构700写入对应于未高速缓存地址的值并更新存储在高速缓冲存储器线内的值,除了进一步利用“分组-数据”修改符和软锁位之外。对于非分组数据,这包括一个高速缓冲存储器回写,基于高速缓冲存储器回写,存储在输出寄存器724中的数据被写到系统存储器中(最后)。首先通过适当的高速缓冲存储器查找算法来搜索适当的高速缓冲存储器线(应当是当前存在的)。如果找到,高速缓冲存储器线用输出寄存器724中的数据来更新,且给对应的修改位(未示出)加上标志。随后通过公知的回写操作用新值更新系统存储器(如果需要,考虑到适用的高速缓冲存储器策略)。如果要被更新的数据没有在高速缓冲存储器中找到,则在一个实施例中,以一种与读请求的上述方法类似的方式来分配高速缓冲存储器线,且数据被写到高速缓冲存储器线,并且在适当的TAG阵列中更新对应的标签和有效位值。
除了图7所示的高速缓冲存储器体系结构之外,高速缓冲存储器体系结构的其他类型也可以以类似的方式来实现。例如,可以实现组相联高速缓冲存储器体系结构。通常,组相联体系结构和全相联体系结构的主要部件是相似的,除了标签阵列元素和关联的高速缓冲存储器线被按照集合分组之外,并且每一个标签项还包括用于索引到可用集合的INDEX(索引)字段。另外,提供适用的逻辑来执行索引方案以及组相联高速缓冲存储器操作的其他元素;这样的逻辑和体系结构元素在本领域是熟知的。
图8进一步示出了NPU102和入口线路卡104的细节。在该实施例中,入口线路卡104包括配置为耦合到ATCA机座中的共用底板的ATCA板,该ATCA机座可以进一步包括其他ATCA模块板。因此线路卡包括一组连接器,用以与底板上的配合连接器相吻合,如图示的通过底板接口800(为了清楚突显入口线路卡102)。通常,底板接口800支持各种输入/输出(I/O)通信通道,也提供功率给线路卡104。为了简单起见,图8中仅示出了选定的I/O接口,不过可以理解其他I/O和功率输入接口也存在。在一个实施例中,I/O接口支持高级交换(AS)环境中的使用,如ASI(高级交换互连)SIG高级交换V1规范中定义的。
NPU102包括n个微型引擎110。在一个实施例中,n=8,而在其他实施例中,n=16,24,或32。也可以使用其他数量的微型引擎1001。在一个实施例中,16个微型引擎110被分为每8个微型引擎一组的两个群,包括ME群0和ME群1(为了清楚起见后面的未示出)。
在图示的实施例中,每个微型引擎110执行存储在局部控制存储器802中的指令(例如微码)。在用于一个或多个微型引擎的指令中包括的是分组处理以及队列管理指令,使用它们来有助于这里描述的各种分组处理以及队列管理操作。在一个实施例中,以微码的形式—宏来写这些指令。
每个微型引擎110通过被称为处理器“机座”的总线组和控制线连接到其他的网络处理器部件。为了清楚起见,这些总线组以及控制线被描述为内部互连804。也连接到内部互连的是SRAM接口单元106,DRAM控制器806,通用处理器808,媒介交换结构接口810,PCI(外设部件互连)控制器812,以及散列单元814。可以由NPU102提供的其他没有示出的部件,包括但不限于,加密单元,CAP(控制状态寄存器存取代理)单元,高速暂时存储器,以及性能监控器。
如所描述的,DRAM控制器806一起来提供高速缓冲存储器控制器112、高速缓冲存储器114、以及DRAM接口单元116的功能。在一个实施例中,DRAM126利用DDR(双数据速率)DRAM。在其他实施例中DRAM126可以使用Rambus DRAM(RDRAM)或等待时间减小的DRAM(RLDRAM)。也支持其他类型的DRAM。
通用处理器808可以用于各种网络处理器操作。在一个实施例中,通过在通用处理器808上执行的软件来便利控制面板操作,而数据面板操作主要通过在微型引擎110上执行的指令线程来便利。
媒介交换体系结构接口810用于对接安装了线路卡的网络设备的媒介设备或交换结构。在一个实施例中,媒介交换结构接口810使用系统分组级接口4状态2(SPI4-2)接口816。可选地,媒介交换结构接口816可以支持CSIX,NPSI和/或ASI接口。通常,实际的交换结构可以由一个或多个独立的线路卡驻留,或可以内置到机座底板上(例如,作为无源交换结构)。这两种配置由交换结构818表示。在一个实施例中(未图示),媒介交换结构接口包括Rx缓冲器120和Tx缓冲器122,且提供实现这里描述的接收和传输缓冲器管理操作的逻辑。
PCI控制器812使网络处理器对接一个或多个PCI设备,该PCI设备通过PCI接口820耦合到底板接口800。在一个实施例中,PCI接口820包括PCI快速接口。
初始化期间,便利各分组处理以及其他操作的编码指令(例如微码)被载入控制存储器802中。在一个实施例中,该指令从由入口线路卡104所驻留的非易失性存储器822-例如闪存设备中载入。非易失性存储器的其他例子包括只读存储器(ROM),可编程只读存储器(PROM),以及电可擦除只读存储器(EEPROM)。在一个实施例中,非易失性存储器822由通用处理器808经由接口824来存取。在另一个实施例中,非易失性存储器822可以经由耦合到内部互连804的接口(未示出)存取。
除了从本地(相对线路卡104)存储器载入指令之外,指令还可以从外部源载入。例如,在一个实施例中,这些指令存储在由另一个线路卡(未示出)所驻留的或另外由安装了线路卡104的网络设备提供的盘驱动器826上。然而在另一个实施例中,经由网络828从远程服务器等上下载作为载波的指令。
通常,图中所示的以及这里讨论的每个功能块可以经由在一个或多个计算引擎上执行对应线程而利用硬件中的可编程逻辑,固件/软件中的可编程逻辑,或二者的组合来实现。例如,各分组处理操作,包括分类和队列管理操作,可以通过在一个或多个计算机引擎110上执行对应的指令线程来实现。可选地,由这里讨论的功能块提供的所有或部分操作可以通过嵌入在NPU或类似设备上的适当编程的逻辑来执行。
因此,本发明的实施例可以用作或支持固件/软件模块和/或在某种形式的处理核心上执行或另外在机器可读介质上或内部实现或实施的程序。机器可读介质包括用于存储或传输机器(例如计算机)可读形式的信息的任何机制。例如,机器可读介质可以包括像只读存储器(ROM);随机存取存储器(RAM);磁盘存储介质;光学存储介质;以及闪存设备等。另外,机器可读介质可以包括传播的信号,例如电子的,光学的,声学的或其他形式传播的信号(例如,载波,红外信号,数字信号,等)。
上述发明的图示实施例,包括摘要中描述的,不意味着是对本发明所公开的精确形式的穷尽或者限制到本发明所公开的精确形式。对于本领域技术人员而言,尽管本发明的特定实施例和例子在此是为了说明性的目的而加以描述的,但是各种等价的修改包括在发明的范围之内也是可能的。
可以根据上述细节描述对发明进行这些修改。权利要求
中用到的术语不应当被解释为将本发明限制到在说明书和图中公开的特定实施例。而是,通过权利要求
来完全确定本发明的范围,其应该根据权利要求
的解释所确立的原理来加以理解。
权利要求
1.一种方法,包括接收存储器存取指令;确定该指令是否包含标识将使用针对临时数据的高速缓存策略的标记;以及如果包括,则使用针对临时数据的高速缓存策略;否则,使用缺省高速缓存策略。
2.权利要求
1的方法,其中所述临时分组括网络分组数据,以及所述标记包括分组数据修改符。
3.权利要求
2的方法,其中所述指令包括存储器写指令,该指令包含用于标识该存储器写是在缓冲器中存储临时分组数据的分组数据修改符,该方法进一步包括,确定存在对应于该存储器写的高速缓存未命中;分配至少一个提供足够的存储空间用以存储分组数据的高速缓冲存储器线;确定所有或部分分组数据是否将填充分配的给定高速缓冲存储器线;以及如果是,则将所述所有或部分分组数据写到该高速缓冲存储器线;否则将所述所有或部分分组数据写到该高速缓冲存储器线的局部部分中,而不需要修改高速缓冲存储器线剩余部分中现存的数据。
4.权利要求
3的方法,进一步包括接收不包含分组数据修改符的第二存储器写指令,第二存储器写指令引用将被写入存储器的数据;确定存在对应于该存储器写的高速缓存未命中;分配一个或多个提供足够的存储空间用于存储数据的高速缓冲存储器线;确定所有或部分分组数据是否将填充给定的高速缓冲存储器线;以及如果是,则将所述所有或部分数据写到高速缓冲存储器线;否则将所述所有或部分数据写到该高速缓冲存储器线的局部部分中;从对应于高速缓冲存储器线剩余部分的存储器块部分读取数据,且将读取的数据写到该高速缓冲存储器线的剩余部分。
5.权利要求
2的方法,其中所述指令包括存储器读指令,该指令包含用于标识该存储器读是从存储器缓冲器中读取临时分组数据的分组数据修改符,该方法进一步包括,确定该分组数据是否存在于高速缓冲存储器中;以及如果不存在,则从存储器缓冲器中读取该分组数据,而不在高速缓冲存储器中分配高速缓冲存储器线以高速缓存该分组数据。
6.权利要求
2的方法,其中所述指令包括存储器读指令,该指令包含用于标识该存储器读是从存储器缓冲器中读取临时分组数据的分组数据修改符,该方法进一步包括,确定该分组数据是否存在于高速缓冲存储器中;以及如果存在,则从一个或多个高速缓存该分组数据的高速缓冲存储器线中读取该分组数据;以及标记该一个或多个高速缓冲存储器线为无效。
7.权利要求
2的方法,进一步包括接收分组;分配存储器缓冲器;分配一个或多个对应于该存储器缓冲器的高速缓冲存储器线;将该分组数据写入该一个或多个高速缓冲存储器线;执行使用该分组数据的分组处理操作;从该一个或多个高速缓冲存储器线中读取分组数据;将该分组数据传输到目标目的地;以及解除该DRAM缓冲器及一个或多个高速缓冲存储器线的分配,其中至少一部分存储器存取使用包含了标识该存储器存取对应于临时分组数据的分组数据修改符的存储器读和存储器写指令。
8.权利要求
7的方法,其中所述分组由入口线路卡接收,其包括至少一个网络处理器并驻留网络处理器外部的DRAM(动态随机存取存储器),并且该存储器缓冲器包括DRAM缓冲器。
9.权利要求
8的方法,其中传输分组数据到目标目的地包括将目标数据传输到交换结构以由另一个线路卡接收。
10.权利要求
1的方法,进一步包括执行包括软锁机制的高速缓冲存储器线分配方案,该机制实现对保持具有软锁的高速缓冲存储器线的优先选择;以及为包含标识所述存储器存取涉及临时数据的标记的存储器存取指令使用软锁机制。
11.权利要求
10的方法,进一步包括实现具有以下逻辑的高速缓冲存储器线的分配策略(1)分配任何无效的高速缓冲存储器线;如果没有这种高速缓冲存储器线,那么,(2)分配任何未软锁定的高速缓冲存储器线;如果没有这种高速缓冲存储器线,那么,(3)分配任何高速缓冲存储器线。
12.权利要求
10的方法,进一步包括利用与各自的高速缓冲存储器线相关联的软锁状态位来实施软锁机制。
13.一种处理器,包括处理器核心;存储器接口单元,耦合到该处理器核心;高速缓冲存储器控制器,耦合到该处理器核心;以及高速缓冲存储器,由高速缓冲存储器控制器控制,可操作地耦合来从处理器核心接收数据和把数据提供给处理器核心,其中该高速缓冲存储器控制器被配置为实现高速缓冲存储器策略,该策略包括缺省高速缓冲存储策略和临时数据高速缓存策略,其中临时数据高速缓存策略响应于对存储器存取指令的处理来执行,该指令包括标识临时数据高速缓存策略要被使用的标记。
14.权利要求
13的处理器,其中一条存储器存取指令包括存储器写指令,其包含用于标识该存储器写是在存储器缓冲器中存储临时分组数据的分组数据修改符,以及其中响应于对应该存储器写的高速缓存未命中,临时数据高速缓存策略包括分配一个或多个提供足够存储空间用于存储分组数据的高速缓冲存储器线;确定所有或部分分组数据是否将填充给定的高速缓冲存储器线;以及如果是,则将所述所有或部分分组数据写到该高速缓冲存储器线;否则将所述所有或部分分组数据写到该高速缓冲存储器线的局部部分,而不修改该高速缓冲存储器线的剩余部分中现存的数据。
15.权利要求
13的处理器,其中所述存储器存取指令包括存储器读指令,其包含用于标识该存储器读是从存储器缓冲器读取临时分组数据的分组数据修改符,其中响应于对应存储器读的高速缓存未命中,临时数据高速缓存策略包括从存储器缓冲器读该分组数据,而不在高速缓冲存储器中分配高速缓冲存储器线以高速缓存该分组数据。
16.权利要求
13的处理器,其中一条存储器存取指令包括存储器读指令,其包含用于标识该存储器读是从存储器缓冲器读取临时分组数据的分组数据修改符,其中响应于对应该存储器读的高速缓存命中,临时数据高速缓存策略包括从一个或多个高速缓存分组数据的高速缓冲存储器线中读取分组数据;以及标记该一个或多个高速缓冲存储器线为无效。
17.权利要求
13的处理器,其中所述高速缓冲存储器控制器进一步包括高速缓冲存储器线分配逻辑,用以实现软锁机制,包括为高速缓冲存储器线替换给出优先次序,使得具有软锁的高速缓冲存储器线被分配一个保持比不具有软锁的高速缓冲存储器线更高的优先级;以及为包含标识存储器存取涉及临时数据的标记的存储器存取指令使用软锁机制。
18.权利要求
17的处理器,其中所述高速缓冲存储器线分配逻辑包括(1)分配任何标记为无效的高速缓冲存储器线;如果没有这种高速缓冲存储器线,那么,(2)分配任何未软锁定且没有标记为使用中的高速缓冲存储器线;如果没有这种高速缓冲存储器线,那么,(3)分配任何未软锁定的高速缓冲存储器线;如果没有这种高速缓冲存储器线,那么,(4)分配任何高速缓冲存储器线。
19.一种网络线路卡,包括印刷电路板(PCB),具有包括对应于媒介交换结构接口的信号线路的底板接口;基于SRAM-(静态随机存取存储器)的存储器,安装在PCB上;基于DRAM的存储器,安装在PCB上;以及网络处理器单元(NPU),耦合到PCB,包括,处理器核心;DRAM接口单元,耦合在处理器核心和基于DRAM的存储器之间;SRAM接口单元,耦合在处理器核心和基于SRAM的存储器之间;高速缓冲存储器控制器,耦合到处理器核心和DRAM接口单元;以及高速缓冲存储器,由高速缓冲存储器控制器控制且可操作地耦合来从处理器核心接收数据且把数据提供给处理器核心,其中高速缓冲存储器控制器被配置为实现高速缓冲存储器策略,该策略包括缺省高速缓冲存储策略和临时分组数据高速缓存策略,其中临时分组数据高速缓存策略响应于对存储器存取指令的处理来执行,该指令包括标识临时分组数据高速缓存策略要被使用的分组数据修改符。
20.权利要求
19的网络线路卡,其中一条存储器存取指令包括存储器写指令,其包含用于标识该存储器写是在存储器缓冲器中存储临时分组数据的分组数据修改符,其中响应于对应存储器写的高速缓存未命中,临时数据高速缓存策略包括,分配一个或多个提供足够存储空间用以存储分组数据的高速缓冲存储器线;确定所有或部分分组数据是否将填充给定的高速缓冲存储器线;以及如果是,则将所述所有或部分分组数据写到该高速缓冲存储器线;否则将所述所有或部分分组数据写到该高速缓冲存储器线的局部部分,而不修改该高速缓冲存储器线的剩余部分中现存的数据。
21.权利要求
20的网络线路卡,其中一条存储器存取指令包括存储器读指令,其包含用于标识该存储器读是从基于DRAM存储器的存储器缓冲器中读取临时分组数据的分组数据修改符,其中响应于对应该存储器读的高速缓存未命中,临时数据高速缓存策略包括,从该存储器缓冲器读取分组数据,而不在高速缓冲存储器中分配高速缓冲存储器线以高速缓存该分组数据。
22.如权利要求
20的网络线路卡,进一步包括可操作地耦合到PCB的非易失性存储器,该存储器包括用于在处理器核心上执行的指令以执行以下操作,包括对在底板接口的输入/输出端接收的分组执行初始处理,该初始处理包括,在基于DRAM的存储器中分配存储器缓冲器;分配对应于该存储器缓冲器的一个或多个高速缓冲存储器线;将分组数据写入该一个或多个高速缓冲存储器线;将分组元数据写入基于SRAM的存储器;使用至少一个分组元数据和分组数据来执行分组分类操作,以将该分组分配给流;从一个或多个高速缓冲存储器线读取分组数据;经由媒介交换结构接口将分组数据传送到换结构以对应于该流的目标目的地;以及解除DRAM缓冲器及一个或多个高速缓冲存储器线的分配,其中至少一部分存储器存取使用存储器读和存储器写指令,该指令包括用于标识该存储器存取对应于临时分组数据的分组数据修改符,且对应的高速缓冲存储器策略为这种存储器存取指令而实施。
专利摘要
用于有效利用高速缓冲存储器和存储器的指令辅助高速缓冲存储器管理。提示(例如修改符)被添加到读和写存储器存取指令来标识该存储器存取是针对临时数据的。通过这样的提示,执行交替的高速缓冲存储器策略和分配策略来最小化高速缓冲存储器和存储器存取。在一个策略下,写高速缓存未命中会导致将数据写到高速缓冲存储器线的局部中,而没有存储器读/写周期来填充该线的剩余部分。在另一个策略下,读高速缓存未命中会导致从存储器读,而没有分配或写读取的数据到高速缓冲存储器线。还公开了高速缓冲存储器线软锁机制,其中高速缓冲存储器线可以被选择性地软锁定来指示保持那些高速缓冲存储器线比非锁定高速缓冲存储器线优先。
文档编号G06F12/08GK1991792SQ200610064058
公开日2007年7月4日 申请日期2006年9月29日
发明者S·拉克什马纳穆尔蒂, M·罗森布卢思 申请人:英特尔公司导出引文BiBTeX, EndNote, RefMan
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1