仮想マシンとディスクのパフォーマンス

適用対象: ✔️ Linux VM ✔️ Windows VM ✔️ フレキシブル スケール セット ✔️ 均一スケール セット

この記事では、Azure 仮想マシン (VM) とマネージド ディスクのパフォーマンス制限がどのように相互作用するかを説明します。 また、ディスク I/O のボトルネックを診断し、記憶域のパフォーマンスを最適化する方法についても説明します。

Azure VM とマネージド ディスクのパフォーマンス制限がどのように相互に作用するか

Azure VM には、1 秒あたりの入出力操作 (IOPS) と、VM の種類とサイズに基づくスループットの制限があります。 マネージド OS ディスクとデータ ディスクには、独自の IOPS とスループットの制限があります。

ディスクの割り当てとパフォーマンス

Azure VM に接続されているディスクでは、3 つの I/O パスが使用されます。 次の図は、Azureがこれらのパス全体で 1 秒あたりの帯域幅と入出力操作 (IOPS) をリアルタイムで割り当てる方法を示しています。

ディスクと VM のネットワーク制限を通過するキャッシュされていないマネージド ディスク I/O の図。キャッシュされた I/O では SSD の制限も使用されますが、キャッシュ ヒットと一時ディスク I/O ではサーバー SSD が使用されます。

1 番目の I/O パスは、キャッシュされないマネージド ディスクのパスです。 I/O 操作では、マネージド ディスクを使用していて、ホスト キャッシュを none に設定するときに、このパスが使用されます。 このパスを使用する I/O 操作は、ディスク レベルのプロビジョニングと、IOPS とスループットのための VM ネットワーク レベルのプロビジョニングに基づいて実行されます。

2 番目の I/O パスは、キャッシュされるマネージド ディスクのパスです。 キャッシュされるマネージド ディスクの I/O では、VM に近い SSD が使われます。 この SSD には専用の IOPS とスループットがプロビジョニングされ、図では "SSD レベルのプロビジョニング" と示されています。

キャッシュされたマネージド ディスクが読み取りを開始すると、要求は最初にデータがサーバー SSD 内にあるかどうかの確認を実行します。 データが存在しない場合は、キャッシュ・ミスが発生します。 その後、SSD レベルのプロビジョニング、ディスク レベルのプロビジョニング、IOPS とスループットのための VM ネットワーク レベルのプロビジョニングに基づいて I/O が実行されます。

サーバー SSD が、サーバー SSD に存在するキャッシュされた I/O で読み取りを開始すると、キャッシュ ヒットが発生します。 その場合、I/O は SSD レベルのプロビジョニングに基づいて実行されます。 キャッシュされたマネージド ディスクへの書き込みは、常にキャッシュ ミス時と同じパスをたどります。 SSD レベル、ディスク レベル、VM ネットワーク レベルのプロビジョニングを行います。

3 番目のパスは 、一時ディスク用です。 一時ディスクをサポートする VM でのみ使用できます。 このパスを使う I/O 操作は、IOPS とスループットの SSD レベルのプロビジョニングに基づいて実行されます。

次の図は、これらの制限の例を示しています。 このシステムでは、SSD とネットワーク レベルの制限のため、キャッシュされるかどうかにかかわらず、Standard_D2s_v3 VM が P30 ディスクで可能な 5,000 IOPS を達成することはできません。

P30 ディスクのパフォーマンスを 3,200 IOPS、キャッシュされていない I/O の場合は 32 MBps、キャッシュされた I/O の場合は 4,000 IOPS、キャッシュされた I/O の場合は 32 MBps に制限するStandard_D2s_v3 VM の図。

Azure は、ディスク トラフィックに優先ネットワーク チャネルを使います。 ディスク トラフィックは、優先順位の低いネットワーク トラフィックより優先されます。 この優先順位付けは、ネットワークの競合が発生した場合にディスクが期待されるパフォーマンスを維持するのに役立ちます。

同様に、Azure Storage では、自動負荷分散により、リソースの競合やその他の問題がバックグラウンドで処理されます。 Azure Storage は、ディスクの作成時に必要なリソースを割り当て、リソースの事前と事後の分散を適用してトラフィック レベルを処理します。 この動作により、ディスクは期待される IOPS とスループットの目標をいっそう確実に維持できます。 VM レベルとディスク レベルの メトリック を使用してパフォーマンスを追跡し、必要に応じてアラートを設定します。

ディスク I/O の上限

仮想マシンまたは接続されているディスクに割り当てられているものを超える IOPS またはスループットが要求された場合、アプリケーションのパフォーマンスは上限に達します。 上限に達した場合、アプリケーションのパフォーマンスは最適とはいえません。 この状態は、待機時間の増加など、悪影響を及ぼす可能性があります。 次の例では IOPS を使用しますが、スループットにも同じロジックが適用されます。

ディスク レベルの上限設定の例:

  • Standard_D8s_v3
    • キャッシュされない IOPS:12,800
  • E30 OS ディスク
    • IOPS:500
  • 2 台の E30 データ ディスク × 2
    • IOPS:500

3 つの E30 ディスクに分割された 10,000 IOPS 要求の図。それぞれが 500 IOPS に制限され、1,500-IOPS 応答が返されます。

仮想マシンで実行されるアプリケーションで、仮想マシンに 10,000 IOPS を必要とする要求を行います。 Standard_D8s_v3 仮想マシンは最大 12,800 IOPS を実行できるため、VM でそのすべてが可能です。

10,000 IOPS 要求は、異なるディスクに対する 3 つの異なる要求に分割されます。

  • オペレーティング システム ディスクに 1,000 IOPS が要求されます。
  • 各データ ディスクに 4,500 IOPS が要求されます。

接続されているディスクはすべて E30 ディスクであり、500 IOPS のみを処理できます。 そのため、それぞれ 500 IOPS で応答します。 接続されたディスクによってアプリケーションのパフォーマンスが制限され、1,500 IOPS しか処理できません。 Premium SSD P30 ディスクなどのパフォーマンスが高いディスクを使用した場合、アプリケーションが 10,000 IOPS のピーク パフォーマンスで動作する可能性があります。

仮想マシンの I/O 上限

VM レベルの上限設定の例:

  • Standard_D8s_v3
    • キャッシュされない IOPS:12,800
  • P30 OS ディスク
    • IOPS:5,000
  • 2 台の P30 データ ディスク x 2
    • IOPS:5,000

Standard_D8s_v3 VM によって上限が 12,800 IOPS である 3 つの P30 ディスクに対する 15,000 IOPS 要求の図。

仮想マシンで実行されるアプリケーションで、15,000 IOPS を必要とする要求を行います。 残念ながら、Standard_D8s_v3 仮想マシンは 12,800 IOPS を処理するようにのみプロビジョニングされています。 アプリケーションで仮想マシンの制限による上限が発生し、割り当て済みの 12,800 IOPS を割り当てる必要があります。

要求された 12,800 IOPS は、異なるディスクに対する 3 つの異なる要求に分割されます。

  • オペレーティング システム ディスクに 4,267 IOPS が要求されます。
  • 各データ ディスクに 4,266 IOPS が要求されます。

接続されているディスクはすべて P30 ディスクであり、5,000 IOPS を処理できます。 そのため、要求された量で応答します。

仮想マシンのキャッシュ時および非キャッシュ時の上限

Premium Storage と Premium Storage キャッシュの両方に対応した仮想マシンでは、2 つの異なるストレージ帯域幅の制限があります。 例として、Standard_D8s_v3 仮想マシンを見てみましょう。 Dsv3 シリーズと Standard_D8s_v3 に関するドキュメントを次に示します。

  • [リモート ストレージ] の "キャッシュされない" ディスク データは、仮想マシンが処理できる既定のストレージの上限になります。 16 個のディスク、12,800 個のキャッシュされていない IOPS、192 MBps のスループット、16,000 IOPS と 400 MBps のバースト制限を示すStandard_D8s_v3リモート ストレージの制限のスクリーンショット。

  • ホスト キャッシュを有効にした場合、[ローカル ストレージ] タブの "キャッシュされる" ディスク データは、個別の制限になります。 1 つの 64 GiB 一時ディスク、200 GiB キャッシュ、16,000 キャッシュ IOPS、128 MBps キャッシュ スループットを示す、Standard_D8s_v3ローカル ストレージの制限のスクリーンショット。

ホスト キャッシュの構成

ホスト キャッシュは、書き込みまたは読み取りを迅速に実行できるストレージを VM の近くに配置することで機能します。 ホスト キャッシュ用に VM で使用できるストレージの容量は、ドキュメントに記載されています。 たとえば、Standard_D8s_v3 には 200 GiB のキャッシュ ストレージが備わっていることがわかります。

仮想マシンを作成してディスクをアタッチするときに、ホスト キャッシュを有効にすることができます。 また、既存の VM 上のディスクに対するホスト キャッシュをオンまたはオフにすることもできます。 既定では、キャッシュ対応データ ディスクではキャッシュが有効になっていません。 キャッシュ対応 OS ディスクは、読み取り/書き込みキャッシュが有効になります。

OS ディスクの読み取り/書き込みキャッシュ、1 つのデータ ディスクの読み取り専用キャッシュ、および別のデータ ディスクの読み取り/書き込みキャッシュを示すAzureポータル ディスク設定のスクリーンショット。

各ディスクのワークロードの要件に合うように、ホスト キャッシュを調整できます。 ホスト キャッシュを次のように設定できます。

  • 読み取り専用:読み取り操作のみを行うワークロードの場合
  • 読み取り/書き込み: バランスの取れた読み取り操作と書き込み操作を行うワークロードの場合

ワークロードがこれらのパターンのいずれにも該当しない場合は、ホスト キャッシュを使用しないことをお勧めします。

読み取り専用ホスト キャッシュ

次の例は、ホスト キャッシュを 読み取り専用に設定した場合の I/O 要求のフローを示しています。

読み取り専用ホスト キャッシュのセットアップ例:

  • Standard_D8s_v3
    • キャッシュされた IOPS: 16,000
    • キャッシュされない IOPS:12,800
  • P30 データ ディスク
    • IOPS:5,000
    • ホスト キャッシュ: 読み取り専用です。

読み取りが実行されたとき、必要なデータがキャッシュで利用可能になっている場合は、要求されたデータがキャッシュから返されます。 ディスクから読み取る必要はありません。 この読み取りは、VM のキャッシュ制限にカウントされます。

P30 データ ディスクにアクセスせずにホスト キャッシュによって処理されるStandard_D8s_v3読み取り要求の図。

読み取りが実行されたときに、必要なデータがキャッシュで利用可能になって "いない" 場合、読み取り要求はディスクに中継されます。 その後、ディスクはそれをキャッシュと VM の両方で利用できるようにします。 この読み取りは、VM の未キャッシュ制限と VM のキャッシュ制限の両方にカウントされます。

Standard_D8s_v3 VM からホスト キャッシュを経由して P30 データ ディスクに流れるキャッシュ ミス読み取りを示す図。応答はキャッシュ経由で返されます。

書き込みが実行された場合、書き込みが完了したと見なされるには、キャッシュとディスクの両方に書き込まれている必要があります。 この書き込みは、VM の未キャッシュ制限と VM のキャッシュ制限にカウントされます。

Standard_D8s_v3 VM からホスト キャッシュを経由して P30 データ ディスクに到達し、完了するまでの読み取り専用ホスト キャッシュによる書き込みの図。

読み取り/書き込みホスト キャッシュ

次の例は、ホスト キャッシュを 読み取り/書き込みに設定した場合の I/O 要求のフローを示しています。

読み取り/書き込みホスト キャッシュのセットアップ例:

  • Standard_D8s_v3
    • キャッシュされた IOPS: 16,000
    • キャッシュされない IOPS:12,800
  • P30 データ ディスク
    • IOPS:5,000
    • ホスト キャッシュ: 読み取り/書き込み

読み取り/書き込みホスト キャッシュでは、キャッシュヒット読み取りは VM のキャッシュされた制限にカウントされます。 キャッシュ ミス読み取りは、VM のキャッシュされた制限とキャッシュされていない制限の両方に対してカウントされます。 書き込みの処理方法は異なります。書き込みでは、完了と見なされるためにホスト キャッシュのみに到達する必要があります。 その後、キャッシュが定期的にフラッシュされる際に、その書き込みは遅延的にディスクへ書き込まれます。 f/syncまたは fua コマンドを発行して、フラッシュを強制することもできます。 書き込みは、キャッシュに書き込まれた時点でキャッシュ I/O として計上され、ディスクに遅延書き込みされた時点で非キャッシュ I/O として計上されます。

ホスト キャッシュで完了し、P30 データ ディスクに遅延して書き込まれる読み取り/書き込みホスト キャッシュを含む書き込みの図。

キャッシュ制限の例

次の例では、ホスト キャッシュが有効な Standard_D8s_v3 VM と、接続された 3 つの P30 ディスクを使用します。 VM には 16,000 IOPS のキャッシュ制限があり、各 P30 ディスクは 5,000 IOPS を処理できます。

Cached-limit のセットアップ例:

  • Standard_D8s_v3
    • キャッシュ済み IOPS: 16,000
    • キャッシュされない IOPS:12,800
  • P30 OS ディスク
    • IOPS:5,000
    • ホスト キャッシュ: 読み取り/書き込み
  • 2 台の P30 データ ディスク x 2
    • IOPS:5,000
    • ホスト キャッシュ: 読み取り/書き込み

ホスト キャッシュを介して 16,000 IOPS 要求を完了するStandard_D8s_v3 VM の図。1 つの P30 OS ディスクと 2 つの P30 データ ディスクに遅延的に書き込みます。

アプリケーションにより、キャッシュが有効な Standard_D8s_v3 仮想マシンが使用されます。 16,000 IOPS で要求を行います。 要求は、キャッシュへの読み取りまたは書き込みが行われるとすぐに完了します。 その後、接続されたディスクへの遅延書き込みが行われます。

未キャッシュ制限とキャッシュ制限の組み合わせ

仮想マシンのキャッシュ制限と未キャッシュ制限は切り離されています。 この分離は、VM に接続されている一部のディスクでホスト キャッシュを有効にしながら、他のディスクでホスト キャッシュを有効にしないことを意味します。 この構成により、仮想マシンはキャッシュされた制限の合計ストレージ I/O とキャッシュされていない制限を取得できます。

次の例は、Premium SSD がアタッチされたStandard_D8s_v3 VM でキャッシュされた制限とキャッシュされていない制限がどのように連携するかを示しています。

キャッシュされた制限とキャッシュされていない制限の組み合わせのセットアップ例:

  • Standard_D8s_v3
    • キャッシュ済み IOPS: 16,000
    • キャッシュされない IOPS:12,800
  • P30 OS ディスク
    • IOPS:5,000
    • ホスト キャッシュ: 読み取り/書き込み
  • 2 台の P30 データ ディスク x 2
    • IOPS:5,000
    • ホスト キャッシュ: 読み取り/書き込み
  • 2 台の P30 データ ディスク x 2
    • IOPS:5,000
    • ホスト キャッシュ: 無効

15,000 個のキャッシュされた IOPS を 3 つの P30 ディスクに、10,000 個のキャッシュされていない IOPS を 2 つの P30 データ ディスクに送信することで、25,000 IOPS を満たす Standard_D8s_v3 VM の図。

この例で、Standard_D8s_v3 仮想マシンで実行されているアプリケーションにより、25,000 IOPS の要求を行います。 要求は、アタッチされている各ディスクに 5,000 IOPS として分割されます。 3 台のディスクではホスト キャッシュが使用されており、2 台のディスクではホスト キャッシュが使用されていません。

  • ホスト キャッシュが使用されている 3 台のディスクはキャッシュ制限である 16,000 の範囲内であるため、それらの要求は正常に完了します。 ストレージ パフォーマンスの上限に達することはありません。
  • ホスト キャッシュが使用されていない 2 台のディスクは非キャッシュ制限である 12,800 の範囲内であるため、それらの要求も正常に完了します。 上限は適用されません。