LinuxとSSD

投稿者: | 2011年12月29日

SSDはその性質上、trim命令を使用せず未使用領域が数パーセントになると性能が極端に悪くなる。特に書き込みに関しては格段に性能が下がる。どれだけ性能がおちるかのテストをしたサイトがあるので紹介する(脚注1)。

SSD側で管理する未使用領域を増やすことにより効率よく書き込みが出きるようになる。しかし、それにはOS側から使っていない領域をtrim命令を使い開放しなくてはならない。

Linux Kernel 2.6.28以降にはブロックデバイスのドライバには使わなくなったブロックに対しtrim命令を発行し、その領域をいつでも使えるようにする機能がついた。ユーザ側で使うにはシステムコールioctlでBLKDISCARDを指定する。mke2fsは、パーティションをフォーマットするコマンドだが、最近のものには-Kオプションというのがついている。これは”Keep, do not attempt to discard blocks at mkfs time“だそうだ。つまりデフォルトでblockをdiscard(破棄)しているという意味らしい。調べてみると2009年には BLKDISCARD を使うパッチがメーリングリストに投稿されていた。

カーネル側ではblock/blk-lib.cにあるblkdev_issue_discard()を呼び出すと出来るようである。これを呼び出しているのは、btrfsgfs2nilfs2xfsとswapfileである。blockをdiscardするのはセキュリティの意味でも有用である。もしかすると、本来は、そちらのために作った機能なのかもしれない。最近の新しいファイルシステムは、本当に動作しているかどうかは別として、構造的にはSSD対応になっているようだ。あとswapfileがきちんと対応していることに着目したい。スワップ先として複数のSSDをつなぎ高速かつ巨大な仮想記憶空間を確保するということが現実的な解決方法として用意できそうである。

脚注1: SSDの性能低下とTrimの効き具合を大検証!(DOS/V Power Report)  http://www.dosv.jp/other/1005/18.htm