気ままにインフラエンジニア

渋谷で働くインフラエンジニアの備忘録。 TwitterID: @nakashii_

LinuxサーバーにSSDを使うための情報メモ

Trim周りが最近どうなっているのか調べていましたが、それ以外の情報もまとまっているもののが案外少なかったので。

Trimをサーバーで使える?

# Trimコマンドのサポートの確認(SSD側)
hdparm -I /dev/sda | grep -i TRIM
*    Data Set Management TRIM supported

Trimコマンドの発行にはSSDをSATAのAHCIモードで接続することが必要。
RAIDカード経由でSSDを接続した場合、SSDを直接扱えないのでTrimは使えない。
2012/05現在、Trimに対応したRAIDカードはないようだ。
(ただし、ext4のdiscardコマンドは内部的にはSCSIデバイスに対してUNMAPコマンドが発行されるので、今後RAIDカード側がATAコマンドのTrimに再度変換してくれれば…?無理かな)

一般的な1UサーバーではほとんどがフロントベイからバックプレーンのminiSAS経由で内蔵のRAIDカードへ接続する形態が取られているため、M/BのSATAポートへSingle Connectできない。つまり、この状態ではどうあがいてもTrimを利用することは不可能。
RAIDカードを省略し、オンボードのチップでRAIDを実現しているタイプの安価なサーバー(1U/ハーフU等)では、ドライブとM/BのSATAポートが直接接続されている場合がある。この場合は内蔵のRAID機能をOFFにすることでAHCIが利用できる場合もあるし、BIOSに設定がなくジャンパピンを変更しなければいけないものもある。

TrimコマンドのLinux側サポートはKernel 2.6.33から。
CentOSの場合6系から。(2.6.32だがバックポート有り)
かつ、ファイルシステムにext4を利用の場合のみ。
マウントオプションにdiscardを指定。

Trimコマンドの動作確認

こちらが詳しい。
http://d.hatena.ne.jp/sh2/20110123

戻り値が0の場合、Trimが有効になっている。それ以外の場合(return=-95が1回だけ等)は、Trimができないと返されている。
上述の理由で、SSDがTrim対応でも殆どの場合サーバーでは使えない。確認必須。

その他LinuxのSSDに関すること

設定の確認など

# SSDかどうか
cat /sys/block/sda/queue/rotational
0 -> SSD
1 -> HDD

hdparm -I /dev/sda | grep -i ssd
# 大抵は型番だけ
# 使えない場合はyum install hdparm
SecureErase (SSDリフレッシュ)

hdparmを使う

# SecurityCommand発行可能な状態をセット
hdparm --user-master u --security-set-pass xxxxxxxx /dev/sdx
# SecureEraseを実行
hdparm --user-master u --security-erase xxxxxxxx /dev/sdx

PartedMagic
http://sourceforge.jp/projects/sfnet_partedmagic/
KnoppixとかUbuntuのLiveCDよりはおすすめ

I/Oスケジューラーの設定

I/Oをキューするかどうか

cat /sys/block/sdb/queue/scheduler
# default
noop anticipatory deadline [cfq]
# 設定の変更
echo deadline > /sys/block/sda/queue/scheduler
cat /sys/block/sdb/queue/scheduler
noop anticipatory [deadline] cfq

SSDではnoopやdeadlineが推奨されていることが多い。
http://www.velobit.com/storage-performance-blog/bid/126135/Effects-Of-Linux-IO-Scheduler-On-SSD-Performance
ここの結果を見ると、cfqが劇的に遅いわけではないのであえてnoopに変えなくてもよさそうではある。
noopに変えたら5倍早いとかはないです。シングルスレッドで書き込んでいるとかいないとか、テスト項目の問題。

AHCIの有効化

だいたいBIOSで変更するだけ。

運用に関すること

冗長化/RAID

内蔵のRAIDカードがエントリクラスであればRAID1等で逆に足を引っ張るので、ミドルクラス以上のRAIDカード(WriteCache付きのもの)が推奨。
RAIDカード経由でかつRAID構築済みだと性能劣化をリフレッシュする手段がないので、大手メーカー製でSSDがオプションで選択可能なサーバー群では性能劣化の少なく、信頼性も高い(とされる)Intel製を使っているよう。

あんまり推奨してない。要は、RAID構築時にすべてのブロックに書き込みが発生するので性能劣化するんじゃないか?ということらしい。Redhatのドキュメントを参照のこと
http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Storage_Administration_Guide/newmds-ssdtuning.html

割りきってRAIDなどの冗長化をせずに使うのも十分あり。

故障

故障率のデータ。HDDに比べると半分程度で、さらにその内Intelは一桁違うレベルで信頼性が高いようだ。
http://raven.air-nifty.com/night/2011/08/ssdhdd-3085.html
http://www.tomshardware.com/reviews/ssd-reliability-failure-rate,2923-3.html

監視

smartmontoolsでsmart値の拡張を監視する。
予約領域の残りと、平均消去回数のインジケーター。

# smartctl -a /dev/sda 
232 Available_Reservd_Space 0x0003   100   100   010    Pre-fail  Always       -       0
233 Media_Wearout_Indicator 0x0002   099   099   000    Old_age   Always       -       0

RAIDカードでArrayを構築済みだと当然だが値は取得できない。




RAID有無でのパフォーマンスの差異などの検証結果は別項で書く予定。
もっといい情報ありましたら教えて下さい。