캐시의 모든 것 1편: 캐시란 무엇이고, 왜 쓰는가#
캐시의 기본 개념부터 동작 원리까지 정리한다.
들어가며#
논문을 쓰는데 자료가 필요할 때마다 도서관에 간다고 생각해보자. 비효율적이다. 그래서 자주 보는 책은 책상 위에 둔다. 여기서 책상이 캐시고, 도서관이 메인 메모리(혹은 디스크)다.
원리는 어디에나 적용된다: - 냉장고 = 캐시, 마트 = 원본 저장소. 자주 먹는 식재료는 냉장고에 넣어둔다. - 스마트폰의 최근 앱 목록 = 캐시. 완전히 종료하지 않은 앱은 빠르게 다시 열린다. - 웹 브라우저의 페이지 캐시 = 캐시. 이전에 방문한 사이트는 더 빠르게 로드된다.
핵심은 간단하다: 자주 쓰는 데이터를 가까이 두면 빠르다.
1. 캐시의 정의#
캐시(Cache)란, 향후 요청을 더 빠르게 처리하기 위해 데이터의 사본을 더 빠른 저장소에 보관하는 하드웨어 또는 소프트웨어 구성 요소다.
핵심 키워드는 사본(copy)과 더 빠른 저장소다.
캐시에 저장된 데이터는 원본이 아니라 복사본이다. 원본은 여전히 느린 저장소에 있고, 캐시는 그 사본을 빠른 곳에 두어 접근 속도를 높인다.
참고로 "캐시(cache)"라는 단어는 프랑스어 cacher에서 왔는데, 숨기다라는 뜻이다. 실제로 캐시는 사용자에게 투명하게(transparently) 동작한다. 웹 브라우저가 이미지를 캐시에서 불러올 때, 사용자는 그 사실을 의식하지 못한다. 그냥 "빠르다"고 느낄 뿐이다.
2. 간략한 역사#
캐시의 역사는 1960년대로 거슬러 올라간다.
1963년 — 캠브리지 대학의 Atlas 2(Titan) 컴퓨터에서 초기 캐시 개념이 적용되었다.
1965년 — Maurice Wilkes가 slave memory라는 이름으로 캐시 개념을 제안한 논문을 발표한다. 지금 우리가 아는 캐시의 학술적 시작점이다.
1968년 — IBM System/360 Model 85에서 상용 컴퓨터 최초로 캐시 메모리를 탑재한다. "cache"라는 용어가 널리 퍼진 계기가 되었다.
1976년 — IBM 801 CPU에서 최초로 명령어 캐시(I-cache)와 데이터 캐시(D-cache)를 분리한다. 현대 CPU에서도 사용되는 Split L1 캐시의 시작이다.
현재 — L1/L2/L3 다단계 캐시 구조는 표준이 되었고, 1달러 미만의 마이크로컨트롤러에도 캐시가 탑재된다.
3. 왜 캐시가 필요한가#
캐시가 존재하는 이유를 이해하려면 두 가지 핵심 개념을 알아야 한다: 메모리 계층 구조와 지역성 원리.
3-1. 메모리 계층 구조 (Memory Hierarchy)#
컴퓨터의 저장 장치는 계층적으로 구성된다. 위로 갈수록 빠르고 작고 비싸며, 아래로 갈수록 느리고 크고 저렴하다.
| 계층 | 속도 | 용량 |
|---|---|---|
| 레지스터 | ~1ns | 수 KB |
| L1 캐시 | 1~4 cycle | 32~64KB |
| L2 캐시 | 3~10ns | 256KB~1MB |
| L3 캐시 | 10~30ns | 4~64MB |
| 메인 메모리 | 50~100ns | 8~64GB |
| SSD | ~100μs | 256GB~4TB |
| HDD | ~10ms | 1~20TB |
이것은 물리적 한계 때문이다. 빠른 메모리는 물리적으로 CPU에 가까이 있어야 하고, 가까이 있으려면 크기가 작아야 한다. SRAM(캐시에 사용)은 DRAM(메인 메모리)보다 훨씬 빠르지만, 같은 용량을 만드는 데 수십 배의 비용과 면적이 필요하다.
수치로 체감하기#
L1 캐시 접근(~1ns)과 HDD 접근(~10ms)의 속도 차이를 인간 시간 척도로 변환하면:
| 저장소 | 접근 시간 | 인간 척도 비유 |
|---|---|---|
| L1 캐시 | ~1ns | 1초 |
| L2 캐시 | ~5ns | 5초 |
| L3 캐시 | ~20ns | 20초 |
| 메인 메모리 | ~100ns | 1분 40초 |
| SSD | ~100μs | 약 1일 |
| HDD | ~10ms | 약 4개월 |
L1 캐시에서 데이터를 가져오는 게 1초라면, HDD에서 가져오는 건 4개월이다. 이 속도 차이가 캐시의 존재 이유다.
3-2. 지역성 원리 (Principle of Locality)#
캐시가 효과적인 이유는 프로그램이 데이터에 접근하는 패턴에 규칙성이 있기 때문이다. 이것을 지역성 원리라고 한다.
시간적 지역성 (Temporal Locality)#
최근에 접근한 데이터는 가까운 미래에 다시 접근할 가능성이 높다.
total 변수는 루프가 돌 때마다 접근된다. 한 번 캐시에 올려두면 999번은 캐시에서 빠르게 읽을 수 있다.
공간적 지역성 (Spatial Locality)#
최근에 접근한 데이터 근처의 데이터도 곧 접근할 가능성이 높다.
data[0]을 읽을 때 캐시는 data[0]만 가져오는 게 아니라, 인접한 data[1], data[2]... 등도 함께 가져온다(캐시 라인 단위). 그래서 data[1]에 접근할 때는 이미 캐시에 있어 빠르게 읽을 수 있다.
4. 캐시의 기본 동작#
4-1. Cache Hit와 Cache Miss#
캐시의 동작은 단 두 가지 경우로 나뉜다:
Cache Hit(캐시 적중): 요청한 데이터가 캐시에 있음 → 빠르게 반환
Cache Miss(캐시 미스): 요청한 데이터가 캐시에 없음 → 느린 저장소에서 가져옴
캐시 미스는 다시 세 가지로 분류된다:
| 종류 | 원인 | 설명 |
|---|---|---|
| Cold Miss (Compulsory) | 처음 접근 | 한 번도 캐시에 올라온 적 없는 데이터 |
| Capacity Miss | 용량 부족 | 캐시가 꽉 차서 오래된 데이터가 밀려남 |
| Conflict Miss | 매핑 충돌 | 다른 데이터가 같은 캐시 위치를 사용 |
4-2. 히트율과 성능 — AMAT#
캐시 성능을 측정하는 가장 중요한 지표는 히트율(Hit Rate)이다.
캐시의 성능 효과를 정량화하는 공식:
Hit Time = 1ns, Miss Penalty = 100ns라고 가정하면:
| 히트율 | Miss Rate | AMAT | 체감 속도 |
|---|---|---|---|
| 90% | 10% | 11ns | 기본 |
| 95% | 5% | 6ns | 1.8배 빠름 |
| 99% | 1% | 2ns | 5.5배 빠름 |
히트율이 90%에서 99%로, 겨우 9% 올랐을 뿐인데 성능은 5배 이상 차이가 난다.
Memory Wall 문제#
CPU의 연산 속도는 매년 빠르게 발전해왔지만, 메모리(DRAM)의 접근 속도는 상대적으로 느리게 발전해왔다. 이 격차를 Memory Wall(메모리 벽)이라 부른다.
CPU가 아무리 빨라도, 데이터를 기다리느라 놀고 있다면 의미가 없다. 캐시는 이 격차를 메우는 핵심 기술이다.
정리#
- 캐시란 자주 쓰는 데이터의 사본을 빠른 저장소에 보관하는 것
- 메모리 계층 구조에서 속도와 용량은 트레이드오프 관계
- 지역성 원리 덕분에 작은 캐시로도 높은 히트율 달성 가능
- 히트율 몇 %의 차이가 성능에 극적인 영향을 미침
다음 편 예고#
2편: CPU부터 CDN까지 — 캐시가 쓰이는 모든 곳에서는 CPU L1/L2/L3 캐시의 구조와 매핑 방식, 디스크 캐시, 웹 브라우저 캐시, CDN, Redis/Memcached 등 각 계층별 캐시를 다룬다.
참고문헌#
- Hennessy, J. L. & Patterson, D. A. (2017). Computer Architecture: A Quantitative Approach, 6th Edition. Morgan Kaufmann.
- Bryant, R. E. & O'Hallaron, D. R. (2015). Computer Systems: A Programmer's Perspective, 3rd Edition. Pearson.
- Wilkes, M. V. (1965). "Slave Memories and Dynamic Storage Allocation." IEEE Transactions on Electronic Computers, EC-14(2).
- Denning, P. J. (2005). "The Locality Principle." Communications of the ACM, 48(7).
- Wulf, W. A. & McKee, S. A. (1995). "Hitting the Memory Wall." ACM SIGARCH Computer Architecture News, 23(1).