前回の記事では、IOPS とスループット性能とデータ サイズとの因果関係について説明しました。本記事では、システムで稼働しているアプリケーションが実際に生成している IOPS の測定方法について説明します。

目次

  1. Premium SSD を使ってみよう ~性能と注意点をチェック~
  2. Premium SSD を使ってみよう ~IOPS とスループットの関係~
  3. Premium SSD を使ってみよう ~システムが生成する IOPS の計測方法~(本記事)
  4. Premium SSD を使ってみよう ~ボトルネックの原因がディスクなのかどうかを特定する~

同じ Web サーバーでも必要な IOPS は要件によって異なる

ディスク パフォーマンスの見積もりに関して、「Web サーバーではどの程度の IOPS を用意しておくのが妥当ですか?」といったような質問をいただきます。Web サーバーに限った話ではなく、他にも DB サーバーや認証サーバー等が必要とする IOPS の一般論に関するご相談が多いように思います。

一言で Web サーバーと言っても、ディスク パフォーマンスの見積もりに影響する HTTP リクエストの総量、Web コンテンツのデータ サイズ、ファイル システムのクラスター サイズ等は異なりますので、一概に「Web サーバーの場合はこの程度の IOPS が必要です」という解答はありません。

しかし、実際に HTTP の負荷をシミュレートさせてパフォーマンス テストを行うことで、稼働中のアプリケーションが必要とする IOPS を測定することが可能です。

前回の記事に書いたように、OS の中では IO はバケツリレーのように処理されます。

IRP

バケツを最初に渡すのはアプリケーションです。そのため、稼働中のアプリケーションが発生させている IO 操作の数(バケツを渡す回数)を測定することで、アプリケーションの稼働に必要な IOPS を把握することが可能になります。

アプリケーションが生成した IOPS の計測方法

Windows の場合、OS に標準搭載されているパフォーマンス モニターを利用することで、アプリケーションの IO 操作の数を測定することができます。

パフォーマンス モニターは、CPU/メモリ/ディスク/ネットワークなどの OS の基本的なリソースをはじめ、Active Directory や SQL Server のようなサービスのパフォーマンスや、パフォーマンス モニターのデータ フォーマットに対応している製品のパフォーマンス データの収集が可能です。Windows 環境のパフォーマンス測定をする上で、パフォーマンス モニターは欠かせない有効なツールになります。

アプリケーションの IO 操作の測定のため、パフォーマンス モニターで監視するカウンターは以下の 3 つになります。

  • Process\IO Data Operations/sec
  • Process\IO Read Operations/sec
  • Process\IO Write Operations/sec

この 3 つのカウンターの関係は、以下の式で表すことができます。

Process\IO Data Operations/sec = Process\IO Read Operations/sec + Process\IO Write Operations/sec

IO Read Operations/sec は読み込みに関する IO 操作の数、IO Write Operations/sec は書き込みに関する IO 操作の数、IO Data Operations/sec は Read と Write の合計値になります。

Iometer が生成した IO 操作を測定する

Iometer を使って、4 KB 75% Read / 0% Random(全体の IO 操作のうち、75% を読み込み処理に、25% を書き込み処理に振り分ける設定)の負荷をサイズ 1TB の Premium SSD のディスクにかけます。この状態で Iometer が発生させている IO 操作をパフォーマンス モニターで計測すると、以下のようなグラフが表示されます。

Perfmon

Iometer で負荷のかけ方を Read 75%/Write 25% と設定し、1TB の Premium SSD の最大 IOPS である 5,000 IOPS が生成されるように負荷をかけました。パフォーマンス モニターの測定結果にも、Read 75%/Write 25% という負荷の割り振りが反映されていることが確認できます。

赤いグラフは Process\IO Data Operations/sec を示し、Iometer が発生させている全体の IO 操作の合計値である約 5,000 IOPS が記録されています。緑のグラフは Process\IO Read Operations/sec を示し、5,000 IOPS の 75% にあたる約 3,750 IOPS が読み込み処理に使われていることが記録されています。青いグラフは Process\IO Write Operations/sec を示し、5,000 IOPS の 25% にあたる約 1,250 IOPS が書き込み処理に使われていることが記録されています。

サーバー全体の IO 操作の測定方法

サーバー全体で生成されている IO 操作を測定するためには、パフォーマンス モニターの Process のカウンターから上記した 3 つのカウンターを選択する際に、監視対象に「_Total」を選択します。_Total を選択した場合、特定のプロセスではなく、サーバーで実行されている全てのアプリケーションの IO 操作を合計した値を測定します。以下は、監視対象に _Total を選択した例です。

PerfCounter

サーバーの稼働状況の傾向把握を目的としたパフォーマンス監視では、まず最初に _Total を監視してサーバー全体の IO 操作の傾向を確認します。_Total を監視することで、そのサーバーでは常に高い IO 操作が発生しているのか、特定の時間帯のみで IO 操作が多く発生しているのか等の傾向を把握することができます。

次のステップでは、高い IO 操作を生成しているアプリケーションを特定していきます。例えば、特定の時間帯でのみ IO 操作の数値が高い場合、その時間帯で実行されているアプリケーションの IO 操作を確認することで、どのアプリケーションが高い IO 性能を求めているのかを把握することができます。

この調査のためには、先ほど選んだ _Total の下に表示されている「<すべてのインスタンス>」を選択して IO 操作を測定します。<すべてのインスタンス> を選択すると、全てのアプリケーションに対して IO 操作を測定するためのカウンターが設定されます。

パフォーマンス モニターには以下のような画面が表示されます。これは Iometer で負荷をかけながら <すべてのインスタンス> の情報を測定した時の画面です。

PerfInst

「Dynamo」というアプリケーション(プロセス)が大量の IO 操作を行っており、他のプロセスの IO 操作はほぼ 0 であることが分かります。Dynamo の正体ですが、Iometer を実行した時に負荷を発生させるプロセスが Dynamo です。アプリケーションの名称は Iometer ですが、パフォーマンス モニターにはアプリケーション名ではなく、プロセス名が表示されますのでご注意ください。

ディスクの IOPS の調整

ディスクの IOPS を調整する際には、以上のような手順でアプリケーションが必要とする IO 操作の確認を繰り返し、ディスクの IOPS をチューニングしていきます。この時、パフォーマンス データを確認する期間についてですが、一週間程度はパフォーマンス状況を監視するのが良いと思います。もし月次処理などを実行するサーバーであれば、月次処理を実行する週にパフォーマンスを計測します。

これは、サーバーが忙しい時間帯・曜日の傾向を把握したり、発生した IOPS の最大値と通常運用時の IOPS を比較してギャップの測定を行うことが目的であるためです。

例えば、通常運用時は 2,000 IOPS 程度の負荷しかかかっていないサーバーで、夜間の特定の時間帯でのみに実行されるバッチ処理に 10,000 IOPS の負荷がかかっているとします。

この時、10,000 IOPS を必要とするバッチ処理が数分間で完了すれば、この数分間のためだけに Premium SSD を構成するということはせず、通常運用時の IOPS にチューニングのターゲットを合わせることでストレージ コストをおさえるという手段がとれます。

しかし、処理時間は数分間でも、1 秒の遅れが致命的になるような低レイテンシーを求める処理に対しては、数分間の処理に対して Premium SSD を用意する必要があるかもしれません。

クラウド環境では、IOPS の調整に必要なディスクの調達も短時間で容易にできます。検証環境で負荷テストを実施して実際に発生した IOPS を測定して、パフォーマンス チューニングの作業を進めることをお勧めします。

まとめ

  • アプリケーション(プロセス)の IO 操作の数を測定することで、ディスクに必要な IOPS の見積もりが可能です
  • Windows 環境の場合、IO 操作の数は OS に標準で付属されているパフォーマンス モニターで測定が可能です
  • 週次処理や月次処理などの実行タイミングを考慮し、サーバーのパフォーマンスの傾向が把握できる期間の間、IO 操作を測定します
  • IO 操作の傾向を見て、Premium SSD を採用することによるメリット、費用対効果などを検討します

関連記事

  1. Premium SSD を使ってみよう ~性能と注意点をチェック~
  2. Premium SSD を使ってみよう ~IOPS とスループットの関係~
  3. Premium SSD を使ってみよう ~システムが生成する IOPS の計測方法~(本記事)
  4. Premium SSD を使ってみよう ~ボトルネックの原因がディスクなのかどうかを特定する~