欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

OpenStack NUMA 分析 (入门) 博客分类: OpenStack技术分析 OpenStackNUMA

程序员文章站 2024-03-14 10:27:16
...
Openstack NUMA 分析 (入门)
作者:张航东
OpenStack版本:Kilo
 

1Openstack是否提供了NUMA的入口以供我们使用?

是的,已经提供了,并且可以正常使用。

 

2有哪些入口?

1)       Flavor

Flavor添加元数据,即extra-specs,通过设置以下几种关键字:

hw:numa_nodes=NN                                    - VMNUMA的个数

hw:numa_mempolicy=preferred|strict   - VM NUMA 内存的使用策略

hw:numa_cpus.0=<cpu-list>                       - VM 中在NUMA node 0cpu

hw:numa_cpus.1=<cpu-list>                       - VM 中在NUMA node 1cpu

hw:numa_mem.0=<ram-size>                   - VM 中在NUMA node 0的内存大小(M)

hw:numa_mem.1=<ram-size>                   - VM 中在NUMA node 1的内存大小(M)

2)       Image

Image添加元数据,即Imagemetadata,通过设置以下几种关键字:

hw_numa_nodes=NN - numa of NUMA nodes to expose to the guest.

hw_numa_mempolicy=strict|prefered - memory allocation policy

hw_numa_cpus.0=<cpu-list> - mapping of vCPUS N-M to NUMA node 0

hw_numa_cpus.1=<cpu-list> - mapping of vCPUS N-M to NUMA node 1

hw_numa_mem.0=<ram-size> - mapping N MB of RAM to NUMA node 0

hw_numa_mem.1=<ram-size> - mapping N MB of RAM to NUMA node 1

 

以下是openstack接口文档中对Flavord extra-specs image metadata所提供的接口截图,接口文档可在openstack官网获取。
OpenStack NUMA 分析 (入门)
            
    
    博客分类: OpenStack技术分析 OpenStackNUMA
OpenStack NUMA 分析 (入门)
            
    
    博客分类: OpenStack技术分析 OpenStackNUMA

 

3. openstack代码中,处理NUMA的地方在哪里?

NUMA相关数据的解析和处理,openstack Juno版本中,提供了以下class(在nova/virt/hardware.py文件中):

1)       class VirtNUMATopologyCell(object):

NUMA单元,定义了NUMA cell的基本数据成员。

2)       class VirtNUMATopologyCellLimit(VirtNUMATopologyCell):

NUMA限制量单元,定义了NUMAcell可以使用资源的最大限。

3)       class VirtNUMATopologyCellUsage(VirtNUMATopologyCell):

NUMA使用量单元,定义了NUMA cell已使用的资源。

4)       class VirtNUMATopology(object):

NUMA拓扑单元,定义了NUMA 的基本数据成员,即cells[]

5)       class VirtNUMAInstanceTopology(VirtNUMATopology):

guest VM提供NUMA相关的操作。

6)       class VirtNUMAHostTopology(VirtNUMATopology):

Host提供NUMA相关的操作。

 

4. openstack代码中,用户配置的NUMA参数,在创建VM时,是怎么被处理的?

1)      创建VM时,用户在imageflavor所配置的NUMA参数,随着创建VM的参数image_hrefinstance_type传入。
OpenStack NUMA 分析 (入门)
            
    
    博客分类: OpenStack技术分析 OpenStackNUMA
 

2)     在创建VM内部,有一步“参数校验”self._validate_and_build_base_options()的操作,该“参数校验”中,有一步操作会调用VirtNUMAInstanceTopology的方法获取到guest VMNUMA拓扑,并将其保存在base_options变量中返回。

1>     参数校验:
OpenStack NUMA 分析 (入门)
            
    
    博客分类: OpenStack技术分析 OpenStackNUMA
 

2>     在“参数校验”中,获取guest VMNUMA拓扑信息:
OpenStack NUMA 分析 (入门)
            
    
    博客分类: OpenStack技术分析 OpenStackNUMA
 

3>     guest VMNUMA拓扑信息,保存到base_options,最终返回:
OpenStack NUMA 分析 (入门)
            
    
    博客分类: OpenStack技术分析 OpenStackNUMA
 

3)     然后,创建VM函数,会将返回的base_options,通过self._provision_instances()方法更新到instance中。

1>     调用self._provision_instances()方法:
OpenStack NUMA 分析 (入门)
            
    
    博客分类: OpenStack技术分析 OpenStackNUMA

2>     _provision_instances()方法内部,将base_options更新到instance中:
OpenStack NUMA 分析 (入门)
            
    
    博客分类: OpenStack技术分析 OpenStackNUMA
 

4)     这样一来,用户配置的NUMA信息,就被保存到了instance中,在数据库instance_extra表中可以查到对应的信息,如下。
OpenStack NUMA 分析 (入门)
            
    
    博客分类: OpenStack技术分析 OpenStackNUMA
 

5)     VM启动、恢复、迁移等需要用到NUMA信息时,就会调用到_get_guest_numa_config()方法(后续会讲到),通过该方法获取到对应VM所需要的NUMA配置。该方法内部,有一步,会从instance中,获取到对应的NUMA拓扑。

1>     _get_guest_numa_config()会调用self._get_cpu_numa_config_from_instance()方法获取guest VMNUMA拓扑。
OpenStack NUMA 分析 (入门)
            
    
    博客分类: OpenStack技术分析 OpenStackNUMA
 

2>     然后,内部又会调用InstanceNUMATopology的方法(在/nova/objects/instance_numa_topology.py文件内)从instance中获取到NUMA拓扑,保存到一个重要的变量guest_cpu_numa(后续会讲到)中返回。
OpenStack NUMA 分析 (入门)
            
    
    博客分类: OpenStack技术分析 OpenStackNUMA
 

3>     InstanceNUMATopology中,从instance获取NUMA拓扑的具体函数。
OpenStack NUMA 分析 (入门)
            
    
    博客分类: OpenStack技术分析 OpenStackNUMA
 

 

5、  openstack代码中,获取guest VMNUMA配置,并且匹配Host NUMA配置的具体流程和逻辑是什么?(详见附件:NUMA源码结构.PNG)
 

 

How to use openstack NUMA function

(该部分以Flavor为例,已证实对于image的配置,同样有效!)

 

一、自动平均分配NUMA cell

1、Dashboard中,创建Flavor,和元数据hw:numa_nodeshw:numa_mempolicy,示例如下(这里创建的flavor名字叫“test_numa_by_num”,4 CPU2G内存):
OpenStack NUMA 分析 (入门)
            
    
    博客分类: OpenStack技术分析 OpenStackNUMA
 

2、根据此flavor,创建一个VM。示例如下(这里创建的VM名字为“numa_vm_1”):
OpenStack NUMA 分析 (入门)
            
    
    博客分类: OpenStack技术分析 OpenStackNUMA
 

3、通过virsh命令,查看我们刚才创建的那个VM——“numa_vm_1”:
OpenStack NUMA 分析 (入门)
            
    
    博客分类: OpenStack技术分析 OpenStackNUMA
 
OpenStack NUMA 分析 (入门)
            
    
    博客分类: OpenStack技术分析 OpenStackNUMA
 

二、手动指定分配NUMA cell

1、Flavor,和元数据hw:numa_nodeshw:numa_mempolicyhw:numa_cpus.0hw:numa_cpus.1hw:numa_mem.0hw:numa_mem.1,并且设置cell_0cpu2-3cell_1CPU0-1。示例如下(这里创建的flavor名字叫“test_numa_by_specify”,4 CPU2G内存):
OpenStack NUMA 分析 (入门)
            
    
    博客分类: OpenStack技术分析 OpenStackNUMA
 

2、根据此flavor,创建一个VM。示例如下(这里创建的VM名字为“numa_vm_2”):
OpenStack NUMA 分析 (入门)
            
    
    博客分类: OpenStack技术分析 OpenStackNUMA
 

3、virsh命令,查看我们刚才创建的那个VM——“numa_vm_1”:
OpenStack NUMA 分析 (入门)
            
    
    博客分类: OpenStack技术分析 OpenStackNUMA
 

 

  • OpenStack NUMA 分析 (入门)
            
    
    博客分类: OpenStack技术分析 OpenStackNUMA
  • 大小: 58.3 KB
  • OpenStack NUMA 分析 (入门)
            
    
    博客分类: OpenStack技术分析 OpenStackNUMA
  • 大小: 174.1 KB
  • OpenStack NUMA 分析 (入门)
            
    
    博客分类: OpenStack技术分析 OpenStackNUMA
  • 大小: 115.6 KB
  • OpenStack NUMA 分析 (入门)
            
    
    博客分类: OpenStack技术分析 OpenStackNUMA
  • 大小: 84 KB
  • OpenStack NUMA 分析 (入门)
            
    
    博客分类: OpenStack技术分析 OpenStackNUMA
  • 大小: 74.1 KB
  • OpenStack NUMA 分析 (入门)
            
    
    博客分类: OpenStack技术分析 OpenStackNUMA
  • 大小: 45.4 KB
  • OpenStack NUMA 分析 (入门)
            
    
    博客分类: OpenStack技术分析 OpenStackNUMA
  • 大小: 238.2 KB
  • OpenStack NUMA 分析 (入门)
            
    
    博客分类: OpenStack技术分析 OpenStackNUMA
  • 大小: 203.6 KB
  • OpenStack NUMA 分析 (入门)
            
    
    博客分类: OpenStack技术分析 OpenStackNUMA
  • 大小: 145 KB
  • OpenStack NUMA 分析 (入门)
            
    
    博客分类: OpenStack技术分析 OpenStackNUMA
  • 大小: 194.5 KB
  • OpenStack NUMA 分析 (入门)
            
    
    博客分类: OpenStack技术分析 OpenStackNUMA
  • 大小: 148 KB
  • OpenStack NUMA 分析 (入门)
            
    
    博客分类: OpenStack技术分析 OpenStackNUMA
  • 大小: 45.8 KB
  • OpenStack NUMA 分析 (入门)
            
    
    博客分类: OpenStack技术分析 OpenStackNUMA
  • 大小: 150.4 KB
  • OpenStack NUMA 分析 (入门)
            
    
    博客分类: OpenStack技术分析 OpenStackNUMA
  • 大小: 46.4 KB
  • OpenStack NUMA 分析 (入门)
            
    
    博客分类: OpenStack技术分析 OpenStackNUMA
  • 大小: 72.5 KB
  • OpenStack NUMA 分析 (入门)
            
    
    博客分类: OpenStack技术分析 OpenStackNUMA
  • 大小: 20.6 KB
  • OpenStack NUMA 分析 (入门)
            
    
    博客分类: OpenStack技术分析 OpenStackNUMA
  • 大小: 242.5 KB
  • OpenStack NUMA 分析 (入门)
            
    
    博客分类: OpenStack技术分析 OpenStackNUMA
  • 大小: 71.7 KB
  • OpenStack NUMA 分析 (入门)
            
    
    博客分类: OpenStack技术分析 OpenStackNUMA
  • 大小: 54.3 KB
  • OpenStack NUMA 分析 (入门)
            
    
    博客分类: OpenStack技术分析 OpenStackNUMA
  • 大小: 215 KB
相关标签: OpenStack NUMA