第6回では、現代的なストレージの例として、VMwareとTintriのストレージを紹介しました。仮想化が当たり前になってきている現在のデータセンターにおいて、その大部分がソフトウェアによって実現されていることが理解できたと思います。今回は、企業で使用するストレージを選択する場合に、考慮すべきポイントについて整理しましょう。
企業からみたストレージの要点①:信頼性
NANDフラッシュメモリおよびSSDなどの進化により、性能は1個あたり50万IOPS以上(NVMeタイプのSSD単体での多重ランダムリード)、容量は2.5インチサイズで15TBを超えるデバイスが登場しています。これは性能と容量の両面で、すでにハードディスクを超えていると言っても過言ではありません。
企業が使用するストレージには、性能や容量と同様に、データを消失しないこと、すなわち信頼性が何よりも重要です。ハードディスクを使ったストレージだけでなくフラッシュメモリを使用したストレージであっても条件は変わりません。
NANDフラッシュメモリは、比較的強固な誤り訂正符号(ECC)を実装することで、上記の高性能と大容量を実現しながら、信頼性の面でもハードディスクに比べて遥かに低いエラー発生率を誇ります。しかしながらNANDフラッシュメモリの特性上、避けられないマイナス面があります。具体的には、フラッシュメモリの書き込み回数に限界があること、および使用の経過に伴い性能が低下することです。
書き込み回数の限界の要因は、フラッシュメモリの動作原理である電子の出し入れを行う際、絶縁体となる酸化膜が通過する電子により劣化するためです。酸化膜の劣化した部分は電子が漏れやすくなるため、電子の量によってデータの判別が難くなり、データ領域としては使われなくなります。またフラッシュメモリは、複数のメモリエリアであるページをまとめたブロック単位でしか書き込みが行えないという特性があります。そのため、書き込みを行う際は、可能な限りデータをブロック単位でまとめて一度に書き込むという工夫が必要です。データの書き込み回数を減らすため、書き込み時にWriteキャッシュを利用し、そのキャッシュ内でデータをまとめるようにします。
SSDなどのストレージデバイス単体では、ハードディスクと同様に数十MB程度のDRAMキャッシュを持ち、ある程度まとめて書くような技術を実装していますが、単体で出来ることには限界があり、書き込み回数を抑制するための根本的な解決はとはなりません。
そこで、エンタープライズレベルの外部接続型ストレージの多くは、この課題に対処するため、ギガバイトを超える容量のNVRAMやNVDIMMなどの高速な不揮発性メモリに書き込まれるデータを一旦保管してメモリ内で並び替え、RAIDなどで束ねられた複数のSSDなどにまとめてフラッシュメモリに書き込みます。
このような処理を行う製品と行わない製品では、性能低下率、寿命、エラー発生率などが大きく違います。
また、企業で使用するストレージであれば、システムの電源が突然故障した場合にデータが消失してしまうことを防ぐため、システムを二重化する対策が必要となります。そこで、エンタープライズストレージには、NVRAMやNVDIMMを二重化されたコントローラ間で同期させ、電源断やコントローラの故障時もデータが消失しないように工夫がなされています。 NVRAMやNVDIMMなどの不揮発性メモリは、メモリ内にデータが入っている際に電力を失っても、電気二重層コンデンサ(キャパシタに)蓄えた電力によって、DRAMの内容を近接に配置するNANDフラッシュに退避させ、停電中もデータを保持するデバイスです。
外部接続型ストレージでは、データ保護による信頼性向上のため、ハードディスク時代からこのような冗長化が行われてきました。対して、x86サーバーにソフトウェアだけでストレージとして使用する「ハイパーコンバージドインフラストラクチャー(HCI)」や「ソフトウェアデファインドストレージ(SDS)」では、NVRAMやNVDIMMなどの不揮発メモリが装備されていないため、このような信頼性向上の仕組みを実装するのは困難です。
企業からみたフラッシュストレージの要点②:性能
企業が求めるストレージの要点は信頼性だけではありません。たとえばインターネットにおいては、素早くデータが更新されなければ、ユーザーはすぐに他のサイトに行ってしまいます。今日では、しのぎを削るまでの高速なデータアクセスが必要になってきているのです。
NANDフラッシュメモリ、およびそれらを使ったSSDなどを使ったフラッシュストレージは、HDDのみのストレージの時代と比べ劇的に性能を向上させました。しかし製品や実装方式によっては性能面での課題や懸念も存在します。 NANDフラッシュメモリの性能低下の懸念について前述しましたが、その要因のひとつに「ガベージコレクション」があります。
前述の通り、NANDフラッシュメモリは、読み書きの単位の「ページと、ページが数十個集まった消去の単位の「ブロック」があります。 NANDフラッシュメモリはブロック内の一部のページのみを書き換えることができないため、書き換えられるデータは、実データを残したまま削除対象の無効なデータとして保持されたまま、新たな空きブロックに新しいデータを書き込みます。
フラッシュストレージの利用当初は、空きブロックが十分にあり性能も問題ないですが、使い込んでいくうちに空きブロックが少なくなります。その時、新しく空の空きブロックを作るための処理がガベージコレクション(ごみ集め)です。削除対象の無効なデータ(ごみ)を集め、断片化している有効なデータを固めて新しい空きブロックに敷き詰めて書き込み、新しい空きブロックを作ります。この処理はNANDフラッシュメモリ内で、ユーザー/アプリケーションの処理と関係ない大量の読み書きが発生し、負荷がかかります。この処理とユーザー/アプリケーションの処理が重なった時、ストレージのピーク性能が低下します。
この課題を解決するためには、予備領域の大きいSSDを搭載したり、ガベージコレクションの処理が発動するタイミングを調整したりと、ストレージベンター各社の実装に特徴があり、なるべく性能低下を招かないような工夫がなされています。
また、NANDフラッシュメモリの信頼性を高める誤り訂正符号(ECC)の強固さと性能は相反関係にあり、ECCを強固にすればするほど読み書きの際のオーバーヘッド、特に読み込み時の性能が低下します。NANDフラッシュメモリは、データを書く際に数千バイト毎に数十バイトのECCを計算して付与します。データを読み込む際には、そのデータからECCを再計算して既に書かれたECCと照合します。照合結果があっている場合はそのままデータを出力し、違った場合はデータ訂正して他の領域に書き直し出力します。
エラーの度合いによっては修復不能な場合もあり、その修復不能なエラーの発生頻度をUBER(Uncorrectable Bit Error Rate)と呼びます。UBERには業界規格があり、JEDEC(半導体技術協会)で、クライアントSSDの場合は10e-15、エンタープライズSSDは10e-16より少ない発生頻度とすることが定められています。
サーバーサイドPCIeフラッシュストレージで著名なFusion-io(現SanDisk/Westan Digital)のioDrive/ioMemoryは、業界規格より1万倍も低い10e-20のUBERの仕様とし、より強固なECCを実装することで性能と信頼性を両立させることに成功し、市場に普及しました。
構成面では、サーバーがデータを素早く大量に処理する際、最短の距離でボトルネックなくデータをストレージデバイスと読み書きする必要があります。サーバー筐体内のストレージデバイスをPCI Express 3.0 (Gen3 16レーン)で接続している場合は、双方向で32GB/sといった高速なデータ転送を実現できます。
しかし、スケールアップ型のストレージが拡張シェルフなどによって構成されSASケーブルで接続されている場合や、スケールアウト型のストレージやHCI(ハイパーコンバージドインフラストラクチャ)で各ノードが10ギガビット・イーサネットなどで相互接続される場合には、その接続経路の帯域がボトルネックになってしまう恐れがあります。
Tintri VMStoreの例では、1個あたり12Gbps,6Gbpsの帯域を持つSSDの性能を生かすため、ストレージ内部では、PCIeでコントローラ間データ同期を行っており、ボトルネックとなる拡張シェルフや10Gbpsイーサネット接続を認めない仕様となっています。
このように、ストレージを高速にするには、フラッシュメモリの性能を最大限に発揮させるための無駄な迂回を減らすことが重要です。
* * *
ストレージに関する運用管理技術は常に進化しています。そのような中、フラッシュメモリの特性を考慮したストレージを注意深く選ぶことが、企業向けのフラッシュストレージを選択する際に必要となります。
次回は、さらにストレージを効率良く使うために、「重複排除」、「圧縮」、「シンプロビジョニング」など容量を効率化するストレージの技術について説明します。
[PR]提供:Tintri