VM のホストキャッシュを「読み取り専用」に設定した場合の動作について

本記事の説明の前提として、仮想マシン上の OS、ホストキャッシュ、ストレージ機材上のディスクの配置関係が大まかに以下のようになっているものと考えます。

Azure VM のOS —-(X)—-> ホストキャッシュ —-(Y)—-> ディスク

OS からの ディスクへの書き込み要求が発生すると、「読み取り/書き込み」キャッシュでは以下のような動作になります。

1. I/O はホストキャッシュにデータを書き込み、即座にリターンする。(上図 X の部分)
2. その後、非同期で、ホストキャッシュからディスクへの書き込みが行われる。 (上図 Y の部分)

したがって、OS から見ると、上図 X の部分のみで I/O が完結する見た目のように なるため、I/O のレイテンシーが短縮されることになります。
他方で、Y の部分の書き込みが非同期で行われる都合上、仮にホストの障害があった場合に、キャッシュ上のデータがディスクに反映されずに失われる可能性が生じることになります。
これが、特にデータベースの使用時に注意を喚起している点です。

一方で、「読み取り専用」の場合、以下のようになります。

1. I/O はホストキャッシュにデータを書き込み、同時にディスクへも書き込みを行う。
2. ディスクへの書き込みの完了をもって、OS 側にリターンする。

つまり、書き込み I/O が完結するまでに、冒頭の X および Y の処理を経ることになり、書き込み I/O のレイテンシーは短縮されないことになります。
(その後の同じデータの読み取り I/O は、キャッシュが効いて X の部分のみでカバーされます。)

また、ホストの障害が発生しても、書き込んだデータはディスク上に保持されることになりますので、堅牢性という観点では「読み取り/書き込み」キャッシュよりも優れる、という解釈となります。

注意事項・免責事項

※技術情報につきましては投稿日時点の情報となります。投稿日以降に仕様等が変更されていることがありますのでご了承ください。

※公式な技術情報の紹介の他、弊社による検証結果および経験に基づく独自の見解が含まれている場合がございます。

※これらの技術情報によって被ったいかなる損害についても、当社は一切責任を負わないものといたします。十分な確認・検証の上、ご活用お願いたします。