コンピュータが演算や制御の処理を行う時は、CPUがメモリのデータを読み書きします。
CPUがメモリに書き込みする時、できるだけ高速に実行したいですよね。
なぜなら、ここがボトルネックになるとコンピュータ全体が遅くなるからです。
ライトバック、ライトスルーという仕組みは、CPUがメモリにデータを効率的に書き込むためのものです。
違いは何となく分かると思うのですが、どっちがどっちか分からなくなる時がありますので、今回はその辺を正しく解説します。
なお、ライトバック、ライトスルーは「主にキャッシュメモリから主記憶装置」への書き込みの仕組みですが、RAIDなどにおいてRAIDコントローラ上のキャッシュからHDDやSSDへのディスク書込みでも使われていますので、その辺は混ぜて解説します!
ライトスルー (write through)とは?
先ずはライトスルーの説明です。
コンピュータにおいてデータが処理されると先ずはキャッシュメモリに書き込まれ、その次に主記憶装置へデータが書き込まれ、最終的にはHDDやSSDなどのディスクへの書き込みが発生します。
この場合、OSはディスクの書き込みが完了するまで次の処理を待ちます。
書き込みが完了したら次の処理を行います。
このようにキャッシュメモリからディスクへ順番(シーケンシャル)にデータを書き込んでいくため、処理は確実なのですが、ディスクへの書き込みの待ちが発生するため処理は遅くなります。
(ディスク書き込みはメモリ書き込みより圧倒的に遅い)
ライトバック (write back)とは?
続いてライトバックの説明です。
ライトスルー同様にキャッシュメモリから主記憶装置やディスクへの書き込みが発生した場合、ライトバックはキャッシュメモリにデータの書き込みが完了した時点で書き込み完了として次の処理を行ってしまいます。
キャッシュメモリから主記憶装置、ディスクへの書き込みタイミングはCPUなどの処理の負荷が下がった時点で行います。
メモリに書き込むだけで処理が完了するのでライトスルーと比較して処理は速くなります。しかし、停電やサーバの故障により、キャッシュメモリに通電がされずに、その内容がロストしてしまうと主記憶装置やディスクへ書き込む予定だった(書き込まれていない)データは当たり前のようにロストしてしまいます。
一般的に高価なRAID装置などはバッテリ装置を標準装備し停電や瞬停時にもバッテリーから電源を供給することで万が一のデータロストを防ぐようにしています。
しかし、このライトバック用のバッテリーを定期的に交換するのが意外と面倒で、コストも掛かります。UPS(無停電装置)がラック内に組み込まれていれば、停電時でもサーバに電気は供給されるので、それを考えるとバッテリーは要らないことになります。
だがしかし、そもそもバッテリーが無いとライトバック方式にできないサーバーがあったりして、これまた厄介ですね。
まとめ
今回はサーバでキャッシュメモリから主記憶装置やディスクへ効率的に書き込む二つの方式である「ライトスルー」と「ライトバック」に関して解説してきました。
ライトスルー、ライトバックのまとめ
- ライトスルー:キャッシュメモリのデータを主記憶装置やディスクへ書き込みが完了するまで次の処理を待つ
- ライトバック:キャッシュメモリのデータを主記憶装置やディスクへ書き込む前に処理を進めてしまう
- ライトバックの方が処理は速いが、データがロストするリスクも高い
覚え方としては、「ライトバック」が後(バック)からディスクへ書き込むという感じで覚えると良いと思います。
以下記事で、「キャッシュメモリにおけるヒット率とアクセス時間」に関して解説していますので、キャッシュメモリをより理解するためにもあわせて読んでみてください。
以上です!