Vistaのディスクキャッシュは・・・
デスクトップレコーダーで変則ストライピングを使用して性能を測ってみたところ、1280x1024画面で30FPSは普通に出た。しかし、巨大なバッファリングファイルを使用する影響からか録画後に膨大な数のsvchostが発生してHDDを唸らせた。多分、ディスクキャッシュの問題だ。
2台のHDDを使えば、1280x1024画面の30FPSでの取り込みは難なく行なえた。バッファリングデータは、今の所、書き込みデータが用意できた時点で増設HDDがフリー状態だった場合には、そちらに書き込み、書き込み処理が終わっていなかった場合には、システムディスク側に書き込むようにしている。
書き込みデータはフレーム単位ではなく、一定量をメモリ上に蓄えた後、纏めてディスクに書き込むようにしている。とりあえず、今日のテストでは書き込み単位は8MBにしてみた。
増設ディスクのみでのバッファリング時には25FPSが限界だったのだが、逆に言うと、増設ディスクのみでも25FPSをバッファリングできる性能があることになる。なので、30FPSでバッファリングするためには、5FPS=3840KB*5/Sec≒20MB/Sec程度の性能をシステムディスク側が補えば良いことになる。
システムディスクの性能は70MB/Sec程度あるので、20MB/Secをバッファリング用に提供したとしても、まだまだ余力は残っているため、30FPSでのバッファリング時にも、システムディスクのみでバッファリングした時のようなプチフリーズは発生しなかった。
まあ、そうなるように作ったので、そのこと自体は予想通りだったのだが、バッファリングを終え、エンコードも完了した後で、何故かディスクが唸っていたのでリソースモニタで確認してみると、膨大な数のsvchostがファイルアクセスを行なっていた。
リソースモニタで見る限り、svchostは様々なファイルを読み込んではいるのだが、一切、書き込みは行なっていなかった。
なので、最初は巨大なバッフリングファイルを作成したことで、HDD上でのファイルのアロケーション状態に変化が生じ、ファイル位置の調整を行なってアクセス速度の最適化を図っているのか、とも思ったのだが、この可能性は否定された。
で、それ以外には、ディスクキャッシュにデータを読み込んでいる、という可能性くらいしか考えられなかったので、デスクトップレコーダーのファイル読み込みをNoBuffering指定で行なうように変更してみたところ、膨大な数発生していたsvchostは発生しなくなった。
ディスクキャッシュのアルゴリズムとしてはあまりにも幼稚な方式なので、作者の勘違いかもしれないのだが、Vistaは何も考えずに通常の読み込みファイルはディスクキャッシュに入れてしまって、ディスクキャッシュに常駐させておきたいデータを吐き出してしまうのかもしれない。で、デスクトップレコーダーがバッファリングファイルをクローズすると、おもむろに、また、ディスクキャッシュに入れておきたいデータをプリフェッチするのかもしれない。
真相はどうであれ、とりあえず、NoBuffering指定で読み込みを行なうように変更するとsvchostの問題もなくなったので、変則ストライピングは普通に使えそうだ。
で、変則ストライピングは元々は完全な無圧縮データの書き込み用に導入したものなのだが、通常の圧縮付バッファリング時にも使える筈だ。差分圧縮があまり効かず、ディスクネックでFPS値が低下していたような場合には特に効果的に働くだろう。
と、いうことで、明日は他のバッファリング方式との兼ね合いも含めて、実装や設定の整理と調整を行なう。
| 固定リンク
|
「開発日誌」カテゴリの記事
- フリーセルを軽くした(2010.12.18)
- 操作性の改善とか(2010.12.17)
- HTML5 フリーセル(2010.12.16)
- 遊べるようにはなったが(2010.12.15)
- 大富豪はフリーセルに変更(2010.12.14)