[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》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

计算智能导论

计算智能导论

英吉布雷切特 / 谭营 / 清华大学出版社 / 2010-6 / 59.00元

《计算智能导论(第2版)》导论性地介绍了计算智能的5 个典型范例:人工神经网络、进化计算、计算群体智能、人工免疫系统和模糊系统。它们分别是对生物神经系统、生物进化过程、社会组织的群体行为、自然免疫系统和人类思维过程的成功建模。这些范例已经得到了广泛深入的研究,人们在取得了很大的成功之后,已将研究成果广泛地应用到了众多的实际应用领域。极大提高了人们发现问题,求解问题,尤其是求解复杂科学与工程问题的能......一起来看看 《计算智能导论》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具