自由表和环形数据结构管理的制作方法

文档序号:6417914阅读:245来源:国知局
专利名称:自由表和环形数据结构管理的制作方法
背景本申请涉及自由表和环形数据结构管理。
网络处理器可以通过在所链接的存储缓冲器中存储接收到的数据来动态地缓存数据包。当与特定缓冲器有关的数据传出后,该缓冲器可以返回到用来存储可用缓冲器的称作“自由表”的池中。
网络处理器还可以使用静态分配的、例如预定义的存储缓冲器来缓存数据包。一个环形数据结构包括这种预定义的存储单元。可以使用一个指针来跟踪环形数据结构的插入位置。可用另一个指针来跟踪环形数据结构的移出位置。
有效地管理大量的池和缓冲器在网络处理器的运转和成本上可能是一个重要的因素。
附图的简要说明

图1是说明包括流水线网络处理器的系统的框图。
图2是说明示范性的流水线网络处理器的框图。
图3是示范性的高速缓存数据结构的框图。
图4是说明依照一种实现的队列入队请求流程的流程图。
图5是说明依照一种实现的入队操作的框图。
图6是说明依照一种实现的跟在队列入队操作后面的入队操作的框图。
图7是说明依照一种实现的队列离队请求流程的流程图。
图8是说明依照一种实现的离队操作的框图。
图9是说明依照一种实现的跟在队列离队操作后面的离队操作的框图。
图10是依照一种实现的包括自由表的常驻存储控制器的指针的高速缓存数据结构的框图。
图11是依照一种实现的包括入队操作之前的自由表的常驻存储控制器指针的高速缓存数据结构的框图。
图12是给出依照一种实现的自由表的入队操作的框图。
图13是依照一种实现的包括离队操作之前的自由表的常驻存储控制器的指针的高速缓存数据结构的框图。
图14是说明依照一种实现的自由表的离队操作的框图。
图15是依照一种实现的包括存储器环形数据结构的常驻存储控制器的指针的高速缓存数据结构的框图。
图16是说明依照一种实现的放进命令操作的框图。
图17是说明依照一种实现的取出命令操作的框图。
详细描述参照图1,用于处理数据包的网络系统10包括与网络装置14的输入端相连的数据包源12,例如与其它网络装置的接口。网络装置14的输出端与数据包的目的地16相连,例如与其它网络装置的接口。网络装置14可以包括具有存储器的网络处理器18,用于对存储器数据结构进行操作。处理器执行指令并用配置成存储和将数据包转发到指定目的地的存储器数据结构来操作。网络处理器接收的数据包是网络包。网络装置14可包括例如网络交换机或网络路由器或是它们的组成部分。数据包源12可以包括通过以高速数据包传输线速度、例如光载波10吉比特线(即,OC-192)或其它线路速度工作的通信路径与其它网络装置相连接的接口。数据包的目的地16可以包括一个类似的网络连接或接口。
参照图2,网络处理器18有多个编程引擎,分别用作接收流水线21、发送调度器24、队列管理器27和发送流水线28。每个编程引擎具有多条目内容可寻址存储器(CAM),用以跟踪N个最近使用的队列描述符,其中N是CAM中的条目数。例如,队列管理器27包括CAM 29。网络处理器18包括与第一存储器30和第二存储器32相连的存储控制器34。第三存储器17包括使引擎按以下所详述的进行操作的软件指令。尽管所描述的实现使用了分开的存储器,但单个存储器也可用来执行上面提到的第一和第二存储器的任务。存储控制器34按照接收命令的顺序来发起队列命令并与队列管理器27交换数据。第一存储器30具有用于存储数据的存储空间。第二存储器32与队列管理器27和网络处理器18的其它组件相连。
如图2所示,第一存储器30和第二存储器32驻留在网络处理器18的外部。或者,第一存储器30和/或第二存储器32可在网络处理器18的内部。处理器18还包括与连接到接收和发送缓冲器20、36的接收总线和发送总线的硬件接口6、8。
接收缓冲器20配置成用来缓存从数据包源12接收的数据包。每个数据包可包含表示要发送到目的地的实际数据的真实数据部分、表示数据源的网络地址的源数据部分以及表示数据目的地的网络地址的目的地数据部分。接收流水线21与接收缓冲器20的输出端相连。接收流水线21还与可具有先进先出(FIFO)数据结构的接收环22相连。接收环22与队列管理器27相连。
接收流水线21配置成用来处理来自接收缓冲器20的数据包,并在第二存储器32中包含在存储地址38中的数据缓冲器中存储数据包。接收流水线21通过接收环22向队列管理器27发出请求23,请求在队列的末尾附加一个缓冲器。
一旦接收流水线21处理了数据包,接收流水线可产生发往队列管理器27的入队请求23。接收流水线21可包括以流水线方式工作的多线程编程引擎。引擎接收数据包,将它们分类,并根据分类将它们存储在输出队列里。这种接收处理确定每个包的输出队列。通过流水线作业,编程引擎可以完成指令执行的第一阶段,当该指令进行到下一个阶段,可开始一个新的指令。当等待第一个指令完成时,处理器不必搁置不用。因此,流水线作业可以改进系统性能。入队请求表示在第一存储器30中的缓冲器描述符队列48中的最后一个缓冲器描述符后面追加一个描述新接收的缓冲器的缓冲器描述符的请求。接收流水线21在产生入队请求前可以缓存几个数据包。因此,可以减少所产生的入队请求的总数。
发送调度器24通过接收环22与队列管理器27相连,并负责根据指定的标准产生离队请求25。这个标准可包括特定的缓冲器队列中的缓冲器数目达到预定水平的时间。发送调度器24确定数据包的发送顺序。离队请求25表示将第一缓冲器从队列48中移出的请求。发送调度器24还可包括用于产生离队请求25的调度算法,如“循环法”、基于优先级或其它调度算法。发送调度器24可配置成使用避免拥塞技术,如包括对数据包流量计算统计数据的早期随机检测(RED)。对于每个队列,发送调度器保留一个表示队列是否空的位。
在一种实现中,由单个多线程的编程引擎提供的队列管理器27处理来自接收流水线21的入队请求以及来自发送调度器24的离队请求。通过对每个队列维护链表数据结构,队列管理器27允许动态的存储器分配。
队列管理器27包括配置成用以管理描述队列的数据结构(“队列描述符”)的高速缓存的软件组件。如图3所示,队列描述符46a包括指向队列的第一个条目A的头指针50a、指向队列的最后一个条目C的尾指针50b和表示队列当前条目数的计数字段50c。所有队列描述符的头指针地址的字定位都应该是2的幂,因为当访问存储器以寻找队列描述符时,以2的幂的方式工作是更有效的。
参照图2,高速缓存有标记部分44a和数据存储部分44b。高速缓存的标记部分44a驻留在队列管理器27内,高速缓存的数据存储部分44b驻留在存储控制器34内。标记部分44a由CAM 29来管理,其中可包括配置成用来实现高速缓存条目置换策略的硬件组件,如最近最少使用(LRU)策略。高速缓存中的每个条目的标记部分指向用来执行入队或离队操作的最后N个队列描述符中的一个。存储器中队列描述符的位置被存储成CAM条目。相应的队列描述符被存储在CAM中输入的地址处的存储控制器34的数据存储部分44b中。放入队列中的实际数据(例如包含在图3中的存储地址38a-38c中)存储在第二存储器32中,并由位于第一存储器30中的缓冲器描述符(例如48a)的队列来引用。
队列管理器27可交替地服务于入队和离队请求。对于单缓冲器数据包,入队请求引用数据存储部分44b中的条目的尾指针。离队请求引用数据存储部分44b中的条目的头指针。由于高速缓存包括有效的更新的队列描述符,因此当要求对同一个队列几乎同时进行入队和离队操作时,可以不需要锁定对队列描述符的访问。因此,可以避免锁定带来的原子访问和等待时间。
数据存储部分44b保留一定数量的最近使用(MRU)队列描述符46的列表。每个队列描述符包括指向相应的缓冲器描述符MRU队列48的指针。在一种实现中,数据存储部分44b中的MRU队列描述符46的数目是16。每个MRU队列描述符46由驻留在标记部分44a中的一组指针45来引用。此外,每个MRU队列描述符46与唯一的标识符相关联,以便可以很容易识别它。
参照图3,说明高速缓存的操作。标记部分44a中的第一条目与指向驻留在数据存储部分44b中的MRU队列描述符46a的指针45a相关。队列描述符46a与下面详细讨论的缓冲器描述符的MRU队列相关。队列描述符46a包括指向第一缓冲器描述符A的头指针50a和指向最后一个缓冲器描述符C的尾指针50b。可选的计数字段50c维护缓冲器描述符队列48a中的缓冲器描述符的数量。在这种情况下,计数字段50c被设置成值“3”,表示缓冲器描述符A、B、C。如下面进一步详细论述的,可以修改头指针50a、尾指针50b和计数字段50c以响应入队和离队请求。
缓冲器描述符是描述缓冲器的数据结构。缓冲器描述符可包括地址字段、单元计数字段和包结束(EOP)位。地址字段包括数据缓冲器的存储地址。因为每个数据缓冲器可进一步分成单元,所以单元计数字段包括有关缓冲器的单元计数的信息。EOP位用来表示缓冲器是一个包中的最后一个缓冲器。
再参照图2,本技术在可包括静态随机存取存储器(SRAM)的第一存储器30中的缓冲器描述符的地址与可包括动态随机存取存储器(DRAM)的第二存储器32中的数据缓冲器的地址之间实现了隐含的映射53。在此上下文中,队列是描述可存储在不连续地址处的数据缓冲器的缓冲器描述符的有序列表。
例如,如图3所示,除了队列中最后一个缓冲器描述符外,队列48a中的每个缓冲器描述符A、B都包括指向队列中下一个描述符缓冲器的缓冲器描述符指针55a、55b。队列中的最后一个缓冲器描述符C的缓冲器描述符指针55c是空的。
再参照图2,未高速缓存的队列描述符50存储在第一存储器30中,当前不被数据存储部分44b引用。每个未高速缓存的队列描述符50还可与唯一标识符相关联。此外,每个未高速缓存的队列描述符50包括指向相应的缓冲器描述符的未高速缓存队列52的指针51。每个缓冲器描述符的未高速缓存队列52又包括指向驻留在第二存储器32中的存储地址38中包含的相应数据缓冲器的指针57。
每个入队请求包括与相应数据包相关的数据缓冲器的地址38。此外,每个入队或离队请求包括指定与存储地址38中包含的数据缓冲器相关的未高速缓存的队列描述符50或MRU队列描述符46的标识符。
参照图4和5,响应于接收入队请求23,队列管理器27向存储控制器34产生100一个入队命令13。在所述实例中,入队请求23与包含在存储地址38d中并在存储地址38c中包含的数据缓冲器后面接收的一个后续数据缓冲器相关。入队命令13可包括指定驻留在数据存储部分44b中的MRU队列描述符46的信息。假定入队请求23包括指定队列描述符46a的信息和与数据缓冲器有关的地址38d。当前指向队列48a中的缓冲器描述符C的尾指针50b返回到队列管理器27。评估入队请求23以确定指定的队列描述符是否当前在数据存储部分44b中。如果否,则执行置换任务110。稍后讨论置换任务。
与缓冲器描述符C相关的缓冲器描述符指针55c从空值变化,设置102成指向后面一个缓冲器描述符D。这通过将缓冲器描述符指针55c设置成缓冲器描述符D的地址来实现。如线53d所示,缓冲器描述符D指向存储地址38d中存储接收数据包的数据缓冲器。
一旦设置了缓冲器描述符指针55c,如虚线61所示,尾指针50b被设置104成指向缓冲器描述符D。这通过将尾指针50b设置成缓冲器描述符D的地址来实现。因为现在缓冲器描述符D是队列48a中的最后一个缓冲器描述符,所以缓冲器描述符指针55d的值是空。此外,计数字段50c中的值更新为“4”以反映队列48a中的缓冲器描述符的数目。结果,通过使用驻留在数据存储部分44b的队列描述符46a将缓冲器描述符D加到队列48a中。
如果入队命令13包括指定不属于MRU队列描述符46的队列描述符的队列标识符,则队列管理器27用指定的队列描述符代替特定MRU队列描述符46。结果,指定的队列描述符和相应的缓冲器描述符的未高速缓存队列被数据存储部分44b引用。此外,对于入队命令,与指定的队列描述符相关的缓冲器描述符的新引用队列52被更新成指向包含在存储地址38中用于存储接收数据包的特定数据缓冲器的存储地址。由于MRU队列描述符46已经在数据存储部分44b中,因此该队列描述符可迅速而有效地被更换。
参照图6,处理器18可接收106一个与相同队列描述符46a和队列48a相关的后续入队请求。例如,假定队列管理器27接收与新到达的数据缓冲器38e相关的后续入队请求。还假定包含在存储地址38e中的数据缓冲器与队列描述符46a相关。如虚线62所示,尾指针50b可被设置成指向缓冲器E。由于尾指针50b已经在数据存储部分44b中,因此不必从存储器中检索就可以更新尾指针。结果,可以减小对缓冲器的同一队列的紧接的入队操作的等待时间。因此,队列管理器可管理对大量队列的请求以及仅对少数队列或单个队列的连续请求。此外,队列管理器27发出命令,向存储控制器34指示使用多个数据存储部分条目中的哪一个来执行命令。
参照图7和图8,响应接收200离队请求25,队列管理器27向存储控制器34产生200离队命令15。在这个实例中,离队请求与队列描述符46a相关,并表示从第二存储器32中检索数据缓冲器的请求。一旦检索到数据缓冲器,将缓冲器从第二存储器32发送到发送缓冲器36。离队请求25包括指定队列描述符46a的信息。例如,队列描述符46a的头指针50a指向第一缓冲器描述符A,A又指向存储地址38a中的数据缓冲器。结果,存储地址38a中的数据缓冲器返回到队列管理器27。
如虚线64所示,头指针50a被设置成202指向队列48a中的下一个缓冲器描述符B。这可通过将头指针50a设置成缓冲器B描述符的地址来实现。计数字段50c中的值更新为“4”,以反映剩下的缓冲器描述符的数目(B到E)。结果,通过使用驻留在数据存储部分44b中的队列描述符46a将包含在存储地址38a中的数据缓冲器从队列48a中检索出来。
队列管理器27可接收204与同一队列描述符相关的后续离队请求25。假定,例如,队列管理器27接收与队列描述符46a相关的另一个离队请求25。参照图9,如线64所示,因为前面提到的缓冲器A已经被移走,所以头指针46a当前指向现在是第一缓冲器的缓冲器B。不必首先从存储器中检索头指针50a就可将其设置成206指向缓冲器C,如虚线65所示,因为头指针已经在数据存储部分44b中。结果,可以减少对于同一缓冲器队列的接连离队操作的等待时间。
然而,在一些情况下,当前正占据数据存储部分44b的一个条目的队列描述符46a与存储地址38b中的数据缓冲器无关。在该情况下,处理器18执行208与如上所述类似的置换任务。一旦置换任务完成,就如上所述执行与离队请求相关的操作。
队列描述符的高速缓存可以用分布式的方式来完成,使得标记部分44a驻留在存储控制器34中,数据存储部分44b驻留在第一存储器30中。可以快速处理从接收缓冲器20接收的存储地址38中包含的数据缓冲器。例如,作为头指针的第一个离队存储器读取的结果,一旦用于那个队列描述符的头指针被更新,就可开始一对离队命令中的第二个命令。类似地,作为尾指针的第一个入队存储器读取的结果,一旦用于那个队列描述符的尾指针被更新,就可开始一对入队命令中的第二个命令。此外,使用缓冲器队列,如缓冲器链表,允许用灵活的方式处理大量队列。数据缓冲器可快速地进入缓冲器队列和从缓冲器队列中离开。
不用来存储描述数据缓冲器队列结构的信息的高速缓存的数据存储部分44b的条目可用来存储(1)描述自由表结构的信息,作为非高速缓存的或永久存在的条目;(2)描述存储环结构的信息,作为非高速缓存的或永久存在的条目;(3)描述日志结构的信息,作为永久存在的条目;或者(4)这些用法的任意组合。永久存在的条目是指那些不会被移走以便为新条目腾出空间的条目。
自由表用作当前未使用的缓冲器的池。动态分配存储器的系统可以将自由表用作缓冲器贮存器。这种系统从自由表中为新接收的数据分配可用的自由存储空间。当接收一个数据包或单元时,按需要从池中取出条目。当该数据包或单元被发送或被丢弃时,条目返回到池中。当使用链表数据结构实现自由表时,使用离队命令从当前未使用的缓冲器队列的前面取出一个新缓冲器。类似地,使用入队命令可将终止使用的缓冲器添加到当前未使用缓冲器队列的末尾。
或者,当使用堆栈数据结构来实现自由表时,可使用出栈命令为新接收的数据从堆栈中取出一个新缓冲器。可使用进栈命令将终止使用的缓冲器添加到堆栈中。因为堆栈是一个后进先出(LIFO)的数据结构,所以缓冲器以与它们入栈时相反的顺序被取出。最近加入堆栈的缓冲器被第一个取出。
如图10所示,不用来存储MRU队列描述符46的高速缓存的数据存储部分44b的多个条目146可用来存储描述一个或多个自由表结构的队列描述符146a。在一种实现中,描述数据存储部分中的数据缓冲器的队列描述符46的数目是16,高速缓存的数据存储部分44b中的条目总数是64。
用于存储描述自由表结构的队列描述符的数据存储部分的条目146可以是非高速缓存的或永久存在的条目。因此,对于每个描述想要存储的自由表的结构的队列描述符,取置换任务只可在系统初始化时执行一次,以将它们装载到队列的数据存储部分的条目的子集146中。
当包含在缓冲器中的数据被发送后,终止目前缓冲器的使用,缓冲器返回到自由表中以补充当前未使用缓冲器池。处理引擎线程,如提供队列管理器27的线程,可以向引用自由表条目146的存储控制器产生入队命令。
参照图11,说明高速缓存的操作。在这个实例中,描述自由表148a结构的队列描述符146a包括指向自由表中第一缓冲器V的头指针150a、指向自由表中的最后一个缓冲器Y的尾指针150b和保持自由表148a中缓冲器数目的计数字段150c。在这种情况下,计数字段150c被设置成值“4”以表示缓冲器V、W、X和Y。如下进一步详细论述,可以修改头指针150a、尾指针150b和计数字段150c以响应与自由表相关的入队和离队命令。
自由表148a中的每个缓冲器,如第一缓冲器V,包含指向下一个缓冲器W的缓冲器指针155v。与最后一个缓冲器Y相关的缓冲器指针155y有一个被设置成空的值以表示它是队列148a中的最后一个缓冲器。
在图12描述的实例中,当前指向缓冲器Y的尾指针150b返回到队列管理器27。与缓冲器Y相关的缓冲器指针155y当前包含表示它是自由表148a中最后一个缓冲器的空值。缓冲器指针155y被设置成指向后续缓冲器Z,该缓冲器刚刚结束使用。这可通过将缓冲器指针155y设置成缓冲器Z的地址来实现。
一旦已经设置缓冲器指针155y,如虚线161所示,尾指针150b被设置成指向缓冲器Z。这可通过将尾指针150b设置成缓冲器Z的地址来实现。此外,将计数字段150c中的值更新为“5”以反映自由表148a中缓冲器的数目。结果,通过使用驻留在数据存储部分44b中的队列描述符146a,将缓冲器Z添加到自由表148a中。
当存储和转发处理器接收新数据包时,系统从自由表中分配一个缓冲器。
参照图13,说明高速缓存的操作。在这个实例中,处理引擎线程,如提供队列管理器27的线程,可以向引用自由表条目的存储控制器34产生离队命令。离队请求与描述自由表结构的信息146a相关并表示从存储器中检索未使用缓冲器的请求。一旦检索到未使用的缓冲器,可将它从存储器发送到接收缓冲器。离队请求25包括指定自由表结构的信息146a。描述自由表结构的信息146a的头指针150a指向自由表中的第一缓冲器V。结果,未使用的缓冲器V返回到队列管理器。
参照图14,如虚线164所示,头指针150a被设置成指向自由表148a中的下一个缓冲器W。这可以通过将头指针150a设置成缓冲器W的地址来实现。计数字段150c的值更新成“4”以反映剩余的缓冲器的数目(W到Z)。结果,通过使用驻留在数据存储部分44b中的描述自由表结构的信息146a,将未使用的缓冲器V从自由表148a中检索出来,处理器可用该缓冲器V存储新接收的数据包或单元。
如上所述,引用描述高速缓存中自由表结构的信息的入队操作被用来将缓冲器返回到该自由表。引用描述高速缓存中自由表结构的信息的离队操作被用来从该自由表中取出缓冲器。使用本技术,通过使用现有的用来执行其它任务的硬件(例如存储控制器,CAM),处理器可以以有效、低成本的方式管理大量的自由表。
不用来存储描述数据缓冲器队列结构的信息的高速缓存的数据存储部分44b的条目也可用来管理环形数据结构。因为环形数据结构包括预定尺寸和位置的连续存储地址块,所以它可用于静态存储器分配。
参照图15,一种技术定义和实现了使用高速缓存的数据存储部分44b的条目246来存储描述环形结构300的信息的命令。描述环结构的信息246a包括跟踪将被插入数据的存储单元0003的头指针250a,跟踪其中数据301将被移走的存储单元0001的尾指针250b,和跟踪环300中条目数量的可选计数字段250c。用于存储描述环结构的信息的数据存储部分的条目246可以是非高速缓存的或永久存在的条目。因为环形数据结构有固定尺寸,只要指针250a、250b中任一个指向环末尾的地址,它都绕回到环起始处的地址。
编程引擎的上下文可以发出放入命令,使数据被写入环形数据结构。放入命令指定长度字段和头指针,其中长度字段由字的数目来确定。
参照图16,数据字303被写入头指针250a所指示的地址0003处的环中。一旦已在地址0003写入数据字,如虚线175所示,头指针250a被设置成指向下一个存储单元0004。以上可以通过将头指针250a设置成存储地址0004来实现。此外,计数字段250c的值更新为“3”以反映环300中的数据字的数目。另外,计数字段和指示是否有足够可用的存储器来将指定长度的字写到环中的状态位返回到发出放入命令的编程引擎上下文中。结果,通过使用驻留在数据存储部分44b中的描述环结构的信息246a将数据写入环300中。
编程引擎的上下文可发出取出命令,使数据从环形数据结构中读出。取出命令指定长度字段和尾指针,其中长度字段以字的数目来指定。
参照图17,从尾指针250b指示的存储地址0001处的环中读出数据字301。一旦已读出数据字,如虚线176所示,尾指针250b被设置成指向存储单元0002。以上通过将尾指针250b设置成存储地址0002来实现。此外,计数字段250c的值更新为“2”以反映环300中数据字的数目。结果,通过使用驻留在数据存储部分44b中的描述环结构的信息246a将数据从环300中移出。如果计数字段250c小于取出命令中指定的长度字段,指示环300为空的标识符、如零数据字被返回到发出取出命令的编程引擎上下文,没有数据从环中移走。
因为网络处理器可包括多个编程引擎,其中每个可执行多个线程或上下文,观察任何单独编程引擎线程上代码如何执行和跟踪关于彼此不同的编程引擎线程的进展可有利于帮助调试网络处理器上运行的应用程序。
本技术定义和实现一组日记命令,其中提供了一种观察代码在系统运行期间如何执行的方法。该技术使用了未被用来存储描述数据缓冲器队列结构的信息的高速缓存的数据存储部分44b的条目。使用这些条目来管理一个以日志方式实现的环形数据结构。这些条目中的每一个包括描述环形结构的信息。如前面结合图15-17所述,描述环结构的信息246a包括跟踪要插入数据的单元的头指针250a、跟踪要移出数据的单元的尾指针250b和跟踪所作日志条目数量的可选计数字段250c。由于在程序执行期间数据被插入日志,而没有数据从日志中移走,所以对于此目的来说,尾指针250b比头指针250a更有意义。用于支持日志命令的条目可永久驻留在数据存储部分。
尽管一个执行的程序可在到达程序预定位置时产生用于提供关于执行上下文状态的有用信息的消息,但用以支持日志的指令数量应该最小。否则,用以支持日志的系统资源可能干扰系统的实时编程需要。因此,应该权衡日志中的信息量和提供这一信息所需的指令和周期的数目。
编程引擎的上下文可发出日志命令。日志命令被定义成将许多由长度字段指定的字从存储寄存器移到日志,其中每个字可包括32位的日志信息。当到达程序中预先设定的校验点时,可以用日志命令把来自存储寄存器的多个字存储到日志中。
日志_标记命令被定义成将多个由长度字段指定的字从存储寄存器移到日志。每个字包括32位的日志信息,其中包括4位编程引擎标识、3位线程标识和25位日志信息。因此,日志_标记命令可包括由日志命令提供的数据信息,还可包括关于哪个编程引擎和该编程引擎的哪个上下文发出日志_标记命令的信息。
快速_日志命令被定义成将命令地址字段从存储寄存器移到日志。因为所有命令都有地址字段,所以快速_日志命令提供关于在被调试的程序中到达了哪个命令或校验点的信息。
快速_日志_标记命令被定义成将命令地址字段从存储寄存器移到日志,其中每个字可包括4位编程引擎标识、3位上下文标识和25位指示发出什么命令的命令地址。因此,快速_日志_标记命令可包括由快速_日志命令提供的数据信息,还可包括关于哪个编程引擎和该编程引擎的哪个上下文发出了命令的信息。
本技术可以提供一种通过使用现有的用于执行其它任务的硬件以有效且低成本的方式实现精心设计的跟踪系统的方法。一种实现包括16个编程引擎,每个带有8个上下文。该实现在每个SRAM通道中还包括64个数据存储部分条目,其中16个用来存储描述数据缓冲器队列结构的信息。因为每个SRAM通道有多达48个数据存储部分条目可用来存储描述日志结构的信息,所以本技术可支持多个日志。其它实现可能在一些方面不同。
在向实现环形数据结构的日志的所有存储单元写入后,尾指针绕回到日志的起始地址继续写入数据。如果环形数据结构被写完,后续的日志写操作将盖写前面写入的数据。只有最新的数据将出现在环中。如前所述,放入命令向发布放入命令的编程引擎上下文返回环满通知,使用状态位来指示环中没有足够的存储空间可用来写指定长度的字。相反,如果插入指针超出了移出指针,因为不需要等待,所以完成所有日志命令。
本系统的各种特征可用硬件、软件或硬件和软件的结合来实现。例如,系统的一些方面可以由其中存储机器执行的指令的存储媒体或由运行于可编程计算机或处理器上的计算机程序来实现。每个程序可以由与计算机系统通信的高级程序或面向对象的编程语言来实现。此外,每个这样的计算机程序可被存储在存储媒体、如通用或专用可编程计算机可读的只读存储器(ROM)中,用于当计算机读取该存储媒体时配置和操作计算机以执行上述任务。
其它实现在以下权利要求的范围之内。
权利要求
1.一种方法,包括从数据缓冲器的链表中移走一个数据缓冲器;处理所述被移走的数据缓冲器中的信息;以及在当前未使用缓冲器队列中添加所述数据缓冲器。
2.如权利要求1所述的方法,其特征在于,还包括存储描述数据缓冲器队列和当前未使用缓冲器队列的结构的信息。
3.如权利要求2所述的方法,其特征在于,所述存储是使用高速缓存来完成的,所述高速缓存具有用来存储描述数据缓冲器队列的结构或者当前未使用缓冲器队列的结构的信息的条目。
4.如权利要求1所述的方法,其特征在于,还包括使用链表数据结构来存储当前未使用的缓冲器。
5.如权利要求1所述的方法,其特征在于,还包括使用堆栈数据结构来存储当前未使用的缓冲器。
6.如权利要求1所述的方法,其特征在于,所述数据缓冲器包括网络数据包,以及所述网络数据包包括在网络处理器中接收的数据包。
7.如权利要求1所述的方法,其特征在于,还包括修改描述当前未使用缓冲器队列的结构的信息。
8.如权利要求7所述的方法,其特征在于,响应在接收流水线中接收数据包而执行所述移走,以及响应接收离队请求而执行添加和修改。
9.一种方法,包括从当前未使用缓冲器队列中移走一个当前未使用的缓冲器;处理新接收的数据包;在所述被移走的缓冲器中存储所述新接收的数据包;以及在数据缓冲器的链表中添加所述被移走的缓冲器。
10.如权利要求9所述的方法,其特征在于,还包括在高速缓存中存储描述数据缓冲器队列和当前未使用缓冲器队列的结构的信息,所述高速缓存具有用来存储描述数据缓冲器队列的结构或者当前未使用缓冲器队列的结构的信息的条目。
11.如权利要求9所述的方法,其特征在于,还包括使用链表数据结构来存储当前未使用的缓冲器。
12.如权利要求9所述的方法,其特征在于,还包括使用堆栈数据结构来存储当前未使用的缓冲器。
13.如权利要求9所述的方法,其特征在于,所述数据缓冲器包括网络数据包,以及所述网络数据包包括在网络处理器中接收的数据包。
14.如权利要求9所述的方法,其特征在于,还包括修改描述当前未使用缓冲器队列的结构的信息。
15.如权利要求14所述的方法,其特征在于,响应在接收流水线中接收数据包而执行所述移走,以及响应接收入队请求而执行存储、添加和修改。
16.一种方法,包括接收向存储环数据结构写入数据的请求;响应所述请求而发出命令,所述命令让指针指向要插入数据的存储单元,所述指针描述存储环结构;向描述存储环结构的信息所标识的存储环地址写入数据;让指针递增至要插入数据的存储单元,所述指针描述存储环结构;递增环中的条目数量,所述条目数量描述存储环结构;以及在高速缓存中存储修改后的指针和描述存储环结构的条目数量,所述高速缓存具有用以存储描述数据缓冲器队列的结构或当前未使用缓冲器队列的结构的信息的条目。
17.如权利要求16所述的方法,其特征在于,所述命令指定长度字段,以及环中的条目数量通过所指定的长度字段来递增。
18.如权利要求16所述的方法,其特征在于,还包括响应发出的命令,把环中的条目数量返回到发出编程引擎线程,所述条目数量描述所述存储环数据结构的结构;以及返回指示是否有足够存储空间可用来使数据成功写入由指向要插入数据的存储单元的指针所标识的存储环地址的状态位,所述指针描述存储环结构。
19.如权利要求16所述的方法,其特征在于,所述命令还指定存储地址,从中获得要写入所述存储环中的数据。
20.如权利要求19所述的方法,其特征在于,所述数据包含表示来自执行程序的输出消息的位,所述位还包括编程引擎标识和上下文标识。
21.如权利要求20所述的方法,其特征在于,所述位还包括编程引擎标识和上下文标识。
22.如权利要求19所述的方法,其特征在于,所述数据包含表示命令地址的位,所述位还包括编程引擎标识和上下文标识。
23.如权利要求19所述的方法,其特征在于,还包括向描述存储环结构的信息所标识的存储环地址写入数据;使指针递增至要插入数据的存储单元,所述指针描述存储环结构;通过指定的长度字段来递增环中的条目数量,所述条目数量描述存储环结构;以及在高速缓存中存储修改后的指针和描述存储环结构的条目数量,所述高速缓存具有用以存储描述数据缓冲器队列的结构的信息的条目。
24.如权利要求23所述的方法,其特征在于,所述高速缓存可用来存储关于多个存储环数据结构的信息。
25.一种方法,包括接收从存储环数据结构中读取数据的请求;响应所述请求而发出命令,让指针指向要从中移出数据的存储单元,所述指针描述存储环结构;从描述存储环结构的信息所标识的存储环地址读取数据;将指针递增至要从中移出数据的存储单元,所述指针描述存储环结构;递减环中的条目数量,所述条目数量描述存储环结构;以及在高速缓存中存储修改后的指针和描述存储环结构的条目数量,所述高速缓存具有用以存储描述数据缓冲器队列的结构的信息的条目。
26.如权利要求25所述的方法,其特征在于,所述命令指定长度字段,以及环中的条目数量通过所指定的长度字段来递减。
27.如权利要求25所述的方法,其特征在于,还包括当描述存储环结构的所述环中条目数量小于所指定的长度字段时,响应所发出的命令,向发出编程引擎上下文返回标识符。
28.一种设备,包括提供队列管理器的处理器;与所述处理器相连的第一存储器,用以存储数据缓冲器队列以及当前未使用缓冲器队列或环形数据结构中至少一个;与所述处理器相连的高速缓存,用以存储描述数据缓冲器队列的结构的信息以及描述当前未使用缓冲器队列结构或存储环结构中至少一个的信息;以及存储指令的第二存储器,这些指令应用于所述处理器时,使所述处理器从数据缓冲器的链表中移走一个数据缓冲器;处理所述被移走的数据缓冲器中的信息;在当前未使用缓冲器队列中添加所述数据缓冲器;以及存储描述数据缓冲器队列和当前未使用缓冲器队列的结构的信息。
29.如权利要求28所述的设备,其特征在于,所述存储是使用高速缓存来完成的,所述高速缓存具有用来存储描述数据缓冲器队列的结构或者当前未使用缓冲器队列的结构的信息的条目。
30.如权利要求28所述的设备,其特征在于,所述第二存储器还包括使所述处理器使用链表数据结构存储当前未使用缓冲器的指令。
31.如权利要求28所述的设备,其特征在于,所述第二存储器还包括使所述处理器使用堆栈数据结构存储当前未使用缓冲器的指令。
32.如权利要求28所述的设备,其特征在于,所述第二存储器还包括使所述处理器修改描述当前未使用缓冲器队列结构的信息的指令。
33.如权利要求28所述的设备,其特征在于,所述数据缓冲器包括网络数据包,其中所述网络数据包包括在网络处理器中接收的数据包。
34.一种设备,包括提供队列管理器的处理器;与所述处理器相连的第一存储器,用以存储数据缓冲器队列以及当前未使用缓冲器队列或环形数据结构中至少一个;与所述处理器相连的高速缓存,用以存储描述数据缓冲器队列的结构的信息以及描述当前未使用缓冲器队列结构或存储环结构中至少一个的信息;以及存储指令的第二存储器,这些指令应用于所述处理器时,使所述处理器从当前未使用缓冲器队列中移出一个当前未使用的缓冲器;处理新接收的数据包;在所述移出的缓冲器中存储所述新接收的数据包;在数据缓冲器的链表中添加所述被移出的缓冲器;以及在高速缓存中存储描述数据缓冲器队列和当前未使用缓冲器队列的结构的信息,所述高速缓存具有用来存储描述数据缓冲器队列的结构或者当前未使用缓冲器队列的结构的信息的条目。
35.如权利要求34所述的设备,其特征在于,所述第二存储器还包括使所述处理器使用链表数据结构存储当前未使用缓冲器的指令。
36.如权利要求34所述的设备,其特征在于,所述第二存储器还包括使所述处理器使用堆栈数据结构存储当前未使用缓冲器的指令。
37.如权利要求34所述的设备,其特征在于,所述数据缓冲器包括网络数据包,其中所述网络数据包包括在网络处理器中接收的数据包。
38.如权利要求34所述的设备,其特征在于,所述第二存储器还包括使所述处理器修改描述当前未使用缓冲器队列结构的信息的指令。
39.一种设备,包括提供队列管理器的处理器;与所述处理器相连的第一存储器,用以存储数据缓冲器队列以及当前未使用缓冲器队列或环形数据结构中至少一个;与所述处理器相连的高速缓存,用以存储描述数据缓冲器队列的结构的信息以及描述当前未使用缓冲器队列结构或存储环结构中至少一个的信息;以及存储指令的第二存储器,这些指令应用于所述处理器时,使所述处理器接收向存储环数据结构写入数据的请求;响应所述请求而发出命令,所述命令让指针指向要插入数据的存储单元,所述指针描述存储环结构;向描述存储环结构的信息所标识的存储环地址写入数据;让指针递增至要插入数据的存储单元,所述指针描述存储环结构;递增环中的条目数量,所述条目数量描述存储环结构;以及在高速缓存中存储修改后的指针和描述存储环结构的条目数量,所述高速缓存具有用以存储描述数据缓冲器队列的结构或当前未使用缓冲器队列的结构的信息的条目。
40.如权利要求39所述的设备,其特征在于,所述命令指定长度字段,以及环中的条目数量通过所指定的长度字段来递增。
41.如权利要求39所述的设备,其特征在于,所述第二存储器还包括使所述处理器执行以下操作的指令响应发出的命令,把环中的条目数量返回到发出编程引擎线程,所述条目数量描述所述存储环数据结构的结构;以及返回指示是否有足够存储空间可用来使数据成功写入由指向要插入数据的存储单元的指针所标识的存储环地址的状态位,所述指针描述存储环结构。
42.如权利要求39所述的设备,其特征在于,所述命令还指定存储地址,从中获得要写入所述存储环中的数据。
43.如权利要求42所述的设备,其特征在于,所述数据包含表示来自执行程序的输出消息的位。
44.如权利要求43所述的设备,其特征在于,所述位还包括编程引擎标识和上下文标识。
45.如权利要求42所述的设备,其特征在于,所述数据包含表示命令地址的位,所述位还包括编程引擎标识和上下文标识。
46.如权利要求42所述的设备,其特征在于,所述第二存储器还包括使所述处理器执行以下操作的指令向描述存储环结构的信息所标识的存储环地址写入数据;使指针递增至要插入数据的存储单元,所述指针描述存储环结构;通过指定的长度字段来递增环中的条目数量,所述条目数量描述存储环结构;以及在高速缓存中存储修改后的指针和描述存储环结构的条目数量,所述高速缓存具有用以存储描述数据缓冲器队列的结构的信息的条目。
47.如权利要求42所述的设备,其特征在于,所述高速缓存可用来存储关于多个存储环数据结构的信息。
48.一种设备,包括提供队列管理器的处理器;与所述处理器相连的第一存储器,用以存储数据缓冲器队列以及当前未使用缓冲器队列或环形数据结构中至少一个;与所述处理器相连的高速缓存,用以存储描述数据缓冲器队列的结构的信息以及描述当前未使用缓冲器队列结构或存储环结构中至少一个的信息;以及存储指令的第二存储器,这些指令应用于所述处理器时,使所述处理器接收从存储环数据结构中读取数据的请求;响应所述请求而发出命令,让指针指向要从中移出数据的存储单元,所述指针描述存储环结构;从描述存储环结构的信息所标识的存储环地址读取数据;将指针递增至要从中移出数据的存储单元,所述指针描述存储环结构;递减环中的条目数量,所述条目数量描述存储环结构;以及在高速缓存中存储修改后的指针和描述存储环结构的条目数量,所述高速缓存具有用以存储描述数据缓冲器队列的结构的信息的条目。
49.如权利要求48所述的设备,其特征在于,所述命令指定长度字段,以及环中的条目数量通过所指定的长度字段来递减。
50.如权利要求48所述的设备,其特征在于,所述第二存储器还包括使所述处理器当描述存储环结构的所述环中条目数量小于所指定的长度字段时响应所发出的命令、向发出编程引擎上下文返回标识符的指令。
51.一种系统,包括数据包的源;数据包的目的地;以及用以将数据包从源传送到目的地的装置,包括提供队列管理器的处理器;与所述处理器相连的第一存储器,用以存储数据缓冲器队列以及当前未使用缓冲器队列或环形数据结构中至少一个;与所述处理器相连的高速缓存,用以存储描述数据缓冲器队列的结构的信息以及描述当前未使用缓冲器队列结构或存储环结构中至少一个的信息;以及存储指令的第二存储器,这些指令应用于所述处理器时,使所述处理器从数据缓冲器的链表中移走一个数据缓冲器;处理所述被移走的数据缓冲器中的信息;在当前未使用缓冲器队列中添加所述数据缓冲器;存储描述数据缓冲器队列和当前未使用缓冲器队列的结构的信息;以及修改描述当前未使用缓冲器队列结构的信息。
52.如权利要求51所述的系统,其特征在于,所述存储是使用高速缓存来完成的,所述高速缓存具有用来存储描述数据缓冲器队列的结构或者当前未使用缓冲器队列的结构的信息的条目。
53.如权利要求51所述的系统,其特征在于,包括存储指令的所述第二存储器,当这些指令应用到所述处理器时,还使所述处理器使用链表数据结构存储当前未使用的缓冲器。
54.如权利要求51所述的系统,其特征在于,所述数据缓冲器包括网络数据包,以及所述网络数据包包括在网络处理器中接收的数据包。
55.一种系统,包括数据包的源;数据包的目的地;以及用以将数据包从源传送到目的地的装置,包括提供队列管理器的处理器;与所述处理器相连的第一存储器,用以存储数据缓冲器队列以及当前未使用缓冲器队列或环形数据结构中至少一个;与所述处理器相连的高速缓存,用以存储描述数据缓冲器队列的结构的信息以及描述当前未使用缓冲器队列结构或存储环结构中至少一个的信息;以及存储指令的第二存储器,这些指令应用于所述处理器时,使所述处理器从当前未使用缓冲器队列中移出一个当前未使用的缓冲器;处理新接收的数据包;在所述移出的缓冲器中存储所述新接收的数据包;在数据缓冲器的链表中添加所述被移出的缓冲器;在高速缓存中存储描述数据缓冲器队列和当前未使用缓冲器队列的结构的信息,所述高速缓存具有用来存储描述数据缓冲器队列的结构或者当前未使用缓冲器队列的结构的信息的条目;以及修改描述当前未使用缓冲器队列结构的信息。
56.如权利要求55所述的系统,其特征在于,包括存储指令的所述第二存储器,当这些指令应用到所述处理器时,还使所述处理器使用链表数据结构存储当前未使用的缓冲器。
57.一种包括上面存储了指令的存储媒体的产品,这些指令被机器执行时,使所述机器从数据缓冲器的链表中移走一个数据缓冲器;处理所述被移走的数据缓冲器中的信息;以及在当前未使用缓冲器队列中添加所述数据缓冲器。
58.如权利要求57所述的产品,其特征在于,还包括一些指令,这些指令被机器执行时,使所述机器存储描述数据缓冲器队列和当前未使用缓冲器队列的结构的信息。
59.如权利要求58所述的产品,其特征在于,所述存储是使用高速缓存来完成的,所述高速缓存具有用来存储描述数据缓冲器队列的结构或者当前未使用缓冲器队列的结构的信息的条目。
60.如权利要求57所述的产品,其特征在于,还包括一些指令,这些指令被机器执行时,使所述机器使用链表数据结构存储当前未使用的缓冲器。
61.如权利要求57所述的产品,其特征在于,还包括一些指令,这些指令被机器执行时,使所述机器使用堆栈数据结构存储当前未使用的缓冲器。
62.如权利要求57所述的产品,其特征在于,所述数据缓冲器包括网络数据包,以及所述网络数据包包括在网络处理器中接收的数据包。
63.如权利要求57所述的产品,其特征在于,还包括一些指令,这些指令被机器执行时,使所述机器修改描述当前未使用缓冲器队列结构的信息。
64.如权利要求63所述的产品,其特征在于,响应在接收流水线中接收数据包而执行所述移走,以及响应接收离队请求而执行添加和修改。
65.一种包括上面存储了指令的存储媒体的产品,这些指令被机器执行时,使所述机器从当前未使用缓冲器队列中移走一个当前未使用的缓冲器;处理新接收的数据包;在所述被移走的缓冲器中存储所述新接收的数据包;以及在数据缓冲器的链表中添加所述被移走的缓冲器。
66.如权利要求65所述的产品,其特征在于,还包括一些指令,这些指令被机器执行时,使所述机器在高速缓存中存储描述数据缓冲器队列和当前未使用缓冲器队列的结构的信息,所述高速缓存具有用来存储描述数据缓冲器队列的结构或者当前未使用缓冲器队列的结构的信息的条目。
67.如权利要求65所述的产品,其特征在于,还包括一些指令,这些指令被机器执行时,使所述机器使用链表数据结构来存储当前未使用的缓冲器。
68.如权利要求65所述的产品,其特征在于,还包括一些指令,这些指令被机器执行时,使所述机器使用堆栈数据结构来存储当前未使用的缓冲器。
69.如权利要求65所述的产品,其特征在于,所述数据缓冲器包括网络数据包,以及所述网络数据包包括在网络处理器中接收的数据包。
70.如权利要求65所述的产品,其特征在于,还包括一些指令,这些指令被机器执行时,使所述机器修改描述当前未使用缓冲器队列结构的信息。
71.如权利要求70所述的产品,其特征在于,响应在接收流水线中接收数据包而执行所述移走,以及响应接收入队请求而执行存储、添加和修改。
72.一种包括上面存储了指令的存储媒体的产品,这些指令被机器执行时,使所述机器接收向存储环数据结构写入数据的请求;响应所述请求而发出命令,所述命令让指针指向要插入数据的存储单元,所述指针描述存储环结构;向描述存储环结构的信息所标识的存储环地址写入数据;让指针递增至要插入数据的存储单元,所述指针描述存储环结构;递增环中的条目数量,所述条目数量描述存储环结构;以及在高速缓存中存储修改后的指针和描述存储环结构的条目数量,所述高速缓存具有用以存储描述数据缓冲器队列的结构或当前未使用缓冲器队列的结构的信息的条目。
73.如权利要求72所述的产品,其特征在于,所述命令指定长度字段,以及环中的条目数量通过所指定的长度字段来递增。
74.如权利要求72所述的产品,其特征在于,还包括一些指令,这些指令被机器执行时,使所述机器响应发出的命令,把环中的条目数量返回到发出编程引擎线程,所述条目数量描述所述存储环数据结构的结构;以及返回指示是否有足够存储空间可用来使数据成功写入由指向要插入数据的存储单元的指针所标识的存储环地址的状态位,所述指针描述存储环结构。
75.如权利要求72所述的产品,其特征在于,所述命令还指定存储地址,从中获得要写入所述存储环中的数据。
76.如权利要求75所述的产品,其特征在于,所述数据包含表示来自执行程序的输出消息的位。
77.如权利要求76所述的产品,其特征在于,所述位包括编程引擎标识和上下文标识。
78.如权利要求75所述的产品,其特征在于,所述数据包含表示命令地址的位,所述位还包括编程引擎标识和上下文标识。
79.如权利要求75所述的产品,其特征在于还包括一些指令,这些指令被机器执行时,使所述机器向描述存储环结构的信息所标识的存储环地址写入数据;使指针递增至要插入数据的存储单元,所述指针描述存储环结构;通过指定的长度字段来递增环中的条目数量,所述条目数量描述存储环结构;以及在高速缓存中存储修改后的指针和描述存储环结构的条目数量,所述高速缓存中的条目子集可用以存储描述数据缓冲器队列的信息。
80.如权利要求75所述的产品,其特征在于,所述高速缓存可以用来存储有关多个存储环数据结构的信息。
81.一种包括上面存储了指令的存储媒体的产品,这些指令被机器执行时,使所述机器接收从存储环数据结构中读取数据的请求;响应所述请求而发出命令,让指针指向要从中移出数据的存储单元,所述指针描述存储环结构;从描述存储环结构的信息所标识的存储环地址读取数据;将指针递增至要从中移出数据的存储单元,所述指针描述存储环结构;递减环中的条目数量,所述条目数量描述存储环结构;以及在高速缓存中存储修改后的指针和描述存储环结构的条目数量,所述高速缓存具有用以存储描述数据缓冲器队列的结构的信息的条目。
82.如权利要求81所述的产品,其特征在于,所述命令指定长度字段,以及环中的条目数量通过所指定的长度字段来递减。
83.如权利要求81所述的产品,其特征在于,还包括一些指令,这些指令被机器执行时,使所述机器当描述存储环结构的所述环中条目数量小于所指定的长度字段时,响应所发出的命令,向发出编程引擎上下文返回标识符。
全文摘要
一种管理自由表和环形数据结构的方法,自由表和环形数据结构可用来存储日志信息,通过在高速缓存存储器中存储和修改描述自由表结构或环形数据结构的信息,也可用来存储描述缓冲器队列结构的信息。
文档编号G06F1/00GK1757202SQ03823988
公开日2006年4月5日 申请日期2003年8月4日 优先权日2002年8月13日
发明者G·沃尔里奇, J·斯维尼, J·吉尔福德, M·罗森布卢思, D·伯恩斯坦 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1