跳转到: 导航, 搜索

基于利用率的调度规范

  • Launchpad 条目:NovaSpec:utilization-based-scheduling
  • 创建时间:2012年12月10日
  • 贡献者:Hans Lindgren, Fetahi Wuhib, Rerngvit Yanggratoke, Rolf Stadler

总结

IaaS 提供商根据策略分配云基础设施的资源给客户的实例。这些策略被表达为“管理目标”[1]。云服务提供商采用的具体管理目标取决于多种因素,包括所服务的客户类型、运行的应用程序类型、底层物理基础设施的特性以及提供商所追求的业务战略。作为一个开放的云管理平台,OpenStack 应该支持广泛的此类目标。

OpenStack 中,调度器组件做出最重要的分配决策。因此,实施特定的管理目标需要为该组件设置相应的策略。为了使调度器在资源分配方面做出最佳决策,通常需要最新的资源利用率信息(参见用户故事)。

通过这份蓝图,我们建议对 OpenStack 调度器进行以下增强

  1. 我们扩展了状态报告,以便除了当前可用的静态分配信息外,还将主机的最新资源利用率提供给调度器。这使得调度器能够实现依赖于主机资源利用率的管理目标。
  2. 我们为 FilterScheduler 添加了过滤器和成本函数,这些过滤器和成本函数利用了上述功能

发布说明

最新的资源利用率信息使云提供商能够指定高级管理目标,从而实现更高效的资源利用率。这是强制性的。

原理

OpenStack 目前附带 FilterScheduler 和默认的 compute_fill_first 成本函数,该函数根据未分配的主机内存计算主机成本。这对于默认策略来说是合理的。但是,它无法支持考虑 CPU 资源或基于实际资源利用率的目标的管理目标。

用户故事

  • 云提供商希望确保其主机的 CPU 分配在云中保持平衡,目的是减轻运行应用程序的资源需求意外激增的影响。
  • 云提供商希望通过将负载整合到最少数量的服务器上,从而降低运营成本,将未使用的服务器置于待机模式,从而最大限度地减少总能耗。整合应基于实际资源利用率,以最大限度地节省能源。
  • 云提供商希望为其用户支持两类服务,其中第一类服务中的 VM 保证获得其所需的所有资源,而第二类服务中的 VM 共享剩余资源,以公平的方式。

前提条件

设计

我们设计的关键要求是,最新的主机资源利用率信息必须提供给调度器。为此,我们扩展了当前对计算驱动程序的定期轮询,以包括 CPU 和内存的资源利用率统计信息。(另一种设计可以使用外部收集器向调度器提供此类信息。)

资源跟踪器监控和报告已扩展,以支持添加的统计信息。此外,我们还扩展了其作用,以涵盖统计信息的分析,包括基于传入实例请求的预测。

报告的统计信息使用 ComputeNodeStats 表存储在数据库中,无需更改数据库模式。通过对 host_manager.py 中的 HostState 类进行修改,将统计信息提供给调度器的过滤和加权函数。

实现

代码变更

以下代码更改实现了

  • 驱动程序报告实际资源利用率。
  • ResourceTracker 支持添加的统计信息。
  • FilterScheduler 支持在过滤器和成本函数中使用统计信息。

/nova/virt/libvirt/driver.py

新的方法实现了实际资源利用率统计信息的收集。get_available_resource 已修改为将这些信息包含在结果中。

/nova/compute/resource_tracker.py

定期报告和声明处理已扩展,以包括和使用添加的统计信息。

/nova/compute/stats.py

已更新以支持添加的统计信息。

/nova/scheduler/filters/cpu_usage_filter.py

这个新的过滤器模块实现了基于主机实际 CPU 利用率的过滤。

/nova/scheduler/filters/ram_usage_filter.py

这个新的过滤器模块实现了基于主机实际内存利用率的过滤。

/nova/scheduler/host_manager.py

HostState 进行更改,以便将新的统计信息暴露给调度器的其他部分,例如过滤器和成本函数。

/nova/scheduler/least_cost.py

包含新的成本函数,支持基于主机实际资源利用率的调度。

迁移

新的过滤器和成本函数补充了现有的过滤器和成本函数,其使用通过 nova.conf 中的现有标志进行配置。此外,还添加了一些新的标志来设置新的成本函数的单个权重以及设置主机资源的最大允许利用率。

测试/演示计划

这不必在规范接近 Beta 之前添加或完成。

未解决的问题

这应该突出显示需要在进一步的规范中解决的任何问题,而不是规范本身的问题;因为任何存在问题的规范都无法获得批准。

BoF 议程和讨论

使用本节记录 BoF 期间的笔记;如果将其保留在批准的规范中,请用于总结讨论内容并记录任何被拒绝的选项。

参考文献

[1] Wuhib, F., Stadler, R. & Lindgren, H. (2012). Dynamic Resource Allocation with Management Objectives: Implementation for an OpenStack Cloud. International Conference on Network and Service Management 2012.http://urn.kb.se/resolve?urn=urn:nbn:se:kth:diva-93680