[Placement深度探索] Granular Resource Request Syntax

栏目: ASP.NET · 发布时间: 5年前

内容简介:在进行资源请求的时候,由于目前支持的能力有限,我们目前只能请求一个单一类型包含整数数量的资源。例如,我们请求VCPU为2,内存为2G,要求其架构为X86架构,即通过以下URL进行请求:也不能指定我们需要某一个RP具有某种特质,所有不同类型的资源也只能从一个RP提供。

1. 问题背景

在进行资源请求的时候,由于目前支持的能力有限,我们目前只能请求一个单一类型包含整数数量的资源。

例如,我们请求VCPU为2,内存为2G,要求其架构为X86架构,即通过以下URL进行请求:

GET /allocation_candidates?resources=VCPU:2,MEMORY_MB:2048&required=HW_CPU_X86_AVX

也不能指定我们需要某一个RP具有某种特质,所有不同类型的资源也只能从一个RP提供。

但是,在进行一些通用和嵌套的Resource Provider时,会有诸如下列的需求:

Requirement 1. 根据类型、特质来请求一个allocation,根据相同类型和不同特质来请求不同的多个allocation。

Requirement 2. 保证指定的资源来自同一个resource provider

Requirement 3. 在资源有限(高饱和度)的情况下,将allocations散布到多个resource provider(多个resource provider拼凑起来)的能力。

我们通过一个例子来说下这几个场景:

[Placement深度探索] Granular Resource Request Syntax

Use Case 1

我们希望请求一个在NET1上的VF,一个在NET2上的VF。

  • [RP1(SRIOV_NET_VF:1), RP2(SRIOV_NET_VF:1)]
  • [RP1(SRIOV_NET_VF:1), RP4(SRIOV_NET_VF:1)]
  • [RP3(SRIOV_NET_VF:1), RP2(SRIOV_NET_VF:1)]
  • [RP3(SRIOV_NET_VF:1), RP4(SRIOV_NET_VF:1)]
    那么,我们请求的时候,可以使用:
GET /allocation_candidates?resources=SRIOV_NET_VF:1&resources1=SRIOV_NET_VF:1

体现需求1要求的分组能力,在解析的时候,会将resource根据后面的number分组

Expect:

[RP1(SRIOV_NET_VF:1), RP2(SRIOV_NET_VF:1)]

[RP1(SRIOV_NET_VF:1), RP4(SRIOV_NET_VF:1)]

[RP3(SRIOV_NET_VF:1), RP2(SRIOV_NET_VF:1)]

[RP3(SRIOV_NET_VF:1), RP4(SRIOV_NET_VF:1)]

Use Case 2

请求一个带宽为10000 bytes/sec的vf

GET /allocation_candidates?resources1=SRIOV_NET_VF:1,NET_EGRESS_BYTES_SEC=1

体现需求二,来自同一个Resource Provider。每个分组,通过suffix来作为后缀,来区分resource,同一个组的资源后面number相同,期望请求同一个Resource Provider。

Expect:

[RP1(SRIOV_NET_VF:1), RP1(NET_EGRESS_BYTES_SEC:10000)]

[RP2(SRIOV_NET_VF:1), RP2(NET_EGRESS_BYTES_SEC:10000)]

[RP3(SRIOV_NET_VF:1), RP3(NET_EGRESS_BYTES_SEC:10000)]

[RP4(SRIOV_NET_VF:1), RP4(NET_EGRESS_BYTES_SEC:10000)]

Use Case 3

请求一个在NET1上带宽为10000bytes/sec的VF,并同时请求一个在NET2上贷款为20000bytes/sec的且网卡带有SSL加速的能力

GET /allocation_candidates?resources1=SRIOV_NET_VF:1,NET_EGRESS_BYTES_SEC=10000 &resource2=SRIOV_NET_VF:1,NET_EGRESS_BYTES_SEC=20000&required2=HW_NIC_ACCEL_SSL

体现了需求一和需求二,通过分组来获取不同的Resource Provider,通过同一分组编号来指定一个Resource Provider的能力。

  • [RP1(SRIOV_NET_VF:1, NET_EGRESS_BYTES_SEC:10000), RP2(SRIOV_NET_VF:1, NET_EGRESS_BYTES_SEC:20000)]
  • [RP3(SRIOV_NET_VF:1, NET_EGRESS_BYTES_SEC:10000), RP2(SRIOV_NET_VF:1, NET_EGRESS_BYTES_SEC:20000)]

Use Case 4

假设一个PF只剩2个VF了,请求一个NET1上4个VF。

GET /allocation_candidates?resources=SRIOV_NET_VF:4

体现需求三,内部会自动将4分割成2个2:

Expect: [RP1(SRIOV_NET_VF:2), RP3(SRIOV_NET_VF:2)]

2. 核心实现

这种表达方式我们称之为“Numbered Request Groups”,名字中包含了2个重要信息,一个是“Numbered”,对请求资源进行编号,另一个是“Groups”,根据编号对请求资源进行分组.

形如:

resources = { resource_classA: rcA_count,
              resource_classB: rcB_count,
              ... },
required = [ TRAIT_C, TRAIT_D, ... ],

resources1 = { resource_class1A: rc1A_count,
               resource_class1B: rc1B_count,
               ... },
required1 = [ TRAIT_1C, TRAIT_1D, ... ],

resources2 = { resource_class2A: rc2A_count,
               resource_class2B: rc2B_count,
               ... },
required2 = [ TRAIT_2C, TRAIT_2D, ... ],

...,

resourcesX = { resource_classXA: rcXA_count,
               resource_classXB: rcXB_count,
               ... },
requiredX = [ TRAIT_XC, TRAIT_XD, ... ],

目前的解析部分的核心实现在 nova/api/openstack/placement/util.py#L349-L465

目前已支持的参数有resources(对inventory请求)、required(对trait请求)、member_of(对aggregate请求)。


以上所述就是小编给大家介绍的《[Placement深度探索] Granular Resource Request Syntax》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

计算机体系结构

计算机体系结构

John L. Hennessy、David A. Patterson / 机械工业出版社 / 2012-1 / 138.00元

编辑推荐 “本书之所以成为永恒的经典,是因为它的每一次再版都不仅仅是更新补充,而是一次全面的修订,对这个激动人心且快速变化领域给出了最及时的信息和最独到的解读。对于我来说,即使已有二十多年的从业经历,再次阅读本书仍自觉学无止境,感佩于两位卓越大师的渊博学识和深厚功底。” ——Luiz André Barroso,Google公司 内容简介 本书堪称计算机系统结构学科的“圣经......一起来看看 《计算机体系结构》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

在线进制转换器
在线进制转换器

各进制数互转换器

MD5 加密
MD5 加密

MD5 加密工具