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のブロック境界かは分からないはずです。この問題にどう対処しているのかが気になります。もしかすると、細かいことは気にしない的に決めうちでやっているかもしれず、その場合はパーティションアラインメントを適切に設定した方がパフォーマンスが出ると思います。
なお、こちらの環境ではまだこのソフトを試していないのですが、後日その効果についてベンチマークを行ってみたいと思います。

*1:と書いてあるのですが、どうもよく分からないというか、当たり前の話のような気がします。ガベージコレクションをアイドル時に行わないようにするってことでしょうか?もしかしたら読み間違いかも知れませんが…