1、基础知识
1.1、简介
在虚拟机不关机的情况下,对CPU进行调整操作叫热调整。它是在Redhat7.0以后才出现的功能,所以要使用这功能,那必须要求KVM宿主机和虚拟机规格必须一致,而且在7.0+版本。
目前cpu热调整命令,只能增加,不能减少,想要减少的话,可以进入虚拟机中,关闭某个使用的CPU即可。
1.2、公有云上的虚拟机为什么不支持cpu的热调整
1、因为客户创建的虚拟机类型不一致,不满足热添加和热删除的前提条件,所以为了管理的方便就统一不允许了
2、因为创建虚拟机会有个调度的问题,创建的虚拟机的命令,会将创建的虚拟机调度到某一台宿主机上,具体调度到哪台宿主机上,没有办法保证,由于受宿主机的配置影响,所以热添加和热删除的功能没有办法保证
1.3、常见命令介绍
1.3.1、热调整
virsh setvcpus <虚拟机名称> <cpu个数> --live
注意:
默认后面会有 --live 属性,标识热调整,默认不会更改后端的配置,如果需要更改后端的配置,需要使用 --config
1.3.2、cpu绑定
virsh vcpupin <虚拟机名称> <虚拟机CPU号> <宿主机CPU号>
1.3.3、cpu重置
virsh shutdown <虚拟机名称>
virsh start <虚拟机名称>
2、准备工作
2.1、查看宿主机的cpu个数
root@localhost:~# lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Address sizes: 45 bits physical, 48 bits virtual
Byte Order: Little Endian
CPU(s): 4 # 共4核CPU
On-line CPU(s) list: 0-3 # 在线CPU编号0-3
Vendor ID: AuthenticAMD
BIOS Vendor ID: AuthenticAMD
Model name: AMD Ryzen 7 4800H with Radeon Graphics
BIOS Model name: AMD Ryzen 7 4800H with Radeon Graphics CPU @ 2.9GHz
BIOS CPU family: 2
CPU family: 23
Model: 96
Thread(s) per core: 1
Core(s) per socket: 4
Socket(s): 1
Stepping: 1
BogoMIPS: 5789.14
2.2、宿主机查看所有的cpu状态
root@localhost:~# cat /sys/devices/system/cpu/cpu0/online
cat: /sys/devices/system/cpu/cpu0/online: No such file or directory
root@localhost:~# cat /sys/devices/system/cpu/cpu1/online
1
root@localhost:~# cat /sys/devices/system/cpu/cpu2/online
1
root@localhost:~# cat /sys/devices/system/cpu/cpu3/online
1
注意:cpu0里面有可能没有online,这不影响,如果非要看的话,可以手工添加个,可以看到:宿主机的3个cpu都是处于工作状态中
2.3、查看虚拟机当前的cpu状态
root@localhost:~# virsh edit CentOS-8-x86_64
<domain type='kvm'>
<name>CentOS-8-x86_64</name>
<uuid>373fc909-9a6d-482b-9740-0b1363ec5aca</uuid>
<metadata>
<libosinfo:libosinfo xmlns:libosinfo="http://libosinfo.org/xmlns/libvirt/domain/1.0">
<libosinfo:os id="http://centos.org/centos/7.0"/>
</libosinfo:libosinfo>
</metadata>
<memory unit='KiB'>2097152</memory>
<currentMemory unit='KiB'>2097152</currentMemory>
<vcpu placement='static'>2</vcpu> # 两个CPU
<resource>
<partition>/machine</partition>
</resource>
3、实战
3.1、调整配置,让cpu支持动态调整功能
3.1.1、关闭虚拟机
virsh shutdown CentOS-8-x86_64
3.1.2、编辑虚拟机配置
root@localhost:~# virsh edit CentOS-8-x86_64
# 原内容
# <vcpu placement='static'>1</vcpu>
# 修改后
<vcpu placement='static' current='1'>4</vcpu>
注意:
意思就是,当前的cpu可以动态调整,当前的cpu个数为1,可调整的最大个数为4
一般情况下,虚拟机可以支持255个,但是最大只能设置253个。
如果操作异常,有可能导致以下异常情况 error: operation failed: Failed to query numad for the advisory nodeset
3.1.3、启动虚拟机后查看效果
virsh start CentOS-8-x86_64
# virsh dominfo CentOS-8-x86_64
Id: 1
Name: CentOS-8-x86_64
UUID: 373fc909-9a6d-482b-9740-0b1363ec5aca
OS Type: hvm
State: running
CPU(s): 1
CPU time: 19.9s
...
# virsh vcpuinfo CentOS-8-x86_64
VCPU: 0
CPU: 3
State: running
CPU time: 24.2s
CPU Affinity: yyyy
3.2、动态调整CPU
3.2.1、增加CPU
virsh setvcpus CentOS-8-x86_64 4 --config
virsh vcpuinfo CentOS-8-x86_64
3.2.2、减少CPU
virsh setvcpus CentOS-8-x86_64 2 --config
virsh vcpuinfo CentOS-8-x86_64
# 调整cpu的时候,同步修改配置
grep vcpu /etc/libvirt/qemu/CentOS-8-x86_64.xml
3.3、设置cpu方法
3.3.1、普通重置
virsh shutdown CentOS-8-x86_64
virsh start CentOS-8-x86_64
3.3.2、同步重置
virsh setvcpus CentOS-8-x86_64 1 --config
virsh vcpuinfo CentOS-8-x86_64
grep vcpu /etc/libvirt/qemu/CentOS-8-x86_64.xml
3.4、cpu绑定
3.4.1、虚拟机内部CPU号绑定
virsh vcpupin CentOS-8-x86_64 0 1 # 将kvm的0号cpu绑定在宿主机的1号cpu上
virsh vcpupin CentOS-8-x86_64 1 0 # 将kvm的1号cpu绑定在宿主机的0号cpu上
3.4.2、检查效果
root@localhost:~# virsh vcpuinfo CentOS-8-x86_64
VCPU: 0
CPU: 1
State: running
CPU time: 25.9s
CPU Affinity: -y--
VCPU: 1
CPU: 0
State: running
CPU time: 0.8s
CPU Affinity: y---
VCPU: 2
CPU: 3
State: running
CPU time: 0.1s
CPU Affinity: yyyy