基于优先级的数据传输方法、 装置及网络设备 【技术领域】
本发明涉及数据处理技术领域,尤指一种基于优先级的数据传输方法、装置及 网络设备。背景技术
优先级队列是不同于先进先出或者后进后出的另一种队列,在选择待处理的元 素时,按照事先赋予的优先级获取元素,每次总是选择具有最高优先级的元素进行处 理。 比如在通信过程中,接口之间发送报文时,协议报文需要比数据报文优先发送,则 可以使用优先级队列,保证协议报文被优先发送。
目 前 常 用 的 优 先 级 队 列 有 优 先 级 队 列 (Preference Queue, PQ), 轮 询 (RoundRobin, RR) 队列,加强的轮询转发 (Weighted Round Robin, WRR) 队列,低延 迟队列 (Low Latency Queuing,LLQ),质量服务 (Quality of Service,QoS) 拥塞管理中的 加强公平队列 (Weighted Fair Queuing,WFQ),基于类的 WFQ(Class-Based Weighted Fair Queuing, CBWFQ) 等。 这些优先级队列适用于上层业务数据处理中遇到的复杂的网络 拥塞和数据转发管理问题。
但是,维护多个优先级队列,在发送数据时则需要对多个优先级队列进行轮询 操作,实现报文按照优先级发送,这增加了系统资源开销,尤其是针对某些特定的应用 场景,这种系统开销可能会导致报文收发速度受到影响。 例如 :对于上层业务采用这 种方式可以很好的实现报文按照优先级发送,而对于驱动层则更关心的应该是如何快速 的将上层传下来的报文快速的转发到物理线路上去,相比来讲对于优先级的要求则比较 低,而其对发送速度的要求则更高一些。 而现有技术中的多优先级队列轮询发送报文的 处理方式不能很好的解决这一问题。 发明内容
本发明实施例提供一种基于优先级的数据传输方法、装置及网络设备,用以解 决现有技术中存在多优先级队列轮询导致系统资源开销大,浪费系统资源的问题。
一种基于优先级的数据传输方法,包括 :
获取到待发送报文时,确定用于缓存待发送报文的缓冲队列的当前队列长度所 在的门限值区间 ;
根据确定的门限值区间,以及预先建立的门限值区间与允许进入缓冲队列的报 文的允许优先级的对应关系,确定允许进入缓存待发送报文的所述缓冲队列的报文的允 许优先级 ;
根据获取的报文的优先级是否属于确定的所述允许优先级,确定是否将获取的 报文加入所述缓冲队列。
一种基于优先级的数据传输装置,包括 :
获取模块,用于获取待发送的报文 ;判断模块,用于所述获取模块获取到待发送的报文时,确定用于缓存待发送报 文的缓冲队列的当前队列长度所在的门限值区间 ;
确定模块,用于根据确定的门限值区间,以及预先建立的门限值区间与允许进 入缓冲队列的报文的允许优先级的对应关系,确定允许进入缓存待发送报文的所述缓冲 队列的报文的允许优先级 ;
入队模块,用于根据获取的报文的优先级是否属于确定的所述允许优先级,确 定是否将获取的报文加入所述缓冲队列。
一种网络设备,包括上述的基于优先级的数据传输装置。
本发明有益效果如下 :
本发明实施例提供的基于优先级的数据传输方法、装置及网络设备,获取到待 发送的报文时,根据缓冲队列的队列长度所在的门限值区间,确定允许进入缓冲队列的 报文的允许优先级 ;根据获取的报文的优先级是否属于所述允许优先级,确定是否将获 取的报文加入缓冲队列。 通过一个缓冲队列来缓冲待发送的报文,从而避免了多优先级 报文发送过程中轮询多个优先级队列和维护多个队列所导致的系统开销大,影响系统性 能的问题 ;同时,通过设定的门限值区间,确定能够进入缓冲队列的报文的优先级,从 而保障了报文按照各自的优先级传输,保障了高优先级的报文能够优先被发送。 从而在 实现报文按优先级发送的同时避免多个队列的轮询操作和维护管理,大大降低了发送报 文过程中的系统开销,提高了系统总体性能。 附图说明
图 1 为本发明实施例一中基于优先级的数据传输方法的流程图 ;
图 2 为本发明实施例一中缓冲队列门限值区间设置示意图 ;
图 3 为本发明实施例二中驱动层的报文发送流程示意图 ;
图 4 为本发明实施例二中基于优先级的数据传输方法的流程图 ;
图 5 为本发明实施例二中驱动层缓冲队列门限值区间设置示意图 ;
图 6 为本发明实施例中基于优先级的数据传输装置的结构示意图。 具体实施方式
针对现有技术中多个优先级队列轮询所导致的系统开销大的问题,本发明实施 例提供的一种基于优先级的数据传输方法,在只维持一个缓冲队列的情况下,尽可能的 保证高优先级的报文被优先处理。 下面通过具体的实施例进行详细说明 :
实施例一
本发明实施例一提供的基于优先级的数据传输方法,其流程如图 1 所示,执行 步骤如下 :
步骤 S11 :获取待发送的报文。
获取的待发送的报文可以包含从上层报文接口读取的各优先级的报文。
步骤 S12 :获取用于缓存待发送报文的缓冲队列的当前队列长度。
其中,缓冲队列为先入先出 (First Input First Output, FIFO) 队列。
本发明中,在实现数据包发送的对应模块的发送通道中,每个通道中设置一个缓冲队列。
步骤 S13 :判断获取的当前队列长度所在的门限值区间。
其中,缓冲队列的门限值区间是预先设定的,具体根据预先设置的报文的优先 级数量确定并设置门限值,实现设定不同的门限值区间。
例 如 :预 先 设 定 门 限 值 有 M1、 M2、 ……、 Mn 等。 从 而 形 成 了 0-M1、 M1-M2、 ……、 M(n-1)-Mn 等若干门限值区间。
步骤 S14 :根据确定的门限值区间,以及预先建立的门限值区间与允许进入缓 冲队列的报文的允许优先级的对应关系,确定允许进入缓存待发送报文的缓冲队列的报 文的允许优先级。
在设定门限区间的同时,设定各门限区间对应的允许进入缓冲队列的报文的优 先级,即建立了门限值区间与允许进入缓冲队列的报文的允许优先级的对应关系。
其中门限区间根据待发送的报文的优先级数量确定,例如 :待发送的报文的优 先级有两个时,可以设定两个门限值 :高优先级门限值和低优先级门限值,即三个门限 区间 :低于低优先级门限值的第一门限区间、介于高优先级门限值与低优先级门限值之 间的第二门限区间、以及高于高优先级门限值的第三门限区间。 第一门限区间对应的允 许优先级为高优先级和低优先级,第二门限区间对应的允许优先级为高优先级,第三门 限区间对应的允许优先级为空,即禁止所有报文进入缓冲队列。 当待发送报文的优先级比较多时,相应的设置的门限值也比较多,从而设置的 门限区间也比较多。 例如 :报文的优先级包括 :L1、 L2、 ……、 Lm 等,相应设置的 门限值包括 M1、M2、 ……、M(n-1)、Mn。 如图 2 所示为缓冲队列门限区间设置的示 意图。 当队列长度位于门限区间 0-M1 时,允许所有优先级的报文进入缓冲队列 ;当队 列长度位于门限区间 M1-M2 时,允许除最低优先级 L1 以外的其他优先级的报文进入缓 冲队列 ; 、 ……、当队列长度位于门限区间 M(n-1)-Mn 时,仅允许最高优先级 Lm 的 报文进入缓冲队列,当队列长度位于大于 Mn 的门限区间时,不允许任何优先级的报文进 入缓冲队列。
其中门限区间的数量参照优先级的数量设置,一般设置的门限区间的数量不大 于优先级的数量,即上述 n 不大于 m。
当 n = m 时,针对 n 个门限值所划分出的能 n+1 个门限区间,当队列长度在前 n 个门限区间时,每个门限区间允许优先级数量相对于前一个门限区间少 1,当队列长度在 第 n+1 个门限区间时,禁止所有报文进入缓冲队列。
当 n 小于 m 时,针对 n 个门限值所划分出的能 n+1 个门限区间,可以设置当队 列长度在前 n 个门限区间时,每个门限区间允许优先级数量相对于前一个门限区间少至 少一个,当队列长度在第 n+1 个门限区间时,禁止所有报文进入缓冲队列。
步骤 S15 :判断获取的报文的优先级是否属于确定出的允许优先级。
若是,执行步骤 S15 ;否则执行步骤 S16。
在确定出允许进入缓冲队列的优先级后,判断获取到的报文的优先级是否在允 许优先级的范围内,来决定是否允许报文进入缓冲队列。
步骤 S16 :将获取的报文加入缓冲队列。
当获取到的报文的优先级在允许优先级的范围内时,允许报文进入缓冲队列。
当向缓冲队列中加入报文时,将报文加入到缓冲队列的队尾。
当需要发送缓冲队列中的报文时,从缓冲队列的头部获取报文发送。
步骤 S17 :丢弃获取的数据报文。
当获取到的报文的优先级不在允许优先级的范围内时,不允许报文进入缓冲队 列,则丢弃获取到的报文。
上述步骤 S15- 步骤 S17 实现了根据获取的数据报文的优先级是否属于确定出的 允许优先级,,确定是否将获取的数据报文加入缓冲队列。
实施例二
本发明实施例二提供的基于优先级的数据传输方法,以仅包含协议报文和数据 报文两个优先级的报文的驱动层为例,具体说明本发明方法的实现过程。 其中,驱动层 的报文发送处理流程如图 3 所示,包括如下步骤 :
步骤 S21 :从上层报文接口获取报文。
从上层的报文接口获取报文包括从链路层等上层报文接口获取报文。
针对驱动层而言,从上层报文接口获取到的待发送的报文包括 :数据报文或协 议报文。 其中,协议报文是用来保证协议可以正常工作的报文,数据报文是用来满足用 户业务需求的报文。 在系统繁忙的情况下,协议报文必须优先于数据报文被处理,才能 保证协议正常工作。 步骤 S22 :将报文加入驱动层的驱动通道的缓冲队列中。
在驱动层的每个驱动通道中设置一个缓冲队列,设置的缓冲队列是如上述实施 例一所述的包含优先级队列特性的 FIFO 队列,以保证在驱动层面,接口需要处理的较高 优先级的协议报文被优先处理。 也就是说,对于驱动层面,所有报文一般只有两个优先 级。 且由于驱动层的报文一般对优先级的要求不是很高,而对传输速度和效率的要求更 高一些,因此更适用本发明实施例一提供的将待发送的报文缓存到一个缓冲队列中的报 文发送方式,其能够保证每次能够有效的筛选到优先级高的报文,使得高优先级的报文 会被优先处理,同时提高了发送的速度和效率,且实现方式简单。
此时,缓冲队列的优先级门限设置如图 4 所示。 包括一个高优先级门限和一个 低优先级门限。 预先建立的门限值区间与允许进入缓冲队列的报文的允许优先级的对应 关系为 :当队列长度小于预先设定的低优先级门限值时,允许进入缓冲队列的报文优先 级为高优先级和低优先级 ;当队列长度大于低优先级门限值且小于预先设定的高优先级 门限时,允许进入缓冲队列的报文优先级为高优先级 ;当队列长度大于预先设定的高优 先级门限值时,禁止报文进入缓冲队列。
目前,信道化的线卡在一个物理口往往具有多个逻辑接口,例如 E1 线卡,一路 E1 物理口可以包含最多 31 个 CE1 逻辑接口。 在实现一次报文发送的过程中,往往属于 同一个物理口的所有逻辑口共用同一个发包函数,即在发包函数中轮询所有通道,然后 一起发送。 发送数据时,驱动层面从上层获取报文,挂在各个驱动通道的缓冲队列中。
步骤 S23 :硬件发送接口从驱动通道获取待发送的报文。
当需要向物理线路上发送报文时,再从各个通道的缓冲队列上获取数据往硬件 上挂接,由硬件负责发送到物理线路上去。
步骤 S24 :硬件发送从驱动通道获取的报文。
硬件从驱动通道获取报文后向物理线路发送。
在驱动层采用上述一个缓冲队列实现报文发送,对一般的 FIFO 队列赋予简单的 优先级门限值,在快速高效的将报文发送到物理线路或者从物理线路快速的接收信号并 传给上层报文接口同时,可能满足一些特殊情况下,比如在接口无法使用质量服务 (Qos) 功能时,保证高优先级报文优先得到处理。
在驱动层实现基于优先级的数据传输时,将报文加入驱动通道中的缓冲队列进 行发送,该方法的具体实现流程如图 5 所示,执行步骤如下 :
步骤 S31 :从上层报文接口获取报文。
参照步骤 S21,此处不再赘述。
一般可以由硬件发包模块实现从上层接口获取报文。
步骤 S32 :上层发送接口是否有报文需要发送。
若是,执行步骤 S33 ;否则,返回继续执行步骤 S31。
步骤 S33 :缓冲队列的当前队列长度是否大于设定的高优先级门限值。
若是,执行步骤 S39 ;否则,执行步骤 S34。
步骤 S34 :缓冲队列的当前队列长度是否小于设定的低优先级门限值。 若是,执行步骤 S37 ;否则,执行步骤 S35。
步骤 S35 :确定允许进入缓冲队列报文的允许优先级为高优先级。
根据预先建立的门限值区间与允许进入缓冲队列的报文的允许优先级的对应关 系,当当前队列长度大于低优先级门限值且小于预先设定的高优先级门限时,当前队列 长度所在的门限值区间为大于低优先级门限值且小于预先设定的高优先级门限的门限区 间时,确定允许进入缓冲队列的报文优先级为高优先级。
针对驱动层而言,高优先级的报文为协议报文,因此,允许进入缓冲队列的报 文为协议报文。
步骤 S36 :判断获取的是协议报文还是数据报文。
若是协议报文执行步骤 S38 ;若是数据报文执行步骤 S39。
此处是为了判断获取的报文的优先级是否属于确定出的允许进入缓冲队列的允 许优先级。
步骤 S37 :确定允许进入缓冲队列报文的允许优先级为高优先级和低优先级。
根据预先建立的门限值区间与允许进入缓冲队列的报文的允许优先级的对应关 系,当当前队列长度小于预先设定的低优先级门限值时,及当前队列长度所在的门限值 区间为小于预先设定的低优先级门限值的门限区间时,确定允许进入缓冲队列的报文优 先级为高优先级和低优先级。
针对驱动层而言,则是协议报文和数据报文均允许进入缓冲队列。
步骤 S38 :将获取的报文加入缓冲队列。
当确定允许进入缓冲队列的报文优先级为高优先级和低优先级时,将获取到的 报文,可以是数据报文或协议报文,加入缓冲队列中。 此时由于允许所有优先级的报文 进入,因此无需再判断获取的报文的优先级是否属于确定出的允许进入缓冲队列的允许 优先级。
当确定允许进入缓冲队列的报文优先级为高优先级时,根据步骤 S36 的判断,
将获取到的高优先级的协议报文加入缓冲队列中。
将报文加入缓冲队列时,从队列的队尾挂包,即将报文加入到队尾。 将一个报 文加入缓冲队列中后,队列长度加 1。当从缓冲队列中取出一个报文发送后,队列长度减 1。
步骤 S39 :丢弃获取的报文。
根据预先建立的门限值区间与允许进入缓冲队列的报文的允许优先级的对应关 系,当队列长度大于预先设定的高优先级门限值时,即当前队列长度所在的门限值区间 为大于预先设定的高优先级门限值的门限区间时,禁止报文进入缓冲队列。 因此在步骤 S33 判断为是时,丢弃获取的报文。
当队列长度大于低优先级门限值且小于预先设定的高优先级门限时,仅允许高 优先级的报文进入缓冲队列,因此若步骤 S36 确定出获取的是低优先级的数据报文则丢 弃。
上述实施例二的方法。 当驱动层面从上层报文接口获取报文入队时,向缓冲队 列的队尾加入获取的报文,包括数据报文和协议报文 ;当队列长度达到低优先级门限值 时,仅将获取的协议报文加入缓冲队列的队尾 ;当队列长度达到高优先级门限值时,不 再向缓冲队列加入报文,并丢弃多余的报文。 由于一般情况下两个协议报文出现的时间 间隔单位在秒级,根据硬件发送报文的特性,可以很容易的设定出缓冲队列的优先级门 限值,并且尽量保证不会丢弃协议报文。
根据本发明实施例提供的基于优先级的数据传输方法,可以构建一种基于优先 级的数据传输装置,该装置可以设置在任何具有数据传输功能的网络设备中,该装置的 结构如图 6 所示,包括 :获取模块 10、判断模块 20、确定模块 30 和入队模块 40。
获取模块 10,用于获取待发送的报文。
判断模块 20,用于获取模块 10 获取到待发送的报文时,确定用于缓存待发送报 文的缓冲队列的当前队列长度所在的门限值区间。
确定模块 30,用于根据确定的门限值区间,以及预先建立的门限值区间与允许 进入缓冲队列的报文的允许优先级的对应关系,确定允许进入缓存待发送报文的所述缓 冲队列的报文的允许优先级。
入队模块 40,用于根据获取的报文的优先级是否属于确定模块 30 确定出的允许 优先级,确定是否将获取的报文加入所述缓冲队列。
优选的,上述基于优先级的数据传输装置,还包括 :发送模块 50。
上述入队模块,具体用于将获取到的报文加入到缓冲队列的队尾 ;发送模块 50,用于从缓冲队列的头部获取报文发送。
优选的,上述基于优先级的数据传输装置,还包括 :更新模块 60,用于当入队 模块 40 向缓冲队列中加入报文或发送模块 50 从缓冲队列中获取报文发送后,更新缓冲队 列的队列长度。
本发明实施例提供的上述装置,可适用于缓冲队列设置在驱动层的驱动通道 中,每个驱动通道中设置一个缓冲队列的情况。 此时,上述获取模块 10 具体用于 :从上 层报文接口获取待发送的数据报文或协议报文。
针对驱动层只有两个优先级的情况,上述确定模块 30,具体用于根据确定的门限值区间,以及预先建立的门限值区间与允许进入缓冲队列的报文的允许优先级的对应 关系,当确定的门限值区间为小于预先设定的低优先级门限值的门限区间时,确定允许 进入缓冲队列的报文的允许优先级为高优先级和低优先级 ;当确定的门限值区间为大于 所述低优先级门限值且小于预先设定的高优先级门限的门限区间时,确定允许进入缓冲 队列的报文的允许优先级为高优先级 ;当确定的门限值区间为大于预先设定的高优先级 门限值的门限区间时,禁止报文进入缓冲队列。
相应的,上述入队模块 40,具体用于 :当确定的允许优先级为高优先级和低优 先级时,将获取到协议报文或数据报文加入缓冲队列中 ;当确定的允许优先级为高优先 级时,若获取到的是协议报文则加入缓冲队列中,若获取到的是报文中的数据报文则丢 弃。
本发明实施例提供的基于优先级的数据传输方法及装置,尤其适用于高优先级 报文数目较少,低优先级报文数较多的情况。
本发明实施例提供的基于优先级的数据传输方法及装置,只通过一个缓冲队列 来缓存待发送的报文,将多个优先级的报文合并到这一个缓冲队列中,根据队列长度和 设定的门限值区间,限制加入缓冲队列的报文的优先级,该方法实现简单、高效,且有 效的避免了多优先级报文发送过程中轮询多个优先级队列和维护多个队列所导致的系统 开销大,影响系统性能的问题。 同时,通过设定的门限值区间,确定能够进入缓冲队列的报文的优先级,从而 保障了报文按照各自的优先级传输,保障了高优先级的报文能够优先被发送。 尤其是针 对驱动层的报文发送,即使在未配置上层业务、不维护多个队列的时候,也能实现优先 处理高优先级的报文,在系统繁忙时保证通信畅通,大大降低了发送报文过程中的系统 开销,提高了系统总体性能。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的 精神和范围。 这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的 范围之内,则本发明也意图包含这些改动和变型在内。