OpenStack Ussuri 版新特性: Nova-Cyborg Interaction功能分析

摘要:OpenStack社区在Ussuri版本完成了nova-cyborg interaction功能的开发, 该功能加强了nova和cyborg的联系, 解耦了nova的PCI加速设备管理功能, 通过cyborg和placement可以让加速器资源的管理更加灵活。


概念

PR

resource provider, placement中的概念, 资源提供者。

Device Profile

Device profile是Cyborg中的概念, 它用于描述单个或多个加速设备,可以将之看作加速设备的flavor. 广义上, 它包括了两点:

  • 特定资源类的数量(resource class)
  • RP需要满足的要求(trait)

一个device profile的结构如下:

``` json
{
    'name': 'gpu-nvidia-t4',
    'description': 'Nvidia tesla t4',
    'groups': [
        {'resources:PGPU': '1',
         'CUSTOM_GPU_PRODUCT_ID_1EB8': 'required'
        },
        {'resources:PGPU': '2',
         'CUSTOM_GPU_PRODUCT_ID_1E04': 'required'
        }
    ]
    'uuid': 'd6cd5b94-f95c-4148-85c5-2ce22a38a796'
}
```

目前仅允许管理员创建/更新/删除device profiles。

ARQ

ARQ即accelerator request, 它是一个对象, 用于描述实例请求分配加速设备的状态,ARQ的创建和管理由cyborg完成, 并且数据存储在cyborg数据库中。

一个ARQ只能表示单个加速设备分配请求. `device_profile`可以有N个group, 每个group请求M个加速设备, 此时将会创建N*M个ARQ。

Cyborg初始化一个ARQ后, 该ARQ并不会和特定的计算节点主机名或RP id关联, 此时我们可以认为该ARQ处于未绑定状态(unbound). 之后, nova调用cyborg将ARQ绑定到一个计算节点主机名和一个加速设备的RP id和一个实例 id上. 如果实例孵化失败, nova不会删除这个ARQ, 而是取消绑定. nova会在删除实例时解绑和删除ARQ。

在绑定ARQ前, 每个ARQ都需要与nova选择的allocation candidate匹配。当前nova会建立RequestGroup到RPs的映射, nova中的cyborg客户端模块据此将ARQ匹配到RequestGroup上。匹配是使用RequestGroup对象中的requester_id字段进行的, 规则如下:

  • device profile中的group的顺序并不重要, 但是cyborg保留了这个顺序. 因此每个RequestGroup都有一个唯一的索引;
  • 当cyborg返回的device profile groups添加到request spec中时, 对于第N个RequestGroup, requester_id将被设置为`device_profile_<N>`. 因为每个request spec只有一个device profile, 所以device profile的名称不需要包含在其中;
  • 当cyborg为device profile创建一个ARQ时, 它会在ARQ中嵌入group的索引, 然后将之返回给nova;
  • 匹配由以下两步完成:每个ARQ使用的requester_id字段映射到request spec的RequestGroup中;每个RequestGroup被映射到特定的RP, 与neutron bandwidth provider的逻辑一致。

一个ARQ的结构如下:

``` json
{'arqs': [
    {'uuid': 'c406129e-821c-4583-b094-d948fe6f4aa1',
     'state': 'Bound',
     'device_profile_name': 'gpu-nvidia-t4',
     'device_profile_group_id': 0,
     'hostname': 'vgpu02',
     'device_rp_uuid': '2a0c2b8f-2ec1-3364-a773-0ba4166e9a34',
     'instance_uuid': '81334887-7044-44cd-805f-0f7e206e04b8',
     'attach_handle_type': 'PCI',
     'attach_handle_info': {
        'bus': '5e',
        'device': '00',
        'domain': '0000',
        'function': '0'
      },
     'created_at': '2020-04-27T11:42:11+00:00',
     'updated_at': '2020-04-27T11:42:11+00:00'}
]}
```

虚拟机创建流程

``` graph
+------+        +----------+       +----------------+     +--------------+       +--------+
| User |        | Nova api |       | Nova conductor |     | Nova Compute |       | Cyborg |
+--+---+        +----+-----+       +-------+--------+     +-------+------+       +---+----+
   |                 |                     |                      |                  |
   | Create Instance |                     |                      |                  |
   +---------------->+                     |                      |                  |
   |                 |                     |                      |                  |
   |                 | Get Device Profile  |                      |                  |
   |                 +<------------------------------------------------------------->+
   |                 |                     |                      |                  |
   |                 |   Scheduler and     |                      |                  |
   |                 +-------------------->+                      |                  |
   |                 |   build instance    |                      |                  |
   |                 |                     |  Create ARQs         |                  |
   |                 |                     +---------------------------------------->+
   |                 |                     |                      |                  |
   |                 |                     |  Bind ARQs           |                  |
   |                 |                     +---------------------------------------->+
   |                 |                     |                      |                  |
   |                 |                     |  Spawn instance      |                  |
   |                 |                     +--------------------->+                  |
   |                 |                     |                      |                  |
   |                 |                     |                      |  Notify bind end |
   |                 |                     |                      +<-----------------+
   |                 |                     |                      |                  |
   |                 |                     |                      | Get ARQs info    |
   |                 |                     |                      +<---------------->+
   |                 |                     |                      |                  |
   |                 |                     |                      |                  |
   |                 |                     |                      +-----+            |
   |                 |                     |                      |     |Spawn       |
   |                 |                     |                      |     |Instace     |
   |                 |                     |                      +<----+            |
   |                 |                     |                      |                  |
```

1. nova-api收到创建虚机的请求

`nova.compute.api.API._provision_instances`会尝试解析flavor extra specs,若`flavor.extra_specs.get('accel:device_profile')`属性不为`None`, 该属性应当为device profile的名称, 调用`nova.accelerator.cyborg.get_device_profile_request_groups`获取该deviceprofile中的groups值:

cyborg API返回的数据结构如下:

``` json
    {
        "device_profiles": [
            {
                "name": "gpu-nvidia-t4",
                "groups": [
                    {
                        "trait:CUSTOM_GPU_PRODUCT_ID_1EB8": "required",
                        "resources:PGPU": "1"
                    }
                ]
            }
        ]
    }
    ```

该调用返回列表:`nova.objects.request_spec.RequestGroup`, 需要注意此处只使用到了`groups`的`trait`, `resources`相关属性, `accel`并未被使用:

 ``` list
    [
        RequestGroup(requester_id='device_profile_0',
                     resources={'PGPU': 1},
                     required_traits={'CUSTOM_GPU_PRODUCT_ID_1EB8'})
    ]
    ```

返回的RequestGroup合并到RequestSpec.required_resources中, 用于接下来的调度和创建实例。

2. nova-conductor/nova-scheduler调度

nova conductor调用nova-scheduler调度, nova-scheduler使用RequestSpec中的信息向placement查询合适的RP, 这些流程没有变动。

3. nova-conductor创建ARQ(accelerator request)

`nova.conductor.manager.ComputeTaskManager.schedule_and_build_instances`在调度完成后调用`_creaet_and_bind_arqs`创建并绑定ARQ。

首先调用`nova.accelerator.cyborg.create_arqs_and_match_resource_providers`,为该device profile创建ARQs, 获取新建的ARQs, 并按照group的索引,ResourceGroup及RPs的映射, 将ARQ的`device_rp_uuid`重置为对应的RP id并返回。

之后调用`nova.accelerator.cyborg.bing_arqs`将ARQ与计算节点主机名, 实例id,加速设备RP id绑定. Cyborg会依据不同的设备类型进行绑定, 例如FPGA在绑定时可能会烧写镜像。Cyborg绑定完成后会向nova发送一个ExternalEvent的notification, 其结构如下:

``` list
    [
        {
            'name': 'accelerator-request-bound',
            'server_uuid': 'instance_uuid',
            'tag': 'arq_uuid',
            'status': 'arq_bind_status'
        }
    ]
    ```

Cyborg的绑定是异步的, 所以nova可以继续通过RPC调用`nova.compute.ComputeManager.build_and_run_instance`, ARQ uuids作为参数`accel_uuids`传入。

4. nova-compute孵化实例

在`nova.compute.ComputeManager._bild_and_run_instance`中调用`_build_resources`, 该方法尝试调用`_get_bound_arq_resources`以等待上述的notification发送. 若收到notification, 则尝试通过cyborg client获取ARQs详情并返回; 若在`CONF.arq_binding_timeout`内未收到notification, 则抛出异常。
    
在`nova.virt.libvirt.driver.LibvirtDriver.spawn`中调用`_get_guest_xml`,最后在`_get_guest_config`和`_guest_add_accel_pci_devices`方法中解析设备相关信息并挂载到实例上。

参考文献

  • https://specs.openstack.org/openstack/cyborg-specs/specs/train/approved/device-profiles.html
  • https://specs.openstack.org/openstack/nova-specs/specs/ussuri/approved/nova-cyborg-interaction.html
  • https://github.com/openstack/nova/blob/63380a6b494e0f0f220b67b197edec836f1c5a42/nova/objects/request_spec.py#L777

相关推荐

恭喜! 中移动智家中心入选2020年度ICT行业龙虎榜

1月8日,由信通传媒•通信世界全媒体举办的“2020年度ICT龙虎榜颁奖盛典”在北京顺利举行。会上,中移动智家中心提交参评的“中国移动智慧家庭运营中心视频安防混合云解决方案”实力登榜,被评为“2020年度ICT行业优秀解决方案”。时值岁末年终,作为行业权威媒体,通信世界全媒体进行了2020年盘点,总结了一年ICT行业在技术、市场和产品等各方面取得的成绩,并组织开展了“2020年度ICT产业龙虎榜暨优秀解决方案”评选。本次评选通过编辑推荐、专家评审等流程,历时一个多月时间,最终梳理并评选出在ICT

OpenInfra的博客 847

重磅!九州云获颁“2020年度运营商最佳合作伙伴”奖

1月8日,由信通传媒•通信世界全媒体举办的“2020年度ICT龙虎榜颁奖盛典”在北京顺利举行。会上,“2020年度ICT产业龙虎榜暨优秀解决方案”榜单正式揭晓,九州云获颁“2020年度运营商最佳合作伙伴”奖。通信世界全媒体是由工信部主管的行业权威媒体,是ICT产业的见证者、亲历者和推动者。为了更好的推动ICT产业技术进步,促进行业健康有序发展,鼓励企业创新进步,每年年终通信世界全媒体都会推出重磅盘点,总结一年行业在技术、市场、产品等各方面取得的成绩,并发布“ICT产业龙虎榜”,评选行业优秀解决方

OpenInfra的博客 1189

杭州轨交监管平台边缘云获奖 树立行业新标杆

2020年12月30日,由中国电子技术标准化研究院主办的“第十届中国云计算标准和应用大会”在北京顺利召开。大会期间,优秀案例评选结果正式公布,华东勘测设计研究院的“杭州轨道交通监管平台边缘云”案例实力荣获 “2020年云计算最佳实践奖”。在中国云计算标准和应用大会创办十周年之际,中国开源云联盟组织发起“聚焦数字基建,赋能实体经济”全新奖项评选。该评选旨在总结中国开源云计算领域十年来的发展经验,树立行业标杆典范,推动和落实云计算相关政策,引领新一轮技术创新热潮,为中国企业的数字化转型助力。此次

OpenInfra的博客 705

厉害了!九州云边缘计算管理平台获国家权威认证

2020年12月29日,由中国电子技术标准化研究院主办的“第十届中国云计算标准和应用大会”在北京顺利召开。大会期间,国家权威的云基准测评名单正式对外公布,九州云边缘计算管理平台V1.0通过测评,并在现场获颁证书。中国电子技术标准化研究院作为全国信标委云计算标准工作组以及中国开源云联盟的秘书处归口单位,一直在积极开展云计算国家标准、行业标准、开源团体标准的研制和落地应用工作,标准化成果丰硕。“云基准测评”即是依托中国电子技术标准化研究院的云计算基准库,建立起来的一套覆盖云计算解决方案、云.

OpenInfra的博客 1361

九州未来,2025混合云提供商TOP30

九州未来入选2025混合云提供商TOP30榜单。

OpenInfra的博客 375

九州未来入选信通院“开源大模型+”创新应用典型案例

九州未来Animbus融智一体机入选信通院“开源大模型+”创新应用典型案例。

OpenInfra的博客 340

九州未来亮相联通合作伙伴大会,深化合作共拓融合新生态

2025中国联通合作伙伴大会在上海举行,九州未来作为中国联通长期紧密的产业链合作伙伴参展,重点展示自主研发的AI-Studio大模型推训平台。该平台提供从开发训练到推理部署的全流程AI支持,具备可视化建模、高性能推理、知识库管理等核心功能,加速AI技术在产业中的落地应用。

OpenInfra的博客 506

九州未来邀您共赴2025中国联通合作伙伴大会!

边缘筑基·AI赋能·智联未来,九州未来邀您共赴2025中国联通合作伙伴大会。

OpenInfra的博客 348

共绘智算赋能产业新图景,九州未来出席2025南京软件大会

九州未来受邀出席2025南京软件大会并发表《智算中心赋能新质生产力》主题演讲,分享九州未来在利用智算技术驱动产业升级方面的前沿实践与创新思考。

OpenInfra的博客 329

九州未来亮相第二十届“开源中国开源世界”大会,分享AI边缘计算创新方案

九州未来出席第二十届“开源中国开源世界”大会,分享低轨网络MEC边缘云与AI融合的无单点失效解决方案。

OpenInfra的博客 424

九州未来十三载:开源赋能 智启未来

2012-2025丨让算力更智能,让未来更可见!

OpenInfra的博客 684

九州未来入选2025全国企业“人工智能+”行动创新案例TOP100

九州未来算力基础设施解决方案入选2025全国企业“人工智能+”行动创新案例榜单。

OpenInfra的博客 493

九州未来再度入选“中国边缘计算企业20强”,云边融合驱动智能创新

九州未来再度入选“中国边缘计算企业20强”。

OpenInfra的博客 437

九州未来荣获2024年度吴兴区服务业十佳企业

九州未来荣获2024年度吴兴区服务业十佳企业。

OpenInfra的博客 381

九州未来DeepSeek一体机,H20及L40S加持高效部署,安全无忧!

九州未来DeepSeek一体机,H20及L40S加持高效部署,安全无忧!

OpenInfra的博客 553

九州未来加入全球计算联盟,共筑新型计算产业发展新征程

九州未来正式加入全球计算联盟(GCC)。

OpenInfra的博客 377

九州未来再度入选新一代分布式云/算力50强

九州未来再度入选新一代分布式云/算力50强。

OpenInfra的博客 759

助力数字中国建设,九州未来收到中国信通院感谢信

近日,九州未来收到了来自中国信息通信研究院的感谢信,高度评价并诚挚感谢九州未来在中国信通院牵头的“铸基计划-高质量数字化转型推进行动”中的积极参与和卓越贡献。

OpenInfra的博客 348

九州未来荣登私有云TOP30榜单,赋能企业数字化新未来

九州未来入选《2024私有云企业TOP30》榜单。

OpenInfra的博客 554

一图读懂丨2024年九州未来智算云盘点

2024年九州未来智算云盘点

OpenInfra的博客 247

九州未来智慧物流建设项目入选《2024全国企业数字中国建设优秀应用案例》

九州未来智慧物流建设项目入选《2024全国企业数字中国建设优秀应用案例》。

OpenInfra的博客 318

九州未来亮相全球边缘计算大会,加速AI技术融合

九州未来亮相全球边缘计算大会,加速AI技术融合。

OpenInfra的博客 326

九州未来亮相2024首都工程师主题沙龙,共筑智慧交通新蓝图

九州未来亮相2024首都工程师主题沙龙,共筑智慧交通新蓝图。

OpenInfra的博客 355

共筑智能网联新里程,九州未来应邀出席“5G+算网”车路云一体化联合创新应用基地揭牌仪式

九州未来应邀出席“5G+算网”车路云一体化联合创新应用基地揭牌仪式,共筑智能网联新里程。

OpenInfra的博客 509

开启信息科技跨学科融合新路径,OpenHydra亮相全国中小学人工智能与创客教育大会

开启信息科技跨学科融合新路径,OpenHydra亮相全国中小学人工智能与创客教育大会。

OpenInfra的博客 654

九州未来再度入选2024边缘计算TOP100

九州未来再度入选2024边缘计算TOP100。

OpenInfra的博客 559

三大细分领域入选,九州未来再登2024边缘计算产业图谱

边缘计算社区正式发布《2024边缘计算产业图谱》,九州未来凭借卓越的技术实力、创新能力以及开源贡献,入选边缘计算平台、边缘计算开源、边缘云服务提供商共三项细分领域。

OpenInfra的博客 674

九州未来亓绚亮相丽台Solution Day 2024,共建AI赋能教育新时代

九州未来亓绚受邀参加丽台Solution Day 2024,并作为特邀合作伙伴携OpenHydra AI教育平台亮相展台交流区,带来以“OpenHydra人工智能教育,让老师轻松开展AI实践课”为主题的精彩展示。

OpenInfra的博客 732

九州未来入选2024边缘云计算TOP50

九州未来入选2024边缘云计算TOP50。

OpenInfra的博客 455

《信息技术 开源 开源许可证框架》国家标准发布,九州未来参编

近日,九州未来参与起草的国家标准《GB/T 44272-2024 信息技术 开源 开源许可证框架》正式获批发布,并将于2025年3月1日起正式实施。

OpenInfra的博客 614
上一篇: OpenStack Ussuri 发布,多项新特性曝光
下一篇: OpenStack Ussuri 版新特性: Nova功能分析
OpenInfra
OpenInfra 企业官方账号 企业官方账号
博客等级 码龄9年 393粉丝 307原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值