1 概述
在虚拟化环境中,同一物理主机上通常运行多个虚拟机,这些虚拟机需要共同竞争物理CPU资源。当物理CPU负载较高时,若部分虚拟机过度占用CPU资源,可能导致其他虚拟机性能下降甚至响应迟缓。因此,通过技术手段平衡虚拟CPU(vCPU)的调度,是缓解物理CPU竞争压力的关键措施。
CPU份额(cpu_shares) 是实现这一平衡的核心机制之一,它是衡量虚拟机竞争物理CPU计算资源能力的相对值(无单位)。在物理CPU资源除预留部分外的可用资源池中,虚拟机实际获得的CPU资源分配比例,会严格按照自身CPU份额与其他虚拟机CPU份额的总和比例进行分配。例如,若虚拟机A的CPU份额为2048,虚拟机B的CPU份额为1024,则在竞争时A获得的CPU资源约为B的2倍。通过合理调整不同虚拟机的CPU份额,可有效保障关键业务虚拟机的CPU资源服务质量,避免资源分配失衡。
2 操作步骤
通过修改虚拟机运行时的 cpu_shares 参数值,可灵活调整vCPU之间的调度优先级和资源分配比例。以下是具体操作方法:
2.1 查看虚拟机当前CPU份额
在调整CPU份额前,需先确认目标虚拟机当前的CPU份额配置。使用 virsh 命令可直接查询:
# virsh schedinfo <VMInstance> # <VMInstance> 为虚拟机名称或UUID
示例输出:
Scheduler : posix # 调度器类型
cpu_shares : 1024 # 当前CPU份额值(默认通常为1024)
vcpu_period : 100000 # vCPU调度周期(微秒)
vcpu_quota : -1 # vCPU配额(-1表示无限制)
emulator_period: 100000 # 模拟器调度周期
emulator_quota : -1 # 模拟器配额
global_period : 100000 # 全局调度周期
global_quota : -1 # 全局配额
iothread_period: 100000 # IO线程调度周期
iothread_quota : -1 # IO线程配额
2.2 在线修改CPU份额
对于处于 running(运行中) 状态的虚拟机,可通过 --live 参数实时修改CPU份额,调整结果立即生效,适用于需要临时提升或降低某虚拟机CPU资源优先级的场景。但需注意,这种修改仅在当前运行周期有效,虚拟机关机或重启后会恢复原有配置。
命令格式:
# virsh schedinfo <VMInstance> --live cpu_shares=<number> # <number> 为新的份额值(如2048、512等)
示例:将运行中的虚拟机 openEulerVM 的CPU份额从默认1024临时提升至2048
# virsh schedinfo openEulerVM --live cpu_shares=2048
输出结果:
Scheduler : posix
cpu_shares : 2048 # 已更新为新的份额值
vcpu_period : 100000
vcpu_quota : -1
emulator_period: 100000
emulator_quota : -1
global_period : 100000
global_quota : -1
iothread_period: 100000
iothread_quota : -1
修改后,在物理CPU资源竞争时, openEulerVM 获得的CPU运行时间将按比例提升为原来的2倍。
2.3 持久化修改CPU份额
若需长期固定某虚拟机的CPU份额配置,可通过 --config 参数在libvirt的配置文件中修改。这种修改不会立即生效,需等待虚拟机下次启动后才会应用,但配置会永久保存,不受开关机影响。
命令格式:
# virsh schedinfo <VMInstance> --config cpu_shares=<number> # <number> 为目标份额值
示例:将虚拟机 openEulerVM 的CPU份额永久修改为2048
# virsh schedinfo openEulerVM --config cpu_shares=2048
输出结果:
Scheduler : posix
cpu_shares : 2048 # 配置文件中已更新的份额值
vcpu_period : 0 # 非实时修改时部分参数显示为0,不影响配置生效
vcpu_quota : 0
emulator_period: 0
emulator_quota : 0
global_period : 0
global_quota : 0
iothread_period: 0
iothread_quota : 0
执行命令后,需重启虚拟机使配置生效。下次启动 openEulerVM 后,其CPU份额将固定为2048,获得的CPU运行时间比例翻倍,且后续重启后仍保持该配置。
注意:CPU份额仅在物理CPU资源紧张(存在竞争)时生效;若物理CPU资源充足,即使某虚拟机份额较低,也可能获得全部可用资源。
1 概述
在虚拟化环境中,同一物理主机上通常运行多个虚拟机,这些虚拟机需要共同竞争物理CPU资源。当物理CPU负载较高时,若部分虚拟机过度占用CPU资源,可能导致其他虚拟机性能下降甚至响应迟缓。因此,通过技术手段平衡虚拟CPU(vCPU)的调度,是缓解物理CPU竞争压力的关键措施。
CPU份额(cpu_shares) 是实现这一平衡的核心机制之一,它是衡量虚拟机竞争物理CPU计算资源能力的相对值(无单位)。在物理CPU资源除预留部分外的可用资源池中,虚拟机实际获得的CPU资源分配比例,会严格按照自身CPU份额与其他虚拟机CPU份额的总和比例进行分配。例如,若虚拟机A的CPU份额为2048,虚拟机B的CPU份额为1024,则在竞争时A获得的CPU资源约为B的2倍。通过合理调整不同虚拟机的CPU份额,可有效保障关键业务虚拟机的CPU资源服务质量,避免资源分配失衡。
2 操作步骤
通过修改虚拟机运行时的 cpu_shares 参数值,可灵活调整vCPU之间的调度优先级和资源分配比例。以下是具体操作方法:
2.1 查看虚拟机当前CPU份额
在调整CPU份额前,需先确认目标虚拟机当前的CPU份额配置。使用 virsh 命令可直接查询:
# virsh schedinfo <VMInstance> # <VMInstance> 为虚拟机名称或UUID
示例输出:
Scheduler : posix # 调度器类型
cpu_shares : 1024 # 当前CPU份额值(默认通常为1024)
vcpu_period : 100000 # vCPU调度周期(微秒)
vcpu_quota : -1 # vCPU配额(-1表示无限制)
emulator_period: 100000 # 模拟器调度周期
emulator_quota : -1 # 模拟器配额
global_period : 100000 # 全局调度周期
global_quota : -1 # 全局配额
iothread_period: 100000 # IO线程调度周期
iothread_quota : -1 # IO线程配额
2.2 在线修改CPU份额
对于处于 running(运行中) 状态的虚拟机,可通过 --live 参数实时修改CPU份额,调整结果立即生效,适用于需要临时提升或降低某虚拟机CPU资源优先级的场景。但需注意,这种修改仅在当前运行周期有效,虚拟机关机或重启后会恢复原有配置。
命令格式:
# virsh schedinfo <VMInstance> --live cpu_shares=<number> # <number> 为新的份额值(如2048、512等)
示例:将运行中的虚拟机 openEulerVM 的CPU份额从默认1024临时提升至2048
# virsh schedinfo openEulerVM --live cpu_shares=2048
输出结果:
Scheduler : posix
cpu_shares : 2048 # 已更新为新的份额值
vcpu_period : 100000
vcpu_quota : -1
emulator_period: 100000
emulator_quota : -1
global_period : 100000
global_quota : -1
iothread_period: 100000
iothread_quota : -1
修改后,在物理CPU资源竞争时, openEulerVM 获得的CPU运行时间将按比例提升为原来的2倍。
2.3 持久化修改CPU份额
若需长期固定某虚拟机的CPU份额配置,可通过 --config 参数在libvirt的配置文件中修改。这种修改不会立即生效,需等待虚拟机下次启动后才会应用,但配置会永久保存,不受开关机影响。
命令格式:
# virsh schedinfo <VMInstance> --config cpu_shares=<number> # <number> 为目标份额值
示例:将虚拟机 openEulerVM 的CPU份额永久修改为2048
# virsh schedinfo openEulerVM --config cpu_shares=2048
输出结果:
Scheduler : posix
cpu_shares : 2048 # 配置文件中已更新的份额值
vcpu_period : 0 # 非实时修改时部分参数显示为0,不影响配置生效
vcpu_quota : 0
emulator_period: 0
emulator_quota : 0
global_period : 0
global_quota : 0
iothread_period: 0
iothread_quota : 0
执行命令后,需重启虚拟机使配置生效。下次启动 openEulerVM 后,其CPU份额将固定为2048,获得的CPU运行时间比例翻倍,且后续重启后仍保持该配置。
注意:CPU份额仅在物理CPU资源紧张(存在竞争)时生效;若物理CPU资源充足,即使某虚拟机份额较低,也可能获得全部可用资源。