ITPub博客

首页 > 数据库 > 数据库开发技术 > 31 KVM管理系统资源-管理虚拟内存NUMA

31 KVM管理系统资源-管理虚拟内存NUMA

原创 数据库开发技术 作者:shuchaoyang 时间:2023-03-16 07:30:00 16 删除 编辑

31 KVM管理系统资源-管理虚拟内存NUMA31.1 NUMA简介31.2 配置Host-NUMA操作步骤31.3 配置Guest-NUMA操作步骤

31 KVM管理系统资源-管理虚拟内存NUMA

31.1 NUMA简介

传统的多核运算使用SMP(Symmetric Multi-Processor)模式:将多个处理器与一个集中的存储器和I/O总线相连。所有处理器只能访问同一个物理存储器,因此SMP系统也被称为一致存储器访问(UMA)系统。一致性指无论在什么时候,处理器只能为内存的每个数据保持或共享唯一一个数值。很显然,SMP的缺点是可伸缩性有限,因为在存储器和I/O接口达到饱和的时候,增加处理器并不能获得更高的性能。

NUMA(Non Uniform Memory Access Architecture) 模式是一种分布式存储器访问方式,处理器可以同时访问不同的存储器地址,大幅度提高并行性。NUMA模式下,处理器被划分成多个“节点”(NODE), 每个节点分配一块本地存储器空间。所有节点中的处理器都可以访问全部的物理存储器,但是访问本节点内的存储器所需要的时间,比访问某些远程节点内的存储器所花的时间要少得多。

31.2 配置Host-NUMA

为提升虚拟机性能,在虚拟机启动前,用户可以通过虚拟机XML配置文件为虚拟机指定主机的NUMA节点,使虚拟机内存分配在指定的NUMA节点上。本特性一般与vCPU绑定一起使用,从而避免vCPU远端访问内存。

操作步骤
  • 查看host的NUMA拓扑结构:

    # numactl -H
    available: 4 nodes (0-3)
    node 0 cpus: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
    node 0 size: 31571 MB
    node 0 free: 17095 MB
    node 1 cpus: 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
    node 1 size: 32190 MB
    node 1 free: 28057 MB
    node 2 cpus: 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
    node 2 size: 32190 MB
    node 2 free: 10562 MB
    node 3 cpus: 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
    node 3 size: 32188 MB
    node 3 free: 272 MB
    node distances:
    node   0   1   2   3
     0:  10  15  20  20
     1:  15  10  20  20
     2:  20  20  10  15
     3:  20  20  15  10
  • 在虚拟机XML配置文件中添加numatune字段,创建并启动虚拟机。例如使用主机上的NUMA node 0给虚拟机分配内存,配置参数如下:

      <numatune>
      <memory mode="strict" nodeset="0"/>
    </numatune>

    假设虚拟机的vCPU也绑定在NODE0的物理CPU上,就可以避免由于vCPU访问远端内存带来的性能下降。

说明:
    • 分配给虚拟机的内存不要超过该NUMA节点剩余的可用内存,否则可能导致虚拟机启动失败。

    • 建议虚拟机内存和vCPU都绑定在同一NUMA节点,避免vCPU访问远端内存造成性能下降。例如将上例中vCPU也绑定在NUMA node 0上。

31.3 配置Guest-NUMA

虚拟机中运行的很多业务软件都针对NUMA架构进行了性能优化,尤其是对于大规格虚拟机,这种优化的作用更明显。openEuler提供了Guest NUMA特性,在虚拟机内部呈现出NUMA拓扑结构。用户可以通过识别这个结构,对业务软件的性能进行优化,从而保证业务更好的运行。

配置Guest NUMA时可以指定vNode的内存在HOST上的分配位置,实现内存的分块绑定,同时配合vCPU绑定,使vNode上的vCPU和内存在同一个物理NUMA node上。

操作步骤

在虚拟机的XML配置文件中,配置了Guest NUMA后,就可以在虚拟机内部查看NUMA拓扑结构。<numa>项是Guest NUMA的必配项。

  <cputune>
  <vcpupin vcpu='0' cpuset='0-3'/>
  <vcpupin vcpu='1' cpuset='0-3'/>
  <vcpupin vcpu='2' cpuset='16-19'/>
  <vcpupin vcpu='3' cpuset='16-19'/>
</cputune>
<numatune>
  <memnode cellid="0" mode="strict" nodeset="0"/>
  <memnode cellid="1" mode="strict" nodeset="1"/>
</numatune>
[...]
<cpu>
  <numa>
    <cell id='0' cpus='0-1' memory='2097152'/>
    <cell id='1' cpus='2-3' memory='2097152'/>
  </numa>
</cpu>

说明:

  • <numa>项提供虚拟机内部呈现NUMA拓扑功能,“cell id”表示vNode编号,“cpus”表示vCPU编号,“memory”表示对应vNode上的内存大小。

  • 如果希望通过Guest NUMA提供更好的性能,则需要配置<numatune>和<cputune>,使vCPU和对应的内存分布在同一个物理NUMA NODE上:

  • <numatune>中的“cellid”和<numa>中的“cell id”是对应的;“mode”可以配置为“strict”(严格从指定node上申请内存,内存不够则失败)、“preferred”(优先从某一node上申请内存,如果不够则从其他node上申请)、“interleave”(从指定的node上交叉申请内存);“nodeset”表示指定物理NUMA NODE。

  • <cputune>中需要将同一cell id中的vCPU绑定到与memnode相同的物理NUMA NODE上。


👍 点赞,你的认可是我创作的动力!

⭐️ 收藏,你的青睐是我努力的方向!


有什么吐槽或反馈意见,直接告诉我!

温馨提示:如出现二维码失效也可直接添加微信号:ysc13803862469。

原文作者:超哥的IT私房菜;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论
专注于IT系统集成、运维、架构二十年的IT职场老兵,拥有CCNA、OCA、OCP、PGCA、PGCE认证证书,公众号:超哥的IT私房菜,知识星球:超哥的IT私房菜,目前是多家IT厂商的咨询顾问。

注册时间:2021-08-27

  • 博文量
    552
  • 访问量
    303526