多播传输的有效处理的制作方法

文档序号:7727124阅读:283来源:国知局
专利名称:多播传输的有效处理的制作方法
技术领域
本发明涉及网络处理器上的多播传输,更具体地说,涉及比以前的方法更有效地实现网络处理器上的多播传输的方法。
背景技术
就实现网络处理器上的多播传输方案来说,必须解决在单播传输方案中不会出现的几个新增问题。例如,当向单一目标传输一帧或多帧(即单播传输)时,当从每个缓冲器读取数据时,可向自由缓冲器队列(即帧数据的可用存储器缓冲器的链接列表)返回与帧相关的缓冲器。但是,在存在数个目标位置的多播传输情况下,不能把与帧相关的缓冲器直接返回给自由队列,相反必须在发生最终的多播传输之后,通过重新沿链接列表而行,返回与帧相关的缓冲器。多播传输中对于单播传输来说不会出现的另一新增问题是每个多播传输目标位置需要基准帧内的一个不同起点,或者要求增加额外信息的可能性。这些问题的典型解决方案涉及为每个多播传输请求(从而为每个多播传输目标)产生基准帧的整个副本。产生多个副本解决了问题,但是需要租用许多存储缓冲器,以便满足多播传输请求,从而对系统性能造成麻烦。
如果代替产生帧的多个副本,通过链接到基准帧来实现多播传输,那么,由于一些端口在高于其它端口的性能级别下工作,因此端口性能差异变成必须解决的问题。特别地,链接回基准帧会导致问题,因为开始传输的最后一帧可能不是结束传输的最后一帧。起始帧和结束帧之间的差异产生了解何时使基准帧缓冲器返回自由缓冲器队列的问题。特别地,不能在完成起始帧之后,简单地返回缓冲器。一种解决方案是等待,直到所有多播传输完成为止,但是这样的解决方案同样会对系统性能产生不必要的影响。
在高性能网络处理器中,需要一种使多播传输存储器需求降至最小,并且考虑到端口性能差异的新颖解决方案。

发明内容
本发明的目的是提供一种如权利要求1中所述的网络处理器上多播传输用方法。
本发明的目的提供一种如权利要求7中所述的网络处理器,和如权利要求6中所述的计算机程序。
根据本发明,新方法不必为每个多播传输实例(即每个多播传输目标)复制整个帧,从而既降低了存储器要求,又解决了起因于端口性能差异的问题。另外,随着其被使用,租用的缓冲器被返回给自由队列(与其它实例何时完成传输无关),并且计数器被用于确定所有实例何时被传输,从而可同样地把基准帧返回自由队列。


参考附图,根据本发明一个优选实施例的下述详细说明,将更好地理解上述及其它目的、特征和优点,其中图1是图解说明数据结构的方框图;图2是表示本发明的优选实施例的芯片组系统环境的方框图;图3是更详细地表示在图2的芯片组中使用的嵌入式处理器复合体和数据流芯片的方框图;图4表示了通用消息格式;图5是图解说明根据本发明的优选实施例的数据结构的方框图;图6是表示本发明的优选实施例实现的过程的流程图。
具体实施例方式
现在参见附图,尤其参见图1,图1中表示了根据本发明优选实施例的数据结构。帧被保存在一系列的缓冲器1011-1015中。每个缓冲器101具有相应的缓冲器控制块(BCB)1021-1025,所述缓冲器控制块用于把该系列缓冲器链接到帧中。每帧具有相应的帧控制块(FCB)1031-103n,帧控制块被用于把一系列帧链接到队列中。每个队列具有队列控制块(QCB)104,队列控制块保存队列中第一个FCB103和最后一个FCB 103的地址,以及队列中帧的数目的计数。
数据结构定义缓冲器101被用于存储数据。每个缓冲器101的大小为64字节,并且可保存从1-64字节的有效数据。缓冲器101内的所有有效数据须保存为邻接的一系列字节。借助链接表把多个缓冲器连接在一起,以便保存大于64字节的帧。
一开始,把所有缓冲器置于自由缓冲器队列中。当帧到达时,缓冲器从自由缓冲器队列的头部被弹出(除去),用于保存帧数据。当进行帧的最后传输时,用于保存帧数据的缓冲器被推送到自由缓冲器队列的尾部。
缓冲器控制块(BCB)102构成把多个缓冲器链接成一帧的链接列表。它还记录缓冲器101的哪些字节包含有效数据。对于每个缓冲器101来说,存在相应的BCB 102。数据库存储器(图2中表示为205和206)中缓冲器101的地址也用作BCB阵列中相应BCB 102的地址。BCB 102包括下述字段·下一缓冲器地址(NBA)字段被用于保存指向帧中的下一缓冲器101的指针。当前缓冲器101的BCB 102中的NBA字段包含该帧的下一缓冲器101(及相应BCB 102)的地址。
·起始字节位置(SBP)字段被用于保存帧的下一缓冲器101中数据的第一有效字节的偏移量。
·终止字节位置(EBP)字段被用于保存帧的下一缓冲器101中数据的最后有效字节的偏移量。
·瞬态缓冲器(TBUF)位只有当传送多播帧时才使用,确定在读取其数据用于传输之后,帧中的下一缓冲器101是否应被返回给自由缓冲器队列。该位只对多播帧有效。当帧接收时,该位被设置成为零的默认状态。
注意,SBP、EBP和TBUF字段应用于帧中的“下一”缓冲器101,而不是应用于和当前BCB 102对应的缓冲器101。如此定义这些字段,以允许利用其地址(NBA)同时读取下一缓冲器101的SBP、EBP和TBUF信息。
在帧接收过程中,BCB 102中的每个字段最初由数据流硬件202(图2)加载。皮码随后可修改BCB 102中的字段,从而在传输之前“编辑”帧。NBA字段可被修改,以便增加或删除帧中的缓冲器。SBP和EBP字段可被修改,以便改变缓冲器101中有效字节的数目。可针对作为多播帧一部分的缓冲器设置TBUF位,从而请求在传输其数据之后,立即把缓冲器101返回给自由缓冲器队列。
BCB 102的NBA字段也被用于形成自由缓冲器队列中缓冲器的链接列表。当相应缓冲器101在自由缓冲器队列中时,NBA是BCB102中包含有效信息的唯一字段。
帧控制块(FCB)103形成队列中帧的链接列表。它还记录帧中有效字节的总数,帧中第一缓冲器101的缓冲器地址和SBP/EBP,以及一个两位帧“类型”字段。FCB 103包括下述字段·下一帧地址(NFA)字段被用于保存指向帧队列中下一帧的指针。当前帧的FCB 103中的NFA字段包括队列中下一帧的FCB 103的地址。如果相应的帧是队列中的最后一帧,那么该字段不包含任何有效数据。如果QCB中的“QCNT”字段为零,那么在队列中不存在任何帧。如果QCB中的“QCNT”字段为1,那么位于队列头部的FCB中的“NFA”字段无效,因为在队列中不存在任何“下一帧”。
·字节计数(BCNT)字段被用于保存帧队列中下一帧的所有缓冲器中的有效字节的总数。注意BCNT应用于队列中的“下一”帧,而不是应用于与其中保存BCNT字段的FCB 103相关的帧。如此定义BCNT字段,以允许同时读取队列中下一帧的地址(NFA)和长度(BCNT)。
·第一缓冲器地址(FBA)字段被用于保存帧中第一缓冲器101(及相应BCB 102)的地址。
·SBP和EBP字段被用于保存帧的第一缓冲器101中的有效数据的起始位置和终止位置。
·类型字段由皮码用于关于要传输的帧的格式和类型,指示数据流硬件202。
·00“具有FACB的单播帧”,该帧将被传送给单一目的地(单播),当数据被读取以便传输时,每个缓冲器101将被返回给自由缓冲器队列。一个或多个帧变更控制块(FACB)被保存在帧的第一缓冲器101中。
·01“具有FACB的静态帧”,将在不把任何缓冲器返回给自由缓冲器队列的情况下传输该帧。一个或多个帧变更控制块(FACB)被保存在帧的第一缓冲器101中。
·10“不具有FACB的单播帧”,该帧将被传送给单一目的地(单播传输),当数据被读取以便传输时,每个缓冲器101将被返回给自由缓冲器队列。在该帧的第一缓冲器101中不保存任何帧变更控制块(FACB)。
·11“具有FACB的多播帧,并且第一缓冲器是TBUF”,该帧将被传输给多个目的地(多播),只有在已完全把该帧传输给所有目的地之后,才可把该帧的所有实例共用的缓冲器返回给自由缓冲器队列。一个或多个帧变更控制块(FACB)被保存在每个帧实例的第一缓冲器101中。另外,该帧的第一缓冲器101,以及具有在BCB 102中设置的TBUF位的任何后续缓冲器101被假定为与单一帧实例相关,并且在从缓冲器101传输数据之后,立即被返回给自由缓冲器队列。
在帧接收过程中,FCB 103的每个字段最初由数据流硬件202(图2)加载。随后在帧传输之前,皮码可覆盖FCB 103的BCNT、FBA、SBP、EBP和类型字段。如果由于编辑的结果,帧的长度被改变,那么BCNT字段可被修改。如果帧的第一缓冲器101的地址或有效数据范围存在变化,那么可修改FBA、SBP和EBP字段。写入类型字段,以便设置帧传输的类型。
自由FCB队列被用于保存目前未分配给帧的FCB的链接列表。FCB 103的NFA字段被用于形成自由FCB队列中FCB的链接列表。当相应FCB 103在自由FCB队列中时,NFA是FCB 103中包含有效信息的唯一字段。
队列控制块(QCB)104通过保存队列中第一FCB和最后FCB的地址,以及队列中帧的总数的计数,保持帧队列。QCB 104包含下述字段·头部FCBA-用于保存位于队列头部的帧的FCB地址(FCBA)。
·头部BCNT-用于保存位于队列头部的帧中的有效字节的总数的计数。
·尾部FCBA-用于保存位于队列尾部的帧的FCB地址(FCBA)。
·QCNT-用于保存队列中当前帧数的计数。
如下把帧添加到队列的尾部1.如果一帧或多帧已在队列中(QCNT大于或等于1),那么写入最初位于队列尾部的FCB 103中的NFA和BCNT字段,以便把新的帧链接到队列的尾部。如果队列中先前不存在任何帧(QCNT等于0),那么写入QCB 104的头部FCBA和头部BCNT字段,建立新帧作为该队列的头部。
2.写入QCB 104的尾部FCBA,以便指向添加到队列尾部的新FCB 103。
3.使QCB 104的QCNT递增1,反映队列添加了一帧。
如下从队列的头部除去帧1.如果一个以上的帧存在于队列中(QCNT大于1),那么读取位于队列头部的FCB 103中的NFA和BCNT字段,以便获得将位于队列头部的新帧的FCBA和BCNT。随后把这些FCBA和BCNT值写入QCB104的头部FCBA和头部BCNT,建立位于队列头部的新帧。
2.使QCB 104的QCNT减1,反映队列中减少一帧。
帧接收本节通过相对于网络处理器的分派,描述从帧接收起的数据结构的使用。
步骤1当收到第一帧数据时,从自由缓冲器队列的头部弹出一个自由缓冲器地址,从自由FCB队列的头部弹出一个自由FCB103。多达64字节的帧数据被写入缓冲器101中。把第一缓冲器101的FBA、SBP和EBP值写入FCB 103中。工作字节计数寄存器被设置成写入第一缓冲器101的字节的数目。如果整个帧放入第一缓冲器101中,则转到步骤3;否则,继续步骤2。
步骤2从自由缓冲器队列弹出另一缓冲器101,多达64字节的数据被写入该缓冲器101中。把当前缓冲器101的NBA、SBP和EBP值写入前一缓冲器101的BCB 102中。写入缓冲器101的字节数被增加到工作字节计数寄存器中。如果收到帧的末端,那么转到步骤3;否则,重复步骤2。
步骤3随后把该帧排列到输入队列的尾部,等待分派给网络处理器。
1·如果输入队列中先前不存在任何帧,那么把新帧的FCB 103的地址写入输入队列的QCB 104中的头部FCBA和尾部FCBA。用工作字节计数寄存器写入QCB 104中的头部BCNT,以记录新帧的总长度。使QCB 104中的QCNT加1。
2·如果在输入队列中已存在一帧或多帧,那么写入位于输入队列尾部的在先帧的FCB 103的NFA和BCNT字段。把新帧的FCB 103的地址写入NFA字段。用工作字节计数寄存器写入BCNT字段,以便记录新帧的长度。随后把新帧的FCB 103的地址写入输入队列的QCB104的尾部FCBA中。使QCB 104中的QCNT加1。
当帧到达输入队列的头部时,随后使该帧出列,以便分派给网络处理器。从输入队列的QCB 104读取头部FCBA和头部BCNT字段。随后使用头部FCBA值读取位于队列头部的FCB 103的内容。从FCB103读取的NFA和BCNT值被用于更新QCB 104的头部FCBA和头部BCNT字段。从FCB 103读取的FBA、SBP和EBP值被用于定位并读取分派给网络处理器的帧数据。沿着BCB 102链继续进行,直到读取了需要分派的帧数据为止。使QCB 104中的QCNT减1。
图2描述了实现本发明优选实施例的芯片组系统环境。更具体地说,数据从开关结构201流动到数据流芯片202,随后流动到POS(Packet-Over-SONET)成帧器或者以太网MAC(媒体访问控制)203。数据从POS成帧器或者以太网MAC 203流动到数据流芯片204,随后流动到开关结构201。数据流芯片202和204分别由数据仓库(动态随机存取存储器(DRAM))205和206和控制仓库(静态随机存取存储器(SRAM))207和208支持。数据流芯片202和204分别与相应的嵌入式处理器复合体(EPC)209和210通信,并且可选地分别与调度器芯片211和212通信。EPC芯片209和210由分别在DRAM中实现的查寻表213和214,以及分别在SRAM中实现的查寻表215和216支持。另外,EPC芯片209还配有协处理器接口和外围组件互连(PCI)本地总线,而EPC芯片210还受内容可寻址存储器(CAM)217支持。如果使用调度器芯片211和212,它们分别由在SRAM中实现的流队列218和219支持。
图3更详细地表示了数据流芯片202(204),EPC芯片209(210)和调度器芯片211(212)。EPC芯片209(210)执行负责转发网络通信的软件。它包括实现类似表查寻、控制和计数之类常见操作的硬件辅助功能。数据流芯片202(204)用作通过网络端口和/或开关结构接口,传输和接收通信的主数据通路。它提供相对于较大数据仓库存储器205(206)的接口,以便当通信流过网络处理器子系统时,缓存通信。它把帧报头分派给EPC以便处理,并响应来自EPC的请求,把帧转发给它们的目标目的地。可增加一个可选的调度器芯片211(212),以便提高网络处理器子系统提供的服务质量(QoS)。它允许按照它们指定的QoS水平,单独地调度成千上万个网络通信“流”。
EPC芯片209(210)包括提供网络通信的并行处理的12个二元协议处理器单元(DPPU)301。每个DPPU包含两个“皮码”引擎。每个皮码引擎支持两个线程。线程之间支持零开销上下文转接。皮码指令仓库集成在EPC芯片内。通过数据流接口302从数据流芯片202(204)接收输入帧,接收的输入帧临时保存在分组缓冲器303中。分派功能把输入帧分配给协议处理器301。12个输入队列类别允许帧以具体的线程作为目标,或者被分布在所有线程间。完成单元功能确保在协议处理器301的输出端保持帧顺序。
嵌入式PowerPC微处理器核心304允许执行高级系统管理软件。相对于外部DDR SDRAM的一个18位接口提供高达64M字节的指令存储。提供一个32位的PCI接口,以便连接在其它控制功能上,或者配置诸如MAC或成帧器组件之类的外围电路。
当帧被分派给协议处理器时,基于硬件的分类功能解析帧,以便识别众所周知的层-2和层-3帧格式。分类器的输出被用于在开始各帧的处理之前,预先处理皮码线程的状态。
表格搜索引擎提供实现表格搜索的硬件帮助。表格被保存为Patricia树,同时搜索的终止导致皮码用于保存和流相关的信息的“叶”条目的地址。支持三种表格搜索算法固定匹配(FM)、最长前缀匹配(LPM)和用于基于复杂规则的搜索的独特软件管理树(SMT)算法。控制保存存储器206(207)提供较大的DRAM表和快速SRMA表,支持数百万流程的线(wire)速度分类。SRAM接口可选地用于内容可寻址存储器(CAM)(图2中的217)的连接,以便提高查寻性能。
通过读写连接在数据流芯片202(204)上的数据仓库存储器205(206),皮码可直接编辑帧。对于更高的性能来说,当通过输出端口传输帧时,皮码也可产生帧变更命令,指示数据流芯片进行修改。
计数器管理器功能帮助皮码保持统计计数器。单片SRAM和可选的外部SRMA(与策略管理器共用)可用于计数以帧两次到达时间间隔的速度发生的事件。外部控制仓库DDR SDRAM之一(与表搜索功能共用)可被用于保持用于以较低速度发生的事件的大量计数器。
策略管理器功能帮助皮码管制输入的通信流。它保持成千上万的具有可选参数和算法的漏桶计量器(leaky bucket meter)。1K管制控制块(PolCB)可保存在芯片上SRAM中。可增加可选的外部SRAM(与计数器管理器共用),以便增大PoICB的数目。
数据流芯片202(204)实现传输和接收接口,所述传输和接收接口可被独立配置成按照“端口”或“开关”接口模式工作。在端口模式下,数据流芯片交换帧,以便连接诸如以太网MAC或Packet-Over-SONET(POS)成帧器的各种网络媒体。它借助接收控制器305和传输控制器306实现这一点。在开关模式下,数据流芯片以64字节单元段的形式交换帧,以便连接到基于单元(cell)的开关结构上。分别由数据流芯片的传输接口306和接收接口305实现的物理总线是64位数据总线。接口支持工业POS成帧器的直接连接,并且借助现场可编程门阵列(FPGA)逻辑单元,适用于工业以太网MAC和开关结构接口(例如CSIX)。
通过数据库判优器307连接在数据流芯片202上的大数据存储器205(206)提供当输入帧速率超过输出帧速率时,吸收通信突发的“网络缓冲器”。它还用作重新装配IP碎片的储存库,以及用作在类似TCP终止之类应用中,等待可能的重发的帧的储存库。支持多个DRAM接口,以便为端口接口和开关接口提供持续不变的传输和接收带宽。保留其它带宽,以由EPC皮码进行数据仓库存储器的直接读/写。通过缓冲器的链接列表,管理数据仓库存储器205(206)。两个外部SRAM被用于保持缓冲器和帧的链接列表。
数据流芯片202(204)实现诸如“随机提前丢弃”(RED)之类的高级拥塞控制算法,防止数据仓库存储器205(206)的溢出。拥塞控制算法根据均通过EPC接口308传达的,由EPC皮码、EPC管制功能提供的输入,以及数据流和调度器芯片保存的各种队列阈值进行工作。数据流内的“丢弃概率存储器”由EPC皮码保持,并被拥塞控制功能引用,以便允许实现各种标准或专有丢弃算法。
数据流芯片202(204)实现一组丰富的硬件辅助功能,以便根据保存在帧变更控制块(FACB)(图5中所示)中的命令,在帧变更逻辑单元309中实现帧变更。众所周知的变更包括下述帧字段的修改以太网DA/SA、VLAN、DIX、SAP、SNAP、MPLS、IP TTL、IP TOS字节和IP报头检查和。FACB有两个用途,它保存供多播传输算法之用的基准FCB地址,它还保存指示帧变更逻辑单元309(数据流的传输控制器306的一部分),当通过输出端口传输帧数据时,对帧数据进行修改的帧变更命令。帧变更逻辑单元执行的众所周知的帧修改的例子如下以太网目的地或源地址重叠,以太网协议类型重叠,多协议标号交换(MPLS)标号插入和删除,因特网协议(IP)有效时间(time-to-live)(TTL)递减等。注意实现本发明并不需要帧变更逻辑单元。即使数据流芯片202(204)不包含帧变更逻辑功能,也可使用相同的多播传输技术。
数据流芯片202(204)实现称为“虚拟输出列队”的技术,在“虚拟输出列队”中,为指定给不同输出端口或目标目的地的帧保持独立的输出队列。该方案防止如果单一输出端口被堵塞,发生“线路前端阻塞”的情况。为每个输出端口保持高优先级和低优先级队列,以便允许保留的和非保留的带宽通信被独立排队。
可选的调度器芯片211(212)通过保持可利用诸如“保证带宽”、“最佳工作”、“峰值带宽”之类各种算法调度的流队列,提供“服务质量”。两个外部SRAM被用于保持成千上万的流队列,同时数十万的帧被列队。调度器芯片211(212)通过允许根据每个流队列阈值丢弃帧,补充数据流芯片的拥塞控制算法。
注意在数据流202(204)、EPC 209(210)和调度器211(212)之间流动的所有信息以称为“消息”的格式被交换。在开关结构201、数据流202和POS成帧器/以太网MAC 203之间流动的信息呈“帧”的形式。消息只被用于数据流、EPC和调度器芯片之间“控制”信息的交换。这种消息的例子包括分派、排队、中断/例外、数据读取、数据写入、寄存器读取和寄存器写入。消息可由请求或响应组成。
图4中描述了通用消息格式。参见图4,消息格式包含下述部分消息ID消息ID字段是消息的第一个字中的8位编码值,所述消息ID字段唯一地识别消息类型。
消息参数消息参数字段是消息的第一个字中的24位值,可针对如下所示的各种目的,基于每个消息类型,规定所述消息参数字段·可用作消息ID字段的扩展,从而定义其它消息类型。
·可基于每个消息类型,用于进一步限制消息的用途。
·可用于携带“顺序号”或者使响应中返回的数据相关的其它“参考ID”信息。
·在可变长度消息的情况下,可用于规定消息长度。
·可用于携带消息特有的任何其它数据参数。
数据消息的剩余部分可由从“0”-“N-1”的其它32位“数据”字组成。
多播传输本节描述多播帧的排队和传输过程。图5图解说明了多播传输的一个例子。这种情况下,多播帧正被传送给三个目的地,于是认为具有三个“实例”。在帧的整个使用期限内,保留最初接收该帧时分配的PCB,并将其称为“基准PCB”501。网络处理器获得另外的FCB(图5中命名为FCB 1、FCB 2和FCB 3)5021、5022和5023,以及缓冲器5031、5032和5033,并把它们链接到初始的基准帧501中,以便产生多播帧传输的每个实例。每个实例随后被排队,以便传输。
当传输每个实例时,放弃每个实例独有的FCB 502和缓冲器503。但是只有在传输了所有实例之后,才放弃基准FCB 501和相关缓冲器5051-5055。由于可通过不同的端口传输帧的各个实例,因此可按照与其排队顺序不同的顺序完成传输。多播传输计数器(MCC)被用于确定何时传送完了所有的实例,以致可放弃基准帧。MCC被保存在基准FCB 501的未用NFA字段中,如图5的左上部中所示。用多播传输中实例的数目初始化多播传输计数器,随后当传输每个多播传输实例时,递减多播传输计数器。当MCC达到零时,通过分别把基准FCB 501及其相关缓冲器5051-5055返回给自由FCB和自由缓冲器队列,放弃基准FCB 501及其相关缓冲器5051-5055。
基准FCB 501及其它FCB 5021、5022和5023都来自相同的FCB自由池。当FCB被用作基准FCB时,NFA/MCC字段被用作MCC。当FCB被用作常规FCB(非基准FCB)时,NFA/MCC字段被用作NFA。图1中图解说明了QCB和FCB之间的关系。FCB 5021、5022和5023都被置于队列中以便传输。数据流包括每个输出队列的QCB。每个输出队列一般与一个端口(即经由POS成帧器/以太网MAC的网络通信链路,或者经由开关结构的另一网络处理器)相关。图5中图解说明的这三个多播传输实例中的每一个被排列到一个输出队列中。也可对所有这三个实例排队,以便通过相同端口传输,或者可对所有这三个实例排队,以便通过不同端口传输。但是三个FCB中的每个FCB都将被置于一个帧队列中,以便完全通过一个端口传输。这些FCB中的NFA字段被用于形成队列中的帧的链接列表。但是,基准FCB 501并不包括在任何队列中。基准FCB 501保存用于在传输完成帧的所有实例之后,把初始(基准)帧的缓冲器返回给缓冲器的自由队列的参数。由于基准帧未包括在帧队列中,因此不需要NFA字段来形成链接列表。相反,NFA的这些位被用于存储MCC。基准FCB的地址在帧数据之前保存在FACB中(图5中图解所示),当传输各个帧实例时,用于查找基准FCB的位置。
EPC芯片202执行下述操作,对多播帧的每个实例排队1.从自由FCB队列获得FCB 502,并将其分配给该实例。
2.从自由缓冲器队列获得一个或多个缓冲器503,以便包含该实例的FACB和任意独特报头数据。对于多播传输来说,FACB的使用是强制性的。
3.该实例的任何独特数据被写入上面获得的缓冲器503中。多播的不同实例通常具有不同的报头数据。例如,多播的一个实例可能具有以太网报头,因为正通过以太网端口传输该实例,而另一实例需要POS报头,因为正通过POS端口传输所述另一实例。
4.写入与独特实例缓冲器相关的BCB 504,从而产生把BCB504连接到初始“基准帧”的缓冲器上的链接列表。独特实例缓冲器不需被链接到基准帧的第一缓冲器上。如果将从该实例省略基准帧中的一些前导字节,那么可把该实例的独特缓冲器链接到基准帧中除第一缓冲器之外的一个缓冲器上。SBP和EBP值被写入每个BCB 504中,以便反映下一缓冲器中的有效字节。这允许该实例的最后独特缓冲器的BCB 504规定来自基准帧的第一链接缓冲器中的起始字节偏移量,所述起始字节偏移量不同于为其它实例规定的其它字节偏移量。设置TBUF位,指示在其数据被传输之后,是否应立即把下一缓冲器返回给自由缓冲器队列。该实例的最后的独特缓冲器应把其BCB 504中的TBUF位置为零。该实例的所有其它独特缓冲器的BCB 504中的TBUF位将把其TBUF位置为1。
5.网络处理器随后发出排队操作,把该实例释放给数据流202以便传输。作为排队操作的一部分,下述信息被提供给数据流202·目标队列编号-规定多播实例将被排到哪个输出队列中。
·FCBA-规定网络处理器分配给多播实例的帧控制块地址(FCBA)。
·BCNT-规定帧的总长度。对于每个多播实例来说,它可不同。
·FBA-规定多播实例中第一缓冲器101的地址。对于多播实例来说,第一缓冲器101总是唯一的。
·SBP/EBP-规定第一缓冲器101中有效数据的起始位置和终止位置。
·类型-规定要传输的帧的类型和格式。对于“多播”帧来说,总是被设置成二进制值“11”。该值意味着1)该帧是一个多播实例,2)第一缓冲器101包含FACB,和3)第一缓冲器101是瞬态缓冲器(TBUF=1)。
·FACB-规定当帧数据被传输时,数据流202将对帧数据施加的变更的帧变更控制块(FACB)信息。FACB可包括关于每个多播实例的不同帧变更请求。但是,每个实例应包括供在传输完所有实例之后,放弃基准帧之用的基准FCB 501的地址。
·多播操作-当对多播实例排队时,网络处理器确定当前排队是多播传输的第一实例、中间实例还是最后实例。
*01-首先多播传输-排队的第一实例被标识为“首先多播传输”。
*10-中间多播传输-如果多播帧由两个以上的实例组成,那么任何中间实例被标识为“中间多播传输”。
*11-最后多播传输-排队的最后实例被标识为“最后多播传输”。
下面描述从接收排队操作到经由目标输出端口传输多播帧实例的数据流芯片的操作1.数据流芯片202通过把在排队中提供的FBA和SBP值作为信息将被写入其中的地方的缓冲器地址和偏移量,把FACB信息写入帧的第一缓冲器5021中。
2.数据流芯片202从FACB信息内抽取基准FCB 501的地址。该地址被用于访问基准FCB 501,以便存储MCC值。MCC值被保存在基准FCB 501的NFA字段中(由于基准帧不直接位于任何队列中,因此基准FCB 501的NFA字段未被使用)。排队时,如下更新MCC 506的值·如果多播操作为01-首先多播传输,则MCC 506被置为2。
·如果多播操作为10-中间多播传输,那么MCC 506被加1。
·如果多播操作为11-最后多播传输,那么不修改MCC 506。
3.数据流芯片202把FBA、SBP、EBP和类型值写入由在排队中提供的FCBA值指定的FCB 502中。
4.数据流芯片202把帧排列到由在排队中提供的目标队列编号值指定的被请求输出队列中。数据流芯片202如下完成该操作a.如果输出队列中先前不存在任何帧,那么把在排队中提供的FCBA值写入输出队列的QCB 104中的头部FCBA和尾部FCBA中(图1)。把在排队中提供的BCNT值写入QCB 104中的头部BCNT中。使QCB 104中的QCNT加1。
b.如果在输出队列中已存在一帧或多帧,那么写入先前位于输出队列的尾部的帧的FCB 502的NFA和BCNT字段。用在排队中提供的FCBA和BCNT值写入NFA和BCNT字段。随后用在排队中提供的FCBA值写入输出队列的QCB 104的尾部FCBA字段(图1)。使QCB104中的QCNT加1。
5.当帧到达输出队列的头部时,使该帧出列,以便通过输出端口传输。从输出队列的QCB 104读取头部FCBA和头部BCNT字段。头部BCNT值被加载到工作字节计数寄存器内,以便在传输帧的过程中使用。头部FCBA值被用于读取位于队列头部的FCB 502的内容。从FCB 502读取的NFA和BCNT值被用于更新QCB 104的头部FCBA和头部BCNT字段(图1)。从FCB 502读取的FBA、SBP、EBP和类型字段被载入工作寄存器中,以便在传输来自于第一缓冲器5041的数据期间使用。随后当其地址被推入自由FCB队列的尾部时,放弃FCB502。使QCB 104中的QCNT减1。
6.从FCB 103读取的FBA、SBP、EBP和类型值被用于定位并读取帧的第一缓冲器101的内容。类型字段指示多播,这意味着存在FACB。于是,随后读取该FACB,并将其传送给帧变更逻辑单元,在帧变更逻辑单元,FACB被用于当帧数据被传输时,对帧数据施加所请求的修改。另外还从FACB抽取基准FCB 501的地址,并将其保存在工作寄存器中,以便在完成帧传输之后使用。随后把来自缓冲器101的帧数据(如果存在的话)置于将通过输出端口传输的输出FIFO(先进先出缓冲器)中。置于输出FIFO中的字节的数目是工作字节计数寄存器和由SBP和EBP值指示的缓冲器101中有效字节的数目中的较小者。随后缩减工作字节计数寄存器,缩减的数目是置于输出FIFO中的数据的字节数。如果工作字节计数寄存器中的值仍然大于零,则从对应于第一缓冲器101的BCB 102读取NBA、SBP、EBP和TBUF值,并将这些值载入工作寄存器,以供下一缓冲器101的传输之用。随后当其缓冲器地址被推入自由缓冲器队列的尾部时,放弃第一缓冲器101。
7.从BCB 102读取的NBA、SBP、EBP和TBUF值被用于定位和读取帧的下一缓冲器101的内容。随后把来自缓冲器101的帧数据置于要通过输出端口传输的输出FIFO中。置于输出FIFO中的字节的数目是工作字节计数寄存器和由SBP和EBP值指示的缓冲器101中的有效字节的数目中的较小者。随后缩减工作字节计数寄存器,缩减的数目是置于输出FIFO中的数据的字节数。如果工作字节计数寄存器中的值仍然大于零,则从当前缓冲器101的BCB 102读取NBA、SBP、EBP和TBUF值,并将这些值载入工作寄存器,以便在下一缓冲器101的传输中使用。如果设置了当前缓冲器101的TBUF位,那么通过把其缓冲器地址推入自由缓冲器队列的尾部,放弃当前缓冲器101。随后重复步骤7,直到工作字节计数寄存器已递减到零为止。
8.在完成帧传输之后,先前保存在工作寄存器中的基准FCB地址被用于读取保存在基准FCB 501的NFA字段中的基准FCB 501中的MCC字段。随后执行下述两个操作之一·如果MCC值大于1,则把MCC值减1,并写回基准FCB 501的NFA字段。随后完成该多播实例的传输。但是,由于其它多播实例还没有完成传输,因此不可丢弃基准帧。
·如果MCC值等于1,则把基准FCB 501排列到“放弃队列”中,从而把与基准帧相关的FCB和缓冲器返回给自由队列。随后完成多播帧的所有实例的传输。
静态帧传输也适用于图5。除了不向自由FCB或缓冲器队列返回任何FCB或缓冲器,以及基准FCB 501中的MCC值不被递减之外,静态帧传输等同于多播传输。在必须保留帧的副本,以供稍后重发的情况下,使用静态帧传输。图5中图解说明的每个帧实例可作为静态帧被传输一次或多次(通过把FCB的类型字段设置为二进制“01”以指示静态帧)。当最后一次传输帧实例时,该帧实例作为正常的多播帧被传输(通过把FCB的类型字段设置成“11”以指示多播帧)。从而,每个帧实例可作为静态帧被传输一次到“N”次,之后作为正常的多播帧被传输一次。当每个实例已作为正常多播帧被传送时,来自基准帧的基准FCB 501和缓冲器被返回给自由FCB和缓冲器队列。在EPC芯片209中执行的皮码软件确定是以静态帧的形式,还是以多播帧的形式传输帧实例。
除了不把帧的FCB 103和缓冲器101返回给自由队列之外,数据流芯片202完全类似于“具有FACB的单播”帧类型,传输静态帧。随后,EPC芯片202可以发出指定相同FCB 103重发该帧的另一排队操作。通过指定静态帧类型值,该帧可被重发任意次。可应用静态帧类型,以便允许单播或多播帧类型的重发。在多播的情况下,对于静态帧忽略TBUF参数,从而即使设置TBUF位,也不放弃任何缓冲器。
当进行静态帧的最终重发时,该静态帧被简单地排列成类型二进制“00”(具有FACB的单播),或者类型二进制“11”(多播)。随后如前述各节中所述那样传输该帧,并把FCB 103和相关缓冲器101返回给自由队列。
图6描述了说明本发明的优选实施例的操作的流程图。该过程始于功能框601,EPC 209为数据流芯片202发放信用(credit),以便把帧分派给EPC 209,在判定框602中确定帧是否已被分派。如果否,那么该过程在功能框603中等待。当帧已被分派时,在功能框604中,EPC 209请求从数据流芯片202租用“N”个自由FCB地址。在判定框605中确定FCB地址是否已被传送。如果否,那么过程在功能框606中等待。当FCB地址已被传送时,EPC 209在功能框607中向数据流芯片202请求租用“N”个缓冲器。随后在判定框608中确定缓冲器是否已被传送。如果否,那么过程在功能框609中等待。当缓冲器已被传送时,在功能框610中,EPC 209把新的第一个缓冲器或几个缓冲器链接到初始的第一缓冲器101上。随后在功能框611中,EPC 209利用FACB(帧变更控制块)信息,对每个实例排队。最后,在功能框612中,EPC 209用信号通知数据流芯片202,更新用于每个已传送分组的计数器。对EPC芯片210和数据流芯片202应用类似的过程。这里描述的流程同样适用于进入和外出。如图2中所示,在进入和外出中都使用这三个主要芯片,即EPC芯片、数据流芯片和调度器芯片;只是数据的流动方向不同。在进入和外出之间,诸如多播之类的所有功能都相同。
权利要求
1.一种网络处理器上多播传输的方法,包括下述步骤把要传输的帧保存在通过链接列表连接在一起的一系列缓冲器中;使缓冲器控制块与每个缓冲器相关;使帧控制块与每个帧相关;把帧接收到队列中,等待被网络处理器分派;使队列控制块与要传输的帧队列相关;为每个多播目标分配额外的缓冲器和额外的帧控制块,并使这些额外的帧控制块和与帧相关的初始帧控制块链接;利用多播计数器确定帧何时已被发送给每个多播目标;随着帧被发送给每个目标,把分配给每个多播目标的缓冲器和帧控制块返回给自由队列;和在帧已被发送给所有多播目标之后,把初始缓冲器和帧控制块返回给自由队列。
2.按照权利要求1所述的多播传输方法,其中与每个缓冲器相关的缓冲器控制块形成把多个缓冲器链接到帧中的链接列表,并且包括若干字段,包括多个独立字段以便保存指向帧中的下一缓冲器的指针;保存帧的下一缓冲器中数据的第一有效字节的偏移量;保存帧的下一缓冲器中数据的最后有效字节的偏移量;和指示帧中的下一缓冲器是应被返回给自由缓冲器或队列,还是应被保留以便继续多播传输。
3.按照权利要求1或2所述的多播传输方法,其中与各帧相关的帧控制块形成把多帧链接到队列中的链接列表,并包含若干字段,包括多个独立字段以便保存指向队列中下一帧的指针;保存队列中下一帧的字节总数的计数;保存帧中第一缓冲器的地址;保存帧的第一缓冲器中有效数据的起始字节位置;保存帧的第一缓冲器中有效数据的终止字节位置;和保存关于要传输帧的格式和类型的信息。
4.按照前述任意权利要求所述的多播传输方法,其中把帧接收到队列中的步骤还包括下述步骤从自由缓冲器队列的头部弹出一个自由缓冲器地址;从自由帧控制块队列的头部弹出一个自由帧控制块;把帧数据写入缓冲器;把控制信息,包括第一缓冲器地址、第一缓冲器中有效数据的起始字节位置和终止字节位置,写入帧控制块;把工作字节计数寄存器设置成写入第一缓冲器的字节的数目;重复该过程,直到整个帧被写入缓冲器为止;和把该帧添加到输入队列的尾部,等待分派给网络处理器。
5.按照前述任意权利要求所述的方法,其中与要传输的帧队列相关的队列控制块包括若干字段,包括多个独立字段以便保存与位于队列头部的帧相关的帧控制块的地址;保存位于队列头部的帧中的有效字节的总数的计数;和保存与位于队列尾部的帧相关的帧控制块的地址。
6.一种计算机程序,具有当在计算机系统上运行所述程序时,适合于实现按照前述任意权利要求所述方法的方法步骤的程序代码。
7.一种支持多播传输的网络处理器,包括把要传输的帧保存在通过链接列表连接在一起的一系列缓冲器中的装置;使缓冲器控制块与每个缓冲器相关,并使帧控制块与每个帧相关的装置;把帧接收到队列中以等待分派的装置;使队列控制块与要传输的帧队列相关的装置;为每个多播目标分配额外的缓冲器和额外的帧控制块,并使这些额外的帧控制块和与帧相关的初始帧控制块链接的装置;利用多播计数器确定帧何时已被发送给每个多播目标的装置;和随着该帧被发送给每个目标,把分配给每个多播目标的缓冲器和帧控制块返回给自由队列,并且在帧已被发送给所有多播目标之后,把初始缓冲器和帧控制块返回给自由队列的装置。
8.按照权利要求7所述的网络处理器,其中与每个缓冲器相关的缓冲器控制块形成把多个缓冲器链接到帧中的链接列表,并且包含若干字段,包括多个独立字段以便保存指向帧中的下一缓冲器的指针;保存帧的下一缓冲器中数据的第一有效字节的偏移量;保存帧的下一缓冲器中数据的最后有效字节的偏移量;和指示帧中的下一缓冲器是应被返回给自由缓冲器或队列,还是应被保留以便继续多播传输。
9.按照权利要求7或8所述的网络处理器,其中与各帧相关的帧控制块形成把多帧链接到队列中的链接列表,并包含若干字段,包括多个独立字段以便保存指向队列中下一帧的指针;保存队列中下一帧的字节总数的计数;保存帧中第一缓冲器的地址;保存帧的第一缓冲器中有效数据的起始字节位置;保存帧的第一缓冲器中有效数据的终止字节位置;和保存关于要传输帧的格式和类型的信息。
10.按照权利要求7、8或9所述的网络处理器,其中把帧接收到队列中的装置包括从自由缓冲器队列的头部弹出一个自由缓冲器地址的装置;从自由帧控制块队列的头部弹出一个自由帧控制块的装置;把帧数据写入缓冲器的装置;把控制信息,包括第一缓冲器地址、第一缓冲器中有效数据的起始字节位置和终止字节位置,写入帧控制块的装置;把工作字节计数寄存器设置成写入第一缓冲器的字节的数目的装置;响应整帧被写入缓冲器,把该帧添加到输入队列的尾部以等待分派给网络处理器的装置。
全文摘要
公开了网络处理器上的多播传输,以便使多播传输存储器需求降至最小,并考虑到端口性能差异。在网络处理器上多播传输的帧数据被读入各种控制结构和一个基准与其相关的缓冲器中。基准帧和相关的控制结构允许在不产生帧的多个副本的情况下,服务于多播传输目标。此外,相同的基准帧和控制结构允许把为每个多播传输目标分配的缓冲器返回给自由缓冲器队列,而不必等到所有多播传输完成为止。
文档编号H04L12/18GK1498480SQ02807177
公开日2004年5月19日 申请日期2002年1月28日 优先权日2001年4月20日
发明者克劳德·贝索, 简·L·卡尔维格纳克, 玛库·海蒂斯, 约瑟夫·F·洛根, 法布瑞斯·J·维尔普兰肯, F 洛根, たǘ 衲煽, 克劳德 贝索, 斯 J 维尔普兰肯, 海蒂斯 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1