ライトスルーとライトバックの違いとは?キャッシュの書き込み方式を図解
応用情報技術者試験のキャッシュメモリ分野では、「ライトスルー方式」と「ライトバック方式」という2つの書き込み制御方式の違いがほぼ毎回のように問われます。「どちらが速いか」だけでなく「なぜそのトレードオフが生じるのか」を仕組みから理解しておくと、応用的な出題にも対応できます。
キャッシュの書き込み方式とは何か
CPUがデータを書き込む際、キャッシュにヒットした場合でも「キャッシュだけを更新すればよいのか」「メインメモリも同時に更新すべきか」という選択が発生します。この書き込み時の制御方式には、大きく分けて次の2つがあります。
- ライトスルー方式(Write Through): キャッシュとメインメモリの両方に同時に書き込む方式
- ライトバック方式(Write Back): キャッシュにのみ書き込み、メインメモリへの反映は後回しにする方式
どちらもキャッシュメモリが存在する理由と表裏一体の話で、キャッシュとメインメモリのデータの一貫性(コヒーレンシ)をどう保つかという問題に対する、異なるアプローチだと捉えると理解しやすくなります。キャッシュそのものの構造については、以前の記事「DRAMとSRAMの違いを図解」でも触れているので、あわせて読むとキャッシュがなぜ高速なのかの背景がつながります。
ライトスルー方式:常に同期を保つ
ライトスルー方式は、CPUがキャッシュに書き込むたびに、同じデータをメインメモリにも即座に書き込みます。
- メリット: キャッシュとメインメモリの内容が常に一致しているため、データの一貫性が単純に保証される
- デメリット: 書き込みのたびにメインメモリへのアクセスが発生するため、書き込み性能はメインメモリの速度に律速される
キャッシュを介さず毎回メインメモリまでアクセスするので、「キャッシュがあるのに書き込みが速くならない」という状態になりやすいのが弱点です。この欠点を緩和するために、CPUとメインメモリの間に「ライトバッファ(ライトキュー)」を挟み、書き込み要求を一旦バッファに貯めてから非同期にメインメモリへ反映する実装もよく使われます。
ライトバック方式:キャッシュ上で完結させる
ライトバック方式は、CPUがキャッシュに書き込む際はキャッシュのみを更新し、メインメモリへの反映は「そのキャッシュラインが追い出されるとき」までまとめて遅延させます。
このとき、キャッシュとメインメモリの内容が一致していないキャッシュラインを区別するために使われるのが**ダーティビット(Dirty Bit)**です。
-
キャッシュラインが書き換えられたらダーティビットを
1に設定 -
キャッシュラインが追い出される(置き換えられる)際、ダーティビットが
1ならメインメモリへ書き戻す -
ダーティビットが
0(読み込みのみで書き換えなし)なら、メインメモリへの書き戻しは不要 -
メリット: 同じキャッシュラインへの書き込みが連続する場合、メインメモリへのアクセスを1回にまとめられるため書き込み性能が高い
-
デメリット: キャッシュとメインメモリの内容が一時的に不一致になるため、複数のCPUコアが同じメモリ領域を参照するマルチプロセッサ環境では、キャッシュコヒーレンシプロトコル(MESIなど)による整合性管理が必要になり実装が複雑になる
2方式の比較
| 観点 | ライトスルー | ライトバック |
|---|---|---|
| メインメモリへの書き込みタイミング | 書き込みのたびに即座 | キャッシュライン追い出し時にまとめて |
| 書き込み性能 | メインメモリ速度に律速され低い | キャッシュ上で完結するため高い |
| データの一貫性 | 常に一致(保証されやすい) | 一時的に不一致が生じる(ダーティビットで管理) |
| 実装の複雑さ | シンプル | ダーティビット管理・コヒーレンシ制御が必要 |
| 典型的な用途 | 一貫性を優先するシンプルなシステム | 高性能を求める現代のCPUキャッシュ全般 |
試験では「ライトバックは書き込みが速い代わりにメインメモリとの不一致が生じうる」「ライトスルーは常に一致するが書き込みが遅い」という、性能と一貫性のトレードオフの向きを逆に選ばせる引っかけがよく出ます。「どちらが速いか」と「どちらが一貫性を保ちやすいか」を対にして覚えておくのがポイントです。
実務での活かし方
ライトスルー・ライトバックの選択は、CPUの内部設計だけでなく、アプリケーション層のキャッシュ設計を考える際のヒントにもなります。
- 現代のCPUはライトバックが主流: 実際のCPUのL1/L2/L3キャッシュはほとんどがライトバック方式を採用しています。書き込み性能を重視した設計であり、マルチコア環境での整合性はMESIプロトコルなどのハードウェア機構が担っています
- アプリケーションキャッシュの設計判断への応用: Redisなどのキャッシュ層を「ライトスルー的に使うか、ライトバック的に使うか」は実務でもよく議論になります。DBへの書き込みと同時にキャッシュも更新する構成はライトスルーに近く一貫性を保ちやすい一方、キャッシュにまず書き込みバッチで後からDBに反映する構成はライトバックに近く、書き込みスループットを稼げる代わりに障害時のデータロストリスクを考慮する必要があります
- 障害時のデータ整合性: ライトバック方式的な設計では、キャッシュ層で確定させたデータが永続化層に反映される前に障害が起きるとデータを失うリスクがあります。ハードウェアのキャッシュでも突然の電源断でダーティなキャッシュラインが失われる問題は同様で、不揮発性メモリ(NVDIMMなど)や電源バックアップで対策されることがあります
試験対策のポイント
応用情報技術者試験でライトスルー・ライトバック方式が問われる際は、以下の観点が狙われやすいです。
- 各方式の書き込みタイミングの違い(即座か、追い出し時か)
- 書き込み性能とデータ一貫性のトレードオフの向き
- ダーティビットの役割(キャッシュとメインメモリの不一致を管理する仕組み)
- ライトバッファがライトスルーの弱点をどう緩和するか
- マルチプロセッサ環境でライトバックが抱える課題(キャッシュコヒーレンシ)
「性能を取るならライトバック、単純な一貫性を取るならライトスルー」という軸を軸として、ダーティビットの動きとセットで説明できるようにしておくと、応用的な出題にも対応しやすくなります。
まとめ
ライトスルー方式とライトバック方式は、キャッシュへの書き込みをいつメインメモリへ反映するかという点で異なり、それぞれ「一貫性のシンプルさ」と「書き込み性能」というトレードオフを持っています。現代のCPUキャッシュはライトバックが主流ですが、その代償としてダーティビットによる管理やマルチコア環境でのコヒーレンシ制御が必要になる、という背景まで理解しておくと、試験対策だけでなくRedisなどのアプリケーションキャッシュを設計する際の判断材料にもなります。