【Azureディスク】VMのホストキャッシュ設定「読み取り専用」「読み取り/書き込み」の違い

こんにちはますのです。
AzureVMを構築後にディスク増設をした際に「ホストキャッシュ」という項目がありました。
選択肢に「なし」「読み取り専用」「読み取り/書き込み」の3つがあり、何が違うのかと良くわからなかったので調べてみました。

金額の違いというよりは、ディスクへ書き込む方法が変わるので環境によって良いもの選択してねというMicrosoft側のメッセージのように感じた次第です。

ホストキャッシュとは?

AzureVMのディスクに保存する際に、キャッシュディスクに一時的なデータを保存することが出来ます。
システムによってメリット、デメリットがあるため、設定は各自の判断で設定してねというようなものとなります。

ちなみにホストキャッシュの設定は「4TiB」未満のディスクとなります。
複数のディスクがVMにアタッチされていた場合、「4TiB」未満のディスクに関してはホストキャッシュが設定出来るようです。

すべてのディスク サイズについてホスト キャッシュを有効にするサポートはしていますか?

ホスト キャッシュ (ReadOnly および Read/Write) は、4 TiB 未満のディスク サイズでサポートされています。 つまり、4095 GiB までプロビジョニングされているすべてのディスクで、ホスト キャッシュを利用できます。 4096 GiB 以上のディスク サイズでは、ホスト キャッシュはサポートされていません。 たとえば、4095 GiB でプロビジョニングされた P50 Premium ディスクではホスト キャッシュを利用できますが、4096 GiB でプロビジョニングされた P50 ディスクではホスト キャッシュを利用できません。 VM にキャッシュされたデータでより優れたパフォーマンス向上の確認を期待することができる場合は、より小さいディスク サイズのキャッシュを活用することをお勧めします。

引用:https://docs.microsoft.com/ja-jp/azure/virtual-machines/faq-for-disks

ホストキャッシュ設定:推奨事項

Microsoftのドキュメントでは以下のような推奨事項が記載されていました。

ディスク キャッシュ設定 この設定を使用するときの推奨事項
なし 書き込み専用ディスクと書き込み負荷の高いディスクでは、ホスト キャッシュを None に構成します。
ReadOnly 読み取り専用ディスクと読み取り/書き込みディスクでは、ホスト キャッシュを ReadOnly に構成します。
ReadWrite アプリケーションが、必要に応じてキャッシュ データの永続ディスクへの書き込みを適切に処理できる場合にのみ、ホスト キャッシュを ReadWrite に構成します。

引用:https://docs.microsoft.com/ja-jp/azure/virtual-machines/premium-storage-performance#disk-caching

ふむ。よくわからん。
とりあえず図示してから考えます。

ホストキャッシュ設定:「無し」の場合

シンプル。必ず読み書きどちらにしても処理が終わったら返答を返すパターン。
ホストキャッシュが間に挟まれないパターンですね。

特徴 データディスクと直接読み書きを行う。
メリット データディスクに必ずデータが保存されてから処理結果が仮想マシンに渡される。
デメリット データの読み取りが頻繁にある場合、書き込みと読み取りでI/O負荷が上昇する。

ホストキャッシュ設定:「読み取り専用」の場合

書き込み処理の場合
①仮想マシン→ホストキャッシュ&データディスクへ処理を実施する
③ホストキャッシュ、データディスクの書き込み処理が完了後に結果を返す

読み取り処理の場合
②仮想マシン→ホストキャッシュへ処理を飛ばす
③ホストキャッシュ→仮想マシンへ処理を返す

特徴 ホストキャッシュ、データディスク共に処理が完了後に結果を返す。
メリット 「ホストキャッシュ」と「データディスク」2つの処理が完了後、仮想マシンへ処理を返す。
「ホストキャッシュ」⇔「データディスク」間でデータが一致する状態となる。
デメリット 書き込み処理のI/Oは短縮されない。

ホストキャッシュ設定:「読み取り/書き込み」の場合

書き込み処理の場合
①仮想マシン→ホストキャッシュへ書き込み処理を実施する
②ホストキャッシュ→仮想マシンへ処理結果を返す
③ホストキャッシュ→データディスクへ書き込み処理を実施する

読み取り処理の場合
①仮想マシン→ホストキャッシュへ読み取り処理を飛ばす
②ホストキャッシュ→仮想マシンへ処理結果を返す

特徴 データディスクに書き込みが完了した時点で仮想マシンへ処理結果を返す。
「ホストキャッシュ」と「データディスク」のデータ内容が異なるタイミングが発生する。
メリット 仮想マシンの書き込み、読み取り両方のI/O処理が短縮される。
デメリット ホスト障害時にキャッシュデータが消失した場合、ディスクへの反映がされずデータ消失の可能性がある。
無難な設定としては「なし」か「読み取り専用」になるのかなぁという印象です。
データベースを構築するディスクなら「読み取り専用」一択と感じた次第です。

筆者の考えまとめ

見てみたところの結論として、筆者はこう考えましたです。

  • 書き込み処理しかしないディスクの場合:なし
  • 読み書き&データ不整合が困るディスクの場合:読み取り専用
  • 読み書きでデータ不整合が許容できるディスクの場合:読み取り/書き込み
なお、本記事の内容は筆者の所感が多分に含まれるため、解釈が異なる点がある可能性があります。
あくまでも個人の見解となるためご指摘は受け付けますが、責任は負えないこと予めご容赦くださいませ。
最新情報をチェックしよう!