イベントレポート

SSDのインテリジェント化で性能を上げ、寿命を伸ばす新技術

 現在のコンピュータシステムはストレージに関連したさまざまな課題を抱えている。今後はホストに近いストレージの主流が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に対してデータの読み書きを実行すると、データの読み書き性能が低下してしまう。クリティカルな処理の場合、この性能低下は痛い。

 そこでホスト側で、SSDのバックグラウンド動作を制御できるようにする。具体的には、バックグラウンド動作を制御可能なモードを用意し、そのモードではバックグラウンド動作を停止したり、再開したりをホスト側が管理する。こうすると、例えばミッションクリティカルなデータを読み書きする時に、SSDの性能低下をあらかじめ予防できる。

 講演では、代表的なバックグラウンド動作であるガベージコレクションを実行しながら、ランダム書き込みの入出力性能(IOPS)を比較してみせた。ガベージコレクションを制御することで、IOPSは7倍程度と、大きく向上した。

バックグラウンド動作をホスト側で制御する
ガベージコレクションを制御しない書き込み性能(左)とガベージコレクションを制御した時の書き込み性能(右)。4KBのデータによるランダム書き込みで比較した

スループット向上と寿命の延長が期待できるストリーム化

 次は書き込みデータのストリーム化である。SSDに書き込むデータは普通、さまざまなアプリケーションによって発生している。複数のアプリケーションをソースとするデータがさまざまなタイミングでSSDに送られてくる。SSDはデータを順次、到着した順番の通りに書き込んでいく。

 するとSSDの物理アドレスで見ると、異なるアプリケーションのデータが隣接する物理アドレスに書き込まれることになる。隣り合うセクタ(あるいはページ)のデータ同士には、なんの関係もない。

 ここで、あるアプリケーションが(ホスト経由で)SSDにアクセスしてデータを書き換えるとする。書き換えられるセクタの物理アドレスは当然ながら、バラバラである。SSDは消去ブロックごとにデータを書き換えるので、実際にはより大きなデータのかたまり(消去対象ブロック全体)をいったんコピーし、対象ブロックを消去し、書き換えたデータを混ぜてから、新たに書き込むことになる。実際のデータ量よりも多くのデータが実際には書き換わる「ライトアンプリケーション」が起こる。ライトアンプリケーションはSSDの書き換え寿命を縮めるので、あまり好ましくはない。

 SSDにおける書き込みを効率化するためにSamsungが講演で説明したのが、ホスト側でデータをタグ付けすることである。データをタグ付けすることで、アプリケーションごとにデータをまとめる。まとめたデータを、ひと続きの物理アドレスに連続して書き込んでいく。これがストリーム化である。

 講演では、仮想マシンAとデータベースD、仮想マシンCの3つのアプリケーションによる書き込みが同時に発生したと仮定し、ストリーム化の有無によってSSD内部でデータの配置(物理アドレス)がどのように違ってくるかを図示してみせた。

 データを3つのストリームにまとめることで、書き込み動作はランダムではなく、シーケンシャルに近くなる。すると書き込みのスループットが上がる。

 そして書き込みデータをストリーム化すると、データは物理アドレスが近接したひとかたまりでSSDに書き込まれる。書き込んだデータを、仮想マシンAが全て書き換えようとする動作を考える。ストリーム化されていない時は、数多くの消去ブロックでデータの書き換えが生じる。ところがストリーム化すると、書き換える消去ブロックの数が大幅に減少し、理想的にはわずか1個の消去ブロックだけで済むようになる。この結果、ライトアンプリケーションが大幅に減少するので、SSDの書き換え寿命が伸びる。

 講演では、書き込みスループットが9倍と大きく向上し、ライトアンプリケーションの度合いが3分の1に低下する(書き換え寿命に換算すると3倍に伸びる)という実験結果を示していた。

現在のデータ書き込みに関連する課題と、書き込みデータのストリーム化
データのストリーム化によるSSD内部でのデータ配置(物理アドレス)の違い。上はストリーム化をしない従来の書き込み。下はストリーム化した書き込み
データのストリーム化による効果。書き込みスループットは9倍に向上し(左)、ライトアンプリケーションの度合いは3分の1に低下した(右)
バックグラウンド動作の制御とデータのストリーム化に関する標準規格の策定状況

ストレージのオブジェクト化でホストの負担を減らす

 3つ目のオブジェクト化は、ホストで実行していたストレージに関するマッピングやデータロギングなどの処理を、ストレージに渡すというものである。ホストのコンピューティング処理が減少するとともに、ホストのメモリが空く。

オブジェクトストレージの概要。Key Valueストア(組となるデータをストレージなどに分散して配置する)の考え方を導入した
オブジェクトストレージの導入によるデータ処理とデータ配置の変化。より多くの処理をストレージが引き受けることで、ホスト側の負担が減少する

ストレージでコンピューティング

 ホスト側のコンピューティングの負担をさらに減らすとともに、データ入出力のボトルネックを解消することを狙ったのが、「ストレージでのコンピューティング」である。最近では「インストレージコンピューティング」と呼ぶことが多くなってきた。

 ホスト側が大量のデータをストレージから読み込んで演算処理を実施し、結果を出力したり、結果をストレージに書き戻したりするアプリケーションを想定しよう。

 ホスト側が欲しいのはデータではなく、演算の結果である。そのために大量のデータをストレージからホストへと移動する。データの移動量が膨大になると、データの移動にかかる時間と消費電力が無視できない。

 一方、SSDはプロセッサとバッファメモリを搭載しているので、コンピューティング能力は備えており、なおかつ通常は、プロセッサの稼働率は低い状態に置かれている。そしてSSDの内部ではNANDフラッシュメモリのデータをきわめて高速に呼び出せる。

 SSDの内部に演算目的のデータが揃っているのであれば、SSDの計算能力を活かして演算を実行し、結果(当初のデータよりもはるかに小さいデータ)だけをホスト側に出力する。あるいは、SSDの内部に書き戻す。

 数多くのSSDで並列してインストレージコンピューティングを実行すれば、ホスト側のCPUの負担を大幅に減らすとともに、データの移動に伴う時間消費と電力消費の問題を解決できる。講演者によれば、数多くのストレージに格納したデータを検索する処理をストレージ内部で実行して検索結果だけをホスト側に出力する、といった用途が、非常に適しているという。あらかじめ検索プログラムをストレージに格納しておくことで、きわめて高い効率で検索処理を実行できるようになる。

インストレージコンピューティングの考え方
インストレージコンピューティングの有無による、データの移動の違い
オブジェクトストレージとインストレージコンピューティングに関する標準化の動き

(福田 昭)