2009-04-18
■[SSD]SSDのランダムライトパフォーマンスを向上させるソフト"FlashPoint"

最近、SSDのランダムライト性能を向上させる"FlashPoint"というソフトが話題になっています。今回のエントリは、このソフトウェアの使用方法と、その原理についてです。
FlashPointとは
FlashPointはドライバの形で提供されているソフトで、インストールすることでSSDのランダムライト性能を向上させることができます。以前紹介したMFTと異なり、システムドライブに対して使用可能な上、現在のところフリーで公開されているため、注目を集めています。
このソフトの高速化の原理ですが、公式サイトの説明では、「システムメモリのうちの少量(beta-3 versionでは32MB)をアロケートし、それを最初の固定ドライブのための一種の書き込みバッファとして使う」と記述されていますが、それだけではあまりよく分かりません。
というわけで、公式サイトのWebページの階層をさかのぼり、作者本人のサイトを覗いてみました。
作者のHyojun Kimさんは、Samsungの元社員で、現在はジョージア工科大学の博士課程に在籍しているとのことです。Publicationsのページには”BPLRU: A Buffer Management Scheme for Improving Random Writes in Flash Storage”というタイトルの国際学会の予稿が公開されていたので、それを読んでみました。
予稿の内容は、SSDに内蔵されているDRAMバッファを用いてランダムライト性能を向上させる"BPLRU(Block Padding Least Recently Used)"というスキームの提案です。しかし、Conclusionsの項には、提案したコンセプトはホスト側のキャッシュにも拡張できると記されているので、おそらくFlashpointはBPLRU、あるいはその改良版が利用されていると思われます。
BPLRUは、Block-level LRU, Page Padding, LRU Compensationという3つの要素から構成されています。
まず、Block-level LRUは、書き込みキャッシュ内のデータを所属するブロックごとにクラスタリングし、フラッシュ時には同一のブロック内にあるデータをまとめて書き込むという仕組みです。以前の記事に記した通り、NANDフラッシュ製品は、最も単純な手法では1ページの書き込みごとに1ブロックの書き込みが発生してしまいます。そのため、1ブロック内の書き込みはまとめて行った方が、無駄なガベージコレクション・ブロックコピーの発生を抑制できるわけです。
Page Paddingとは、1ブロックの書き込みを行う際に、更新部分のみを虫食い状態で書き込むのではなく、未更新部分をあらかじめ読み込み、1ブロック全体を書き込むという仕組みです。*1
LRU Compensationとは、ブロックサイズ以上のシーケンシャル書き込みを優先してフラッシュする仕組みです。これは、シーケンシャル書き込みをキャッシュに溜め込んでしまうとキャッシュの容量を圧迫する上、シーケンシャル書き込みをした部分にすぐ上書きをすることは滅多にないため、さっさとフラッシュしてしまっても問題ないということのようです。
さて、これをJMF602搭載SSDに使うと、プチフリには間違いなく効果があるはずです。以前の記事に記したとおり、JMF602はシステムデータをBlock-level LRUと同様に使用していますが、SHD-NSUM30では最悪の場合4KBx76回=304KBの書き込みでシステムデータを使い果たしてしまいます。他方、キャッシュをDRAMで持っておけば、額面通りの容量(Flashpointの場合32MB)が一杯になるまで書き込みを溜めておくことができます。4KBの書き込みなら8000回分を溜め込るので、未使用時と比べると最大100倍のキャパシティのキャッシュになるというわけです。
FlashPointの使用方法
インストールとアンインストール
インストールとアンインストールの方法は、公式サイトに記されています。現在はベータ版であるためか、アンインストールはregeditを用いて手動で行う必要があります。
使用上の注意
現在のところ、Flashpointは全く設定ができません。キャッシュ容量は32MBで固定、Flashpointが適用されるディスクは最初の固定ディスクのみとなっています。また、対象OSはWindows XPのみです。
なお、「最初の固定ディスク」とはC:ドライブのことを示しているのではなく、BIOSで0番の番号が振られているディスクのことです。通常のノートの場合、固定ディスクは1つしかないので問題ありませんが、デスクトップで使用する場合は最初のSATAポートに対象とするSSDを接続する必要があります。
また、このソフトはDRAM上にキャッシュを作成するものであるため、突然電源が落ちたりフリーズした場合にデータが消えてしまう可能性があります。そのため、重要なシステムや不安定なシステムには使用しない方がよいでしょう。
よく分からないこと
現在のところ、SSDからブロックサイズを取得する規格はありません。また、パーティションアラインメントの問題で、SSDのページ・ブロックの境界とファイルシステムのクラスタの境界がずれていることもあります。なお、パーティションアラインメントに関しては、こだわりのMONOさんの記事が大変参考になります。
そのため、このソフトではどこがSSDのブロック境界かは分からないはずです。この問題にどう対処しているのかが気になります。もしかすると、細かいことは気にしない的に決めうちでやっているかもしれず、その場合はパーティションアラインメントを適切に設定した方がパフォーマンスが出ると思います。

http://zigsow.jp/review/4/
しかし20人というのはなかなか大盤振る舞いですね。チャレンジしてみようかなあ?
パラメータ変更したらよくなるかな?
Beta3patch1だとFPD16GRSEの4Kランダムおよびシーケンシャルライトとも最大遅延時間が80ms→〜180msと延長します。オーバーヘッドで+100msということだといいですが、MLCではどうなんでしょうね。
何か面白いことが判明したら、また教えてください。
私のほうでも、FlashPointと同系統のソフトを作りました。。。
PetiteFreezeBuster Ver0.6、略してPFBです。
現在、Ver0.6でようやくランダムアクセスの性能改善ができたかなというところです。FlashPointに気が付かなかったから作ったという所もあります(汗)。
現在、一ヶ月の期間限定ですが、β版として無料配布しています。
http://eeepc.dnki.co.jp/
***
現行0.6は内部バッファはライト命令4096個まで対応ですから16Mバイトのキャッシュをします。
デフラグをかけた状態ではあまり変化はないんですが、断片化が発生した状態では2倍くらい速くなるようです。速くなるというより、断片化による速度劣化を抑止するというほうが正しいかな。。。
シーケンシャル書き込みの場合は劇的に速くなりますね。
ちなみに来週Ver0.7を公開予定です。私としてはようやく0.7になって満足の行く結果がでたと思っています。
どこにおくのでしょうか?(SYSファイル)
このフォルダからはインストール出来ないようです;;
よろしくお願い致します。
>KyonKyonさん
ちょっと今バタバタしてるので、落ち着いてから試してみたいと思います。
>こんばんはさん
sysではなく、infを右クリック→インストールを選んでください。
install.infの中の[DefaultInstall.NT][DefaultInstall.NT.Services]の中で「.NT」の文字を取り除いてからインストールすれば出来るようになります
。
まだ、出来たばかりなので不具合などは、でてませんが、たぶん問題ないかと思います。 Vistaの人は試してみてください。
一応、自分のblogでも説明してます。
http://www.miew-world.net/Diary/2009/05/p_256
こちらはXPですが、β4でパラメータいじって遊んでたらシステムを壊されかけました…
セーフモードでも挙動がおかしくなるってのはかなり凶悪です…