排队装置制造方法

文档序号:7978613阅读:241来源:国知局
排队装置制造方法
【专利摘要】一种具有排队引擎(2)的排队装置(1)包括:预定数目K个队列Q,其中每个队列Q具有与所述排队引擎(2)的N个对应数目的输入通路相关联的N个子队列SQ,其中每个子队列SQ用于存储由所述排队引擎(2)的每个相关联的输入通路应用的包描述符;以及用于存储所述排队引擎(2)的预定数目K个队列Q的子队列SQ的所有描述符的共享描述符存储器(10),其中在应用到所述排队引擎(2)的系统时钟信号(CLK)的每个系统时钟周期中,最多N个输入通路可以请求对队列Q的写入操作,以及最多一个对任意队列Q的读取操作。
【专利说明】排队装置
【技术领域】
[0001]本发明涉及一种具有排队引擎(queuing engine)的排队装置(queuingapparatus)以及涉及一种用于对包描述符(Packet Descriptor)进行排队的方法。
【背景技术】
[0002]许多应用,尤其网络中的高速路由器和交换机,都需要高速排队系统(queuingsystems)。当多个输入连接到同一个输出时,尤其在入口数据速率(ingress data rate)比出口数据率(egress data rate)速高的情况下有必要提供排队引擎。传统排队引擎提供入口排队(ingress queuing)或使用较高频率的排队系统。但是,两种方法均有不足。入口队列(ingress queue)占用更多的内存并且具有较高线头阻塞(head-of-line blocking,HOL blocking)以及必须提供复杂的流量管理等不足。使用利用高频时钟的高频排队系统增加了功耗,此外还导致时序收敛方面的扩展性问题。
[0003]传统排队引擎可以成为高速排队系统整个设计的瓶颈。尽管高速排队系统可以设计为支持指定的系统标准带宽,排队装置通常需要支持较高的以及甚至有时高得多的带宽以在有关缓冲中的延迟信息(delyed information)上开启差异化服务。在采用输出队列架构的高速排队系统中,需要特定的输出队列来吸收数据流量,其数据速率可以比其输出速率高得多,尤其当若干输入数据源发送数据流量到所述特定输出队列时。这就对任意排队装置提出了重要的要求,该排队装置能够以比队列的输出速率高得多的数据速率将输入流量吸收到输入队列(input queue)。与读取操作相比,该要求可以转换成许多对队列进行的写入操作。为了能够并行执行多个写入访问(write access),要求每个系统时钟周期内必须承受多个写入操作的传统排队系统实际复制输入队列的控制存储器(control memory)和描述符存储器(descriptor memory) ?但是,由于排队系统需要不断增长的队列深度,控制和描述符存储器的这种复制对系统设计造成了很大障碍,并且当将这些传统排队系统集成到芯片上时导致芯片空间和功耗的浪费。相应地,需要一种排队装置和一种对应的方法,其可以在一个系统时钟周期内承受多个写入操作和一个读取操作而无需复制队列的控制和描述符存储器。

【发明内容】

[0004]根据本发明的第一方面,提供了一种具有排队引擎的排队装置,包括:
[0005]预定数目K个队列Q,其中每个队列具有与所述排队引擎的N个对应数目的输入通路(input lane)相关联的N个子队列(sub-queue, SQ)。其中每个子队列SQ用于存储由所述排队引擎的每个相关联的输入通路应用的包描述符以及
[0006]用于存储该排队引擎的预定数目K个队列Q的子队列SQ的所有描述符的共享描述符存储器(shared d escriptor memory),
[0007]其中在应用到排队引擎的系统时钟信号CLK的每个系统时钟周期中,最多N个输入通路请求对队列Q的写入操作(write operation, WR),以及最多一个对任意队列Q的读取操作(read operation, RR)。
[0008]根据本发明的第一方面的一种具有排队引擎的排队装置的第一可能实施形式,每个子队列SQ用于最多存储M个应用到所述子队列SQ的相关联的输入通路的包描述符,其中每个子队列SQ使用整个共享描述符存储器,
[0009]其中M是共享描述符存储器能够存储的描述符的数目。
[0010]在根据本发明的第一方面的一种具有排队引擎的排队装置的第二可能实施方式中,为排队引擎的N个输入通路中的每个输入通路提供了对应的入队单元(enqueuingunit)ο
[0011]在根据本发明的第一方面的一种具有排队引擎的排队装置的第三可能实施方式中,每个入队单元用于在应用到排队引擎的系统时钟信号CLK的每个系统时钟周期内将应用到相应输入通路的包描述符入队到与相应输入通路对应的子队列SQ中。
[0012]在根据本发明的第一方面的一种具有排队引擎的排队装置的第四可能实施方式中,排队引擎进一步包括一种出队单元(dequeuing unit),用于在应用到排队引擎的系统时钟信号CLK的一个系统时钟周期内将描述符(descriptor)从任意队列Q出队(dequeue)。
[0013]在根据本发明的第一方面的一种具有排队引擎的排队装置的第一至四实施方式的又一第五可能实施方式中,排队装置进一步包括一种调度器(scheduler),用于选择由排队引擎的出队单元进行出队的队列Q。
[0014]在根据本发明的第一方面的一种具有排队引擎的排队装置的第五实施方式的第六可能实施方式中,被选择的队列Q的一个子队列SQ由存储控制器使用排序函数(sequencing function, SF)选择。
[0015]在根据本发明的第一方面的一种具有排队引擎的排队装置的第六实施方式的第七可能实施方式中,存储控制器使用的排序函数SF包括先进先出FIFO排序函数。
[0016]其中,被选择的队列Q的N个子队列SQ中的被选择的子队列,包括被最小时间戳(minimum time stamp, TS)附着的在其队列的头中(in its head of queue)的描述符。
[0017]在根据本发明的第一方面的一种具有排队引擎的排队装置的第六实施方式的第八可能实施方式中,存储控制器使用的排序函数SF包括循环排序函数(Round Robinsequencing function),其中每次调度器选择由排队引擎的出队单元进行出队的队列Q时,在队列Q的N个子队列中选择不同的子队列SQ。
[0018]在根据本发明的第一方面的一种具有排队引擎的排队装置的第六实施方式的又一第九可能实施方式中,存储控制器使用的排序函数SF包括差额循环排序函数(deficitRound Robin sequencing function)。
[0019]在根据本发明的第一方面的一种具有排队引擎的排队装置的第一至九实施方式的第十可能实施方式中,共享描述符存储器包括多写单读存储系统(mult1-write-singleread memory system)。
[0020]在根据本发明的第一方面的一种具有排队引擎的排队装置的第十实施方式的第十一可能实施方式中,多写单读存储系统包括一种控制逻辑(control logic),用于在系统时钟信号CLK的一个时钟周期内接收η个写入请求(write request)以及接收一个读取请求(read request)。[0021]在根据本发明的第一方面的一种具有排队引擎的排队装置的第十一实施方式的第十二可能实施方式中,多写单读存储系统进一步包括用于存储数据的η+1个存储器块(memory bank),其中η是整数。
[0022]在根据本发明的第一方面的一种具有排队引擎的排队装置的第十一或十二实施方式的又一第十三可能实施方式中,多写单读存储系统的控制逻辑用于控制每个存储器块的存储器块占用率(memory bank occupancy levels, MBOL),从而使得存储器块的存储器块占用率MBOL之间的差值(difference)最小化。
[0023]在根据本发明的第一方面的一种具有排队引擎的排队装置的第二至四实施方式的第十四可能实施方式中,排队引擎进一步包括一种存储控制器(memory controller),用于从所述入队单元接收来自所述入队单元的包括描述符的队列数据(queued data)和向出队单元提供包括描述符的出队数据(dequeuing data)。
[0024]在根据本发明的第一方面的一种具有排队引擎的排队装置的第十至十四实施方式的第十五可能实施方式中,存储控制器被连接到所述多写单读存储系统的所述控制逻辑,所述多写单读存储系统形成所述排队引擎的所述共享描述符存储器。
[0025]在根据本发明的第一方面的一种具有排队引擎的排队装置的第十二实施方式的第十六可能实施方式中,所述多写单读存储系统的存储器块由单端口(single port)随机存取存储器(random access memory, RAM)形成。
[0026]在根据本发明的第一方面的一种具有排队引擎的排队装置的第十四至十六实施方式的第十七可能实施方式中,排队引擎包括下一指针存储器(next pointer memory),其通过被连接到所述存储控制器的多写单读存储系统形成。
[0027]在根据本发明的第一方面的一种具有排队引擎的排队装置的第十四实施方式的第十八可能实施方式中,排队引擎进一步包括自由缓冲池存储器(free buffer poolmemory),其通过被连接到所述存储控制器的多写单读存储系统形成。
[0028]在根据本发明的第一方面的一种具有排队引擎的排队装置的第十四实施方式的第十八可能实施方式中,排队引擎包括时间戳存储器(time stamp memory),其通过被连接到所述存储控制器的多写单读存储系统形成。
[0029]在根据本发明的第一方面的一种具有排队引擎的排队装置的第十九实施方式的第二十可能实施方式中,被提供的时间戳存储器用于存储被附着到通过排队引擎的输入通路接收的包描述符报文(Packet Descriptors packet)的时间戳TS。
[0030]在根据本发明的第一方面的一种具有排队引擎的排队装置的第二至四实施方式的第二十一可能实施方式中,排队引擎的入队单元和出队单元具有访问队列信息存储器(queue information memory)的能力,其存储了队列 Q 的信息数据(information data)。
[0031]在根据本发明的第一方面的一种具有排队引擎的排队装置的第十九或二十实施方式的第二十二可能实施方式中,对于每个由所述排队引擎通过输入通路接收的报文,时间戳TS附着到其的包描述符,其中时间戳TS指示相应报文的到达时间。
[0032]在根据本发明的第一方面的一种具有排队引擎的排队装置的第二十二实施方式的第二十三可能实施方式中,包描述符包括存储器地址(memory address)以为存储在所述排队装置的共享数据存储器(shared data memory)中的所述被接收的报文(receivedpacket)的净荷数据(payload data)寻址。[0033]根据本发明的第二方面,提供了一种流量管理设备,包括根据本发明的第一方面的包含排队引擎的排队装置。
[0034]根据本发明的第三方面,提供了一种集成电路,包括根据本发明的第一方面的包含排队引擎的排队装置。
[0035]根据本发明的第四方面,提供了一种用于对在系统时钟信号CLK的每个系统时钟周期中使用排队引擎从N个输入通路并发(concurrently)接收的包描述符进行排队的方法,包括预定数目K个队列Q中的每个队列具有与排队引擎的对应输入通路相关联的N个子队列SQ,其中预定数目K个队列Q的子队列SQ的所有描述符存储在排队引擎的共享描述符存储器(shared descriptor memory)中,所述共享描述符存储器用于在系统时钟信号CLK的每个系统时钟周期中最多存储N个描述符以及取回(retrieve) —个描述符。
[0036]在根据本发明的第四方面的一种用于对包描述符进行排队的方法的可能实施方式中,在系统时钟信号CLK的相同系统时钟周期中,应用到N个输入通路的包描述符被并行地(in parallel)写入所述共享描述符存储器中以及单个描述符被从所述共享描述符存储器中读取。
【专利附图】

【附图说明】
[0037]在下文中,将参考附图对本发明的不同方面的示例性实施形式进行更加详细的描述。
[0038]图1所示为根据本发明的第一方面的一种具有排队引擎的排队装置的可能实施方式的框图;
[0039]图2所示为图1所示的排队装置中提供的排队引擎的可能实施方式的框图;
[0040]图3所示为示出了根据本发明的第一方面的排队装置采用的单个队列的逻辑视图的图。
[0041]图4所示为示出了根据本发明的第一方面的排队装置采用的蝴蝶排队机制(butterfly queuing mechanism)的队列的聚合(aggregation)的图。
【具体实施方式】
[0042]如图1所示,排队装置I包括在所示的实施方式中作为其核心元素的排队引擎2,其通过数据总线连接到调度器3。排队装置I进一步包括连接到数据存储单元5和数据取回单元(data retrieval unit)6的共享数据存储器4。如图1所示,排队引擎2用于接收来自数据存储单元5的N个描述符以及将一个描述符输出到数据取回单元6。包描述符是一组描述报文的信息。包描述符可以存储数据报文上的所有类型的信息。例如,包描述符包括指向存储报文的数据存储器的指针。使用包描述符是为了减少插入到排队引擎中的信息量。不将整个报文发送到排队系统,仅发送包描述符。报文本身存储在数据存储器中。可能存在系统,其中这种类型的描述符是足够的。但是,可能存在描述符可以存储报文ID等更多信息的情况。在各报文的报文长度有所不同的系统中,为了使调度器3能够准确地计算实际调度的字节数,报文长度可添加到包描述符中。在可能实施方式中,包描述符可以包括报文本身的头。在另一可能实施方式中,包描述符可以包括报文内的头的一个或若干个数据字段。包描述符存在许多变体,上述提及的是这些变体的示例。[0043]数据存储单元5通过排队引擎2的N个输入通路连接以向排队引擎2提供如图1所示的N个描述符,例如,包描述符。
[0044]数据报文存储在共享数据存储器4中并且存储数据的引用(通常是一个指针)置于发送到排队引擎2的包描述符内。
[0045]排队引擎2包括预定数目K个队列Q,其中每个队列Q具有与连接到排队引擎2的N个对应数目的输入通路相关联的N个子队列SQ。每个子队列SQ用于存储由排队引擎2的每个相关联的输入通路应用的包描述符。
[0046]调度器3用于在K个队列中选择一个队列用于出队。所属领域的技术人员认识到存在许多调度器3的先进实施方式。在每个周期中,排队引擎2在调度器3选择的队列头处弹出包描述符。随后该包描述符被发送到数据取回单元6,其查找来自共享数据存储器4的弹出的包描述符的数据报文并将数据报文发送到输出通路。
[0047]队列是一种特定类型的集合,其中该集合中的实体按序排列并且对集合的主要操作是将实体添加到队列和将实体从队列移除。例如,对于先入先出(FIFO)队列而言,添加到队列的第一个实体将被第一个移除。这等同于以下要求:一旦添加了一个实体,在调用新实体之前,必须移除之前添加的所有实体。队列是线性数据结构的示例。以FIFO序列为例,出队操作是指一个或多个实体离开队列的前部末端位置(front terminal position),而入队操作是指一个或多个实体进入队列的后部末端位置(rear terminal position)。所述领域的技术人员清楚应用到任意类型的队列的出队和入队操作不局限于FIFO队列。
[0048]输入通路是数据总线,数据以报文形式流入排队引擎2。换句话说,每个入队路径称为输入通路。 [0049]图1所示的排队引擎2的实施方式在图2的框图中详细示出。如图2所示,对于排队引擎2的N个输入通路的每个输入通路而言,提供了对应的入队单元7 - 1、7 - 2、……、7 - N。每个入队单元7 -1用于在应用到排队引擎2的系统时钟信号CLK的每个系统时钟周期内将应用到相应输入通路的包描述符入队到相应输入通路的对应子队列SQ中。如图2所示,排队引擎2进一步包括出队单元8,用于在应用到排队引擎2的系统时钟信号CLK的一个系统时钟周期内将描述符从任意队列Q出队。排队引擎2包括如图2所示的实施方式中的存储控制器9,用于接收来自出队单元7的包括描述符的队列数据并向出队单元8提供包括描述符的出队数据。
[0050]排队引擎2包括共享描述符存储器10,用于存储排队引擎2的预定数目K个队列Q的子队列SQ的所有描述符,其中在应用到排队引擎2的系统时钟信号CLK的每个系统时钟周期中,最多N个输入通路可以请求对队列Q的写入操作,以及最多一个对任意队列Q的读取操作。
[0051]在共享描述符存储器10的可能实施方式中,共享描述符存储器10可以包括多写单读存储系统,其包括控制逻辑,用于在系统时钟信号CLK的一个时钟周期内接收η个写入请求WR以及接收一个读取请求RR。在这个可能实施方式中,多写单读存储系统可以包括用于存储数据的η+1个存储器块,其中η是整数。多读单写存储系统的控制逻辑可以用于控制每个存储器块的控制存储器块占用率MBOL使得存储器块的存储器块占用率MBOL之间的差值最小化。在可能实施方式中,如图2所示的存储控制器9可以连接到多写单读存储系统的控制逻辑形成排队引擎2的共享描述符存储器10。多写单读存储系统的每个存储器块可以由单端口随机存取存储器RAM形成。
[0052]如图2所示,排队引擎2的入队单元7 -1和出队单元8可以访问队列信息存储器11,其存储了队列Q的信息。队列信息存储器11可以存储每个子队列SQ的详情。例如,详情可以是子队列SQ的大小、读指针和写指针的组合。队列信息存储器11包括至少队列头和队列尾指针。在又一可能实施方式中,队列信息存储器11可以进一步包括队列大小信息和状态信息。在又一可能实施方式中,队列信息存储器11可以存储每个队列SQ的进一步信息。排队引擎2的每个入队单元7 -1接收描述符,读取队列Q,并且需要将数据插入队列信息存储器11并且从队列信息存储器11读取队列控制信息,例如队列头、队列尾和队列大小。入队单元7 -1随后发送命令到存储控制器9请求存储描述符并且更新最近存储的描述符的相同地址上的下一指针存储器,以接收用于描述符和下一指针的空置地址。入队单元7 -1随后使用最新数据更新队列信息存储器11。同时,在队列Q改变其状态的情况下,例如从空变成非空状态时,入队单元7 -1相应地更新调度器3。
[0053]在可能实施方式中,出队单元8从调度器3接收队列数目并且读取队列信息存储器11。根据接收的队列信息,例如队列头,出队单元8可以请求存储控制器9从共享描述符存储器10取回队列头处的包描述符并且将描述符发送到排队引擎2的输出。进一步地,出队单元8可以更新调度器3的出队过程。在又一可能实施例中,更多存储器10连接到存储控制器9。在可能实施方式中,排队引擎2包括下一指针存储器,其也可以通过多写单读存储系统连接到存储控制器9形成。下一指针存储器用于保存一个存储器中的多链路列表。
[0054]在又一可能实施方式中,排队引擎2进一步包括自由缓冲池存储器,其可以通过多写单读存储系统连接到存储控制器9形成。自由缓冲池存储器可以用于追踪空置的描述符缓冲,也可以用于传入包描述符。入队时,缓冲标记为占用;出队时,缓冲标记为空置。
[0055]在又一可能实施方式中,排队引擎进一步包括时间戳存储器,其可以通过多写单读系统连接到存储控制器9形成。在可能实施方式中,提供时间戳存储器用于存储附着到包描述符报文的时间戳TS,所述包描述符报文由排队引擎2通过输入通路接收。在可能实施方式中,对于由排队引擎通过输入通路接收的每个报文而言,时间戳TS附着到其包描述符,其中时间戳TS指示相应报文的到达时间。
[0056]在可能实施方式中,包描述符可以包括存储器地址以为存储在排队装置I的共享数据存储器4中的接收报文寻址。首选选项是包描述符存储指向共享数据存储器中的数据报文的指针;否则,当包描述符从队列取出时将无法提取数据报文信息。
[0057]图1所示的排队装置I提供的排队机制完成了接收控制字(control word)或描述每个数据段(data segment),例如报文的包描述符并且将其存储在一组(a set of)队列Q中的功能。在决策引擎(decision engine),例如调度器3的控制下,包描述符从排队装置的一个队列Q的头中出队。数据段本身可以在入队过程(enqueuing process)之前存储在共享数据存储器4中。
[0058]图1所示的调度器3用于选择由排队引擎2的出队单元8进行出队的队列Q。调度器3用于选择队列Q。调度器3甚至不需要知道队列是由一组子队列SQ表示的。排队引擎2中的存储控制器9选择由调度器3决定的队列的正确子队列SQ。根据下述排序函数之一执行排队引擎2选择子队列SQ的方式:先入先出FIFO排序函数、循环排序函数和差额循环排序函数。[0059]在可能实施方式中,排序函数SF包括先入先出FIFO排序函数,其中选择所选队列Q的N个子队列SQ中的一个子队列SQ,包括最小时间戳TS附着的队列的头中的描述符。该机制允许基于到达时间选择报文。选择第一个到达任意子队列SQ的报文出队。在该模式下,如图4所示,要求时间戳TS附着到任意子队列SQ的每个到达包描述符。选择包含具有最小时间戳TS的队列的头中的包描述符的子队列SQ,即最早入队队列出队。这要求找到N个子队列SQ之间的最小时间戳TS。该实施方式为每个队列Q模拟了逻辑FIFO。
[0060]在又一替代性实施方式中,排序函数SF包括循环排序函数,其中每次调度器3选择由排队引擎2的出队单元8进行出队的队列Q时,在队列Q的N个子队列中选择不同的子队列SQ。如果需要对不同源之间的到达数据流量进行排序,可以使用这种实施方式。在这种实施方式中,每次选择出队的队列Q时,选择不同的子队列SQ。
[0061]在又一可能实施方式中,排序函数SF包括差额循环排序函数。如果子队列SQ包含不同大小的报文,差额循环机制可能不公平。差额循环机制允许以公平的方式进行循环使得每个子队列SQ计算字节或数据量而不是报文。
[0062]其他从所选队列Q中选择子队列SQ的方式可以在排队装置I的其他实施方式中使用。
[0063]图2所示的根据本发明的排队引擎2采用的排队机制通过允许相同时钟周期上的出队过程来允许在相同时钟周期内同时插入若干包描述符到相同或不同的队列Q。通路数目,即在相同时钟周期内的最大入队量由参数N表示。系统中的队列Q的数目由参数K表示。为了支持排队机制,提供了一种蝴蝶排队引擎2,其具有针对数据和复制控制信息的共享存储池。由排队引擎2提供的排队机制中的每个队列Q由一组N个子队列SQ表示。每个子队列SQ表示源,例如排队装置I的输入端口。包描述符存储在相关子队列SQ中,使得N个到达报文可以同时存储到N个单独子队列SQ中。当调度器3选择用于出队的队列Q时,队列Q的一个子队列SQ可以由排队引擎2中的存储控制器9选择。在队列Q的子队列SQ之间的选择可以通过使用不同方法或包括先入先出FIFO或循环排序函数的排序函数SF来进行。排队引擎2也可以使用其他选择函数SF用于选择队列Q内的子队列SQ。
[0064]图3示出了单个队列Qi的逻辑视图。如图3所示,对于每个通路而言,提供了队列Q内的对应子队列SQ用于存储包描述符D,其中每个子队列SQ连接到如3所示的由子队列选择逻辑(sub-queue select logic, SQSL)控制的复用逻辑(multiplexing logic,MUX), SQSL评估例如与数据描述符(data Descriptor) D相关联的时间戳TS。图3所示的逻辑图中的逻辑元素MUX和SQSL用于逻辑地示出图2中的存储控制器9完成的功能。
[0065]图4是由图2所示的排队引擎2实施的方案的逻辑视图(概念视图)。换句话说,图2是图4所示的逻辑视图的一种实施方式。
[0066]图4示出了 K个队列Q的聚合,每个队列Q具有N个子队列SQ。输入通路i对应于每个队列Q的子队列SQ i。对于每个输入通路i,提供了每个队列Q内的对应子队列SQi,用于存储包描述符D,其中每个子队列SQ连接到由图3所示的子队列选择逻辑SQSL控制的复用逻辑MUX。图4所示的队列和图3所示的队列之间的唯一差别在于时间戳TS附着到每个队列Q内的每个子队列SQ。附着到每个子队列SQ的时间戳TS组成了 SQSL的输入。通过这样,SQSL可以评估与包描述符D相关联的时间戳TS。每个队列Q的输出耦合到另一个MUX。如图4所示,每个子队列SQ是根据某个功能SQSL(function SQSL)来选择,而每个队列Q是根据从调度器3传递到排队引擎2的决策(decision)来选择。可见,排队引擎2使用NxK个通过共享描述符存储器实施的队列。不同队列Q之间的这种高层划分使得共享不同队列Q之间可共享描述符存储器。例如,共享描述符存储器的形式为使用多个多写单读存储器。多写单读存储器可以用来存储形成存储数据(stored data)的主要部分的包描述符数据库(Packet Descriptor database)。每个通路均复制其他数据,例如队列读和写指针等队列控制信息。但是,队列控制信息仅形成了存储数据的一小部分并且包括不依赖于数据流量(data traffic)且可扩展的(scalable)恒定数据量(constant datavolume)。
[0067]一旦调度器3为出队阶段(dequeue phase)选择队列Q,可能报文已准备好从所选队列Q的多于一个子队列SQ进行传送。但是,排队引擎2中的存储控制器9选择了一个子队列SQ,并且每个子队列SQ之间的选择可以由预定排序函数SF进行。在可能实施方式中,存储控制器9使用的排序函数SF可以响应于控制信号而改变,例如以改变排队装置I的操作模式。
[0068]图1所示的排队装置I可以在根据本发明的第二方面的流量管理设备中实施。流量管理设备可以是例如网络的交换设备或路由器设备。
[0069]进一步地,图1所示的排队装置I可以集成到形成本发明的第三方面的集成电路中。集成电路可以是包括图1所示的排队装置I的芯片。
[0070]本发明进一步提供了根据第四方面的一种用于对在系统时钟信号CLK的每个系统时钟周期中使用排队引擎2从N个输入通路并发接收的包描述符进行排队的方法,其中排队引擎2包括预定数目K个队列Q,每个队列Q具有与排队引擎2的对应输入通路相关联的N个子队列SQ。预定数目K个队列Q的子队列SQ的所有描述符存储在排队引擎2的共享描述符存储器10中,所述共享描述符存储器10用于在系统时钟信号CLK的每个系统时钟周期中最多存储N个描述符以及取回一个描述符。在根据本发明的第四方面的一种方法的可能实施方式中,在系统时钟信号CLK的相同系统时钟周期中,应用到N个输入通路的包描述符并行写入共享描述符存储器10中以及从共享描述符存储器10中读取单个描述符。
[0071]在可能实施方式中,用于对描述符进行排队的方法可以通过执行具有指令的控制程序以执行根据本发明的第四方面的方法来执行。该控制程序可以存储在程序存储器的可能实施方式中。在可能实施方式中,该控制程序可以从存储这种控制程序的数据载波加载。在可能实施方式中,可以在VLSI应用中使用一种可以在每个系统时钟周期内承受多写单读的排队系统中共享存储器的方法和装置。
[0072]根据本发明的排队装置I使用多端口共享存储器5来创建排队系统。它还减少了将排队装置I集成到芯片上时所需的硅区域。此外,通过使用较低频率实现了较低功耗。
[0073]在可能的特定实施方式中,N (N = 4)个输入通路指队列数目K = 1024。队列大小仅由总描述符存储器限制。单个队列Q可以使用整个描述符存储器。排队装置I的不同输入可以在相同时钟周期内发送数据到相同队列Q。在根据本发明的排队装置I中,单个队列Q由N个子队列SQ表示。输入通路连接到特定子队列SQ。调度器3选择队列Q,使用预定排序函数SF选择子队列SQ。由于调度器3确实只看见K个队列Q,因此排队装置I允许提供不太复杂的调度器3。
[0074]在可能实施方式中,每个通路将其传入报文插入到自己的队列组中。进一步地,时间戳TS可以用来定义相同队列Q的子队列SQ之间的顺序。
[0075]在可能实施方式中,每个队列Q包括4个子队列SQ。当选择队列Q时,读取所有四个头时间戳TS并由控制图4所示的复用逻辑的评估单元来比较。在相同时钟周期内相同队列Q从多于一个通路插入的情况下,在可能实施方式中通路号可以作为区分符。在根据本发明的排队装置I中,仅复制队列头/尾存储器,而不复制主要的包描述符存储器,从而节省了存储空间。
【权利要求】
1.一种具有排队引擎(2)的排队装置(1),其特征在于,包括: 预定数目K个队列Q,其中每个队列Q具有与所述排队引擎(2)的N个对应数目的输入通路相关联的N个子队列SQ, 其中每个子队列SQ用于存储由所述排队引擎(2)的每个相关联的输入通路应用的包描述符;以及 用于存储所述排队引擎(2)的预定数目K个队列Q的子队列SQ的所有描述符的共享描述符存储器(10), 其中在应用到排队引擎⑵的系统时钟信号(CLK)的每个系统时钟周期中,最多N个输入通路请求对队列Q的写入操作,以及最多一个对任意队列Q的读取操作。
2.根据权利要求1所述的排队装置(I),其特征在于, 每个子队列SQ用于存储最多M个应用到所述子队列SQ的相关联的输入通路的包描述符,其中每个子队列SQ使用整个共享描述符存储器(10),M是共享描述符存储器(10)存储的描述符的数目。
3.根据权利要求1或2所述的排队装置,其特征在于, 对于所述排队引擎(2)的所述N个输入通路的每个输入通路,提供了对应的入队单元(7), 所述入队单元(7)用于在系统时钟信号(CLK)的每个系统时钟周期内将应用到相应输入通路的包描述符入队到与相应输入通路对应的子队列SQ中。
4.根据权利要求3所述的排队装置,其特征在于, 所述排队引擎(2)进一步包括出队单元(8),用于在应用到所述排队引擎(2)的系统时钟信号(CLK)的系统时钟周期内将描述符从任意队列Q出队。
5.根据前述权利要求1至4中任一权利要求所述的排队装置,其特征在于,进一步包括调度器(3),用于选择由所述排队引擎(2)的出队单元(8)进行出队的队列Q ; 其中所述排队引擎(2)进一步包括存储控制器(9),用于使用排序函数SF选择被选择的队列Q的一个子队列SQ。
6.根据权利要求5所述的排队装置,其特征在于, 由所述存储控制器(9)使用的所述排序函数SF包括: 先入先出FIFO排序函数, 其中,被选择的队列Q的N个子队列SQ中的被选择的子队列SQ,包括被最小时间戳TS附着的在其队列的头中的描述符;或者 由所述存储控制器(9)使用的所述排序函数SF包括: 循环排序函数, 其中,每次所述调度器(3)选择由所述排队引擎(2)的出队单元(8)进行出队的队列时,在队列Q的N个子队列中选择不同的子队列SQ,或者 由所述存储控制器(9)使用的所述排序函数SF包括差额循环排序函数。
7.根据前述权利要求1至6中任一权利要求所述的排队装置,其特征在于,所述共享描述符存储器(10)包括多写单读存储系统,包括: 控制逻辑,用于在系统时钟信号(CLK)的系统时钟周期内接收η个写入请求WR以及接收一个读取请求RRdP η+1个用于存储数据的存储器块,η是整数;所述多读单写存储系统的所述控制逻辑用于控制每个存储器块的存储器块占用率MBOL使得存储器块的存储器块占用率MBOL之间的差值最小化。
8.根据权利要求3或4所述的排队装置,其特征在于, 所述排队引擎(2)进一步包括存储控制器(9),用于接收来自所述出队单元(7)的包括描述符的队列数据和向所述出队单元(8)提供包括描述符的出队数据。
9.根据权利要求7或8所述的排队装置,其特征在于, 所述存储控制器(9)被连接到所述多写单读存储系统的所述控制逻辑,所述多写单读存储系统形成所述排队引擎(2)的所述共享描述符存储器(10)。
10.根据前述权利要求8或9中的一项权利要求所述的排队装置,其特征在于, 所述排队引擎(2)包括下一指针存储器、自由缓冲池存储器和时间戳存储器,其通过被连接到所述存储控制器(9)的多写单读存储系统形成; 被提供的所述时间戳存储器用于存储被附着到包描述符的时间戳TS,所述包描述符由所述排队引擎(2)通过输入通路接收。
11.根据权利要求3或4所述的排队装置,其特征在于, 所述排队引擎(2)的所述入队单元(7)和所述出队单元(8)具有访问队列信息存储器(11)的能力,其存储了队列Q的信息数据。
12.根据权利要求10所述的排队装置,其特征在于, 对于由所述排队引擎(2)通过输入通路接收的每个报文,时间戳TS被附着到其包描述符,其中所述时间戳TS指示相应报文的到达时间。
13.根据权利要求12所述的排队装置,其特征在于, 所述包描述符包括存储器地址以为存储在所述排队装置(I)的共享数据存储器(4)中的所述被接收的报文的净荷寻址。
14.一种流量管理设备,其特征在于,包括根据前述权利要求1至13中的一项权利要求所述的包括排队装置(I)。
15.一种用于对在系统时钟信号(CLK)的每个系统时钟周期中使用排队引擎(2)从N个输入通路并发接收的包描述符进行排队的方法,其特征在于,所述排队引擎(2)包括预定数目K个队列Q,每个队列Q具有与所述排队引擎(2)的对应输入通路相关联的N个子队列SQ, 其中,预定数目K个队列Q的子队列SQ的所有描述符存储在所述排队引擎(2)的共享描述符存储器(10)中,所述共享描述符存储器(10)用于在系统时钟信号(CLK)的每个系统时钟周期中最多存储N个描述符以及取回一个描述符。
【文档编号】H04L12/861GK103988167SQ201180075404
【公开日】2014年8月13日 申请日期:2011年12月7日 优先权日:2011年12月7日
【发明者】亚戎·夏哈, 拉米·茨卡里埃 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1