iMacをdeep sleepしないようにした

Apple

基本的に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などとするとhibernatemode0を設定できます。
-aオプションはすべてのプロファイルの値を書き換えます。
-bの時はバッテリー利用時。-cの場合は電源アダプタ利用時。-uの場合はUPS利用時。
それぞれのオプションに応じてプロファイルの指定された値を変更することができます。

スリープの種類

現在のMacにはスリープといえども、3種類のタイプが存在しているようです。
pmsethibernatemodeの値でそれぞれ設定が変わる。

sleep

いわゆる普通のスリープ。メモリに通電したままメモリの状態を維持している。よって、復旧もはやい。

safe sleep

いわゆる普通のスリープから後述するstandbydelayの時間だけ経過後に、メモリの状態をHDDに保存してメモリへの通電を停止する。
HDDに保存する状態に移行してからだと消費電力はほぼない。だが普及にHDDからメモリ分まるごと読み込む必要があるので、大量のメモリを搭載しているマシンだとすごく時間がかかる。
どうやら、この状態にiMacがなっていたようで。帰宅して、いざ復旧しようとしたらHDDの読み込みで時間がかかった状態になってしまったのです。メモリが大量に搭載されたマシンだと普通に起動にかかる時間のほうが早いです。

Deep Sleep

メモリの状態をHDDに保存する。メモリへの通電は切る。
消費電力はほぼないに等しいが、復旧の際にメモリ分の読み込みをHDDから行うため時間がかかる。

機種によって設定値が異なる

そもそもの原因は私がPuppetでMacBook Airの設定値を書いていたため、それがiMacで設定されてhibernatemode3を設定されsafe sleepの状態になっていたのがこんなことを調べることになった原因でした。
Macはデスクトップモデルはhibernatemodesleep0が初期値です。MacBookなどのノートブックはsafe sleep3が初期値です。これについては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を利用して設定しておくことにしました。

タイトルとURLをコピーしました