小さなキャッシュ(へそくり)で大儲け


アプリケーションのパフォーマンスを改善するフラッシュ・キャッシングの最新の手法、利点、そのトレードオフ、ベンダーについて見ていこう。

 

Storage Magazine 9月号より
Chris Evans

 

もし我々が何事も完璧に行う世界に住んでいたなら、自分のデータは全て、金に糸目を付けずに市場で買える最も高速な媒体に置くことだろう。残念なことに、ITの世界は完璧ではない。
例えば、我々は実際の目的に合わせて、アプリケーションの要件を満たすストレージを宛がわなければならない。しかし、データのプロファイルが急激に変化する(例:アクティブデータが常に変化する)場合、これを達成することが難しくなる可能性がある。ティアリング・モデルでデータを移動するのは、常に受け身の処理だからだ。さらに、ITがよりクラウドにシフトしてきたため、データとアプリケーションはもはや同じ場所にはないかもしれず、離れたところにあるデータを整合性と完全性を保ちつつ参照できる製品も必要になってくる。

これらI/Oパフォーマンス問題に対する答えの一つはストレージ・キャッシングを実装することだ。ティアリングと違って、ストレージ・キャッシングではデータのコピーを高パフォーマンス媒体のレイヤーに保持し、一方で正式バージョンのデータは通常安価なディスクやフラッシュに保存される。

 

キャッシングの利点

実データではなくそのコピーで処理を行うメリットは、実際の処理作業に合わせてキャッシュの中身を迅速に変化させることができる点だ。その一方、キャッシュの中で動きのないデータは、単純に無効化させるだけでよく、キャッシュがフルになっても移動させる必要がない。

キャッシングによって、複数の種類の媒体をコスト効率よく使うことも可能になる。いかなる時点でも動きが多いデータは、一般的に割合としては少ない(おそらく、大半のアプリケーションで10%〜20%程度)。比較的少量のキャッシュで、企業はI/O要求の大部分を高速化し、全てのデータを高速媒体に配置するよりもはるかに低コストで、アプリケーションのパフォーマンスを大幅に改善できる。

 

キャッシングのトレードオフ

キャッシュを導入する現場において、ストレージ・キャッシングとは、全体のI/Oパフォーマンス改善と、データを高価な媒体に配置するコストの間のトレードオフである。効率の良いキャッシング・アルゴリズムであれば、高い割合のI/Oが(いい時で90%〜95%あるいはそれ以上)キャッシュから読み書きされる。しかし、あるデータが要求された時キャッシュにない、という事態を避けることはできない。その場合、プライマリストレージにデータを取りにいかなければならず、I/Oレスポンスは悪くなる。金融取引システムやオンライン・ギャンブリングなど、これが問題になるような状況では正式データを高速なティアに配置するのが望ましい。

一方クラウド環境において、企業は物理または仮想アプライアンスを使ってデータをローカルまたはクラウド内に配置できる。これにより、データを直接アクセスするよりパフォーマンスは良くなる。公衆インターネットはもとより専用回線でさえもそれを経由してデータを取り出すのは、ローカルのデータセンターよりもずっとレイテンシが高いからだ。とはいえ、パブリッククラウドの内と外でデータをキャッシングすることの欠点は、全てのI/Oのライト処理が、キャッシュの向こう側にあるストレージにコミットバックされる際、整合性に課題があるところだ。

 

キャッシング・モデル

以下は、ストレージ・キャッシングの実装の三つの代表的手法である。どれを選ぶかによって、ライトI/O要求がどのようにキャッシュによって処理されるかが決定される。

 

 ライトスルー

ライト要求は、ホストによる確認以前にキャッシュに書かれ、次にプライマリストレージに書かれる。I/Oは永続的媒体に置かれることで保障されるが、パフォーマンスはプライマリストレージの速度に限定される。キャッシュレイヤーには(RAID保護のような)レジリエンシーが要求されないので、ライトスルーは比較的実装が安価で容易である。リード要求に対して、データがキャッシュ上にあれば、データは直接キャッシュから読みだされ、キャッシュに無ければ、プライマリストレージから読みだされキャッシュにも書き込まれる。

 

 ライトバック

この処理では、データはキャッシュに書き込まれ、ホストに直ちにI/O完了が通知される。I/Oライトパフォーマンスは優れているが、プライマリストレージに書き込まれるまで、データはキャッシュのみに書かれた状態でホストにさらされることになる。そのため、ライトバック・キャッシングを実装する場合は大抵、別ホストまたは別コントローラーへミラーリングを行うか、バッテリーまたはUPSを使ってバックアップを行う。

 

 ライトアラウンド

この処理では、データはキャッシュを迂回して、直接プライマリストレージに書き込まれる。キャッシュはもっぱらリード要求に使われる。処理の内容が大容量の順次書き込みであり、(バックアップやアーカイブデータのように)後から再読み込みが絶対に起こらないデータを置いてしまうことによって、キャッシュを溢れさせたくない場合に使われる実装形態である。

 

ソフトウェアによるキャッシングの実装は、一般的にこれらの方法の少なくともどれか一つを使っている。また、負荷状況を検知するか、ボリュームまたはLUNによる設定で環境に合わせてタイプを選ぶことができる。

 

キャッシング効果 まとめ

キャッシング方法

リードパフォーマンス

ライトパフォーマンス

リード整合性

ライト整合性

ライトスルー

ライトバック

ライトアラウンド

 

どこをキャッシュすべきか

キャッシングは様々な場所のI/Oスタックで使われる。アプリケーション、OS、ハイパーバイザ内部、アプライアンス、ストレージアレイ内部にそれぞれキャッシュを置くことができる。基本となる考え方は、I/Oパフォーマンスを改善するために、ダイナミックRAM、不揮発性DRAM、フラッシュ(NAND)などのより高速な媒体を利用する、ということだ。以下にいくつかの例を挙げる。

 

 外部アレイ

アレイ内のキャッシングは、EMCが1990年代初頭にSymmetrixブランドのもとに統合キャッシュディスクアレイを導入して以来、外部ストレージシステムの機能になってきた。アレイキャッシングの目的は、ディスクヘッドの動きを最適化(および最小化)するために、I/Oを効率的に平滑化し、ライトリクエストとリードリクエストを順序付けることによって、HDDで発生する予測不能のI/O動作をできるだけ低減することにある。ディスクキャッシングは、ユーザーにとって極めて(と言っていいほど)透過的であり、DRAM、NVDRAM、半導体ストレージを組み合わせて実装される。アレイベンダーは、あらかじめストレージのキャッシュのサイジングを行い、キャッシュ率を固定にしておくか、アレイ設計または構築の過程でキャッシュのサイズをカスタマーに指定させる。

 

 アプライアンス・ベース

アプリケーションのキャッシングは、データの視認性をネットワーク上にまで拡張するアプライアンスを使って実現される。このタイプの製品は、iSCSI、SMB、CIFS、NFSなどの代表的プロトコルを使い、ブロックベースまたはファイルベースになっている。データが複数のデータセンターにまたがっていたり、パブリッククラウドを行き来したりといった、長距離間のデータアクセスがある時、アプライアンスが使われることが多い。キャッシング処理はネットワークの両側で行える。つまり、クラウド・リソースへのアクセスを高速化するためにオンサイトで行うこともできるし、オンプレミス・リソースへのアクセスを高速化するために、クラウド内で行うこともできる。

 

 ハイパーバイザ

ハイパーバイザのキャッシングは、フラッシュやDRAMなどの高速ストレージにVMの最もアクティブな個所を置くことによって、仮想マシンのパフォーマンスを改善する手法だ。この手法はVMwareのvSphereでは、ネイティブの機能である「フラッシュ・リード・キャッシュ」を使って一定量のフラッシュを各VMに割り当てる、という形で実現される。ブロックベースのI/Oやハイパーバイザ内でNFSデータストアに保存されたデータをキャッシュするサードパーティのツールもある。MicrosoftはHyper-Vのキャッシングを直接OS内に実装しており、Windows Server 2012ではCSV (Cluster Shared Volumes) Cacheのような新機能を提供している。ハイパーバイザ・キャッシングは、(共通性の高い仮想デスクトップ基盤[VDI]イメージのような)データが重複排除できる複数のVMに対しても効果を発揮する。

 

 OS

OS内のキャッシングは最初からOSの機能として存在してきた。キャッシング処理は、多くの場合ごく基本的なもので、単純にI/Oのレスポンス時間を平滑化するために行われる。もっともほとんどの場合、キャッシングはI/Oごとの特徴の違いを考慮していない。ソフトウェアベンダーは、この事をWindowsとLinuxにより効率の良い(多くはストレージ媒体とバンドルされた)キャッシング製品を紹介する絶好の機会ととらえている。

 

 アプリケーション・キャッシング

このキャッシングはアプリケーション内部でデータベースの一部としてか、または特注プログラムを使って実装されている。大半のデータベース・プラットフォームは何らかの形でキャッシングを実装している。Oracle SQL Result Cache、Full Database Caching、MySQL Query Cacheなどはその例である。

 

稼いで(キャッシングして)いるベンダー

外部ストレージアレイのほぼ全てが、DRAMまたはNANDフラッシュでI/Oのキャッシングを行っている。ただし、オールフラッシュアレイに関しては、パフォーマンス全体の改善は小さいため、ストレージ・キャッシングは最小限になることが多い。以下は、ベンダーがどのようにキャッシングを実装するかの具体例である。

Nimble Storageは、書き込まれたデータはただちに再読み込みされる、という前提のもとに、ライトI/OのキャッシュにNANDを使う。但し、ディスクにデータをコミットする前に、NVRAMにデータをキャッシュする。Hewlett Packard Enterprise 3PARは、アクセス回数が比較的少ない二次的な配置先にDRAMの拡張としてフラッシュを使う。アダプティブ・フラッシュ・キャッシュと呼ばれるこの機能は、DRAM増設費用をかけずにフラッシュにアレイキャッシングの機能をもたせるものだ。

Avere Systemsは、NASストレージを拡張して地理的に分散したデータセンターやパブリッククラウドをつなげるようにしたアプライアンス・ベースのキャッシング製品を販売している。パブリッククラウドの中では、この製品は物理ハードウェアではなく仮想アプライアンスとして実装される。その他のクラウドキャッシング製品としては、Azureへ読み書きされるデータをキャッシュするMicrosoftのStorSimpleやパブリッククラウドやプライベートクラウドに保存されたファイルデータをローカルにキャッシュするのに使われるPanzura Global File Systemアプライアンスがある。

ハイパーバイザ内では、ベンダーがNAS、ブロックプロトコル双方にI/Oアクセラレーションを提供している。例えば、PernixDataはVMware ESXiカーネルと連携して、DRAM、NANDフラッシュを使い、VMのI/O高速化を実現している。DRAMが使われるときは、ライトI/Oはハードウェア障害に備えて一つのクラスターの中の複数ホストに複製される。Infinio Acceleratorソフトウェアは、仮想マシン用にNASとブロックベースのI/O両方をキャッシュする。この技術は、仮想マシン内でDRAMをキャッシュとして使っている各VMware vSphereホスト上のVMを使うことにより実現されている。SanDisk社は、FlashSoftのブランド名でこの市場にキャッシング製品を提供している。最新のバージョン4.0では、vSphere 6 と Microsoft Hyper-V (および Windows Server)をサポートするようになった。これまでのバージョンでは、Linux and vSphere ESXi 5.xをサポートしていた。

OSレイヤーでは、パフォーマンス改善用の様々な製品が出ている。例えばEnmotusは、ワークステーションおよびサーバー用にフラッシュを使って旧来のディスクベースのパフォーマンスを改善する各種の製品を提供している。それに対して、IntelのCache Acceleration Softwareは、自社のSSD製品各種と連携して稼働する製品だ。このソフトウェアは、WindowsとLinuxをサポートし、一般に普及している全てのハイパーバイザのもとで、VMとして動作する。その他のOSベースのキャッシング製品としては、ION Accelerator (SanDisk)、AutoCache (Samsung)、XtremCache (EMC)などがある。

最後は、Atlantis Computingの二つのキャッシング製品だ。一つ目はVDIをターゲットとするILIOという製品、もう一つは仮想サーバー環境をターゲットとするUSXという製品だ。ILIOは永続的・非永続的デスクトップ両方をサポートしており、DRAMを使って高いレベルの重複排除を行うことにより、外部フラッシュベース・ストレージを使うよりもはるかに投資効率の高いVDIを提供する。

 

キャッシング・カンニングペーパー

キャッシングの手法は、ライトI/Oをどう扱うかによっていくつかの種類に分かれている

 ライトスルー

キャッシュへの書き込みとプライマリストレージへの書き込みは同期する

 ライトバック

キャッシュへの書き込みとプライマリストレージへの書き込みは非同期

 ライトアラウンド

キャッシュを迂回して直接プライマリストレージへ書き込まれる

キャッシングはI/Oスタックの複数の場所に実装される

 外部ストレージアレイ(ベンダー独自)

 アプライアンス経由(リモートでアクセスされるデータに有効)

 ハイパーバイザ(仮想マシンの加速。重複排除機能活用)

 OS(OSのキャッシングの基本機能を拡張)

 アプリケーション(例:データベースにおいて共通データのリード処理削減)

 

 

結論(支払い:キャッシュ・アウト)

キャッシングにより、多くの場所でアプリケーションン・パフォーマンスを改善することができる。とはいえ、どこにキャッシュを置くかを決めるには、コスト節約(ライセンス購入の抑制やハードウェアコストの抑制)とそれを導入した時の実用性とのバランスをとることが必要だ。通常、仮想化が進んだ環境に対してはハイパーバイザ内のキャッシングが有効だが、VM内で直接キャッシングを行ったり、データベースにSSDを割り当てたりする戦術的実装も有効な場合がある。

 

著者略歴:Chris Evansは独立系コンサルタント兼Langton Blueの設立メンバー。