理想未来ってなんやねん

娘可愛い。お父さん頑張る。

LinuxでSSDのTrimコマンドを有効にする方法

LinuxSSDのTrimコマンドを有効にする方法について気になったのでメモ。
ついでにスケジューラを変更してチューニングする方法も記載しておきます。
説明の対象はCentOS 6.xです。


TrimコマンドのLinux側サポートはKernel 2.6.33からで、CentOSの場合6系からとなります。
(カーネルは2.6.32ですが、バックポートが有るため有効となっているとの事)


又、ファイルシステムとしてext4を利用の場合のみ利用可能となります。


まず、ドライブがSSDとして認識されているかを確認します。

$ cat /sys/block/sda/queue/rotational
0

値の意味は下記の通り。

状態
SSDとして認識 0
HDDとして認識 1


0の場合、SSDとして認識されている。
尚、RAIDカード経由でSSDを接続した場合、SSDを直接扱えないのでTrimは使えない。


SSDとして認識されているとして、LinuxSSDのTrimコマンドを有効にするには、mountのオプションとしてdiscardを指定すると有効になる。

$ sudo mount /dev/sda[0-9] /mnt -t ext4 -o discard


上記設定を起動時に有効にするには、/etc/fstab に記載しておく。

UUID=xxxx   /           ext4    defaults,discard  0   1
UUID=xxxx   /var       ext4    defaults,discard   0   2

I/Oスケジューラの変更

Trimコマンド有効かのついでにI/Oスケジューラも変更しておくと良い。
尚、I/Oスケジューラの変更に関してはRAIDカードを使用してSSDを使用している場合でも有効。

$ cat /sys/block/sda/queue/scheduler
noop anticipatory deadline [cfq]

デフォルトのスケジューラはcfqスケジューラとなっている。
CFQスケジューラは次のような特性を持っている。

CFQ はプロセス毎の I/O キューを持ち、極力公平なスケジューリングをしようとします。これにより従来の Linux カーネルで見られた「バックグラウンドで I/O 処理が行われているとレスポンスが悪くなる」という現象を抑えています。 CFQ はどのような環境でも比較的良好な性能を示すオールラウンドプレイヤー的な性質を持っているようです。


これに対して、SSDのような高速なデバイスを扱う場合は、noopスケジューラを使うと良いとの事。

noop スケジューラはその名の通り、何もしないスケジューラです。入出力インタフェースや周辺機器自身がハードウェアレベルで高度な処理を行う場合 (インテリジェントな RAID コントローラなど) や、非常に性能が良い場合 (半導体ディスクなど) は、カーネルはむしろ何もしないほうがシステム負荷が軽減できるという場合があります。 noop スケジューラはこのような場合に指定します。普通のパソコンでは noop スケジューラを指定すると性能が落ちるでしょう。

$ sudo su -
# echo "noop" > /sys/block/sda/queue/scheduler


起動時に有効にするには、/etc/sysctl.conf に記載しておく。

block.sda.queue.scheduler=noop


以上、ご参考になれば幸いです。