Palm TX の NVFS/DBCache との付き合い方
Posted by yoosee on Palm at 2008-03-26 12:40 JST1 Palm TX の NVFS (Non Volatile FileSystem) について
昔の Palm はデータを(揮発性) RAM 内に保存していたため、バッテリー切れでデータが消えてしまっていたが、Palm TX 等では NVFS と言う仕組みでデータを保持するようになっている。NVFS の発想は結構単純で、ストレージとして不揮発性メモリにデータを保存し、実行時に今までの PalmOS の実行環境のように揮発性メモリ(RAM) に読み込む形になる。これだと毎回実行時にデータ読み出しに時間がかかってしまうので、NVFS 搭載機種では DB Cache と呼ばれるキャッシュの仕組みを持っており、アプリケーションを RAM 側にキャッシュしている。
TX では DB Cache がOS使用領域の約7MBを除いて約13MBあるのだが、この容量を使い切ってしまうと任意のタイミングで自動的に RAM 領域の掃除が行われ、このタイミングでパフォーマンスがかなり低下したり動作がフリーズすると言う現象が起きてしまう。
正直言って「バッテリー切れでもデータが消えなくなった」程度の事と引き換えにするには NVFS のモッサリ具合は許容出来る度合いを越える改悪だと思っているが、ともあれこれが搭載されている機種をそれなりに快適に使うためには幾つかコツが必要になってしまった。以下、備忘録代わりに記す。結論だけ書くと、Off Flush は必須なので入れとけ、他は必要に応じてお好みで。より詳しい情報は 1src.com に投稿された Divining NVFS and Palm memory Problem がまとまっている。
2 DBCache をクリアする - DBCacheTool, OffFlush
この DBCache を能動的にクリアすることでパフォーマンスを改善するソフトとして、DBCacheTool や Off Flush といったものがある。DBCacheTool では空き領域が決まったサイズ・割合以下になった場合、自動的にアプリケーション切り替え時に Cache のクリアを行うことが出来る。但し Cache のクリア処理は結構重く、数秒〜10秒間程度、デバイスが入力を受け付けない状態になってしまう。一方の Off Flush では電源を切る動作のタイミングで実行されるため、利用者側のストレスが少ない。設定により、操作が無い状態で一定時間経過した場合の自動OFF時には実行されないようにも出来るのが意図せぬフリーズを防げるのも便利なので私はこちらを使っている。また、両者とも DA から実行してのクリアが可能になっている。3 起動時の Cache 読み込みを抑制する - UnCache, CleanStart
NVFS/DBCache 搭載機種ではソフトリセット後の起動時に Launch Code 5 が発行され、全ての実行可能アプリが一度実行されて破棄される、という処理が行われる。これにより常駐(APIフック系)アプリを起動したりアプリを RAM 内に予め読み込んだりするのだが、アプリを多めに入れていると起動直後には DBCache の空きが殆ど無い状態になるのが厄介だ。この動作を制御するのが UnCache($5.95) と言うソフト。最近出てきたフリーウェア Clean Start も同用途のもの。これらで起動時の読み込みを制限することで、リセット直後の DBCache の空きを減らしたり、リセット処理自体の時間を短縮することが出来る。
但しこの初回起動→破棄行程が行われないと、常駐イベントフック型のアプリ(例えば CJK OS や Resco Backup 、FEPSwitch 、DBLauncher などシステム Tweak 系) は正しく動作しなくなるので、除外(起動時に読み込む)リストに入れておくこと。また Clean Start は動作に必須のファイルも除外対象に出来てしまうので注意が必要。下手するとリセットループを喰らう。
4 必要なアプリはCacheに常駐させる - RescoLocker
こちらは逆に、特定のアプリを DBCache に常駐させる(RAMにLockする)ことで、よく使うソフトの起動を高速にしたり安定して動作するようにする。 起動は目に見えて早くなるが、当然 Lock が増えるほど DBCache の恒常的な消費量は多くなるので、対象は厳選した方がいい。5 Dynamic Heap を拡張する - UDMH
NVFS 搭載機種は概ね DB Cache とは別に 10MB の RAM を持っていて、ソフトウェアの実行用メモリ・Dynamic Heap として利用する。通常の Palmware であれば特に問題にならないサイズだが、大量の Heap を消費するアプリ、例えば TCPMP, PalmPDF, LJP 等では Not Enough Memory エラーになることがある。UDMH($9.95) はちょうど Linux で HDD 上の swap 領域を仮想メモリとして使うように、NVFS の一部をメモリの一部として使う機能を提供する事で Heap を拡大することが出来る。アプリによっては必須だが、普通に使う分にはさほど必要性は感じられないかもしれない。