Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

Contrail 服务质量

概述:服务质量

网络中的服务质量 (QoS) 提供了控制可靠性、带宽、延迟和其他流量管理功能的能力。网络流量可以使用 QoS 位(DSCP、802.1p 和 MPLS EXP)进行标记,中间网络交换机和路由器可以使用这些位来提供服务保证。

Contrail QoS 模型

Contrail QoS 模型具有以下功能:

  • 所有数据包转发设备(如 vRouter 和网关)组合在一起形成一个系统。

  • 系统的接口是系统发送和接收数据包的端口,例如分接接口和物理端口。

  • 交换矩阵接口是通过隧道传输叠加流量的地方。

  • QoS 在系统的入口处应用,例如,在从接口到交换矩阵的流量上应用。

  • 在出口处,数据包的隧道标头会被剥离,并基于转发类发送到接口队列。此时不考虑从外部数据包到内部数据包的标记。

结构接口的功能

与其他接口不同,交换矩阵接口始终是共享的。因此,结构接口是通用属性。因此,交换矩阵上的流量等级和 QoS 标记必须由系统管理员控制。管理员可以选择在交换矩阵上预配不同的服务等级。

在 Contrail 中,服务等级由以下两个因素决定:

  • 交换矩阵接口上的队列,包括队列、队列调度和丢弃策略,以及

  • 转发类,一种标记方法,用于控制如何将数据包发送到交换矩阵,包括标记和标识要使用的队列。

租户可以定义其流量可以使用的转发类,从而决定哪些数据包使用哪种转发类。Contrail QoS 配置对象有一个映射表,用于将传入的 DSCP 或 802.1p 值映射到转发类的映射。

QoS 配置还可应用于虚拟网络、接口或网络策略。

用于调配的 QoS 配置参数

Testbed.py 参数

Testbed.py 可用于在版本 3.x.x 之前配置 Contrail。从 Contrail 4.0 开始, testbed.py 仅当使用 SM-Lite 进行演示时才能使用。如果用于 testbed.py 预配,请使用本节中的参数。

对于 QoS,硬件队列(NIC 队列)使用以下键映射到代理中的逻辑队列:

  • hardware_q_id — 硬件队列的标识符。

  • logical_queue— 定义要映射到每个硬件队列的逻辑队列。

  • default — 当设置为 True 时,定义 QoS 的默认硬件队列。

用于定义默认硬件队列的选项:

  • 将队列设置为默认值,不使用任何逻辑队列映射。

    {'hardware_q_id': '1', 'default': 'True'}

  • 使用逻辑队列映射将硬件队列设置为默认值。

    {'hardware_q_id': '6', 'logical_queue':['17-20'], 'default': 'True'}

以下是定义 QoS 优先级组的关键。

  • priority_id - QoS 的优先级组。

  • 调度 — 定义用于优先级组、严格组或轮询 (RR) 的调度算法。

  • bandwidth — 优先级组使用的总硬件队列带宽。

    如果对优先级组使用严格调度,则无法指定带宽,因此将其设置为 0。

示例:QoS 优先级组

队列实现

从 Contrail 3.2 开始,添加了排队功能。虚拟路由器提供基础架构以使用网络接口提供的队列,此方法也称为硬件队列。实现硬件排队的网络接口卡 (NIC) 具有与队列关联的自己的一套调度算法。Contrail 实施旨在与大多数 NIC 配合使用,但是,该方法仅在基于 Intel 的 10G NIC(也称为 Niantic)上进行测试。

按版本划分的 QoS 功能

以下 Contrail 版本中引入了 QoS 功能:

  • 3.1 — QoS 配置和转发类

  • 3.2 - 排队

  • 计划外 — 出口标记和队列

Contrail QoS 配置对象

Contrail QoS 配置对象包括:

  • 转发类

  • QoS 配置对象 (qos-config

转发类对象指定用于标记和排队的参数,包括:

  • 要写入数据包的 DSCP、802.1p 和 MPLS EXP 值。

  • 要用于数据包的队列索引。

QoS 配置对象指定从 DSCP、802.1p 和 MPLS EXP 值到相应转发类的映射。

QoS 配置有一个选项,用于指定默认转发类 ID,用于为所有未指定的 DSCP、802.1p 和 MPLS EXP 值选择转发类。

如果用户未指定默认转发类 ID,则默认为 ID 为 0 的转发类。

处理 QoS 标记的数据包以查找要应用的相应转发类的工作原理如下:

  • 对于 IP 数据包,使用 DSCP 映射。

  • 对于第 2 层数据包,使用 802.1p 映射。

  • 对于指定了 MPLS EXP 值的 MPLS 隧道数据包,EXP 位值将与 MPLS EXP 映射一起使用。

  • 如果 QoS 配置不受信任,则仅指定默认转发类,并且数据包中 DSCP、802.1p 和 EXP 位的所有传入值都将映射到同一个默认转发类。

图 1 显示了 QoS 数据包的处理过程。

图 1:QoS 数据包 Processing of QoS Packets的处理

虚拟机接口、虚拟网络和网络策略可以引用 QoS 配置对象。可以在虚拟主机上指定 QoS 配置对象,以便底层流量也可以进行标记和排队。请参阅 图 2

图 2:引用 QoS 对象 Referring to the QoS Object

示例:将流量映射到转发类

此示例说明如何定义流量转发类,以及如何定义 QoS 配置对象以将 QoS 位映射到转发类。

表 1 显示了定义的两个转发类对象。FC1 使用高优先级值标记流量,并将其排队至队列 0。FC2 将流量标记为尽力而为,并将流量排队到队列 1。

表 1:转发类映射

名字

编号

DSCP

802.1p

MPLS EXP

队列

FC1型

1

10

7

7

0

FC2系列

2

38

0

0

1

表 2 中,QoS 配置对象 DSCP 值 10、18 和 26 映射到一个 ID 为 1 的转发类,即转发类 FC1。所有其他 IP 数据包都映射到编号为 2 的转发类,即 FC2。802.1p 值为 6 或 7 的所有流量都映射到转发类 FC1,其余流量映射到 FC2。

表 2:QoS 配置对象映射

DSCP

转发类 ID

802.1p

转发类 ID

MPLS EXP

转发类 ID

10

1

6

1

5

1

18

1

7

1

7

1

26

1

*

2

*

1

*

2

QoS 配置对象 数据包上的标记

下面介绍在各种情况下如何处理 QoS 配置对象标记。

由虚拟机接口发起的流量

  • 如果虚拟机接口向远程计算节点中的其他虚拟机发送 IP 数据包,则 IP 报头中的 DSCP 值将用于查看 qos-config 表,并且隧道标头标有转发类指定的 DSCP、802.1p 和 MPLS EXP 位。

  • 如果虚拟机发送值为 802.1p 的第 2 层非 IP 数据包,则系统会使用 802.1p 值查看 qos-config 表,并将相应的转发类 DSCP、802.1p 和 MPLS EXP 值写入隧道标头。

  • 如果虚拟机向同一计算节点中的虚拟机发送 IP 数据包,则 IP 报头中的 DSCP 值与 qos-config 表中的 DSCP 值匹配,并且相应的转发类用于用新的 DSCP 和 802.1p 值覆盖 IP 报头。

发往虚拟机接口的流量

对于发往 VMI 的流量,如果收到隧道数据包,则会去除隧道标头,并将数据包发送至接口。从外部数据包到内部数据包不进行任何标记。

来自虚拟主机接口的流量

QoS 配置可应用于来自虚拟主机接口的 IP 流量。数据包中的 DSCP 值用于查看虚拟主机上指定的 qos-config 对象,并覆盖数据包上相应的转发类 DSCP 和 802.1p 值。

来自交换矩阵接口的流量

在计算节点的以太网接口上接收数据包时,可以应用 QoS 配置,并在数据包上覆盖相应的转发类 DSCP 和 802.1p 值。

按级别划分的 QoS 配置优先级

可以在不同的级别指定 QoS 配置。

可以使用 QoS 配置的级别及其优先级顺序:

  1. 在策略中

  2. virtual-network

  3. virtual-machine-interface

排队

Contrail 3.2 版增加了对排队的 QoS 支持。

本节概述了从 Contrail 3.2 开始可用的排队功能。

有关这些主题的更多详细信息,请参阅: https://github.com/Juniper/contrail-controller/wiki/QoS

数据包发送到的队列由转发类指定。

数据通路中的队列选择

在 vRouter 的数据路径中,转发类编号指定需要将数据包发送到的实际物理硬件队列,而不是像 Contrail 的其他部分那样指定到逻辑选择。vRouter 配置文件中有一个映射表,用于将物理队列号与逻辑队列号进行转换。

基于 Linux 内核的 vRouter 中的硬件队列

如果启用了 Xmit-Packet-Steering (XPS),内核将从队列列表中的可用队列中选择队列。如果内核选择了队列,则不会将数据包发送到 vRouter 指定的队列。

要禁用此映射,请执行以下作:

  • 有一个没有CONFIG_XPS选项的内核

  • 将零写入 /sys/class/net//queues/tx-X/xps_cpus 中的映射文件。

禁用此映射时,内核会将数据包发送到特定的硬件队列。

要验证:

请参阅“ethtool -S”命令输出中的单个队列统计信息。

QoS 调度配置参数

下面显示了计算节点上硬件队列的计划配置示例。

可以配置优先级组ID和优先级组对应的调度算法和带宽。

调度算法的可能值包括:

  • 严格

  • RR(轮询)

使用轮询调度时,优先级组可以使用的硬件队列带宽占总带宽的百分比在 bandwidth 参数中指定。

以下配置和预配仅适用于运行 Niantic NIC 和运行基于内核的 vrouter 的计算节点。