"Process Hacker"を使ってSSDの寿命を縮めているアプリケーションをチェック

  • (注)"Process Hacker"の"I/O"にはディスクへのI/Oだけではなく、プロセス間通信なども含まれているようです。そのため、下記の方法では正確なディスクへのI/Oを調べることはできませんでした。例えば下記の例では、HDDLedはディスクへのアクセスを行っていません。詳細はコメント欄に記してあります。

Process Hackerというソフトを使うと、現在起動中のアプリケーションやサービスのI/Oの状態を調べることができます。というわけで、このソフトを用いてSSDに頻繁に書き込みを行っているソフトを調べてみました。なお、ソフトの具体的な使い方については、GIGAZINEの記事が非常に参考になります。また、日本語版 by rikuさんにおいて、日本語化パッチが配布されています。

下のJSMonitorのスクリーンショットは、システムドライブとして使用中のK5-64のものです。

明らかに350GB/dayという使用量は多すぎです。このPCはNAS兼TV録画用に用いているので日中も電源を落としていないのですが、何も操作していないはずの時間帯でさえ順調にAverage Erase Countが上昇しています。これは、絶えず書き込みを続けているプロセスが存在するに違いありません。
というわけで、Process Hackerを起動してディスクI/Oの項目を表示させたスクリーンショットが以下です。なお、I/O Historyはデフォルトでは表示されていません。表示させるには、表示項目のあたり(Name,PIDなどと書かれている部分)で右クリック→"Choose Columns..."を選択し、"I/O History"にチェックを入れます。

I/O Historyのグラフの黄色は読み込み、紫が書き込みを表しています。グラフから分かるとおり、hddledd.exeが絶えず書き込みを行っており、vmware-hostd.exeが間欠的に書き込みを行っています。lsass.exeも断続的に書き込みを行っていますが、これはWindowsに必要なアプリケーションなので、今回は除外としました。
HddLedは、あたかもケースのLEDのようにディスクへの読み書きの状態を表示する他、Windowsが起動してからの各ディスク・ドライブへの読み書きの総量を表示することもできる便利なソフトです。できれば使い続けたいのですが、とりあえず今回は一旦使用を中止しました。
VMwareは、仮想マシン環境を構築するためのソフトで、JSOptimizerを作成するときに実験台OSを起動するのに使っていました。しかし、それほど頻繁に使用するものではないので、普段はサービスを切っておいても問題ありません。というわけで、白湯の雑記さんの記事を参考に、vmware-hostdを含むVMwareの5つのサービスのスタートアップの種類を「手動」とし、これらを起動・終了するバッチファイルを作成しました。これで、必要なときだけVMwareのサービスを走らせることができます。
それらの対策を行って2日間がたった後のスクリーンショットが以下です。対策の効果を見るために、JSMonitorの推定に用いたデータは過去2日分のみとしました。

書き込み量は350GB/dayから198.3GB/dayに減少しました。このスクリーンショットを取る前に少し作業をしていたので若干書き込み量は多めになってしまいましたが、何も作業をしていない日中のAverage Erase Countの上昇がかなり少なくなっているのが分かります。

どんなアプリケーションがSSDの寿命を縮めているのか?

hddledd.exeはともかく、vmware-hostd.exeはそれほど大量に書き込みを行っていません。そのため、vmware-hostdを停止させてもそれほど効果はないだろうと思う方もいらっしゃるでしょうが、間欠的にディスクへの書き込みを行うプロセスはSSDの寿命をかなり縮めてしまうのです。
SSDの内部では、OSからの書き込みよりずっと多い量の書き込みが行われています。ここでは詳しい解説は述べませんが、これはNANDフラッシュの特性によるものです。「SSD内部での書き込み量」を「OSからの書き込み量」で割った値を"Write Amplification"と呼びます。大きなサイズのシーケンシャルライトを行うときは、Write AmplificationはどのSSDでもほぼ1になります。一方、小さなサイズの書き込みを行ったときのWrite Amplificationは、SSDのコントローラごとに全く異なります。通常、OSやアプリケーションからの書き込みの大部分は小さなサイズであるため、小さな書き込みに対するWrite Amplificationはコントローラの性能を表す上で非常に重要な指標です。
Intelは、典型的な使用例の場合、自社のSSDのWrite Amplificationはわずか1.1程度であると主張しています。一方、前述のK5-64の場合では、2日間でOSからは約2.2GB程度の書き込みしかない*1にも関わらず、SSD内部では400GB近くの書き込みが行われています。よって、Write Amplificationは200近い値となります。さらに、これは当ブログでの独自調査の結果(こちらを参照)なのですが、JMF602で4KBの書き込みを行った場合、Write Amplificationは最大で4000になります。
というわけで、小さなサイズの書き込みであっても、それが頻繁に発生しているとSSDの寿命を大きく減らしてしまうことがあります。個人的には、BarefootのWrite Amplificationは小さいだろうと予測していたのですが、どうやら思ったよりかなり大きな値のようです。Intelは、X-25MシリーズはWrite Amplificationが低く、ウェアレベリングの性能も高いため、他社のSLCタイプのSSDよりも結果的に寿命は長いと主張しています。IntelのSMARTの仕様は一般に公開されておらず、その主張をユーザ側が検証することは現時点ではできませんが、上記のようにWrite Amplificationが200にも達するような現状を見てしまうと、その主張も無理なものではないと思えてきます。
ちなみに、HDDLedと同様に、OSが起動してからの各ドライブへの書き込み量を取得する方法が分かりました。それを用いて、JSMonitorの次のバージョンでは、Write Amplification実測機能を実装してみようかと思っています。

*1:HDDLedから取得