Openstack NUMA分析与使用

原创 2015年07月07日 15:54:38

一、Openstack NUMA analysis

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

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

 

2、  有哪些入口?

1)      Flavor

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

hw:numa_nodes=NN                                    - VM中NUMA的个数

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

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

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

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添加元数据,即Image的metadata,通过设置以下几种关键字:

hw_numa_nodes=NN                                  - numa of NUMA nodes to expose to theguest.

hw_numa_mempolicy=preferred|strict     - memory allocation policy

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

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

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

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

 

以下是openstack接口文档中对Flavordextra-specs 和image metadata所提供的接口截图,接口文档可在openstack官网获取。

 

 


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

对NUMA相关数据的解析和处理,openstackJuno版本中,提供了以下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时,用户在image和flavor所配置的NUMA参数,随着创建VM的参数image_href和instance_type传入。


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

1>    参数校验:


2>    在“参数校验”中,获取guest VM的NUMA拓扑信息:


3>    将guest VM的NUMA拓扑信息,保存到base_options,最终返回:


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

1>    调用self._provision_instances()方法:


2>    _provision_instances()方法内部,将base_options更新到instance中:


4)      这样一来,用户配置的NUMA信息,就被保存到了instance中,在数据库instance_extra表中可以查到对应的信息,如下。


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

1>    _get_guest_numa_config()会调用self._get_cpu_numa_config_from_instance()方法获取guest VM的NUMA拓扑。

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


3>    InstanceNUMATopology中,从instance获取NUMA拓扑的具体函数。


 

5、  openstack代码中,获取guest VM的NUMA配置,并且匹配Host NUMA配置的具体流程和逻辑是什么?



二、How to use openstack NUMA function

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

 

一、自动平均分配NUMAcell

1、  在Dashboard中,创建Flavor,和元数据hw:numa_nodes和hw:numa_mempolicy,示例如下(这里创建的flavor名字叫“test_numa_by_num”,4 CPU,2G内存):


2、  根据此flavor,创建一个VM。示例如下(这里创建的VM名字为“numa_vm_1”):


3、  通过virsh命令,查看我们刚才创建的那个VM——“numa_vm_1”:



二、手动指定分配NUMAcell

1、  创建Flavor,和元数据hw:numa_nodes、hw:numa_mempolicy、hw:numa_cpus.0、hw:numa_cpus.1、hw:numa_mem.0、hw:numa_mem.1,并且设置cell_0的cpu为2-3,cell_1的CPU为0-1。示例如下(这里创建的flavor名字叫“test_numa_by_specify”,4 CPU,2G内存):


2、  根据此flavor,创建一个VM。示例如下(这里创建的VM名字为“numa_vm_2”):


3、  通过virsh命令,查看我们刚才创建的那个VM——“numa_vm_1”:


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

OpenStack对NUMA的支持情况(by quqi99)

作者:张华  发表于:2016-03-24版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明( http://blog.csdn.net/quqi99 )理论vCP...
  • quqi99
  • quqi99
  • 2016-03-26 18:16
  • 2774

Openstack J版本 NUMA特性相关分析(一)

1、简介         Openstack在J版本中新增NUMA特性,用户可以通过将虚拟机只能的CPU和内存绑定到物理机的NUMA节点上来提升虚拟机的性能。 2、使用方式        NUMA...

OpenStack之Nova分析——创建虚拟机(七)——创建虚拟机镜像文件

虚拟机的镜像文件主要是指磁盘镜像文件,当然有的还包括ramdisk和kernel镜像来配合磁盘镜像文件使用,这篇文章我们来重点分析一下创建虚拟机镜像的整个过程。 先来概述一下整个流程: 1. Libv...

Ubuntu SSE指令集 编程实例---复数乘法与共轭乘法

Ubuntu SSE库 编程实例---复数乘法与共轭乘法 1. SSE指令集介绍 2. SSE指令集原理 3. 常用SSE指令集 4. SSE实现复数乘法 5. SSE实现复数共轭乘法
  • jxwxg
  • jxwxg
  • 2016-11-08 23:38
  • 544

NUMA体系结构详解

由于OpenStack Kilo增加很多针对NUMA体系结构的增强功能,所以又重新温习了下NUMA相关的知识,简单做个笔记。   1. NUMA的几个概念(Node,socket,core,threa...

NUMA架构的CPU

NUMA架构的CPU -- 你真的用好了么? 本文从NUMA的介绍引出常见的NUMA使用中的陷阱,继而讨论对于NUMA系统的优化方法和一些值得关注的方向。 文章欢迎转载,但转载时请保留本段...

Linux内核学习笔记:SMP、UMA、NUMA

1. 概述   SMP称为共享存储型多处理机(Shared Memory mulptiProcessors), 也称为对称型多处理机(Symmetry MultiProcessors)。   ...

MySQL Server参数优化 - innodb_file_per_table(独立表空间)

1 简介     Innodb存储引擎可将所有数据存放于ibdata*的共享表空间,也可将每张表存放于独立的.ibd文件的独立表空间。     共享表空间以及独立表空间都是针对数据的存储方式而言的。 ...

NUMA架构的CPU -- 你真的用好了么?

from: http://cenalulu.github.io/linux/numa/ 本文从NUMA的介绍引出常见的NUMA使用中的陷阱,继而讨论对于NUMA系统的优化方法和一些值得关注的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)