曹绚丽,陈 晓,宋 磊
(1.中国科学院声学研究所国家网络新媒体工程技术研究中心,北京 100190;2.中国科学院大学,北京 100049)
随着网络规模的不断扩大和流量类型的逐渐丰富,网络管理人员需要在网络中引入更加智能、统筹的管理机制。目前,常见的流量控制方法是通过队列调度技术实现对数据流的带宽、时延等方面的保障。
文献[1]结合了快速重传快速恢复机制、早期随机检测机制和加权差额循环调度(DWRR)[2]机制,在万兆网络下实现了拥塞控制并提供了抑制广播风暴、端口流镜像等QoS 功能。文献[3]证明了最大化的请求数据安排两个问题的NP 完备性并使用启发式算法优化了调度的整体性能。文献[4]在单个网络节点上提高了CBS 合格区间相较于忙区间的带宽利用率。文献[5]提出一种限制流量突发的整形器,提高了rate-contrained 流量的延迟边界和Safety-Critical流量的调度性。
该文提出一种状态可编程交换机[6]的数据面流量控制机制,通过控制面配置交换机的网络接口,为不同数据流实现带宽分配,并通过监控队列长度来检测拥塞,以降低高优先级业务流的丢包率。
作为SDN 架构的主流模型之一,POF[7]的数据平面编程采用匹配动作表模型(MAT)[8],实现了对数据包更细粒度的修改。该文在POF 交换机的输出端加入流量控制模块,提出一种新的队列调度算法,实现带宽资源的预分配的同时保障了高优先级业务的丢包率。该文所提的处理机制使数据面的网络设备不再局限于特定的网络功能,控制器通过开放的编程接口灵活地配置数据面的功能模块,根据网络节点的负载状况和业务需求分配网络设备内的带宽资源。所提方案中,数据面处理流程细化为流量分类模块、Match-Action 模块以及流量控制模块,POF 交换机架构图如图1 所示。
图1 POF交换机架构
要实现状态可编程的流量控制,要补充MAT 模型的动作集,扩展原有的OUTPUT 指令,其指令参数指定对应数据包的输出处理参数(带宽比例、优先级)。首先控制器通过南向接口下发flow_mod 消息,消息中包含表项对应的指令、数据输出的端口和输出处理的参数(带宽权重、优先级),交换机将其解析为对应的entry 规则,并安装在对应的流表中。数据包在交换机内部的处理流程如下:
DPDK[9-10]接口将网卡收到的数据包pkt 发送到流量分类模块,流量分类模块可以解析网络中RSS无法解释的新型数据包,利用软件实现数据分流,使相同的数据流进入同一个CPU 核心匹配流表。随后数据包进入Match-Action 模块的对应CPU 核心,查表后匹配到图1 中entry 2,根据entry2 对应指令块3将输出处理参数(带宽比例50%,优先级等级为2)写入数据包的状态域pkt_metadata 的对应字段。在状态域修改前后,数据包的格式变化如图2 所示。
图2 状态可编程过程对数据包的格式修改
在输出处理模块中,调度器根据pkt_metadata 字段的对应参数确定数据包的入队队列。由调度器统一调度所有输出队列[11],对当前处于active 状态且允许发送数据包的队列进行调度,按照预先设置的带宽比例发送各个队列的数据包。该模块的运行指标要求各个数据流的输出速率等于控制器配置的带宽,且能够保障高优先级数据流的丢包率。
在SDN 网络中,数据面的流量类型种类繁多,包括但不限于IPv6、IPv4、NDN(Named Data Networking,命名数据网络)、SEANet[12]等。当网络中出现数据迁移、链路带宽保证等特殊业务需求时,SDN 控制器通过北向接口接收应用层下发的QoS 要求,SDN 交换机按照控制面配置的带宽比例执行数据转发。
SDN 交换机除了要处理来自其他网络设备的数据流量,还要与控制面进行交互。一般来说,在SDN网络中,南北向流量比例远小于东西向的流量。但一旦南北向流量发生阻塞或丢包,会直接影响交换机对后续数据包的处理流程,从而导致网络中发生不可控的重传或错误。因此,控制流的优先级远高于东西向数据流,在对交换机实现带宽分配的同时,要保证控制流的优先级高于数据流,减少其在队列调度中出现丢包的情况。
为实现SDN 软件交换机输出端的流量控制,提出一种兼顾优先级队列的权重分配队列调度策略——PDWRR(Priority Deficit Weighted Round Robin)。此算法的基础是差分加权轮询(Deficit Weighted Round Robin,DWRR)算法。对于DWRR,每个队列唯一对应一个计数器Deficit,队列Deficit 的初始值为该队列带宽权重Weight 和MTU 的乘积,MTU 为最大传输单元1 500 Bytes;每调度到一个队列,输出队列头部的报文同时计数器减去已发送的报文长度,直到计数器减为0 时停止对该队列的调度;所有队列的计数器都小于0 时,该轮调度结束,重新初始化每个队列计数器,开始下一轮调度。长期来看,各个队列的输出带宽比例等于各队列的Weight 值之比,从而实现各队列带宽的按比例分配。
为降低算法的复杂度,减少调度过程中可能产生的性能损耗[13-15],PDWRR 算法的基本思想如下:
调度算法的流程与DWRR 相似,每发送一个报文,该报文所在队列的计数器减去对应的报文长度直至其计数器小于0,队列调度流程图如图3 所示。在更新队列权重时进行拥塞检测,根据队列的剩余空间动态调整其带宽权重比例,流程图如图4 所示。为每个队列维护一个对应的阈值Threshold,队列的阈值Threshold 由控制器根据网络情况配置,优先级越高的队列阈值越小。在更新队列权重时,检测队列i 的剩余空间的比例Free[i],若Free[i]小于设置的阈值Threshold,则判断该队列即将发生拥塞,对应调整该队列的带宽权重比例。此时按照式(1)更新队列i的带宽权重比例,否则按照式(2)更新。对于不需要区分优先级队列的网络环境,将阈值Threshold 设置为最大值1,以保证带宽资源按比例分配的公平性。
图3 队列调度流程图
图4 更新队列流程图
此方法在DWRR 的基础上增加了拥塞检测[16],根据交换机的拥塞情况动态调整业务流的带宽占比,在预测到高优先级业务即将出现拥塞时提前抢占带宽资源,以降低高优先级队列的丢包率。由交换机程序主动进行带宽调整,相比于通过控制器配置来调节,该方法无需控制器根据链路负载情况重新计算带宽比例,由交换机主动快速响应网络负载变化,减少了控制器的计算开销。
为了对该文所提方案进行实验和分析,验证方案的有效性和可靠性,实验平台选用基于x86 平台开发的POF 交换机,用于下发流表实现数据流分类和带宽比例配置的ONOS 控制器,以及思博伦数据包发生器SpirentSPT-C50。测试平台的CPU 类型为Intel(R) Xeon(R) Silver 4216 CPU@2.10 GHz;服务器物理内存为192 GB;CentOS 7.9 操作系统;网卡类型选用Intel X710 网卡。测试环境拓扑如图5 所示。
图5 测试环境拓扑图
该文的实验环境包括两种测试场景:第一种情景中交换机接收相同优先级、不同占比的数据流:且混合流不区分优先级,当每种流量的占比不同时,为各类流量预留所需的带宽资源;第二种测试情景中交换机接收到的混合流量包含高优先级的控制流和其他优先级的数据流,在每种流量的带宽占用比例不同时,优先保障高优先级流量的丢包率。
1)相同优先级、不同占比的数据流
思博伦数据包发生器向待测交换机发送不同类型的数据包,分别是IPv4 报文、IPv6 报文和NDN报文,三种数据流的数据包长均为256 Bytes。待测交换机的内置流表模拟上层业务需求配置三种报文优先级相同,带宽比例不同。为了验证算法的正确性,将输出的IPv4、IPv6 以及NDN 数据流分别发往不同的端口并回送至思博伦,根据思博伦测试仪的显示结果可以确认待测交换机三种数据流的实时带宽。
为了测试相同优先级情况下,不同类型流量的带宽分配结果。修改三种数据流的带宽权重,测试结果如图6 所示,得到各个时刻三种数据的流量速率。在第4 s、第10 s、第15 s 修改带宽比例的权重,结果显示交换机可以在一定时间内完成各个数据流的带宽的修改并重新达到稳定状态。
图6 权重比例和实际吞吐的关系
为了测试不同流量的变化对指定流量的影响,指定流量为IPv6 数据流,将IPv4、IPv6、NDN 流量带宽分别配置为1 Gbps、1 Gbps、8 Gbps,改变IPv4 的输入速率,记录IPv6 的流量吞吐随IPv4 流量速率的变化关系如表1 所示。实验结果显示,多种类型流量共存运行的情况下,其他类型的流量状态发生变化时,指定流量的带宽波动不超过2%。
表1 IPv4流量变化时的IPv6带宽波动
2)不同优先级、不同权重的数据流
思博伦数据包发生器向待测交换机发送三种类型的数据包,分别是IPv4 报文、IPv6 报文和SEANet,三种数据流的数据包均为小包,长度为78 Bytes。SEANet 报文模拟SDN 网络中控制面发往交换机的南北向控制流,优先级最高;IPv4 报文和IPv6 报文模拟网络节点之间的转发流量。在以下测试中,配置SEANet数据流的预置带宽占比为1%,测试SEANet流量速率在100~150 Mbps内,SEANet流量的丢包率随流量速率的变化关系。图7中比较了DWRR 和PDWRR调度方法的丢包率。
图7 丢包率和实际速率的关系
实验结果显示,相比于DWRR 算法,使用改进后的算法实现交换机的输出侧流量控制,可以将SDN网络中高优先级的流量的控制在1%以内,算法也能在一定程度上解决突发的恶意流量占用网络带宽导致网络崩溃的现象。
为实现对网络中带宽资源的配置和管理,在状态可编程交换机平台上加入了针对不同类型流量的带宽控制模块,提出一种新的队列调度策略实现了带宽资源的预分配,并在POF交换机上完成了方案的验证和测试。实验结果表明,各类流量可以按照指定的速率进行转发;其他流量发生变化时,指定流量的带宽波动可以稳定在2%范围内,且网络中多路流共存运行时高优先级的SDN 控制流的丢包率低于1%。未来的研究工作将在该文所提方案的基础上结合资源分配策略对调度方案进行进一步优化和研究。