macOS 睡眠模式管理
Power Manager Setting (pmset
) 是 macOS 的系统电池管理工具,通过调整 macOS 的睡眠计划,可以达成 “插电响应快,断电用得久” 的目标。
macOS 休眠流程
如图所示,当我们不使用 Mac 时,macOS 先进入 sleep
状态,然后根据 hibernatemode
的模式,决定将镜像数据写入内存还是硬盘。standby
和 autopoweroff
相当于两个并行的模式计时器,Mac 会根据当前供电条件作出模式的选择,在计时器阶段内,当时间条件满足,Mac 就会将镜像写入硬盘并睡眠。
pmset
基本用法
sudo pmset [-选项] <参数>
例子:
pmset -g custom
:查看当前所有睡眠计划pmset -g cap
:查看当前供电条件下可以调节的参数sudo pmset restoredefaults
: 还原全部设置
常用选项
pmset -a
:调整任何条件下的睡眠计划pmset -c
:调整外部供电的睡眠计划pmset -b
:调整电池供电的睡眠计划pmset -g
:查看计划
常用参数
🎨 sleep
sleep
控制进入休眠所需要的空闲时间
🎨 hibernatemode
hibernatemode
supports values of 0, 3, or 25. Whether or not a hibernation image gets written is also dependent on the values ofstandby
andautopoweroff
.
hibernatemode
负责管理睡眠模式。
hibernatemode
有 3 种休眠模式可选择
hibernatemode = 0
- iMac, Mac Mini等 Mac桌面设备默认参数
- 持续向内存供电,将数据保留在内存
- 唤醒速度快,减少硬盘占用
- 数据有丢失风险
- 耗电量大
hibernatemode = 25
- 将数据写入硬盘
- 不向内存供电,将内存镜像直接写入硬盘
- 数据不易丢失,镜像占用硬盘空间
- 唤醒速度慢
- 耗电量少
hibernatemode = 3
- MacBook 笔记本设备默认参数
- safe sleep, 数据既写入内存又写入硬盘
- 持续向内存供电
- 唤醒时,根据设备电量自动选择从 内存/硬盘 恢复
🎨 standby
standby
causes kernel power management to automatically hibernate a machine after it has slept for a specified time period.
standby
模式需要以下条件:
- 电池供电
- 没有外接设备
- 没有网络活动
- 没有外接显示器
在满足条件的前提下, standbydelayhigh/low
秒后,会进行睡眠。
🎨 highstandbythreshold
highstandbythreshold
(电池剩余电量百分比) 它是standbydelay
模式选择阈值,默认 50% 电量。
高于阈值,采用
standbydelayhigh
计算时间。低于阈值,采用
standbydelaylow
计算时间。
🎨 autopoweroff
After sleeping for <autopoweroffdelay> seconds, the system will write a hibernation image and go into a lower power chipset sleep
autopoweroff
模式需要满足以下条件:
- 外部电源供电
- 没有外接设备
- 没有网络活动
在满足条件的前提下, autopoweroffdelay
秒后,系统会写入内存镜像然后睡眠。autopoweroff
的适用场景大多是给电脑充电的条件下。
🎨 gpuswitch
gpuswitch
这个参数用于管理显卡的选择,适合有独立显卡/外置显卡的 Mac
gpuswitch=0
只使用集成显卡gpuswitch=1
只使用独立显卡gpuswitch=2
自动切换显卡
其他常用参数
lidwake
: 开盖时是否唤醒tcpkeepalive
: 合盖时是否保存网络连接displaysleep
: 屏幕休眠时间disksleep
: 硬盘休眠时间acwake
: 被同一 iCloud ID 下的设备唤醒
更多参数在终端运行 $ man pmset
,查阅 pmset
的说明文档
🌟 个人设置方案
我个人所希望的睡眠计划是:外接供电条件下响应尽可能快,电池供电条件下耗电少。
⚡️ 外部供电下的 pmset 设置
在进行外部供电的时候,我希望 MacBook 是处于一个 “时刻准备着” 的状态(参考 iMac ),因此我并不希望它快速的进入休眠状态,并且不进入睡眠状态。
hibernatemode
设置成0
,让外部电源持续给内存供电。关闭
standyby
和autopoweroff
模式,阻止 MacBook 睡眠。使用 eGPU 的朋友可以设置
gpuswitch=1
,以只使用 eGPU
1 | // 120 分钟后进入休眠 |
🔋 电池供电下的 pmset 设置
在通过电池供电的时候,我希望电脑在休眠时能在低耗能的同时保持一定的唤醒速度。
hibernatemode
为3
,将镜像数据既写入内存又写入硬盘,同时对内存供电一段时间。standby
的电量阈值设置成75%
,当电量低于 75% stanby的计时器就使用standbydelaylow
tcpkeepalive
设置成0
, 休眠时电脑将会断网,无法进行下载工作,FindMy 也无法定位acwake
设置成0
, 关闭被同一网络下的同 iCloud 设备唤醒
1 | // 20 分钟后进入休眠 |
📖 参考资料:
- StackExchange: Difference between autopoweroff and standby in pmset
- tutsplus: How to Hibernate a Mac
- WikiPedia: pmset