概述
vNUMA配置:通过CPU绑定透传关联的物理机NUMA节点(pNUMA Node)拓扑,为云主机生成vNUMA节点(vNUMA Node)拓扑,实现云主机CPU优先访问所在vNUMA节点本地内存,提高云主机性能。
相关定义
- NUMA(Non-Uniform Memory Access):非一致性内存访问,是一种计算机内存设计架构。该架构下,CPU访问内存的时间取决于CPU与内存的相对位置。通过优先访问相对位置较近的内存可缩短延迟,从而可提升主机系统性能。
- pNUMA节点(pNUMA Node):基于物理机NUMA架构预定义的NUMA节点,用于物理机CPU和内存管理。一台物理机可有一个或多个pNUMA节点,一个pNUMA节点主要由一个或多个物理CPU核(pCPU)和本地内存组成。
- pNUMA拓扑(pNUMA Topology):CPU厂商基于NUMA架构预定义的物理机NUMA节点拓扑。
- vNUMA节点(vNUMA Node):基于CPU绑定透传关联的物理机NUMA节点而生成的云主机NUMA节点,用于云主机CPU和内存管理。一个vNUMA节点主要由一个或多个虚拟CPU核(vCPU)和本地内存组成。
- vNUMA拓扑(vNUMA Topology):基于CPU绑定生成的云主机NUMA节点(vNUMA Node)拓扑。
- 本地内存:CPU(pCPU或vCPU)通过所在NUMA节点(pNUMA节点或vNUMA节点)非CPU核部件中内存控制器可直接访问的内存。相比非本地内存,CPU访问本地内存的延迟更低。
功能原理
ZStack Cloud 云主机vNUMA配置基于CPU绑定实现,CPU绑定将云主机的vCPU与物理机的pCPU严格关联,为云主机分配特定的pCPU。vNUMA配置时,云主机所有vCPU均绑定pCPU,同时单个vCPU所绑定的pCPU均处在同一个pNUMA节点中。
vNUMA配置后,云主机直接透传关联的物理机pNUMA节点拓扑,生成一个或多个vNUMA节点,构成云主机的vNUMA拓扑。云主机vCPU基于vNUMA拓扑优先访问所在节点的本地内存。
如图 1所示:图 1. 云主机vNUMA配置原理


功能优势
- 系统提效增能:vNUMA通过CPU绑定为云主机生成vNUMA节点拓扑,实现云主机CPU优先访问所在vNUMA节点本地内存,从而提高系统性能和运行效率。
- 配置方式灵活:支持多种CPU绑定方式,使得绑定配置可视化、智能化、便捷化,助力用户按照业务需求高效精准配置。
应用场景
vNUMA面向NUMA敏感类业务,主要适用于以下场景:
- 数据库和编译服务场景:
数据库服务(Oracle、SQL Server)以及编译服务需频繁访问内存,要求系统高性能快速响应。通过配置vNUMA,使服务优先访问本地内存,可大大缩短访问延迟,提高系统计算性能。
- CPU密集型小应用场景:
CPU密集型应用对CPU资源需求旺盛,若大量CPU密集型小应用跑在云主机上,可能会出现CPU资源争抢的情况。vNUMA将CPU资源按NUMA结构进行分组,使各个应用运行在特定的vNUMA节点上,从而避免资源争抢,提高系统性能。
注意事项
云主机vNUMA配置与云平台其他相关功能存在一定依赖关系。在为云主机配置vNUMA时,需注意以下几点:
vNUMA配置前
- vNUMA会根据CPU绑定配置将云主机vCPU和内存进行分组,在为云主机配置vNUMA前,需关闭云主机高级设置计算规格在线修改。
vNUMA配置时
- 云主机所有vCPU均需绑定pCPU。
- 单个vCPU所绑定的pCPU均需在一个pNUMA节点中。
- vCPU范围取决于所选云主机计算规格,pCPU范围取决于云主机所在物理机的pCPU数量。
- 如果一个vCPU有多条对应的CPU绑定规则,取其并集。
- ZStack Cloud支持CPU超分,vCPU数量可以大于pCPU数量,但如果在CPU绑定规则中设置vCPU数量大于pCPU数量,将会大幅影响云主机性能,不推荐这样设置。
vNUMA配置后
- 云主机不支持单独进行CPU绑定。
- 云主机不支持设置计算规格在线修改和内存气球。
- 若在线更改云主机所在的物理机,需确保目的物理机和源物理机的pNUMA结构一致。
- 若在线更改云主机所在的物理机和主存储,云主机将只迁移至与源物理机pNUMA结构相同的物理机。
典型场景实践
背景信息
场景假定:由于业务需要,用户计划在云主机上部署MySQL数据库服务,并希望通过为云主机配置vNUMA降低数据库访问延时,提升云主机性能。
假定用户已安装ZStack Cloud云平台,并在云平台同一集群内添加两台物理机,物理机基础配置和pNUMA拓扑如表 1和图 2:
图 2. 物理机pNUMA拓扑

| 配置项 | 物理机A | 物理机B |
|---|---|---|
| 型号 | PowerEdge R740 | PowerEdge R740 |
| CPU | Intel(R) Xeon(R) Silver 4216 CPU @ 2.10GHz *2 | Intel(R) Xeon(R) Silver 4216 CPU @ 2.10GHz *2 |
| 内存 | 32GB * 24 | 32GB * 24 |
| SSD | 1. 92T*5 | 1. 92T*5 |
| RAID卡 | PERC H730P Adapter | PERC H730P Adapter |
| 管理网IP地址 | 172.24.0.172/24 | 172.24.0.173/24 |

假定用户计划在以上两台物理机上分别创建一台CentOS 7.6业务云主机,用于运行MySQL 5.7.37数据库服务,云主机的基础配置和MySQL配置如表 2和MySQL配置所示:
| 配置项 | 云主机 |
|---|---|
| CPU | 48核 |
| 内存 | 240GB |
| 磁盘容量 | 100GB |
| 业务网IP | 172.24.244.74/16 |
MySQL配置:
# 最大连接数
max_connections=500
# innodb内存交错分配
innodb_numa_interleave=1
# 预编译SQL语句数量
max_prepared_stmt_count=600000云主机配置vNUMA实践基本流程如下:
- 创建业务云主机。
- 物理机A上的业务云主机配置vNUMA。
- 场景验证:物理机A上业务云主机和物理机B上业务云主机性能对比。
操作步骤
-
创建业务云主机。
分别在物理机A和物理机B上创建一台云主机,两台云主机所使用的镜像均已封装MySQL 5.7.37数据库服务,且基础配置相同。
快捷创建云主机详情可参考创建云主机(快捷创建)。
-
物理机A上的业务云主机配置vNUMA。
为物理机A上的业务云主机配置vNUMA。本场景下,云主机上每个vCPU仅绑定一个pCPU,物理机A上每个pCPU仅绑定一个vCPU。云主机vCPU优先绑定物理机一个pNUMA节点上所有pCPU,即32个vCPU关联pNUMA Node 1,剩下16 vCPU 关联 pNUMA Node 0。作为对照,物理机B上的业务云主机不配置vNUMA。配置过程如下:在ZStack Cloud主菜单,点击,选择目标云主机,点击vNUMA,进入配置 vNUMA页面。Note: vNUMA会根据CPU绑定配置将云主机vCPU和内存进行分组,在为云主机配置vNUMA前,需关闭云主机高级设置计算规格在线修改、内存气球。可参照以下示例进行vNUMA配置:
- vNUMA:打开vNUMA开关,默认关闭。
- CPU绑定:将云主机的vCPU与物理机的pCPU严格关联,为云主机分配特定的
pCPU,可选择按NUMA结构绑定和输入绑定两种绑定策略。
- 按NUMA结构绑定:将vCPU按照物理机pNUMA拓扑绑定pCPU。支持手动绑定和智能绑定。
- 手动绑定支持自定义为所有vCPU绑定pCPU。
- 智能绑定按pNUMA节点ID从大到小的顺序,将该云主机vCPU与pNUMA节点中pCPU一对一绑定。当一个pNUMA节点中pCPU均已被该云主机vCPU绑定,将依序绑定下一个pNUMA节点中的pCPU。若所有pCPU均已被绑定,但仍有vCPU未绑定pCPU,将轮询至首个绑定的pNUMA节点继续一对一绑定。
- 一个vCPU支持绑定一个或多个pCPU,同时一个pCPU支持被一个或多个vCPU绑定。
- 支持展示各个pCPU过去15分钟平均使用率,助力选择最佳pCPU进行绑定。
- 输入绑定:
- 点击添加CPU绑定按钮,可设置多条CPU绑定规则。
- 左侧文本框中输入vCPU范围,在右侧文本框中输入pCPU范围。填写规则:“-”表示区间,“^”表示不包括,每条规则之间用“,”隔开。例如:
- 0-2表示0、1、2号CPU
- ^2表示不包含2号CPU
- 0-2,^2表示0、1号CPU
- 1-7,^2,^3,^4,10 表示 1,5,6,7,10号CPU
Note:- 云主机所有vCPU均需绑定pCPU。
- 单个vCPU所绑定的pCPU均需在一个pNUMA节点中。
- vCPU范围取决于所选云主机计算规格,pCPU范围取决于云主机所在物理机的pCPU数量。
- 如果一个vCPU有多条对应的CPU绑定规则,取其并集。
- ZStack Cloud支持CPU超分,vCPU数量可以大于pCPU数量,但如果在CPU绑定规则中设置vCPU数量大于pCPU数量,将会大幅影响云主机性能,不推荐这样设置。
- 按NUMA结构绑定:将vCPU按照物理机pNUMA拓扑绑定pCPU。支持手动绑定和智能绑定。
- 重启云主机:选择是否重启云主机,默认不勾选。Note:
- 配置vNUMA后重启云主机生效。
- 重启云主机可能会导致云主机业务暂时中断,请谨慎操作。
如图 3所示:图 3. 配置vNUMA 
云主机配置vNUMA并重启后,将生成vNUMA拓扑结构,可在云主机总览页查看:- vNUMA:
- 绑定了同一个pNUMA节点中pCPU的vCPU形成一个vNUMA节点,各个vNUMA节点均关联对应pNUMA节点。
- 总内存为vCPU可直接访问的所在vNUMA节点本地内存总量。
- pNUMA:
- 展示云主机所关联的所有pNUMA节点。
- 总内存为pCPU可直接访问的所在pNUMA节点本地内存总量。
- 空闲内存为pCPU可直接访问的所在pNUMA节点本地空闲内存。
- 总内存和空闲内存均取自pNUMA节点真实硬件物理内存容量。
云主机vNUMA性能测试-物理机A生成的vNUMA拓扑图如图 4所示:图 4. vNUMA拓扑图 
-
场景测试与验证:物理机A上业务云主机和物理机B上业务云主机性能对比。
