kvm-cpu资源管理
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