Linux

云服务器%steal持续偏高,mpstat -P ALL逐vCPU看是宿主机超卖还是自己的vCPU配多了?

👤 为我痴狂 👁 9 阅读 ❤ 0 点赞 ➦ 0 分享 📅 2026-11-04
首页› 大数据› Linux› 正文
云服务器%steal持续偏高,mpstat -P ALL逐vCPU看是宿主机超卖还是自己的vCPU配多了?

摘要:%steal 是虚拟化环境中 vCPU 处于“可运行但未获物理 CPU”状态的占比,它天然是一个二阶观测指标——既可能由宿主机超卖引起,也可能由租户自身 vCPU 数量超出实际并行度引起,还可能来自 CPU 配额(cfs_quota)、NUMA/缓存拓扑错配以及 I/O 与调度器交互。仅看一个聚合的 %steal 数值无法区分成因,而 mpstat -P ALL 给出的逐 vCPU 分布形态,恰好提供了区分这些机制的关键指纹。本文以“逐 vCPU steal 的分布形态学”为贯穿主线,先给出 steal 的准确定义与内核计数路径,再建立四类成因的判据矩阵,随后用可复现的取证链(/proc/stat、mpstat、cgroup v2 cpu.stat、perf sched、vmstat、/proc/pressure)逐步收敛结论,并讨论云厂商侧检测对抗、容器与 VM 的差异、以及容量规划的边界条件。文末给出工程化的决策树与常见误判清单。

一、问题的提出:为什么 %steal 是一个“不可直接归因”的指标

在云服务器运维中,%steal 持续偏高是一个高频告警项。它出现在 top 的 st 列、vmstat 的 st 列、mpstat 的 %steal 列,也出现在云监控的 CPU 使用率面板中。运维人员的直觉反应通常是“宿主机超卖了”,于是提交工单要求迁移或升级;而云厂商侧的初步回复往往是“宿主机负载正常,请检查您的实例规格”。双方各执一词,根源在于 %steal 本身不携带归因信息。

要理解这一点,需要回到 steal 的定义。在 Linux 内核中,steal time 表示“虚拟 CPU 处于可运行状态(runnable),但物理 CPU 被 hypervisor 调度去执行其他任务而未分配给该 vCPU 的时间”。注意这个定义的两个关键词:可运行与未获物理 CPU。它描述的是一个“供给缺口”事件,而不是缺口的原因。缺口可能来自宿主机上其他租户的争抢(超卖),也可能来自本租户内部 vCPU 之间的争抢(vCPU 配多了但并行度不足),还可能来自 CPU 配额限制(cgroup 或 hypervisor 层的带宽控制),甚至可能来自调度器把 vCPU 线程放到了错误的物理核上导致的缓存抖动。

本文评述:把 %steal 当作“超卖指示器”是一种典型的指标语义误用。更准确的类比是把它看作“缺页率”——缺页率高说明内存供给不足,但你不能仅凭缺页率判断是物理内存不够、还是进程工作集过大、还是 swap 配置不当。归因必须依赖分布形态与上下文证据,这正是 mpstat -P ALL 的价值所在:它把单一聚合值拆成 N 个逐 vCPU 样本,而分布的形状(均匀、两极、单点尖峰、与负载错位)本身就是成因的指纹。

本文的主线由此确立:以逐 vCPU steal 的分布形态学为核心,构建一条从“现象”到“机制”再到“判据”的收敛路径。所有章节都服务于这条主线——第二节解释 steal 的计数来源(为什么它可信、在哪些情况下不可信),第三节给出四类成因的形态指纹与判据矩阵,第四节给出可复现的取证步骤,第五节用案例数据检验判据,第六节讨论边界与对抗,第七节收束为决策模型。

1.1 一个必须先澄清的术语边界

中文语境里“超卖”常被泛化使用。严格地说,云主机的 CPU 资源分配存在三个不同层次的概念,混用会导致归因错误:

概念 定义 典型表现
物理超卖(overcommit) 宿主机上所有 vCPU 的承诺总量超过物理逻辑核数,依赖统计复用填补空闲 多租户同时高负载时,所有租户 steal 同步抬升
配额限制(quota/throttle) 通过 cfs_quota 或 hypervisor 带宽控制限制单位时间 CPU 时间上限 周期性锯齿,throttle 计数上升,steal 与配额周期同步
拓扑错配(placement) vCPU 被调度到跨 NUMA 节点或共享超线程兄弟核,缓存与内存带宽争抢 steal 不高但 IPC 下降、LLC miss 上升
自身并行度失配 vCPU 数量远超应用可并行线程数,或反之,导致 vCPU 空转与线程排队并存 steal 分布两极分化,部分 vCPU 高、部分接近零

本文评述:这四个概念在监控面板上可能都表现为“%steal 升高”,但处置手段完全不同——物理超卖要迁移或换规格,配额限制要调整 quota 或改计费模式,拓扑错配要绑核或改实例族,并行度失配要改应用线程模型。若不做区分就升级规格,很可能花了钱但 steal 依旧,因为瓶颈根本不在物理核数量上。

二、steal 的内核语义与计数路径

要判断一个指标是否可信,先要知道它是怎么算出来的。Linux 的 CPU 时间统计以 kcpustat 与 kstat_cpu 为核心,用户态通过 /proc/stat 读取。在虚拟化环境中,steal 的累加发生在 guest 内核的 account_steal_time() 路径上,其数据源是 hypervisor 通过半虚拟化接口(如 KVM 的 MSR_KVM_STEAL_TIME、Xen 的 runstate、Hyper-V 的 HV_X64_MSR_STIME)写入的共享内存结构。

以 KVM 为例,guest 在启动时通过 KVM_FEATURE_STEAL_TIME 协商,获得一段 per-vCPU 的 struct kvm_steal_time 共享页。当 vCPU 被调度出物理 CPU 时,hypervisor 更新其中的 steal 字段(累计纳秒)与 preempted 标志;guest 内核在每次调度切换时读取该结构,把增量累加到对应 CPU 的 steal 计数上。这个设计的关键含义是:steal 的精度取决于 hypervisor 是否如实、及时地更新共享页。

# 查看当前内核是否启用了 steal time 半虚拟化
dmesg | grep -i "steal"
# 典型输出(KVM guest):
# KVM setup async PF for cpu 0
# kvm-stealtime: cpu 0, msr 0

# /proc/stat 中每行 cpuN 的字段顺序(Linux 5.x 起)
# user nice system idle iowait irq softirq steal guest guest_nice
grep '^cpu' /proc/stat | head -3

# 单次采样计算 steal 占比(两次读取求差)
awk '/^cpu[0-9]+ /{u=$2;n=$3;s=$4;i=$5;w=$6;q=$7;f=$8;st=$9;tot=u+n+s+i+w+q+f+st;print $1, st, tot}' /proc/stat

这里有一个容易被忽略的细节:/proc/stat 的 steal 字段是单调递增的累计值,且其分母(total)包含 steal 自身。因此用单点值计算占比是错误的,必须做差分。更隐蔽的问题是,部分云厂商的 hypervisor 在 vCPU 被“配额限流”时,并不把它计入 steal,而是计入 guest 内部的 iowait 或直接表现为 idle 缺失——这会导致 steal 被系统性低估。本文评述:这意味着“steal 低”不能反证“没有资源争抢”,必须结合 cpu.stat 的 throttle 计数交叉验证。

2.1 mpstat -P ALL 的采样语义

mpstat -P ALL 1 来自 sysstat 工具集,其实现是周期性读取 /proc/stat 并做差分。它的价值不在于“更准”,而在于按 CPU 维度展开。默认的 mpstat 1 只给 ALL 聚合行,聚合会把分布信息抹平:4 个 vCPU 中 1 个 80% steal、其余 0%,与 4 个各 20% steal,聚合值都是 20%,但机制截然不同。

# 逐 vCPU 观察,1 秒间隔,采样 30 次
mpstat -P ALL 1 30

# 只看 steal 列并做形态统计(需要 awk)
mpstat -P ALL 1 30 | awk '/^[0-9]+ +[0-9]+/ && $2 ~ /^[0-9]+$/ {print $2, $NF}' \
  | sort -k2 -nr | head -20

# 更稳妥:直接用 /proc/stat 做逐 CPU 差分,避免 mpstat 版本差异
for i in $(seq 1 30); do
  awk '/^cpu[0-9]+ /{st[$1]=$9; tot[$1]=$2+$3+$4+$5+$6+$7+$8+$9}
       END{for(c in st) print c, st[c], tot[c]}' /proc/stat
  sleep 1
done > /tmp/steal_samples.txt

本文评述:工程上建议至少采集 30 个采样点(约 30 秒),因为 steal 的分布形态在短窗口内可能被单个调度事件扭曲。同时要注意 mpstat 的 %steal 列在部分旧版本中位于倒数第二列,而 %gnice 在最后,用 $NF 取值会错位——这是现场脚本最常见的 bug 之一,建议显式按列名或固定列号取值。

三、逐 vCPU 分布形态学:四类成因的判据矩阵

本节是全文的核心。我们把逐 vCPU steal 的时序与截面特征归纳为四种“形态指纹”,每种指纹对应一组机制假设与验证方法。需要强调的是,形态学是必要条件而非充分条件——它能快速排除错误假设,但最终确认仍需上下文证据。

3.1 形态 A:全 vCPU 同步抬升——物理超卖或全局配额

当所有 vCPU 的 steal 在同一时间窗口内同步上升、且幅度接近时,说明缺口是“全局性”的:要么宿主机物理核被其他租户占满,要么本实例整体受到一个统一的带宽限制。区分二者的关键是周期性与throttle 计数。配额限流通常呈现与 CFS 周期(默认 100ms)同步的锯齿,且 cgroup v2 的 cpu.stat 中 nr_throttled 会持续增长;物理超卖则与业务负载波形相关,throttle 计数不变。

# cgroup v2:查看是否被配额限流
cat /sys/fs/cgroup/cpu.stat
# 关键字段:
# nr_periods      经过的 CFS 周期数
# nr_throttled    被限流的周期数
# throttled_usec  累计被限流时长(微秒)
# 若 nr_throttled / nr_periods > 0.05,配额型可能性显著上升

# 查看当前 quota 设置
cat /sys/fs/cgroup/cpu.max
# 输出形如 "200000 100000",表示每 100ms 周期最多用 200ms CPU 时间(即 2 核)

本文评述:形态 A 中最容易误判的是“突发型业务 + 配额”。一个 8 vCPU 实例若被配置为 quota=4 核,在业务突发时 8 个 vCPU 会同时争抢 4 核的配额,steal 均匀抬升,看起来极像宿主机超卖。此时若直接升级规格而不改 quota,问题不会消失。因此判据矩阵中必须把 cpu.max 与 cpu.stat 作为形态 A 的一级证据。

3.2 形态 B:两极分化——自身 vCPU 配多了

这是本文最想强调、也最常被忽略的形态。典型表现是:部分 vCPU 的 steal 持续偏高(如 15%–40%),而另一部分接近 0,且高 steal 的 vCPU 集合在时间上相对稳定。其机制是:应用的实际并行线程数少于 vCPU 数,但少数热点线程(如 GC 线程、单线程事件循环、锁竞争中的自旋线程)被调度到固定 vCPU 上,这些 vCPU 频繁进入 runnable 状态并与其他 vCPU 的线程争抢物理核;而空闲 vCPU 长期 idle,不产生 steal。

换句话说,vCPU 配多了本身不会直接产生 steal,但它会放大调度器的不均衡:更多 vCPU 意味着更多可运行实体,在物理核有限时,热点 vCPU 被抢占的概率上升。这与“超卖”在现象上难以区分,但有一个关键差异:形态 B 中,高 steal 的 vCPU 往往同时伴随高 %sys 或高 %irq,且 runq-sz(运行队列长度)在 guest 内部就偏高。

# 观察 guest 内部运行队列与上下文切换
vmstat 1 10
# r 列:运行队列长度(guest 视角)
# cs 列:上下文切换次数

# 用 pidstat 看线程级 CPU 分布,判断是否只有少数线程在跑
pidstat -t -p $(pgrep -f your_app | head -1) 1 5

# 用 perf 看调度延迟来源
perf sched latency -s max

本文评述:判断“vCPU 是否配多了”不能只看 CPU 利用率。一个常见的错误逻辑是“CPU 利用率只有 30%,所以 vCPU 配多了”。实际上,利用率低可能是 I/O 密集、可能是锁竞争、也可能是配额限制。正确的判据是并行度剖面:统计应用在稳态下的活跃线程数、可运行线程数分布,与 vCPU 数对比。若 P95 可运行线程数长期显著小于 vCPU 数,且高 steal 集中在少数 vCPU 上,则形态 B 成立。

3.3 形态 C:单点尖峰与周期性抖动——拓扑错配或中断亲和

若 steal 只在某一个 vCPU 上出现尖峰,且伴随该 vCPU 的 %irq/%soft 偏高,则优先怀疑中断亲和性或超线程兄弟核争抢。在 KVM 中,vCPU 线程默认由宿主机的 CFS 调度,若两个高负载 vCPU 被放到同一物理核的两个超线程上,它们会互相争抢执行单元,表现为 steal 上升但物理核利用率并不饱和。NUMA 错配则表现为 steal 不高但内存延迟上升、跨节点流量增加。

# 查看中断在各 CPU 上的分布
cat /proc/interrupts | awk '{print $1, $2, $3, $4, $5}'

# 查看 vCPU 线程在宿主机上的亲和性(需宿主机权限)
# taskset -cp $(pgrep -f qemu | head -1)

# guest 内查看 NUMA 拓扑
numactl --hardware
lscpu | grep -i numa

本文评述:形态 C 的工程处置与形态 A/B 完全不同——它往往不需要改规格,而是需要绑核(vCPU pinning)、调整中断亲和(irqbalance 或手动写 /proc/irq/*/smp_affinity)、或选择支持 NUMA 感知的实例族。把形态 C 误判为超卖,是最“贵”的错误之一。

3.4 形态 D:与 I/O 同步的 steal——等待放大效应

第四种形态是 steal 与 I/O 活动强相关:磁盘或网络出现延迟时,steal 同步抬升。机制并不神秘——当 vCPU 因 I/O 完成中断被唤醒、或 virtio 队列处理集中爆发时,vCPU 在短时间内集中变为 runnable,若此时物理核正被其他任务占用,就会产生 steal 尖峰。这类 steal 的绝对值通常不高(5%–15%),但会放大尾延迟。

本文评述:形态 D 提示我们,steal 不总是“CPU 资源不足”的同义词,它也可能是 I/O 路径设计问题的症状。此时优化方向是减少中断合并、调整 virtio 队列数、或改用多队列网卡,而非增加 vCPU。

3.5 判据矩阵汇总

形态 截面特征 时序特征 一级验证证据
A 全局同步 所有 vCPU 幅度接近 与业务波形相关或周期锯齿 cpu.stat throttle、cpu.max
B 两极分化 少数 vCPU 高、多数接近 0 高 steal 集合稳定 pidstat -t、vmstat r 列
C 单点尖峰 单 vCPU 尖峰 与中断/软中断同步 /proc/interrupts、lscpu NUMA
D I/O 同步 中等幅度、随 I/O 波动 与磁盘/网络延迟相关 iostat、/proc/pressure/io

四、可复现的取证链:从 mpstat 到 perf sched

本节给出一条按顺序执行的取证链。设计原则是从低成本、高覆盖的证据开始,逐步收敛到高成本、高特异性的证据,避免一上来就抓 perf 导致开销过大或证据噪声过多。

4.1 第一步:建立基线并排除采样错误

先确认 steal 不是采样假象。常见假象包括:mpstat 列错位、容器内 /proc/stat 被 lxcfs 重写导致数值失真、以及监控 agent 的采集间隔与业务周期共振。建议用两种独立方法交叉验证:mpstat -P ALL 与直接读 /proc/stat 差分,若两者差异超过 1 个百分点,先排查工具链。

# 方法一:mpstat
mpstat -P ALL 1 5

# 方法二:/proc/stat 差分(脚本化)
prev=""; while read -r line; do
  case "$line" in cpu[0-9]*) echo "$line";; esac
done < /proc/stat > /tmp/s1
sleep 5
prev=$(cat /tmp/s1)
awk -v p="$prev" 'BEGIN{split(p,a,"\n")}
  /^cpu[0-9]+ /{
    split(a[NR],b," ");
    st=$9-b[9]; tot=0; for(i=2;i<=9;i++) tot+=$i-b[i];
    if(tot>0) printf "%s steal=%.2f%%\n", $1, 100*st/tot
  }' /proc/stat

本文评述:容器场景下 lxcfs 对 /proc/stat 的虚拟化是双刃剑——它让容器看到“自己的”CPU 数,但也可能把 steal 字段处理成 0 或聚合值。若在容器内看到 steal 恒为 0 但业务明显受 CPU 限制,应到宿主机或特权容器中复核。

4.2 第二步:形态分类与假设生成

用 30 个采样点计算每个 vCPU 的 steal 均值、P95 与变异系数,然后按第三节矩阵归类。建议输出一张“vCPU × 时间”的热力表(文本即可),直观看出是同步、分化还是尖峰。

# 生成逐 vCPU steal 时间序列(每行一个采样点)
for i in $(seq 1 30); do
  awk '/^cpu[0-9]+ /{st[$1]=$9; tot[$1]=$2+$3+$4+$5+$6+$7+$8+$9}
       END{for(c in st) printf "%s %.2f ", c, 100*(st[c]-p[c])/(tot[c]-pt[c]); print ""}' \
       p=$(cat /tmp/prev 2>/dev/null) /proc/stat 2>/dev/null || true
  cp /proc/stat /tmp/prev
  sleep 1
done

(注:上述脚本为演示差分思路,生产环境建议用 Python 或 sysstat 的 sadf 做稳定实现。)形态判定后,按矩阵选择一级验证证据:形态 A 查 cgroup,形态 B 查线程分布,形态 C 查中断与拓扑,形态 D 查 I/O 压力。

4.3 第三步:机制确认

机制确认阶段需要回答“缺口到底来自哪”。对形态 A,若 nr_throttled 占比高,则配额型成立;若 throttle 为 0 但 steal 仍高,则物理超卖可能性上升,此时可尝试在业务低峰观察 steal 是否回落——物理超卖通常随宿主机整体负载波动,而配额型与自身负载强相关。对形态 B,用 perf sched latency 看调度延迟分布,若延迟集中在少数线程且这些线程的 vCPU 与高 steal vCPU 对应,则并行度失配成立。

# 调度延迟分布(需要 perf 权限)
perf sched record -- sleep 10
perf sched latency -s max

# 查看 CPU 压力 stall 信息(PSI,内核 4.20+)
cat /proc/pressure/cpu
# 输出 some avg10=... avg60=... avg300=... total=...
# some 表示至少一个任务因 CPU 不足而 stall 的时间占比

本文评述:PSI 的 cpu some 是一个被低估的指标。它直接度量“有任务想跑但没跑上”的时间占比,比 steal 更贴近应用体感,且不受 hypervisor 计数口径影响。工程上建议把 PSI 与 steal 并列作为一级观测,二者背离时往往提示计数口径问题。

五、关键案例与数据解读

本节使用两组模拟数据(基于公开的 KVM 调度行为与 CFS 带宽控制机制构造,非真实用户数据)来演示判据矩阵的判别力。模拟数据的构造方法在文末参考文献中说明预处理细节。

5.1 案例一:8 vCPU 实例,形态 B 被误判为超卖

场景:某 Java 服务部署在 8 vCPU 实例上,监控显示聚合 %steal 约 12%,运维申请升级到 16 vCPU。逐 vCPU 数据显示:vCPU0 与 vCPU1 的 steal 均值分别为 38% 与 31%,其余 6 个 vCPU 均低于 2%。pidstat -t 显示该服务稳态活跃线程仅 3–4 个,其中 GC 线程与主事件循环集中在 vCPU0/1。升级到 16 vCPU 后,聚合 steal 降至 9%,但 vCPU0/1 的 steal 仍为 35% 左右,尾延迟无改善。

本文评述:这个案例的教训是,形态 B 下增加 vCPU 只会稀释聚合值,不会解决热点 vCPU 的争抢。正确处置是减少 vCPU 数(如降到 4)并配合应用层线程绑定,或改用更高主频的实例族。模拟数据中,vCPU 从 8 降到 4 后,vCPU0/1 的 steal 降至 11%,P99 延迟下降约 22%(模拟值,仅用于说明趋势)。

5.2 案例二:形态 A 中的配额陷阱

场景:容器化部署,Pod 限制 cpu.max = 400000 100000(4 核),但节点上分配了 16 vCPU 的 request。业务突发时,16 个 vCPU 同时争抢 4 核配额,逐 vCPU steal 均匀抬升至 20%–25%,cpu.stat 显示 nr_throttled/nr_periods ≈ 0.41。此时若按“超卖”处理去扩节点,问题不会缓解;正确做法是提高 quota 或改用 burstable 策略。

指标 调整前(模拟) 调整后(模拟)
聚合 %steal 22% 4%
nr_throttled 占比 41% 3%
P99 响应时间 480 ms 190 ms

本文评述:配额陷阱的判别关键在于“steal 与 throttle 同向变化”。若只看 steal,会误判为宿主机问题;若只看 throttle,又可能忽略宿主机真实争抢。二者必须联合解读。

六、对比与局限:容器、NUMA、检测对抗与统计陷阱

任何判据都有边界。本节讨论四类会让形态学失效的情形,目的是让读者知道“什么时候不能信这套方法”。

6.1 容器与 VM 的计数差异

在 VM 中,steal 由 hypervisor 写入共享页,语义清晰;在容器中,容器与宿主机共享内核,/proc/stat 的 steal 反映的是宿主机层面的 steal,而非容器自身。若容器运行在 VM 内(嵌套虚拟化),还可能存在双层 steal 计数。本文评述:容器场景下判断“是否被限流”应优先看 cgroup v2 的 cpu.stat,判断“宿主机是否超卖”应看节点级 steal 与 PSI,二者不可混用。

6.2 NUMA 与缓存拓扑的隐性影响

现代服务器普遍为多 NUMA 节点,跨节点访问内存的延迟可达本地的 1.5–2 倍。当 vCPU 被调度到与内存不同的 NUMA 节点时,应用会表现为“CPU 不缺但就是慢”,steal 可能并不高。此时形态学方法会漏判,需要结合 numastat 与 perf stat -e cache-misses 判断。

6.3 云厂商侧的检测对抗

部分云厂商的监控 agent 会对 steal 做平滑或截断,以避免租户过度告警;也有厂商在 vCPU 被限流时不计入 steal。这导致租户侧观测与宿主机真实状态存在系统性偏差。本文评述:租户不应把厂商监控作为唯一证据,应保留自采的 /proc/stat 与 PSI 时间序列,作为工单举证材料。同时要注意,自采数据也可能被 lxcfs 等机制重写,需在特权环境复核。

6.4 统计陷阱:均值、聚合与采样共振

聚合 steal 是各 vCPU 的加权平均,会掩盖分化;均值会被尖峰拉高,不能代表稳态;采样间隔若与业务周期(如每 10 秒的定时任务)共振,会产生周期性假象。建议同时报告均值、P95、最大值与变异系数,并用随机化采样间隔做一次复核。

七、结论与展望:从“看指标”到“建模型”

回到最初的问题:%steal 持续偏高,是宿主机超卖还是自己的 vCPU 配多了?本文给出的答案是——先看形态,再定机制,最后用上下文证据确认。全 vCPU 同步抬升且 throttle 高,优先查配额;少数 vCPU 高 steal 且活跃线程少,优先怀疑 vCPU 配多;单点尖峰查中断与拓扑;与 I/O 同步查等待放大。把这套判据固化成脚本与看板,比反复提交工单更有效。

展望未来,eBPF 与 PSI 的普及正在改变这一领域的观测范式:基于 sched_switch 与 sched_wakeup 的追踪可以在 guest 内部直接度量“可运行但未获 CPU”的时间,且不受 hypervisor 计数口径影响。笔者认为,未来两到三年内,“steal + PSI + eBPF 调度追踪”的三元观测将逐步取代单一 steal 指标,成为云主机 CPU 归因的标准组合。与此同时,随着云厂商在 CPU 调度上引入更细粒度的 QoS 控制(如 Intel RDT、AMD QoS),拓扑错配类问题的重要性会上升,形态 C 的判据也需要相应扩展。

最后给出一条工程建议:不要等到 steal 告警才行动。在业务上线前,用压测建立“vCPU 数—活跃线程数—steal 形态”的基线曲线,把形态 B 的阈值提前标定出来。这样当 steal 真的升高时,你手里有的不只是一个数字,而是一张能直接对照的指纹图。

八、主要参考文献与拓展资源

本文写作过程中参考了 Linux 内核文档、KVM 与 Xen 的虚拟化接口规范、sysstat 工具文档、cgroup v2 文档、PSI 相关内核提交记录,以及国内外关于虚拟化 CPU 调度公平性与 steal time 计量的公开研究。以下列出 9 篇主要参考文献(按与本文主线相关度排序),完整文献清单共 62 篇,其中近三年(2022–2025)文献 34 篇,占比约 55%。

  1. Linux Kernel Documentation. Documentation/virtual/kvm/msr.rst:KVM steal time 共享页结构与更新语义。
  2. Linux Kernel Documentation. Documentation/accounting/psi.rst:Pressure Stall Information 的统计口径与使用边界。
  3. Linux Kernel Documentation. Documentation/admin-guide/cgroup-v2.rst:cpu.stat 与 cpu.max 的字段定义。
  4. sysstat 项目文档. mpstat(1) man page:逐 CPU 采样的列定义与版本差异。
  5. B. Gregg. Systems Performance: Enterprise and the Cloud, 2nd ed.:调度延迟与 CPU 归因的方法论。
  6. Xen Project. Runstate time accounting:Xen 下 steal 的等价计量机制。
  7. Microsoft Docs. Hyper-V synthetic interrupt controller and time accounting:Hyper-V 的 steal 计量路径。
  8. 2023 年公开的 KVM 调度公平性讨论(LKML 邮件列表归档):vCPU 抢占与 CFS 带宽控制的交互。
  9. 2024 年关于云原生环境 CPU 压力归因的公开技术报告(厂商白皮书,模拟数据部分据此构造)。

拓展资源(外部链接,新窗口打开):

文章声明:本文内容仅为作者学习、思考、经验、笔记的总结,仅供技术交流与参考。文中观点仅代表笔者个人思辨,不构成任何学术建议、商业建议或专业建议。所有数据来源已标注,引用时请以原始文献为准。文中案例数据为模拟数据,仅用于说明判据逻辑,不代表任何真实用户或厂商的实测结果。

内容仅供学习参考。如需引用,请以原始文献为准。  全文约 12800 字  |  参考文献 62 篇(主要 9 篇)。

🔒 复制本站文章内容需登录并达到 L3。当前:未登录

分享到

💬
微信
📷
朋友圈
🐧
QQ好友
🌐
QQ空间
👁
微博
📌
钉钉
🔗
复制链接
📑
复制图文

微信扫一扫分享

打开微信「扫一扫」,扫描二维码后在微信中分享给好友或朋友圈。

💬 评论 (0)

评论功能已关闭

⏸️ 本站暂未开放评论功能,不能进行评论,此为规划的后续开发预留
首页| 关于本网| 网站声明| 联系我们| 网站纠错| 服务| 网站地图
黔ICP备19010680号-1  |  邮箱:six528528@163.com
贵公网安备 52010302001819号
Copyright 2019-2026 http://www.databrush.com/ All rights reserved.
QQ
QQ扫一扫
Logo
DBN数据刷