はにゃぶろぐ はじめました

物欲情報とかTipsとかいろいろ載せていけたらいいなぁ

SSDとAHCIのちょっとしたまとめ

SSDの特徴とtrimコマンド

SSDに使われているNAND FLASHは次の特徴をもっています。

  • 記憶素子の電荷を抜いた状態(消去状態)にしてから書き込みを行わないといけない
  • 読み出しはページ単位だが、消去はブロック単位(たとえば64ページ)
  • MLCタイプはセルは1素子あたり複数ビットを閾値をもうけて記憶するが、セルは書き換えによる劣化が起こりやすい (SLCでも劣化はある)
  • ウェアレベリングという書き換えが分散する仕組みがある

ブロック内の1ページを書き換える場合でも、ブロック単位で消去しないといけないので、初期のやり方では

  1. ブロックの全データをバッファに読み出し
  2. ブロック消去
  3. 書き換え分をバッファに反映
  4. ブロックに書き込み

という手段によっていたわけです。

昔あった 光磁気ディスク(MO)も初期は、リード&イレース&ライトと3回おこなってて遅かったですね。(オーバーライトが開発されてからは1回ですむようになりましたが)

しかし、この方法はブロック消去による速度低下と寿命が著しく短縮されるため、ウェアレベリングと他のアルゴリズムを組み合わせて、

  1. ブロックの全データをバッファに読み出し
  2. 消去済みブロックを探す
  3. 書き換え分をバッファに反映
  4. ブロックに書き込み

とすることで、書き込み速度を上昇させています。

 

容量を90%以上使うような使い方をすれば、寿命は加速してしまいますので、避けておくべきですが、ある程度、消去済みブロックがなくなった場合ときでもブロック消去の頻発による速度低下と寿命が短縮してしまいます。

 

OS側でも削除でクラスタが不要になってもクリアなど書き込みはせず、管理領域に削除マークをすることで、書き換え回数を減らしていますが、ここで一歩すすめた対処が trimです。

OS側から不要になった領域について SSDへあらかじめ通知しておいて、SSDがアイドル時間に ブロック消去を行っておく優れた解決策です。

 

使用できる条件は

  1. OSが対応している (Windows7 以降)
  2. SSDが対応している (いまどきは大丈夫)
  3. チップセットがAHCIに対応している
  4. OSがAHCIモード(一部はRAIDモードでもOK)で動作している

となります。

どうにもならないのは 3で、LGA775プラットフォームの G41などで使われている ICH7無印は AHCI非対応です。P45なら ICH10で問題ないのですけどね。

5シリーズ以降のチップセットでは問題はないでしょう。

 

AMDでは770以降サポートしていますのでほぼ問題なしです。

 

なお、AHCIが有効な場合 ドライブが対応していれば、NCQ (Native Command Queueing)が使えてお得です。

NCQ (Native Command Queueing) とは?

SATAでは、SATAデバイスに対してコマンド送信、実行、ステータス通知のサイクルを順々に実行するのですが、NCQをサポートしていると、複数のコマンドを同時に発行し、デバイス側が効率のよい実行順序に命令実行順序を並び替えることができるのです。

HDDでもランダムシークを伴う読み出しなどに威力を発揮します。