ライトスルーとライトバックの違い:キャッシュの書き込み方式を比較

書き込みの方式は、CPUがキャッシュにあるデータへ書き込んだときに、何をするかを決めます。ライトスルーのキャッシュは、キャッシュとメインメモリを同時に更新するので、メモリはいつも最新ですが、書き込みのたびにメモリへの通信が発生します。ライトバックのキャッシュは、キャッシュだけを更新してラインにダーティの印を付け、そのラインが追い出されるときに、あとからメモリへ書き込みます。ライトバックは、速く、帯域も少なくて済みますが、整合性を保つのが複雑になります。

項目ライトスルーライトバック
書き込みの方式書き込みのたびに、キャッシュと次のメモリの階層の両方へ書く書き込みはキャッシュだけを更新してダーティビットを立て、メモリの更新は追い出し時
メモリのトラフィック多い。書き込みのたびに外へ出る少ない。同じラインへの繰り返しの書き込みが、1回のライトバックにまとまる
書き込みの速度何もしないと遅い。ライトバッファが遅れの多くを隠す速い。書き込みはキャッシュの速度で終わる
メモリとの整合性メモリがいつも最新なので、DMAやほかのコアとの共有が簡単ラインが書き戻されるまでメモリが古いことがあるので、コヒーレンシにより注意が必要
複雑さ単純複雑。ダーティビット、追い出し時のライトバック、コヒーレンシのプロトコル
追い出しのコスト安い。書き込むものがないダーティなラインの追い出しには、メモリへの書き込みが1回余分にかかる
書き込みミスの方針通常はノーライトアロケート通常はライトアロケート
主な用途一部のL1キャッシュ、単純なシステムや信頼性を重視するシステム現代のほとんどのCPUのキャッシュ、特にL2とL3

数値は代表的な目安で、世代や製品によって異なります。

どんなときに使うか

ライトスルー
書き込みの帯域よりも、単純さと、いつも最新のメモリが重要なとき。
ライトバック
性能が重要なとき。特に、同じラインに何度も書き込むコードで効果が大きいです。

よくある質問

ダーティビットとは何ですか?

ライトバックのキャッシュで、各ラインに付く、変更されたことを示すビットです。ダーティなラインは、追い出されるときに、メモリへ書き戻す必要があります。

なぜライトバックのほうが速いのですか?

同じラインへの繰り返しの書き込みがキャッシュに残り、メモリへの1回の書き込みにまとまるので、メモリのトラフィックが減るからです。

ライトバッファは何をしますか?

ライトスルーのキャッシュで、メモリへの書き込みを待ち行列に入れて、プロセッサが完了を待たなくて済むようにします。

複数のコアでは、どちらが簡単ですか?

ライトスルーです。メモリがいつも最新だからです。ライトバックは、メモリが古いことがあるので、コヒーレンシのプロトコルなど、より注意が必要です。

理解度チェック

キャッシュの書き込み方式で、ライトバック方式の説明として正しいものはどれか。

  1. Aキャッシュには書き込まず、主記憶だけを更新する
  2. B書き込みのたびに、キャッシュと主記憶の両方を必ず更新する
  3. Cまずキャッシュだけを更新し、そのデータがキャッシュから追い出されるときに主記憶へ書き戻す
答えと解説を見る

正解:C. まずキャッシュだけを更新し、そのデータがキャッシュから追い出されるときに主記憶へ書き戻す

ライトバック方式では書き込みはキャッシュだけに行い、更新済み(ダーティ)のラインが追い出されるときにまとめて主記憶へ書き戻します。同じ場所への何度もの書き込みが1回の書き戻しで済むため、主記憶への通信量が大幅に減り、多くのCPUのL1〜L3で使われます。代わりに主記憶とキャッシュの内容が一時的に食い違うため、コヒーレンシやDMAとの一貫性の管理が必要です。

ライトスルー方式のキャッシュで、書き込みバッファを設ける主な目的はどれか。

  1. A主記憶への書き込みの完了を待たずに、CPUが次の処理に進めるようにするため
  2. Bキャッシュの中のデータを主記憶より新しい状態に保つため
  3. C書き込みでミスしたラインを、必ず先に主記憶からキャッシュへ読み込んでから書くため
答えと解説を見る

正解:A. 主記憶への書き込みの完了を待たずに、CPUが次の処理に進めるようにするため

ライトスルー方式では書き込みのたびに主記憶にも書くため、そのまま完了を待つとCPUが頻繁に止まります。書き込みバッファに書き込みを一時的にためておけば、CPUはすぐに次の命令へ進み、バッファが裏で主記憶へ書き出します。キャッシュを主記憶より新しく保つのはライトバック方式の性質で、ライトスルーではむしろ両者が一致します。ミスしたラインを読み込むかどうかはライトアロケートの選択で、書き込みバッファとは別の話です。

ライトバック方式のキャッシュで、各ラインに付けるダーティビットの役割として正しいものはどれか。

  1. Aそのラインのデータが有効で読み出せるかどうかを示す
  2. B書き換えられ、主記憶と内容が違うことを示す
  3. Cそのラインに最後にアクセスした時刻を示す
答えと解説を見る

正解:B. 書き換えられ、主記憶と内容が違うことを示す

ライトバック方式では書き込みをキャッシュだけで済ませるため、主記憶の内容が古くなったラインができます。ダーティビットはそのラインが書き換えられたことを示し、追い出すときにダーティなラインだけを主記憶へ書き戻せば済むようにします。書き換えていないラインはそのまま捨てられるので、無駄な書き込みを減らせます。ラインが有効かどうかを示すのは有効ビットで、アクセスの順番はLRUなどの置き換え用の情報で管理します。

  1. 同じラインに何度も書き込む処理で、ライトスルー方式よりライトバック方式の方が有利になる主な理由はどれか。

メモリ階層と性能の練習問題へ

関連する用語の解説

ライトスルー方式
キャッシュへの書き込みと同時に、下の階層(主記憶など)にも書き込む方式。下の階層が常に最新に保たれるが書き込みの通信量が多く、書き込みバッファと組み合わせて使う。
キャッシュメモリ
CPUの近くに置く高速・小容量のメモリ。よく使うデータを保持して主記憶との速度差を緩和する。主にSRAMでつくられる。
キャッシュコヒーレンシ
マルチコアのCPUで、各コアのキャッシュに同じアドレスのデータがあるとき、その内容の一貫性を保つ仕組み。あるコアが書き換えると、他のコアの古いコピーを無効にするなどして実現する。
キャッシュライン
キャッシュと下の階層の間でデータを読み書きする単位。キャッシュブロックともいう。多くのCPUでは64バイトで、アドレスの下位ビットがライン内の位置(オフセット)を表す。

関連する比較