라이트스루 vs 라이트백 캐시: 차이점 설명

쓰기 정책은 CPU가 캐시에 있는 데이터에 쓸 때 어떻게 처리할지를 결정합니다. 라이트스루(write-through) 캐시는 캐시와 메인 메모리를 동시에 갱신하므로 메모리가 항상 최신이지만 쓸 때마다 메모리 트래픽이 발생합니다. 라이트백(write-back) 캐시는 캐시만 갱신하고 해당 라인에 더티 표시를 한 뒤, 라인이 축출될 때 나중에 메모리에 씁니다. 라이트백은 더 빠르고 대역폭을 덜 쓰지만 일관성을 유지하기가 더 복잡합니다.

비교 항목라이트스루라이트백
쓰기 정책모든 쓰기가 캐시와 다음 메모리 계층 양쪽으로 전달쓰기는 캐시만 갱신하고 더티 비트를 설정. 메모리는 축출 시 갱신
메모리 트래픽높음: 모든 쓰기가 밖으로 나감더 낮음: 한 라인에 대한 반복 쓰기가 한 번의 라이트백으로 병합됨
쓰기 속도보조 장치가 없으면 더 느림. 쓰기 버퍼가 지연의 대부분을 숨겨 줌더 빠름: 쓰기가 캐시 속도로 완료됨
메모리와의 일관성메모리가 항상 최신이므로 DMA 및 다른 코어와의 공유가 단순해짐라인이 라이트백되기 전까지 메모리가 오래된 값일 수 있어 코히어런스에 더 주의해야 함
복잡도단순함더 복잡함: 더티 비트, 축출 시 라이트백, 코히어런스 프로토콜
축출 비용저렴함: 쓸 것이 없음더티 라인을 축출하면 메모리에 추가 쓰기가 발생
일반적인 쓰기 미스 정책No-write-allocateWrite-allocate
대표 용도일부 L1 캐시와 단순하거나 신뢰성을 중시하는 시스템대부분의 현대 CPU 캐시, 특히 L2와 L3

수치는 대략적인 자릿수 기준이며, 공정 세대와 제품에 따라 달라져요.

상황별 선택 기준

라이트스루
쓰기 대역폭보다 단순함과 항상 최신인 메모리가 더 중요할 때.
라이트백
성능이 중요할 때, 특히 같은 라인에 여러 번 쓰는 코드의 경우.

자주 묻는 질문

더티 비트란 무엇인가요?

라이트백 캐시에서 각 캐시 라인에 붙어 해당 라인이 수정되었음을 표시하는 비트입니다. 더티 라인은 축출될 때 메모리에 다시 써야 합니다.

라이트백이 더 빠른 이유는 무엇인가요?

같은 라인에 대한 반복 쓰기가 캐시에 머물다가 메모리에 대한 한 번의 쓰기로 병합되어 메모리 트래픽이 줄어들기 때문입니다.

쓰기 버퍼는 어떤 역할을 하나요?

라이트스루 캐시에서 메모리로 가는 쓰기를 대기열에 넣어, 프로세서가 쓰기가 끝나기를 기다리지 않아도 되게 합니다.

멀티코어에서는 어느 쪽이 더 단순한가요?

라이트스루입니다. 메모리가 항상 최신이기 때문입니다. 라이트백은 메모리가 오래된 값일 수 있어 코히어런스 프로토콜 같은 추가적인 주의가 필요합니다.

이해도 확인

캐시의 쓰기 방식 중 라이트백 방식의 설명으로 올바른 것은?

  1. A캐시에는 쓰지 않고 주기억장치만 갱신한다
  2. B쓰기를 할 때마다 캐시와 주기억장치를 반드시 모두 갱신한다
  3. C먼저 캐시만 갱신하고, 그 데이터가 캐시에서 밀려날 때 주기억장치에 다시 쓴다
정답과 해설 보기

정답: C. 먼저 캐시만 갱신하고, 그 데이터가 캐시에서 밀려날 때 주기억장치에 다시 쓴다

라이트백 방식에서는 쓰기를 캐시에만 수행하고, 갱신된(더티) 라인이 밀려날 때 한꺼번에 주기억장치에 다시 씁니다. 같은 위치에 대한 여러 번의 쓰기가 1회의 되쓰기로 끝나므로 주기억장치로의 통신량이 크게 줄어들어 많은 CPU의 L1~L3에서 사용됩니다. 대신 주기억장치와 캐시의 내용이 일시적으로 어긋나므로 코히런시나 DMA와의 일관성 관리가 필요합니다.

메모리 계층 구조 문제 풀기

주요 용어 설명

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

관련 비교