この記事は更新から24ヶ月以上経過しているため、最新の情報を別途確認することを推奨いたします。
本記事の説明の前提として、仮想マシン上の 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 の部分のみでカバーされます。)
また、ホストの障害が発生しても、書き込んだデータはディスク上に保持されることになりますので、堅牢性という観点では「読み取り/書き込み」キャッシュよりも優れる、という解釈となります。