是什么
virsh schedinfo 显示与设置虚机的 CPU 调度参数,底层对应 Linux cgroup 的 cpu 控制器。cpu_shares 是相对权重,只在资源竞争时决定分配比例;vcpu_period 与 vcpu_quota 才是真正的限速手段,两者的比值决定单块 vCPU 能用的 CPU 时间上限。核查“规划里的 CPU 限制到底生效没有”,看这条命令就够了。
基本信息
| 查看 | virsh schedinfo vm1,输出当前调度器与各项参数 |
|---|---|
| 加权 | virsh schedinfo vm1 --set cpu_shares=512,默认值通常是 1024 |
| 限速 | vcpu_quota 与 vcpu_period 配合,quota 设为负数表示不限制 |
| 生效范围 | 加 --live 影响运行中的虚机,加 --config 写入持久配置 |
| 对应关系 | 参数直接映射到 cgroup cpu 控制器,容器侧的限制逻辑相同 |
查看与调整
查看与调整
virsh schedinfo vm1 # 查看当前参数
virsh schedinfo vm1 --set cpu_shares=512 # 降权,仅在争用时生效
virsh schedinfo vm1 --set vcpu_quota=40000 \
--set vcpu_period=100000 --live # 限制为单核的四成
virsh schedinfo vm1 --live --config # 核对两类参数是否都写入输出逐列读法
| 参数 | 含义 | 判读要点 |
|---|---|---|
| Scheduler | 调度器类型 | 默认 posix,一般不需要改 |
| cpu_shares | CPU 相对权重 | 只在争抢时起作用,不能当硬上限 |
| vcpu_period | 调度周期(微秒) | 默认 100000,改动会影响所有 vCPU |
| vcpu_quota | 周期内可用配额(微秒) | 为 -1 表示不限速;与 period 的比值即上限 |
| emulator_* | 模拟器线程的限制 | 大内存虚机可单独限速,避免模拟器抢 CPU |
| iothread_* | IO 线程的限制 | 配合 iothread 使用时才生效 |
换算关系:vcpu_quota 除以 vcpu_period 得到单块 vCPU 可用的 CPU 比例。上面示例中 40000 除以 100000 等于四成,四块 vCPU 的理论上限就是 1.6 核。
只加 --live 的修改重启后失效,只加 --config 的修改不会立刻作用于运行中的虚机;改完同时确认这两处,否则会出现“重启后限制消失”的怪现象。
典型使用场景
- 多租户宿主机上做资源隔离:给低优先级虚机降权,给核心业务保份额
- 核查规划落地:确认运维方案里写的 CPU 限制是否真的写进了虚机定义
- 临时压测:测试期间限制虚机 CPU 上限,避免压测流量挤占同宿主其他业务
- 性能事件复盘:把配额与权重参数作为证据,判断限速是否由配置引起
- 容量回收前的评估:统计各虚机的份额与配额,识别长期闲置却仍占用大量额度的虚机