イベントレポート
SSDのインテリジェント化で性能を上げ、寿命を伸ばす新技術
(2015/9/24 11:36)
現在のコンピュータシステムはストレージに関連したさまざまな課題を抱えている。今後はホストに近いストレージの主流がHDDではなく、SSDになることが明らかであり、また、実際にそうなりつつある。
SSDはHDDと見かけは似てはいるが、基本的な原理は違う。SSDの長所を引き出し、短所を緩和するには、HDDが主流だった時代とは異なる考え方をSSDに持ち込む必要がある。
ストレージ技術に関する講演会「ストレージ開発者会議(SDC: Storage Developer Conference)」では、Samsung SemiconductorがSSDを賢く(インテリジェント化)することで、システムとSSDの性能を向上したり、SSDの寿命を伸ばしたりする手法を公表した。講演タイトルは「Storage Intelligence in SSDs and Standards」、講演者はプリンシパル・エンジニアのBill Martin氏とChangho Choi氏である。
Bill Martin氏とChangho Choi氏は、具体的には4つの技術をSSDおよびストレージシステムに導入することを説明した。(1)SSDのバックグラウンド動作をホストが制御する機能、(2)SSDに書き込むデータのストリーム化、(3)ストレージのオブジェクト化、(4)ストレージ内部でのコンピューティング、である。以下にもう少し詳しく説明しよう。
バックグラウンド動作を停止してSSDの読み書きを高速化
始めはSSDのバックグラウンド動作である。通常はバックグラウンド動作には、ホスト側は関与しない。すると困ったことが起こる。SSDがバックグラウンド動作を実行している時に、ホストがSSDに対してデータの読み書きを実行すると、データの読み書き性能が低下してしまう。クリティカルな処理の場合、この性能低下は痛い。
そこでホスト側で、SSDのバックグラウンド動作を制御できるようにする。具体的には、バックグラウンド動作を制御可能なモードを用意し、そのモードではバックグラウンド動作を停止したり、再開したりをホスト側が管理する。こうすると、例えばミッションクリティカルなデータを読み書きする時に、SSDの性能低下をあらかじめ予防できる。
講演では、代表的なバックグラウンド動作であるガベージコレクションを実行しながら、ランダム書き込みの入出力性能(IOPS)を比較してみせた。ガベージコレクションを制御することで、IOPSは7倍程度と、大きく向上した。
スループット向上と寿命の延長が期待できるストリーム化
次は書き込みデータのストリーム化である。SSDに書き込むデータは普通、さまざまなアプリケーションによって発生している。複数のアプリケーションをソースとするデータがさまざまなタイミングでSSDに送られてくる。SSDはデータを順次、到着した順番の通りに書き込んでいく。
するとSSDの物理アドレスで見ると、異なるアプリケーションのデータが隣接する物理アドレスに書き込まれることになる。隣り合うセクタ(あるいはページ)のデータ同士には、なんの関係もない。
ここで、あるアプリケーションが(ホスト経由で)SSDにアクセスしてデータを書き換えるとする。書き換えられるセクタの物理アドレスは当然ながら、バラバラである。SSDは消去ブロックごとにデータを書き換えるので、実際にはより大きなデータのかたまり(消去対象ブロック全体)をいったんコピーし、対象ブロックを消去し、書き換えたデータを混ぜてから、新たに書き込むことになる。実際のデータ量よりも多くのデータが実際には書き換わる「ライトアンプリケーション」が起こる。ライトアンプリケーションはSSDの書き換え寿命を縮めるので、あまり好ましくはない。
SSDにおける書き込みを効率化するためにSamsungが講演で説明したのが、ホスト側でデータをタグ付けすることである。データをタグ付けすることで、アプリケーションごとにデータをまとめる。まとめたデータを、ひと続きの物理アドレスに連続して書き込んでいく。これがストリーム化である。
講演では、仮想マシンAとデータベースD、仮想マシンCの3つのアプリケーションによる書き込みが同時に発生したと仮定し、ストリーム化の有無によってSSD内部でデータの配置(物理アドレス)がどのように違ってくるかを図示してみせた。
データを3つのストリームにまとめることで、書き込み動作はランダムではなく、シーケンシャルに近くなる。すると書き込みのスループットが上がる。
そして書き込みデータをストリーム化すると、データは物理アドレスが近接したひとかたまりでSSDに書き込まれる。書き込んだデータを、仮想マシンAが全て書き換えようとする動作を考える。ストリーム化されていない時は、数多くの消去ブロックでデータの書き換えが生じる。ところがストリーム化すると、書き換える消去ブロックの数が大幅に減少し、理想的にはわずか1個の消去ブロックだけで済むようになる。この結果、ライトアンプリケーションが大幅に減少するので、SSDの書き換え寿命が伸びる。
講演では、書き込みスループットが9倍と大きく向上し、ライトアンプリケーションの度合いが3分の1に低下する(書き換え寿命に換算すると3倍に伸びる)という実験結果を示していた。
ストレージのオブジェクト化でホストの負担を減らす
3つ目のオブジェクト化は、ホストで実行していたストレージに関するマッピングやデータロギングなどの処理を、ストレージに渡すというものである。ホストのコンピューティング処理が減少するとともに、ホストのメモリが空く。
ストレージでコンピューティング
ホスト側のコンピューティングの負担をさらに減らすとともに、データ入出力のボトルネックを解消することを狙ったのが、「ストレージでのコンピューティング」である。最近では「インストレージコンピューティング」と呼ぶことが多くなってきた。
ホスト側が大量のデータをストレージから読み込んで演算処理を実施し、結果を出力したり、結果をストレージに書き戻したりするアプリケーションを想定しよう。
ホスト側が欲しいのはデータではなく、演算の結果である。そのために大量のデータをストレージからホストへと移動する。データの移動量が膨大になると、データの移動にかかる時間と消費電力が無視できない。
一方、SSDはプロセッサとバッファメモリを搭載しているので、コンピューティング能力は備えており、なおかつ通常は、プロセッサの稼働率は低い状態に置かれている。そしてSSDの内部ではNANDフラッシュメモリのデータをきわめて高速に呼び出せる。
SSDの内部に演算目的のデータが揃っているのであれば、SSDの計算能力を活かして演算を実行し、結果(当初のデータよりもはるかに小さいデータ)だけをホスト側に出力する。あるいは、SSDの内部に書き戻す。
数多くのSSDで並列してインストレージコンピューティングを実行すれば、ホスト側のCPUの負担を大幅に減らすとともに、データの移動に伴う時間消費と電力消費の問題を解決できる。講演者によれば、数多くのストレージに格納したデータを検索する処理をストレージ内部で実行して検索結果だけをホスト側に出力する、といった用途が、非常に適しているという。あらかじめ検索プログラムをストレージに格納しておくことで、きわめて高い効率で検索処理を実行できるようになる。