跳转到: 导航, 搜索

HeterogeneousArchitectureScheduler

总结

Nova 应该支持 CPU 架构、加速器架构和网络接口,并能够将 run_instances() 请求路由到能够运行该架构的计算节点。此蓝图依赖于 HeterogeneousInstanceTypes 蓝图中所述的模式变更。目标发布版本是 Diablo。现在已经有稳定的测试分支和部署可用。

USC-ISI 团队在此处提供了一个功能原型

此蓝图与 HeterogeneousInstanceTypes 蓝图相关

我们还在起草三种机器类型的蓝图

有一个 etherpad 用于讨论此蓝图,地址为 http://etherpad.openstack.org/heterogeneousarchitecturescheduler

发布说明

Nova 已扩展,允许部署广告并允许用户使用实例类型(或风味)作为主要机制来请求特定的处理器、加速器和网络接口选项。此蓝图是用于支持将 run_instance 请求路由到适当的物理计算节点的调度器插件。

原理

请参阅 HeterogeneousInstanceTypes。简而言之,实际部署将具有异构资源。

有几个相关的蓝图

用户故事

请参阅 HeterogeneousInstanceTypes

George 有两个不同的处理集群,一个 x86_64,另一个 Power7。这两个 run_instances 命令需要发送到适当的计算节点。此外,nova 应该防止用户无意地将 x86_64 机器镜像指定为在 Power7 计算节点上运行,反之亦然。调度器应该检查不一致性。

euca-run-instances -t p7f.grande -k fred-keypair emi-12345678
euca-run-instances -t m1.xlarge -k fred-keypair emi-87654321


前提条件

假设 OpenStack 在目标硬件架构或代表目标硬件架构运行的代理上运行。有关我们团队正在做什么,请参阅上面的相关蓝图。

我们还假设创建了 instance_type_extra_spec。cpu_info、xpu_arch、xpu_info、xpus、net_arch、net_info 和 net_mbps 是插入 instance_type_extra_spec 和 instance_metadata 表中的示例键。

设计

请参阅 HeterogeneousInstanceTypes

感知架构的调度器会将 instance_type_extra_spec 表、instance 表和 instance_metadata 字段中的任何键值与 zone_manager 报告的功能进行比较。为了启动实例化,必须匹配所有这些功能。

nova 中的基本调度器流程如下

  1. nova-compute 在主机上启动,并将架构、加速器和网络功能注册到 zone_manager (scheduler/zone_manager.py)。数据存储在内存中(不在数据库中)。功能信息会定期刷新(默认值为 1 分钟)。这里没有变化。
  2. nova-api 接收带有实例类型字符串 "m1.small" 或 "m1.small;xpu_arch=fermi;xpus=2" 的 run-instances 请求。这里没有变化。
  3. api/ec2/cloud.py run_instances() 获取实例类型字符串并从 instance_type 表中检索详细信息。这里没有变化
  4. 实例类型的详细信息以字典形式发送到 compute/api.py create()。这里没有变化。
  5. nova-api compute/api.py create() 将行添加到 instances 表中。这里没有变化。
  6. nova-api 执行 rpc.cast() 到调度器 num_instances 次,传递 instance_id。这里没有变化。
  7. nova-scheduler 作为架构调度器,选择与 instance_type_extra_spec 表、instance 表和 instance_metadata 字段中指定的选项匹配的 compute_service 主机。架构调度器通过 instance_type 表中的字段以及 instance_type_extra_spec 表中的所有标准来过滤可用的 compute_nodes。
  8. nova-scheduler rpc.cast() 到每个选定的计算服务。
  9. nova-compute 接收带有 instance_id 的 rpc.cast(),启动虚拟机等。

Schema 变更

添加了一个新的表 instance_type_extra_table 来指定所需的额外字段。该表具有 id、key、value、instance_type_id 和 instance_type 字段。

实现

USC-ISI 团队有一个功能原型

https://code.launchpad.net/~usc-isi/nova/hpc-trunk

https://code.launchpad.net/~usc-isi/nova/hpc-testing

https://code.launchpad.net/~usc-isi/nova/hetero

UI 变更

通过在 nova.conf 中选择调度器来访问功能

scheduler_driver = nova.scheduler.arch.ArchitectureScheduler


可以在 instance_type_extra_specs 表中指定额外的约束。用户无需了解 instance_type_extra_specs 表。用户只需像往常一样使用实例类型,例如 "cg1.small",因为云提供商会填充该表,并且云软件会自动使用该表。

限制

instance_type_extra_specs 中的所有新约束目前都基于匹配。目前无法进行不等式比较。我们计划很快添加此功能。

代码变更

变更摘要

  • nova/scheduler/arch.py
   - Implements the architecture aware scheduler.
  • api/ec2/cloud.py

迁移

在部署使用此功能方面,几乎不需要进行更改。

测试/演示计划

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

未解决的问题

无。

BoF 议程和讨论

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