基本的にMacは電源を切らずにスリープした状態で放置しています。
やけにiMacがスリープから復旧するのが遅かったので、Macのpmset
を使って、パワーマネジメントについて設定をしなおしました。
pmset
Macのスリープや電源OFFの設定はpmset
コマンドで確認と設定ができます。
細かい設定などについてはman pmset
で確認ができます。
設定の確認方法
pmset -g
などとすると設定を参照することができます。
pmset -g
Active Profiles:
AC Power -1*
Currently in use:
standby 1
Sleep On Power Button 1
womp 1
halfdim 1
hibernatefile /var/vm/sleepimage
darkwakes 1
gpuswitch 2
autorestart 0
networkoversleep 0
disksleep 10
sleep 1 (sleep prevented by Google Chrome)
autopoweroffdelay 14400
hibernatemode 0
autopoweroff 1
ttyskeepawake 1
displaysleep 10
standbydelay 10800
ちなみに上記のpmsetの表示のサンプルはiMacでUPSも利用してないので、電源アダプターを利用したプロファイルAC Power
だけのプロファイルが1つだけあります。
設定方法
sudo pmset -a hibernatemode 0
などとするとhibernatemode
の0
を設定できます。
-a
オプションはすべてのプロファイルの値を書き換えます。
-b
の時はバッテリー利用時。-c
の場合は電源アダプタ利用時。-u
の場合はUPS利用時。
それぞれのオプションに応じてプロファイルの指定された値を変更することができます。
スリープの種類
現在のMacにはスリープといえども、3種類のタイプが存在しているようです。
pmset
のhibernatemode
の値でそれぞれ設定が変わる。
sleep
いわゆる普通のスリープ。メモリに通電したままメモリの状態を維持している。よって、復旧もはやい。
safe sleep
いわゆる普通のスリープから後述するstandbydelay
の時間だけ経過後に、メモリの状態をHDDに保存してメモリへの通電を停止する。
HDDに保存する状態に移行してからだと消費電力はほぼない。だが普及にHDDからメモリ分まるごと読み込む必要があるので、大量のメモリを搭載しているマシンだとすごく時間がかかる。
どうやら、この状態にiMacがなっていたようで。帰宅して、いざ復旧しようとしたらHDDの読み込みで時間がかかった状態になってしまったのです。メモリが大量に搭載されたマシンだと普通に起動にかかる時間のほうが早いです。
Deep Sleep
メモリの状態をHDDに保存する。メモリへの通電は切る。
消費電力はほぼないに等しいが、復旧の際にメモリ分の読み込みをHDDから行うため時間がかかる。
機種によって設定値が異なる
そもそもの原因は私がPuppetでMacBook Airの設定値を書いていたため、それがiMacで設定されてhibernatemode
が3
を設定されsafe sleep
の状態になっていたのがこんなことを調べることになった原因でした。
Macはデスクトップモデルはhibernatemode
がsleep
の0
が初期値です。MacBookなどのノートブックはsafe sleep
の3
が初期値です。これについてはman pmset
にも記述されていました。
設定値だけでなく、デスクトップモデルとノートブックモデルでは設定できるProfileの種類と数も異なります。ノートブックモデルはバッテリーが搭載されているので、その分プロファイルが多いのです。
各種設定値も初期値が異なるので、pmset周りを設定する際は初期値がハードウェアのモデルによっても異なることを念頭に置いて設定するべきでした。
Puppetで設定する場合はFacterのsp_machine_model
にハードウェアのモデルが記述されているので、ここにiMacが含まれてたらpuppet-osx-powermgmtを利用して設定するか
if $sp_machine_model =~ /^iMac/ {
exec { 'set sleep setting':
command => 'pmset -a hibernatemode 0'
}
}
というようにexec
を利用して設定しておくことにしました。