本ブログエントリーはPernixData社のコアチームエンジニアであるChethan Kumar氏のブログの翻訳版です。
本記事の原文はDestaging Writes from Acceleration Tier to Primary Storage – Part Iで閲覧可能です。
ネットワールドのPernixDataに関する情報はこちら。
フランク氏がFVPでサポートされている書き込み高速化ポリシーについてのいい記事を投稿しています。FVPでサポートされている2つの高速化ポリシーの導入として読んでいただくのに非常に良い内容になっています。記事に対するコメントとしてとある読者が「書き込みのデステージ」についての興味深い質問を聞いてきています。(訳注:Frank氏の英文記事原文のコメント欄を参照ください。)これに答えるためにはたった2行の返信欄では不十分でかなり深い洞察を必要とします。ですので、私はFVPのデステージャーについて複数のブログ記事シリーズで説明していこうと考えました。このブログはVMのデータをフラッシュから非同期ででステージしていく部分を例を上げて解説していきます。
ところで、この質問をしてくれた読者の皆さんに賞賛を送りたいと思います。書き込みの高速化のテクニックをとてもよく理解していなくてはこの質問はできません。帽子をとって皆さんへ、そしてFrankへ一礼したいと思います。
書き込みをフラッシュからプライマリストレージへデステージ
Write-Backモードでは、FVPはVMからの書き込みがFlashに書き込まれた直後に通知(書き込み完了通知)を実施します。データは直後にプライマリストレージ(データの恒久的な住処)がデータ受信を快適と思えるレートでプライマリストレージへと書き込まれていきます。このVMによって書き込まれたデータをプライマリストレージへと移行していくタスクを担うのが「デステージャー」と呼ばれるFVPのキーコンポーネントでバックグラウンドで動作しています。Write-Backモードでは基本的にVMからの書き込みは非同期で、書き込まれたデータをSANのスピードで送っている最中にもかかわらず、フラッシュのスピード(ピアを利用している場合はフラッシュとネットワークのスピード)で通知を受けます。この非同期のデータのでステージはWrite-Backモードでしか利用されないことにご注意ください。
デステージエリア
どんな時にも、FVPはフラッシュを様々な方法で利用します。VMでよく読み込まれるデータの格納(読み取り高速化のため)、Flashを搭載したサーバで動作しているVMの書き込みのプライマリコピーを貯めるため(書き込みの高速化のため)、リモートサーバで動作しているVMの書き込みデータのレプリカを保持するため(書き込みの対障害性を提供するため)です。vSphereホスト上の多くのVMを高速化し、それらのVMの読み取りと書き込みの双方を高速化するため、FVPはFlashの領域(不動産)を非常に効率的に管理する必要があります。FVPはVMからの書き込みがすべて恒常的な領域(ストレージ)に移行するまで動的に拡張・縮小するフラッシュ上の領域を利用します。この領域は「デステージエリア」と呼ばれます。Write-Backモードに構成されたそれぞれのVMは別々のでステージエリアを利用します。
デステージレート
FVPはWrite-BackモードのVMがFlash上のVMのデステージ領域に書き込まれるやいなや、通知を発行します。その裏で、FVPはデステージャーを利用し、VMのデータを恒常領域へ移行させます。この移行はプライマリストレージが取り扱い可能なレートで行われます。複数のVMがWrite-Backモードに構成されているとき、それぞれのデステージ領域に書き込みが行われたタイミングで通知を受け取ります。こうした場合、デステージャーはすべてのVMのデータのデステージ領域からの移行を同時に行います。しかし重要なのは下にいるプライマリストレージに負荷をかけずに行うということです。
書き込み高速化におけるデステージの意味 : フラッシュクラスのアプリケーションのレイテンシ!
例を上げてデステージャーのメカニズムを解説しましょう。この実験ではiometerが動作しているWindowsのVMがプライマリストレージに対して書き込みのバースト(急増)を発行しています。下の図は実験中の書き込み操作のレートを表示しています。Writeは毎秒4K程度まで急増を繰り返しています。このVMはFVPによって高速化され、Write-Backモードに設定されています。すべての書き込みはFlashで受け取られ、デステージャーによって非同期でプライマリストレージへとデステージされています。この実験ではプライマリストレージは高速なレートで書き込みを受けることができるので、デステージャーはVMのデータを受け取ってすぐに空っぽになっています。
結果 : VMによる毎秒の書き込み = Flashでの毎秒の書き込み = デステージレート = 非同期でプライマリストレージが毎秒受け取れる書き込み(ということなので、以下の図で異なるコンポーネントから提供される書き込みを表すラインは重なってしまっています。)
しかしながら、VMから見た時の書き込み操作のレイテンシは全く異なったものになります。次の図は検証中に異なったコンポーネントから観測されたレイテンシを表しています。FVPによる書き込み高速化によって、すべての書き込みは書き込みのバースト時にもFlashからFlashのスピードで提供されています。(オレンジのラインはローカルFlashの書き込みのレイテンシを表示しています。)VMから見た時の書き込みのレイテンシはほとんどFlashの書き込みレイテンシと同じです。(ブルーのラインが「総合的(実効の)レイテンシ」を表示しています。) Flashのレイテンシはバースト中にも200マイクロ秒ほどしか上昇していません。それに対して、デステージャーが示している、VMのデータをプライマリストレージへでステージする際のI/Oのレイテンシーは3 ms(*)ほどまで高くなっています。(グリーンのラインが「データストアへの書き込み」のレイテンシを表します。)これが、プライマリストレージへ直接書き込みを発行していた場合にVMが観測するレイテンシになります。
ほとんどのアプリケーションは上の画像と似たような振る舞いでの書き込みをします。そのようなワークロードでは、明らかに、I/OのQosについて前例のない向上を実現します。この向上はただ、SSDをvSphereホストに追加し、クラスタ化された高速化層を作成し、FVPでそのSSDをこの層に追加するだけで実現するのです。
次回予告 : 書き込みに比重のあるワークロードの高速化・・・
(*) この実験ではプライマリストレージとしてオールフラッシュSANを利用しています。実際レイテンシは、もしも磁気ディスクで構成されたプライマリストレージを利用する場合、もっと上がる事があります(数十ミリ秒程度)
記事担当者: マーケティング本部 三好哲生 (@pernixdata_netw)