OS X Mavericks にアップグレードして 2 か月ほど経ちます。アップグレード後の目立った不具合は昔のメールが文字化けするくらいだったのですが、使っていると致命的な問題にぶち当たりました。
それは USB 周りの不具合。 VMware Fusion で Windows を動かし、 USB で接続している HDD の中身を処理させている間に席を外していると、戻ってみると USB 接続の HDD がアンマウントされてて、エラーで処理が中断されているのです。ガックリですよ。
そして Mac mini Early 2009 は非力なので 、 Turbo.264 HD Video Converter というソフトと USB 接続のハードウェアエンコーダを使っているのですが、これも処理をさせたまま放置するとハードウェアエンコーダを見失い、ソフトウェアエンコードに切り替わっており、寝て起きてもエンコードが終わっていないしエンコード速度もものすごく遅いという自体に陥りました。
しかしずっと Mac の前にかじりついている時には USB 機器を見失うことは起きないので、システム環境設定にて「コンピュータのスリープ」をしない設定にして、ハードディスクの回転も止めないようにして使っていました。でも普段はスリープはしてほしいから、放置で作業をさせる前にスリープの設定をわざわざ変更しなければならず、それが面倒です。 10.9.1 がリリースされて問題が解決されるかと期待したのですが、変わりませんでした。
目次
原因は App Nap だった
原因がなんだかわからなかったのですが、 Mavericks から App Nap という機能が搭載されということを知りました。試しにその機能を切ったら、スリープしないにしなくても処理をきちんとしてくれるようになりました。
App Nap はアプリケーションごとに設定できるようで、アプリケーションの「情報を見る」で「 App Nap を切にする」のチェックを入れるだけです。
Apple のページによると App Nap は後ろに隠れたアプリケーションを音楽を聴くなどの処理をしていない場合、処理速度を落として電気を食わないようにしてくれるみたいです。省電力によるバッテリーの長持ちがそのメリットに上がっています。
この App Nap とスリープと USB 機器の認識の関係がうまくいってないみたいです。以下のような仮説が考えられます。
- 「ディスプレイのスリープ」になった時点でアプリケーションが App Nap の状態に移行する
- システム環境設定にて設定した「コンピュータのスリープ」の時間になると、 App Nap の状態では USB 機器と OS がほとんんど通信していないので、 UBS 機器は使用していないと判断される
- OS が USB 機器との接続を解除し省エネ状態になるが、実際には処理中だから USB の接続が切られエラーが出る
USB の電源ではなく通信としたのは、セルフパワー、バスパワーのそれぞれの外付け HDD で同じ現象が起こったからです。
ディスプレイのスリープでアプリケーションが App Nap に移行するか検証
上記仮説であるディスプレイのスリープ時に App Nap 状態になり、コンピュータのスリープ判定の時に USB の接続を切りエラーがでる、というのを検証してみました。
コンピュータのスリープ 15 分、ディスプレイのスリープを 5 分に設定していたので、コンピュータのスリープ、ディスプレイのスリープをともに 3 分に設定し、 VMware Fusion と Turbo.264 HD にて同じ作業を行いました。
結果、外付け HDD やハードウェアエンコーダを見失ったエラーが出ずに作業が終了しました。( VMware Fusion の場合作業終了後、長く放置するとエラーが出でます。その原因はよくわかりません。)
というわけで OS X Mavericks で App Nap という機能が加わったことにより、ディスプレイのスリープで App Nap の状態に移行し、それがコンピュータのスリープ時におかしな動作をすることがわかりました。
放置作業系アプリは App Nap を切る
バックグラウンドでや Mac を放置して処理をさせる場合、 App Nap を切ったほうがいいみたいです。動画系やレンダリング系、ダウンロード系などです。「システム環境設定」の「省エネルギー」にて「コンピュータのスリープ」と「ディスプレイのスリープ」を同じ時間に設定すれば、 UBS 機器がアンマウントされる問題はほぼ回避されますが、エラーが完全に出ないわけではないので、アプリケーションごとに「 App Nap を切にする」を設定するほうが無難みたいです。
Macericks SDK で App Nap の挙動を制御できるみたいだから、アプリケーションの開発者が対応してくれたら、こういう問題も少なくなるのかもしれません。
あと動作には全く支障はないのだけれど、スリープ時に電源ランプが息をしているように点滅しなくなりました。これもスリープの挙動が変わったためでしょうか? しかもするときとしないときがあるのがすごく謎。
たまに「 App Nap を切にする」にしても USB 接続の HDD やハードウェア・エンコーダーを見失い、エラーになることがあります。作業が中断されたり、遅くなったりするのは嫌なので、放置して Mac に作業をさせるときは結局スリープしない設定にしています。
VMware Fusion のバージョンを 5 から 6 にしたところ、「 App Nap を切にする」にチェックをいれれば、 USB の外付け HDD を見失うことはなくなりました。ハードウェアエンコーダーの方は相変わらずなので、やはりアプリケーションの対応しているか、していなかのようです。
ハードウェア・エンコーダーのソフトのアプデートがあり、 App Nap に対応して、 USB のエンコーダーを見失うことがなくなりました。 VMware Fusion 6 は USB の HDD を見失うことはなくなりましたが、処理させたまま Mac を離れるとスリープに移行しているので、スリープしない設定にしています。