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

IOPSとは、1秒当たりにディスクが処理できるI/Oアクセスの数のことです。1回のI/O処理にかかる時間は、データ転送時間と平均アクセス時間とを足した数値となります。このI/O処理が1秒当たり何回実行できるかの数値がIOPSです。
一般的にはIOPSの数値が高ければ高いほど高性能なディスクであるということ事実は間違いありません。しかしIOPSが単純に高ければ高性能でアプリケーションの起動と利用が高まることに繋がるわけではないのがストレージであり、それ以外にも様々な要因がパフォーマンスに影響を与えているのです。

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

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

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

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

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

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

最後に

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