QoS 最小出站带宽支持¶
RFE: https://bugs.launchpad.net/neutron/+bug/1560963
问题描述¶
当前的 QoS API [1] 不提供定义每个端口保证的最小出站带宽的功能。本提案讨论了通过添加保证的最小出站带宽来增强现有的 QoS API。
此功能目前受以下支持:
提议的变更¶
拟议的更改是对 QoS API 和上述驱动程序(Open vSwitch、Linux Bridge 和 SR-IOV)的更新,以支持最小出站带宽保证。带宽值将存储为整数值,有效值大于零。单位为 kbps,与 QosBandwidthLimitRule 中使用的单位相同。
此功能的范围是启用对出站最小带宽值的 API 访问,并在前面注释的驱动程序中启用此功能。此功能不提供一种方法来报告后端容量或检查带宽可用性。这些限制将在用户和开发人员指南中记录。
数据模型影响¶
该模型遵循 QoS 带宽限制功能应用于 QoS 策略的方式,通过添加 QosMinimumBandwidthRule 表格。
QosMinimumBandwidthRule 模型如下所示:
+--------------+-------+----------+--------+-----------------+------------+
|Attribute |Type |Access |Default |Validation/ |Description |
|Name | | |Value |Conversion | |
+==============+=======+==========+========+=================+============+
|id |string |RO, all |generat_|uuid |identity |
| |(UUID) | |ed | | |
+--------------+-------+----------+--------+-----------------+------------+
|qos_policy_id |string |RO, all |N/A |uuid |QoSPolicy |
| |(UUID) | | | |reference |
+--------------+-------+----------+--------+-----------------+------------+
|min_kbps |integer|RW, tenant|N/A |not negative, |Minimum |
| | | | |<= max_kbps |bandwidth |
+--------------+-------+----------+--------+-----------------+------------+
|direction |enum |RW, tenant|'egress'|'egress' |Traffic |
| | | | | |direction |
+--------------+-------+----------+--------+-----------------+------------+
如果“max_kbps”为 None,则“min_kbps”的验证检查将不适用。
此 QoS 规则可以与在 Neutron QoS API 模型和扩展 [4] 中定义的 QoS 带宽限制规则结合使用。
“qos_policy_id”和“direction”都将链接为唯一的约束集,因为这两个参数的组合必须是唯一的。
此 QoS 规则将具有一个“direction”参数来定义流量的方向。此新功能将仅实现出站流量整形。“ingress”流量方向暂时不允许。
REST API 影响¶
拟议属性
SUB_RESOURCE_ATTRIBUTE_MAP = {
'minimum_bandwidth_rules':{
'parent': {'collection_name': 'policies',
'member_name': 'policy'},
'parameters': dict(QOS_RULE_COMMON_FIELDS,
**{'min_kbps': {
'allow_post': True, 'allow_put': True,
'convert_to': attr.convert_to_int,
'is_visible': True, 'default': None,
'validate': {'type:non_negative': None,
'type:values': max_kbps}}
}),
**{'direction': {
'allow_post': True, 'allow_put': True,
'is_visible': True, 'default': 'egress',
'validate': {'type:values': common_constants.
EGRESS_DIRECTION}}
}),
}
}
示例 REST 调用
GET /v2.0/qos/policies
Response:
{
"policy": {
"name": "TypeOne",
"description": "This policy sets a minimum bandwidth for type one users",
"shared": "False"
}
}
GET /v2.0/qos/policies/<policy-uuid>
Response:
{
"policy": {
"tenant_id": "<tenant-id>",
"id": "<id>",
"name": "TypeOne",
"description": "This policy sets a minimum bandwidth for type one users",
"shared": False,
"rules": [{
"id": "<id>",
"policy_id": "<policy-uuid>",
"rule_type": neutron.services.qos.RULE_TYPE_MINIMUM_BANDWIDTH
"min_kbps": 10000,
"direction": "egress"
}]
}
}
POST /v2.0/qos/policies/<policy-uuid>/minimum_bandwidth_rules/
{
"minimum_bandwidth_rule": {
"min_kbps": 20000,
"direction": "egress"
}
}
Response:
{
"minimum_bandwidth_rule":{
"id": "<id>",
"policy_id": "<policy-uuid>",
"min_kbps": 20000,
"direction": "egress"
}
}
PUT /v2.0/qos/policies/<policy-uuid>/minimum_bandwidth_rules/<rule-uuid>
{
"minimum_bandwidth_rule": {
"min_kbps": 10000,
"direction": "egress"
}
}
Response:
{
"minimum_bandwidth_rule":{
"id": "<id>",
"policy_id": "<policy-uuid>",
"min_egress_kbps": 10000,
"direction": "egress"
}
}
命令行客户端影响¶
qos-minimum-bandwidth-rule-create <policy-id> –min-kbps <value> –direction <value>
qos-minimum-bandwidth-rule-show <rule-id> <policy-id>
qos-minimum-bandwidth-rule-list <policy-id>
qos-minimum-bandwidth-rule-update <rule-id> <policy-id> –min-kbps <value> –direction <value>
qos-minimum-bandwidth-rule-delete <rule-id> <policy-id>
安全影响¶
无
通知影响¶
无
性能影响¶
无
IPv6 影响¶
无
其他部署者影响¶
部署者可能需要配置特定的 QoS 驱动程序 / ML2 代理扩展。
开发人员影响¶
无
社区影响¶
无
实现¶
负责人¶
Rodolfo Alonso Hernandez
Miguel Angel Ajo
Hirofumi Ichihara
Moshe Levi
工作项¶
新规则类型的版本化 DB 对象
允许修改最小出站带宽的 API 更改
允许设置最小出站带宽值的客户端更改
QoS Openflow 集成到 L2 代理扩展中,用于 Open vSwitch 驱动程序,以启用最小出站带宽支持
添加/修改交换流以标记数据包处理队列。
在集成桥接、物理桥接和隧道桥接中添加/修改 QoS 规则和处理队列。
QoS 流量控制集成到 L2 代理扩展中,用于 Linux Bridge 驱动程序以启用此功能。
QoS ip-link 集成到 L2 代理扩展中,用于 SR-IOV 驱动程序以启用此功能。添加一个健全性检查以检测 ip-link 工具的版本;所需的最低版本是 3.16.0。
Open vSwitch 驱动程序¶
当前的 Open vSwitch QoS 实现仅整形出站流量。
Linux Bridge 驱动程序¶
当前的 Linux Bridge QoS 实现使用流量控制 (TC) 仅整形出站流量(从接口角度来看)。要整形从接口角度来看的入站流量(从实例出站),本功能需要以下步骤:
使用 TC 规则将所有入站流量发送到此 IFB,对其进行镜像。此流量将作为出站流量发送到此 IFB。
在此 IFB 中添加一个 qdisc 和一个类,并带有 QoS 过滤器。
此外,所使用的算法 TBF [6] 必须由 HTB [2] 替换,这是一种类算法,允许设置“rate”参数,该参数定义为“此类及其所有子类保证的最大速率”。
未来工作¶
实现一种将后端容量报告给 Neutron 的方法。可以采用几种方法来实现此功能:
使用代理定期读取后端的容量,使用配置文件、监控系统等。代理状态报告可用于此目的。信息也可以来自系统检查,并启用覆盖代理配置文件中详细信息的选项。带宽映射应为每个物理网络,并且我们必须考虑一个特殊之处:连接到物理网络可以通过几个未绑定的接口发生(例如,SR-IOV 卡具有多个 PF(具有它自己的电缆)连接到交换机)。这实际上会为同一个网络提供不同的连接资源,这些资源会单独耗尽。这是最佳选项。
在部署过程中使用静态文件手动插入后端容量。
启用 API 以手动插入后端容量。API 可用于测试和开发目的,但应避免此选项。
将后端总容量和 QoS 最小出站带宽规则告知 Nova Scheduler,以改进 Scheduler 决策。此功能由 [RFE] 严格的最小带宽支持(出站) [7] 解决。
依赖项¶
无
测试¶
API 测试¶
创建最小出站带宽值
更新最小出站带宽值
删除最小出站带宽值
列出最小出站带宽值
显示最小出站带宽值
功能测试¶
将使用功能测试来验证系统交互
设置最小出站带宽值
更新最小出站带宽值
删除最小出站带宽值
列出最小出站带宽值
Fullstack 测试¶
通过 API 在端口上设置第一个实例的 QoS 策略,用于最小出站带宽,对后端进行查询并检查存储值的正确性。
更新 QoS 策略并再次检查值。
删除 QoS 策略并验证与规则相关的所有值都已删除。
没有基准测试。
文档影响¶
用户文档¶
开发人员文档¶
现有的 QoS devref 文档 [10] 将针对此功能进行更新。
API 文档¶
现有的 QoS API 文档 [11] 将针对此功能进行更新。