专利名称:分裂式网络处理器控制信息高速缓冲存储器的利记博彩app
技术领域:
本发明是一种用于对报文处理中的控制信息进行缓存的机构,可以应用于互联网络中的高速并且复杂的报文处理,属于计算机技术领域。
背景技术:
网络处理器属于专用处理器的一种,通常应用于灵活高速的数据包处理。它结合了ASIC和通用CPU的优势,具有能够缩短路由器开发周期和延长网络设备生存期的优点。一些厂商已经陆续推出了各类网络处理器产品。为了达到预期的目的,这些产品通常采用了很多方兴未艾的新技术。比如,最为常见的做法就是将多个处理单元集成在同一个网络处理器上,并且使用针对网络应用进行了优化的专用指令集。另外一个经常采用的技术是将功能比较固定的操作用协处理器或专用硬件来完成,以减少软件的开销,大幅度地提升性能。
由于网络处理器需要处理大量的数据包,因此数据包的移动通常由专用的硬件完成。当处理开始进行的时候,所需要的数据包字段通常是已经保存在专用寄存器堆中的,因此我们认为对数据包字段的访问是不存在访问延迟的。但是,网络应用所需要的控制信息,比如路由表、流分类规则库和流量统计信息等,由于所占据的空间较大,一般是保存在片外存储器件中的。即便有些网络处理器使用较为高速的SRAM作为控制信息存储器,但是由多处理单元而导致的排队使得访问延迟与处理周期相比仍然非常可观,在某些网络处理器产品中甚至达到数百倍。因此,控制信息的访问延迟隐藏仍然是网络处理器中比较关键的技术。
多线程是网络处理器广泛采用的一种延迟隐藏技术。它虽然可以较好地利用网络处理并行性的特点,但是编程模型复杂,对存储器带宽要求较高。目前越来越多的厂商开始采用易于制造并且易于编程的高速缓冲存储器,即cache,来解决这一问题。但是由于网络处理不同于一般的应用,传统的cache机构在实际的网络处理中往往效率低下。很多网络处理器中都具有采用软件控制的高速片上存储器,也称为便笺式存储器(Scratch Pad)。但是这类器件由于容量很小并且缺乏硬件支持,不利于大型数据结构的使用和管理,只能作为延迟隐藏技术的有益补充。
现有的cache设计大多针对通用处理器,所面向的应用尤以科学计算为主。例如,SallyA.McKee等人所设计的流存储控制器(Stream Memory Controller)主要面对矩阵运算等具有固定访问模式的应用[1]。而Antonio Gonzalez等人的二元数据高速缓冲存储器(Dual Data Cache)则只是简单地将数据按照有无较强的空间局部性进行区分[2]。网络应用的显著特点是它不具备比较有规律的访问模式,不同类型的数据所表现出来的局部性可能大不不同。此外,传统的cache仅仅注重平均性能的提升,并且以恶化的最坏性能为代价。对于网络处理器来说,线速转发的需求使得它更注重性能的可预测性以及最坏情况下的性能保证。因此,依照普通应用所设计的cache显然无法在网络处理器中取得比较理想的效果。
Sally A.McKee,William A.Wulf,James H.Aylor,Robert H.Klenke,Maximo H.Salinas,Sung I.Hong,and Dee A.B.Weikle.Dynamic Access Ordering for Streamed Computations.IEEE Transactions on Computers,vol.49,no.11,pp.1255-1271,November 2000. Antonio Gonzalez,Carlos Aliagas,and Mateo Valero.A Data Cache with MultipleCaching Strategies Tuned to Different Types of Locality.Proceedings of the 1995 InternationalConference on Supercomputering(ICS’95),pp.338-347,Barcelona,Spain,1995.
发明内容
本发明的目的在于提高网络处理器中高速缓冲存储器的效率,使得它既能够很好地发挥作为延迟掩藏技术的功用,同时又能兼顾网络处理器对于性能确定性的需求。
本发明的思路在于,对网络处理器中不同类型的控制信息设计专用的高速缓冲存储器。网络处理中所遇到的控制信息通常可以分为三类(1)数据包相关数据。这类信息为单个数据包所独有,通常包括网络处理所产生的中间结果以及临时变量等。它们占控制信息访问的大多数,并且所占据的空间非常小,一般情况下只有几百个字节,因此使用Scratch Pad就可以解决它们的访问问题。
(2)流相关数据。这类信息在基于流的应用中,比如QoS控制、复杂式计费和流量监测等,是非常重要的一类数据。它们被同一个流中的所有数据包所共享。例如,一个TCP的连接记录表可能会为每个流记录它的连接标志、序列号、窗口大小以及确认情况等。每个流所使用的数据一般不是很多,但由于路由器所处理的流的数目都非常庞大,因此这类数据的总量往往比较大。
(3)应用相关数据。这类信息通常包括全局变量以及用于辅助完成某类应用的数据结构,它们为所有的数据包所共享。全局变量所占据空间少,并且使用频繁,因此与数据包相关数据一样,可以将它们存储在Scratch Pad中。而用于完成某类操作所需要的数据占用的空间一般是比较多的,比如一个中等规模的路由表可能就含有百万条以上的表项。
流相关数据和应用相关数据中用于辅助完成某类应用的数据结构需要储存在片外大容量存储器,如DRAM中,而访问它们也会带来比较大的延迟。网络处理器中通常采用的cache对这两类数据不加区分地缓存,而忽略了它们在访问模式上的差别。
本发明为流相关数据和应用相关数据分别设置了相应的子高速缓冲存储器(或称为subcache),对应地称之为Flow-Cache和App-Cache。同时注意到这两类数据的访问模式具有很大不同,因此可以对这两个子高速缓冲存储器设置不同的结构,以充分发挥各自的优势。具体来说,应用相关数据的访问模式不固定,依赖于算法的具体实现。比如,由于具有相同前缀的目的IP地址会访问前缀trie树中的同一节点,因此基于trie的路由查找算法会比基于哈希表的查找算法表现出更强的时间局部性。另一方面,基于trie的路由查找算法的空间局部性又会大大低于线性查找算法。因此,App-Cache应该与传统cache具有相似的结构,以更好地突出灵活性的特点,增强网络处理器适合使用的范围。而流相关数据在单个数据包处理过程中表现出较强的空间局部性,时间局部性仅出现在属于同一个流的数据包被接收的情况下。因此,我们可以给Flow-Cache设置更长的字长(cache line),从而充分地利用其较强的空间局部性。此外,网络应用通常以流分类开始,然后根据流分类的结果采取相应的处理。而流分类由于其复杂性一般是由协处理器来完成的。假如我们将流相关数据限制在一个连续的区域中(以牺牲少量的编程灵活性为代价),那么,在其他需要处理单元来完成的操作开始之前,该区域的起始地址就可以作为流分类的结果而获得。通过设置适当的硬件使得数据包的处理和流相关数据的预取流水进行,就可以保证在处理单元开始对数据包进行操作的时候,所需要的流相关数据已经保存在Flow-Cache之中了,从而使得在Flow-Cache中不会发生缺失,进而保证网络处理所需要的确定性性能。
本发明的特征在于含有地址识别器、应用相关数据高速缓冲存储器、流相关数据高速缓冲存储器以及存储器调度器,其中(1)地址识别器,用来判断处理单元在对数据包进行操作的过程中所发出的控制信息访问请求的地址,是属于流相关数据所在的空间、还是应用相关数据所在的空间,并根据判定的结果,将访问请求送入对应的高速缓冲存储器;该地址识别器的输入信号包括来自处理单元的控制信息地址线PE_ADDR、来自处理单元的控制信息访问请求信号PE_RQ、应用相关数据高速缓冲存储器的数据信号AC_DOUT、流相关数据高速缓冲存储器的数据信号FC_DOUT、应用相关数据高速缓冲存储器的确认信号AC_ACK和流相关数据高速缓冲存储器的确认信号FC_ACK;该地址识别器的输出信号包括送往应用相关数据高速缓冲存储器的访问请求信号AC_RQ、送往流相关数据高速缓冲存储器的访问请求信号FC_RQ、送到处理单元的数据PE_DIN和送到处理单元的确认信号PE_ACK;该地址识别器含有范围寄存器2-A1和范围寄存器2-A2,分别用来保存划分给应用相关数据的地址空间的上下边界;比较器2-1,其第一数据输入端与范围寄存器2-A1的数据输出端相连,第二数据输入端与来自处理单元的控制信息地址线PE ADDR相连;当第二数据输入端的输入小于范围寄存器2-A1中保存的内容时,该比较器2-1输出为“真”;比较器2-2,其第一数据输入端与范围寄存器2-A2的数据输出端相连,第二数据输入端与来自处理单元的控制信息地址线PE_ADDR相连;当第二数据输入端的输入大于等于范围寄存器2-A2中保存的内容时,该比较器2-2输出为“真”;范围寄存器2-F1和范围寄存器2-F2,分别用来保存划分给流相关数据的地址空间的上下边界;比较器2-3,其第一数据输入端与范围寄存器2-F1的数据输出端相连,第二数据输入端与来自处理单元的控制信息地址线PE_ADDR相连;当第二数据输入端的输入小于范围寄存器2-F1中保存的内容时,该比较器2-3输出为“真”;比较器2-4,其第一数据输入端与范围寄存器2-F2的数据输出端相连,第二数据输入端与来自处理单元的控制信息地址线PE_ADDR相连;当第二数据输入端的输入大于等于范围寄存器2-F2中保存的内容时,该比较器2-4输出为“真”;与门2-I,两个数据输入端分别与比较器2-1、比较器2-2的输出端相连;当比较器2-1、比较器2-2的输出均为“真”时,该与门2-I的输出信号Match_A变为有效;与门2-II,两个数据输入端分别与比较器2-3、比较器2-4的输出端相连;当比较器2-3、比较器2-4的输出均为“真”时,该与门2-II的输出信号Match_F变为有效;三态门2-T1,设有Match_A作为输出控制端,来自处理单元的控制信息访问请求信号PE_RQ作为输入端;当Match_A信号有效时,三态门2-T1选通,把来自处理单元的控制信息访问请求信号PE_RQ作为送往应用相关数据高速缓冲存储器的访问请求信号AC_RQ输出到应用相关数据高速缓冲存储器;PE_RQ信号实际上由读操作请求信号PE_RD和写操作请求信号PE_WR构成,相应的AC_RQ也分为送往应用相关数据高速缓冲存储器的读操作请求信号AC_RD和送往应用相关数据高速缓冲存储器的写操作请求信号AC_WR;三态门2-T2,设有Match_F作为输出控制端,来自处理单元的控制信息访问请求信号PE_RQ作为输入端;当Match_F信号有效时,三态门2-T2选通,把来自处理单元的控制信息访问请求信号PE_RQ作为送往流相关数据高速缓冲存储器的访问请求信号FC_RQ输出到流相关数据高速缓冲存储器;PE_RQ信号实际上由读操作请求信号PE_RD和写操作请求信号PE_WR构成,相应的FC_RQ也分为送往流相关数据高速缓冲存储器的读操作请求信号FC_RD和送往流相关数据高速缓冲存储器的写操作请求信号FC_WR;多路选择器2-M1,设有Match_A和Match_F信号作为选择控制端,应用相关数据高速缓冲存储器的数据信号AC_DOUT和流相关数据高速缓冲存储器的数据信号FC_DOUT作为两个输入端;当Match_A信号有效时,多路选择器2-M1将应用相关数据高速缓冲存储器的数据信号AC_DOUT作为送到处理单元的数据PE_DIN而输出,当Match_F信号有效时,多路选择器2-M1将流相关数据高速缓冲存储器的数据信号FC_DOUT作为送到处理单元的数据PE_DIN而输出,当Match_A信号和Match_F信号均无效时,多路选择器2-M1输出为高阻状态,而Match_A信号和Match_F信号均有效是一个非法状态,不可能出现该情况;多路选择器2-M2,设有Match_A和Match_F信号作为选择控制端,应用相关数据高速缓冲存储器的确认信号AC_ACK和流相关数据高速缓冲存储器的确认信号FC_ACK作为两个输入端;当Match_A信号有效时,多路选择器2-M2将应用相关数据高速缓冲存储器的确认信号AC_ACK作为送到处理单元的确认信号PE_ACK而输出,当Match_F信号有效时,多路选择器2-M2将流相关数据高速缓冲存储器的确认信号FC_ACK作为送到处理单元的确认信号PE_ACK而输出,当Match_A信号和Match_F信号均无效时,多路选择器2-M2输出为高阻状态,而Match_A信号和Match_F信号均有效是一个非法状态,不可能出现该情况;(2)应用相关数据高速缓冲存储器,用App-Cache表示,用于缓存那些被所有数据包所共享的数据;App-Cache由三类存储器件构成用来缓存数据的data、表示数据是否有效的v、以及用来判定数据是否已经在App-Cache中存在的地址标签tag;App-Cache的输入信号包括来自处理单元的控制信息地址线PE_ADDR、来自处理单元的数据PE_DOUT、送往应用相关数据高速缓冲存储器的访问请求信号AC_RQ、由存储器调度器送到App-Cache的数据ACMS_DI和由存储器调度器送到App-Cache的确认信号ACMS_ACK;App-Cache的输出信号包括应用相关数据高速缓冲存储器的数据信号AC_DOUT、应用相关数据高速缓冲存储器的确认信号AC_ACK、由App-Cache送往存储器调度器的访问请求信号ACMS_RQ、由App-Cache送往存储器调度器的地址线AC_ADDR和由App-Cache送往存储器调度器的数据线ACMS_DO;当送往应用相关数据高速缓冲存储器的访问请求信号AC_RQ有效时,如果来自处理单元的控制信息地址线信息PE_ADDR与相应缓存单元中保存的地址标签tag一致且缓存数据有效,则匹配成功;此时,当为读操作时,App-Cache相应缓存单元中保存的数据data作为应用相关数据高速缓冲存储器的数据信号AC_DOUT通过地址识别器的多路选择器2-M1送入处理单元;当为写操作时,来自处理单元的数据PE_DOUT被写入相应缓存单元,并根据App-Cache设定的写策略决定是否需要写回位于网络处理器外的控制信息存储器;如果是写通策略,则将由App-Cache送往存储器调度器的访问请求信号ACMS_RQ置为有效,并将相应的地址和数据信息放置到由App-Cache送往存储器调度器的地址线AC_ADDR和由App-Cache送往存储器调度器的数据线ACMS_DO上;当由存储器调度器送到App-Cache的确认信号ACMS_ACK变为有效时,完成本次操作;如果匹配不成功,当为读操作时,则需要从位于网络处理器外的控制信息存储器中读取所需的数据信息;将由App-Cache送往存储器调度器的访问请求信号ACMS_RQ置为有效,并将相应的地址信息放置到由App-Cache送往存储器调度器的地址线AC_ADDR上,当由存储器调度器送到App-Cache的确认信号ACMS_ACK变为有效时,将由存储器调度器送到App-Cache的数据ACMS_DI作为应用相关数据高速缓冲存储器的数据信号AC_DOUT提供给处理单元并写回App-Cache相应的缓存单元;当为写操作时,除了需要将来自处理单元的数据PE_DOUT写回位于网络处理器外的控制信息存储器中外,还需要根据App-Cache设定的写缺失策略,决定是否需要将来自处理单元的数据PE_DOUT写回App-Cache相应的缓存单元;当发生替换时,如果App-Cache的写策略为写回策略,还需要将被替换的数据中被修改的部分写回控制信息存储器;(3)流相关数据高速缓冲存储器,用Flow-Cache表示,用于缓存那些仅被属于同一个流的数据包所共享的数据;为了能够在满足处理单元访问需求的同时,对控制信息存储器进行读写,Flow-Cache设置了两个称为Bank A和Bank B的工作栈;分配给流相关数据的地址空间划分为相同大小的块,每个流对应于一个块,流相关数据信息就保存在这个块中;每个工作栈中的缓存数据也组织为块的形式,即cache line的大小与块是一致的;每个数据包所对应的流相关数据只位于Bank A和Bank B两个工作栈中的一个,在数据包被处理单元处理之前由Flow-Cache中的数据移动控制器读入Flow-Cache,另外一个不对处理单元提供数据的工作栈在需要的时候为下一个数据包读入相应的流相关数据;整个数据包的处理流程为当数据包被网络处理器接收时,先由流分类器进行流分类,然后将所获得的流相关数据的起始地址送到Flow-Cache的数据移动控制器;数据移动控制器检查该流相关数据是否已经保存在Flow-Cache的Bank A和Bank B两个工作栈的某一个中,如果没有,则Flow-Cache目前未被处理单元使用的那个工作栈中相应的块被选为被替换的块,如果曾经被处理单元修改,则先将该块中被修改的内容写回控制信息存储器;然后将所需要的流相关数据从控制信息存储器中读出,并替换该块的内容;当所需要的流相关数据被写入到Flow-Cache后,处理单元切换到该工作栈,对数据包进行处理;Flow-Cache的输入信号包括来自处理单元的的控制信息地址线PE_ADDR、来自处理单元的数据PE_DOUT、来自处理单元的状态信号PE_SWCH、来自流分类器的流相关数据预取地址线CL_ADDR、来自流分类器的流相关数据预取请求信号CL_RQ、送往流相关数据高速缓冲存储器的访问请求信号FC_RQ、由存储器调度器送到Flow-Cache的数据FCMS_DI和由存储器调度器送到Flow-Cache的确认信号FCMS_ACK;输出信号包括流相关数据高速缓冲存储器的数据信号FC_DOUT、流相关数据高速缓冲存储器的确认信号FC_ACK、由Flow-Cache送往存储器调度器的访问请求信号FCMS_RQ、由Flow-Cache送往存储器调度器的地址线FC_ADDR和由Flow-Cache送往存储器调度器的数据线FCMS_DO;假设网络处理器以字节寻址,每个块包含N=2s个字节,且地址宽度为t+s位,则控制信息预取地址只需要该地址的高t位。设每个工作栈均保存M=2r个块,则t位的控制信息预取地址中的低r位就称为index部分,控制信息预取地址的高t-r位称为a_tag部分;所述的工作栈Bank A和Bank B各自含有a、地址标签空间Tag RAM A和Tag RAM B,其中的数据称为地址标签b_tag地址标签空间Tag RAM A的输入信号包括地址信号输入端与来自流分类器的流相关数据预取地址线CL_ADDR的index部分相连,数据输入端与来自流分类器的流相关数据预取地址线CL_ADDR的a_tag部分相连,读写控制输入端为来自多路选择器3-A1的TagA_WR;地址标签空间Tag RAM A的输出信号为TagA_DO;地址标签空间Tag RAM B的输入信号包括地址信号输入端与来自流分类器的流相关数据预取地址线CL_ADDR的index部分相连,数据输入端与来自流分类器的流相关数据预取地址线CL_ADDR的a_tag部分相连,读写控制输入端为来自多路选择器3-B1的TagB_WR;地址标签空间Tag RAM B的输出信号为TagB_DO;b、数据空间Data RAM A和Data RAM B数据空间Data RAM A的输入信号包括地址信号输入端与来自多路选择器3-A6的DATA_AD的低r+s位相连,数据输入端与来自多路选择器3-A5的DATA_DI相连,读写控制输入端为来自多路选择器3-A7的DATA_WR;数据空间Data RAM A的输出信号为DATA_DO;数据空间Data RAM B的输入信号包括地址信号输入端与来自多路选择器3-B6的DATB_AD的低r+s位相连,数据输入端与来自多路选择器3-B5的DATB_DI相连,读写控制输入端为来自多路选择器3-B7的DATB_WR;数据空间Data RAM B的输出信号为DATB_DO;
c、修改状态空间Dirty RAM A和Dirty RAM B,分别为数据空间Data RAM A和DataRAM B中的块设置若干修改标志位,称为D;这里以每个块设置一个标志位为例,并且标志位为“1”表示已经被修改过,标志位为“0”表示尚未被修改过修改状态空间Dirty RAM A的输入信号包括地址信号输入端与来自多路选择器3-A4的DTYA_AD的index部分相连,数据输入端与来自多路选择器3-A3的DTYA_DI相连,读写控制输入端为来自多路选择器3-A2的DTYA_WR;修改状态空间Data RAM A的输出信号为DTYA_DO;修改状态空间Dirty RAM B的输入信号包括地址信号输入端与来自多路选择器3-B4的DTYB_AD的index部分相连,数据输入端与来自多路选择器3-B3的DTYB_DI相连,读写控制输入端为来自多路选择器3-B2的DTYB_WR;修改状态空间Data RAM B的输出信号为DTYB_DO;所述的数据移动控制器,含有a、标签比较器3-1,设有来自流分类器的流相关数据预取地址线CL_ADDR中的a_tag部分、和地址标签空间Tag RAM A的输出数据线TagA_DO,作为其两个输入端;当两个输入端的数据完全一致时,该标签比较器3-1输出为“真”,表示所需的流相关数据已经保存在工作栈Bank A中;b、标签比较器3-2,设有来自流分类器的流相关数据预取地址线CL_ADDR中的a_tag部分、和地址标签空间Tag RAM B的输出数据线TagB_DO,作为其两个输入端;当两个输入端的数据完全一致时,该标签比较器3-2输出为“真”,表示所需的流相关数据已经保存在工作栈Bank B中;c、栈切换控制器3-3,用来控制两个工作栈的状态,即是为当前正在被处理的数据包向处理单元提供流相关数据,还是为下一个将要被处理的数据包从网络处理器外部的控制信息存储器中读取相关的流相关数据;该栈切换控制器3-3设有两个寄存器RC,即3-3-I,和RN,即3-3-II,分别用来保存当前正在被处理单元使用的工作栈号和下一个数据包的处理所需使用的工作栈号;栈切换控制器3-3的输入信号包括标签比较器3-1和标签比较器3-2的输出信号,来自处理单元的状态信号PE_SWCH和由有限状态机3-4送往栈切换控制器3-3的地址评估信号FSM_EVL;输出信号包括Bank A选择信号SEL_A和Bank B选择信号SEL_B;当SEL_A为“真”时,表示工作栈Bank A目前正在被处理单元使用;当SEL_B为“真”时,表示工作栈Bank B目前正在被处理单元使用;因此,在任何时刻,SEL_A和SEL_B互为相反;
当由有限状态机3-4送往栈切换控制器3-3的地址评估信号FSM_EVL变为有效时,表示下一个数据包的处理所需的流相关数据的起始地址已经由流分类器送达Flow-Cache,需要对该流相关数据是否已经保存在Flow-Cache中进行判断;此时,如果标签比较器3-1和标签比较器3-2的输出均为“假”,则表示流相关数据在Flow-Cache中还不存在,因此需要将R,即3-3-II的内容变为当前未被处理单元使用的那个工作栈的栈号,表示在该工作栈中即将进行数据的移动,并且当处理单元开始处理下一个数据包时,会使用该工作栈;如果标签比较器3-1输出为“真”,表示流相关数据已经保存在工作栈Bank A中,需要将RN,即3-3-II的内容置为Bank A的工作栈号;如果标签比较器3-2输出为“真”,表示流相关数据已经保存在工作栈Bank B中,则RN,即3-3-II的内容需要置为Bank B的工作栈号;标签比较器3-1和标签比较器3-2的输出均为“真”是一种非法状态,是不可能出现的;当来自处理单元的状态信号PE_SWCH变为有效后,表示处理单元结束了对当前数据包的处理,开始转入对下一个数据包的处理;此时,需要将寄存器RN,即3-3-I)的内容写入寄存器RC,即3-3-I;如果寄存器RC,即3-3-I中记录的是Bank A的工作栈号,则Bank A选择信号SEL_A输出为“真”,Bank B选择信号SEL_B输出为“假”;如果寄存器RC,即3-3-I中记录的是Bank B的工作栈号,则Bank B选择信号SEL_B输出为“真”,BankA选择信号SEL_A输出为“假”;d、或非门3-4-O,两个输入端与标签比较器3-1和标签比较器3-2的输出端相连,输出为MISS信号;如果标签比较器3-1和标签比较器3-2的输出均为“假”,则表示流相关数据在Flow-Cache中还不存在,输出信号MISS变为“真”;标签比较器3-1和标签比较器3-2中任何一个的输出为“真”,则表示流相关数据已经存在于Flow-Cache中,输出信号MISS变为“假”;标签比较器3-1和标签比较器3-2的输出均为“真”是一种非法状态,是不可能出现的;e、有限状态机3-4,负责完成下一个数据包处理所需的流相关信息读取和被替换信息的写回操作;有限状态机3-4的输入信号包括来自流分类器的流相关数据预取请求信号CL_RQ、由存储器调度器送到Flow-Cache的确认信号FCMS_ACK、由多路选择器3-M4输出的DIRTY信号、由多路选择器3-M1输出的Tag_DO信号、来自流分类器的流相关数据预取地址线CL_ADDR的index部分、或非门3-4-O输出的MISS信号;输出信号包括送往栈切换控制器3-3的地址评估信号FSM_EVL、送往存储器调度器的地址线FC_ADDR、送往存储器调度器的访问请求信号FCMS_RQ、送往多路选择器3-A2和多路选择器3-B2的DTY_WR信号、送往多路选择器3-A7和多路选择器3-B7的DAT_WR信号、送往多路选择器3-A1和多路选择器3-B1的Tag_WR信号;该状态机假设工作栈内所有的RAM,其读写控制输入端变为“1”时,为写操作请求,变为“0”时,为读操作请求;并且在地址信号变为有效后的一个周期,数据输出变为有效;有限状态机3-4的状态转换流程如下I、空闲状态4-1如果来自流分类器的流相关数据预取请求信号CL_RQ变为有效,说明有新的数据包接受了流分类操作,需要对流相关数据是否已经保存在Flow-Cache中进行判断,进入判定状态;否则,维持空闲状态;II、判定状态4-2此时地址标签空间Tag RAM A和Tag RAM B中的数据均已经读出,标签比较器3-1和标签比较器3-2的输出结果变为有效;将输出信号FSM_EVL置为有效,指示栈切换控制器3-3进行工作;如果MISS信号为“假”,返回空闲状态;如果MISS信号为“真”,并且DIRTY信号为“1”,表示被替换块的内容被处理单元修改过,需要写回网络处理器外的控制信息存储器;将Tag_DO输出为FC_ADDR信号的高t-r位,将FC ADDR信号的低s位置为零,将来自流分类器的流相关数据预取地址线CL_ADDR的index部分作为FC_ADDR信号的index部分输出,进入写回状态;如果MISS信号为“真”,并且DIRTY信号为“0”,则直接将新的流相关数据读入Flow-Cache;将来自流分类器的流相关数据预取地址线CL_ADDR作为FC_ADDR信号的高t位输出,进入读取状态;III、写回状态4-3将DAT_WR保持为读请求状态;通过送往存储器调度器的访问请求信号FCMS_RQ发起写操作请求;当由存储器调度器送到Flow-Cache的确认信号FCMS_ACK返回为有效时,如果工作栈中的被替换块中还存在尚未写回的数据,则将输出信号FC_ADDR的内容设置为指向下一个需要被写回的数据的地址,通常情况下,数据总线的宽度为32位,当网络处理器以字节寻址时,将输出信号FC_ADDR的值加4即可,然后通过送往存储器调度器的访问请求信号FCMS_RQ再次发起写操作请求;重复该过程直到被替换块内所有的数据均已写回,撤销写操作请求,进入读取状态;
IV、读取状态4-4通过送往存储器调度器的访问请求信号FCMS_RQ发起读操作请求;当由存储器调度器送到Flow-Cache的确认信号FCMS_ACK返回为有效时,将DAT_WR置为写请求;如果新的流相关数据尚未全部从网络处理器外的控制信息存储器中读出,则将FC_ADDR的内容指向下一个需要被读取的数据的地址,通常情况下,数据总线的宽度为32位,当网络处理器以字节寻址时,将FC_ADDR的内容加4即可,然后通过送往存储器调度器的访问请求信号FCMS_RQ发起读操作请求;重复该过程直到新的流相关数据均已读出并写入Flow-Cache,撤销读操作请求;将Tag_WR和DTY_WR置为写请求并维持一个周期,以保证新的地址标签信息和新的修改状态信息写入相应的工作栈,进入空闲状态;f、应答器3-5,输入信号为流相关数据高速缓冲存储器访问请求信号FC_RQ,输出信号为应用相关数据高速缓冲存储器的确认信号FC_ACK;在FC_RQ信号变为有效的一个周期后,FC_ACK信号变为有效并维持一个周期,表示数据已经从Flow-Cache读出或者写入;g、18个多路选择器,所有的多路选择器均在选择控制端为“真”时,选通第一输入端的数据作为输出;当选择控制端为“假”时,选通第二输入端的数据作为输出;I、多路选择器3-A1,设有来自有限状态机3-4的Tag_WR作为第一输入端和“0”作为第二输入端,SEL_B作为选择控制端;输出端与地址标签空间Tag RAM A的读写控制输入端TagA_WR相连;当SEL_B为“真”时,表示处理单元正在使用工作栈Bank B,工作栈Bank A接受有限状态机3-4的控制;当SEL_B为“假”时,表示处理单元正在使用工作栈Bank A,由于处理单元不使用地址标签空间Tag RAM A,因此,TagA_WR的输出为“0”;II、多路选择器3-B1,设有来自有限状态机3-4的Tag_WR作为第一输入端和“0”作为第二输入端,SEL_A作为选择控制端;输出端与地址标签空间Tag RAM B的读写控制输入端TagB_WR相连当SEL_A为“真”时,表示处理单元正在使用工作栈Bank A,工作栈Bank B接受有限状态机3-4的控制;当SEL_A为“假”时,表示处理单元正在使用工作栈Bank B;由于处理单元不使用地址标签空间Tag RAM B,因此,TagB_WR的输出为“0”;III、多路选择器3-A2,设有由处理单元送往Flow-Cache的写操作请求信号FC_WR作为第一输入端,来自有限状态机3-4的DTY_WR作为第二输入端;SEL_A作为选择控制端;输出端与修改状态空间Dirty RAM A的读写控制输入端DTYA_WR相连;当SEL_A为“真”时,表示处理单元正在使用工作栈Bank A,当处理单元进行写操作的时候,需要将修改状态空间Dirty RAM A的标志位置为“1”,即接受FC_WR的控制;当SEL_A为“假”时,表示处理单元正在使用工作栈Bank B,工作栈Bank A接受有限状态机3-4,即DTY_WR的控制,当有新的流相关数据从控制信息存储器中读出时,将修改状态空间Dirty RAM A的标志位清零;IV、多路选择器3-B2,设有由处理单元送往Flow-Cache的写操作请求信号FC_WR作为第一输入端,来自有限状态机3-4的DTY_WR作为第二输入端,SEL_B作为选择控制端;输出端与修改状态空间Dirty RAM B的读写控制输入端DTYB_WR相连;当SEL_B为“真”时,表示处理单元正在使用工作栈Bank B,当处理单元进行写操作的时候,需要将修改状态空间Dirty RAM B的标志位置为“1”,即接受FC_WR的控制;当SEL_B为“假”时,表示处理单元正在使用工作栈Bank A,工作栈Bank B接受有限状态机3-4,即DTY_WR的控制,当有新的流相关数据从控制信息存储器中读出时,将修改状态空间Dirty RAM B的标志位清零;V、多路选择器3-A3,设有“1”作为第一输入端和“0”作为第二输入端,SEL_A作为选择控制端;输出端与修改状态空间Dirty RAM A的数据输入端DTYA_DI相连;当SEL_A为“真”时,表示处理单元正在使用工作栈Bank A,当处理单元进行写操作的时候,需要将修改状态空间Dirty RAM A的标志位置为“1”;当SEL_A为“假”时,表示处理单元正在使用工作栈Bank B,当有新的流相关数据从控制信息存储器中读出并写入工作栈Bank A时,将修改状态空间Dirty RAM A的标志位清零;VI、多路选择器3-B3,设有“1”作为第一输入端和“0”作为第二输入端,SEL_B作为选择控制端;输出端与修改状态空间Dirty RAM B的数据输入端DTYB_DI相连;当SEL_B为“真”时,表示处理单元正在使用工作栈Bank B,当处理单元进行写操作的时候,需要将修改状态空间Dirty RAM B的标志位置为“1”;当SEL_B为“假”时,表示处理单元正在使用工作栈Bank A,当有新的流相关数据从控制信息存储器中读出并写入工作栈Bank B时,将修改状态空间Dirty RAM B的标志位清零;VII、多路选择器3-A4,设有来自处理单元的控制信息地址线PE_ADDR作为第一输入端和来自有限状态机3-4的FC_ADDR作为第二输入端,SEL_A作为选择控制端;输出端与修改状态空间Dirty RAM A的地址信号输入端DTYA_AD相连;当SEL_A为“真”时,表示处理单元正在使用工作栈Bank A,当处理单元进行写操作的时候,需要使用来自处理单元的地址;当SEL_A为“假”时,表示处理单元正在使用工作栈Bank B,工作栈Bank A接受有限状态机3-4的控制;VIII、多路选择器3-B4,设有来自处理单元的控制信息地址线PE_ADDR作为第一输入端和来自有限状态机3-4的FC_ADDR作为第二输入端,SEL_B作为选择控制端;输出端与修改状态空间Dirty RAM B的地址信号输入端DTYB_AD相连;当SEL_B为“真”时,表示处理单元正在使用工作栈Bank B,当处理单元进行写操作的时候,需要使用来自处理单元的地址;当SEL_B为“假”时,表示处理单元正在使用工作栈Bank A,工作栈Bank B接受有限状态机3-4的控制;IX、多路选择器3-A5,设有来自处理单元的数据PE_DOUT作为第一输入端和由存储器调度器送到Flow-Cache的数据FCMS_DI作为第二输入端,SEL_A作为选择控制端;输出端与数据空间Data RAM A的数据输入端DATA_DI相连;当SEL_A为“真”时,表示处理单元正在使用工作栈Bank A,当处理单元进行写操作的时候,需要将来自处理单元的数据PE_DOUT写入数据空间Data RAM A;当SEL_A为“假”时,表示处理单元正在使用工作栈Bank B,当有新的流相关数据从控制信息存储器中读出时,需要写入工作栈Bank A的数据空间Data RAM A中;X、多路选择器3-B5,设有来自处理单元的数据PE_DOUT作为第一输入端和由存储器调度器送到Flow-Cache的数据FCMS_DI作为第二输入端,SEL_B作为选择控制端;输出端与数据空间Data RAM B的数据输入端DATB_DI相连;当SEL_B为“真”时,表示处理单元正在使用工作栈Bank B,当处理单元进行写操作的时候,需要将来自处理单元的数据PE_DOUT写入数据空间Data RAM B;当SEL_B为“假”时,表示处理单元正在使用工作栈Bank A,当有新的流相关数据从控制信息存储器中读出时,需要写入工作栈Bank B的数据空间Data RAM B中;XI、多路选择器3-A6,设有来自处理单元的控制信息地址线PE_ADDR作为第一输入端和来自有限状态机3-4的FC_ADDR作为第二输入端,SEL_A作为选择控制端;输出端与数据空间Data RAM A的地址信号输入端DATA_AD相连;当SEL_A为“真”时,表示处理单元正在使用工作栈Bank A,当处理单元进行写操作的时候,需要使用来自处理单元的地址PE_ADDR;当SEL_A为“假”时,表示处理单元正在使用工作栈Bank B,工作栈Bank A接受有限状态机3-4的控制;XII、多路选择器3-B6,设有来自处理单元的控制信息地址线PE_ADDR作为第一输入端和来自有限状态机3-4的FC_ADDR作为第二输入端,SEL_B作为选择控制端;输出端与数据空间Data RAM B的地址信号输入端DATB_AD相连;当SEL_B为“真”时,表示处理单元正在使用工作栈Bank B,当处理单元进行写操作的时候,需要使用来自处理单元的地址PE_ADDR;当SEL_B为“假”时,表示处理单元正在使用工作栈Bank A,工作栈Bank B接受有限状态机3-4的控制;XIII、多路选择器3-A7,设有由处理单元送往Flow-Cache的写操作请求信号FC_WR作为第一输入端和来自有限状态机3-4的DAT_WR作为第二输入端,SEL_A作为选择控制端;输出端与数据空间Data RAM A的读写控制输入端DATA_WR相连;当SEL_A为“真”时,表示处理单元正在使用工作栈Bank A,需要由处理单元对数据空间Data RAM A的读写进行控制;当SEL_A为“假”时,表示处理单元正在使用工作栈Bank B,工作栈Bank A接受有限状态机3-4的读写控制;XIV、多路选择器3-B7,设有由处理单元送往Flow-Cache的写操作请求信号FC_WR作为第一输入端和来自有限状态机3-4的DAT_WR作为第二输入端,SEL_B作为选择控制端;输出端与数据空间Data RAM B的读写控制输入端DATB_WR相连;当SEL_B为“真”时,表示处理单元正在使用工作栈Bank B,需要由处理单元对数据空间Data RAM B的读写进行控制;当SEL_B为“假”时,表示处理单元正在使用工作栈Bank A,工作栈Bank B接受有限状态机3-4的读写控制;XV、多路选择器3-M1,设有地址标签空间Tag RAM A的输出TagA_DO作为第一输入端和地址标签空间Tag RAM B的输出TagB_DO作为第二输入端,SEL_B作为选择控制端;输出端为Tag_DO,是有限状态机3-4的一个输入信号;当SEL_B为“真”时,表示处理单元正在使用工作栈Bank B,工作栈Bank A接受有限状态机3-4的控制,并提供地址标签的内容;当SEL_B为“假”时,表示处理单元正在使用工作栈Bank A,工作栈Bank B接受有限状态机3-4的控制,并提供地址标签的内容;XVI、多路选择器3-M2,设有数据空间Data RAM A的输出DATA_DO作为第一输入端和数据空间Data RAM B的输出DATB_DO作为第二输入端,SEL_B作为选择控制端;输出端为FCMS_DO,是由Flow-Cache送往存储器调度器的数据;当SEL_B为“真”时,表示处理单元正在使用工作栈Bank B,工作栈Bank A接受有限状态机3-4的控制,并向存储器调度器提供需要写回控制信息存储器的数据;当SEL_B为“假”时,表示处理单元正在使用工作栈Bank A,工作栈Bank B接受有限状态机3-4的控制,并向存储器调度器提供需要写回控制信息存储器的数据;XVII、多路选择器3-M3,设有数据空间Data RAM A的输出DATA_DO作为第一输入端和数据空间Data RAM B的输出DATB_DO作为第二输入端,SEL_A作为选择控制端;输出端为FC_DOUT,是Flow-Cache提供给处理单元的数据信号;
当SEL_A为“真”时,表示处理单元正在使用工作栈Bank A,由工作栈Bank A为处理单元提供需要的数据;当SEL_A为“假”时,表示处理单元正在使用工作栈BankB,由工作栈Bank B为处理单元提供需要的数据;XVIII、多路选择器3-M4,设有修改状态空间Dirty RAM A的输出DTYA_DO作为第一输入端和修改状态空间Dirty RAM B的输出DTYB_DO作为第二输入端,SEL_B作为选择控制端;输出端为DIRTY,是有限状态机3-4的一个输入信号;当SEL_B为“真”时,表示处理单元正在使用工作栈Bank B,工作栈BankA接受有限状态机3-4的控制,并提供数据空间的修改状态;当SEL_B为“假”时,表示处理单元正在使用工作栈Bank A,工作栈Bank B接受有限状态机3-4的控制,并提供数据空间的修改状态;(4)存储器调度器的输入信号包括由App-Cache送往存储器调度器的地址线AC_ADDR、由App-Cache送往存储器调度器的数据线ACMS_DO、由App-Cache送往存储器调度器的访问请求信号ACMS_RQ,由Flow-Cache送往存储器调度器的地址线FC_ADDR、由Flow-Cache送往存储器调度器的数据线FCMS_DO、由Flow-Cache送往存储器调度器的访问请求信号FCMS_RQ,来自存储器及I/O总线的确认信号ACK、来自存储器及I/O总线的数据输入信号DIN;输出信号包括由存储器调度器送到App-Cache的确认信号ACMS_ACK、由存储器调度器送到Flow-Cache的确认信号FCMS_ACK,由存储器调度器送到App-Cache的数据ACMS_DI、由存储器调度器送到Flow-Cache的数据FCMS_DI,以及送往存储器及I/O总线的地址信号ADDR、送往存储器及I/O总线的数据信号DOUT、送往存储器及I/O总线的访问请求信号RQ;存储器调度器接收并调度来自App_Cache和Flow_Cache的控制信息存储器读写请求,将这些请求进行排序后,转换为存储器及I/O总线需要的信号形式发送到总线上;存储器调度器所遵守的优先级原则如下读写请求中的写操作请求需要先保存在存储器调度器中与App_Cache和Flow_Cache对应的FIFO中,即来自Flow-Cache的写请求送入用WRFF表示的Flow-Cache的写操作请求FIFO存储器2-W2,来自App-Cache的写请求送入用WRFA表示的App-Cache的写操作请求FIFO存储器2-W1;读请求则不需要先进行缓存;对于同时发出的同类请求,App-Cache的读请求比Flow-Cache的读请求优先级要高,而App-Cache的写请求的优先级比Flow-Cache的写请求要低;对于读操作,存储器调度器需要等到读请求已经发送到存储器及I/O总线上,并且存储器及I/O总线也通过ACK信号进行了确认后,才向App-Cache返回确认信号ACMS_ACK、或者向Flow-Cache返回确认信号FCMS_ACK;对于写操作,只要写操作请求已经保存入相应的FIFO,则向App-Cache返回确认信号ACMS_ACK、或者向Flow-Cache返回确认信号FCMS_ACK;如果FIFO此时已满,无法写入,则要等到FIFO内的写操作请求被处理完毕一部分,FIFO内有多余空间供新的写操作请求写入后,才能向App-Cache返回确认信号ACMS_ACK、或者向Flow-Cache返回确认信号FCMS_ACK。
本发明的优势在于,它能够减少cache中由于冲突而导致的缺失,从而大大提高cache的整体效率。这是因为,应用相关数据所占据的空间比单个流所需要的流相关数据要大很多。如果我们不加区分地将它们保存在同一个cache中,那些较少使用的流的流相关信息就会减少应用相关数据在cache中实际可使用的空间。这样就会造成高速缓冲存储器污染(cachepollution),从而增加冲突的可能。而分裂式的高速缓冲存储器中可以将Flow-Cache设计得较小,从而增加App-Cache的可用空间,Flow-Cache本身的设计可以保证不发生缺失,因此,冲突的概率被降到很小。
本发明另外一个优势在于,Flow-Cache的长字长,充分利用了流相关数据访问模式空间局部性好的特点,处理过程中不缺失的设计增加了网络处理时间的确定性,可以比传统cache更好地满足网络处理器对于实时性的需求。而流水线式的设计又利用了网络处理各部分操作之间的并行性,使得实际可用的工作周期增加到一倍以上,极大地提高了网络处理器的灵活性。在合适的系统配置下,只要适当调整块的大小,Flow-Cache还可以在保证合适的灵活性的前提下,满足最坏情况下(即最小包连续到达)的线速处理。下表列出了处理单元工作频率200MHz,存储器总线位宽为32位,控制信息存储器所使用的DDR SDRAM的工作周期为7.5纳秒、延迟为8个周期的情况下,对于不同速率的链路以及不同的最小包长,Flow-Cache所支持的块的大小。注意到为了硬件设计的方便,块的大小应该是2的幂次,因此实际的块的大小会比理论上可以支持的大小少一些。表中的访问比例表示块的大小与处理单元实际可以进行的操作时间中最多可以访问的字节数的比值。由于网络处理更多地是进行计算和对数据包字段以及数据包相关数据的访问,对流相关数据的访问只占很小一部分。因此,Flow-Cache的设计足以满足绝大多数网络应用的需要。如果一定要增加块的大小,可以通过选用带宽更高的存储器件来实现。
图1网络处理器系统结构。
图2分裂式控制信息高速缓冲存储器系统结构。
图3Flow-Cache系统结构。
图4Flow-Cache中有限状态机的状态转换图。
具体实施例方式
本发明称为分裂式网络处理器控制信息高速缓冲存储器(Split Control Cache,简称SCC)。其应用的位置如图1所示。为了说明方便起见,图1只表示了单处理单元的网络处理器结构。处理单元由执行运算的处理核心和提供控制信息的SCC构成。除处理单元外,该网络处理器中还有一组协处理器和若干硬件功能单元,用于完成流分类、校验和计算以及流量管理等功能。数据包在位于片外的数据包缓冲存储器中的存储与移动由输入/输出接口、以及数据包缓存控制器完成。处理所需要的数据包字段也由数据包缓存控制器提取并送入处理单元中。处理单元可以访问的存储空间由片内的Scratch Pad和片外的控制信息存储器构成。其中,ScratchPad通常用于关键数据的保存,处理单元可能通过互联机构或者存储器及I/O总线直接访问;而片外控制信息存储器一般由低速大容量的SDRAM等器件构成,用于保存路由表等大型数据结构。由于控制信息存储器的访问延迟与处理单元工作周期差距较大,处理单元不能直接访问控制信息存储器,必须通过分裂式控制信息高速缓冲存储器来进行。
整个分裂式控制信息高速缓冲存储器的硬件结构如图2所示,包括地址识别器、用来保存流相关数据的Flow-Cache、用来保存应用相关数据的App-Cache、以及存储器调度器。各部分的主要结构和功能说明如下1.地址识别器处理单元区别流相关数据和应用相关数据的方法有很多种,在本发明中使用的是地址空间区分法,即采用一个地址识别器来确定应该使用哪一个子高速缓冲存储器。我们把分配给流相关数据和应用相关数据的地址空间划分为两个各自连续但是不相重叠的区域,并用两对范围存储器记录其边界。范围寄存器2-F1和范围寄存器2-F2,依次保存划分给流相关数据的地址空间的上下边界;范围寄存器2-A1和范围寄存器2-A2,则依次保存划分给应用相关数据的地址空间的上下边界。这四个寄存器的值可以在系统初始化的时候予以设定,也可以在工作过程中根据程序的需要进行修改。
每当处理核心发出一个控制信息访问请求时,该控制信息所在的存储单元地址将同时与这四个寄存器进行比较,以确定该数据位于哪个空间之中。用来判断处理核心在对数据包进行操作的过程中所发出的控制信息访问请求的地址,是属于流相关数据所在的空间、还是应用相关数据所在的空间,并根据判定的结果,将访问请求送入对应的高速缓冲存储器;该地址识别器的输入信号包括来自处理核心的控制信息地址线PE ADDR、来自处理核心的控制信息访问请求信号PE_RQ、应用相关数据高速缓冲存储器的数据信号AC_DOUT、流相关数据高速缓冲存储器的数据信号FC_DOUT、应用相关数据高速缓冲存储器的确认信号AC_ACK和流相关数据高速缓冲存储器的确认信号FC_ACK;该地址识别器的输出信号包括送往应用相关数据高速缓冲存储器的访问请求信号AC_RQ、送往流相关数据高速缓冲存储器的访问请求信号FC_RQ、送到处理核心的数据PE_DIN和送到处理核心的确认信号PE_ACK;该地址识别器含有范围寄存器2-A1和范围寄存器2-A2,分别用来保存划分给应用相关数据的地址空间的上下边界;比较器2-1,其第一数据输入端与范围寄存器2-A1的数据输出端相连,第二数据输入端与来自处理核心的控制信息地址线PE_ADDR相连;当第二数据输入端的输入小于范围寄存器2-A1中保存的内容时,该比较器2-1输出为“真”;比较器2-2,其第一数据输入端与范围寄存器2-A2的数据输出端相连,第二数据输入端与来自处理核心的控制信息地址线PE_ADDR相连;当第二数据输入端的输入大于等于范围寄存器2-A2中保存的内容时,该比较器2-2输出为“真”;范围寄存器2-F1和范围寄存器2-F2,分别用来保存划分给流相关数据的地址空间的上下边界;比较器2-3,其第一数据输入端与范围寄存器2-F1的数据输出端相连,第二数据输入端与来自处理核心的控制信息地址线PE_ADDR相连;当第二数据输入端的输入小于范围寄存器2-F1中保存的内容时,该比较器2-3输出为“真”;比较器2-4,其第一数据输入端与范围寄存器2-F2的数据输出端相连,第二数据输入端与来自处理核心的控制信息地址线PE_ADDR相连;当第二数据输入端的输入大于等于范围寄存器2-F2中保存的内容时,该比较器2-4输出为“真”;与门2-I,两个数据输入端分别与比较器2-1、比较器2-2的输出端相连;当比较器2-1、比较器2-2的输出均为“真”时,该与门2-I的输出信号Match_A变为有效;
与门2-II,两个数据输入端分别与比较器2-3、比较器2-4的输出端相连;当比较器2-3、比较器2-4的输出均为“直”时,该与门2-II的输出信号Match_F变为有效;三态门2-T1,设有Match_A作为输出控制端,来自处理核心的控制信息访问请求信号PE_RQ作为输入端;当Match_A信号有效时,三态门2-T1选通,把来自处理核心的控制信息访问请求信号PE_RQ作为送往应用相关数据高速缓冲存储器的访问请求信号AC_RQ输出到应用相关数据高速缓冲存储器;PE_RQ信号实际上由读操作请求信号PE_RD和写操作请求信号PE_WR构成,相应的AC_RQ也分为送往应用相关数据高速缓冲存储器的读操作请求信号AC_RD和送往应用相关数据高速缓冲存储器的写操作请求信号AC_WR;三态门2-T2,设有Match_F作为输出控制端,来自处理核心的控制信息访问请求信号PE_RQ作为输入端;当Match_F信号有效时,三态门2-T2选通,把来自处理核心的控制信息访问请求信号PE_RQ作为送往流相关数据高速缓冲存储器的访问请求信号FC_RQ输出到流相关数据高速缓冲存储器;PE_RQ信号实际上由读操作请求信号PE_RD和写操作请求信号PE_WR构成,相应的FC_RQ也分为送往流相关数据高速缓冲存储器的读操作请求信号FC_RD和送往流相关数据高速缓冲存储器的写操作请求信号FC_WR;多路选择器2-M1,设有Match_A和Match_F信号作为选择控制端,应用相关数据高速缓冲存储器的数据信号AC_DOUT和流相关数据高速缓冲存储器的数据信号FC_DOUT作为两个输入端;当Match_A信号有效时,多路选择器2-M1将应用相关数据高速缓冲存储器的数据信号AC_DOUT作为送到处理核心的数据PE_DIN而输出,当Match_F信号有效时,多路选择器2-M1将流相关数据高速缓冲存储器的数据信号FC_DOUT作为送到处理核心的数据PE_DIN而输出,当Match_A信号和Match_F信号均无效时,多路选择器2-M1输出为高阻状态,而Match_A信号和Match_F信号均有效是一个非法状态,不可能出现该情况;多路选择器2-M2,设有Match_A和Match F信号作为选择控制端,应用相关数据高速缓冲存储器的确认信号AC_ACK和流相关数据高速缓冲存储器的确认信号FC_ACK作为两个输入端;当Match_A信号有效时,多路选择器2-M2将应用相关数据高速缓冲存储器的确认信号AC_ACK作为送到处理核心的确认信号PE_ACK而输出,当Match_F信号有效时,多路选择器2-M2将流相关数据高速缓冲存储器的确认信号FC_ACK作为送到处理核心的确认信号PE_ACK而输出,当Match_A信号和Match_F信号均无效时,多路选择器2-M2输出为高阻状态,而Match_A信号和Match_F信号均有效是一个非法状态,不可能出现该情况。
2.App-Cache该子高速缓冲存储器的结构与传统cache的结构是一样的,用App-Cache表示,用于缓存那些被所有数据包所共享的数据;App-Cache由三类存储器件构成用来缓存数据的data、表示数据是否有效的v、以及用来判定数据是否已经在App-Cache中存在的地址标签tag;App-Cache的输入信号包括来自处理核心的控制信息地址线PE_ADDR、来自处理核心的数据PE_DOUT、送往应用相关数据高速缓冲存储器的访问请求信号AC_RQ、由存储器调度器送到App-Cache的数据ACMS_DI和由存储器调度器送到App-Cache的确认信号ACMS_ACK;App-Cache的输出信号包括应用相关数据高速缓冲存储器的数据信号AC_DOUT、应用相关数据高速缓冲存储器的确认信号AC_ACK、由App-Cache送往存储器调度器的访问请求信号ACMS_RQ、由App-Cache送往存储器调度器的地址线AC ADDR和由App-Cache送往存储器调度器的数据线ACMS_DO;当送往应用相关数据高速缓冲存储器的访问请求信号AC_RQ有效时,如果来自处理核心的控制信息地址线信息PE_ADDR与相应缓存单元中保存的地址标签tag一致且缓存数据有效,则匹配成功;此时,当为读操作时,App-Cache相应缓存单元中保存的数据data作为应用相关数据高速缓冲存储器的数据信号AC_DOUT通过地址识别器的多路选择器2-M1送入处理核心;当为写操作时,来自处理核心的数据PE_DOUT被写入相应缓存单元,并根据App-Cache设定的写策略决定是否需要写回位于网络处理器外的控制信息存储器;如果是写通策略,则将由App-Cache送往存储器调度器的访问请求信号ACMS_RQ置为有效,并将相应的地址和数据信息放置到由App-Cache送往存储器调度器的地址线AC_ADDR和由App-Cache送往存储器调度器的数据线ACMS_DO上;当由存储器调度器送到App-Cache的确认信号ACMS_ACK变为有效时,完成本次操作;如果匹配不成功,当为读操作时,则需要从位于网络处理器外的控制信息存储器中读取所需的数据信息;将由App-Cache送往存储器调度器的访问请求信号ACMS_RQ置为有效,并将相应的地址信息放置到由App-Cache送往存储器调度器的地址线AC_ADDR上,当由存储器调度器送到App-Cache的确认信号ACMS_ACK变为有效时,将由存储器调度器送到App-Cache的数据ACMS_DI作为应用相关数据高速缓冲存储器的数据信号AC_DOUT提供给处理核心并写回App-Cache相应的缓存单元;当为写操作时,除了需要将来自处理核心的数据PE_DOUT写回位于网络处理器外的控制信息存储器中外,还需要根据App-Cache设定的写缺失策略,决定是否需要将来自处理核心的数据PE_DOUT写回App-Cache相应的缓存单元;当发生替换时,如果App-Cache的写策略为写回策略,还需要将被替换的数据中被修改的部分写回控制信息存储器。
3.Flow-Cache该子高速缓冲存储器的基本部分由两个工作栈Bank A和Bank B以及数据移动控制器构成,可以在满足处理核心访问需求的同时进行控制信息存储器进行读写。Flow-Cache的硬件结构如图3所示。处理核心对数据包的操作是连续进行的,但由于每个数据包所对应的流相关数据只位于其中一个工作栈中,因此另外一个不对处理核心提供数据的工作栈就可以在需要的时候为下一个数据包读入相应的流相关数据。为了存储管理的方便,我们把分配给流相关数据的地址空间划分为相同大小的块(block)。每个流都对应于一个块,流相关数据信息就保存在这个块中。每个工作栈中的数据缓存也组织为块的形式,即cache line的大小与块是一致的。
由于在处理核心的工作过程中不会发生缺失,Flow-Cache中的地址比较机构只用来检查尚未被处理的包的相应信息是否已经存在于某个工作栈之中了。
流分类器与处理单元是并行工作的,当处理单元对某个数据包进行操作的时候,流分类器就可以为新达到的包进行分类。整个数据包的处理流程为当新到达的数据包被网络处理器接收时,先由流分类器进行流分类,然后将所获得的流相关数据的起始地址送到Flow-Cache的数据移动控制器;数据移动控制器检查该流相关数据是否已经保存在Flow-Cache的Bank A和Bank B两个工作栈中的某一个了,如果没有的话,则Flow-Cache目前未被处理核心使用的那个工作栈中相应的块选为被替换的块,如果它曾经被处理核心修改,则将该块的内容写回控制信息存储器;然后将新的流相关数据从控制信息存储器中读出,并替换该块的内容;当需要的流相关数据被写入到Flow-Cache后,处理核心可以就切换到该工作栈,对数据包进行处理。
Flow-Cache的输入信号包括来自处理核心的控制信息地址线PE_ADDR、来自处理核心的数据PE_DOUT、来自处理核心的状态信号PE_SWCH、来自流分类器的流相关数据预取地址线CL_ADDR、来自流分类器的流相关数据预取请求信号CL_RQ、送往流相关数据高速缓冲存储器的访问请求信号FC_RQ、由存储器调度器送到Flow-Cache的数据FCMS_DI和由存储器调度器送到Flow-Cache的确认信号FCMS_ACK;输出信号包括流相关数据高速缓冲存储器的数据信号FC_DOUT、流相关数据高速缓冲存储器的确认信号FC_ACK、由Flow-Cache送往存储器调度器的访问请求信号FCMS_RQ、由Flow-Cache送往存储器调度器的地址线FC_ADDR和由Flow-Cache送往存储器调度器的数据线FCMS_DO;假设网络处理器以字节寻址,每个块包含N=2s个字节,且地址宽度为t+s位,则控制信息预取地址只需要该地址的高t位。设每个工作栈均保存M=2r个块,则t位的控制信息预取地址中的低r位就称为index部分,控制信息预取地址的高t-r位称为a_tag部分;所述的工作栈Bank A和Bank B各自含有a、地址标签空间Tag RAM A和Tag RAM B,其中的数据称为地址标签b_tag地址标签空间Tag RAM A的输入信号包括地址信号输入端与来自流分类器的流相关数据预取地址线CL_ADDR的index部分相连,数据输入端与来自流分类器的流相关数据预取地址线CL ADDR的a_tag部分相连,读写控制输入端为来自多路选择器3-A1的TagA_WR;地址标签空间Tag RAM A的输出信号为TagA_DO;地址标签空间Tag RAM B的输入信号包括地址信号输入端与来自流分类器的流相关数据预取地址线CL_ADDR的index部分相连,数据输入端与来自流分类器的流相关数据预取地址线CL_ADDR的a_tag部分相连,读写控制输入端为来自多路选择器3-B1的TagB_WR;地址标签空间Tag RAM B的输出信号为TagB_DO;b、数据空间Data RAM A和Data RAM B数据空间Data RAM A的输入信号包括地址信号输入端与来自多路选择器3-A6的DATA_AD的低r+s位相连,数据输入端与来自多路选择器3-A5的DATA_DI相连,读写控制输入端为来自多路选择器3-A7的DATA_WR;数据空间Data RAM A的输出信号为DATA_DO;数据空间Data RAM B的输入信号包括地址信号输入端与来自多路选择器3-B6的DATB_AD的低r+s位相连,数据输入端与来自多路选择器3-B5的DATB_DI相连,读写控制输入端为来自多路选择器3-B7的DATB_WR;数据空间Data RAM B的输出信号为DATB_DO;c、修改状态空间Dirty RAM A和Dirty RAM B,分别为数据空间Data RAM A和DataRAM B中的块设置若干修改标志位,称为D;这里以每个块设置一个标志位为例,并且标志位为“1”表示已经被修改过,标志位为“0”表示尚未被修改过修改状态空间Dirty RAM A的输入信号包括地址信号输入端与来自多路选择器3-A4的DTYA_AD的index部分相连,数据输入端与来自多路选择器3-A3的DTYA_DI相连,读写控制输入端为来自多路选择器3-A2的DTYA_WR;修改状态空间Data RAM A的输出信号为DTYA_DO;修改状态空间Dirty RAM B的输入信号包括地址信号输入端与来自多路选择器3-B4的DTYB_AD的index部分相连,数据输入端与来自多路选择器3-B3的DTYB_DI相连,读写控制输入端为来自多路选择器3-B2的DTYB_WR;修改状态空间Data RAM B的输出信号为DTYB_DO;所述的数据移动控制器,含有a、标签比较器3-1,设有来自流分类器的流相关数据预取地址线CL_ADDR中的a_tag部分、和地址标签空间Tag RAM A的输出数据线TagA_DO,作为其两个输入端;当两个输入端的数据完全一致时,该标签比较器3-1输出为“真”,表示所需的流相关数据已经保存在工作栈Bank A中;b、标签比较器3-2,设有来自流分类器的流相关数据预取地址线CL_ADDR中的a_tag部分、和地址标签空间Tag RAM B的输出数据线TagB_DO,作为其两个输入端;当两个输入端的数据完全一致时,该标签比较器3-2输出为“真”,表示所需的流相关数据已经保存在工作栈Bank B中;c、栈切换控制器3-3,用来控制两个工作栈的状态,即是为当前正在被处理的数据包向处理核心提供流相关数据,还是为下一个将要被处理的数据包从网络处理器外部的控制信息存储器中读取相关的流相关数据;该栈切换控制器3-3设有两个寄存器RC,即3-3-I和RN,即3-3-II,分别用来保存当前正在被处理核心使用的工作栈号和下一个数据包的处理所需使用的工作栈号;栈切换控制器3-3的输入信号包括标签比较器3-1和标签比较器3-2的输出信号,来自处理核心的状态信号PE_SWCH和由有限状态机3-4送往栈切换控制器3-3的地址评估信号FSM_EVL;输出信号包括Bank A选择信号SEL_A和Bank B选择信号SEL_B;当SEL_A为“真”时,表示工作栈Bank A目前正在被处理核心使用;当SEL_B为“真”时,表示工作栈Bank B目前正在被处理核心使用;因此,在任何时刻,SEL_A和SEL_B互为相反;当由有限状态机3-4送往栈切换控制器3-3的地址评估信号FSM_EVL变为有效时,表示下一个数据包的处理所需的流相关数据的起始地址已经由流分类器送达Flow-Cache,需要对该流相关数据是否已经保存在Flow-Cache中进行判断;此时,如果标签比较器3-1和标签比较器3-2的输出均为“假”,则表示流相关数据在Flow-Cache中还不存在,因此需要将RN,即3-3-II的内容变为当前未被处理核心使用的那个工作栈的栈号,表示在该工作栈中即将进行数据的移动,并且当处理核心开始处理下一个数据包时,会使用该工作栈;如果标签比较器3-1输出为“真”,表示流相关数据已经保存在工作栈Bank A中,需要将RN,即3-3-II的内容置为Bank A的工作栈号;如果标签比较器3-2输出为“真”,表示流相关数据已经保存在工作栈Bank B中,则RN,即3-3-II的内容需要置为Bank B的工作栈号;标签比较器3-1和标签比较器3-2的输出均为“真”是一种非法状态,是不可能出现的;当来自处理核心的状态信号PE_SWCH变为有效后,表示处理核心结束了对当前数据包的处理,开始转入对下一个数据包的处理;此时,需要将寄存器RN,即3-3-II的内容写入寄存器RC,即3-3-I;如果寄存器RC,即3-3-I中记录的是Bank A的工作栈号,则Bank A选择信号SEL_A输出为“真”,Bank B选择信号SEL_B输出为“假”;如果寄存器RC,即3-3-I中记录的是Bank B的工作栈号,则Bank B选择信号SEL_B输出为“真”,BankA选择信号SEL_A输出为“假”;d、或非门3-4-O,两个输入端与标签比较器3-1和标签比较器3-2的输出端相连,输出为MISS信号;如果标签比较器3-1和标签比较器3-2的输出均为“假”,则表示流相关数据在Flow-Cache中还不存在,输出信号MISS变为“真”;标签比较器3-1和标签比较器3-2中任何一个的输出为“真”,则表示流相关数据已经存在于Flow-Cache中,输出信号MISS变为“假”;标签比较器3-1和标签比较器3-2的输出均为“真”是一种非法状态,是不可能出现的;e、有限状态机3-4,负责完成下一个数据包处理所需的流相关信息读取和被替换信息的写回操作;有限状态机3-4的输入信号包括来自流分类器的流相关数据预取请求信号CL_RQ、由存储器调度器送到Flow-Cache的确认信号FCMS_ACK、由多路选择器3-M4输出的DIRTY信号、由多路选择器3-M1输出的Tag_DO信号、来自流分类器的流相关数据预取地址线CL_ADDR的index部分、或非门3-4-O输出的MISS信号;输出信号包括送往栈切换控制器3-3的地址评估信号FSM_EVL、送往存储器调度器的地址线FC_ADDR、送往存储器调度器的访问请求信号FCMS_RQ、送往多路选择器3-A2和多路选择器3-B2的DTY_WR信号、送往多路选择器3-A7和多路选择器3-B7的DAT_WR信号、送往多路选择器3-A1和多路选择器3-B1的Tag_WR信号;该状态机假设工作栈内所有的RAM,其读写控制输入端变为“1”时,为写操作请求,变为“0”时,为读操作请求;并且在地址信号变为有效后的一个周期,数据输出变为有效;有限状态机3-4的状态转换流程如下I、空闲状态4-1如果来自流分类器的流相关数据预取请求信号CL_RQ变为有效,说明有新的数据包接受了流分类操作,需要对流相关数据是否已经保存在Flow-Cache中进行判断,进入判定状态;否则,维持空闲状态;II、判定状态4-2此时地址标签空间Tag RAM A和Tag RAM B中的数据均已经读出,标签比较器3-1和标签比较器3-2的输出结果可以被使用;将输出信号FSM_EVL置为有效,指示栈切换控制器3-3进行工作;如果MISS信号为“假”,返回空闲状态;如果MISS信号为“真”,并且DIRTY信号为“1”,表示被替换块的内容被处理核心修改过,需要写回网络处理器外的控制信息存储器;将Tag_DO输出为FC_ADDR信号的高t-r位,将FC_ADDR信号的低s位置为零,将来自流分类器的流相关数据预取地址线CL_ADDR的index部分作为FC_ADDR信号的index部分输出,进入写回状态;如果MISS信号为“真”,并且DIRTY信号为“0”,则可以直接将新的流相关数据读入Flow-Cache;将来自流分类器的流相关数据预取地址线CL_ADDR作为FC_ADDR信号的高t位输出,进入读取状态;III、写回状态4-3将DAT_WR保持为读请求状态;通过送往存储器调度器的访问请求信号FCMS_RQ发起写操作请求;当由存储器调度器送到Flow-Cache的确认信号FCMS_ACK返回为有效时,如果工作栈中的被替换块中还存在尚未写回的数据,则将输出信号FC_ADDR的内容设置为指向下一个需要被写回的数据的地址,通常情况下,一次写操作可以写回32位的数据,当网络处理器以字节寻址时,将输出信号FC_ADDR的值加4即可,然后通过送往存储器调度器的访问请求信号FCMS_RQ再次发起写操作请求;重复该过程直到被替换块内所有的数据均已写回,撤销写操作请求,进入读取状态;IV、读取状态4-4通过送往存储器调度器的访问请求信号FCMS_RQ发起读操作请求;当由存储器调度器送到Flow-Cache的确认信号FCMS_ACK返回为有效时,将DAT_WR置为写请求;如果新的流相关数据尚未全部从网络处理器外的控制信息存储器中读出,则将FC_ADDR的内容指向下一个需要被读取的数据的地址,通常情况下,一次读操作请求可以读出32位的数据,当网络处理器以字节寻址时,将FC_ADDR的内容加4即可,然后通过送往存储器调度器的访问请求信号FCMS_RQ发起读操作请求;重复该过程直到新的流相关数据均已读出并写入Flow-Cache,撤销读操作请求;将Tag_WR和DTY_WR置为写请求并维持一个周期,以保证新的地址标签信息和新的修改状态信息可以写入相应的工作栈,进入空闲状态;f、应答器3-5,输入信号为流相关数据高速缓冲存储器访问请求信号FC_RQ,输出信号为应用相关数据高速缓冲存储器的确认信号FC_ACK;在FC_RQ信号变为有效的一个周期后,FC_ACK信号变为有效并维持一个周期,表示数据已经从Flow-Cache读出或者写入;
g、18个多路选择器,所有的多路选择器均在选择控制端为“真”时,选通第一输入端的数据作为输出;当选择控制端为“假”时,选通第二输入端的数据作为输出;I、多路选择器3-A1,设有来自有限状态机3-4的Tag_WR作为第一输入端和“0”作为第二输入端,SEL_B作为选择控制端;输出端与地址标签空间Tag RAM A的读写控制输入端TagA_WR相连;当SEL_B为“真”时,表示处理核心正在使用工作栈Bank B,工作栈Bank A可以接受有限状态机3-4的控制;当SEL_B为“假”时,表示处理核心正在使用工作栈BankA,由于处理核心不使用地址标签空间Tag RAM A,因此,TagA_WR的输出为“0”;II、多路选择器3-B1,设有来自有限状态机3-4的Tag_WR作为第一输入端和“0”作为第二输入端,SEL_A作为选择控制端;输出端与地址标签空间Tag RAM B的读写控制输入端TagB_WR相连当SEL_A为“真”时,表示处理核心正在使用工作栈Bank A,工作栈Bank B可以接受有限状态机3-4的控制;当SEL_A为“假”时,表示处理核心正在使用工作栈BankB;由于处理核心不使用地址标签空间Tag RAM B,因此,TagB_WR的输出为“0”;III、多路选择器3-A2,设有由处理核心送往Flow-Cache的写操作请求信号FC_WR作为第一输入端,来自有限状态机3-4的DTY_WR作为第二输入端;SEL_A作为选择控制端;输出端与修改状态空间Dirty RAM A的读写控制输入端DTYA_WR相连;当SEL_A为“真”时,表示处理核心正在使用工作栈Bank A,当处理核心进行写操作的时候,需要将修改状态空间Dirty RAM A的标志位置为“1”,即接受FC_WR的控制;当SEL_A为“假”时,表示处理核心正在使用工作栈Bank B,工作栈Bank A可以接受有限状态机3-4,即DTY_WR的控制,当有新的流相关数据从控制信息存储器中读出时,将修改状态空间Dirty RAM A的标志位清零;IV、多路选择器3-B2,设有由处理核心送往Flow-Cache的写操作请求信号FC_WR作为第一输入端,来自有限状态机3-4的DTY_WR作为第二输入端,SEL_B作为选择控制端;输出端与修改状态空间Dirty RAM B的读写控制输入端DTYB_WR相连;当SEL_B为“真”时,表示处理核心正在使用工作栈Bank B,当处理核心进行写操作的时候,需要将修改状态空间Dirty RAM B的标志位置为“1”,即接受FC_WR的控制;当SEL_B为“假”时,表示处理核心正在使用工作栈Bank A,工作栈Bank B可以接受有限状态机3-4,即DTY_WR的控制,当有新的流相关数据从控制信息存储器中读出时,将修改状态空间Dirty RAM B的标志位清零;V、多路选择器3-A3,设有“1”作为第一输入端和“0”作为第二输入端,SEL_A作为选择控制端;输出端与修改状态空间Dirty RAMA的数据输入端DTYA_DI相连;当SEL_A为“真”时,表示处理核心正在使用工作栈Bank A,当处理核心进行写操作的时候,需要将修改状态空间Dirty RAM A的标志位置为“1”;当SEL_A为“假”时,表示处理核心正在使用工作栈Bank B,当有新的流相关数据从控制信息存储器中读出并写入工作栈Bank A时,将修改状态空间Dirty RAM A的标志位清零;VI、多路选择器3-B3,设有“1”作为第一输入端和“0”作为第二输入端,SEL_B作为选择控制端;输出端与修改状态空间Dirty RAM B的数据输入端DTYB_DI相连;当SEL_B为“真”时,表示处理核心正在使用工作栈Bank B,当处理核心进行写操作的时候,需要将修改状态空间Dirty RAM B的标志位置为“1”;当SEL_B为“假”时,表示处理核心正在使用工作栈Bank A,当有新的流相关数据从控制信息存储器中读出并写入工作栈Bank B时,将修改状态空间Dirty RAM B的标志位清零;VII、多路选择器3-A4,设有来自处理核心的控制信息地址线PE_ADDR作为第一输入端和来自有限状态机3-4的FC_ADDR作为第二输入端,SEL_A作为选择控制端;输出端与修改状态空间Dirty RAM A的地址信号输入端DTYA_AD相连;当SEL_A为“真”时,表示处理核心正在使用工作栈Bank A,当处理核心进行写操作的时候,需要使用来自处理核心的地址;当SEL_A为“假”时,表示处理核心正在使用工作栈Bank B,工作栈Bank A接受有限状态机3-4的控制;VIII、多路选择器3-B4,设有来自处理核心的控制信息地址线PE_ADDR作为第一输入端和来自有限状态机3-4的FC_ADDR作为第二输入端,SEL_B作为选择控制端;输出端与修改状态空间Dirty RAM B的地址信号输入端DTYB_AD相连;当SEL_B为“真”时,表示处理核心正在使用工作栈Bank B,当处理核心进行写操作的时候,需要使用来自处理核心的地址;当SEL_B为“假”时,表示处理核心正在使用工作栈Bank A,工作栈Bank B接受有限状态机3-4的控制;IX、多路选择器3-A5,设有来自处理核心的数据PE_DOUT作为第一输入端和由存储器调度器送到Flow-Cache的数据FCMS_DI作为第二输入端,SEL_A作为选择控制端;输出端与数据空间Data RAM A的数据输入端DATA_DI相连;当SEL_A为“真”时,表示处理核心正在使用工作栈Bank A,当处理核心进行写操作的时候,需要将来自处理核心的数据PE_DOUT写入数据空间Data RAM A;当SEL_A为“假”时,表示处理核心正在使用工作栈Bank B,当有新的流相关数据从控制信息存储器中读出时,需要写入工作栈Bank A的数据空间Data RAM A中;X、多路选择器3-B5,设有来自处理核心的数据PE_DOUT作为第一输入端和由存储器调度器送到Flow-Cache的数据FCMS_DI作为第二输入端,SEL_B作为选择控制端;输出端与数据空间Data RAM B的数据输入端DATB_DI相连;当SEL_B为“真”时,表示处理核心正在使用工作栈Bank B,当处理核心进行写操作的时候,需要将来自处理核心的数据PE_DOUT写入数据空间Data RAM B;当SEL_B为“假”时,表示处理核心正在使用工作栈Bank A,当有新的流相关数据从控制信息存储器中读出时,需要写入工作栈Bank B的数据空间Data RAM B中;XI、多路选择器3-A6,设有来自处理核心的控制信息地址线PE_ADDR作为第一输入端和来自有限状态机3-4的FC_ADDR作为第二输入端,SEL_A作为选择控制端;输出端与数据空间Data RAM A的地址信号输入端DATA_AD相连;当SEL_A为“真”时,表示处理核心正在使用工作栈Bank A,当处理核心进行写操作的时候,需要使用来自处理核心的地址PE_ADDR;当SEL_A为“假”时,表示处理核心正在使用工作栈Bank B,工作栈Bank A接受有限状态机3-4的控制;XII、多路选择器3-B6,设有来自处理核心的控制信息地址线PE_ADDR作为第一输入端和来自有限状态机3-4的FC_ADDR作为第二输入端,SEL_B作为选择控制端;输出端与数据空间Data RAM B的地址信号输入端DATB_AD相连;当SEL_B为“真”时,表示处理核心正在使用工作栈Bank B,当处理核心进行写操作的时候,需要使用来自处理核心的地址PE_ADDR;当SEL_B为“假”时,表示处理核心正在使用工作栈Bank A,工作栈Bank B接受有限状态机3-4的控制;XIII、多路选择器3-A7,设有由处理核心送往Flow-Cache的写操作请求信号FC_WR作为第一输入端和来自有限状态机3-4的DAT_WR作为第二输入端,SEL_A作为选择控制端;输出端与数据空间Data RAM A的读写控制输入端DATA_WR相连;当SEL_A为“真”时,表示处理核心正在使用工作栈Bank A,需要由处理核心对数据空间Data RAM A的读写进行控制;当SEL_A为“假”时,表示处理核心正在使用工作栈Bank B,工作栈Bank A接受有限状态机3-4的读写控制;XIV、多路选择器3-B7,设有由处理核心送往Flow-Cache的写操作请求信号FC_WR作为第一输入端和来自有限状态机3-4的DAT_WR作为第二输入端,SEL_B作为选择控制端;输出端与数据空间Data RAM B的读写控制输入端DATB_WR相连;当SEL_B为“真”时,表示处理核心正在使用工作栈Bank B,需要由处理核心对数据空间Data RAM B的读写进行控制;当SEL_B为“假”时,表示处理核心正在使用工作栈Bank A,工作栈Bank B接受有限状态机3-4的读写控制;XV、多路选择器3-M1,设有地址标签空间Tag RAM A的输出TagA_DO作为第一输入端和地址标签空间Tag RAM B的输出TagB_DO作为第二输入端,SEL_B作为选择控制端;输出端为Tag_DO,是有限状态机3-4的一个输入信号;当SEL_B为“真”时,表示处理核心正在使用工作栈Bank B,工作栈Bank A接受有限状态机3-4的控制,并提供地址标签的内容;当SEL_B为“假”时,表示处理核心正在使用工作栈Bank A,工作栈Bank B接受有限状态机3-4的控制,并提供地址标签的内容;XVI、多路选择器3-M2,设有数据空间Data RAM A的输出DATA_DO作为第一输入端和数据空间Data RAM B的输出DATB_DO作为第二输入端,SEL_B作为选择控制端;输出端为FCMS_DO,是由Flow-Cache送往存储器调度器的数据;当SEL_B为“真”时,表示处理核心正在使用工作栈Bank B,工作栈Bank A接受有限状态机3-4的控制,并向存储器调度器提供需要写回控制信息存储器的数据;当SEL_B为“假”时,表示处理核心正在使用工作栈Bank A,工作栈Bank B接受有限状态机3-4的控制,并向存储器调度器提供需要写回控制信息存储器的数据;XVII、多路选择器3-M3,设有数据空间Data RAM A的输出DATA_DO作为第一输入端和数据空间Data RAM B的输出DATB_DO作为第二输入端,SEL_A作为选择控制端;输出端为FC_DOUT,是Flow-Cache提供给处理核心的数据信号;当SEL_A为“真”时,表示处理核心正在使用工作栈Bank A,由工作栈Bank A为处理核心提供需要的数据;当SEL_A为“假”时,表示处理核心正在使用工作栈BankB,由工作栈Bank B为处理核心提供需要的数据;XVIII、多路选择器3-M4,设有修改状态空间Dirty RAM A的输出DTYA_DO作为第一输入端和修改状态空间Dirty RAM B的输出DTYB_DO作为第二输入端,SEL_B作为选择控制端;输出端为DIRTY,是有限状态机3-4的一个输入信号;当SEL_B为“真”时,表示处理核心正在使用工作栈Bank B,工作栈Bank A接受有限状态机3-4的控制,并提供数据空间的修改状态;当SEL_B为“假”时,表示处理核心正在使用工作栈Bank A,工作栈Bank B接受有限状态机3-4的控制,并提供数据空间的修改状态。
4.存储器调度器该模块将从两个子高速缓冲存储器中发出的访存请求进行排队和调度,在保证数据访问的正确性和优先级的基础上,提高对DRAM器件的访问效率。存储器调度器的输入信号包括由App-Cache送往存储器调度器的地址线AC_ADDR、由App-Cache送往存储器调度器的数据线ACMS_DO、由App-Cache送往存储器调度器的访问请求信号ACMS_RQ,由Flow-Cache送往存储器调度器的地址线FC_ADDR、由Flow-Cache送往存储器调度器的数据线FCMS_DO、由Flow-Cache送往存储器调度器的访问请求信号FCMS_RQ,来自存储器及I/O总线的确认信号ACK、来自存储器及I/O总线的数据输入信号DIN;输出信号包括由存储器调度器送到App-Cache的确认信号ACMS_ACK、由存储器调度器送到Flow-Cache的确认信号FCMS_ACK,由存储器调度器送到App-Cache的数据ACMS_DI、由存储器调度器送到Flow-Cache的数据FCMS_DI,以及送往存储器及I/O总线的地址信号ADDR、送往存储器及I/O总线的数据信号DOUT、送往存储器及I/O总线的访问请求信号RQ。
存储器调度器接收并调度来自App_Cache和Flow_Cache的控制信息存储器读写请求,将这些请求进行排序后,转换为存储器及I/O总线需要的信号形式发送到总线上;存储器调度器所遵守的优先级原则如下读写请求中的写操作请求需要先保存在存储器调度器中与App_Cache和Flow_Cache对应的FIFO中,即来自Flow-Cache的写请求送入用WRFF表示的Flow-Cache的写操作请求FIFO存储器2-W2,来自App-Cache的写请求送入用WRFA表示的App-Cache的写操作请求FIFO存储器2-W1;读请求则不需要先进行缓存;对于同时发出的同类请求,App-Cache的读请求比Flow-Cache的读请求优先级要高,而App-Cache的写请求的优先级比Flow-Cache的写请求要低。
对于读操作,存储器调度器需要等到读请求已经发送到存储器及I/O总线上,并且存储器及I/O总线也通过ACK信号进行了确认后,才向App-Cache返回确认信号ACMS_ACK、或者向Flow-Cache返回确认信号FCMS_ACK;对于写操作,只要写操作请求已经保存入相应的FIFO,则向App-Cache返回确认信号ACMS_ACK、或者向Flow-Cache返回确认信号FCMS_ACK;如果FIFO此时已满,无法写入,则要等到FIFO内的写操作请求被处理完毕一部分,FIFO内有多余空间可供新的写操作请求写入后,才能向App-Cache返回确认信号ACMS_ACK、或者向Flow-Cache返回确认信号FCMS_ACK。
本发明仅限定了处理单元对不同地址空间的使用方式,并未限制数据的划分方式。通过Flow-Cache访问的地址空间(即范围存储器2-F1和2-F2所限定区域),对于一个数据包来说,只有特定的区域可以供它使用(即分配给该数据包所在的流的块);而通过App-Cache访问的地址空间(即范围存储器2-A1和2-A2所限定区域),则可以供所有的数据包使用。某一控制信息具体应该分配在哪个区域是由它在数据包之间共享的情况决定的,并且完全由程序员来决定。在实际使用中,还可以根据本发明的这一特点进行优化。比如,路由查找的结果对于同一个流内的所有包都是一样的,那么这些结果可以跟流相关数据一起保存在Flow-Cache中。此时,只有当一个新的流到达或者路由表发生了变化时才需要进行路由查找的操作。
权利要求
1.分裂式网络处理器控制信息高速缓冲存储器,其特征在于含有地址识别器、应用相关数据高速缓冲存储器、流相关数据高速缓冲存储器以及存储器调度器,其中(1)地址识别器,用来判断处理单元在对数据包进行操作的过程中所发出的控制信息访问请求的地址,是属于流相关数据所在的空间、还是应用相关数据所在的空间,并根据判定的结果,将访问请求送入对应的高速缓冲存储器;该地址识别器的输入信号包括来自处理单元的控制信息地址线PE_ADDR、来自处理单元的控制信息访问请求信号PE_RQ、应用相关数据高速缓冲存储器的数据信号AC_DOUT、流相关数据高速缓冲存储器的数据信号FC_DOUT、应用相关数据高速缓冲存储器的确认信号AC_ACK和流相关数据高速缓冲存储器的确认信号FC_ACK;该地址识别器的输出信号包括送往应用相关数据高速缓冲存储器的访问请求信号AC_RQ、送往流相关数据高速缓冲存储器的访问请求信号FC_RQ、送到处理单元的数据PE_DIN和送到处理单元的确认信号PE_ACK;该地址识别器含有范围寄存器(2-A1)和范围寄存器(2-A2),分别用来保存划分给应用相关数据的地址空间的上下边界;比较器(2-1),其第一数据输入端与范围寄存器(2-A1)的数据输出端相连,第二数据输入端与来自处理单元的控制信息地址线PE_ADDR相连;当第二数据输入端的输入小于范围寄存器(2-A1)中保存的内容时,该比较器(2-1)输出为“真”;比较器(2-2),其第一数据输入端与范围寄存器(2-A2)的数据输出端相连,第二数据输入端与来自处理单元的控制信息地址线PE_ADDR相连;当第二数据输入端的输入大于等于范围寄存器(2-A2)中保存的内容时,该比较器(2-2)输出为“真”;范围寄存器(2-F1)和范围寄存器(2-F2),分别用来保存划分给流相关数据的地址空间的上下边界;比较器(2-3),其第一数据输入端与范围寄存器(2-F1)的数据输出端相连,第二数据输入端与来自处理单元的控制信息地址线PE_ADDR相连;当第二数据输入端的输入小于范围寄存器(2-F1)中保存的内容时,该比较器(2-3)输出为“真”;比较器(2-4),其第一数据输入端与范围寄存器(2-F2)的数据输出端相连,第二数据输入端与来自处理单元的控制信息地址线PE_ADDR相连;当第二数据输入端的输入大于等于范围寄存器(2-F2)中保存的内容时,该比较器(2-4)输出为“真”;与门(2-I),两个数据输入端分别与比较器(2-1)、比较器(2-2)的输出端相连;当比较器(2-1)、比较器(2-2)的输出均为“真”时,该与门(2-I)的输出信号Match_A变为有效;与门(2-II),两个数据输入端分别与比较器(2-3)、比较器(2-4)的输出端相连;当比较器(2-3)、比较器(2-4)的输出均为“真”时,该与门(2-II)的输出信号Match_F变为有效;三态门(2-T1),设有Match_A作为输出控制端,来自处理单元的控制信息访问请求信号PE_RQ作为输入端;当Match_A信号有效时,三态门(2-T1)选通,把来自处理单元的控制信息访问请求信号PE_RQ作为送往应用相关数据高速缓冲存储器的访问请求信号AC_RQ输出到应用相关数据高速缓冲存储器;PE_RQ信号实际上由读操作请求信号PE_RD和写操作请求信号PE_WR构成,相应的AC_RQ也分为送往应用相关数据高速缓冲存储器的读操作请求信号AC_RD和送往应用相关数据高速缓冲存储器的写操作请求信号AC_WR;三态门(2-T2),设有Match_F作为输出控制端,来自处理单元的控制信息访问请求信号PE_RQ作为输入端;当Match_F信号有效时,三态门(2-T2)选通,把来自处理单元的控制信息访问请求信号PE_RQ作为送往流相关数据高速缓冲存储器的访问请求信号FC_RQ输出到流相关数据高速缓冲存储器;PE_RQ信号实际上由读操作请求信号PE_RD和写操作请求信号PE_WR构成,相应的FC_RQ也分为送往流相关数据高速缓冲存储器的读操作请求信号FC_RD和送往流相关数据高速缓冲存储器的写操作请求信号FC_WR;多路选择器(2-M1),设有Match_A和Match_F信号作为选择控制端,应用相关数据高速缓冲存储器的数据信号AC_DOUT和流相关数据高速缓冲存储器的数据信号FC_DOUT作为两个输入端;当Match_A信号有效时,多路选择器(2-M1)将应用相关数据高速缓冲存储器的数据信号AC_DOUT作为送到处理单元的数据PE_DIN而输出,当Match_F信号有效时,多路选择器(2-M1)将流相关数据高速缓冲存储器的数据信号FC_DOUT作为送到处理单元的数据PE_DIN而输出,当Match_A信号和Match_F信号均无效时,多路选择器(2-M1)输出为高阻状态,而Match_A信号和Match_F信号均有效是一个非法状态,不可能出现该情况;多路选择器(2-M2),设有Match_A和Match_F信号作为选择控制端,应用相关数据高速缓冲存储器的确认信号AC_ACK和流相关数据高速缓冲存储器的确认信号FC_ACK作为两个输入端;当Match_A信号有效时,多路选择器(2-M2)将应用相关数据高速缓冲存储器的确认信号AC_ACK作为送到处理单元的确认信号PE_ACK而输出,当Match_F信号有效时,多路选择器(2-M2)将流相关数据高速缓冲存储器的确认信号FC_ACK作为送到处理单元的确认信号PE_ACK而输出,当Match_A信号和Match_F信号均无效时,多路选择器(2-M2)输出为高阻状态,而Match_A信号和Match_F信号均有效是一个非法状态,不可能出现该情况;(2)应用相关数据高速缓冲存储器,用App-Cache表示,用于缓存那些被所有数据包所共享的数据;App-Cache由三类存储器件构成用来缓存数据的data、表示数据是否有效的v、以及用来判定数据是否已经在App-Cache中存在的地址标签tag;App-Cache的输入信号包括来自处理单元的控制信息地址线PE_ADDR、来自处理单元的数据PE_DOUT、送往应用相关数据高速缓冲存储器的访问请求信号AC_RQ、由存储器调度器送到App-Cache的数据ACMS_DI和由存储器调度器送到App-Cache的确认信号ACMS_ACK;App-Cache的输出信号包括应用相关数据高速缓冲存储器的数据信号AC_DOUT、应用相关数据高速缓冲存储器的确认信号AC_ACK、由App-Cache送往存储器调度器的访问请求信号ACMS_RQ、由App-Cache送往存储器调度器的地址线AC_ADDR和由App-Cache送往存储器调度器的数据线ACMS_DO;当送往应用相关数据高速缓冲存储器的访问请求信号AC_RQ有效时,如果来自处理单元的控制信息地址线信息PE_ADDR与相应缓存单元中保存的地址标签tag一致且缓存数据有效,则匹配成功;此时,当为读操作时,App-Cache相应缓存单元中保存的数据data作为应用相关数据高速缓冲存储器的数据信号AC_DOUT通过地址识别器的多路选择器(2-M1)送入处理单元;当为写操作时,来自处理单元的数据PE_DOUT被写入相应缓存单元,并根据App-Cache设定的写策略决定是否需要写回位于网络处理器外的控制信息存储器;如果是写通策略,则将由App-Cache送往存储器调度器的访问请求信号ACMS_RQ置为有效,并将相应的地址和数据信息放置到由App-Cache送往存储器调度器的地址线AC_ADDR和由App-Cache送往存储器调度器的数据线ACMS_DO上;当由存储器调度器送到App-Cache的确认信号ACMS_ACK变为有效时,完成本次操作;如果匹配不成功,当为读操作时,则需要从位于网络处理器外的控制信息存储器中读取所需的数据信息;将由App-Cache送往存储器调度器的访问请求信号ACMS_RQ置为有效,并将相应的地址信息放置到由App-Cache送往存储器调度器的地址线AC_ADDR上,当由存储器调度器送到App-Cache的确认信号ACMS_ACK变为有效时,将由存储器调度器送到App-Cache的数据ACMS_DI作为应用相关数据高速缓冲存储器的数据信号AC_DOUT提供给处理单元并写回App-Cache相应的缓存单元;当为写操作时,除了需要将来自处理单元的数据PE_DOUT写回位于网络处理器外的控制信息存储器中外,还需要根据App-Cache设定的写缺失策略,决定是否需要将来自处理单元的数据PE_DOUT写回App-Cache相应的缓存单元;当发生替换时,如果App-Cache的写策略为写回策略,还需要将被替换的数据中被修改的部分写回控制信息存储器;(3)流相关数据高速缓冲存储器,用Flow-Cache表示,用于缓存那些仅被属于同一个流的数据包所共享的数据;为了能够在满足处理单元访问需求的同时,对控制信息存储器进行读写,Flow-Cache设置了两个称为Bank A和Bank B的工作栈;分配给流相关数据的地址空间划分为相同大小的块,每个流对应于一个块,流相关数据信息就保存在这个块中;每个工作栈中的缓存数据也组织为块的形式,即cache line的大小与块是一致的;每个数据包所对应的流相关数据只位于Bank A和Bank B两个工作栈中的一个,在数据包被处理单元处理之前由Flow-Cache中的数据移动控制器读入Flow-Cache,另外一个不对处理单元提供数据的工作栈在需要的时候为下一个数据包读入相应的流相关数据;整个数据包的处理流程为当数据包被网络处理器接收时,先由流分类器进行流分类,然后将所获得的流相关数据的起始地址送到Flow-Cache的数据移动控制器;数据移动控制器检查该流相关数据是否已经保存在Flow-Cache的Bank A和Bank B两个工作栈的某一个中,如果没有,则Flow-Cache目前未被处理单元使用的那个工作栈中相应的块被选为被替换的块,如果曾经被处理单元修改,则先将该块中被修改的内容写回控制信息存储器;然后将所需要的流相关数据从控制信息存储器中读出,并替换该块的内容;当所需要的流相关数据被写入到Flow-Cache后,处理单元切换到该工作栈,对数据包进行处理;Flow-Cache的输入信号包括来自处理单元的的控制信息地址线PE_ADDR、来自处理单元的数据PE_DOUT、来自处理单元的状态信号PE_SWCH、来自流分类器的流相关数据预取地址线CL_ADDR、来自流分类器的流相关数据预取请求信号CL_RQ、送往流相关数据高速缓冲存储器的访问请求信号FC_RQ、由存储器调度器送到Flow-Cache的数据FCMS_DI和由存储器调度器送到Flow-Cache的确认信号FCMS_ACK;输出信号包括流相关数据高速缓冲存储器的数据信号FC_DOUT、流相关数据高速缓冲存储器的确认信号FC_ACK、由Flow-Cache送往存储器调度器的访问请求信号FCMS_RQ、由Flow-Cache送往存储器调度器的地址线FC_ADDR和由Flow-Cache送往存储器调度器的数据线FCMS_DO;假设网络处理器以字节寻址,每个块包含N=2s个字节,且地址宽度为t+s位,则控制信息预取地址只需要该地址的高t位。设每个工作栈均保存M=2r个块,则t位的控制信息预取地址中的低r位就称为index部分,控制信息预取地址的高t-r位称为a_tag部分;所述的工作栈Bank A和Bank B各自含有a、地址标签空间Tag RAM A和Tag RAM B,其中的数据称为地址标签b_tag地址标签空间Tag RAM A的输入信号包括地址信号输入端与来自流分类器的流相关数据预取地址线CL_ADDR的index部分相连,数据输入端与来自流分类器的流相关数据预取地址线CL_ADDR的a_tag部分相连,读写控制输入端为来自多路选择器(3-A1)的TagA_WR;地址标签空间Tag RAM A的输出信号为TagA_DO;地址标签空间Tag RAM B的输入信号包括地址信号输入端与来自流分类器的流相关数据预取地址线CL_ADDR的index部分相连,数据输入端与来自流分类器的流相关数据预取地址线CL_ADDR的a_tag部分相连,读写控制输入端为来自多路选择器(3-B1)的TagB_WR;地址标签空间Tag RAM B的输出信号为TagB_DO;b、数据空间Data RAM A和Data RAM B数据空间Data RAM A的输入信号包括地址信号输入端与来自多路选择器(3-A6)的DATA_AD的低r+s位相连,数据输入端与来自多路选择器(3-A5)的DATA_DI相连,读写控制输入端为来自多路选择器(3-A7)的DATA_WR;数据空间Data RAM A的输出信号为DAT_DO;数据空间Data RAM B的输入信号包括地址信号输入端与来自多路选择器(3-B6)的DATB_AD的低r+s位相连,数据输入端与来自多路选择器(3-B5)的DATB_DI相连,读写控制输入端为来自多路选择器(3-B7)的DATB_WR;数据空间Data RAM B的输出信号为DATB_DO;c、修改状态空间Dirty RAM A和Dirty RAM B,分别为数据空间Data RAM A和DataRAM B中的块设置若干修改标志位,称为D;这里以每个块设置一个标志位为例,并且标志位为“1”表示已经被修改过,标志位为“0”表示尚未被修改过修改状态空间Dirty RAM A的输入信号包括地址信号输入端与来自多路选择器(3-A4)的DTYA_AD的index部分相连,数据输入端与来自多路选择器(3-A3)的DTYA_DI相连,读写控制输入端为来自多路选择器(3-A2)的DTYA_WR;修改状态空间Data RAM A的输出信号为DTYA_DO;修改状态空间Dirty RAM B的输入信号包括地址信号输入端与来自多路选择器(3-B4)的DTYB_AD的index部分相连,数据输入端与来自多路选择器(3-B3)的DTYB_DI相连,读写控制输入端为来自多路选择器(3-B2)的DTYB_WR;修改状态空间Data RAM B的输出信号为DTYB_DO;所述的数据移动控制器,含有a、标签比较器(3-1),设有来自流分类器的流相关数据预取地址线CL_ADDR中的a_tag部分、和地址标签空间Tag RAM A的输出数据线TagA_DO,作为其两个输入端;当两个输入端的数据完全一致时,该标签比较器(3-1)输出为“真”,表示所需的流相关数据已经保存在工作栈Bank A中;b、标签比较器(3-2),设有来自流分类器的流相关数据预取地址线CL_ADDR中的a_tag部分、和地址标签空间Tag RAM B的输出数据线TagB_DO,作为其两个输入端;当两个输入端的数据完全一致时,该标签比较器(3-2)输出为“真”,表示所需的流相关数据已经保存在工作栈Bank B中;c、栈切换控制器(3-3),用来控制两个工作栈的状态,即是为当前正在被处理的数据包向处理单元提供流相关数据,还是为下一个将要被处理的数据包从网络处理器外部的控制信息存储器中读取相关的流相关数据;该栈切换控制器(3-3)设有两个寄存器RC(3-3-I)和RN(3-3-II),分别用来保存当前正在被处理单元使用的工作栈号和下一个数据包的处理所需使用的工作栈号;栈切换控制器(3-3)的输入信号包括标签比较器(3-1)和标签比较器(3-2)的输出信号,来自处理单元的状态信号PE_SWCH和由有限状态机(3-4)送往栈切换控制器(3-3)的地址评估信号FSM_EVL;输出信号包括Bank A选择信号SEL_A和Bank B选择信号SEL_B;当SEL_A为“真”时,表示工作栈Bank A目前正在被处理单元使用;当SEL_B为“真”时,表示工作栈Bank B目前正在被处理单元使用;因此,在任何时刻,SEL_A和SEL_B互为相反;当由有限状态机(3-4)送往栈切换控制器(3-3)的地址评估信号FSM_EVL变为有效时,表示下一个数据包的处理所需的流相关数据的起始地址已经由流分类器送达Flow-Cache,需要对该流相关数据是否已经保存在Flow-Cache中进行判断;此时,如果标签比较器(3-1)和标签比较器(3-2)的输出均为“假”,则表示流相关数据在Flow-Cache中还不存在,因此需要将RN(3-3-II)的内容变为当前未被处理单元使用的那个工作栈的栈号,表示在该工作栈中即将进行数据的移动,并且当处理单元开始处理下一个数据包时,会使用该工作栈;如果标签比较器(3-1)输出为“真”,表示流相关数据已经保存在工作栈Bank A中,需要将RN(3-3-II)的内容置为Bank A的工作栈号;如果标签比较器(3-2)输出为“真”,表示流相关数据已经保存在工作栈Bank B中,则RN(3-3-II)的内容需要置为Bank B的工作栈号;标签比较器(3-1)和标签比较器(3-2)的输出均为“真”是一种非法状态,是不可能出现的;当来自处理单元的状态信号PE_SWCH变为有效后,表示处理单元结束了对当前数据包的处理,开始转入对下一个数据包的处理;此时,需要将寄存器RN(3-3-II)的内容写入寄存器RC(3-3-I);如果寄存器RC(3-3-I)中记录的是Bank A的工作栈号,则BankA选择信号SEL_A输出为“真”,Bank B选择信号SEL_B输出为“假”;如果寄存器RC(3-3-I)中记录的是Bank B的工作栈号,则Bank B选择信号SEL_B输出为“真”,BankA选择信号SEL_A输出为“假”;d、或非门(3-4-O),两个输入端与标签比较器(3-1)和标签比较器(3-2)的输出端相连,输出为MISS信号;如果标签比较器(3-1)和标签比较器(3-2)的输出均为“假”,则表示流相关数据在Flow-Cache中还不存在,输出信号MISS变为“真”;标签比较器(3-1)和标签比较器(3-2)中任何一个的输出为“真”,则表示流相关数据已经存在于Flow-Cache中,输出信号MISS变为“假”;标签比较器(3-1)和标签比较器(3-2)的输出均为“真”是一种非法状态,是不可能出现的;e、有限状态机(3-4),负责完成下一个数据包处理所需的流相关信息读取和被替换信息的写回操作;有限状态机(3-4)的输入信号包括来自流分类器的流相关数据预取请求信号CL_RQ、由存储器调度器送到Flow-Cache的确认信号FCMS_ACK、由多路选择器(3-M4)输出的DIRTY信号、由多路选择器(3-M1)输出的Tag_DO信号、来自流分类器的流相关数据预取地址线CL_ADDR的index部分、或非门(3-4-O)输出的MISS信号;输出信号包括送往栈切换控制器(3-3)的地址评估信号FSM_EVL、送往存储器调度器的地址线FC_ADDR、送往存储器调度器的访问请求信号FCMS_RQ、送往多路选择器(3-A2)和多路选择器(3-B2)的DTY_WR信号、送往多路选择器(3-A7)和多路选择器(3-B7)的DAT_WR信号、送往多路选择器(3-A1)和多路选择器(3-B1)的Tag_WR信号;该状态机假设工作栈内所有的RAM,其读写控制输入端变为“1”时,为写操作请求,变为“0”时,为读操作请求;并且在地址信号变为有效后的一个周期,数据输出变为有效;有限状态机(3-4)的状态转换流程如下I、空闲状态(4-1)如果来自流分类器的流相关数据预取请求信号CL_RQ变为有效,说明有新的数据包接受了流分类操作,需要对流相关数据是否已经保存在Flow-Cache中进行判断,进入判定状态;否则,维持空闲状态;II、判定状态(4-2)此时地址标签空间Tag RAM A和Tag RAM B中的数据均已经读出,标签比较器(3-1)和标签比较器(3-2)的输出结果变为有效;将输出信号FSM_EVL置为有效,指示栈切换控制器(3-3)进行工作;如果MISS信号为“假”,返回空闲状态;如果MISS信号为“真”,并且DIRTY信号为“1”,表示被替换块的内容被处理单元修改过,需要写回网络处理器外的控制信息存储器;将Tag_DO输出为FC_ADDR信号的高t-r位,将FC_ADDR信号的低s位置为零,将来自流分类器的流相关数据预取地址线CL_ADDR的index部分作为FC_ADDR信号的index部分输出,进入写回状态;如果MISS信号为“真”,并且DIRTY信号为“0”,则直接将新的流相关数据读入Flow-Cache;将来自流分类器的流相关数据预取地址线CL_ADDR作为FC_ADDR信号的高t位输出,进入读取状态;III、写回状态(4-3)将DAT_WR保持为读请求状态;通过送往存储器调度器的访问请求信号FCMS_RQ发起写操作请求;当由存储器调度器送到Flow-Cache的确认信号FCMS_ACK返回为有效时,如果工作栈中的被替换块中还存在尚未写回的数据,则将输出信号FC_ADDR的内容设置为指向下一个需要被写回的数据的地址,通常情况下,数据总线的宽度为32位,当网络处理器以字节寻址时,将输出信号FC_ADDR的值加4即可,然后通过送往存储器调度器的访问请求信号FCMS_RQ再次发起写操作请求;重复该过程直到被替换块内所有的数据均已写回,撤销写操作请求,进入读取状态;IV、读取状态(4-4)通过送往存储器调度器的访问请求信号FCMS_RQ发起读操作请求;当由存储器调度器送到Flow-Cache的确认信号FCMS_ACK返回为有效时,将DAT_WR置为写请求;如果新的流相关数据尚未全部从网络处理器外的控制信息存储器中读出,则将FC_ADDR的内容指向下一个需要被读取的数据的地址,通常情况下,数据总线的宽度为32位,当网络处理器以字节寻址时,将FC_ADDR的内容加4即可,然后通过送往存储器调度器的访问请求信号FCMS_RQ发起读操作请求;重复该过程直到新的流相关数据均已读出并写入Flow-Cache,撤销读操作请求;将Tag_WR和DTY_WR置为写请求并维持一个周期,以保证新的地址标签信息和新的修改状态信息写入相应的工作栈,进入空闲状态;f、应答器(3-5),输入信号为流相关数据高速缓冲存储器访问请求信号FC_RQ,输出信号为应用相关数据高速缓冲存储器的确认信号FC_ACK;在FC_RQ信号变为有效的一个周期后,FC_ACK信号变为有效并维持一个周期,表示数据已经从Flow-Cache读出或者写入;g、18个多路选择器,所有的多路选择器均在选择控制端为“真”时,选通第一输入端的数据作为输出;当选择控制端为“假”时,选通第二输入端的数据作为输出;I、多路选择器(3-A1),设有来自有限状态机(3-4)的Tag_WR作为第一输入端和“0”作为第二输入端,SEL_B作为选择控制端;输出端与地址标签空间Tag RAM A的读写控制输入端TagA_WR相连;当SEL_B为“真”时,表示处理单元正在使用工作栈Bank B,工作栈Bank A接受有限状态机(3-4)的控制;当SEL_B为“假”时,表示处理单元正在使用工作栈BankA,由于处理单元不使用地址标签空间Tag RAM A,因此,TagA_WR的输出为“0”;II、多路选择器(3-B1),设有来自有限状态机(3-4)的Tag_WR作为第一输入端和“0”作为第二输入端,SEL_A作为选择控制端;输出端与地址标签空间Tag RAMB的读写控制输入端TagB_WR相连当SEL_A为“真”时,表示处理单元正在使用工作栈Bank A,工作栈Bank B接受有限状态机(3-4)的控制;当SEL_A为“假”时,表示处理单元正在使用工作栈BankB;由于处理单元不使用地址标签空间Tag RAM B,因此,TagB_WR的输出为“0”;III、多路选择器(3-A2),设有由处理单元送往Flow-Cache的写操作请求信号FC_WR作为第一输入端,来自有限状态机(3-4)的DTY_WR作为第二输入端;SEL_A作为选择控制端;输出端与修改状态空间Dirty RAM A的读写控制输入端DTYA_WR相连;当SEL_A为“真”时,表示处理单元正在使用工作栈Bank A,当处理单元进行写操作的时候,需要将修改状态空间Dirty RAM A的标志位置为“1”,即接受FC_WR的控制;当SEL_A为“假”时,表示处理单元正在使用工作栈Bank B,工作栈Bank A接受有限状态机(3-4),即DTY_WR的控制,当有新的流相关数据从控制信息存储器中读出时,将修改状态空间Dirty RAM A的标志位清零;IV、多路选择器(3-B2),设有由处理单元送往Flow-Cache的写操作请求信号FC_WR作为第一输入端,来自有限状态机(3-4)的DTY_WR作为第二输入端,SEL_B作为选择控制端;输出端与修改状态空间Dirty RAM B的读写控制输入端DTYB_WR相连;当SEL_B为“真”时,表示处理单元正在使用工作栈Bank B,当处理单元进行写操作的时候,需要将修改状态空间Dirty RAM B的标志位置为“1”,即接受FC_WR的控制;当SEL_B为“假”时,表示处理单元正在使用工作栈Bank A,工作栈Bank B接受有限状态机(3-4),即DTY_WR的控制,当有新的流相关数据从控制信息存储器中读出时,将修改状态空间Dirty RAM B的标志位清零;V、多路选择器(3-A3),设有“1”作为第一输入端和“0”作为第二输入端,SEL_A作为选择控制端;输出端与修改状态空间Dirty RAM A的数据输入端DTYA_DI相连;当SEL_A为“真”时,表示处理单元正在使用工作栈Bank A,当处理单元进行写操作的时候,需要将修改状态空间Dirty RAM A的标志位置为“1”;当SEL_A为“假”时,表示处理单元正在使用工作栈Bank B,当有新的流相关数据从控制信息存储器中读出并写入工作栈Bank A时,将修改状态空间Dirty RAM A的标志位清零;VI、多路选择器(3-B3),设有“1”作为第一输入端和“0”作为第二输入端,SEL_B作为选择控制端;输出端与修改状态空间Dirty RAM B的数据输入端DTYB_DI相连;当SEL_B为“真”时,表示处理单元正在使用工作栈Bank B,当处理单元进行写操作的时候,需要将修改状态空间Dirty RAM B的标志位置为“1”;当SEL_B为“假”时,表示处理单元正在使用工作栈Bank A,当有新的流相关数据从控制信息存储器中读出并写入工作栈Bank B时,将修改状态空间Dirty RAM B的标志位清零;VII、多路选择器(3-A4),设有来自处理单元的控制信息地址线PE_ADDR作为第一输入端和来自有限状态机(3-4)的FC_ADDR作为第二输入端,SEL_A作为选择控制端;输出端与修改状态空间Dirty RAM A的地址信号输入端DTYA_AD相连;当SEL_A为“真”时,表示处理单元正在使用工作栈Bank A,当处理单元进行写操作的时候,需要使用来自处理单元的地址;当SEL_A为“假”时,表示处理单元正在使用工作栈Bank B,工作栈Bank A接受有限状态机(3-4)的控制;VIII、多路选择器(3-B4),设有来自处理单元的控制信息地址线PE_ADDR作为第一输入端和来自有限状态机(3-4)的FC_ADDR作为第二输入端,SEL_B作为选择控制端;输出端与修改状态空间Dirty RAM B的地址信号输入端DTYB_AD相连;当SEL_B为“真”时,表示处理单元正在使用工作栈Bank B,当处理单元进行写操作的时候,需要使用来自处理单元的地址;当SEL_B为“假”时,表示处理单元正在使用工作栈Bank A,工作栈Bank B接受有限状态机(3-4)的控制;IX、多路选择器(3-A5),设有来自处理单元的数据PE_DOUT作为第一输入端和由存储器调度器送到Flow-Cache的数据FCMS_DI作为第二输入端,SEL_A作为选择控制端;输出端与数据空间Data RAM A的数据输入端DATA_DI相连;当SEL_A为“真”时,表示处理单元正在使用工作栈Bank A,当处理单元进行写操作的时候,需要将来自处理单元的数据PE_DOUT写入数据空间Data RAM A;当SEL_A为“假”时,表示处理单元正在使用工作栈Bank B,当有新的流相关数据从控制信息存储器中读出时,需要写入工作栈Bank A的数据空间Data RAM A中;X、多路选择器(3-B5),设有来自处理单元的数据PE_DOUT作为第一输入端和由存储器调度器送到Flow-Cache的数据FCMS_DI作为第二输入端,SEL_B作为选择控制端;输出端与数据空间Data RAM B的数据输入端DATBDI相连;当SEL_B为“真”时,表示处理单元正在使用工作栈Bank B,当处理单元进行写操作的时候,需要将来自处理单元的数据PE_DOUT写入数据空间Data RAM B;当SEL_B为“假”时,表示处理单元正在使用工作栈Bank A,当有新的流相关数据从控制信息存储器中读出时,需要写入工作栈Bank B的数据空间Data RAM B中;XI、多路选择器(3-A6),设有来自处理单元的控制信息地址线PE_ADDR作为第一输入端和来自有限状态机(3-4)的FC_ADDR作为第二输入端,SEL_A作为选择控制端;输出端与数据空间Data RAM A的地址信号输入端DATA_AD相连;当SEL_A为“真”时,表示处理单元正在使用工作栈Bank A,当处理单元进行写操作的时候,需要使用来自处理单元的地址PE_ADDR;当SEL_A为“假”时,表示处理单元正在使用工作栈Bank B,工作栈Bank A接受有限状态机(3-4)的控制;XII、多路选择器(3-B6),设有来自处理单元的控制信息地址线PE_ADDR作为第一输入端和来自有限状态机(3-4)的FC_ADDR作为第二输入端,SEL_B作为选择控制端;输出端与数据空间Data RAM B的地址信号输入端DATB_AD相连;当SEL_B为“真”时,表示处理单元正在使用工作栈Bank B,当处理单元进行写操作的时候,需要使用来自处理单元的地址PE_ADDR;当SEL_B为“假”时,表示处理单元正在使用工作栈Bank A,工作栈Bank B接受有限状态机(3-4)的控制;XIII、多路选择器(3-A7),设有由处理单元送往Flow-Cache的写操作请求信号FC_WR作为第一输入端和来自有限状态机(3-4)的DAT_WR作为第二输入端,SEL_A作为选择控制端;输出端与数据空间Data RAM A的读写控制输入端DATA_WR相连;当SEL_A为“真”时,表示处理单元正在使用工作栈Bank A,需要由处理单元对数据空间Data RAM A的读写进行控制;当SEL_A为“假”时,表示处理单元正在使用工作栈Bank B,工作栈Bank A接受有限状态机(3-4)的读写控制;XIV、多路选择器(3-B7),设有由处理单元送往Flow-Cache的写操作请求信号FC_WR作为第一输入端和来自有限状态机(3-4)的DAT_WR作为第二输入端,SEL_B作为选择控制端;输出端与数据空间Data RAM B的读写控制输入端DATB_WR相连;当SEL_B为“真”时,表示处理单元正在使用工作栈Bank B,需要由处理单元对数据空间Data RAM B的读写进行控制;当SEL_B为“假”时,表示处理单元正在使用工作栈Bank A,工作栈Bank B接受有限状态机(3-4)的读写控制;XV、多路选择器(3-M1),设有地址标签空间Tag RAM A的输出TagA_DO作为第一输入端和地址标签空间Tag RAM B的输出TagB_DO作为第二输入端,SEL_B作为选择控制端;输出端为Tag_DO,是有限状态机(3-4)的一个输入信号;当SEL_B为“真”时,表示处理单元正在使用工作栈Bank B,工作栈Bank A接受有限状态机(3-4)的控制,并提供地址标签的内容;当SEL_B为“假”时,表示处理单元正在使用工作栈Bank A,工作栈Bank B接受有限状态机(3-4)的控制,并提供地址标签的内容;XVI、多路选择器(3-M2),设有数据空间Data RAM A的输出DATA_DO作为第一输入端和数据空间Data RAM B的输出DATB_DO作为第二输入端,SEL_B作为选择控制端;输出端为FCMS_DO,是由Flow-Cache送往存储器调度器的数据;当SEL_B为“真”时,表示处理单元正在使用工作栈Bank B,工作栈Bank A接受有限状态机(3-4)的控制,并向存储器调度器提供需要写回控制信息存储器的数据;当SEL_B为“假”时,表示处理单元正在使用工作栈Bank A,工作栈Bank B接受有限状态机(3-4)的控制,并向存储器调度器提供需要写回控制信息存储器的数据;XVII、多路选择器(3-M3),设有数据空间Data RAM A的输出DATA_DO作为第一输入端和数据空间Data RAM B的输出DATB_DO作为第二输入端,SEL_A作为选择控制端;输出端为FC_DOUT,是Flow-Cache提供给处理单元的数据信号;当SEL_A为“真”时,表示处理单元正在使用工作栈Bank A,由工作栈Bank A为处理单元提供需要的数据;当SEL_A为“假”时,表示处理单元正在使用工作栈BankB,由工作栈Bank B为处理单元提供需要的数据;XVIII、多路选择器(3-M4),设有修改状态空间Dirty RAM A的输出DTYA_DO作为第一输入端和修改状态空间Dirty RAM B的输出DTYB_DO作为第二输入端,SEL_B作为选择控制端;输出端为DIRTY,是有限状态机(3-4)的一个输入信号;当SEL_B为“真”时,表示处理单元正在使用工作栈Bank B,工作栈Bank A接受有限状态机(3-4)的控制,并提供数据空间的修改状态;当SEL_B为“假”时,表示处理单元正在使用工作栈Bank A,工作栈Bank B接受有限状态机(3-4)的控制,并提供数据空间的修改状态;(4)存储器调度器的输入信号包括由App-Cache送往存储器调度器的地址线AC_ADDR、由App-Cache送往存储器调度器的数据线ACMS_DO、由App-Cache送往存储器调度器的访问请求信号ACMS_RQ,由Flow-Cache送往存储器调度器的地址线FC_ADDR、由Flow-Cache送往存储器调度器的数据线FCMS_DO、由Flow-Cache送往存储器调度器的访问请求信号FCMS_RQ,来自存储器及I/O总线的确认信号ACK、来自存储器及I/O总线的数据输入信号DIN;输出信号包括由存储器调度器送到App-Cache的确认信号ACMS_ACK、由存储器调度器送到Flow-Cache的确认信号FCMS_ACK,由存储器调度器送到App-Cache的数据ACMS_DI、由存储器调度器送到Flow-Cache的数据FCMS_DI,以及送往存储器及I/O总线的地址信号ADDR、送往存储器及I/O总线的数据信号DOUT、送往存储器及I/O总线的访问请求信号RQ;存储器调度器接收并调度来自App_Cache和Flow_Cache的控制信息存储器读写请求,将这些请求进行排序后,转换为存储器及I/O总线需要的信号形式发送到总线上;存储器调度器所遵守的优先级原则如下读写请求中的写操作请求需要先保存在存储器调度器中与App_Cache和Flow_Cache对应的FIFO中,即来自Flow-Cache的写请求送入用WRFF表示的Flow-Cache的写操作请求FIFO存储器(2-W2),来自App-Cache的写请求送入用WRFA表示的App-Cache的写操作请求FIFO存储器(2-W1);读请求则不需要先进行缓存;对于同时发出的同类请求,App-Cache的读请求比Flow-Cache的读请求优先级要高,而App-Cache的写请求的优先级比Flow-Cache的写请求要低;对于读操作,存储器调度器需要等到读请求已经发送到存储器及I/O总线上,并且存储器及I/O总线也通过ACK信号进行了确认后,才向App-Cache返回确认信号ACMS_ACK、或者向Flow-Cache返回确认信号FCMS_ACK;对于写操作,只要写操作请求已经保存入相应的FIFO,则向App-Cache返回确认信号ACMS_ACK、或者向Flow-Cache返回确认信号FCMS_ACK;如果FIFO此时已满,无法写入,则要等到FIFO内的写操作请求被处理完毕一部分,FIFO内有多余空间供新的写操作请求写入后,才能向App-Cache返回确认信号ACMS_ACK、或者向Flow-Cache返回确认信号FCMS_ACK。
全文摘要
分裂式网络处理器控制信息高速缓冲存储器属于计算机技术领域,其特征在于含有区分应用相关数据或流相关数据的地址识别器、用来缓存应用相关数据的App-Cache、用来缓存流相关数据的Flow-Cache以及对来自App-Cache和Flow-Cache的控制信息存储器访问请求进行调度的存储器调度器;Flow-Cache中设有两个工作栈,以便处理单元在使用一个工作栈中的流相关数据对数据包进行处理的同时,另外一个工作栈能在需要的时候使用来自流分类器的控制信息预期地址,为下一个数据包读入相关的流相关数据;如果流相关数据被处理单元修改,当发生替换时,被修改的部分需要写回控制信息存储器。本发明既能提高网络处理器中高速缓冲存储器的效率,又能兼顾网络处理器对于性能确定性的需求。
文档编号H04L12/56GK1812379SQ20061001142
公开日2006年8月2日 申请日期2006年3月3日 优先权日2006年3月3日
发明者刘祯, 刘斌 申请人:清华大学