创建 Nova 调度器 IO 操作权重器¶
https://blueprints.launchpad.net/nova/+spec/io-ops-weight
添加一个新的 Nova 调度器权重器,根据主机 IO 操作数对过滤后的主机进行排序,旨在将实例启动到工作负载较轻的主机上。
问题描述¶
目前,Nova 调度器可以使用主机内存或指标作为权重来选择启动实例的主机,但拥有大量可用内存的主机可能同时存在许多正在构建、调整大小、快照、迁移、救援或取消保护任务状态的实例,尤其是在某些计算主机内存资源非常不均匀的情况下。例如,我们有两个计算主机,它们拥有足够的可用内存(hostA:64G 和 hostB:10G)来启动实例,默认情况下 Nova 调度器总是选择 hostA 来启动实例,并且不会考虑并发实例任务。io_ops_filter 可以过滤掉工作负载较重的主机,但它无法帮助我们选择最空闲的计算主机来启动。使用 CONF.scheduler_host_subset_size 可以将实例随机分布到合适的计算主机上,但我们认为考虑实例 IO 操作作为权重值会更好。
提议的变更¶
创建一个新的调度器权重器类 ‘IoOpsWeigher’,使用 host_state.num_io_ops 作为权重对象。添加一个新的 CONF.io_ops_weight_multiplier,默认值为 -1.0。
备选方案¶
无
数据模型影响¶
无
REST API 影响¶
无
安全影响¶
无
通知影响¶
无
其他最终用户影响¶
无
性能影响¶
新代码本身会带来一些性能影响,新的调度器权重器 ‘IoOpsWeigher’ 添加了关于主机权重值的新计算逻辑。直接使用 HostState 的属性 ‘num_io_ops’ 不会带来很大的性能影响。
其他部署者影响¶
添加一个新的权重器类 ‘IoOpsWeighter’,默认情况下生效。
在 nova.conf 中添加一个新的配置选项 CONF.io_ops_weight_multiplier,默认值为 -1.0,正数表示优先选择工作负载较重的主机。
开发人员影响¶
无
实现¶
负责人¶
- 主要负责人
<kiwik-chenrui>
工作项¶
添加新的权重器类 ‘IoOpsWeighter’。
添加一些单元测试和 Tempest 测试。
依赖项¶
无
测试¶
将添加关于 ‘IoOpsWeighter’ 的新的单元测试和 Tempest 测试。
文档影响¶
需要编写 ‘IoOpsWeighter’ 的文档,并介绍 nova.conf 中的新配置选项 ‘io_ops_weight_multiplier’,默认值为 -1.0,负数表示优先选择工作负载较轻的计算主机,正数表示相反。
参考资料¶
无