用于管理分组的网络处理器的制作方法与工艺

文档序号:12008458阅读:177来源:国知局
用于管理分组的网络处理器的制作方法与工艺
本发明涉及一种管理用于指向已存储的网络分组的指针队列的缓冲器的硬件系统。

背景技术:
在传统的网络接口卡/部件中,利用专用的指针队列来处理进入/外送业务。这些指针是在分组从网络被接收后且在传送至网络之前被存储的内存地址。软件必须一直监视是否有足够的指针(及相关的内存位置)供所接收的分组使用,并且还要监视在分组已被传送后不再使用的指针是否在接收侧被再利用。此工作会耗费资源并且不能有错,否则将发生内存漏失,从而造成系统降级。在当前的装置中使用此种机制。2005年6月7日获准受让予国际商业机器公司(InternationalBusinessMachinesCorporation)的专利US6904040,其标题为“PacketPreprocessingInterfaceforMultiprocessorNetworkHandler”公开了一种网络处理机(networkhandler),其利用直接内存存取(directmemoryaccess,DMA)设备根据映射函数(其基于分组内容将分组分类)来给网络处理器指派分组。

技术实现要素:
根据本发明的一个方面,提供一种根据权利要求1的网络处理器。该方面的优点是RQR和SQR向软件隐藏大部分的队列和缓冲器或高速缓存管理。在初始化之后,软件便不再理会缓冲器指针。另一优点是当软件在多核上和/或在多线程中运行时,多个应用可以平行运行而无须注意被视为共同资源的分组内存。本发明的进一步优点对本领域技术人员在审视附图和详细说明后会变得明白。本发明欲在此涵盖任何额外优点。附图说明现在将通过实例参考附图说明本发明的具体实施例,在附图中相似的附图标记代表相似的组件,并且其中:图1示出了本发明一个具体实施例中用于管理分组的系统的高级视图。图2示出了本发明具体实施例中的发送队列补充器(SQR)。图3示出了本发明具体实施例中存储在由SQR管理的发送队列中的发送队列工作组件(SQWE)的可能格式。图4示出了本发明具体实施例中的接收队列补充器(RQR)。图5示出了本发明具体实施例中存储在由RQR管理的接收队列中的接收队列工作组件(RQWE)的可能格式。图6示出了本发明具体实施例中用于将SQWE送入与送出发送队列的入列群(enqueuepool)与出列群(dequeuepool)。图7示出了本发明具体实施例中用于将RQWE送入与送出接收队列的入列群与出列群。具体实施方式图1示出了用于管理分组的系统的高级视图,其中:-分组在对应于网络处理器的队列对(163)中的一个的网络接口处被接收并被派送以进行处理(100);-接收队列工作组件(receivequeueworkelement,RQWE)(107)从第一接收队列(RQ0)(105)被送出;-RQWE指向(140)内存(110)中对应于输入分组可被存储到的内存位置(111)的地址,在优选的具体实施例中,提供第二接收队列(RQ1)(106),其包括指向用于存储大型分组(举例来说,大于512个字节)的内存位置的指针,而第一接收队列则包括指向用于存储小型分组(举例来说,小于512个字节)的内存位置的指针,因此选择要从其送出RQWE的接收队列取决于输入分组的尺寸;-软件线程(130、131、135)可被启动,以便处理存储在内存中的输入分组:当将输入分组存储在空闲并且大到足以容纳此输入分组的内存位置(111)时,向可用线程(135)发送消息,以便通知它要处理该分组;-线程通知可包括以下步骤:在RQWE从接收队列(105)被移除之后将其送入(141)队列(CQ)(143),使其无法用于存储其它输入分组(至少在分组的处理完成且经过处理的分组被传送之前),然后完成单元(图1中并未示出的硬件部件)会处理(145)CQ中的组件并将此组件调度(146)至可用线程(135),举例来说,通过发送线程唤醒中断(147)。在优选的具体实施例中,被发送到可用线程的组件包括指向要被处理的分组(111)的指针(144),而如果有多个接收队列,其还会包括用于标识此指针的原点接收队列(105)以及此接收队列所属的队列对(163)的标识符。由于这些参数的关系,可以循环使用指向其原点接收队列的指针,从而实现指针的自动内存管理。-软件线程(135)开始处理(148)输入分组并将经过处理的分组存储(149)在第二内存位置(113)。在大部分情况中,第二内存位置(113)会和第一内存位置(111)相同。-软件线程(135)接着会以射后不理的方式将发送组件的入列(enqueue)请求(150)发送至完成单元,使其将该请求传送至适当的传送接口。在优选的具体实施例中,软件线程(135)所提供的发送组件包括指向经过处理的分组(113)的指针、用于标识指针的原点接收队列及其所属的队列对的标识符。此时,对软件来说,一直到循环使用内存指针为止的入列动作处理都是透明的。-完成单元接着会发送SQWE至SQR(160),用于将其送入相关的SQ(120)。在本发明的优选具体实施例中,使用硬件缓冲器(165)来将SQWE(121)送入发送队列(120)。SQWE包括指向内存位置(113)的指针(152)。完成单元通常负责确保以适当的顺序来将SQWE派送给SQR。-在由相关的传送接口(103)传送分组时,队列管理器(图1中并未示出的硬件部件)将SQWE发送(155)给RQR(170),使得其会在它的原点接收队列(105)中被循环使用。原点接收队列和队列对会由SQWE中所包括的标识符来标识。在本发明的优选具体实施例中,RQR(170)使用硬件缓冲器(175)来将被循环使用的指针地址送入接收队列(105)。图2示出了本发明具体实施例中的发送队列补充器(SQR)(160),包括:-DMA写入器(235)和DMA读取器(239);-入列群(245)和出列(dequeue)群(250)的集合(240);-用于处理入列请求的模块(247);-用于处理出列请求的模块(255)。SQR从完成单元(210)接收发送队列组件(或SQWE)(215)。完成单元的作用包括:-从软件线程(135)接收发送队列组件,其包括指向内存中的分组的指针以及用于标识指针的原点接收队列及该接收队列所属的队列对的标识符;-将所述发送队列组件发送给所述SQR。出列模块(255)将出列群(250)头部处的已出列发送工作组件(225)(图2中表示为WQE)发送至队列管理器(220),使得队列管理器将此队列组件传输至RQR以便循环使用,优选地在对应分组已被传送之后。当入列群(245)是满时,SQR会利用DMA写入器(235)将其内容写入(233)到内存(230)并清空入列群(245)。此外,当出列群为空时,SQR会利用DMA读取器(239)通过从内存(230)读取(237)一个或多个SQWE并将它们复制到出列群(250)来重新填充出列群。一个出列群(250)和一个入列群(245)通常与内存中的一个发送队列相关联。此外,在每一个队列对中通常会有一个出列群(250)和一个入列群(245)。最后,入列群(245)、出列群(250)、以及相关联的发送队列通常是先入先出(FIFO)队列。此配置的主要理由是确保SQWE以它们被完成单元(210)送入队列中的顺序被传送。虽然可为入列群(245)和出列群(250)以及为接收队列选择不同的配置(非FIFO,或者不同的数量);然而,此配置还需要进一步的机制来确保分组会依序被传送。但是,此施行方式并没有脱离本发明的教导。图3示出了存储在由SQR管理的发送队列中的发送队列工作组件(SQWE)的可能格式,包括:-要被传送的分组在内存中的虚拟地址(300);-用于传送分组的传送控制代码(310);-保留字段(320);-补充QP字段(330),在优选的具体实施例中,其包括用于标识虚拟地址(300)应该被循环使用的原点接收队列及该接收队列所属的队列对的标识符;可选地,补充QP字段(330)可包括标记,用于指示虚拟地址(300)是否应该被循环使用,以便保持系统中的灵活性;-用于传送分组的包装标签(340);-另一保留字段(350);-用于传送分组的分组长度字段(360)。在优选的具体实施例中,SQWE为16个字节,而虚拟地址(300)为8个字节。图4示出了接收队列补充器(RQR),包括:-DMA写入器(433),用于写入(431)到内存(430);-DMA读取器(437),用于读取(435)内存(430);-被管理的入列群(423)和出列群(425)的集合,每一集合都与一队列对(420)相关联,每一集合的入列群(423)和出列群(425)的数量虽然没有限制,不过在优选的具体实施例中,每个队列对(420)有两个入列群(423)和出列群(425);-入列模块(440),用于将RQWE送入到入列群(423);-出列模块(443),用于从出列群(425)送出RQWE。RQR接收用于入列的RQWE以及队列对和RQWE应该被入列到其中的接收队列的标识符。在初始化时间从软件线程(410)接收此组件(412)。在初始化之后,在大部分情况中应该从队列管理器(220)接收RQWE以及队列对编号和接收队列编号(417),从而由硬件实现自动内存管理。在初始化之后应该从软件线程(410)接收RQWE的情况是当软件决定循环使用指针本身时。每一个入列群(423)和出列群(425)都与存储在内存(430)中的一个接收队列相关联。倘若是出列(443)的话,RQWE从相关队列对(420)中的出列群(425)中被移除,并且连同队列对(420)和与从其抽出RQWE的出列群(425)相关联的接收队列的标识符一起被发送(455)到完成单元(210)。完成单元接着将组件与标识符转发至软件线程。图5示出了存储在由RQR管理的接收队列中的接收队列工作组件(RQWE)的可能格式,其包括虚拟地址(500)。在优选的具体实施例中,RQWE的尺寸因此和虚拟地址(500)相同,为8个字节。然而,亦可为虚拟地址(500)设计不同的尺寸。SQWE中的虚拟地址(300)的尺寸应该匹配RQWE中的虚拟地址(500)的尺寸。图6示出了用于将SQWE送入和送出存储在内存中的发送队列(620)的入列群(600)与出列群(610)。SQR通过将SQWE送入发送队列的尾部(650)并从发送队列的头部(660)送出SQWE来保持硬件管理的发送队列(620)。其从完成单元(210)接收SQWE并将SQWE提供给队列管理器(220)。其在每个队列对中保持等待被DMA至内存的小型SRQWE高速缓存以及最近从内存DMA的另一小型SQWE高速缓存。如果发送队列为空,藉由其写入和读取内存的路径(640)可被旁路,并且SQWE被从入列群(600)直接移动到出列群(610)。在优选的具体实施例中,入列群包括3个锁存器的集合,用于暂时存储SQWE。当接收到第4个RQWE时,入列群(600)中的3个SQWE以及所接收到的第4个SQWE被写入到存储在内存中的发送队列(620)的尾部。入列群(600)亦可包括4个锁存器。在优选的具体实施例中,4个16字节的SQWE同时利用DMA写入被写至内存。当使用允许进行64字节传输的DMA时,此为最佳方式。可基于特定配置的需要同时从内存和向内存传输各种数量的SQWE。在优选的具体实施例中,入列群(600)、出列群(610)、以及发送队列(620)都是FIFO队列,以便保持SQWE从完成单元(210)被接收的顺序。发送队列(620)中的组件(630)的数量虽然是在初始化时间被确定;然而,亦可在适当处采用动态扩充发送队列(620)的尺寸的机制。图7示出了用于将RQWE送入和送出接收队列的入列群和出列群,包括:-入列群(700);-出列群(710);-存储在内存中的接收队列(720)。RQR通过将RQWE送入队列的尾部(750)并从队列的头部(760)送出RQWE来保持硬件管理的接收队列(720)。其从队列管理器(220)并从软件(410)(举例来说,经由ICSWX共同处理器命令)接收RQWE。接着,其将RQWE提供给已标识的接收队列和队列对。其在每个队列对中保持最近从内存DMA的或是由SQM/ICS提供的小型RQWE高速缓存(710)。当高速缓存变成近乎空时,RQR通过从内存取回(760)一些RQWE来补充它,以便服务下一次请求。以对称的方式,当高速缓存近乎满时,RQR将高速缓存中的一些RQWE写入(750)到系统内存中,以便服务来自队列管理器或ICW的下一次请求。如果高速缓存既非近乎满亦非近乎空的话,RQWE便从提供者流往消费者(740),而不会经过系统内存。在优选的具体实施例中,入列群(700)包括8个锁存器的集合,用于暂时存储RQWE。当第8个RQWE要入列时,入列群(700)中的8个RQWE被写入至存储在内存中的接收队列(720)的尾部。入列群(700)亦可包括不同数量的锁存器。在优选的具体实施例中,8个8字节的RQWE同时利用DMA写入被写至内存。当使用允许进行64字节传输的DMA时,此为最佳方式。可基于特定配置的需要同时从内存和向内存传输各种数量的RQWE。在优选的具体实施例中,入列群(700)、出列群(710)、以及接收队列(720)可以是FIFO队列、堆栈、或是后进先出队列,因为并不需要保持RQWE的顺序。接收队列(720)中的组件(730)的数量虽然是在初始化时间被确定;然而,亦可在适当处采用动态扩充接收队列(720)的尺寸的机制。另一具体实施例包括用于在接收侧和传送侧上加入特定硬件,以便向软件隐藏与缓冲器及指针管理有关的大部分工作的方法。在初始化时,由软件提供一组指针和缓冲器,其数量大到足以支持预期的业务量。发送队列补充器(SQR)与接收队列补充器(RQR)向软件隐藏RQ和SQ管理。RQR与SQR完全监视指针队列并实施从传送侧至接收侧的指针再循环使用。RQ/RQR事先加载一些RQWE,其数量大到足以保证直到可以从SQ接收WQE之前RQ不会被耗尽。当接收到分组时;利用对已定义的分组报头字段实施的散列,由硬件选择QP;使用在对应RQ的RQR高速缓存的头部处的RQWE。RQWE含有内存中要存储分组内容的地址;数据传输完全是由硬件来处理。当分组已被加载到内存后,由硬件创建CQE,其含有:用于存储分组(RQWE)的内存地址,分组上的各式各样数据(尺寸、以太网标记、错误、次序、...等)。CQ被硬件调度至可用的线程。选定的线程处理CQE。线程对接收到的分组实施用于将其改变成预备传输的分组所需要的操作。线程将SQWE送入SQ/SQR。当位于SQR高速缓存的头部时,分组在SQWE中所示的地址处被硬件读取。硬件利用SQWE中所含的额外信息传送分组。如果在SQWE中被使能的话,现在可自由使用的内存位置的地址会在RQ中被硬件循环使用作为RQWE。否则,由硬件产生CQE,用于向软件指示传送完成;WQE则必须被软件送回到RQ。本发明的另一具体实施例处理所有数据移动工作及所有缓冲器管理操作;线程不再需要关心这些必要但耗时的工作。因此,其会通过向硬件委派所有数据移动工作而大幅提高性能。通过使用硬件高速缓存,隐藏由于DMA存取导致的大部分等待时间同时最大化DMA效率(举例来说,利用64B的全高速缓存线进行传输),而进一步改善缓冲器管理操作。可选地,软件可选择完全使用硬件能力或仅使用部分硬件能力。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1