한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

游戏卡顿白皮书 › L7 服务器操作系统(内核)

服务器电源管理(C-state/调频)导致延迟跳变 CPU power management latency (C-states, frequency scaling)

原因 ID so-cstate · 主责 运维团队·系统运维

在含图示和实验的完整版中打开此卡片 →

空闲的 CPU 核心为了省电会进入深度省电状态(C-state),频率也会降低。数据包或定时器到来时,唤醒和升频都需要时间,处理小数据包时就会多出一段延迟。

起因 操作系统的调频策略(governor)或 BIOS 电源设置允许深度 C-state 和低频率 → 结果 空闲核心每次从深度省电状态唤醒都要多花最多几百 µs;频率被压在低位时,tick 计算本身也会变慢 → 画面表现 通常很难察觉,但服务器间调用多时会累积,出现空闲时反而响应更慢的操作延迟。频率被压在低位时,人一多 tick 就会滞后,表现为慢动作

症状
操作延迟, 慢动作
因素
延迟, 抖动, 停顿
谁会遇到
全服
何时出现
一直, 偶尔随机
负责方
主责 运维团队·系统运维
运维团队要做的事
BIOS 电源设置调到性能优先;操作系统 governor 设为 performance(cpufreq 的 scaling_governor);延迟敏感的服务器限制深度 C-state(tuned latency-performance 配置文件、PM QoS 的 /dev/cpu_dma_latency、内核参数 intel_idle.max_cstate);调整后对比同一数据中心内的往返时间、tick 耗时抖动和耗电。
数值参考
按 Linux 6.12 intel_idle 驱动中的表,Intel 服务器 CPU 浅层的 C1 唤醒需要 1~2 µs,深层的 C6 需要 133 µs(Skylake-SP)~290 µs(Sapphire Rapids)。单次很小,但一个请求要经过多台服务器时就会相应累积。内核预计的空闲时间越长,选的状态就越深,所以在数据包稀稀拉拉的空闲服务器上更常出现。通用 cpufreq 的 powersave governor 会固定在允许范围内的最低频率(intel_pstate 中同名的算法则按负载调节)。
监控图上
一直偏高 · 同一数据中心内的往返时间、核心频率
查看位置
用 cpupower monitor 看各核心停留在各 C-state 的比例和实际频率,确认 /sys/devices/system/cpu/cpu0/cpuidle/ 下每个 state 的 name、latency(唤醒所需的 µs)、usage,cpufreq 的 scaling_governor,以及 tuned-adm active 显示的当前配置文件
确认依据
核心空闲时长时间停留在最深的 C-state,或频率被压在最低值附近;改为 performance governor、浅层 C-state 后,小请求的往返时间和抖动下降
排除依据
调整后差别在几十 µs 以内,这个原因可以忽略。以 ms 为单位冲高,看“CPU 窃取时间(虚拟机)”或其他层
确认手段
运维工具即可确认(无需游戏代码)
深入了解
裸金属 IDC 服务器要同时检查 BIOS(固件)的电源设置和操作系统设置。云上只有部分实例类型允许操作系统修改 C-state 和频率;AWS 的默认设置偏向最高性能,大多保持默认即可。Red Hat 系的 tuned latency-performance 配置文件会把 governor 设为 performance,并通过 PM QoS 只使用浅层 C-state。关闭省电会增加耗电,只对延迟敏感的服务器使用。

出处

  1. CPU Idle Time Management Linux kernel
    每个省电状态都有唤醒时间(exit latency)和最短停留时间(target residency),按预计空闲时间选择深层状态;sysfs 中各 state 的 latency、usage、time;用 PM QoS(/dev/cpu_dma_latency)和 intel_idle.max_cstate 限制深层状态
  2. drivers/idle/intel_idle.c (Linux v6.12) Linux kernel
    Intel 服务器 CPU 各 C-state 的唤醒时间:Skylake-SP C1 2 µs、C1E 10 µs、C6 133 µs,Ice Lake C6 170 µs,Sapphire Rapids C1 1 µs、C6 290 µs
  3. CPU Performance Scaling Linux kernel
    用 scaling_governor 查看、修改 governor;performance 请求允许范围内的最高频率,powersave 请求最低频率
  4. intel_pstate CPU Performance Scaling Driver Linux kernel
    intel_pstate 的 powersave 算法与通用 powersave governor 不同,会按负载调节(类似 schedutil、ondemand)
  5. Chapter 2. Getting started with TuneD Red Hat
    latency-performance 配置文件关闭省电功能,把 governor 设为 performance,并通过 PM QoS 只使用浅层 C-state;用 tuned-adm active 查看当前配置文件
  6. tools/power/cpupower/man/cpupower-monitor.1 (Linux v6.12) Linux kernel
    cpupower monitor:各核心的频率与省电状态统计
  7. Processor state control for Amazon EC2 Linux instances AWS
    只有部分实例类型允许操作系统控制 C-state、P-state,可为降低延迟而调整;默认设置为最高性能,适合大多数工作负载;Graviton 为固定频率,操作系统不做控制

相关原因

同一层:L7 服务器操作系统(内核)

其他层中同样导致“操作延迟”的原因

查看含图示和实验的原卡片