文档目录

概述

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
配置项 物理机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
图 2. 物理机pNUMA拓扑


假定用户计划在以上两台物理机上分别创建一台CentOS 7.6业务云主机,用于运行MySQL 5.7.37数据库服务,云主机的基础配置和MySQL配置如表 2MySQL配置所示:
配置项 云主机
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上业务云主机性能对比。

操作步骤

  1. 创建业务云主机。
    分别在物理机A和物理机B上创建一台云主机,两台云主机所使用的镜像均已封装MySQL 5.7.37数据库服务,且基础配置相同。

    快捷创建云主机详情可参考创建云主机(快捷创建)

  2. 物理机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数量,将会大幅影响云主机性能,不推荐这样设置。
    • 重启云主机:选择是否重启云主机,默认不勾选。
      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拓扑图


  3. 场景测试与验证:物理机A上业务云主机和物理机B上业务云主机性能对比。
    1. 测试环境和工具准备。

      ZStack Cloud添加一台物理机C,可与物理机A和B以及两台云主机可网络互通。该物理机用于安装sysbench及其相关依赖。

      运行以下命令安装依赖gcc、make、automake、libtool、libaio-devel、pkgconfig、mysql-devel、mysql-common、mysql-libs、mysql-libs-compat,其中MySQL相关的依赖需要与MySQL版本一致:
      yum install gcc make mysql-devel mysql-common mysql-libs mysql-libs-compat
      GitHub下载测试工具sysbench,执行以下命令安装:
      # 解压sysbench
      tar -zxvf sysbench-1.0.20.source.tar.gz
      # 安装sysbench
      ./autogen.sh
      ./configure --with-mysql
      make
      make install
    2. 测试脚本准备。
      本场景通过测试脚本进行验证,部分测试脚本内容为:
      #!/usr/bin/bash
      
      hosts=("172.24.244.76" "172.24.244.73")
      port="3306"
      user="test"
      passwd="Qwert-12345"
      db_name="ptest"
      table_num="200"
      table_size="100000"
      interval="30"
      thread_num="300"
      test_time=600
      delay_time=30
      sysbench_path="/root/workspace/sysbench-1.0.20/src/sysbench"
      lua_oltp_path="/root/workspace/sysbench-1.0.20/src/lua/oltp_read_write.lua"
      
      current_time=$(date "+%Y%m%d%H%M%S")
      result_dir="/tmp/sysbench/${current_time}"
       ...
      其中以下四个测试参数意义如下:
      测试参数 参数含义
      table_num 测试数据表数量
      table-size 每张测试表的数据量
      thread_num 测试并发用户数量
      test_time 测试时间
    3. 测试结果分析。
      本场景下,测试性能指标为每秒事务数(TPS)以及95%响应时间。物理机A和物理机B上的云主机性能指标表现如下:
      场景 云主机 TPS TPS提升百分比 95%响应时间(秒) 95%响应时间下降百分比
      vNUMA关闭 vNUMA性能测试-物理机B 1843 / 292.60 /
      vNUMA开启 vNUMA性能测试-物理机A 1998 8.41% 248.83 14.96%
      vNUMA关闭、CPU绑定保留 vNUMA性能测试-物理机A 1862 1.03% 277.21 5.26%

      由上表可知,开启vNUMA后,云主机业务处理能力有一定提升,响应时间有一定缩短。若关闭云主机vNUMA、但保留CPU绑定配置,云主机性能提升相对较小。因此,vNUMA可在一定程度上提高云主机系统性能。

云主机vNUMA配置教程 | 5.5.30 | ZStack Cloud · ZCF | ZStack 资源中心