一种多队列流量控制的方法

文档序号:7964335阅读:213来源:国知局
专利名称:一种多队列流量控制的方法
技术领域
本发明涉及流量控制技术,尤其涉及一种在全双工以太网中的多队列流量控制的方法。
背景技术
现有技术对在全双工以太网中的流量控制是通过PAUSE(暂停)帧实现的。PAUSE帧是MAC(Media Access Control媒体接入控制)控制帧的一种。PAUSE帧功能可以使设备在数据流量暂时突发导致缓存可能溢出时,不会发生丢帧现象。接收设备通过向全双工链路的另一端发送PAUSE帧,来防止自己的内部缓存区溢出。而另一端的发送设备在接收到PAUSE帧后,就停止发送数据帧。这将使接收设备有更多的处理时间来减少自己的缓冲拥塞。
PAUSE操作实现了一种简单的“停-启”形式的流量控制。如果某个设备想阻止数据帧到来,它可以发送一个带有参数的PAUSE帧,该参数指明了全双工中的另一方在继续开始发送数据前需要等待的时间。当另一个设备接收到PAUSE帧后,将在指定的时间内停止发送数据。当这个时间超时后,该设备将继续发送帧。PAUSE帧能禁止发送数据帧,但它不影响MAC控制帧的发送,例如,不影响从另一个方向到来的PAUSE帧。已发送了PAUSE帧的设备,可以再发送一个时间参数为0的PAUSE帧取消剩余的暂停时间。数据发送侧设备新收到的PAUSE帧将覆盖掉当前执行的PAUSE操作。类似地,也可以在前一个PAUSE帧暂停时间还未结束时,发出另一个包含非零时间参数的PAUSE帧来延长暂停时间。
请参考图1,为PAUSE帧格式示意图。目的地址使用一个为PAUSE帧保留的唯一的组播地址01-80-C2-00-00-01。源地址是发送PAUSE帧的设备的单播地址。类型域是所有MAC控制帧使用的保留值0×8808。PAUSE帧的控制操作码是0×0001。PAUSE帧只带一个称为暂停时间的参数。这个参数是2个字节的无符号整型值。它是PAUSE帧发送方请求接收方停止发送数据帧的时间长度。时间度量以512比特时间为增量。也就是说,接收者应暂停的时间等于暂停时间乘以用当前数据率传输512比特的时间。
请参考图2,为使用PAUSE帧的流量控制方法示意图,通过向对端设备发送PAUSE帧,可以进行全双工以太网的流控。设备A 100向设备B 200发送报文,当设备B 200收到的报文超过了它所能处理的流量,缓存达到一定的反压门限时,会通过向设备A 100发送数据的通道发送PAUSE帧,以剩下的缓存比特量除以512作为PAUSE帧的暂停时间参数,使设备A 100停止向自己发送报文,以免缓存溢出。
以太网接口在很多情况下需要承载多种业务的报文,例如语音和数据业务同时共存并且要求保证高优先级业务的服务质量时,就需要支持多个队列的流控。
从PAUSE帧的帧格式可以看出,PAUSE帧只能反映针对整个接口的流控信息,不能分别反映多个队列的流控信息。当以太网接口用于多队列报文传输时,仅仅通过PAUSE帧进行流控会产生队头阻塞问题在接收设备中n(n大于1)个队列中仅有一个队列的缓存区即将耗尽时,接收设备会发出PAUSE帧,这样,不仅停止引起PAUSE帧发送的某个队列的业务,而且还会停止那些缓存充足的队列的发送业务。基于PAUSE帧的现有流控机制不能用于多队列流量控制。

发明内容
本发明要解决的技术问题是提供一种多队列流量控制的方法,以实现对全双工以太网中多个队列的流量控制。
为解决上述技术问题,本发明通过以下技术方案实现一种多队列流量控制的方法,应用在全双工以太网中,包括1)接收设备发送包含各队列缓存状态信息的流控帧给发送设备;2)所述发送设备接收到所述流控帧之后,更新存储在该发送设备上的各队列缓存状态信息;3)所述发送设备在发送各队列的数据帧之前,查询所述各队列缓存状态信息,判断各队列缓存状态是否符合发送要求,如果是,继续发送符合发送要求的队列数据帧;否则,停止发送不符合发送要求的队列数据帧。
优选的,所述缓存状态为剩余缓存数。
优选的,所述步骤1)的发送为周期发送,在所述周期发送之前,确定周期的时间间隔。
优选的,所述缓存状态为缓存满/不满状态。
优选的,所述步骤1)的发送过程为当接收设备的队列缓存状态发生改变时,触发所述接收设备发送包含各队列缓存满/不满状态信息的流控帧给发送设备;所述缓存状态发生改变为从缓存不满状态变为缓存满状态,或从缓存满状态变为缓存不满状态。
优选的,在步骤1)之前,发送设备和接收设备进行协商,确定流控帧具体格式。
优选的,所述流控帧具体格式包括目的媒体接入控制MAC地址、源媒体接入控制MAC地址、自定义类型域、各队列缓存状态域、填充域和帧校验序列FCS。
优选的,在步骤1)之前,还包括,接收设备分配各队列缓存空间。
以上技术方案可以看出,由于本发明接收设备发送包含多队列缓存状态信息的流控帧,告知发送设备当前自己各队列的缓存状态,发送设备存储所述缓存状态,在各队列发送数据帧之前,查询各队列的缓存状态,发送符合发送要求的队列数据帧,停止发送不符合发送要求的队列数据帧。通过这种方式,可以控制各队列的数据帧发送,实现多队列的流量控制。
进一步,本发明可以用剩余缓存数或缓存满/不满状态表示缓存状态,使用这两种方式表示缓存状态,都可以实现多队列的流量控制的目的,在具体实施本发明的时候,根据实际设计情况进行选择。
进一步,本发明提供周期发送流控帧的流控方案,由于接收设备周期发送流控帧到发送设备,告知对方自己当前各队列的剩余缓存数,发送设备根据剩余缓存数的多少决定是否发送队列的数据帧,使得发送设备和接收设备可以按时间周期协同工作,有利于提高多队列流控的处理性能。
进一步,本发明还提供通过缓存状态变化触发发送流控帧的流控方案,当接收设备队列的缓存状态发生改变,触发接收设备发送包含各队列缓存满/不满状态信息的流控帧给发送设备,发送设备根据队列缓存满/不满状态决定是否发送队列的数据帧;本方案适合队列数较少,队列缓冲状态变化不频繁的应用。


图1为现有的PAUSE帧格式示意图;图2为现有的使用PAUSE帧的流量控制方法示意图;图3为本发明多队列流量控制的方法流程图;图4为本发明为本发明定义的流控帧格式示意图;图5为本发明通过周期发送流控帧的多队列流控方法流程图;图6为本发明通过状态变化触发发送流控帧的多队列流控方法流程图;图7为使用本发明触发发送流控帧的流量控制方法示意图。
具体实施例方式
本发明提供了一种多队列流量控制的方法,应用在全双工以太网中,其基本思路是自定义能反映多个队列缓存状态的流控帧,接收设备通过发送流控帧,告知发送设备当前自己的各队列缓存状态,发送设备通过解析流控帧,停止对即将溢出的队列的报文发送。
请参考图3,为本发明多队列流量控制的方法流程图,包括D1.接收设备发送包含各队列缓存状态信息的流控帧给发送设备;D2.所述发送设备接收到所述流控帧后,更新存储在该发送设备上的各队列缓存状态信息;D3.所述发送设备在发送各队列的数据帧时,查询所述各队列缓存状态信息,判断各队列缓存状态是否符合发送要求,如果是,继续发送符合发送要求的队列数据帧;否则,停止发送不符合发送要求的队列数据帧。
为进一步理解本发明,以下通过具体实施方式
对本技术方案进行详细的描述。
请参考图4,为本发明定义的流控帧格式示意图。
本发明定义的流控帧与PAUSE帧不同,可以反映任意n(n大于1)个队列的流控信息,每个队列的流控信息占用帧净荷中的2个字节,以下为自定义的流控帧格式说明
目的MAC地址,数据发送侧设备的MAC地址。
源MAC地址,发送流控帧的数据接收侧设备的单播地址。
自定义类型域,目前还没有应用的帧类型,例如0×ffff等。
队列缓存状态,每个队列有2个字节的流控信息,用缓存状态表示,可以是剩余缓存字节数,也可以是缓存满/空状态。
填充域,由于队列数不定,所以帧长也是不确定的,对于队列数小于23的情况,需要添加填充域使帧长达到64字节,对于队列数大于等于23的情况,不需要添加填充域,帧长为64+(队列数-23)×2。
本发明的缓存状态包括剩余缓存数和缓存满/不满状态。本发明提供接收设备通过周期发送流控帧告知发送设备自己的剩余缓存数的技术方案;本发明还提供接收设备通过缓存状态变化触发发送流控帧告知发送设备自己的缓存状态的技术方案。
请参考图5,为本发明通过周期发送流控帧的多队列流控方法流程图A1.发送设备与接收设备协商流控帧具体格式。
具体的,两个支持多队列流控的设备互连时,在收发数据帧之前,首先需要确定支持的队列个数,从而确定流控帧的帧长,如队列数为20,则帧长为64,其中有6字节的填充域;队列数为24,则帧长为68,没有填充域;需要约定流控帧的类型域,这个帧类型是目前为止未被使用过的MAC帧类型,如0×ffff);需要约定队列缓存状态的表示方式,选择使用剩余缓存数表示,或使用缓存满/不满状态表示。本实施例使用剩余缓存数表示缓存状态。
A2.确定周期发送流控帧的时间间隔。对于定时发送自定义流控帧的流控机制,需要根据带宽、各队列的缓存大小以及对流控帧的响应时间,以确定定时发送流控帧的时间间隔。
下面对这个时间间隔的计算举例整个端口带宽为1Gbps(1吉比特每秒),多队列中,缓存最小的队列缓存为64K字节,极端情况下,发送设备以满速率1Gbps向一个缓存最小的队列发送报文,填满这个队列的时间是64K*8/1G=512us,以这个时间为依据计算发送流控帧的时间间隔,为了避免因为流控帧发送不及时或者对流控帧的响应不及时造成的缓存溢出,可以将发送流控帧的时间间隔设置为将缓存填满的时间的1/4,即为128us。
设备的初始配置还包括在接收设备中,为多个队列的报文分配不同的缓存空间。在发送设备中,维护一个剩余缓存空间的初始状态,这个状态可以根据接收侧设备中的各通道的实际缓存设置,也可以先设置一个默认初始值,待收到流控帧时再更新。
A3.发送设备发送各队列数据帧之前,查询各队列的缓存状态,判断各队列的数据帧是否发送。
A4.发送设备继续发送符合要求的队列数据帧,停止发送不符合要求的队列数据帧。发送设备发送数据之前查询各队列的缓存状态,如果某些队列的剩余缓存数较少,如剩余缓存不足以接收1个最长帧,即1.5k字节,将停止对该队列的数据帧发送,只向剩余缓存充足的队列发送数据帧。
本实施例中,根据队列的剩余缓存数判断是否可以发送数据帧,可以理解的是,可以根据实际需要,设定具体剩余缓存数作为判断各队列数据帧是否发送的依据。比如接收设备某队列的缓存空间为100K字节,可以设置5%的剩余缓存数,即5K字节,作为判断是否发送的标志,当查询到该队列的剩余缓存数小于5K时,停止该队列的数据帧发送。
如本次发送数据帧时,某些队列因为剩余缓存不足导致队列的数据帧无法发送,在接收设备再次发送流控帧之前,缓存不足的队列可能已经得到系统的处理,剩余缓存增加,剩余缓存数符合发送队列数据帧的条件;接收设备将更新过的缓存状态告知发送设备,发送设备在组织下一次的队列数据帧发送的时候,就可以向这些队列发送数据帧。
A5.接收设备接收数据帧,根据接收到的数据帧和已处理的数据帧的情况更新各队列的缓存状态;同时根据预先计算好的时间间隔,周期发送自定义流控帧。所述时间间隔的计算方法参考步骤A2。
A6.发送设备检测来自接收设备的自定义流控帧,检测方法为通过预先设定的帧类型识别;收到流控帧后,根据流控帧内容更新存储在该发送设备上的各队列缓存状态。发送多队列的数据帧时,继续步骤A3。
请参考图6,为本发明通过状态变化触发发送流控帧的多队列流控方法流程图B1.发送设备与接收设备协商流控帧格式。格式的协商方法请参考A1,本实施例使用缓存满/不满状态表示缓存状态。
本实施方案适合于队列数较少并且仅仅要求控制停-启的情况下。使用事件触发方式发送流控帧的机制,流控帧的发送频率是不均匀的,几个队列状态变化频繁,频繁触发流控帧,也可能几个队列状态长时间不变,没有流控帧。因为队列状态更新触发方式发送流控帧机制,不用像定时发送流控帧状态需要等待一个定时器的时间间隔,对流控的响应会更加及时。
如果队列数较多时,可能流控帧的发送非常频繁,效率会低于周期发送流控帧机制。
B2.接收设备分配各队列的缓存空间,设置反压门限和取消反压门限。
具体为每个队列分配一定的缓存空间,同时根据队列的带宽和处理能力,设置反压门限和取消反压门限,设置两个门限的目的是为了防止队列状态在满和不满之间快速振荡,触发大量流控帧的发送。两个门限将整个缓存分为3个区域,缓存占用小于取消反压的门限时,缓存状态为不满,缓存占用大于设置反压的门限时,缓存状态为满,在两个门限之间的中间区域,缓存状态不变化;缓存占用从中间区域超越反压门限时,缓存状态变为满,缓存占用从中间区域减小到小于取消反压的门限时,缓存状态变为不满。
在接收设备中,需要为多个队列的报文分配不同的缓存空间,设置各队列的设置反压(队列满)缓存门限和取消反压(队列不满)缓存门限。在发送设备中,需要维护一个剩余缓存空间的初始状态,这个状态先设置一个默认初始值为全部队列都允许发送,待收到流控帧时再更新。
B3.发送设备发送各队列数据帧之前,查询各队列的缓存状态,判断各队列的数据帧是否发送。
B4.发送设备继续发送符合要求的队列数据帧,停止发送不符合要求的队列数据帧。发送设备发送数据之前查询各队列的缓存状态,如果队列为缓存满状态,则不发送该队列的数据帧,如果队列的为缓存不满状态,则发送该队列的数据帧。
如本次发送数据帧时,某些队列因为缓存满状态导致队列的数据帧无法发送,在接收设备再次发送流控帧之前,缓存满状态的队列可能已经得到系统的处理,缓存状态变为缓存不满状态;接收设备将更新过的缓存状态告知发送设备,发送设备在组织下一次的队列数据帧发送的时候,就可以向这些队列发送数据帧。
B5.接收设备接收各队列的数据帧,根据接收到的数据帧和已处理的数据帧的情况更新各队列的缓存状态。
B6.接收设备判断是否有队列的缓存状态发生改变。接收设备将缓存状态与两个缓存门限进行比较,如果上一次缓存状态为不满,新的缓存占用大于反压门限,将缓存状态更新为满,触发自定义流控帧发送;如果上一次缓存状态为满,新的缓存占用小于取消反压门限,则将缓存状态更新为不满,触发自定义流控帧发送。
B7.当有队列的缓存状态发送变化时,触发发送流控帧。
在接收设备中,多个队列的缓存状态有可能同时改变,如某个队列的缓存状态变为满的同时,另一个队列的缓存状态变为不满,同时改变的事件只会触发一次流控帧的发送,因为自定义流控帧中可以携带多个队列的缓存状态的。
B8.发送设备识别流控帧,更新各队列缓存状态信息。数据发送侧设备需要不断检测来自接收设备的自定义流控帧,可以通过帧类型来识别;收到流控帧后,根据流控帧内容更新自己维护的各队列缓存状态。发送多队列的数据帧时,继续步骤B3。
请参考图7,为使用本发明触发发送流控帧的流量控制方法示意图接收设备B 400中队列1和队列2分别设有缓存门限,和设备A 300配合通过事件触发的停-启控制实现流控,系统启动后,设备A 300开始向设备B400发送队列1和队列2的数据报文,当设备B 400中有一个队列1的缓存占用达到缓存门限时,设备B 400会发送一个流控帧告知发送侧设备A当前各队列的缓存状态,当设备A 300检测到流控帧后,会根据流控帧更新自己维护的各队列缓存状态,将队列1的缓存状态更新为满,发送报文前查询该状态,将停止向队列1发送报文,只向队列2发送报文,从而避免接收侧设备中队列1的缓存溢出。当设备B 400中队列1的报文得到处理后,缓存占用情况低于取消反压的缓存门限,设备B 400会发送流控帧表示队列1状态更新为不满,这样设备A300就可以继续向队列1发送报文。
以上对本发明所提供的一种多队列流量控制的方法进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式
及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
权利要求
1.一种多队列流量控制的方法,应用在全双工以太网中,其特征在于,包括1)接收设备发送包含各队列缓存状态信息的流控帧给发送设备;2)所述发送设备接收到所述流控帧之后,更新存储在该发送设备上的各队列缓存状态信息;3)所述发送设备在发送各队列的数据帧之前,查询所述各队列缓存状态信息,判断各队列缓存状态是否符合发送要求,如果是,继续发送符合发送要求的队列数据帧;否则,停止发送不符合发送要求的队列数据帧。
2.根据权利要求1所述的方法,其特征在于,所述缓存状态为剩余缓存数。
3.根据权利要求2所述的方法,其特征在于,所述步骤1)的发送为周期发送,在所述周期发送之前,确定周期的时间间隔。
4.根据权利要求1所述的方法,其特征在于,所述缓存状态为缓存满/不满状态。
5.根据权利要求4所述的方法,其特征在于,所述步骤1)的发送过程为当接收设备的队列缓存状态发生改变时,触发所述接收设备发送包含各队列缓存满/不满状态信息的流控帧给发送设备;所述缓存状态发生改变为从缓存不满状态变为缓存满状态,或从缓存满状态变为缓存不满状态。
6.根据权利要求1~5其中之一的方法,其特征在于,在步骤1)之前,发送设备和接收设备进行协商,确定流控帧具体格式。
7.根据权利要求6所述的方法,其特征在于,所述流控帧具体格式包括目的媒体接入控制MAC地址、源媒体接入控制MAC地址、自定义类型域、各队列缓存状态域、填充域和帧校验序列FCS。
8.根据权利要求7所述的方法,其特征在于,在步骤1)之前,还包括,接收设备分配各队列缓存空间。
全文摘要
本发明公开了一种多队列流量控制的方法,应用在全双工以太网中,其基本思路是自定义能反映多个队列缓存状态的流控帧,接收设备通过发送流控帧,告知发送设备当前自己的各队列缓存状态,发送设备通过解析流控帧,停止对即将溢出的队列的报文发送。本发明实现了对全双工以太网中多个队列的流量控制。
文档编号H04L12/56GK1878144SQ20061009940
公开日2006年12月13日 申请日期2006年7月14日 优先权日2006年7月14日
发明者崔秀梅 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1