Study/Memory, SSD, RAM

캐시 (Write Back vs Write Through)

로버트 E.O. 스피드왜건 2026. 1. 19. 16:16

1. 읽기(Read)는 평화롭지만, 쓰기(Write)는 전쟁이다

데이터를 읽는 건 간단합니다. 그냥 복사해 오면 끝이니까요. 하지만 데이터를 고치는(Write) 순간, 족보가 꼬이기 시작합니다.

  • 상황: CPU(레지스터)가 A = 1을 A = 2로 바꿨습니다.
  • 캐시: A = 2로 업데이트됨.
  • RAM: 여전히 A = 1임.
  • 문제: 불일치(Inconsistency) 발생! 누군가 지금 RAM을 읽으면 옛날 데이터를 가져가게 됩니다.

이 문제를 해결하는 두 가지 정책이 있습니다.


2. 정책 1: Write Through (직통 쓰기) - "겁쟁이 전략"

  • 동작: CPU가 캐시에 쓸 때, 동시에 RAM에도 씁니다.
  • 장점: 캐시와 RAM의 데이터가 항상 똑같습니다(일관성 유지). 아주 안전하죠.
  • 치명적 단점: 느려 터졌습니다.
    • 캐시에 쓰는 건 1ns면 되는데, RAM에 쓰는 100ns를 기다려야 끝납니다.
    • 결국 RAM 속도로 하향 평준화가 되어버립니다. 비싼 캐시를 산 보람이 없죠.

3. 정책 2: Write Back (나중에 쓰기) - "게으른 천재 전략"

  • 동작: CPU는 캐시에만 A = 2라고 쓰고, "완료!"를 외칩니다. RAM에는 안 씁니다.
    • 대신 캐시 데이터 옆에 "Dirty Bit (더러운 비트)"를 1로 체크해 둡니다.
    • 의미: "이 데이터는 수정되었음. 원본(RAM)이랑 다름. 건드리지 마셈."
  • 언제 RAM에 쓰나?
    • 나중에 캐시가 꽉 차서 이 데이터를 쫓아내야 할 때(Eviction), 그때 Dirty Bit를 확인하고 RAM에 몰아서 씁니다.
  • 장점: 엄청나게 빠릅니다. CPU는 RAM 속도를 기다릴 필요가 없습니다.
  • 위험성: 데이터를 RAM에 옮겨 적기 전에 전원이 팍 꺼지면?
    • 캐시(SRAM)는 휘발성이라 데이터가 날아갑니다. RAM은 영영 A = 2로 변했다는 사실을 모르게 됩니다. (데이터 손실)

4. SSD에 적용: "SSD도 거짓말을 한다"

자, 이제 이 원리를 SSD에 대입해 봅시다. 이 부분이 전자공학도로서 가장 중요하게 봐야 할 포인트입니다.

대부분의 고성능 SSD에는 DRAM(캐시)이 달려 있고, 기본적으로 Write Back 방식을 씁니다.

  1. OS: "야 SSD야, 이 1GB짜리 야동 파일 저장해." (Write 요청)
  2. SSD: (NAND Flash는 느리니까 일단 DRAM 캐시에만 후다닥 받음)
  3. SSD: "네! 저장 다 했습니다!" (Ack 신호 보냄 - 거짓말)
  4. OS: "오, 벌써? 빠르네." (사용자에게 '저장 완료' 팝업 띄움)
  5. SSD 내부: 사용자가 안 볼 때, DRAM에 있는 데이터를 느긋하게 낸드 플래시(NAND)로 옮겨 적습니다(Flush).

5. 대참사 시나리오 (Sudden Power Off)

만약 SSD가 "저장 다 했어요!"라고 뻥치고 아직 낸드에 옮겨 적고 있는데, 갑자기 정전이 된다면?

  • OS: "분명 저장됐다고 했잖아?"
  • SSD: "아... 사실 DRAM에 있었는데 전기가 끊겨서 다 날아갔슈..."
  • 결과: 파일이 깨지거나, 심하면 DB가 날아가는 대형 사고 발생.

6. 해결책: 커패시터와 Flush 명령어

그래서 엔터프라이즈(서버용) SSD나 고급 OS 설정은 대책을 세웁니다.

  1. 하드웨어 대책 (PLP - Power Loss Protection):
    • SSD 기판을 뜯어보면 **탄탈 커패시터(노란색 칩)**가 잔뜩 박혀 있습니다.
    • 전원이 툭 끊겨도, 이 커패시터에 저장된 전기로 몇 밀리초(ms) 동안 버티면서 DRAM에 있는 데이터를 낸드로 필사적으로 쏟아붓고 죽습니다.
  2. 소프트웨어 대책 (Flush / FUA):
    • 은행 거래 같은 중요한 데이터는 OS가 SSD에게 명령합니다.
    • "야, 캐시에 넣고 뻥치지 말고, 지금 당장 낸드 플래시에 박아 넣어! (Force Unit Access)"
    • 이러면 SSD는 Write Through처럼 동작해서 느려지지만, 데이터는 안전합니다.

요약

  1. Write Through: 동시에 씀. 안전하지만 RAM 속도에 발목 잡힘.
  2. Write Back: 캐시에만 쓰고 나중에 씀. 빠르지만 전원 나가면 위험함.
  3. Dirty Bit: "이 데이터는 수정됐으니 나중에 꼭 원본에 반영해야 해!"라는 표식.
  4. SSD DRAM: Write Back 캐시 역할을 해서 속도를 뻥튀기해준다.