macOS Mojaveにおけるスリープ中のバッテリー消費
tl; dr
macOS Mojaveにおいてスリープ中に時々妙にバッテリーが消費されることがあったが、pmset
コマンドでstandbydelayhigh
パラメータを調整したら改善された(みたいだ)よという話。
経緯
MacBook (Early 2015)のOSをSierraからMojaveにアップグレードしたところ、スリープ復帰後、バッテリー残量が予想外に少なくなっていることが度々ありました。 正確には、スリープ中のバッテリー消費が激しいとき(例えば、約6時間で約25%の消費)とそうでないときがあるという感じです。 Sierraではそんなことなかったです。 SMCリセットをしても改善されず…
そんなこんなで色々と調べたところ、pmset -g
で表示されるスリープ関連のパラメータが、SierraとMojaveとで異なる事に気付きました。
pmset
のパラメータ
pmset
は、システム環境設定の省エネルギー設定では設定できない、スリープ関連の詳細なパラメータを設定できるコマンドです。
macOSのスリープは、デフォルトではセーフスリープというモードに設定されています。 セーフスリープ・モードでは、スリープ処理が開始されると、まず、メモリ以外の必要でないコンポーネントへの通電を停止し、所定時間経過後に、メモリの内容をストレージに記憶した上で、メモリへの通電も停止するという動作が実行されます。 ここで、スリープ処理開始後のメモリには通電されている状態を「スリープ状態」といい、メモリへの通電も停止された状態を「ディープスリープ状態」と呼ぶことにします。 原則的には、スリープ状態でのバッテリー消費の方が、ディープスリープ状態でのバッテリー消費よりも大きいはずです。
Sierraでは、上記「所定時間」はpmset
のstandbydelay
というパラメータに相当し、デフォルトだと10800
(単位は秒。即ち3時間。)に設定されています。
しかしながら、Mojaveにはstandbydelay
パラメータはなく、その代わりに、standbydelayhigh
とstandbydelaylow
という2つのパラメータが見つかりました。
デフォルト値は、それぞれ、86400
(24時間)と10800
(3時間)です。
man pmset
によれば、要するに、standbydelayhigh
はバッテリー残量が所定値より大きいときの、standbydelaylow
はバッテリー残量が所定値より小さいときの、上記「所定時間」に相当するとのこと。
現象についての考察
どうやら、Sierraとは異なり、Mojaveにおいては、スリープ状態からディープスリープ状態に移行するまでの時間(上記「所定時間」)が、バッテリーの残量によって異なるみたいです。
そして、上記のようなデフォルト値の下では、バッテリーの残量が十分である状況の方が、そうでない状況と比べて、よりバッテリー消費の大きいスリープ状態が長く続くことになります。
即ち、スリープ中のバッテリー消費が激しかったのは、たまたまバッテリー残量が多かったときであり、逆にそうでもなかったのは、たまたまバッテリー残量が少なかったときであったという仮説が成り立ちます。
やったこと
pmset
コマンドにより、standbydelayhigh
パラメータをstandbydelaylow
バラメータと同じ値に設定しました。
詳細には、とっととディープスリープ状態に移行してもらった方がよりバッテリー消費は減るだろうと考え、上記両パラメータを600
(10分)に設定しました。
即ち、
sudo pmset -a standbydelayhigh 600 standbydelaylow 600
その後
本稿執筆時点で設定から数日経ちますが、今のところ、スリープ中の激しいバッテリー消費は再発してないです。