ITPub博客

首页 > 数据库 > 数据库开发技术 > 30 KVM管理系统资源-CPU热插

30 KVM管理系统资源-CPU热插

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

30 KVM管理系统资源-CPU热插30.1 概述30.2 约束限制30.3 操作步骤30.2.1 配置虚拟机XML30.2.2 热插并上线CPU

30 KVM管理系统资源-CPU热插

30.1 概述

在线增加(热插)虚拟机CPU是指在虚拟机处于运行状态下,为虚拟机热插CPU而不影响虚拟机正常运行的方案。当虚拟机内部业务压力不断增大,会出现所有CPU均处于较高负载的情形。为了不影响虚拟机内的正常业务运行,可以使用CPU热插功能(在不关闭虚拟机情况下增加虚拟机的CPU数目),提升虚拟机的计算能力。

30.2 约束限制

  • 如果处理器为AArch64架构,创建虚拟机时指定的虚拟机芯片组类型(machine)需为virt-4.1或virt更高版本。如果处理器为x86_64架构,创建虚拟机时指定的虚拟机芯片组类型(machine)需为pc-i440fx-1.5或pc更高版本。

  • 在配置Guest NUMA的场景中,必须把属于同一个socket的vcpu配置在同一vNode中,否则热插CPU后可能导致虚拟机softlockup,进而可能导致虚拟机panic。

  • 虚拟机在迁移、休眠唤醒、快照过程中均不支持CPU热插。

  • 虚拟机CPU热插是否自动上线取决于虚拟机操作系统自身逻辑,虚拟化层不保证热插CPU自动上线。

  • CPU热插同时受限于Hypervisor和GuestOS支持的最大CPU数目。

  • 虚拟机启动、关闭、重启过程中可能出现热插CPU失效的情况,但再次重启会生效。

  • 热插虚拟机CPU的时候,如果新增CPU数目不是虚拟机CPU拓扑配置项中Cores的整数倍,可能会导致虚拟机内部看到的CPU拓扑是混乱的,建议每次新增的CPU数目为Cores的整数倍。

  • 若需要热插CPU在线生效且在虚拟机重启后仍有效,virsh setvcpus接口中需要同时传入–config和–live选项, 将热插CPU动作持久化。

30.3 操作步骤

30.2.1 配置虚拟机XML
  1. 使用CPU热插功能,需要在创建虚拟机时配置虚拟机当前的CPU数目、虚拟机所支持的最大CPU数目,以及虚拟机芯片组类型(对于AArch64架构,需为virt-4.1及以上版本。对于x86_64架构,需为pc-i440fx-1.5及以上版本)。这里以AArch64架构虚拟机为例,配置模板如下:

    <domain type='kvm'>
      ...
      <vcpu placement='static' current='m'>n</vcpu>
      <os>
          <type arch='aarch64' machine='virt-4.1'>hvm</type>
      </os>
      ...
    <domain>

    说明:

    例如,配一个虚拟机当前CPU数目为4,最大支持的热插CPU上限为64的XML配置为:

    <domain type='kvm'>
    ……
      <vcpu placement='static' current='4'>64</vcpu>
      <os>
          <type arch='aarch64' machine='virt-4.1'>hvm</type>
      </os>
    ……
  • placement的值必须是static。

  • m为虚拟机当前CPU数目,即虚拟机启动后默认的CPU数目。n为虚拟机支持热插到的最大CPU数目,该值不能超过Hypervisor支持的虚拟机最大CPU规格及GuestOS支持的最大CPU规格。n大于或等于m。

30.2.2 热插并上线CPU
  1. 如果热插CPU后需要自动上线热插的CPU,可以使用root权限在虚拟机内部创建udev rules文件/etc/udev/rules.d/99-hotplug-cpu.rules,并在其中定义udev规则,内容参考如下:

    # automatically online hot-plugged cpu
    ACTION=="add", SUBSYSTEM=="cpu", ATTR{online}="1"

    说明: 如果没有使用udev rules自动上线热插CPU,可以在热插CPU后,使用root权限,参考如下命令手动上线:

    for i in `grep -l 0 /sys/devices/system/cpu/cpu*/online`
    do
    echo 1 > $i
    done
  2. 利用virsh工具进行虚拟机CPU热插操作。例如给虚拟机openEulerVM热插CPU到6,且在线生效的参考命令如下:

    # virsh setvcpus openEulerVM 6 --live

    说明: virsh setvcpus 进行虚拟机CPU热插操作的格式如下:

    # virsh setvcpus <domain> <count> [--config] [--live]
  • domain: 参数,必填。指定虚拟机名称。

  • count: 参数,必填。指定目标CPU数目,即热插后虚拟机CPU数目。

  • –config: 选项,选填。虚拟机下次启动时仍有效。

  • –live: 选项,选填。在线生效。


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

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


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

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


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

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

注册时间:2021-08-27

  • 博文量
    552
  • 访问量
    303526