Road to Full Stack Engineer

OSSを中心に触ったものの備忘録など

Sleep時のバッテリー消費が激しい

Sleep modeの設定

MacBook Air不使用時はディスプレイを閉じてスタンバイモードへ移行。
が、24時間経たずにバッテリーが0になって、スタンバイからの復帰が出来ない。

Sleep modeの設定が悪いと思い、さっと検索して以下のコマンドを実行。

sudo pmset -a hibernatemode 1

これでちゃんと保つはず!

・・・
と思ったのですが、相変わらずバッテリー切れ。

スタンバイからの復旧

ログでは1分毎にスタンバイモードから復旧して何かしている。

rar:~ rar$ syslog | grep "Wake reason" | less
Mar  8 09:59:47 rar kernel[0] <Debug>: Wake reason: ?
Mar  8 10:00:47 rar kernel[0] <Debug>: Wake reason: ?

Wake reason: ? って何だ。
そのreasonが知りたいのに、「?」って。。。

rar:~ rar$ pmset -g log | less
2014/03/08 10:05:40 JST  Assertions             PID 17(powerd) Released InternalPreventSleep "PM configd - Wait for Device enumeration" 00:00:45  id:0xe0000247e [System: No Assertions]                  
2014/03/08 10:05:40 JST  Sleep                  Maintenance Sleep: Using BATT (Charge:13%)                                      16 secs   
2014/03/08 10:05:42 JST  SlowResponse           PMConnection: Response from com.apple.apsd is slow (powercaps:0x0)                        1882 ms       
2014/03/08 10:05:42 JST  WakeRequests           Clients requested wake events: None                                                       
2014/03/08 10:05:56 JST  Assertions             PID 17(powerd) Created InternalPreventSleep "PM configd - Wait for Device enumeration" 00:00:00  id:0xe0000248b [System: No Assertions]           
2014/03/08 10:05:56 JST  DarkWake               DarkWake [CDN]  : Using BATT (Charge:13%)   

何かしているのはわかるけど、正直よくわからない・・・

Avast!

怪しい。
リアルタイムチェックとかが走ってスリープ解除されているのではないか。

ということで、Avast!をアンインストールしてみた。

結果・・・
変化なし。

Sleep modeの設定(再)

アプリケーションの問題でなければ、設定がおかしいか初期不良か。

PRAMクリア

変わらず。起動音が出るようになっただけ。

Sleep modeの設定

「hibernatemode」の設定値を確認。
こういうとき、やっぱり見るべきはマニュアル。
(最初からちゃんとチェックするべき・・・)

rar:~ rar$ man pmset
PMSET(1)                  BSD General Commands Manual                 PMSET(1)

NAME
     pmset -- manipulate power management settings
(略)
SAFE SLEEP ARGUMENTS
     hibernatemode takes a bitfield argument defining SafeSleep behavior. Passing 0 disables SafeSleep altogether, forcing the computer into a regular sleep.

     0000 0001 (bit 0) enables hibernation; causes OS X to write memory state to hibernation image at sleep time. On wake (without bit 1 set) OS X will resume from the hibernation
     image. Bit 0 set (without bit 1 set) causes OS X to write memory state and immediately hibernate at sleep time.

     0000 0010 (bit 1), in conjunction with bit 0, causes OS X to maintain system state in memory and leave system power on until battery level drops below a near empty threshold
     (This enables quicker wakeup from memory while battery power is available). Upon nearly emptying the battery, OS X shuts off all system power and hibernates; on wake the system
     will resume from hibernation image, not from memory.

     0000 1000 (bit 3) encourages the dynamic pager to page out inactive pages prior to hibernation, for a smaller memory footprint.

     0001 0000 (bit 4) encourages the dynamic pager to page out more aggressively prior to hibernation, for a smaller memory footprint.

     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 disk 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.

はい、「1」はそもそもないですね。

過去は「1」があったようですが Mac OS X version 10.9 では存在しないようです。

ということで、「25」を設定。

rar:~ rar$ syslog | grep "Wake reason" 
Mar  8 10:13:28 rar kernel[0] <Debug>: Wake reason: ?
Mar  8 10:16:50 rar kernel[0] <Debug>: Wake reason: EC.SleepTimer (SleepTimer)
Mar  8 10:38:51 rar kernel[0] <Debug>: Wake reason: EC.LidOpen (User)
Time stamp                Domain                Message                                                                         Duration        Delay     
==========                ======                =======                                                                         ========        =====     
UUID: ******
2014/03/08 10:16:43 JST  Sleep                  Idle Sleep: Using BATT (Charge:11%)                                             14 secs   
2014/03/08 10:16:48 JST  SlowResponse           PMConnection: Response from com.apple.apsd is slow (powercaps:0x0)                        5008 ms       
2014/03/08 10:16:48 JST  WakeRequests           Clients requested wake events: None                                                       
2014/03/08 10:16:57 JST  Wake                   Wake [CDNVA] due to EC.SleepTimer/SleepTimer: Using BATT (Charge:12%)           246 secs  
2014/03/08 10:16:57 JST  SlowResponse           Kernel: Response from powerd is slow (powercaps:0xf)                                      4615 ms       
2014/03/08 10:16:57 JST  SlowResponse           Kernel: Response from powerd is slow (powercaps:0x0)                                      5080 ms       
2014/03/08 10:20:48 JST  Assertions             PID 17(powerd) Created InternalPreventSleep "com.apple.powermanagement.darkwakelinger" 00:00:00  id:0xe000024f2 [System: DeclUser SRPrevSleep kCPU kDisp]
                 
2014/03/08 10:21:03 JST  Assertions             PID 17(powerd) TimedOut InternalPreventSleep "com.apple.powermanagement.darkwakelinger" 00:00:15  id:0xe000024f2 [System: DeclUser SRPrevSleep kCPU kDisp]
                
2014/03/08 10:21:03 JST  Assertions             PID 17(powerd) Released InternalPreventSleep "com.apple.powermanagement.darkwakelinger" 00:00:15  id:0xe000024f2 [System: DeclUser SRPrevSleep kCPU kDisp]
                
2014/03/08 10:21:03 JST                         Summary- [System: DeclUser kDisp] Using Batt                                              
Sleep/Wakes since boot at 2014/03/08 1:19:00 JST   :519   Dark Wake Count in this sleep cycle:0

Time stamp                Domain                Message                                                                         Duration        Delay     
==========                ======                =======                                                                         ========        =====     
UUID: ******
2014/03/08 10:21:03 JST  Sleep                  Software Sleep pid=66: Using BATT (Charge:11%)                                  1073 secs 
2014/03/08 10:21:08 JST  SlowResponse           PMConnection: Response from com.apple.apsd is slow (powercaps:0x0)                        5841 ms       
2014/03/08 10:21:08 JST  WakeRequests           Clients requested wake events: None                                                       
2014/03/08 10:38:56 JST  Wake                   Wake from Standby [CDNVA] due to EC.LidOpen/Lid Open: Using BATT (Charge:11%)   54 secs   
2014/03/08 10:38:56 JST  HibernateStats         hibmode=25 standbydelay=10800                                                             rd=284 ms     
2014/03/08 10:38:56 JST  SlowResponse           Kernel: Response from powerd is slow (powercaps:0x0)                                      5910 ms    

変にhibernatemodeを変更してしまったことが悪かったようです。
sleep modeへの移行の時間があったとしても、sleep時のバッテリーを保たせることを優先させる設定が、ようやく出来ました。

教訓

確認するべきはまずはマニュアル。