23. QoS框架
本章介绍了DPDK服务质量(QoS)框架。
23.1. 支持QoS的数据包水线
具有QoS支持的复杂报文处理流水线的示例如下图所示。
这个水线使用可重复使用的DPDK软件库构建。在这个流程中实现QoS的主要模块有:策略器,缓存器和调度器。下表列出了各块的功能描述。
# | Block | Functional Description |
---|---|---|
1 | Packet I/O RX & TX | 多个NIC端口的报文接收/传输。用于Intel 1GbE/10GbE NIC的轮询模式驱动程序(PMD)。 |
2 | Packet parser | 识别输入数据包的协议栈。检查数据包头部的完整性。 |
3 | Flow classification | 将输入数据包映射到已知流量上。使用可配置散列函数(jhash,CRC等)和桶逻辑来处理冲突的精确匹配表查找。 |
4 | Policer | 使用srTCM(RFC 2697)或trTCM(RFC2698)算法进行数据包测量。 |
5 | Load Balancer | 将输入数据包分发给应用程序worker。为每个worker提供统一的负载。保持流量对worker的亲和力和每个流程中的数据包顺序。 |
6 | Worker threads | 客户指定的应用工作负载的占位符(例如IP堆栈等)。 |
7 | Dropper | 拥塞管理使用随机早期检测(RED)算法(Sally Floyd-Van Jacobson的论文)或加权RED(WRED)。根据当前调度程序队列的负载级别和报文优先级丢弃报文。当遇到拥塞时,首先丢弃优先级较低的数据包。 |
8 | Hierarchical Scheduler | 具有数千(通常为64K)叶节点(队列)的5级分层调度器(级别为:输出端口,子端口,管道,流量类和队列)。实现流量整形(用于子站和管道级),严格优先级(对于流量级别)和加权循环(WRR)(用于每个管道流量类中的队列)。 |
整个数据包处理流程中使用的基础架构块如下表所示。
# | Block | Functional Description |
---|---|---|
1 | Buffer manager | 支持全局缓冲池和专用的每线程缓存缓存。 |
2 | Queue manager | 支持水线之间的消息传递。 |
3 | Power saving | 在低活动期间支持节能。 |
水线块到CPU cores的映射可以根据每个特定应用程序所需的性能级别和为每个块启用的功能集进行配置。一些块可能会消耗多个CPU cores(每个CPU core在不同的输入数据包上运行同一个块的不同实例),而另外的几个块可以映射到同一个CPU core。
23.2. 分层调度
分层调度块(当存在时)通常位于发送阶段之前的TX侧。其目的是根据每个网络节点的服务级别协议(SLA)指定的策略来实现不同用户和不同流量类别的数据包传输。
23.2.1. 概述
分层调度类似于网络处理器使用的流量管理,通常实现每个流(或每组流)分组排队和调度。它像缓冲区一样工作,能够在传输之前临时存储大量数据包(入队操作);由于NIC TX正在请求更多的数据包进行传输,所以这些数据包随后被移出,并且随着分组选择逻辑观察预定义的SLA(出队操作)而交给NIC TX。
分层调度针对大量报文队列进行了优化。当只需要少量的队列时,应该使用消息传递队列而不是这个模块。有关更多详细的讨论,请参阅“Worst Case Scenarios for Performance”。
23.2.2. 调度层次
调度层次结构如下图所示。层次结构的第一级是以太网TX端口1/10/40 GbE,后续层次级别定义为子端口,管道,流量类和队列。
通常,每个子端口表示预定义的用户组,而每个管道表示单个用户/订户。每个流量类是具有特定丢失率,延迟和抖动要求(例如语音,视频或数据传输)的不同流量类型的表示。每个队列都承载属于同一用户的同一类型的一个或多个连接的数据包。
下表列出了各层次的功能。
# | Level | Siblings per Parent | Functional Description |
---|---|---|---|
1 | Port | 1.输出以太网端口1/10/40 GbE。2.多个端口以轮询方式调度,所有端口具有相同的优先级。 | |
2 | Subport | Configurable (default: 8) | 1.流量整形使用令牌桶算法(每个子口一个令牌桶)。2.Subport层对每个流量类(TC)强制执行上限。3. 较低优先级的TC能够重用较高优先级的TC当前未使用的子端口带宽。 |
3 | Pipe | Configurable (default: 4K) | 使用令牌桶算法进行流量整形(每个pipe一个令牌桶) |
4 | TC | 4 | 1.相同pipe的TC以严格的优先级顺序处理。2.在pipe级别每TC执行上限。3.较低优先级的TC能够重用当前未被较高优先级的TC使用的pipe带宽。4.当子卡TC超额(配置时间事件)时,管道TC上限被限制为由所有子端口管道共享的动态调整值。 |
5 | Queue | 4 | 根据预定权重,使用加权循环(WRR)对相同TC的队列进行服务。 |
太长了,后续。。。。