WeChat (Rust高频量化交易)
ai-engineeringcrypto-trading
Original source

高频交易低延迟优化:C-state、P-state 与频率调节

Summary

深入讲解 HFT 场景下 CPU 电源管理优化——C-state(睡眠深度)和 P-state(运行频率)的调控方法。这是该系列的续篇,前文讲核心隔离,本文讲硬件层面的延迟优化。

核心要点

  • C-state 影响谁: 不影响 busy-poll 策略核(永远 C0),影响中断核(housekeeping)、阻塞线程核、package 级状态
  • C6 代价: 退出延迟 133µs(Skylake-SP),且 L1/L2/TLB 全丢,实际恢复比数字更长
  • 四种限制 C-state 方法:
    1. GRUB 参数 intel_idle.max_cstate=1 processor.max_cstate=1(全局,需重启)
    2. idle=poll(全局,副作用:牺牲高频 turbo)
    3. /dev/cpu_dma_latency(全局,进程持有 fd 期间生效)
    4. pm_qos_resume_latency_us(单核,运行时)

P-state / 频率控制

  • performance governor 消除调频延迟
  • intel_pstate active+HWP 模式下 performance 直接锁最高频
  • Turbo 取舍: 关 turbo (no_turbo=1) 换取确定性频率,或保留但确保忙核数恒定
  • scaling_cur_freq 不等于实际频率,用 turbostat 看 Bzy_MHz

AWS 实践

  • C+P 都开放: 老一代大规格 (c4.8xl, m4.10xl 等) + 所有 Intel/AMD 裸金属
  • 只有 C-state: Nitro 世代 Intel/AMD,第7代起全规格开放
  • 都不开放: Graviton、虚拟化小规格
  • 没有控制权时:busy-poll 本身就是最好的 C-state 控制;关注 steal time;需要完整控制上 .metal

实用命令

# 验证 C-state 限制生效
cpupower idle-info
# 实测频率
sudo turbostat --quiet --show CPU,Busy%,Bzy_MHz,Avg_MHz,TSC_MHz sleep 5
# 检查控制权
ls -d /sys/devices/system/cpu/cpu0/cpuidle
ls -d /sys/devices/system/cpu/cpu0/cpufreq