土法炼钢兴趣小组的算法知识备份

【操作系统百科】电源管理

文章导航

分类入口
os
标签入口
#power-management#suspend#hibernate#runtime-pm#pm-qos

目录

笔记本合盖 → 休眠几秒后消耗最少电量。服务器空闲 → CPU 进入深度 C-state。数据中心 → 关闭整个刀片。电源管理贯穿从单设备到整个系统。

一、先看图

flowchart TD
    subgraph 设备级
        RPM[Runtime PM<br/>单设备自动休眠]
    end
    subgraph 系统级
        S2I[suspend-to-idle<br/>s2idle / S0ix]
        S3[S3 suspend<br/>suspend-to-RAM]
        S4[S4 hibernate<br/>suspend-to-disk]
    end
    RPM --> DEVICE[设备空闲<br/>→ 低功耗]
    S2I --> FREEZE[冻结进程<br/>+ CPU idle]
    S3 --> RAM[关闭设备<br/>+ 内存保持供电]
    S4 --> DISK[内存写入磁盘<br/>+ 断电]

    classDef dev fill:#388bfd22,stroke:#388bfd,color:#adbac7;
    classDef sys fill:#3fb95022,stroke:#3fb950,color:#adbac7;
    class RPM,DEVICE dev
    class S2I,S3,S4,FREEZE,RAM,DISK sys

二、Runtime PM

单个设备的电源管理:

pm_runtime_get_sync(dev);    // 使用设备前
// ... 使用设备 ...
pm_runtime_put_autosuspend(dev);  // 使用完毕

设备空闲超时 → 自动进入低功耗状态。

2.1 autosuspend

pm_runtime_set_autosuspend_delay(dev, 2000);  // 2 秒后自动休眠
pm_runtime_use_autosuspend(dev);

避免频繁开关设备(USB 设备、GPU)。

三、系统级休眠

3.1 suspend-to-idle(s2idle)

echo s2idle > /sys/power/mem_sleep
echo mem > /sys/power/state

最快恢复(~100ms)。

3.2 S3 suspend-to-RAM

echo deep > /sys/power/mem_sleep
echo mem > /sys/power/state

恢复需要重新初始化 CPU 和设备(~1-3s)。

3.3 S4 hibernate

echo disk > /sys/power/state

恢复慢(10+ 秒),但零功耗。

四、休眠流程

sequenceDiagram
    participant PM as PM Core
    participant DEV as 设备驱动
    participant PROC as 进程

    PM->>PROC: freeze_processes()
    PM->>DEV: suspend() 每个设备
    PM->>PM: 平台休眠(ACPI/DT)
    Note over PM: 系统休眠中...
    PM->>PM: 唤醒
    PM->>DEV: resume() 每个设备
    PM->>PROC: thaw_processes()

五、pm_qos

应用和驱动声明延迟需求:

// 内核
pm_qos_add_request(&req, PM_QOS_CPU_DMA_LATENCY, 50);  // 50μs

// 用户态
echo 50 > /dev/cpu_dma_latency

pm_qos 阻止 CPU 进入高延迟的 C-state → 保证响应时间。

六、C-state 与 P-state

概念 含义
C-state 空闲状态(C0=运行、C1=halt、C6=深度休眠)
P-state 性能状态(频率/电压档位)

cpuidle governor(menu/haltpoll)选择 C-state。 cpufreq governor(schedutil/ondemand)选择 P-state。

七、笔记本 vs 服务器

场景 策略
笔记本 s2idle/S3 频繁休眠、积极降频
服务器 很少休眠、P-state 按负载调整
数据中心 空闲刀片可能完全关闭
嵌入式 深度定制 runtime PM

八、唤醒源

cat /sys/power/wakeup_count
cat /sys/devices/.../power/wakeup

USB 设备、网卡(Wake-on-LAN)、RTC alarm、键盘 → 可配置为唤醒源。

九、观察

# 支持的休眠模式
cat /sys/power/state           # freeze mem disk
cat /sys/power/mem_sleep       # s2idle [deep]

# Runtime PM 状态
cat /sys/devices/.../power/runtime_status

# pm_qos
cat /dev/cpu_dma_latency

# 电源事件
dmesg | grep -i "suspend\|resume\|PM:"
journalctl -b | grep -i suspend

十、小结


参考文献

工具


上一篇CPU 热插拔 下一篇启动流程

同主题继续阅读

把当前热点继续串成多页阅读,而不是停在单篇消费。

2026-05-06 · os

【操作系统百科】内核内存调试

内核内存 bug 是最难追的:UAF、OOB、double free、leak 都可能沉默数月。本文讲 KASAN 三种模式、KFENCE 生产采样、kmemleak、SLUB_DEBUG、UBSAN/KCSAN 联动。

2026-05-08 · os

【操作系统百科】VFS 四层抽象

Linux 的一切皆文件靠 VFS 实现——superblock、inode、dentry、file 四层抽象加 ops 表。本文讲 VFS 核心数据结构、dcache、inode cache、RCU lookup,以及文件系统如何插入 VFS。

2026-04-22 · os

操作系统百科

Linux 6.x 视角下的操作系统系列索引:110 篇覆盖调度、虚拟内存、文件系统与 I/O、并发、隔离、可观测性,按主题、阅读路径与关键问题三种入口组织。

2026-05-27 · os

【操作系统百科】用户态分配器:jemalloc vs tcmalloc

jemalloc 与 tcmalloc 都想解决多线程分配器的老问题:锁争抢、碎片、RSS 膨胀与回收抖动。但两者把优化重点放在了不同位置:tcmalloc 更激进地把热路径推到 per-CPU,jemalloc 则把 arena、extent、decay 和 profiling 做成了一套更完整的内存治理工具箱。


By .