跳转到: 导航, 搜索

NetworkBandwidthEntitlement

  • Launchpad 条目: NovaSpec:network-bandwidth-entitlement
  • 创建时间: 2013年5月6日
  • 贡献者: Phil Day, HP Cloud Services

[这将重新设计以使用 可扩展资源跟踪]

总结

目前 Nova 的 host_manager 会跟踪每个主机的磁盘、内存和 #_vCPU 资源,这些资源随后可用于调度器过滤器。这些信息也反映在 flavor 定义中。

我们希望扩展此模型,以增加可供此 flavor 的实例使用的网络带宽指标。每个物理主机将报告其总网络带宽容量。这将支持具有混合网络配置(10Gb、多 10Gb 等)的主机,并允许定义和调度“高带宽”实例类型。

此更改涉及多个方面

  • 如何将这些值定义为实例类型的一部分
  • 如何定义相应的物理主机容量
  • 如何将此信息提供给调度器
  • 如何将此信息提供给物理主机上的资源管理层
  • 如何以不破坏现有系统的方式添加此功能,并且可以被不需要/不需要此附加功能的人员忽略


如何将这些值定义为实例类型的一部分 ?

实例类型已经有一个相关的 rxtx_factor,但当前在系统中的使用仅限于 Xen。rxtx_factor (float):受 API 扩展支持。传递到 Nova Networking 和 Quantum API。在 Nova Network 中,它用于通过与网络的 rxtx_base 因子相乘来计算实例的 rxtx_cap。然后 rxtx_cap 在 Xen 驱动程序中用于为 VIF 设置速率限制上限。

存在的问题

  • rxtx_factor 用作逻辑网络的缩放因子(即 Nova DB 中 Network 的属性),不考虑主机配置。
  • rxtx_factor 意味着实例类型根据其连接的网络获得不同的容量
  • 它被认为是 host_manager 跟踪的易变资源。

对于网络带宽,我们真正想要的是将 rxtx_cap 作为 rxtx_factor 的替代方案。然后我们需要将其传递给 Quantum

我们还需要为这些新属性提供配额控制


如何定义相应的物理主机容量

总主机网络带宽容量同样很难自动推断。主机的物理 NIC 可能以多种不同的方式呈现给 Nova。

为每个主机添加一个 total_rxtx 属性,该属性描述了可供实例使用的总带宽。

值将从 nova.conf 读取并保存在 compute_nodes 表中


如何将此信息提供给调度器 

rxtx_total 是每个主机的属性,消耗的 rxtx 是每个实例类型 rxtx_cap 的总和。(这意味着 rxtx_cap 聚合到所有 NIC 上)

将创建一个新的调度器过滤器来应用网络带宽容量。

随着越来越多的资源类型被管理,可能需要不同的加权函数(例如,按消耗最多的资源的消耗百分比排名,而不仅仅是内存)

rxtx_factor 的可见性已经通过其自身的 API 扩展进行控制,这在 API 层是好的。但是,由于我们希望调度器将这些因素考虑在内,这是否意味着调度器现在需要知道启用了哪些 API 扩展 ?


如何将此信息提供给物理主机上的资源管理层

这实际上是一个 hypervisor / quantum 驱动程序实现问题。(例如,Xen 驱动程序已经具有其实现和对 vcpu_weight 的解释)。通常,每个 hypervisor 驱动程序都需要转换为适合其资源管理系统的单位(例如,vcpu_weight/cpu_base)。

当前的实例类型属性(#vcpus、内存)易于转换为 VM 定义。带宽可能不太容易,因为不同的云提供商可能对实现有不同的看法(共享与上限)。

问:这其中有多少可以直接在 Hypervisor 层处理 ? 有太多的实现方式(共享与配额、限制哪些线程等),任何内置模型都需要太多的配置选项才能满足每个人的需求。

相反,我们更喜欢一种更简单的方法,即使 flavor 数据可用,并让外部脚本对其进行操作。例如:确保所有 flavor 数据都在通知消息中 创建实例目录中的一个附加文件,其中包含所有 flavor 值


如何以不破坏现有系统的方式添加此功能,并且可以被不需要/不需要此附加功能的人员忽略

  • 为主机属性提供默认值(例如,cpu_base=100,vcpu_weight=100)
  • 新的调度器过滤器可以默认情况下从调度器中排除
  • 使 flavor 数据可供外部资源管理使用,避免尝试在 hypervisor 驱动程序中构建通用方法
  • 与 Xen 的兼容性需要工作(假设我们重用 vcpu_weight 并添加 rxtx_cap 属性)