热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

openstack虚拟机关于NUMA

NUMA简单介绍NUMA:(NonUniformMemoryAccess)即非一致内存访问架构。NUMA具有多个节点(Node),每个节点可以拥有多
NUMA简单介绍

NUMA:(Non Uniform Memory Access)即非一致内存访问架构。

NUMA具有多个节点(Node),每个节点可以拥有多个CPU(每个CPU可以具有多个核或线程),节点内使用共有的内存控制器,因此节点的所有内存对于本节点的所有CPU都是等同的,而对于其它节点中的所有CPU都是不同的。节点可分为本地节点(Local Node)、邻居节点(Neighbour Node)和远端节点(Remote Node)三种类型。

本地节点:对于某个节点中的所有CPU,此节点称为本地节点;

邻居节点:与本地节点相邻的节点称为邻居节点;

远端节点:非本地节点或邻居节点的节点,称为远端节点。

邻居节点和远端节点,称作非本地节点。

CPU访问不同类型节点内存的速度是不相同的:本地节点>邻居节点>远端节点。访问本地节点的速度最快,访问远端节点的速度最慢,即访问速度与节点的距离有关,距离越远访问速度越慢。考虑到上述问题,业务在部署虚拟机时很多情况下要求绑核。

Nova简单介绍

Nova是OpenStack的核心组件,用于管理计算资源,实现对计算资源的分配、调度和销毁等操作。Nova这一组件包含了许多的小组件,其中有API Server (nova-api)、Message Queue (rabbit-mq server)、Compute Workers (nova-compute)、Network Controller (nova-network)、Scheduler (nova-scheduler)和Conductor(nova-conductor)等。具体的组件的作用不在本文介绍范围,后续详细介绍。

Nova中使用NUMA

K版本开始使用numa机制进行,为了便于numa资源的管理以及使用,在nova数据库的comoute_nodes表中使用numa_topology字段来记录,但是numa_topology的支持是有版本要求的:

Libvirt:X86下1.2.7及以上版本,PPC下1.2.19及以上版本;

Qemu:2.1.0版本及以上。

Libvirt以及qemu版本的查看方法:

a97358d541d508350894d9cf34717ff8.png

图1 Libvirt版本查看

支持numa的系统中nova上报的numa cpu信息如下:

"cpuset": [0, 1, 2, 3, 8, 9, 10, 11], "pinned_cpus": [], "id": 0, "siblings": [[3, 11], [0, 8], [1, 9], [2, 10]],"cpuset": [4, 5, 6, 7, 12, 13, 14, 15], "pinned_cpus": [], "id": 1, "siblings": [[7, 15], [4, 12], [5, 13], [6, 14]]

Id: numa node的编号;

Cpuset:该node上的cpu列表;

pinned_cpus:该node上已经被虚拟机绑定的cpu列表;

siblings:该node上核间的亲和关系,成对的表示在同一个物理核上。

Nova中cpu相关设置

部署虚拟机时需要指定虚拟机使用的物理节点的numa相关信息才能保证虚拟机按照自己的要求进行部署,否则系统将不会进行任何的绑定,并且使用的numa节点也不确定。

hw:numa_nodes:虚拟机使用物理机的numa node的数量。一般情况为1或2,设置为1时主要考虑让虚拟机部署于一个numa节点之内时能提高效能,但是很多情况下部署的虚拟机的核数以及内存要求比较大时设置为1就不合适了,需要让虚拟机使用两个node。

hw:numa_cpus.0:该配置项指定物理机某个node上承接的虚拟机cpu的数量。如果此项没有配置,则虚拟机的cpu按照numa_nodes数量和vcpu数量平均分配。即物理机上单个numa节点内承接vcpu/numa_nodes的数量个vcpu。

hw:numa_mem.0:与hw:numa_cpus.0配对使用,用于指明物理机某个numa node上承接的虚拟机的内存数量。

hw:cpu_policy:虚拟机的绑核策略,即虚拟机的vcpu与物理机的pcpu是不是进行绑定。取值为shared或者dedicated,默认是shared。其中shared表示分配到某一个numa节点的多个vcpu会共享该node内的pcpu;dedicated表示精确绑核,即vcpu会精确绑定到某个特定pcpu。

还有一些设置可以决定虚拟机内部CPU的呈现形式:

hw:cpu_sockets - 优选 socket 数量

hw:cpu_cores - 优选 core 数量

hw:cpu_threads - 优选 thread 数量

hw:cpu_maxsockets - 最大socket数

hw:cpu_maxcores - 最大core数量

hw:cpu_maxthreads - 最大 thread 数量

注意

1)hw:numa_mem.0与hw:numa_cpus.0配对使用,即两者必须同时指定,同时,几个node上mem累加后不得超过flavor内存。

2)带编号的几个配置中的编号并不是说0就一定部署在物理机的0号numa节点上,而仅仅用来说明一个逻辑编号。

3)如果配置了hw:numa_nodes数量,则绑核时会根据这个数量把cpu绑核到一个或者多个物理numa节点上。如果绑核策略为share,则如果numa_nodes为1或者没配置,则vcpu会被限定在某个node中的pcpu中漂移;如果numa_nodes配置为2,则vcpu会按照数量在两个node中的pcpu进行漂移。如果绑核策略为dedicated,则绑核时会根据hw:numa_nodes数量把vcpu绑核到不同的物理numa节点上。

4)所有的配置项都支持flavor或者image中配置,只是image中对应的配置为hw_配置项的形式,如果image和flavor中都做了配置,则以image中的配置为准。

设置方法

1)flavor中设置方法

命令:nova flavor-key flavor_id set 配置项=value

2)image中设置方法

命令:glance image-update --property 配置项=value image_id

相关问题

1) 指定为核绑定策略为dedicated时不支持内存以及cpu超分。

2) 设置为dedicated核绑定策略时,如果numa过滤器找不到合适的host,则查看是是否因cpu资源不足失败的方法为:

找到nova数据库中的compute_nodes表的numa_topology列中如下信息:

"cpuset": [0, 1, 2, 3, 8, 9, 10, 11], "pinned_cpus": [], "id": 0, "siblings": [[3, 11], [0, 8], [1, 9], [2, 10]],

"cpuset": [4, 5, 6, 7, 12, 13, 14, 15], "pinned_cpus": [], "id": 1, "siblings": [[7, 15], [4, 12], [5, 13], [6, 14]]

 {"cells": [{"cpu_usage": 0, "memory_usage": 0, "cpuset": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41], "memory": 130951, "pinned_cpus": [], "pcpuset": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41], "siblings": [[9, 37], [11, 39], [34, 6], [40, 12], [33, 5], [10, 38], [2, 30], [41, 13], [35, 7], [3, 31], [32, 4], [1, 29], [8, 36], [0, 28]], "id": 0}]}

查看node上cpuset-pinned_cpus后的cpu的数量是否小于虚拟机要求的node节点上cpu的数量。

3) 虚拟机创建后cpu绑核情况的查看方法:

virsh vcpupin 虚拟机uuid/instance name

如下表示虚拟机的vcpu未绑核

b5cf8aa8f08f4573b26dd10fdaef9cec.png

sudo virsh vcpupin instance-000008fe
VCPU: CPU Affinity
----------------------------------0: 0-551: 0-55

如下表示虚拟机的vcpu已绑核

e61b77dadd179f253cf8102f8ee56805.png


推荐阅读
  • ZeroMQ在云计算环境下的高效消息传递库第四章学习心得
    本章节深入探讨了ZeroMQ在云计算环境中的高效消息传递机制,涵盖客户端请求-响应模式、最近最少使用(LRU)队列、心跳检测、面向服务的队列、基于磁盘的离线队列以及主从备份服务等关键技术。此外,还介绍了无中间件的请求-响应架构,强调了这些技术在提升系统性能和可靠性方面的应用价值。个人理解方面,ZeroMQ通过这些机制有效解决了分布式系统中常见的通信延迟和数据一致性问题。 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • 本文介绍了 Go 语言中的高性能、可扩展、轻量级 Web 框架 Echo。Echo 框架简单易用,仅需几行代码即可启动一个高性能 HTTP 服务。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 虚拟机网络设置与数据库远程连接优化指南
    本文针对个人计算机上虚拟机网络配置与数据库远程连接的问题,提供了一套详细的优化指南。在探讨远程数据库访问前,需确保网络配置正确,特别是桥接模式的设置。通过合理的网络配置,可以有效解决因虚拟机或网络问题导致的连接失败,提升远程访问的稳定性和效率。 ... [详细]
  • 本文推荐了六款高效的Java Web应用开发工具,并详细介绍了它们的实用功能。其中,分布式敏捷开发系统架构“zheng”项目,基于Spring、Spring MVC和MyBatis技术栈,提供了完整的分布式敏捷开发解决方案,支持快速构建高性能的企业级应用。此外,该工具还集成了多种中间件和服务,进一步提升了开发效率和系统的可维护性。 ... [详细]
  • 如何在Linux系统中辨别服务器是否为虚拟机或物理机
    在Linux系统中,可以通过执行特定命令来判断服务器是物理机还是虚拟机。例如,在CentOS系统中,运行 `dmidecode | grep -A16 "System Information"` 命令,查看输出中的“Manufacturer”和“Product Name”字段,这些信息可以帮助用户准确区分服务器的类型。此外,还可以通过检查 `/sys/devices/virtual/dmi/id` 目录下的文件内容,进一步确认服务器的具体型号和制造商信息。 ... [详细]
  • 探讨.NET技术与Silverlight中控件拖放及复制功能的实现方法
    Silverlight拖动复制控件,就是将控件从一个容器中向另一个容器中拖动时,不是移动控件而把该控件到另一个容器中。这种情形在程序中经常遇到ÿ ... [详细]
  • 深入理解Kafka服务端请求队列中请求的处理
    本文深入分析了Kafka服务端请求队列中请求的处理过程,详细介绍了请求的封装和放入请求队列的过程,以及处理请求的线程池的创建和容量设置。通过场景分析、图示说明和源码分析,帮助读者更好地理解Kafka服务端的工作原理。 ... [详细]
  • 【重识云原生】第四章云网络4.8.3.2节——Open vSwitch工作原理详解
    2OpenvSwitch架构2.1OVS整体架构ovs-vswitchd:守护程序,实现交换功能,和Linux内核兼容模块一起,实现基于流的交换flow-basedswitchin ... [详细]
  • 阿里云服务器搭建详解——Ubuntu
    由于自己电脑配置跟不上,双系统一开,整个电脑就会变得非常卡顿,所以决定在阿里云买一个云服务器。听朋友说,学生买的话是非常便宜 ... [详细]
  • 使用ArcGIS for Java和Flex浏览自定义ArcGIS Server 9.3地图
    本文介绍了如何在Flex应用程序中实现浏览自定义ArcGIS Server 9.3发布的地图。这是一个基本的入门示例,适用于初学者。 ... [详细]
  • 思科IOS XE与ISE集成实现TACACS认证配置
    本文详细介绍了如何在思科IOS XE设备上配置TACACS认证,并通过ISE(Identity Services Engine)进行用户管理和授权。配置包括网络拓扑、设备设置和ISE端的具体步骤。 ... [详细]
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • 深入解析Struts、Spring与Hibernate三大框架的面试要点与技巧 ... [详细]
author-avatar
jiushi45678
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有