跳转到: 导航, 搜索

Neutron/QoSforLinuxBridge

简介

QoS API 正在 icehouse 版本中开发。目前仅针对 openvswitch 插件有实现。

此页面旨在描述 linuxbridge 的 QoS 实现计划。

蓝图

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,以解决上述复杂问题。