HeterogeneousArchitectureScheduler
- Launchpad 条目: NovaSpec:schedule-instances-on-heterogeneous-architectures
- 创建者: Brian Schott
- 维护者:Jinwoo "Joseph" Suh
- 贡献者: USC 信息科学研究所
目录
总结
Nova 应该支持 CPU 架构、加速器架构和网络接口,并能够将 run_instances() 请求路由到能够运行该架构的计算节点。此蓝图依赖于 HeterogeneousInstanceTypes 蓝图中所述的模式变更。目标发布版本是 Diablo。现在已经有稳定的测试分支和部署可用。
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 (合并候选版本)
此蓝图与 HeterogeneousInstanceTypes 蓝图相关
我们还在起草三种机器类型的蓝图
- https://wiki.openstack.org/HeterogeneousGpuAcceleratorSupport
- https://wiki.openstack.org/HeterogeneousSgiUltraVioletSupport
- https://wiki.openstack.org/HeterogeneousTileraSupport
有一个 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 中的基本调度器流程如下
- nova-compute 在主机上启动,并将架构、加速器和网络功能注册到 zone_manager (scheduler/zone_manager.py)。数据存储在内存中(不在数据库中)。功能信息会定期刷新(默认值为 1 分钟)。这里没有变化。
- nova-api 接收带有实例类型字符串 "m1.small" 或 "m1.small;xpu_arch=fermi;xpus=2" 的 run-instances 请求。这里没有变化。
- api/ec2/cloud.py run_instances() 获取实例类型字符串并从 instance_type 表中检索详细信息。这里没有变化
- 实例类型的详细信息以字典形式发送到 compute/api.py create()。这里没有变化。
- nova-api compute/api.py create() 将行添加到 instances 表中。这里没有变化。
- nova-api 执行 rpc.cast() 到调度器 num_instances 次,传递 instance_id。这里没有变化。
- nova-scheduler 作为架构调度器,选择与 instance_type_extra_spec 表、instance 表和 instance_metadata 字段中指定的选项匹配的 compute_service 主机。架构调度器通过 instance_type 表中的字段以及 instance_type_extra_spec 表中的所有标准来过滤可用的 compute_nodes。
- nova-scheduler rpc.cast() 到每个选定的计算服务。
- 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 期间的笔记;如果将其保留在批准的规范中,请用于总结讨论内容并记录任何被拒绝的选项。