0

 Mac OS Xのスリープ方式(ハイバネーション)を変更する方法

ディスクメンテの一貫で色々検討していたなかで、
下記ディレクトリ配下に圧迫しているファイルがあり、
/var/vm/sleepimage ってなんだ?というのが経緯であり、
OS Xのメモリ管理方式であることに行き着いた。までの備忘録。

■対象の方
ディスクメンテを検討している方や、
最近なんだか、スリープ復帰が遅いと感じている方

■今回の被疑箇所

$ du -sh /var/vm/* | egrep -i ".*G" | sort -nrk 1
4.0G	/var/vm/sleepimage ← ファイルサイズも気になるし、そもそもコレはなんだ?
1.0G	/var/vm/swapfile1

ハイバネーションファイルというようだ。。。
macのスリープ方式と関係している



やはり、
ハイバネートというOS Xのスリープ管理を実現している思想なようで、
/var/vm/sleepimageファイルがその実態ファイルであった。。。
ハイバネーションファイル



pmsetコマンド

Macのパワーマネジメントに関する情報の取得と設定変更を目的としたコマンド
システム環境設定「省エネルギー」パネルのCUI版に位置付けとされるが、同パネルには表示されていない項目もあるため、機能的にはpmsetのほうが充実している。なお、設定変更には管理者権限が必要なため、sudoコマンドとあわせて実行することも多い。

それでは早速、
現在のパワーマネージメント情報を取得しましょう。

■電源管理コマンド(pmset)による現在のパワーマネージメント状態を確認する

man より抜粋

pmset -g
Prints a snapshot of battery/power source state at the moment.

では早速コマンドを投入してみましょう。

$ pmset -g
Active Profiles:
Battery Power	 1
AC Power	 2*
Currently in use:
 womp                 1
 halfdim              1
 sms                  1
 hibernatefile        /var/vm/sleepimage ←こやつか...フム
 networkoversleep     0
 disksleep            10
 sleep                10
 hibernatemode        3 ← mba,mbpでは ハイバーネートが有効(3)になっている
 ttyskeepawake        1
 displaysleep         10
 acwake               0
 lidwake              1

■スリープの種類
OS Xのスリープモードは3種類ある。

manより抜粋

We do not recommend modifying hibernation settings. Any changes you make are not supported. If you choose to do so anyway, we recommend using one of these
     three settings. For your sake and mine, please don't use anything other 0, 3, or 25.

     hibernatemode = 0 (binary 0000) by default on supported desktops. The system will not back memory up to persistent storage. The system must wake from the
     contents of memory; the system will lose context on power loss. This is, historically, plain old sleep.

     hibernatemode = 3 (binary 0011) by default on supported portables. The system will store a copy of memory to persistent storage (the disk), and will power
     memory during sleep. The system will wake from memory, unless a power loss forces it to restore from hibernate image.

     hibernatemode = 25 (binary 0001 1001) is only settable via pmset. The system will store a copy of memory to persistent storage (the disk), and will remove
     power to memory. The system will restore from disk image. If you want "hibernation" - slower sleeps, slower wakes, and better battery life, you should use
     this setting.

     Please note that hibernatefile may only point to a file located on the root volume.

スリープ (0)
所要時間:スリープ、復帰共に1〜3秒程度
スリープ移行時:メモリ内容をHDDに待避せず、メモリの内容はバッテリーが続く限りメモリで保持
復帰時:メモリから復帰のため高速、バッテリーが無くなった場合は忘れてしまうため通常のOS起動となる

セーフスリープ (3)
所要時間:スリープ移行まで、3〜10秒程度、復帰は1〜3秒程度
スリープ移行時:メモリの内容をHDDに退避して、メモリの内容はバッテリーが続く限り保持
復帰時:メモリから復帰のため高速、バッテリーが無くなった場合はHDDの内容を読み込む

ディープスリープ (25)
所要時間:スリープ移行、復帰共に5〜10秒程度
スリープ移行時:メモリの内容をHDDに退避し、メモリの内容を忘れてスリープ
復帰時:HDDの内容を読み込み復帰のため低速

MBA,MBPの標準設定は
スリープ(0)とディープスリープ(25)のいいとこどりの
ハイブリッドモードな「セーフスリープ(3)」です。
そのため、画面を閉じたあとすぐに画面を開くと、なかなか画面が表示されません。これはメモリ内容をHDD(SSD)に書き込んでいるため。

「セーフスリープ」では復帰時はメモリから復帰するため早いはずだが、
復帰が遅いことがあるのは何故なのか?

もうわかりましたね?
ハイブリッド仕様なセーフスリープであるが故ですね。
すなわち、メモリ→ディスクへの書き出し時間による復帰遅延となっていたわけです。またバッテリ状況など一時的な電気な問題により、メモリ内容が失われHDD(SSD)から一部データを復帰する場合もあるようで、その場合も復帰時間遅延が考えられます。
このようなことから、時間を要するリスクはあります。

そこで、強制的にメモリだけでスリープになって復帰する「スリープ」モードにして見ました。
結果……。復帰が劇的に早くなった…

■スリープモードの変更方法・確認方法
(ここからの操作をする場合、自己責任でお願いします)

sudo pmset -a hibernatemode X

Xの引数部分には設定したいスリープモードの値を入力。
今回高速起動にしたい場合は「0」。
デフォルトに戻したい場合は「3」です。

スリープ 0
セーフスリープ 3
ディープスリープ 25

なお、ターミナルで現在のスリープモードを確認するには…
pmset -g

「hibernatemode」が現在のセーフモード。

後記・・・
MacBook Air はスリープ状態でも30日間持つよ!
という売り文句がその昔あった関係で、
ある時間以上スリープが続くとHDD(SSD)からの復帰に移るような設定(省電力モード、もう御察しの通りデフォルト3のね)になっているのかも。

これは便利な設定で素晴らしい思想だと思うが、
私の場合はいつでもすぐに立ち上がって欲しい!と思うので強制的に「スリープ(0)」モードにしました。

長時間使わないときはシャットダウンしたらいいかな、との考え。

最近、MacBook Airの復帰がなんか遅いな〜とお悩みの方は
スリープモードの確認をしてみてはいかがでしょうか?

ハイバーネート【英】冬眠、ともあります。
なかなかユニークでインテリの遊び心が垣間見えますね。。

まとめ

MacOSのスリープモード(ハイバーネートモードの設定値)-
通常スリープ [hibernatemode 0]
スタンバイ状態でメモリデータの退避は行わない
すぐ復帰出来る反面、バッテリ枯渇時には作業状態が全て消去される。

ディープスリープ [hibernatemode 1]
休止状態でメモリデータの退避を行う。
復帰に時間が掛かる反面、バッテリが枯渇しても作業状態は保持されている。

セーフスリープ [hibernatemode 3]
バッテリ容量が十分あるうちはスタンバイ状態、
バッテリの消耗が進むとディープスリープへ移行。
バッテリが十分にあるうちはすぐに復帰出来るし、
万一の場合にも作業状態を失わない。

du -sh /var/vm/* | egrep -i ".*G" | sort -nrk 1
4.0G	/var/vm/sleepimage ←ハイバーネートファイル
1.0G	/var/vm/swapfile1

ハイバーネートをoffにした後に実態ファイルの削除をしましょう : >

参考
http://iici.cocolog-nifty.com/blog/2011/04/mac-ec62.html
http://www.toshiya240.com/2012/01/mac-alfred.html?m=1

■ハイバーネートをやめて、メモリー復帰のみに変更

$ sudo pmset -a hibernatemode 0
$ pmset -g
Active Profiles:
Battery Power	 -1
AC Power	 -1*
Currently in use:
 womp                 1
 halfdim              1
 sms                  1
 hibernatefile        /var/vm/sleepimage
 networkoversleep     0
 disksleep            10
 sleep                15
 hibernatemode        0 ←デフォルト3(セーフスリープ)からメモリ復帰のみのスリープモード(0)にかわってることを確認
 ttyskeepawake        1
 displaysleep         15
 acwake               0
 lidwake              1

■不要なハイバーネートファイルも削除。

$ sudo rm -rf /var/vm/sleepimage 

■ディスクメンテ確認

$ df -h /
Filesystem    Size   Used   Avail  Capacity  iused     ifree    %iused     Mounted on
/dev/disk0s2  238Gi  113Gi  124Gi    48%    29808435  32496434    48%         /  ←メモリ分(5G)のディスク領域がメンテされた。

以上です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です