Premium Storage を使ってみよう ~ボトルネックになっているのはディスクですか?~

Facebooktwittermail

アプリのパフォーマンスが出ない、ディスクが怪しい?

Premium Storage の話、最終回です。一回目は概要の話、二回目は IOPS とスループットの話、三回目はアプリと IO に関する話、今回はディスクのレスポンスに関する話です。

アプリのパフォーマンスが出ないという相談を受ける際、「ディスクが怪しいと思ってるんですけど、どうやって調べたら良いですかね?」という質問を受けることが多々あります。ディスクがボトルネックになっているかどうかは、ディスクのレスポンス タイムを確認することで判断できます。今回はその方法について書いてみます。

ディスクのレスポンス タイムを確認してみよう

前回の記事では、Performance Monitor を使ってプロセスが使用する IO を測定する方法を紹介しましたが、Performance Monitor でディスクのレスポンス タイムも確認することができます。レスポンス タイムを確認する際には以下のカウンターを使います。

  • LogicalDisk\Avg. Disk sec/Read
  • LogicalDisk\Avg. Disk sec/Write

 

もしくは

  • PhysicalDisk\Avg. Disk sec/Read
  • PhysicalDisk\Avg. Disk sec/Write

 

同じカウンターが論理ディスク(LogicalDisk)と物理ディスク(PhysicalDisk)に対してそれぞれ用意されていて、「Avg. Disk sec/Read」はディスクの平均読み取り時間、「Avg. Disk sec/Write」はディスクの平均書き込み時間になります。今回は LogicalDisk の方を使います。例えば、1 本の論理ディスクが 10 本の物理ディスクで構成されているような場合、LogicalDisk のカウンターから得られるデータと PhysicalDisk のカウンターから得られるデータは異なるので注意してください。アプリからは論理ディスクの単位でディスクを参照しますが、ディスクのボトルネックを調査する時には、最終的には論理ディスクを構成する物理ディスクを個別に調査するケースもあります。

Iometer で実験してみよう

Iometer を使って、4 KB 100% Read / 0% Random の負荷を Premium Storage のディスクにかけながら、LogicalDisk\Avg. Disk sec/Read の測定をしてみます。この時、5,000 IOPS が出るまできっちり回します。結果は以下の通り。

perf20150701

Performance Monitor で得られる数字ですが、最新の値(Last)、平均値(Average)、最小値(Minimum)、最大値(Maximum)が取得できます。この例では 0.002 と表示されていますが、これはディスクの読み取りに関するレスポンス タイムが 2ms であることを意味しています。今回の実験では、Premium Storage に Iometer で 5,000 IOPS まで負荷をかけた場合、ディスクが平均 2ms 以下で応答してくれることが確認できました。

レスポンス タイムはどれくらいだと問題ないと言えるの?

今回の実験では 2ms 以下のレスポンス タイムという結果が得られましたが、2ms って速いのか?遅いのか?という話をします。

マイクロソフトの製品の場合、ディスクのレスポンス タイムに関するガイドラインを提供しています。例えば以下のような情報が公開されています。

サーバーのパフォーマンスを測定する
https://technet.microsoft.com/ja-jp/magazine/2008.08.pulse.aspx

Windows 環境の場合、一般的にはレスポンス タイムは 25ms を下回る数値が許容できる値になります。25ms を超えるとディスクのパフォーマンスについて見直す必要があります。ですが、25ms という数値はあくまで目安です。例えば、SQL Server に超高速なレスポンスを求めるという要件がある場合、10ms 以下のレスポンス タイムを目標にディスクのチューニングを行うケースもあります。

また、日中の業務時間は 25ms 以下におさまっているけど、夜間のバックアップ ジョブを実行すると、一時的にレスポンス タイムが 100ms を超える、というようなケースはよくあります。レスポンス タイムが 100ms を超えることで、バックアップ ジョブが期待通りの時間内に終了しないというようなケースではディスクのパフォーマンスの見直しが必要になりますが、バックアップの負荷が日中の業務に影響を与えないレベルであれば、バックアップ ジョブ実行時のレスポンス タイムは例外的に許容する、というケースも多くあります。ご自身のシステム要件に応じて、ディスクのレスポンス タイムの期待値を設定してみてください。

そういうわけで、Premium Storage の 2ms というレスポンス タイムは、一般的なしきい値から見たら相当速いと言うことができます。

Premium Storage を使った場合、使わない場合の比較

上の実験は、Azure VM の DS4 Standard + Premium Storage で実施しました。同じ実験を、Azure VM の D4 Standard + Standard Storage(10 本の VHD を、記憶域プールを使って 1 本の論理ディスクとして構成)でも実施してみました。結果は以下の通り。以下は Iometer の画面ですが、赤い枠で囲った部分が注目ポイントです。

  • DS4 Standard + Premium Storage の結果(平均レスポンス タイム 1.76ms、最大レスポンス タイム 12.1ms)

psio20150701

  • D4 Standard + Standard Storage の結果(平均レスポンス タイム 10.5ms、最大レスポンス タイム 168.3ms)

sio20150701

負荷は、両方のケースで 5,000 IOPS が出るようにかけていますが、レスポンス タイムが異なります。

全体的に D4 Standard + Standard Storage の方が遅いです。Standard Storage を利用した場合、平均レスポンス タイムは 10ms をちょっと超えるという結果です。この数字は許容範囲ではないかと思いますが、最大レスポンス タイムの 168.3ms は許容できないかもしれません。Premium Storage を使用した場合には、最大レスポンス タイムが 12.1ms という値になっており、ディスクへの負荷がスパイクした場合でもレスポンス タイムがそこそこ速いという結果になります。

Premium Storage を使った場合と使わない場合とでは、IOPS の数値は同じ結果が得られていますが、ディスクのレスポンス タイムは異なります。システム要件とコストのバランスを見ながら、構築しようとするシステムに適したディスクは何か?というところを探ってみるのがポイントになります。

まとめ

  • アプリで期待したパフォーマンスが出ない時、それがディスクのせいかどうかを確認するためには、ディスクのレスポンス タイムを測定する
  • ディスクのレスポンス タイムの測定には Performance Monitor を使う
  • 一般的な Windows 環境では、 レスポンス タイムが 25ms を超えない状態が望ましい
  • 同じ IOPS が得られても、Premium Storage と Standard Storage とではレスポンス タイムが異なるので、求める条件に適したディスクを選択する

 

Premium Storage の記事を計四回書きましたが、このシリーズは今回で終了です。また Premium Storage で違うネタが見つかったら記事を追加していきます。

Facebooktwittermail