端口包排队列的制作方法

文档序号:7659893阅读:186来源:国知局
专利名称:端口包排队列的制作方法
技术领域
组网交换机从与交换机连接的许多入口端口接收数据包并且向与交换机连接的许多出口端口提供数据包。交换机根据包含在数据包中的目的地址确定向哪些出口端口提供数据包。从入口端口接收的数据包在提供给出口端口前存储在交换机的存储器中。
通常,交换机包括一个在交换机入口引擎的转发逻辑中实现的转发表。转发表用来查询转发的条目。转发的条目包括根据所接收的数据包中包含的目的地址要将数据包转发到的一个或多个出口端口。
由于所接收的数据包存储在公共存储器中,数据包在公共存储器中的位置根据所选择的转发条目存储在一个或多个出口端口队列中。出口端口队列存储在交换机的存储器中。
如果接收的数据包是IP多播数据包,那么将公共存储器中数据包的位置写入与IP多播组中的每个端口关联的出口端口队列中。如果接收的数据包是广播数据包,那么将公共存储器的位置写入所有出口端口队列。因此,根据所接收的数据包的类型,公共存储器中数据包的位置,即,包指针可以在所接收的端口周期内加入到一个以上的出口端口队列。但是,当从多个队列发送数据包时,每个端口周期只能发送一个包。因此,公共存储器中数据包的位置在每个端口周期仅从一个出口端口离队。
因此,交换机支持的端口数受公共存储器中数据包位置能够受加入到出口端口队列时的速度的限制。队列通常通过存储器中的链接列表实现。链接列表中的每一条目有两个元素,用来存储数据包位置的指针元素和用来存储链接列表中下一个条目位置的下一个指针元素。因此,为了在链接列表中添加数据包的位置需要对存储器进行两次写访问,第一次访问是在指针元素中写入数据包在公共存储器中的位置,第二次访问是在下一个指针元素中写入下一个条目的位置。
在所接收的数据包不被交换机阻塞的无阻塞交换机中,选择存储器速度,使得存储在公共存储器中的所接收数据包的位置可以在一个端口周期写入所有出口端口队列。另外,需要一个长队列来存储指向保存在公共存储器中的IP多播和广播数据包的指针。
如果出口端口队列在动态随机存取存储器(“DRAM”)的链接列表中实现,那么提供一个长队列,但是可以加入队列的用于所接收数据包的指针数量受DRAM速度的限制。由于SRAM比DRAM快,因此可以加入队列的用于所接收数据包的指针数量通过在静态随机存取存储器(“SRAM”)中实现出口端口队列来增加。但是,由于SRAM单元比DRAM单元大,因此需要更大的区域来提供大小相似的队列。
由于在指针传递到第二存储器时才建立链接列表,因此控制逻辑在单独一个写操作时将指针加入到第一存储器中。
在一个写操作中将高速缓存行传送到第二存储器之前,控制逻辑可以部分或全部填充第一存储器的高速缓存行。第一存储器的高速缓存行中的条目按照在高速缓存行中的位置排序。第一存储器最好包括两个高速缓存行。
存储在第二存储器中的包矢量可以包括高速缓存行条目和存储在高速缓存行条目中的指针数量。存储在第二存储器中的包矢量可以包括指向队列中下一个包矢量的链接。


图1是根据本发明原理包括多个端口队列的交换机的方框图;图2是解释图1所示端口队列中的包指针入队和离队的时序图;图3是图1所示端口队列124a-e之一的方框图;图4是包括图3中所示的端口队列逻辑和图3所示的端口队列中包指针入队、离队和传递的关联逻辑的方框图;图5是解释图3所示的包矢量DRAM中包矢量的链接列表的方框图;图6是包含两个高速缓存行并且每个高速缓存行包含12个包指针条目的SRAM高速缓存的方框图;图7是与图4所示的端口队列关联的端口寄存器的方框图;图8是包含用来确定包指针所加入队列的转发矢量的交换机100的方框图;图9A是解释在图4所示的入队引擎中执行的用来在端口队列中加入包指针的步骤流程图;图9B是解释在图6所示的入队引擎中执行更新端口寄存器的步骤流程图;图10是解释在图6所示的转储引擎中执行将高速缓存行从SRAM高速缓存传递到包矢量DRAM的步骤流程图;图11是解释在图6所示的离队引擎中执行包指针从端口队列离队的步骤流程图。
具体实施例方式
下面描述本发明的优选实施例。
图1解释了根据本发明原理包括多个出口端口队列124a-e的交换机100。源节点102和目的节点112a-e连接到交换机100。根据数据包126包括的首部中编码的目的地址通过出口端口130a-e在入口端口132从源节点102向一个或多个目的节点112a-d转发交换机100接收的数据包126。
如果所接收的数据包126是广播数据包,那么数据包126转发到所有目的112a-e。如果所接收的数据包是IP多播数据包,那么数据包126转发到可能包括目的112a-e中的一个或多个的IP多播组的所有成员。
一旦接收到数据包126,交换机100首先在段缓冲区存储器108中存储数据包126。然后交换机100根据数据包首部确定将数据包转发到哪个出口端口130a-e。确定完出口端口130a-e,交换机100在段缓冲区存储器108中写入指向数据包位置的指针;即在各自出口端口队列124a-e中的包指针128。出口端口队列124a-e在与段缓冲区存储器108分开的存储器中执行。如果数据包126要转发到各自的出口端口130a-e,那么包指针128写入出口端口队列124a-e。如图1所示,数据包126是广播数据包并且用于数据包126的包指针128已经加入到每个出口端口队列124a-e中。
因此,对于所接收的数据包,可以在每个端口周期将包指针128加入到一个以上的出口端口队列124a-e。然而,为了从各自的出口端口130a-e发送数据包,包指针在每个端口周期只从出口端口队列124a-e中的一个离队。因此,包指针128加入出口端口队列124a-e比从出口端口队列124a-e离队快。
图2是解释包指针在图1所示的出口端口队列124a-e中入队和离队的时序图。交换机100中的每个端口被分配固定端口周期200a-f,其中通过在出口端口队列124a-e的尾部加入包指针128来加入包指针128,或者通过读取存储在出口端口队列124a-e的首部的包指针128使包指针128从出口端口队列124a中离队。
图2所示为6个端口周期200a-f,每一个对应交换机100中的一个入口端口132和出口端口130a-e。每个端口周期200a-f进一步划分为入队周期202a-e。入队周期202a-e的数量取决于交换机100中出口端口队列124a-e的数量。因此,5个入队周期202a-e分别提供给图1所示出口端口队列124a-e中的每一个。
包指针可以在端口周期200a-e中的入队周期202a-e加入到交换机100的每个出口端口队列124a-e。但是,在端口周期200a-e中只有一个包指针从出口端口队列124a-e离队。因此,包指针入队周期的时间必须比包指针离队周期的时间快。在所示的例子中,离队周期时间比入队周期时间慢5倍。因此,包指针加入到快速存储器中,即具有快速存取时间的存储器。但是,在每个端口周期200a-e只有一个包指针从对应的端口队列124a-e中离队,因此包指针从存取时间比加入包指针所需的快速存储器的存取时间慢的存储器,即慢速存储器中离队。
快速存储器最好是具有快速存取时间的SRAM。但是快速存储器不只局限于SRAM。它可以是存取时间足够快的任何其它存储器。例如,快速存储器可以是存取时间足够快的DRAM。
慢速存储器最好是DRAM,这是因为慢速存储器比SRAM需要的门电路少。但是慢速存储器不只局限于DRAM。它可以是类似于DRAM的任何其它慢速存储器。在使用DRAM既作为快速存储器又作为慢速存储器的实施例中,慢速存储器存取时间可以等于快速存储器存取时间。
图3是图1所示端口队列124a-e中其中一个的方框图。端口队列124a-e包括慢速存储器和快速存储器。包矢量DRAM 300是慢速存储器。SRAM高速缓存302是存取时间比包矢量DRAM 300的存取时间快的存储器。在一个实施例中包矢量DRAM 300在具有慢速存取时间的DRAM中实现而SRAM高速缓存302在存取时间比包矢量DRAM 300快的SRAM中实现。
包指针128在SRAM高速缓存302中入队并且按照与在入口端口132接收包的相同顺序从包矢量DRAM 300中离队。SRAM高速缓存302包括两个高速缓存行304a-b。每个高速缓存行304a和304b包括多个包指针条目306。包指针128可以存储在包指针条目306中。
当接收的数据包126(图1)存储到段缓冲区存储器108(图1)后,包指针通过包指针输入数据308转发到出口端口队列124a-e。包指针128写入当前填充的高速缓存行304a或304b中后序包指针条目306中。
在出口端口队列124a-e的队尾将包指针128加入到包指针条目306时只需要一个写周期。因为包指针128写入后序的包指针条目306,所以不需要链接指针。因此,包指针按照在高速缓存行304a和304b中的顺序排列。
在另一个实施例中,为了缩短端口队列124a-e的长度,SRAM高速缓存302可以在存取时间至少与SRAM一样快的DRAM中实现。包矢量DRAM 300的存取时间可以等于SRAM高速缓存302的存取时间。利用两个具有相同存取时间的不同的DRAM实现端口队列124a-e的优势在于包指针能够在单独一次的存储器访问中被添加到链接列表并且入队操作和离队操作可以通过具有不同入队和离队的存储器来同步执行。
最小入队周期202a-e(图2)取决于用于SRAM高速缓存302的最小存储器访问周期。例如,如果端口周期为120ns并且SRAM高速缓存302包括5个出口端口队列124a-e,那么每个入队周期202a-e为120/5=25ns并且每个离队周期为120ns。在离队周期,读取包指针128并且更新指向下一个包指针128的指针。因此读存储器存取周期和写存储器存取周期在需要具有60ns存储器存取时间的包矢量DRAM 300的每个离队周期中执行。一个写存储器周期存取存储器在需要具有25ns存取时间的SRAM高速缓存302的每个入队周期中执行。
当包指针128已经写入当前高速缓存行304a-b中的最后一个包指针条目306后;即行已填满,存储了多个包指针128的已满的当前高速缓存行304a或304b在单独一个传递周期被传递到包矢量DRAM 300中未占用包矢量310的高速缓存行条目320。为了将当前高速缓存行304a和304b传递到包矢量DRAM 300,从SRAM高速缓存302读取当前高速缓存行304a和304b,通过高速缓存行数据312传递到包矢量DRAM 300并且写入包矢量DRAM 300中包矢量310的高速缓存行条目320。
利用单独一个SRAM高速缓存读周期执行当前高速缓存行304a或304b向包矢量DRAM 300的传递。这样,存储在当前高速缓存行304a或304b中包指针条目306的多个包指针128在单独一个SRAM高速缓存读周期中传递。例如,如果当前高速缓存行304a或304b有12个包指针条目306并且每个包指针条目306为17比特宽,那么在单独一个传递周期中通过高速缓存行数据312传递204比特。传递存储在高速缓存行304a或304b中的12个包指针128只需要一个传递周期。因此,从SRAM高速缓存302传递当前高速缓存行304a或304b时只需使用SRAM高速缓存302和包矢量DRAM 300的一小部分带宽。
当一个高速缓存行304a或304b等待传递到包矢量DRAM 300时,其它的包指针128可以加入到其它高速缓存行304a或304b中。这样,包指针128单独加入到SRAM高速缓存302的包指针条目306并且包含存储在包指针条目306中多个包指针128的高速缓存行304a-c在单独一个传递周期写入包矢量DRAM 300。
包矢量310还包括链接字段316和计数字段318。计数字段318存储高速缓存行条目320中保存的包指针128的数量。链接字段316用来存储包矢量链接列表中的下一个包矢量310。
包指针128从包矢量DRAM 300离队。存储在出口端口队列124a-e队尾的包指针条目306中的包指针128通过包指针输出数据322转发。根据计数字段318的内容来确定包指针128从哪个包指针条目306转发。
因此,包指针128在SRAM中入队并且从DRAM中离队,允许包指针128迅速地加入快速SRAM并且存储在慢速DRAM中。
图4是包含图3所示端口队列124和包指针128入队、离队和传输的相关控制逻辑的方框图。
一组与出口端口队列124关联的端口寄存器存储在端口寄存器406中。结合图7描述端口寄存器406。存储在端口寄存器406中的这组端口寄存器可以通过SRAM入队端口寄存器410由排队引擎404,通过转储端口寄存器414由转储引擎402以及通过DRAM离队端口寄存器412由离队引擎400来存取。
排队引擎404控制包指针128在SRAM高速缓存302中的入队。为了入队,入队引擎404通过包指针输入数据308转发段缓冲区写存储器地址416。入队引擎将包指针输入数据308写入SRAM高速缓存302的高速缓存行304a-b中的包指针条目306(图3)。
排队引擎404根据高速缓存行428的状态选择要写入哪个高速缓存行304a或304b的包指针条目。高速缓存行428的状态取决于通过SRAM地址多路复用器430转发的排队行422。排队行422的状态取决于端口寄存器406的状态。
排队引擎404根据包指针条目启用420选择高速缓存行304a-b中的包指针条目306。包指针条目启用420的状态取决于SRAM入队端口寄存器410的状态。
转储引擎402控制高速缓存行304a或304b从SRAM高速缓存302到包矢量DRAM 300的传递。为了传递,转储引擎402首先通过SRAM RD424执行存储器读周期使SRAM高速缓存302中的SRAM高速缓存行304a或304b(图3)的内容通过高速缓存行数据312转发。接下来,转储引擎402通过DRAM-WR 426执行存储器写周期使高速缓存行312写入包矢量DRAM 300中包矢量310(图3)的高速缓存行条目320(图3)。
离队引擎400控制包指针128从包矢量DRAM 300中离队。为了离队,离队引擎400读取存储在包矢量DRAM 300中包矢量310(图3)的高速缓存行字段320(图3)中的包指针条目306(图3)中的包指针128,并且将包指针128通过段缓冲区读存储器地址408转发。
图5是解释图3所示包矢量DRAM 300中包矢量310a-c的链接列表的方框图。链接列表包括3个包矢量310a-c。包矢量310a是链接列表中的第一个包矢量。链接字段316a存储包矢量DRAM 300中的下一个包矢量310b的地址。包矢量310b是链接列表中的第二个包矢量。包矢量310b中的链接字段316b存储包矢量DRAM 300中的下一个包矢量310c的地址。包矢量310c是链接列表中的第三个包矢量。包矢量310c中的链接字段316c存储包矢量DRAM 300中的下一个可以写入高速缓存行304a或304b的包矢量310的地址。
尽管包矢量310c包含指向下一个包矢量的指针,但是由于计数字段318、链接字段316和高速缓存行条目320存储的数据无效,所以它是链接列表中的最后一个包矢量310。例如,存储在计数字段318中的无效数据可以是表示在高速缓存行条目320中没有包指针128的0。为了在链接列表中添加另一个包矢量,在单独一个包矢量DRAM存储器写访问时写入具有有效值的下一个包矢量的高速缓存行条目320、计数字段318和链接字段316。
包矢量310a-c中的每一个高速缓存条目320a-c包括12个包指针条目306。包指针条目306的数量不限于12个,包指针条目306的数量取决于SRAM高速缓存302的存储器存取时间;即,向包矢量DRAM300传递高速缓存行304a或304b的时间。通过在每个传递周期传递12个包指针128取代在每个传递周期传递1个包指针来减小由传递周期所损耗的SRAM高速缓存302的带宽并且允许在相同的SRAM高速缓存302中提供更多的端口队列124a-e。
计数字段318a-c的大小取决于高速缓存行条目320中包指针条目306的数量。12个包指针条目306的计数字段318a-c为4比特宽。链接字段316的大小取决于包矢量DRAM 300的大小。链接字段316存储下一个包矢量310的首位置在包矢量DRAM 300中的地址。利用12比特的链接字段,链接列表可以包含最多4096个包矢量条目310。
因为已经预取了下一个包矢量310并且下一个包矢量310的地址已经写入链接列表中最后一个包矢量310的链接字段316,所以要在链接列表中增加一个包矢量310需要一个向包矢量DRAM 300的存储器写操作。写操作将SRAM高速缓存302(图3)中的高速缓存行304a-c拷贝到包矢量DRAM 300中的高速缓存行条目320并且将存储在高速缓存行条目320中的包指针128的数量写入计数字段318。存储在高速缓存行条目中的包指针128的数量还存储在端口寄存器406中(图4)。后面结合图7描述端口寄存器406。
图6是包含两个高速缓存行304a和304b,其中每个高速缓存行包括12个包指针条目306的SRAM高速缓存302的方框图。入队引擎404(图4)通过包指针输入数据308转发将要写入包指针条目306的包指针128。根据通过SRAM地址多路复用器430(图4)从入队引擎404转发的高速缓存行428的状态来选择要写入包指针128的包指针条目306所在的高速缓存行304a或304b。在SRAM高速缓存302中选择完高速缓存行304a或304b后,包指针条目启用420在所选高速缓存行304a-b中的选择包指针条目306。包指针输入数据308写入所选高速缓存行304a-b中所选包指针条目306。
在一个实施例中,段缓冲区存储器108(图1)可以存储最多65536个数据包,因此每个包指针128为16比特宽。1比特差错字段(未示出)与16比特包指针128一起存储在包指针条目306。差错位的状态决定存储在由包指针128指定位置的段缓冲区存储器108中数据包是否为有效数据包。每个包指针条目306有17位,因此高速缓存行304a-b为204比特宽(12个包指针*17比特)。
图7是与图4所示端口队列124关联的端口寄存器406的方框图。端口寄存器406包括SRAM端口寄存器700和DRAM端口寄存器702。SRAM端口寄存器700包括转储行号寄存器704,填充行号寄存器706,端口条目号寄存器708,高速缓存全满寄存器710和高速缓存空寄存器712。
DRAM端口寄存器702包括当前入队指针714,下一个入队指针716,队列寄存器中的若干包矢量718,无包矢量寄存器720,当前离队指针寄存器722和下一个离队指针寄存器724。
排队引擎404(图4)利用SRAM端口寄存器700的内容来确定包指针128要加入的SRAM高速缓存302(图4)中高速缓存304a或304b的包指针条目306(图6)。转储引擎402(图4)利用SRAM端口寄存器700的内容确定从其传递包指针128到高速缓存行条目320的SRAM高速缓存302(图4)中的高速缓存行304a或304b中的哪一个到包矢量DRAM 300(图4)。
转储引擎402(图4)根据DRAM端口寄存器702的内容确定将要入队的下一个包矢量310(图3)在包矢量DRAM 300(图5)中的位置。离队引擎400(图4)根据DRAM端口寄存器702的内容确定下一个包指针128将要从中离队的包矢量310(图3)在包矢量DRAM 300(图5)的位置。
结合图9A、9B、10和11详细描述端口寄存器406。
图8是包含用来确定将包指针128加入哪个出口端口队列124a-e的转发矢量810的交换机100的方框图。交换机100包括入口端口引擎800,包存储管理器802,段缓冲区存储器108和出口端口引擎804。由入口端口引擎800在入口端口132接收的数据包转发到包存储管理器802。包存储管理器802将数据包和与段缓冲区存储器地址812有关的控制信号转发到段缓冲区存储器108。由入口端口引擎800通过入口数据808转发的接收数据包写入段缓冲区存储器108中由包指针128标识的位置。在由David.A.Brown于1999年8月31日申请的美国专利申请序号为09/386,589,题为“用于交错无阻塞包缓冲区的方法和装置”的未决专利申请中描述了在包括存储器中定位包并由此产生指针的算法的段缓冲区存储器108中数据包的写和读,这里将结合整个内容作为参考。
当数据包写入段缓冲区存储器108后,包存储管理器802根据转发矢量810的状态将包指针128加入到一个或多个出口端口队列124中。转发矢量810包括交换机100中用于每个出口端口的1比特。入队引擎404(图4)根据转发矢量810中相应端口比特的状态确定包指针128要加入到的端口。
例如,如果交换机有27个端口,那么转发矢量810为27比特宽。如果交换机100的出口端口130对应的转发矢量810中的比特被设置为“1”,那么包指针128加入到相应的出口端口队列124。另外,在另一个实施例中,如果转发矢量810中的比特的状态为“0”,那么包指针128加入到相应的出口端口队列124。
从出口端口引擎804转发的选择信号814确定包指针128从哪个出口端口队列124离队。包指针128离队并且被转发到段缓冲区存储器地址812来读取存储在段缓冲区存储器108中的数据包。与存储在所选出口端口队列124中的包指针128对应的段缓冲区存储器108中的位置存储的数据包通过出口数据806转发到出口端口引擎804。出口端口引擎804通过对应的出口端口130转发数据包。
图9A是解释在图4所示的入队引擎404中执行用来在端口队列124中加入包指针128的步骤的流程图。
在步骤900中,排队引擎404(图4)确定在入口端口132(图1)接收的数据包是否已经写入段缓冲区存储器108(图1)。如果是,处理过程继续到步骤902。否则,仍然在步骤900。
在步骤902中,排队引擎404(图4)将端口号变量(未示出)初始化为与入队引擎404有关的一组端口号中的首个端口号。与入队引擎404有关的端口可以是交换机中的所有端口或是交换机100中的部分端口。例如,一个27个端口的交换机(P1-P27)可以包含4个入队引擎,其中3个入队引擎的每个入队包指针128对应8个端口(P1-P8,P9-P15,P17-P24)而第4个入队引擎的入队包指针128对应3个端口(P25-P27)。入队引擎404不只局限于所描述的8个端口或3个端口;可以通过入队引擎404加入任何数量的端口。SRAM高速缓存302的存储器存取时间确定入队引擎404可以加入的出口端口队列的数量。
在步骤904中,排队引擎404(图4)根据从入口端口引擎800转发的转发矢量810确定包指针128是否加入到当前端口号对应的端口队列124中。如果是这样,处理过程继续到步骤910。如果是否定,处理过程继续到步骤906。
在步骤906中,入队引擎404(图4)确定当前端口是否为入队引擎404(图4)控制的一组端口中的最后一个端口。如果是,则完成对应所接收数据包的数据包指针128的入队,并且处理过程继续到步骤900。如果不是,处理过程继续到步骤908。
在步骤908中,为了将包指针128加入到由入队引擎404控制的下一个出口端口队列124中,当前端口号递增1。处理过程继续到步骤904。
在步骤910,入队引擎404(图4)读取与当前端口号有关的端口寄存器406(图4)的内容。处理过程继续到步骤912。
在步骤912中,入队引擎404(图4)检查高速缓存全满寄存器710(图7)的内容。如果高速缓存全满寄存器710(图7)的内容表示SRAM高速缓存302已满;即用于当前端口的高速缓存行304a和304b已满,那么处理过程继续到步骤914。否则,处理过程继续到步骤916。
在步骤914中,由于用于当前端口的SRAM高速缓存302已满并且没有其它的包指针128可以加入到用于当前端口的出口端口队列124中,因此生成一条系统故障消息。
在步骤916中,根据SRAM端口寄存器700(图7)的内容,包指针128存储在用于当前端口的SRAM高速缓存302中的包指针条目306中(图6)。存储包指针128的高速缓存行304a或304b取决于填充行号寄存器706(图7)的内容,并且所选的存储包指针128的高速缓存行304a-b中的包指针条目306(图6)取决于包条目号寄存器708(图7)的内容。
根据选择信号432的状态,填充行号寄存器706(图7)的内容通过入队行422(图4)转发到SRAM地址多路复用器430(图4),并且通过高速缓存行428(图4)转发到SRAM高速缓存302(图4)。选择信号432(图4)的状态确定SRAM高速缓存302(图4)是否正在通过写入来加入一个包指针128或通过读取来传递一个高速缓存行。
包指针条目号寄存器708(图7)的内容确定存储包指针128的所选高速缓存行302(图4)中的包指针条目306。入队引擎404根据包指针条目号寄存器708(图7)的内容选择包指针条目306并且通过包指针条目启用420(图4)将所选包指针启用转发到SRAM高速缓存302中(图4)。包指针128通过包指针输入数据308被转发到SRAM高速缓存302(图4)中的所选包指针条目306。
当选择好SRAM高速缓存302(图3)中的高速缓存行304a-b(图6)和包指针条目306(图6)后,入队引擎404(图4)通过在所选包指针条目306(图6)中写入包指针128将包指针128加入到出口端口队列中。处理过程继续到步骤918。
在步骤918中,入队引擎404更新SRAM端口寄存器700(图7)的内容。更新SRAM端口寄存器700的步骤将结合图9B来描述。SRAM端口寄存器700(图7)的内容更新后,处理过程继续到步骤906。
图9B是解释通过入队引擎404(图4)执行SRAM端口寄存器700(图7)更新的步骤流程图。
在步骤920中,入队引擎404(图4)将高速缓存空寄存器712的内容设置为“0”来表示SRAM高速缓存302(图3)不为空。通过转储引擎402监测高速缓存空寄存器712来确定是否有要传递到包矢量DRAM300的包指针128。为了确定是否有包指针128存储在SRAM高速缓存302中,如果包矢量DRAM 300为空,那么使用高速缓存未占用寄存器712。如果SRAM高速缓存302不为空,那么为了减小交换机100从入口端口132(图1)向出口端口130a-e(图1)转发数据包126时产生的等待时间,包指针128在高速缓存行304a或304b填满之前可以移到包矢量DRAM 300中。处理过程继续到步骤922。
在步骤922中,入队引擎404(图4)根据包指针条目号寄存器708(图7)确定当前行是否已满。如果是,处理过程继续到步骤924。否则,处理过程继续到步骤926。
在步骤924中,入队引擎404(图4)触发填充行号寄存器706(图7)的内容状态以移动到下一个高速缓存行304a或304b(图6),处理过程继续到步骤928。
在步骤926中,入队引擎404(图4)递增当前高速缓存行304a或304b(图6)中的包指针条目号寄存器708(图7)的内容。
在步骤928中,入队引擎404(图4)根据转储行号寄存器704(图7)的内容,通过比较转储行号寄存器704(图7)和填充行号寄存器706(图7)确定下一行是否已经传递。如果内容相同,那么当前行还没有传递。如果当前行还没有传递,那么入队引擎404(图4)将高速缓存已满寄存器710(图7)的内容置为“1”。高速缓存全满寄存器710的内容由转储引擎402监测以确定是否有高速缓存行304a或304b要传递到包矢量DRAM 300。
图10是解释在图4所示的转储引擎402中执行的用来将高速缓存行304(图6)从SRAM高速缓存302(图3)传递到包矢量DRAM 300中包矢量310(图5)的步骤流程图。转储引擎402还将传递高速缓存行304a或304b的包矢量310添加到存储在用于出口队列124a-e的包矢量DRAM 300(图5)中包矢量310的链接列表中。
在步骤1000中,转储引擎402(图4)确定是否可以启动传递周期。如果可以,处理过程继续到步骤1002。
在步骤1002中,转储引擎402(图4)读取用于当前端口的端口队列对应的SRAM端口寄存器700(图7)和DRAM端口寄存器702(图7)。处理过程继续到步骤1004。
在步骤1004,转储引擎402(图4)确定转储行号寄存器704(图7)的内容是否不等于填充行号寄存器706(图7)的内容。如果是,处理过程继续到步骤1018。否则,处理过程继续到步骤1006。
在步骤1006中,转储引擎402(图4)根据高速缓存全满寄存器710(图7)的内容确定高速缓存是否全满。如果高速缓存全满,处理过程继续到步骤1018。否则,处理过程继续到步骤1008。
在步骤1008中,转储引擎402(图4)根据包指针条目号寄存器708(图7)的内容确定存储在高速缓存行304a或304b中的包指针数是否大于预定义的传递阈值。如果是,处理过程继续到步骤1014。否则,处理过程继续到步骤1010。
在步骤1010中,转储引擎402(图4)根据无包矢量寄存器720(图7)的内容确定在包矢量DRAM 300(图3)中是否存储了用于当前端口的包矢量310(图3)。如果是,处理过程继续到步骤1012。否则,处理过程继续到步骤1000。
在步骤1012中,转储引擎402(图4)根据包指针条目号寄存器708(图7)确定在当前行中是否存储了包指针条目306(图3)。如果是,处理过程继续到步骤1014。否则,处理过程继续到步骤1000。
在步骤1014中,转储引擎402(图4)将包矢量DRAM 300(图3)的下一个可用包矢量310(图3)中的计数字段318(图3)设置为将要传递到包矢量DRAM 300(图3)的写入部分填充的高速缓存行304a或304b的包指针128的数量。填充行号寄存器706(图7)的内容触发到下一个高速缓存行号。例如,如果当前高速缓存行号为1,那么填充行号寄存器706(图7)的内容触发为“2”。包指针条目号寄存器708的内容初始化为“1”。处理过程继续到步骤1016。
在步骤1016中,转储引擎402(图4)将高速缓存空寄存器712(图7)设置为“1”来表示SRAM高速缓存302(图3)为空。处理过程继续到步骤1022。
在步骤1018中,转储引擎402(图4)将包矢量DRAM 300(图3)中下一个可用包矢量310(图3)的计数字段318(图3)设置为12(存储在高速缓存行304a或304b(图3)中包指针条目306(图3)的包指针128的最大数)。处理过程继续到步骤1016。
在步骤1020中,转储引擎402(图4)读取包条目号708(图7)的内容。如果内容被设置为第一个包条目(包条目1),处理过程继续到前面已经描述过的步骤1016。否则,处理过程继续到步骤1022。
在步骤1022中,转储引擎402(图4)将转储行号寄存器704(图7)所选择的高速缓存行304a-b(图4)的内容传递到包矢量DRAM 300(图3)中的当前包矢量310(图3)中。当前包矢量的地址存储在DRAM端口寄存器702(图7)中的当前入队指针714(图7)。通过读取SRAM高速缓存302(图3)中高速缓存行304a或304b(图3)的内容并且将该内容写入包矢量DRAM 300(图3)中当前包矢量310(图3)的高速缓存行条目320(图3)来传递所选高速缓存行304a-b(图3)。在相同的包矢量DRAM访问中,将存储在DRAM端口寄存器702(图7)中下一个入队指针寄存器716(图7)的下一个包矢量的地址写入当前包矢量310的链接字段316(图3),并且存储在高速缓存行304a或304b中包指针的数量写入计数字段318(图3)。处理过程继续到步骤1024。
在步骤1024中,SRAM端口寄存器700和DRAM端口寄存器702(图7)的内容进行如下更新当前入队指针寄存器714(图7)的内容设置为下一个入队指针716的内容。从指针空闲列表(为示出)获得的下一个入队指针存储在下一个入队指针寄存器716(图7)中。高速缓存全满寄存器710设置为未满。无包矢量寄存器720(图7)设置为“0”,并且转储行号寄存器704(图7)变为将要传递的下一个高速缓存行304a-b(图7)的行号。
图11是解释在图4所示的离队引擎400中执行的包指针从端口队列124离队的步骤流程图。
在步骤1100中,离队引擎400确定包指针128是否应该离队。如果是,处理过程继续到步骤1102。否则,处理过程继续到步骤1100。
在步骤1102中,离队引擎400(图4)读取无包矢量寄存器720(图7)的内容。无包矢量寄存器720(图7)的内容表示是否有可用的包矢量。如果没有可用的包矢量,那么处理过程继续到步骤1104。如果有可用的包矢量,处理过程继续到步骤1106。
在步骤1104中,由于没有可用的包矢量,因此产生系统故障。处理过程结束。
在步骤1106中,离队引擎400从包矢量DRAM 300(图3)读取存储在当前离队指针寄存器722(图7)中包矢量DRAM 300地址上的包矢量310(图3)。根据下一个离队包指针寄存器724(图7)的内容选择当前离队包矢量310中的当前包指针条目306(图3)。所选的包指针128(图1)通过包指针输出数据322转发。处理过程继续到步骤1108。
在步骤1108中,下一个离队包指针寄存器724的内容递增到当前离队包矢量310(图3)中下一个包指针706(图7)所在的点。处理过程继续到步骤1110。
在步骤1110中,离队引擎400(图4)通过比较下一个离队包指针寄存器724(图7)的内容和当前离队包矢量310的计数字段318来确定当前包指针条目306是否在当前离队包矢量310中存储了最后一个包指针128。如果是,那么处理过程继续到步骤1112。否则,处理过程继续到步骤1100。
在步骤1112中,离队引擎400(图4)将下一个离队包指针724(图7)的内容设置为“1”,以选择包矢量中的第一个包指针条目306,从包矢量DRAM 300的包矢量列表中删除当前包矢量,将当前离队包矢量300返回到包矢量的空闲列表(未示出)中并且将当前离队指针寄存器722的内容设置为当前离队包矢量310(图3)中链接字段316的内容。处理过程继续到步骤1100。
虽然已经通过参考所提出的实施例显示和描述了本发明,可以理解,本领域技术人员在不脱离本发明所附权利要求的范围的情况下,可以对本发明的形式和细节做各种改动。
权利要求
1.一种队列,包括具有第一存储器存取时间的第一存储器;具有第二存储器存取时间的第二存储器;以及通过将指针写入第一存储器并且将指针传递到第二存储器来将队列中的指针加入到要发送的数据的控制逻辑。
2.根据权利要求1所述的队列,其特征在于第一存储器存取时间小于第二存储器存取时间。
3.根据权利要求1所述的队列,其特征在于控制逻辑在一个单一的传递周期中将多个指针传递到第二存储器。
4.根据权利要求1所述的队列,其特征在于控制逻辑在一个单一写操作中将指针加入到第一存储器,在写操作后在第二存储器中建立指针的链接列表。
5.根据权利要求1所述的队列,其特征在于控制逻辑通过从第二存储器中读取指针使指针离队。
6.根据权利要求1所述的队列,其特征在于控制逻辑在将高速缓存行传递到第二存储器之前,先填充第一存储器中的高速缓存行。
7.根据权利要求6所述的队列,其特征在于第一存储器在一个单一的写操作中传递高速缓存行。
8.根据权利要求1所述的队列,其特征在于控制逻辑在一个单一的写周期将高速缓存行传递到第二存储器之前,先部分填充第一存储器中的高速缓存行。
9.根据权利要求1所述的队列,其特征在于第一存储器中高速缓存行的条目按高速缓存行中的位置排序。
10.根据权利要求1所述的队列,其特征在于第一存储器包括两个高速缓存行。
11.根据权利要求1所述的队列,其特征在于存储在第二存储器中的包矢量包括高速缓存行条目和存储在高速缓存行条目中的指针数量。
12.根据权利要求1或11所述的队列,其特征在于存储在第二存储器中的包矢量包括指向队列中下一个包矢量的链接。
13.一种排队方法,包括步骤在具有第一存储器存取时间的第一存储器中写入指向将要发送的数据的指针;以及将指针传递到具有第二存储器存取时间的第二存储器。
14.根据权利要求13所述的排队方法,其特征在于第一存储器存取时间小于第二存储器存取时间。
15.根据权利要求13所述的排队方法,其特征在于传递步骤将多个指针在一个单一的传递周期内转发到第二存储器。
16.根据权利要求13所述的排队方法,其特征在于写入步骤在一个单一的写操作将指针写入第一存储器,并且在写操作后建立指针的链接列表。
17.根据权利要求13所述的排队方法,还包括步骤指针从第二存储器中离队。
18.根据权利要求13所述的排队方法,其特征在于传递步骤将全满高速缓存行转发到第二存储器中。
19.根据权利要求13所述的排队方法,其特征在于传递步骤将部分填充的高速缓存行转发到第二存储器中。
20.根据权利要求18或19所述的排队方法,其特征在于高速缓存行在一个单一的写周期中传递。
21.根据权利要求13所述的排队方法,其特征在于第一存储器中高速缓存行中的条目按高速缓存行中的位置排序。
22.根据权利要求13所述的排队方法,其特征在于第一存储器包括两个高速缓存行。
23.根据权利要求13所述的排队方法,其特征在于存储在第二存储器中的包矢量包括高速缓存行和存储在高速缓存行中的指针数量。
24.根据权利要求13或23所述的排队方法,其特征在于存储在第二存储器中的包矢量包括指向下一个包矢量的链接。
25.一种队列,包括具有第一存储器存取时间的第一存储器;具有第二存储器存取时间的第二存储器;以及通过将指针写入第一存储器并且将指针传递到第二存储器来控制队列将队列中的指针加入到要发送的数据中的装置。
26.根据权利要求25所述的队列,其特征在于第一存储器存取时间小于第二存储器存取时间。
27.根据权利要求25所述的队列,其特征在于用来控制队列的装置将多个指针传递到第二存储器。
28.根据权利要求27所述的队列,其特征在于多个指针在一个单一的传递周期内传递。
29.根据权利要求27所述的队列,其特征在于用于控制队列的装置在单独一个写操作中将指针加入到第一存储器并且在写操作后建立指针的链接列表。
30.根据权利要求27所述的队列,其特征在于用于控制队列的装置通过从第二存储器中读取指针使指针离队。
31.根据权利要求27所述的队列,其特征在于用于控制队列的装置在将高速缓存行传递到第二存储器之前先填充第一存储器中的高速缓存行。
32.根据权利要求31所述的队列,其特征在于在一个单一的写操作中将高速缓存行传递到第二存储器中。
33.根据权利要求25所述的队列,其特征在于用于控制队列的装置在将高速缓存行传递到第二存储器之前先部分填充第一存储器中的高速缓存行。
34.根据权利要求25所述的队列,其特征在于第一存储器中高速缓存行的条目按高速缓存行中的位置排序。
35.根据权利要求25所述的队列,其特征在于第一存储器包括两个高速缓存行。
36.根据权利要求25所述的队列,其特征在于存储在第二存储器中的包矢量包括高速缓存行条目和存储在高速缓存行条目中的指针数量的计数。
37.根据权利要求25或36所述的队列,其特征在于存储在第二存储器中的包矢量包括指向队列中下一个包矢量的链接。
38.一种指针列表,包括具有第一存储器存取时间的第一存储器;具有第二存储器存取时间的第二存储器;以及通过将指针写入第一存储器并且将指针传递到第二存储器来将指针列表中的指针添加到要发送的数据,和通过从第二存储器中读取指针来从指针列表中删除指针的控制逻辑。
全文摘要
端口队列包括具有第一存储器存取时间的第一存储器和具有第二存储器存取时间的第二存储器。第一存储器部分包括一个高速缓存行。高速缓存行包括队列条目。通过在第一存储器的高速缓存行中的队列条目写入包指针来将包指针加入到端口队列。高速缓存行传递到第二存储器中的包矢量。通过从存储在第二存储器中的包矢量读取队列条目使包指针从端口队列中离队。
文档编号H04L12/56GK1439217SQ01811898
公开日2003年8月27日 申请日期2001年4月26日 优先权日2000年4月27日
发明者理查德·M·怀亚特 申请人:睦塞德技术公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1