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 配置参数

在 Contrail 网络 5.0 及更高版本中配置 QoS

本节介绍如何在 Contrail 网络 5.0 及更高版本中配置 QoS。

  1. instances.yaml 文件中的虚拟路由器角色下定义硬件队列和优先级组,如下所示。

  2. 在已预配的设置中,在 /etc/contrail/common_vrouter.env 文件中定义 QoS 配置,如以下示例所示。

  3. 执行 execute docker-compose up -d under /etc/contrail/vrouter/ 命令。

队列实现

vRouter 提供基础架构以使用网络接口提供的队列,这种方法也称为硬件队列。实现硬件队列的网络接口卡 (NIC) 有自己的一组与队列关联的计划算法。Contrail 实现旨在与大多数 NIC 配合使用,但是,该方法仅在基于 Intel 的 10G NIC(也称为 Niantic)上进行测试。

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 数据包都映射到 ID 为 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 值写入隧道标头。

  • 如果 VM 将 IP 数据包发送到同一计算节点中的 VM,则转发时不会更改数据包标头。原始数据包保持不变。

发往虚拟机接口的流量

对于发往 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 网络支持 QoS。这些部分概述了 Contrail 网络中可用的排队功能。

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

数据路径中的队列选择

在 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(循环)

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

以下配置和预配仅适用于运行 Niantic NIC 和运行基于内核的虚拟路由器的计算节点。