캐시메모리 매핑 방식과 연관도 설계
직접 사상, 완전 연관 사상, 집합 연관 사상의 주소 대응 구조와 캐시 적중률·비용 트레이드오프를 정리한다.
2026-08-14 · 최초 발행 2026-01-16
주소의 어느 부분이 캐시 위치를 정하는가
캐시 매핑은 메인 메모리 블록을 캐시의 어느 위치에 둘 수 있는지 정하는 주소 대응 규칙이다. 메인 메모리가 캐시보다 훨씬 크기 때문에 여러 블록은 제한된 캐시 공간을 공유해야 한다. 이 규칙은 요청한 데이터의 탐색 속도, 캐시 적중률, 하드웨어 비용, 같은 위치를 두고 경쟁하는 충돌 가능성을 함께 결정한다.
주소는 보통 Tag, Index 또는 Set, Offset으로 나뉜다.
| 필드 | 역할 | 비트 수 결정 요소 |
|---|---|---|
| Tag | 같은 캐시 라인을 공유하는 블록 구분 | 전체 - Index - Offset |
| Index | 캐시 라인 또는 집합 선택 | log2(캐시 라인 수) |
| Offset | 블록 안의 특정 바이트 위치 | log2(블록 크기) |
하나의 라인으로 고정하는 직접 사상
직접 사상(Direct Mapping)에서는 메모리 블록마다 대응 가능한 캐시 라인이 정확히 하나다. 주소의 Index 비트가 그 라인을 직접 가리킨다.
캐시 라인 번호 = 메모리 블록 번호 mod 캐시 라인 수
8라인 캐시와 32블록 메모리를 예로 들면, 블록 0·8·16·24는 모두 라인 0으로 향한다.
라인을 고르는 과정은 단순하다. Index로 라인을 선택한 뒤, 그 라인에 기록된 Tag와 주소의 Tag를 비교한다.
구현은 간단하고 탐색도 빠르며 단일 비교기로 만들 수 있다. 반면, 서로 다른 블록이 같은 라인에 매핑되면 충돌이 발생한다. 이 때문에 적중률이 낮아질 수 있고, 연관성도 부족하다.
같은 라인으로 향하는 블록을 번갈아 읽는 경우에는 핑퐁 현상(Thrashing)이 나타난다.
블록 0 접근 → 캐시 적재
블록 8 접근 → 블록 0 축출, 블록 8 적재
블록 0 접근 → 블록 8 축출, 블록 0 적재 (반복)
이 접근 패턴에서는 매번 캐시 미스가 발생해 성능이 급격히 저하된다.
어느 라인에나 둘 수 있는 완전 연관 사상
완전 연관 사상(Fully Associative Mapping)은 메모리 블록을 캐시의 어느 라인에든 저장할 수 있게 한다. Index 필드는 없고, Tag는 전체 블록 주소가 된다. 특정 위치로의 강제 배치가 없으므로 충돌 미스를 최소화하지만, 요청 주소와 모든 라인의 Tag를 병렬로 비교해야 한다.
이 방식은 유연한 배치와 높은 적중률, 교체 정책의 자유도를 제공한다. 대신 CAM(Content-Addressable Memory)이 필요하며, 대규모 캐시에서는 탐색이 느려지고 비용과 전력 소모가 커질 수 있다. CAM은 일반적인 RAM과 달리 저장된 내용을 기준으로 검색하는 특수 메모리다.
집합 안에서 Way를 고르는 방식
집합 연관 사상(Set-Associative Mapping)은 직접 사상과 완전 연관 사상 사이에 놓인다. 캐시를 여러 집합(Set)으로 나누고, 메모리 블록은 하나의 특정 집합에만 대응시킨다. 다만 그 집합 안에서는 어느 라인에든 저장할 수 있다.
n-way 집합 연관 구조에서는 집합마다 n개의 라인(Way)을 두며, 2-way, 4-way, 8-way처럼 구성할 수 있다. 집합 수는 캐시 라인 수 / n이다.
Set Index로 집합을 먼저 선택하고, 선택된 집합의 Way에 들어 있는 Tag를 병렬 비교한다.
| n-way | 장점 | 단점 | 적용 사례 |
|---|---|---|---|
| 2-way | 직접 사상 대비 충돌 감소 | 2개 비교기 필요 | 임베디드 캐시 |
| 4-way | 균형 잡힌 성능과 비용 | 4개 비교기, MUX 필요 | L1 데이터 캐시 |
| 8-way | 높은 적중률 | 복잡한 교체 로직 | L2/L3 캐시 |
| 16-way | 완전 연관에 근접 | 고비용, 높은 전력 | 대형 LLC |
연관도는 적중률과 비용을 함께 바꾼다
직접 사상은 1-way 집합 연관의 특수한 경우다. 완전 연관 사상은 집합이 하나뿐인 집합 연관의 특수한 경우로 볼 수 있다.
| 특성 | 직접 사상 | 집합 연관 (n-way) | 완전 연관 |
|---|---|---|---|
| 블록 배치 | 1곳만 가능 | n곳 가능 | 어디든 가능 |
| Tag 비교 횟수 | 1회 | n회 (병렬) | 전체 라인 수 |
| 적중률 | 낮음 | 중간~높음 | 최고 |
| 하드웨어 복잡도 | 낮음 | 중간 | 높음 |
| 구현 비용 | 저렴 | 중간 | 고가 |
| 교체 정책 | 불필요 | 필요 (n개 중 선택) | 필요 |
| 충돌 미스 | 많음 | 적음 | 최소 |
연관도가 커지면 적중률은 향상되지만, 개선 폭은 계속 동일하지 않다.
일반적으로 2-way에서 4-way로 전환할 때 적중률 개선이 크며, 8-way 이상에서는 개선 폭이 줄어든다.
캐시 계층에서의 선택
현대 CPU 캐시는 계층마다 다른 연관도를 사용한다.
| CPU | L1 Data | L1 Instruction | L2 | L3 |
|---|---|---|---|---|
| Intel Core | 8-way 48KB | 8-way 32KB | 8-way 1.25MB | 12-way 30MB |
| AMD Zen 4 | 8-way 32KB | 8-way 32KB | 8-way 1MB | 16-way 32MB |
| Apple M3 | 8-way 64KB | 6-way 128KB | 16-way 4MB | 완전연관 유사 |
| ARM Cortex-A78 | 4-way 64KB | 4-way 64KB | 8-way 256KB | 16-way 4MB |
L1 캐시는 접근 속도를 우선하므로 상대적으로 낮은 연관도를 사용한다. L2/L3 캐시는 미스 페널티가 크기 때문에 높은 연관도를 적용한다.
직접 사상은 단순한 하드웨어와 빠른 탐색을 제공하지만 충돌에 취약하다. 완전 연관 사상은 배치 자유도와 적중률이 높지만 비교 회로와 비용 부담이 크다. 집합 연관 사상은 이 둘 사이의 트레이드오프를 조절하며, 현대 CPU 캐시에서 널리 사용된다.