HeterogeneousTileraSupport
- Launchpad 条目: NovaSpec:heterogeneous-tilera-architecture-support
- 创建者: Brian Schott
- 维护者:Mikyung Kang
- 贡献者: USC 信息科学研究所
目录
总结
此蓝图建议在 OpenStack 中添加对 Tilera 平铺处理器的机器的支持,作为一种替代的机器类型。此蓝图依赖于 HeterogeneousInstanceTypes 蓝图中所述的模式更改,以及 HeterogeneousArchitectureScheduler 中的调度器。
目标发布版本是 Essex
- Nova 上游: https://github.com/openstack/nova/tree/stable/essex
- ISI github: https://github.com/usc-isi/nova/tree/hpc-trunk-essex
Folsom 分支在这里
- Nova 上游: https://github.com/openstack/nova
- ISI github: https://github.com/usc-isi/nova (正在工作)
此蓝图与 HeterogeneousInstanceTypes 蓝图相关
我们还在为其他机器类型起草蓝图
- https://wiki.openstack.org/HeterogeneousGpuAcceleratorSupport
- https://wiki.openstack.org/HeterogeneousSgiUltraVioletSupport
有一个 etherpad 可用于讨论此蓝图,地址为 http://etherpad.openstack.org/heterogeneoustilerasupport
发布说明
Nova 已扩展为支持不可虚拟化的架构,例如 Tilera TILEmpower 平台 (TILEPro64 处理器)。
原理
请参阅 HeterogeneousInstanceTypes。
用户故事
Jackie 有一个应用程序,想要在不支持 KVM 或 XEN 的 CPU 上运行。例如,她想在不支持 KVM 或 XEN 的 TILEmpower 板上运行该应用程序。她选择 tp64.8x8 实例类型,该类型提供对具有 64 个内核的 TILEPro64 处理器的 TILEmpower 板的访问权限。
$ euca-run-instances -k $key -t tp64.8x8 ami-5c86a016
$ ssh -i key.pem $Given_Tilera_IP_address
前提条件
此蓝图依赖于 tp64.8x8 成为一个可选择的实例类型,并且调度器知道此实例必须路由到 TILEmpower 板。请参阅 HeterogeneousArchitectureScheduler。
设计
支持非x86架构
一些对技术计算用户感兴趣的(基于非x86的)机器架构对虚拟化支持较差或根本没有支持。例如,我们的异构目标 Tilera Linux (MDE-3.0) 尚未支持 KVM 或 Xen 虚拟化。
在云环境中配置硬件的一种替代虚拟化方法是进行裸机配置:在将控制权交给用户之前,重新启动机器以使用新的系统镜像,并在用户完成资源使用后擦除本地硬盘驱动器。
为了通过 OpenStack 支持 Tilera 架构,我们开发了一个代理计算节点实现,我们的定制 nova-compute 服务充当前端,将节点请求代理到 Tilera 特定的后端,该后端根据需要进行裸机配置节点。
我们的意图是最终支持不同的配置后端。有几种配置工具可用,例如 Dell 的 crowbar,作为 opscode 的 Chef 系统的扩展,Argonne 国家实验室的 Heckle,xCat,Perceus,OSCAR 和 ROCKS。这些工具为不同的架构提供不同的裸机配置、部署、资源管理和身份验证方法。这些工具使用标准接口,例如 PXE(预启动执行环境)引导和 IPMI(智能平台管理接口)电源循环管理模块。对于不支持 PXE 和 IPMI 的板卡,例如 TILEmpower 板卡,必须编写特定的后端。
对于支持非x86架构(例如TILERA),应设计代理计算节点。
x86 代理计算节点通过网络连接到 TILEmpower 板卡。一个代理计算节点可以处理多个 TILEmpower 板卡。TILEmpower 板卡连接到网络,以便实例在 TILEmpower 板卡上启动后,云用户可以直接通过 ssh 访问它们。TILEmpower 板卡配置为可 tftp 引导或 nfs 引导。代理计算节点充当 TILEmpower 板卡的 tftp/nfs 服务器。在代理计算节点从镜像服务器接收到实例镜像后,它会唤醒 TILEmpower 板卡并控制其引导。一旦 TILEmpower 板卡引导完成,代理计算节点除了板卡的终止/重新启动/关机/开机外,什么也不做。一旦 Tilera 实例正在运行,用户可以通过 ssh 访问 TILEmpower 板卡,而不是代理计算节点。在这里,我们假设代理计算节点可以使用 PDU(电源分配单元)远程打开/关闭 TILEmpower 板卡。下图详细描述了该过程。
代理计算节点将依赖于代理计算节点的系统信息保存在 /tftpboot/architecure_information_file 文件中(例如,tilera_boards)。该文件包含板卡的静态信息,例如 MAC 地址、处理器类型、内存大小、磁盘大小。它用于处理动态信息,例如板卡的状态(关机/引导/运行/关机)以及如果板卡正在运行实例的 instance_id。代理计算节点负责跟踪相关系统的状态。
1. 代理计算节点的 TFTP 设置
$ vi /etc/xinetd.d/tftp
service tftp
{
protocol = udp
port = 69
socket_type = dgram
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = /tftpboot
disable = no
}
$ /etc/init.d/xinetd restart
2. 代理计算节点中的文件准备:/tftpboot
Copy the following files to /tftpboot: • vmlinuz // linux image • initrd // init ramfile system • disk // file system image • architecture_information_file (ex. tilera_boards) • pdu_mgr
2.1 Example of architecture_information_file: /tftpboot/tilera_boards : Proxy Compute Node manages TILEmpower board information (board_id, board_ip_address, board_mac_address, board_hw_description, etc.) using this tilera_boards file.
# board_id ip_address mac_address vcpus memory_mb local_gb memory_mb_used logcal_gb_used hv_type hv_ver cpu_info
0 10.0.2.1 00:1A:CA:00:57:90 10 16218 917 476 1 tilera_hv 1 \
{"vendor":"tilera","model":"TILEmpower","arch":"TILEPro64", \
"features":["8x8Grid","32bVLIW","5.6MBCache","443BOPS","37TbMesh", \
"700MHz-866MHz","4DDR2","2XAUIMAC/PHY","2GbEMAC"],"topology":{"cores":"64"}}
1 10.0.2.2 00:1A:CA:00:58:98 10 16218 917 476 1 tilera_hv 1 \
{"vendor":"tilera","model":"TILEmpower","arch":"TILEPro64", \
"features":["8x8Grid","32bVLIW","5.6MBCache","443BOPS","37TbMesh", \
"700MHz-866MHz","4DDR2","2XAUIMAC/PHY","2GbEMAC"],"topology":{"cores":"64"}}
2 10.0.2.3 00:1A:CA:00:58:50 10 16218 917 476 1 tilera_hv 1 \
{"vendor":"tilera","model":"TILEmpower","arch":"TILEPro64", \
"features":["8x8Grid","32bVLIW","5.6MBCache","443BOPS","37TbMesh", \
"700MHz-866MHz","4DDR2","2XAUIMAC/PHY","2GbEMAC"],"topology":{"cores":"64"}}
3 10.0.2.4 00:1A:CA:00:57:A8 10 16218 917 476 1 tilera_hv 1 \
{"vendor":"tilera","model":"TILEmpower","arch":"TILEPro64", \
"features":["8x8Grid","32bVLIW","5.6MBCache","443BOPS","37TbMesh", \
"700MHz-866MHz","4DDR2","2XAUIMAC/PHY","2GbEMAC"],"topology":{"cores":"64"}}
4 10.0.2.5 00:1A:CA:00:58:AA 10 16218 917 476 1 tilera_hv 1 \
{"vendor":"tilera","model":"TILEmpower","arch":"TILEPro64", \
"features":["8x8Grid","32bVLIW","5.6MBCache","443BOPS","37TbMesh", \
"700MHz-866MHz","4DDR2","2XAUIMAC/PHY","2GbEMAC"],"topology":{"cores":"64"}}
5 10.0.2.6 00:1A:CA:00:58:2C 10 16218 917 476 1 tilera_hv 1 \
{"vendor":"tilera","model":"TILEmpower","arch":"TILEPro64", \
"features":["8x8Grid","32bVLIW","5.6MBCache","443BOPS","37TbMesh", \
"700MHz-866MHz","4DDR2","2XAUIMAC/PHY","2GbEMAC"],"topology":{"cores":"64"}}
6 10.0.2.7 00:1A:CA:00:58:5C 10 16218 917 476 1 tilera_hv 1 \
{"vendor":"tilera","model":"TILEmpower","arch":"TILEPro64", \
"features":["8x8Grid","32bVLIW","5.6MBCache","443BOPS","37TbMesh", \
"700MHz-866MHz","4DDR2","2XAUIMAC/PHY","2GbEMAC"],"topology":{"cores":"64"}}
7 10.0.2.8 00:1A:CA:00:58:A4 10 16218 917 476 1 tilera_hv 1 \
{"vendor":"tilera","model":"TILEmpower","arch":"TILEPro64", \
"features":["8x8Grid","32bVLIW","5.6MBCache","443BOPS","37TbMesh", \
"700MHz-866MHz","4DDR2","2XAUIMAC/PHY","2GbEMAC"],"topology":{"cores":"64"}}
8 10.0.2.9 00:1A:CA:00:58:1A 10 16218 917 476 1 tilera_hv 1 \
{"vendor":"tilera","model":"TILEmpower","arch":"TILEPro64", \
"features":["8x8Grid","32bVLIW","5.6MBCache","443BOPS","37TbMesh", \
"700MHz-866MHz","4DDR2","2XAUIMAC/PHY","2GbEMAC"],"topology":{"cores":"64"}}
9 10.0.2.10 00:1A:CA:00:58:38 10 16385 1000 0 0 tilera_hv 1 \
{"vendor":"tilera","model":"TILEmpower","arch":"TILEPro64", \
"features":["8x8Grid","32bVLIW","5.6MBCache","443BOPS","37TbMesh", \
"700MHz-866MHz","4DDR2","2XAUIMAC/PHY","2GbEMAC"],"topology":{"cores":"64"}}
2.2 pdu-mgr : PDU(Power Distribute Unit)-controlling EXPECT script for remote power-on/off/reboot
TILEmpower 板卡的裸机实现中的模式更改
我们建议将以下默认值添加到 instance_types 表中。
't64.8x8': dict(memory_mb=16384, vcpus=1, local_gb=500,
flavorid=301,
cpu_arch="tile64",
cpu_info='{"geometry":"8x8"}'),
'tp64.8x8': dict(memory_mb=16384, vcpus=1, local_gb=500,
flavorid=302,
cpu_arch="tilepro64",
cpu_info='{"geometry":"8x8"}'),
'tgx.4x4': dict(memory_mb=16384, vcpus=1, local_gb=500,
flavorid=303,
cpu_arch="tile-gx16",
cpu_info='{"geometry":"4x4"}'),
'tgx.6x6': dict(memory_mb=16384, vcpus=1, local_gb=500,
flavorid=304,
cpu_arch="tile-gx36",
cpu_info='{"geometry":"6x6"}'),
'tgx.8x8': dict(memory_mb=16384, vcpus=1, local_gb=500,
flavorid=305,
cpu_arch="tile-gx64",
cpu_info='{"geometry":"8x8"}'),
'tgx.10x10': dict(memory_mb=16384, vcpus=1, local_gb=500,
flavorid=306,
cpu_arch="tile-gx100",
cpu_info='{"geometry":"10x10"}')
TILEmpower 板卡的裸机实现中的代理计算节点 (nova/virt/tilera.py)
下图所示的 Tilera 计算节点是代理计算节点的示例。在将实例和域的状态设置为 Pending 后,代理计算节点设置 vmlinux。如果板卡上的 CF(Compact Flash)中已经设置了 vmlinux,则不需要此步骤。x 表示 board_id。mboot-run 通过 nfs root 设置 tilera 文件系统,为相应的板卡提供 nfs root 目录。之后,代理计算节点将实例状态和域状态设置为 Running。然后用户可以通过 ssh 访问板卡。
选项 1:nfs 可引导(当前 nova 代码支持选项 1)
对于选项 2,x 表示 board_id,1 表示第一次使用 vmlinux 镜像引导,该镜像设置 TLR_ROOT=tmpfs。默认情况下,rootfs 复制到大小限制为总内存一半的 tmpfs。在第一次通过 tftp 下载 vmlinux 的 mboot-run 之后,代理计算节点将压缩的 tilera 文件系统上传到内存,将 /dev/sda1 挂载到 /mnt,并将上传的 tilera 文件系统解压缩到 /mnt 磁盘空间。然后代理计算节点将 vmlinux_x_2 复制到 vmlinux_x。x 表示 board_id,2 表示第二次使用 vmlinux 镜像引导,该镜像设置 TLR_ROOT=/dev/sda1。在第二次 mboot-run 之后,rootfs 设置为 /dev/sda1。之后,代理计算节点将实例状态和域状态设置为 Running。然后用户可以通过 ssh 访问板卡。
选项 2:tftp 可引导(以前的 nova 代码支持选项 2)
实现
USC-ISI 团队有一个功能原型:https://github.com/usc-isi/nova/tree/hpc-testing
代理计算节点应实现为 virt/baremetal/proxy.py、virt/baremetal/dom.py 和 specific_architecture.py(例如,tilera.py 或 arm.py)。proxy.py 代码可以描述不可虚拟化架构的 Connection 类,dom.py 代码可以描述与域相关的模块,并且特定的架构调用可以在 proxy.py 和 dom.py 代码中调用。
UI 变更
以下内容将作为新的默认实例类型提供。
Tilera TILEPro64
- API 名称:tp64.8x8
- TILEPro64 处理器:64(8x8)内核
- 16 GB RAM(16384 MB)
- 1 TB 的实例存储
- http://www.tilera.com/
(目前只有一个 Tilera 实例类型。当 KVM 支持出现时,我们将添加其他类型以支持分区为较小的实例)
[代码更改]
这些代码已经合并到 nova 上游。
- nova/virt/connection.py
- 添加 tilera connection_type
- nova/virt/baremetal/init.py
- nova/virt/baremetal/proxy.py --> 命名已更改以与 libvirt/xen 连接同步 --> driver.py
- 类似于 nova/virt/libvirt/connection.py,但处理域的方式不同
- nova/virt/baremetal/dom.py
- 对于不同的域管理,该部分被分离到 BareMetalDom [dom.py]。BareMetalDom 需要像 libvirt 对 KVM 或 Xen 那样管理域状态。由于 baremetal 域不受 libvirt 支持,因此使用文件 I/O 编写了新的虚拟域管理方法。这可以升级或由新的域管理器使用。
- nova/virt/baremetal/nodes.py
- 选择后端。例如,tilera.py、fake.py、arm.py 或 pxe.py。
- nova/virt/baremetal/tilera.py
- Tilera 驱动程序 [tilera.py] 是几个裸机类型中的一个示例。裸机类型可以是 tilera、arm 或其他 pxe_boot 节点,类似这样。目前只编写了 tilera 驱动程序,并且此 tilera.py 代码管理 Tilera 节点的实际引导/终止。但是可以附加其他类型以使用相同的 BareMetalConnection 和 BareMetalDom。为了将此应用于其他裸机类型,我们使用 baremetal_driver 标志。
- nova/virt/baremetal/fake.py
- nova/tests/baremetal/init.py
- nova/tests/baremetal/test_proxy_bare_metal.py
- nova/tests/baremetal/test_tilera.py
[nova.conf]
nova.conf 的大多数选项都显示在
对于 tilera 裸机驱动程序,您需要在 nova.conf 中设置以下选项
- --connection_type=baremetal
- --baremetal_driver=tilera
- --cpu_arch=tilepro64
- --tile_monitor=</path/to/tile-monitor/>
[tftpboot 目录]
- /tftpboot/tilera_boards: tilera 裸机节点信息
- /tftpboot/fs_*: NFS 挂载目录(例如,fs_1=tilera 板卡 ID#1)
迁移
如果我们将 x86_64 设置为今天假设的默认值,那么部署方式几乎不需要更改。
测试/演示计划
这不必在规范接近 Beta 之前添加或完成。
未解决的问题
我们面临的挑战之一是 instance_types 表中的 flavorid 字段不是自动递增的。我们选择了较高的数字以避免冲突,但社区应该讨论 flavorid 的行为以及添加未来新实例类型的最佳方法。
BoF 议程和讨论
使用本节记录 BoF 期间的笔记;如果将其保留在批准的规范中,请用于总结讨论内容并记录任何被拒绝的选项。

