专栏首页海云捷迅的专栏【海云捷迅云课堂】高性能虚拟机NUMA
原创

【海云捷迅云课堂】高性能虚拟机NUMA

云课堂专题

海云捷迅云课堂专题,旨在秉承开源理念,为大家提供OpenStack技术原理与实践经验,该专题文章均由海云捷迅工程师理论与实践相结合总结而成,如大家有其他想要了解的信息,可留言给我们,我们会根据问题酌情回复。

NUMA 全称 Non-Uniform Memory Access,译为“非一致性内存访问”。该构架最大优势是可以把几十个CPU(甚至上百个CPU)组合在一个服务器内。方便更好的发挥系统性能。海云捷迅AWCloud3.1版本后,新增加了NUMA拓扑的高级选项,下文是对该架构的详解。

NUMA架构优势

计算平台体系结构通常用的有SMP 对称多处理结构、NUMA 非统一内存访问结构、MPP 大规模并行处理结构三种结构。本文只对SMP和NUMA做简单的对比,MPP暂不放在对比的范围。先看下SMP的架构。

图片来源于网络

据上图所示可了解到计算机处理数据,需经磁盘-内存-cpu,对于SMP 这样的架构,集中式共享存储器的设计限制了处理器访问存储器的频次,导致处理器可能会经常处于对数据访问的饥饿状态。

而对于NUMA的架构,它将处理器和存储器划分到不同的节点(NUMA Node),它们拥有几乎相等的资源。NUMA 节点内部会通过自己的存储总线访问内部的本地内存,而所有 NUMA 节点都可以通过主板上的共享总线来访问其他节点的远程内存。NUMA架构如下图所示

图片来源于网络

NUMA结构中有一个访问本地内存和访问远程内存的概念,访问本地内存既只访问NUMA节点内的内存,远程内存就是指访问其他NUMA节点的内存,如下图所示,CPU0和CPU1访问MEM1就是访问本地内存,访问的速度就会很快,访问MEM2-4就是远程内存,访问会变慢。

NUMA的结构设计能够在一定程度上解决 SMP 低存储带宽的问题。假如有一个2NUMA节点的系统,每一个节点内部具有 1GB/s 的存储带宽,外部共享总线也同样具有1GB/s 的带宽。理想状态下,如果所有的处理器总是访问本地内存的话,那么系统就拥有了 4GB/s 的存储带宽能力,在最不理想的情况下,如果所有处理器总是访问远程内存的话,那么系统就只能有 1GB/s 的存储带宽能力。

如果一个虚拟机的vCPU跨不同的Node的话,就会导致一个Node中的CPU去 访问另外一个Node中的内存的情况,这就导致内存访问延迟的增加。在有些特殊场景下,对虚拟机的性能有比较高的要求,就非常需要同一个虚拟机 的vCPU尽量被分配到同一个Node中的CPU上,所以在OpenStack的Kilo版本中增加了基于NUMA感知的虚拟机调度的特性。

如何查看物理机NUMA架构

首先需要了解与NUMA相关的几个概念有node、socket、core和thread。

Socket:主板上的CPU插槽

Core:一个物理CPU,一个独立的硬件执行单元

Thread:就是超线程hyperthread的概念,逻辑的执行单元

Node:Node是一个逻辑上的概念,对应于socket,NUMA使用node来管理CPU和内存,可以使用。

最常用的方法就是使用lscpu的命令直接查看物理机器的NUMA拓扑结构。

也可以分别查看使用ls /sys/devices/system/node/可以看到有几个NUMA节点,测试机器有node0和node1两个

Socket的信息可以通过/proc/cpuinfo查看,里面的physical id标识的就是socket号,测试机器有两个socket。

core的信息,core也是通过/proc/cpuinfo查看,其中和core相关的信息有:

本次测试机每个socket有8个core Numa node的信息通过ls /sys/devices/system/node/node0直接查看,能看到每个节点对应的CPU和内存。

从上图可看到,cpu0-7以及cpu16-23属于同一个NUMA节点。

小扩展:这里还有L1 cache和L2 cache的概念,同一个NUMA节点上的CPU哪些可以共享同样的L1 Data Cache、L1 Instruction Cache、L2 Cache?感兴趣的可以自主了解

AWCloud虚拟机中的NUMA拓扑使用

基于NUMA的这种架构,对于一些高性能的虚拟机,需要同一个虚拟机的vCPU尽量被分配到同一个Node中的CPU上,在OpenStack的M版本中提供了接口。

主要体现在设置虚拟机的flavor和image这两个地方:

为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)

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

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

本次AWCloud的产品体现在Flavor上,下面举个例子说明

对于AWCloud产品,创建一个设置了NUMA拓扑的虚拟机只需要在创建普通虚拟机流程上,选择NUMA节点的个数、设置NUMA节点、设置NUMA策略即可。

下面展示的虚拟机配置了NUMA拓扑,我们可以在xml文件中看到NUMA的配置

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【海云捷迅云课堂】初识自动化测试

    海云捷迅云课堂专题,旨在秉承开源理念,为大家提供OpenStack技术原理与实践经验,该专题文章均由海云捷迅工程师理论与实践相结合总结而成,如大家有其他想要了解...

    海云捷迅
  • 海云捷迅的教育云实战经验分享

    在互联网时代,大数据、云计算、移动化、社交网络、物联网等新技术层出不穷,对教育信息化应用也产生了重大影响,大数据学习分析、教育云、HPC、移动教育等应用逐渐成为...

    海云捷迅
  • CNTV 媒体融合云 创业界新生态

    时至今日,技术创新也成为媒体发展的核心动力,并促使着媒体行业向泛媒体时代变革。CNTV 作为行业中的佼佼者,与时俱进,其第二批媒体融合云项目正式开启!

    海云捷迅
  • Cortex项目

    说明:Cortex一个多租户Prometheus-as-a-Service项目。Cortex对Prometheus进行了扩展,提供多租户方式,当它被用作远程写入...

    CNCF
  • servlet实现简单的计算器

    从今天开始,我会将这学期陆续学习的一些知识,发到网上,也会不断添加新的知识点。 今天,先用servlet编写一个简易的计算器。使用eclipse或myecl...

    曼路
  • 扫地机变身机器人管家,科沃斯走出智能家居迷宫

    【春卷】去年10月中旬,当我还在PChome工作时曾和当时家电部门同事,就@科沃斯 公司创始人@钱东奇 先生的一篇有关家用机器人发展的文章做过讨论。后来我还特地...

    新智元
  • Zone.js 简介 & 抛砖引玉

    Zone.js是angular团队参照NodeJS的Domain,Dart的Zone,为angular 2开发的核心组件。

    IMWeb前端团队
  • 如何用JavaScript捕获CSS3的动画事件

    CSS3动画执行起来平滑且快速,但不像JavaScript动画,你可以一帧一帧控制。幸运的是,你可以在任何一个元素上使用事件处理来决定动画的状态。同时它支持连续...

    疯狂的技术宅
  • Zone.js 简介 & 抛砖引玉

    本文作者:IMWeb 杨文坚 原文出处:IMWeb社区 未经同意,禁止转载 Zone.js是angular团队参照NodeJS的Domain,Dart...

    IMWeb前端团队
  • hadoop 1.1.2和 hive 0.10 和hbase 0.94.9整合

      今天弄了一下hive0.10和hbase0.94.9整合,需要设置的并不多,但是也遇到了一些问题。   1.复制jar包   拷贝hbase-0.94.9....

    岑玉海

扫码关注云+社区

领取腾讯云代金券