基于虚拟端口映射的聚合链路调度方法和数据转发装置 技术领域 本发明涉及数据通信领域, 尤其涉及一种基于虚拟端口映射的聚合链路调度方法 和数据转发装置。
背景技术 链路聚合技术是将两台设备间的多条物理链路通过端口捆绑的方式组合成一条 数据链路用来传输数据, 从而达到增大设备间的链路带宽及更大限度地保证数据的可靠传 输的目的, 组合后的数据链路即为聚合链路。
在常规的数据转发装置中, 其链路调度的结构如图 1 所示, 数据入队后在入队处 理模块进行处理的过程中产生了以包为单位的包描述符, 并将该包描述符传送至队列调度 模块, 同时入队处理模块将收到的数据包写入缓存模块等待输出调度 ; 其中, 包描述符用于 指定对应数据包在缓存模块中的存储位置。队列调度模块的功能包含队列调度和出队调 度。 队列调度是将队列中的包描述符取出并根据队列的端口号和优先级分类至各个物理端 口下等待出队, 出队调度是按照端口间轮询、 端口内队列严格优先级的方法从端口中取出 包描述符, 并发送至出队模块。出队模块接收到输出调度后将对应数据包从缓存中读出完 成数据的出队。
一条聚合链路由多个端口组成, 这些端口称为该聚合链路的成员端口。对于聚合 链路, 即使是一条队列, 其包与包的成员端口也是不相同的, 因为一条队列会同时被多个端 口承载。因此, 在执行队列调度时, 通常会根据每个包的物理端口号, 将该队列的包描述符 分类至多个物理端口等待出队。如果按照此方法需要耗费队列调度模块中的大量资源, 用 于存储每个包对应的物理端口号。
发明内容
本发明的目的是提供一种基于虚拟端口映射的聚合链路调度方法及数据转发装 置, 以克服现有耗费队列调度模块资源量大的缺陷。
为解决上述问题, 本发明提供了一种基于虚拟端口映射的聚合链路调度方法, 应 用于数据转发装置中, 包括 :
当对所述聚合链路队列进行队列调度时, 将所述聚合链路中待传输数据包的包描 述符分类至为所述聚合链路分配的虚拟端口等待出队。
进一步地, 所述方法还包括 :
将所述虚拟端口缓存的空标志映射至所述聚合链路的各成员端口中的映射通道 中;
其中, 所述映射通道为所述成员端口中除最高优先级及最低优先级的缓存空间之 外的任意优先级的缓存空间。
进一步地, 所述方法还包括 :
当某一成员端口被调度时, 若判断出优先级高于所述映射通道的缓存空间中没有包等待出队, 且所述映射通道中有包等待出队, 则从对应的虚拟端口中取出一个包描述符, 并输出出队调度。
进一步地, 所述方法还包括 :
当所述包描述符被从所述虚拟端口中取出后, 根据当前所述虚拟端口缓存的空满 情况, 相应更新所述虚拟端口缓存的空标志, 并将该空标志对应更新至所述虚拟端口对应 的各成员端口的映射通道的空标志上。
进一步地, 所述方法还包括 :
在与包描述符对应的数据包中保存有出队的成员端口号 ;
在虚拟端口中的包描述符被调度出队后, 根据数据包中存储的成员端口号将所述 包描述符对应的数据包从相应的成员端口输出。
相应地, 本发明还提供了一种数据转发装置, 包括 : 队列调度模块 ;
所述队列调度模块中包含存储单元及调度单元 ;
所述存储单元用于存储聚合链路队列中待传输数据包的包描述符 ;
队列调度单元用于在对所述聚合链路队列进行队列调度时, 将所述包描述符分类 至为所述聚合链路分配的虚拟端口等待出队。 进一步地, 所述队列调度模块中还包括 :
映射单元, 用于将所述虚拟端口缓存的空标志映射至所述聚合链路的各成员端口 中的映射通道中 ;
其中, 所述映射通道为所述成员端口中除最高优先级及最低优先级的缓存空间之 外的任意优先级的缓存空间。
进一步地, 所述队列调度模块中还包括 :
出队调度单元, 用于当某一成员端口被调度时, 若判断出优先级高于所述映射通 道的缓存空间中没有包等待出队, 且所述映射通道中有包等待出队, 则从对应的虚拟端口 中取出一个包描述符, 并输出出队调度。
进一步地, 所述队列调度模块中还包括 :
更新单元, 用于当所述包描述符被从所述虚拟端口中取出后, 根据当前所述虚拟 端口缓存的空满情况, 相应更新所述虚拟端口缓存的空标志, 并将该空标志对应更新至所 述虚拟端口对应的各成员端口的映射通道的空标志上。
进一步地, 所述装置中还包括 : 出队模块 ;
在与包描述符对应的数据包中保存有出队的成员端口号 ;
所述出队模块用于在虚拟端口中的包描述符被调度出队后, 根据数据包中存储的 成员端口号将所述包描述符对应的数据包从相应的成员端口输出。
本发明使用了虚拟端口, 在聚合队列包描述符分类时, 不需要按照成员端口号进 行分类, 因此节省了大量的存储成员端口号的资源。 此外, 还能保证成员端口协议队列和虚 拟端口普通队列之间的严格优先级关系。
附图说明
图 1 是现有技术中通用的数据转发实现方案框图 ; 图 2 是本发明实施例中基于虚拟端口映射的聚合链路调度方法的流程图 ;图 3 是本发明实施例中虚拟端口向对应聚合链路的成员端口映射的调度结构示 图 4 是以图 3 所示调度结构进行基于虚拟端口映射的聚合链路调度方法的流程意图 ;
图。 具体实施方式
为使本发明的目的、 技术方案和优点更加清楚明白, 下文中将结合附图对本发明 的实施例进行详细说明。 需要说明的是, 在不冲突的情况下, 本申请中的实施例及实施例中 的特征可以相互任意组合。
在本实施例中, 一种基于虚拟端口映射的聚合链路调度方法, 如图 2 所示, 包括 :
在队列调度模块中, 增加虚拟端口定义, 即为每条聚合链路分配一个虚拟端口号 ; 当聚合链路队列被调度时, 该聚合链路的包描述符不是被分类至其各自的成员端口, 而是 被分类至该聚合链路对应的虚拟端口等待出队。因此, 无需在队列调度模块中存储各个包 对应的成员端口号, 这样可以节省大量的存储资源。
出队调度的第一步便是选出合适的端口。 如果将虚拟端口和普通端口合并参与轮 询, 可能存在成员端口的协议队列带宽被虚拟端口的普通队列抢占的现象。 针对此问题, 在 本实施例中, 需要将虚拟端口向对应的聚合链路的成员端口进行映射。如图 3 所示, 以调度 结构中包含 6 个物理端口和 2 个虚拟端口为例, 虚拟端口 0 对应于对物理端口 0、 物理端口 1 及物理端口 2 进行捆绑后建立的聚合链路, 虚拟端口 1 对应于对物理端口 4 和物理端口 5 捆绑后建立的聚合链路, 物理端口 3 没有参与链路聚合。每个物理端口的队列被划分为三 个优先级, 分别为 Pr0 ~ Pr2。
虚拟端口向物理端口映射是将虚拟端口同时映射到其对应的聚合链路的所有成 员端口的过程。无论虚拟端口还是物理端口均需要按照优先级独立分配一定的缓存空间, 用于存储队列调度出的包描述符。 各优先级的缓存空间都维护一个空标志用于判断其所属 端口是否有包等待出队。在本装置中, 虚拟端口向其对应的聚合链路的所有成员端口映射 的过程, 是将从虚拟端口空标志实时映射至其对应的聚合链路的每一成员端口中除最高优 先级及最低优级的缓存空间之外任意优先级的缓存空间的空标志上的过程。在下文中, 将 成员端口上映射有虚拟端口的空标志的缓存空间简称为该虚拟端口的映射通道。如图 3 所 示, 物理端口 0 ~ 2 上优先级为 Pr1 的缓存空间为虚拟端口 0 的映射通道, 同理, 物理端口 4 和 5 上上优先级为 Pr1 的缓存空间为虚拟端口 1 的映射通道。因虚拟端口的空标志需同 时映射至多个物理端口, 所以需要在虚拟端口的空标志发生变化时, 将该空标志同时更新 至其各成员端口中映射通道的空标志上, 作为出队调度端口的轮询条件。
在进行出队调度时, 端口的轮询是针对物理端口的。由于各虚拟端口的空标志均 映射到所有成员端口的映射通道上, 因此, 只要该成员端口对应的虚拟端口中有包等待出 队, 该成员端口上的映射通道便处于非空状态, 该成员端口就可能被选出。
物理端口虽然可能作为聚合链路的成员端口, 但其本身仍然存在高优先级的协议 队列, 这些队列在任何条件下都应该优先出队, 因此在某一物理端口被选中后, 首先应按照 优先级从高到低的顺序, 依次判断该物理端口中优先级高于映射通道的缓存中是否有包等 待出队。如果有, 则从该优先级高的缓存中取出一个包描述符, 然后输出出队调度。如果该物理端口中优先级高于映射通道的缓存中均没有包等待出队, 则判断该映 射通道中是否有包等待出队 ( 即判断该映射通道的空标志的值是否为非空 ), 如果判断出 有包等待出队, 则从对应的虚拟端口中取出一个包描述符, 并输出出队调度。
在该物理端口有包等待出队的前提下, 如果判断出该物理端口中的映射通道中也 没有包等待出队, 则必然优先级低于该映射通道的缓存中有包等待出队, 此时从该物理端 口中相应的低优先级的缓存中取出一个包描述符, 并输出出队调度。
当包描述符被取出后, 需要重新判断该包描述符所在端口是否有包等待出队, 并 相应更新其缓存空标志, 防止空调度。如果本次出队调度的包描述符是从虚拟端口中取出 的, 则需要重新判断虚拟端口的缓存是否为空, 据此更新该虚拟端口缓存的空标志, 并将该 空标志对应更新至该虚拟端口对应的所有成员端口上的映射通道的空标志中, 完成此次出 队调度。
由于从虚拟端口调度出队的包描述符中没有出队的成员端口号, 因此需要在对应 数据包中存储成员端口号。 在数据转发装置中, 数据包存储于片外 DDR(Double Data Rate, 双倍速率同步动态随机存储器 ) 缓存, 数据包从缓存模块中读出时, 该装置根据该数据包 中存储的成员端口号将当前数据包从该成员端口输出。 通过上文描述可知 :
首先, 本发明在出队时增加虚拟端口用于存储聚合链路的包描述符, 无需在队列 调度时将包描述符分类至其各个成员端口等待出队, 而是分类至对应的虚拟端口下等待出 队, 因此可以节省存储成员端口号的资源 ;
其次, 物理端口在捆绑为聚合链路后, 其端口内部还存在协议队列, 虚拟端口中的 队列优先级应低于其成员端口的协议队列优先级, 因此在进行出队调度时, 不能将虚拟端 口和物理端口合并进行轮询操作, 否则可能造成聚合链路普通队列报文抢占成员端口的协 议队列带宽, 造成物理端口协议报文的丢失。 采用本发明后, 将虚拟端口的空标志映射至各 个成员端口的低于最高优先级且高于最低优先级的中间优先级的缓存上, 且不参与物理端 口的轮询, 能保证成员端口协议报文和虚拟端口普通报文之间的严格优先级关系。
以如图 3 所示的结构, 进一步说明基于虚拟端口映射的聚合链路调度方法, 如图 4 所示, 包括以下步骤 :
S301 : 执行物理端口的轮询操作, 从物理端口中选择有包等待出队的端口, 端口本 身有包等待出队或端口作为成员端口其对应的虚拟端口有包等待出队均会被选出 ;
S302 : 针对 S301 步骤中选出的端口, 判断其优先级 Pr0 的缓存中是否有包等待出 队; 如有包等待出队, 则执行 S303 ; 否则, 执行 S305 ;
S303 : 从 Pr0 缓存中取出一个包描述符, 等待输出 ;
S304 : 步骤 S303 执行完成后, 需要判断 Pr0 缓存中是否为空, 并相应更新其空标 志; 然后执行步骤 S314 ;
S305 : 判断 Pr1 缓存中有没有包等待出队 ; 如果有, 则执行 S306 ; 否则, 执行 S312 ;
S306 : 判断当前端口是否为聚合链路的成员端口 ; 如果是, 则执行步骤 S307 ; 否 则, 执行 S310 ;
S307 : 从该聚合链路的虚拟端口中取出一个包描述符等待出队 ;
S308 : 步骤 S307 执行结束后, 需要判断该聚合端口缓存是否为空, 并更新其空标
志; S309 : 由于聚合端口缓存的空标志需映射到其对应的成员端口中, 因此在步骤 S308 中更新空标志的同时, 需要将该聚合链路的所有成员端口 Pr1 缓存的空标志全部刷 新; 然后执行 S314 ;
S310 : 从该端口 Pr1 缓存中取出一个包描述符等待出队 ;
S311 : 步骤 S310 执行完成后, 需要判断 Pr1 缓存是否为空, 并相应更新其空标志 ; 然后执行步骤 S314 ;
S312 : 此时必定 Pr2 缓存有包等待出队, 则从 Pr2 缓存中取出一个包描述符等待出 队;
S313 : 步骤 S312 执行完成后, 需要判断 Pr2 缓存是否为空, 并相应更新其空标志 ;
S314 : 完成本次出队调度流程。
根据上述流程可知, 当选择完物理端口后, 无论该物理端口是否参与了链路聚合, 都优先判断当前物理端口的最高优先级 Pr0 的缓存中是否有包等待出队, 这样无论该物理 端口是否参与了链路聚合, 都能保证当前端口的最高优先级的包被优先调度。
在某物理端口中存在 3 个优先级时, 如果该物理端口参与了链路聚合, 则其 Pr1 缓 存一定是该端口的映射通道, 因此在判断了当前物理端口的 Pr1 缓存中有包等待出队后, 还需要判断当前缓存是否为虚拟端口的映射通道。当虚拟端口中有包等待出队时, 其所有 成员端口的映射通道都应标识为非空, 因此在虚拟端口缓存的空标志发生更新时, 应同时 刷新至其所有成员端口的 Pr1 缓存的空标志上, 体现出了虚拟端口和普通物理端口的映射 关系。
当轮询出物理端口后, 如果判定应该对该物理端口对应的聚合链路进行出队调度 时, 需要根据虚拟端口和物理端口的映射关系, 到对应的虚拟端口取出一个包描述符, 也体 现出了虚拟端口和普通物理端口的映射关系。
此外, 在本实施例中, 一种数据转发装置, 包括 : 队列调度模块 ;
所述队列调度模块中包含存储单元及调度单元 ;
所述存储单元用于存储聚合链路队列中待传输数据包的包描述符 ;
队列调度单元用于在对所述聚合链路队列进行队列调度时, 将所述包描述符分类 至为所述聚合链路分配的虚拟端口等待出队。
较佳地, 所述队列调度模块中还包括 :
映射单元, 用于将所述虚拟端口缓存的空标志映射至所述聚合链路的各成员端口 中的映射通道中 ;
其中, 所述映射通道为所述成员端口中除最高优先级及最低优先级的缓存空间之 外的任意优先级的缓存空间。
较佳地, 所述队列调度模块中还包括 :
出队调度单元, 用于当某一成员端口被调度时, 若判断出优先级高于所述映射通 道的缓存空间中没有包等待出队, 且所述映射通道中有包等待出队, 则从对应的虚拟端口 中取出一个包描述符, 并输出出队调度。
较佳地, 所述队列调度模块中还包括 :
更新单元, 用于当所述包描述符被从所述虚拟端口中取出后, 根据当前所述虚拟
端口缓存的空满情况, 相应更新所述虚拟端口缓存的空标志, 并将该空标志对应更新至所 述虚拟端口对应的各成员端口的映射通道的空标志上。
较佳地, 所述装置中还包括 : 出队模块 ;
在与包描述符对应的数据包中保存有出队的成员端口号 ;
所述出队模块用于在虚拟端口中的包描述符被调度出队后, 根据数据包中存储的 成员端口号将所述包描述符对应的数据包从相应的成员端口输出。
本领域普通技术人员可以理解上述方法中的全部或部分步骤可通过程序来指令 相关硬件完成, 所述程序可以存储于计算机可读存储介质中, 如只读存储器、 磁盘或光盘 等。可选地, 上述实施例的全部或部分步骤也可以使用一个或多个集成电路来实现。相应 地, 上述实施例中的各模块 / 单元可以采用硬件的形式实现, 也可以采用软件功能模块的 形式实现。本发明不限制于任何特定形式的硬件和软件的结合。
以上所述仅为本发明的优选实施例而已, 并非用于限定本发明的保护范围。根据 本发明的发明内容, 还可有其他多种实施例, 在不背离本发明精神及其实质的情况下, 熟悉 本领域的技术人员当可根据本发明作出各种相应的改变和变形, 凡在本发明的精神和原则 之内, 所作的任何修改、 等同替换、 改进等, 均应包含在本发明的保护范围之内。