Neutron/QoSforLinuxBridge
< Neutron
简介
QoS API 正在 icehouse 版本中开发。目前仅针对 openvswitch 插件有实现。
此页面旨在描述 linuxbridge 的 QoS 实现计划。
蓝图
概述
通常需要控制租户端口到物理 NIC 的出站流量,以防止租户占用 NIC 的带宽。
此 BP 将允许通过 QoS API 为 linuxbridge 的端口(或网络)设置流量控制参数。在代理端,linuxbrige 代理使用 tc(8) 函数将流量控制参数应用于端口的物理接口。
API
'type' 属性接受 'ratelimit'。
'policy' 属性包含三个键,'tc_rate'、'tc_latency' 和 'tc_burst',它们分别对应于 tc(8) 命令的 'rate'、'latency' 和 'burst' 参数。
示例
'qos': {'type': 'ratelimit',
'policy': {'tc_rate': '100mbit', 'tc_latency': '50ms', 'tc_burst': '3000k'}}
实现
linuxbridge 插件已合并到 ML2 插件。
此 BP 的范围仅限于 linuxbridge 代理。BP ml2-qos 预计将 QoS 扩展实现到 ML2 插件中。
linuxbridge 代理的实现策略很简单
- 当端口的接口出现时,通过 RPC 从 neutron-server 获取端口的 QoS 参数,并向接口发出 tc 命令。
- 当收到更新 QoS (RPC) 的通知时,执行相应的操作(例如,为端口设置或清除流量控制)。
讨论
虽然 QoS API 允许为网络设置 QoS,但对于 linuxbridge 端口,流量控制是基于每个端口的。
- 与其忽略网络的 QoS,我计划将其用作没有 QoS 设置的端口的默认值。
- 当收到网络 QoS 更新的通知时,相应的 linuxbridge 代理需要获取主机网络上的所有端口的 QoS 策略,以便使用默认值更新端口的设置。这是 linuxbridge 实现中比较复杂的部分。
- linuxbridge 代理需要在主机上出现接口时为其设置 QoS 参数,因此通过 'get_device_details' RPC 获取的信息应包括 QoS 策略参数。 此外,如果端口没有 QoS 设置,但端口的网络具有 QoS 设置,'get_device_details' 应包含网络的 QoS,以解决上述复杂问题。