ストレージのIOPS性能がアプリケーションに与える重要性

»

寒いですね。昨日ほんとうは野外バーベキューしようとしたのですが、寒さこらえてやりました・・・早く暖かくなって欲しいです。

wa.jpg話は変わりますが、花粉も増えてきましたね。先週くらいから鼻の調子も悪くなってきたのですが、ネットの話題になっている「ワセリンを鼻に塗ると花粉が気にならなくなる」というのを見て、早速試してみました。やわらかワセリンというのが近所のスーパーに売っていたので、これを鼻に塗ったら、鼻水鼻詰まりがピタッと止まりました。数時間おきに塗る煩わしさはありますが、良い感じに効いてます。(本来の使い方ではないので、自己責任でお試しください)

今日はストレージのIOPSについてお話します。IOPSとは[ In / Out Per Second ]の略で、簡単に言えば1秒間にどれだけデータの入出力ができる性能をストレージが持っているかということです。

IOPSとは、1秒当たりにディスクが処理できるI/Oアクセスの数のことです。1回のI/O処理にかかる時間は、データ転送時間と平均アクセス時間とを足した数値となります。このI/O処理が1秒当たり何回実行できるかの数値がIOPSです。しかしデータ転送時間には、ディスクから磁気ヘッドがデータを読み書きするインタフェースの転送速度や平均メディア転送速度やドライブの信号処理とデータ転送を制御するCPUの処理時間などが加算されるので、実は正しいなデータ転送時間は把握しづらいものとなっています。
一般的にはIOPSの数値が高ければ高いほど高性能なディスクであるということ事実は間違いありません。しかしIOPSが単純に高ければ高性能でアプリケーションの起動と利用が高まることに繋がるわけではないのがストレージであり、それ以外にも様々な要因がパフォーマンスに影響を与えているのです。

622a2d6d755044a287b225a021a44c62_s.jpg

ディスクは,ディスク単体でディスク・キャッシュも搭載していますので、これも転送時間に影響を与えることになります。メイン・メモリーを使ったディスク・キャッシュも重要ですが,ディスクが内蔵するキャッシュも極めて重要な存在といえます。ファイル・サーバーやDBサーバーなどデータがディスク上に分散する場合は,ディスク・キャッシュが性能向上に役立ちます。キャッシュ容量が大きければキャッシュのヒット率も上がるため,読み出し性能の大幅な改善を見込めることになりスピードは早くなります。

ディスクインターフェースも重要なポイント

ストレージの耐障害性と高速性を並行して高めていくためには,ディスク・インタフェースも適切なハードウエア選定が必要となります。デスクトップ向けに開発されたSerial ATAとサーバー向けに開発されたSerial Attached SCSIが利用されています。RAIDなどはこれら物理層のインタフェースの選択による論理的な構成制限はありませんが,選択したインタフェースのチップセットやコントローラ・ボードによるサポートの有無など,製品レベルでの違いがでますので注意が必要です。

I/O性能を向上させる仕組みとしてのRAID

RAIDは,複数のディスクを使ってI/O性能やデータの信頼性を向上させる方法として注目されているものです。複数のディスクを1台のディスクとして利用できるのが大きなメリットです。大容量データの保管に向いている上,1台または2台のディスクが故障してもデータの読み書きを継続するようにも設定できる点は大きな優位性をもつといえます。
RAIDはOSなどソフトウエアで実現するソフトウエアRAIDと,専用のハードウエアにディスクを接続するハードウエアRAIDの2種類が存在しています。ソフトウエアRAIDは設定自体は手軽になりますが,OSが格納されているディスクや起動ディスクをRAID構成にできないほか,CPU負荷が高くなるといったデメリットも存在します。

IOPSだけでディスクストレージを評価するのは難しい

IOPSだけでディスク負荷率を評価することは難しいのが実情で、IOPSは、どれくらいシステムがIOを必要としているかがわかる程度の値であると認識すべきものです。データベースのように高いディスクパフォーマンスを必要とするアプリの場合はディスクの書き込み・読み込みに関するチューニングガイドが提供されていますのでそれに基づいて調整をすることがパフォーマンスを上げていく大きなポイントになります。ディスクのスループットが大きければアプリケーションのパフォーマンスが必ず上昇するというわけでもなく、サイズが4KB以下のファイルを大量に書き込みするようなアプリを使う場合には、スループットよりもIOPS の数値を重視した方がパフォーマンスが上がることが期待できます。また逆に一度の書き込みがGB単位のような大きなサイズのアプリではスループットを重視した方がパフォーマンスが上がるという、なかなか微妙なものとなるのです。

仮想環境で利用する場合、I/O競合にも注意が必要

仮想環境で利用するストレージは、ほとんどの場合が共有ストレージとなっています。これを利用する場合にはその利用方法によってパフォーマンスが著しく下がることがあることにも注意が必要になるのです。ほぼ同時に複数のアプリケーションがストレージにアクセスしてしまいますと、ハードディスク上の別々の場所に記録されているデータを読み込みにいくこととなり、ハードディスクのヘッドは移動の繰り返しを余儀なくされます。同じ処理を行う場合でも、別の時間帯に実行する場合と、同時に実行する場合では処理時間に大きな開きがでることを考慮する必要があるのです。ひとつひとつのI/O要求データ量は小さくても、多くの要求が短時間に行われてしまうとストレージ性能は大きく低下することになります。また、前述のように、せっかくアプリケーションのI/O傾向を理解していても、仮想環境の場合、複数のアプリケーションが完全に混在してストレージにアクセスするため、アプリケーションに特化してチューニングする意味がなくなってしまいます。

仮想環境専用のストレージを利用

複数のアプリケーションが同時に処理を行う際に、ブロックストレージの場合は、どのブロックがどのアプリケーションのものなのかを判断することができませんので、どのI/O要求も押し並べて同じように処理を行います。その場合の問題点は、アプリケーションの重要度合いがわからなくなるため、高負荷の状態になると重要なアプリケーションの処理が遅延するおそれがあることです。このような仮想環境の特有な環境には、それぞれのアプリケーションのデータを認識して、それに適した処理を行える仮想環境専用のストレージが用意されています。そのようなストレージはデータをファイルとして認識して、どのデータがどの仮想マシンからの要求なのかを把握することで、それぞれの仮想マシンのI/O処理が高速化かつ確実に処理を行えるように設計されています。例えばTintri VMstoreの場合、全ての仮想マシンにおいての遅延時間を1ミリ秒以下に保つようにデータを処理する事ができます。ある仮想マシンが急に高負荷状態になったとしても、他の重要なアプリケーションに影響が出ないように工夫がされているのです。

tintri_qos.png

最後に

ストレージにおけるアプリケーションのパフォーマンスを確保するためにはIOPSの数値が高いことは間違いなくプラスに働くものとなりますが、それだけがすべてではないことはよく理解し、トータルの仕組みとしてパフォーマンスを上げられるようなシステム構成にしていくことが極めて重要になるのです。また利用するアプリケーションの特性といったものを把握しておくと、それにあわせてパフォーマンスを上げる取り組みが可能になります。さらに、仮想環境においても、それぞれのアプリケーションの特性を把握できるストレージを利用することで、仮想サーバーやクラウド環境においても優れたパフォーマンスを得ることができるます。

Comment(0)

コメント

コメントを投稿する