ソフトを開発しようと思った動機、背景
それは“プチフリ”という言葉を聞き、はじまった。最初は、瞬間的にパソコンが止まる現象だと思いました。どんどん重くなるOS、ディスクにたまる混沌の山……。船底に貝殻がへばりついた船足が遅くなるように、パソコンが遅くなる。それの激しいものだと思ったわけです。たぶん、最初の命名者もそのつもりだったのだと思います。ところが……ネットで検索しているうちに驚くべき事例に遭遇しました。5分で終わるファイルコピーが50分かかるとか、1分パソコンが停止しているとか……常識では信じられないような報告が見られます。プチフリではなく、まさに時々臨死体験という印象。有志の方が調査した結果、「SSDに対してリードとライトが同時に発生するとプチフリが起きる」ということがわかってきましたた。リードだけ、ライトだけでは起き難い……。どうも、SSDはこの二つのトラフィックが大量に同時発生すると、致命的な交通渋滞を起こすらしいということがわかってきました。
では、この交通渋滞が起きないようにリードとライトを交通整理してあげれば、SSDは本来の性能を発揮できるのではないかと考え、開発をはじめました。
開発中に苦労した点
(1) まずプチフリを観測できない!
手もとにプチフリの発生するマシンがないことがネックでした。弊社の所有するSSDでは、目に見えてわかるプチフリが発生しませんでした。1分止まるとか、50分止まるという症状を再現できないことでした。
「プチフリバスター」を開発するにあたり、まずフリーソフト「PFM(プチフリメーター)」という測定ソフトを自作し、SSDの速度測定をはじめることにしました。体感的にわからなくても、1/1,000秒の世界では起きていると睨んだわけです。この読みは当たりました。通常は2/1,000秒程度で終わる処理が、定期的に600/1,000秒つまり0.6秒くらいになります。これがきれいな等間隔で発生していることがわかりました。もし、これが10回連続で起きれば6秒、100回連続して起きれば600秒停止することになります。これでようやくプチフリという現象を目で見られるようになりました。
(2) 開発・紆余曲折
プチフリを観測できるようにはなりましたが、なぜ起きるのかはいまだ不明です。はじめは「ディスクにアクセスがラッシュすると内蔵コントローラがパニックを起こし、固まるのではないか」と安易に考えていました。コントローラに無理な負担をかけず、ゆっくりとアクセスを開放すれば緩和するのではないかと考えたわけです。
さまざまな試行錯誤をし、SSDというのはその特性はシーケンシャル装置──いわゆるカセットテープに近いもの──だということがわかってきました。厳密には、MLC型SSDで1ブロック512Kバイト単位で書き込みを行うランダムアクセス装置です。なぜ、シーケンシャル装置と述べたかというと、Windowsのディスクのアクセス単位が通常4Kバイトだからです。つまり最悪、4Kのデータを書くために、4K+同じデータの上書き508Kバイトの書き込みが発生します。この場合、次の処理が必要になります。
- 512KバイトのブロックをSSDのコントローラはまず読む
- ここに更新のあった4Kを反映する
- 512Kバイトを書き込む
4Kのデータを書くために、512Kバイトのブロックを読み取り、再度書き込むわけです。このブロックのアクセスはランダムアクセスというより、シーケンシャル装置の特性に近いわけです。SSDというのは、512Kバイトのカセットテープが中にたくさん入っていると思ってください。ブロックは全書き込みが原則ですから、頭から終わりまで書き込み、カセットテープと似た特性になるわけです。プチフリ対策でRAIDを組んだ方は、これで「はは〜ん」と納得するかもしれません。「RAID 0(ゼロ)を組むと、プチフリが起きにくい」という都市伝説が生まれた根拠がここにあるわけです。多くのRAIDカードはキャッシュを積み、ストライプサイズ(ディスクへのアクセス単位と思ってください)を8Kバイトから1Mバイトくらいまで選択できるようになっています。
RAIDカードは通常、初期値で32〜64Kバイトがストライプサイズになっているようです。多くのWindowsのCドライブがNTFSの4Kバイトとした場合、RAIDカードが内部で32Kバイトとしましょう。確実に8倍はプチフリが起き難くなります。クラスタサイズを512Kバイトにした場合、上述のA.〜C.の処理をRAIDカードが肩代わりしてくれるわけです。RAIDカード自身も余裕のあるキャッシュメモリを積み、内蔵のコントローラがこの処理を肩代わりするので、SSDの負担は減ります。「OSの4K⇔SSDの512K」の不整合をRAIDカードが行ってくれるということで説明できます。
(3) 透過型ソートの実装
(MLC型)SSDの1ブロック512Kバイトの問題は、ディスクキャッシュ搭載では本質的には解決しないという最終判断を下しました。OSから降りてくる書き込み命令を単純にキャッシュメモリに積むと、一時的にプチフリは消えて見えますが、SSD内部では実際に発生しています。これでは抜本的な解決にはならないことがわかってきました。すでに説明したA.〜C.は速度的に最悪の状態ですが、フラッシュメモリの寿命にも最も悪い状態です。
透過型ソートは、ディスクへの書き込みを「プチフリバスター」の中で並べ替え、スケジュールし直してSSDに書き込むようにする機能です。「1ブロック512Kバイトの書き込みデータ中の実際の更新部分をできるだけ多くすること」──これがプチフリを減らし、SSDの寿命を延ばすことになります。
(4) Vista/7への対応
Windows XP版は比較的初期に完成していました。要望もあり、Windows Vista/7版を用意しました。開発し、情報を集めてわかったのですが、XP(Windows NT 4系)とは別もの、Windows NT 3.5系ということでした。道理で堅牢で、Microsoft社の仕様通りに動くXPアーキテクチャに比べ、Microsoftの公開するサンプルの多くが動かないという状況も納得……。いまだ……なぜ……10回以上のサービスパックを出し、安定したNT 4系カーネルを止めて、3.5系をリニューアルしたのか謎です。
さて、動作検証用に購入したVistaプリインストールマシンは、購入直後の工場出荷状態で放置すると、自然に強制終了がかかる状態でした。サービスパックを当て、ようやく安定して動くようになりました。また、マザーボードメーカーのWebを見ると、多数のVista用アップデータが出ていました。これらを入れ、安定して動くようになった経緯があります。
Windows 7も、Vistaとは微妙に内部の仕様が変化しています。当初、Vista/7共用の予定でしたが、仕様が違うのであれば致し方ありません。Vista用とWindows 7用を別に作りました。Vista/7の導入を検討するユーザは、所有するパソコンのメーカーのWebを確認し、Vista/7への対応をよく確認してください。
ユーザにお勧めする使い方
■ハードディスクを使用される方へ
当初、予想していなかったのですが、SSDよりハードディスクにおいて高い効果を発揮します。ハードディスクの速度が劇的に向上します。ぜひ試してみてください。また、透過的ソートにより、ディスクヘッドの移動が減ります。従い、ディスクの寿命延命効果があります。ビデオのハードディスク録画などのようにアクセスランプが付きっぱなしだったのが、プチフリバスターを入れることによりランプが明滅するようになります。SSD用に考えた透過型ソートですが、ハードディスクにおいてより高い効果を発揮しました。本ソフトは、フラグメント(ファイルの分断化)による速度劣化を未然に防ぐものですが、限度があります。動きが悪くなったなと感じたら、デフラグをかけてください。
■SSDを使用される方へ
SSDの高速化、寿命延長にぜひ利用してください。また「SSDだからデフラグは不要」は間違いです。上述したA.〜C.は、SSDだからこそ定期的にデフラグが必要です。この問題はフラグメントの増大と比例関係にあります。本ソフトが入っていない状態での測定で、フラグメントが多くなると最初2/1,000秒程度のディスクライトが、1/10秒まで遅くなります。本ソフトはフラグメント(ファイルの分断化)による速度劣化を未然に防ぐものですが、限度があります。動きが悪くなったなと感じたらデフラグをかけてください。「プチフリバスター」の働きでおそらく数ヵ月に一度でよいはずです。
今後のバージョンアップ予定
今後は二つの方向で開発を進めてゆきます。ひとつはNetBook&ノート用に、より快適に安心して持ち運びできる方向性です。もうひとつはデスクトップパソコンでの高速化要望に応える方向です。OSの管理外領域のメモリの活用および既存のRAMディスクとの併用機能を実装の研究を開始しています。
また、今回の「Duo drive」でも実装していますが、「PFBユーティリティ」という支援ツールを導入しました。これは単体でもフリーソフトとして配布しています。Windowsは機能が増え、高速化に関する多くあり、管理できなくなっています。「PFBユーティリティ」は、これらを集約してワンタッチで高速化設定できるように、今後機能を追加してゆく予定です。
((有)電机本舗)