ゴミ箱の中のメモ帳

まだ見ぬ息子たちへ綴る手記

UbuntuのSSDをより高速化させる

皆さん、trimしてますか?

現在SSDを使われている方は、HDDからSSDに変更し、その速度の違いからHDDには戻れないという方が多いかと思います。ですが、その快適なSSDにも幾つかの罠があります。

  • 壊れたら直せない
  • 書き換え寿命がある
  • プチフリがある
  • 容量単価が高い
  • HDDに戻れない

致命的な順に私が思うSSDの欠点はこのようなものになります。HDDはシークヘッドが壊れたとしても、制御基板が壊れたとしても、プラッタの一部が壊れたとしても専門の業者はクリーンルームで部品交換を行うことができるようですが、SSDは壊れたら基本的に修理することができません。壊れたら終わりです。HDDなら異音から故障時期を察する能力も得を積めば会得可能ですが、SSDは無音のためこの得を積むことができません。
SSDは可動部品が無いためHDDに比べると故障確率は少ないのですが、HDDに比べると書き換え寿命があり、また、すべての部品が超精密部品と、自己崩壊する可能性も否めません。ですが、SSDはまだ発展途上と言わざるを得ない技術になるため、今後のさらなる高速化や、書き換え寿命の回避、ファイルシステムやOSの対応など、まだまだこれから期待が持てる技術になります。
SSDはプチフリがある」と言われますが、これもSSDが発展途上である技術たる所以で、次世代のSSDではこの問題も徐々に解決されつつあるものの、現在は書き換え寿命と合わさってこれが問題視されることが多いかと思います。

このプチフリはSSDの書き換え寿命が関連しており、SSDは「使えば使うほど遅くなる」、「残容量が少なくなれば遅くなる」というのもこの書き換え寿命と同じ問題になっています。


細かな説明はSSD技術の専門サイトに任せるとして、このプチフリの原因を簡単に説明すると以下の様なものになります。

  1. SSDは壊れたら直せないし、工夫しないと壊れやすい
  2. SSDには書き換え寿命があるため、書き換えを減らさなければならない
  3. SSDは「書き換え」という処理ができないので、ファイルの書き込み時にはそのエリアがクリアされている必要がある
  4. ファイル書き込み時にはファイルが存在しないエリアを探し(削除ファイルエリアは別)、そこをクリアしてファイルを書き込む
  5. ファイルが存在しないエリアを見つけることができなければ、削除されているファイルエリアのクリアや書き込みを同時に行う必要が有るため、書き込み時に集中的に処理が増えてしまい処理が遅くなる

以上から、使えば使うほどファイルが存在しないエリアが少なくなるためサーチ時間が長くなり、また、残容量が少なくなれば必然的にクリア作業が必要になる頻度が多くなってしまう。このため、これらの処理が一時的に過密になることでプチフリという症状になってしまう。
「ファイルが削除される度にそのエリアをクリアすればいい。そうすれば書き込み時の処理を減らせる。」と思われるかもしれませんが、ファイルを削除した際にOSから与えられる情報は「◯◯と言うファイルを削除した」という情報のみになり、インデックスエリアの情報が書き換えられるのみで、実際にファイルを保存していたエリアをクリアするという処理は含まれておりません。

ですので、この「削除したファイルのエリアをクリアしておく」という処理を別に行っておくことができれば、SSDのプチフリを回避でき、また、SSDをより高速なディスクとして利用することが可能になります。


そしてその「先にクリアしておく」ことをするためのインターフェイスが「TRIM」というもので、Androidが好きな方は「Android 4.3で導入されたアレか」と聞いたことがあるかもしれません。TRIMにはSSDとOS、ファイルシステムの対応が必要になります。

TRIMは最近のSSDで導入された機能になるため、どこのメーカかわからないようなSSDや古いSSDでは、TRIMに対応しているものが少ないかと思いますが、Intel等の有名メーカの比較的新し目のSSDではほぼ導入されております。また、上に書いた通りTRIMはOSがSSDに「クリアしてもいいエリア(セクタ)を伝える」為のインターフェイスになるため、OS側の対応も必要になります。Windowsユーザの方や、簡単にはIntelTRIM の利点および SSD での使用方法を読めばわかるかと思います。


さて説明が長くなりましたがここからが本題で、UbuntuLinuxでTRIMを使うための方法になります。

まず、OSの対応は、Linux3.0以降であれば問題ないようです。要するに、Ubuntu12.04以降であれば問題ありません。カーネルに含まれています。

次に、SSDがTRIMに対応しているかの確認になります。実際にtrimコマンドを実行すれば対応状況がわかるのですが、先にSSDの情報から対応を確認してみます。

% sudo hdparm -I /dev/sda | grep TRIM
	   *	Data Set Management TRIM supported (limit 1 block)
	   *	Deterministic read data after TRIM

このように、対象のSSDがサポートしていれば問題ありません。何も表示されなければ残念ながらTRIMに対応していないようなので、INTEL SSD 335や330等、最近の「ちゃんとした」SSDを購入してください。ちなみに、今回利用しているSSDINTEL SSD 335 80GBになります。

また、OSとSSDが対応していても、TRIMを実行するパーテーションのファイルシステムが「ext4」でなければなりません。他にもいくつか利用できるファイルシステムがあるようですが、各々環境に応じて対応を調べてみて下さい。多くの方はext4を利用しているかと思います。


ここまででOSとSSDファイルシステムが対応している方は以下のコマンドだけでtrimを実行できます。

% sudo fstrim -v /
/: 61965189120 bytes were trimmed

これでOSからSSDにTRIM命令を送り、不要なファイルエリアをSSDがクリアします。今までにtrimコマンドを実行したことがない環境では初回実行には結構な時間がかかるかと思います。上の例ではかなりの容量が対象となっておりますが、2回目以降は以下のように少なくなります。
パーテーションをいくつかに分けてマウントされている環境では、分割しているパーテーション毎にtrimコマンドを実行する必要があります。

% sudo fstrim -v /
/: 757051392 bytes were trimmed

trimは負荷が高いため自動的には行われません。ですので、定期的にtrimコマンドを実行したい方はcronに登録するなど、自身の環境に合わせて実行して下さい。
trimを実行するまでは高速化に懐疑的かもしれませんが、私の環境は定期的にSSDの使用量が100%になり、そこから20%程度までファイルを削除するという事がありますので、このtrimコマンドを使った後のSSD速度には劇的な改善がありまました。

インテル Boxed SSD 335 Series 240GB MLC 2.5inch 9.5mm Jay Crest Reseller BOX SSDSC2CT240A4K5

インテル Boxed SSD 335 Series 240GB MLC 2.5inch 9.5mm Jay Crest Reseller BOX SSDSC2CT240A4K5


Intel SSD 520 Series(Cherryville) 120GB 2.5inch Bulk SSDSC2CW120A310

Intel SSD 520 Series(Cherryville) 120GB 2.5inch Bulk SSDSC2CW120A310


Intel SSD 330 Series Maple Crest 120GB MLC 2.5inch 9.5mm Reseller Box SSDSC2CT120A3K5

Intel SSD 330 Series Maple Crest 120GB MLC 2.5inch 9.5mm Reseller Box SSDSC2CT120A3K5