跳转到: 导航, 搜索

HeterogeneousTileraSupport

总结

此蓝图建议在 OpenStack 中添加对 Tilera 平铺处理器的机器的支持,作为一种替代的机器类型。此蓝图依赖于 HeterogeneousInstanceTypes 蓝图中所述的模式更改,以及 HeterogeneousArchitectureScheduler 中的调度器。

目标发布版本是 Essex

Folsom 分支在这里

此蓝图与 HeterogeneousInstanceTypes 蓝图相关

我们还在为其他机器类型起草蓝图

有一个 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 板卡。下图详细描述了该过程。

Proxy Compute Node.png

代理计算节点将依赖于代理计算节点的系统信息保存在 /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)Tilera Compute nfs.png

对于选项 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)Tilera Compute.png

实现

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 代码中调用。

Baremetal.png

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 节点的实际引导/终止。但是可以附加其他类型以使用相同的 BareMetalConnectionBareMetalDom。为了将此应用于其他裸机类型,我们使用 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 期间的笔记;如果将其保留在批准的规范中,请用于总结讨论内容并记录任何被拒绝的选项。