• 高性能云主机来啦!详解ZStack vNUMA功能


    云轴科技ZStack创建的云主机适用于绝大部分的应用场景,但随着云轴科技ZStack用户数量的不断增长,更多用户提出了高性能云主机的需求。为满足高性能云主机需求,云轴科技ZStack此前为云主机提供了手动配置CPU绑定和vNUMA的接口,但需要用户了解其中原理并且手动分配物理机资源才能进行配置,操作门槛较高。因此ZStack Cloud云平台在4.3.12版本上升级了原有的vNUMA配置方法,带来了全新的智能vNUMA(virtual NUMA)功能。

    01、什么是NUMA架构

    NUMA(Non-uniform memory access、非统一内存访问)架构是一种为多处理器电脑设计的内存架构,内存访问时间取决于内存相对于处理器的位置。NUMA架构通过对CPU和内存资源分组,引入了本地内存和远程内存。访问本地内存可以直接通过当前node的内存控制器,但是远程内存就需要通过inter-connect通道来访问。这种物理结构决定了在访问远程内存的延迟会比访问本地内存更高。

    在这里插入图片描述

    图1 NUMA架构示例图
    ZStack Cloud云平台创建的VM通过操作系统的调度策略,会尽量让同一个VM的CPU、内存资源保持在同一个NUMA node上,当出现资源非常紧张,或者CPU、内存规格不合理导致操作系统难以分配资源的情况时,可能会因为跨NUMA内存访问带来的内存访问延迟而导致VM性能下降。

    市面上的一些IaaS软件也提供了vNUMA配置功能,但限制较多:

    需要手动设置vCPU绑定,且VM资源优先绑定在物理机同一个NUMA node上;
    对VM的CPU数量有要求并且不支持手动绑定到物理机NUMA node上。
    对于VM的CPU、内存以及vNUMA node资源与物理机上对应资源,均无法查看两者之间的绑定关系。过去版本的ZStack Cloud云平台也提供了vNUMA配置接口,但需要用户手动规划云主机的vCPU和内存区域如何与物理机上CPU和内存区域绑定,并且手动配置vCPU绑定、vNUMA拓扑等,这一系列流程对于用户来说操作难度较大。

    基于上述原因,ZStack Cloud云平台在4.3.12版本上优化了vNUMA配置流程,带来了全新的智能vNUMA功能。

    02、ZStack智能vNUMA配置

    ZStack 智能vNUMA方案是基于现有的CPU绑定功能拓展而来。基于云主机使用的vCPU和物理机pCPU的绑定关系自动生成与物理机NUMA拓扑一致的云主机 vNUMA拓扑,即根据vCPU pin pCPU的绑定关系,透传pCPU所在的物理机NUMA拓扑信息作为云主机的vNUMA拓扑(NUMA拓扑一致性)。

    要开启vNUMA并生效,存在前提条件:

    云主机所有的vCPU均绑定了物理机CPU;
    云主机的单个vCPU绑定的多个pCPU不能分别属于物理机上多个NUMA node。例如vCPU 0绑定了物理机上NUMA node 0中的CPU 0以及NUMA node 1中的CPU16,由于vCPU 0可能运行在物理机NUMA node 0 或者node 1上,具有不确定性,故而无法开启vNUMA;
    配置vNUMA后需要重启才能生效。ZStack智能vNUMA方案在原先允许手动配置CPU绑定的基础上提供了智能绑定,可以自动地将vCPU按照1:1的比例绑定到pCPU上,降低了用户操作的难度。后续只需要用户开启vNUMA开关,启动云主机时各个vNUMA node的内存大小会根据云主机内存大小以及各个vNUMA node中vCPU数量的比例来自动分配,并且自动配置云主机的vNUMA 拓扑信息。云主机启动成功后即可在ZStack Cloud云平台页面上查看vNUMA拓扑与物理机NUMA拓扑之间的绑定关系,让用户更加直观地了解云主机的vCPU和内存与物理机CPU和内存的对应关系。
    在这里插入图片描述

    03、 性能测试

    通过在相同的两台物理机上创建相同规格的云主机,进行MySQL性能测试,验证vNUMA开启与关闭状态下的性能表现。

    3.1 配置与测试工具

    物理机配置
    在这里插入图片描述

    ZStack Cloud云平台配置
    在这里插入图片描述

    测试工具
    在这里插入图片描述

    云主机配置
    在这里插入图片描述

    MySQL配置
    在这里插入图片描述

    3.2 配置与测试工具

    使用相同的服务器硬件、云主机规格以及MySQL版本,使用HammerDB在数据库MySQL写入1000个warehouse的测试数据。然后其中一台云主机开启vNUMA,配置如表1所示,并在MySQL配置文件中设置innodb_numa_interleave=1。最后使用HammerDB测试MySQL性能并记录。

    在这里插入图片描述
    表1 开启vNUMA的云主机的配置情况
    在这里插入图片描述

    图2 24C80G云主机vNUMA拓扑图
    3.3 测试数据

    MYSQL TPM(Transaction Per Minute)性能对比图表:
    在这里插入图片描述

    表2 MYSQL TPM(Transaction Per Minute)性能对比图表
    在这里插入图片描述

    图3 vNUMA启用前后MySQL TPM性能对比图表
    MySQL NOPM(New Order Per Minute)性能对比图表:‍
    在这里插入图片描述

    表3 MySQL NOPM(New Order Per Minute)性能对比图表
    在这里插入图片描述

    图4 vNUMA启用前后MySQL NOPM性能对比图表
    3.4 结论

    vNUMA功能启用后,MySQL性能提升明显,平均提升约为15%,在测试压力较大时性能可以提升18%,提升更明显。

    04、 思考

    1、本次测试未做CPU isolate、物理机上的内核进程以及中断等,仍然可以在已经被绑定的pCPU上运行,可能会影响到pCPU的性能。

    2、本次测试中物理机未启用大页内存,启用大页内存可以减少操作系统对页面状态的维护,并且能够提升Translation Lookaside Buffer(页面缓冲,TLB)的命中率,启用大页内存通常对数据库有性能提升的作用。

  • 相关阅读:
    Assimp库模型导入结构
    【基础篇】ClickHouse 表结构设计
    【3dmax】怎么使面变透明
    [附源码]Python计算机毕业设计Django的云网盘设计
    基于SSM+Vue的物流管理系统的设计与实现
    SpringBoot:Web开发之三大组件详解
    【nvm】Node Version Manager(NVM)安装配置以及使用(WIN版)
    java基于springboot医院预约挂号管理系统附代码段
    C++类与对象(三)赋值运算符重载、const成员
    linux笔记(6):东山哪吒D1H显示HDMI测试-命令行调试
  • 原文地址:https://blog.csdn.net/zstack_org/article/details/126057671