title: Memory Hierarchy
date: 2025-06-21
category: circuit
tags: [memory-hierarchy, cache, SRAM, DRAM, latency, bandwidth, locality]
Memory Hierarchy
개요
컴퓨터 시스템에서 프로세서와 저장 장치 사이의 속도 차이(Processor-Memory Gap)는 수십 년간 컴퓨팅 아키텍처의 핵심 과제였다. 레지스터는 수 피코초(ps) 내에 접근 가능하지만, 메인 메모리(DRAM)는 수십 나노초(ns), 저장 장치는 수 마이크로초(µs) 이상이 소요된다. Memory Hierarchy는 이 속도 차이를 완화하기 위해 다양한 속도와 용량을 가진 저장 계층을 구조화한 것이다. 빈도 높은 데이터는 빠르고 작은 저장소에, 빈도 낮은 데이터는 느리고 큰 저장소에 배치하여 시스템 전체 성능을 극대화한다. 본 문서는 메모리 계층의 구조, 각 계층의 특성, Locality 원리, 그리고 캐시 메모리의 동작 원리를 분석한다.
메모리 계층은 단순히 빠른 저장소를 위에 두는 구조가 아니다. 지역성(Locality), 평균 접근 시간(AMAT), 캐시 미스 패널티, 쓰기 정책, 멀티코어 공유 범위를 함께 맞춰야 실제 성능이 나온다. 같은 DRAM 용량이라도 캐시 크기와 연관도, 프리페치 방식, 메모리 컨트롤러 스케줄링에 따라 체감 성능이 크게 달라지며, 현대 시스템은 L1/L2/L3 캐시와 NUMA, CXL 메모리, SSD까지 포함한 넓은 의미의 계층 구조로 해석된다.
핵심 개념
메모리 계층 구조
현대 컴퓨터 시스템의 전형적인 메모리 계층:
| 계층 | 저장 매체 | 접근 시간 | 용량 | 비트당 비용 | 특징 |
|---|---|---|---|---|---|
| L1 Cache | SRAM | ~1 ns | 수십 KB | 매우 높음 | 프로세서 내장, 가장 빠름 |
| L2 Cache | SRAM | ~3-10 ns | 수백 KB~수 MB | 높음 | 프로세서 내장 또는 근접 |
| L3 Cache | SRAM | ~10-30 ns | 수 MB~수십 MB | 중간 | 공유 캐시 (멀티코어) |
| Main Memory | DRAM | ~50-100 ns | 수 GB~수 TB | 낮음 | 메모리 컨트롤러 관리 |
| Secondary Storage | SSD (NAND) | ~10-100 µs | 수백 GB~수 TB | 매우 낮음 | 비휘발성, NAND 플래시 |
| Tertiary Storage | HDD | ~5-10 ms | 수 TB | 극히 낮음 | 기계식, 대용량 아카이브 |
Locality 원리
메모리 계층의 효율성은 지역성(Locality) 원리에 기반한다:
그림 1. 시간적·공간적 지역성 개념
| 지역성 유형 | 정의 | 예시 |
|---|---|---|
| 시간적 locality (Temporal) | 한번 접근된 주소는 곧 다시 접근될 가능성이 높음 | 반복문, 함수 호출 |
| 공간적 locality (Spatial) | 한번 접근된 주소의 인접 주소가 곧 접근될 가능성이 높음 | 배열 순회, 순차 코드 실행 |
| 순서적 locality (Sequential) | 코드가 순차적으로 실행되는 경향 | 일반적인 프로그램 흐름 |
| 분기 locality (Branch) | 분기 경로가 반복되어 같은 코드 블록이 자주 선택됨 | 조건문, 루프 백엣지 |
SRAM vs DRAM 비교
| 항목 | SRAM (Static RAM) | DRAM (Dynamic RAM) |
|---|---|---|
| 셀 구조 | 6 트랜지스터 (6T) | 1 트랜지스터 + 1 커패시터 (1T1C) |
| 속도 | 매우 빠름 (~1 ns) | 상대적으로 느림 (~50 ns) |
| 밀도 | 낮음 (셀 크기 큼) | 높음 (셀 작음) |
| 비용 | 높음 | 낮음 |
| 전력 | 정적 전력 소비 있음 | 리프레시 필요 (동적) |
| 용도 | 캐시 메모리 | 메인 메모리 |
| 리프레시 | 불필요 | 주기적 리프레시 필요 (~64 ms) |
캐시 메모리 동작 원리
캐시는 메모리 계층에서 가장 중요한 구성 요소로, 작은 빠른 메모리에 자주 사용되는 데이터의 복사본을 유지한다:
그림 2. 캐시 히트/미스 동작 흐름
캐시 매핑 방식
| 방식 | 설명 | 장점 | 단점 |
|---|---|---|---|
| Direct Mapped | 각 메모리 블록이 캐시의 정확히 한 위치에만 매핑 | 구현 단순, 빠름 | 충돌 미스 빈발 |
| Fully Associative | 메모리 블록이 캐시의 임의 위치에 매핑 가능 | 충돌 미스 최소화 | 비교 회로 복잡, 느림 |
| Set Associative | N-way로 그룹화 (보통 2~16-way) | 구현 복잡도와 성능의 절충 | 중간 복잡도 |
캐시 교체 정책
캐시가 가득 찼을 때 어떤 블록을 교체할지 결정하는 정책:
| 정책 | 설명 | 특징 |
|---|---|---|
| LRU (Least Recently Used) | 가장 오래전에 사용된 블록 교체 | 가장 일반적, N-way에서 구현 |
| FIFO | 가장 먼저 들어온 블록 교체 | 구현 단순 |
| Random | 무작위 블록 교체 | 구현 매우 단순, 예측 불가능 |
| LFU (Least Frequently Used) | 가장 적게 사용된 블록 교체 | 빈도 기반, 카운터 필요 |
쓰기 정책 (Write Policy)
| 정책 | 설명 | 장점 | 단점 |
|---|---|---|---|
| Write-Through | 캐시와 메모리를 동시에 기록 | 일관성 보장, 구현 단순 | 메모리 쓰기 병목 |
| Write-Back | 캐시에만 기록, 캐시 블록 교체 시 메모리에 기록 | 쓰기 성능 향상 | 일관성 관리 복잡 |
| Write-Allocate | 쓰기 미스 시 블록을 캐시에 로드 후 기록 | 지역성 활용 | 추가 로드 오버헤드 |
| No-Write-Allocate | 쓰기 미스 시 메모리에 직접 기록 | 쓰기 병목 최소화 | 캐시 활용도 감소 |
멀티레벨 캐시 구성
| 항목 | 설명 |
|---|---|
| Private cache | 특정 코어 전용 캐시. L1에서 흔하며 지연 시간이 짧다. |
| Shared cache | 여러 코어가 공유하는 캐시. L3에서 흔하며 용량 효율이 높다. |
| Inclusive | 상위 계층의 블록이 하위 계층에도 반드시 존재한다. |
| Exclusive | 상위 계층과 하위 계층이 같은 블록을 중복 저장하지 않는다. |
| NINE | 포함/배타 규칙을 강제하지 않는 구성이다. |
캐시 미스 유형
| 유형 | 의미 | 대표 원인 |
|---|---|---|
| Compulsory miss | 처음 접근해서 생기는 미스 | cold start, 최초 로드 |
| Capacity miss | 캐시 용량이 작업 집합보다 부족할 때 발생 | working set 과다 |
| Conflict miss | 매핑 충돌로 생기는 미스 | direct-mapped, 낮은 associativity |
| Coherence miss | 다른 코어의 갱신으로 무효화된 라인을 다시 불러올 때 발생 | 멀티코어 공유 데이터 |
비교/분석
평균 접근 시간 (AMAT)
$$AMAT = Hit\ Time + Miss\ Rate \times Miss\ Penalty$$
캐시 계층은 히트 시간을 줄이는 것만으로 끝나지 않는다. 상위 계층에서의 미스가 하위 계층으로 내려갈 때 패널티가 급격히 커지므로, 히트율과 미스 패턴을 함께 봐야 한다. L1 미스가 L2 히트로 끝나는지, L2 미스가 DRAM까지 내려가는지에 따라 전체 지연이 크게 달라진다.
메모리 계층 성능 비교
| 항목 | L1 Cache | L2 Cache | L3 Cache | DRAM | SSD | HDD |
|---|---|---|---|---|---|---|
| 지연 시간 | ~1 ns | ~3-10 ns | ~10-30 ns | ~50-100 ns | ~10-100 µs | ~5-10 ms |
| 대역폭 | ~1 TB/s | ~500 GB/s | ~200 GB/s | ~50 GB/s | ~5 GB/s | ~200 MB/s |
| 용량 | 32-128 KB | 256 KB-1 MB | 2-64 MB | 4-128 GB | 256 GB-4 TB | 1-20 TB |
| 집적도 | 낮음 | 중간 | 중간 | 높음 | 매우 높음 | 극히 높음 |
| 비용/비트 | 매우 높음 | 높음 | 중간 | 낮음 | 매우 낮음 | 극히 낮음 |
| 휘발성 | Yes | Yes | Yes | Yes | No | No |
메모리 기술 발전 추세
| 시대 | 기술 | 주요 특징 |
|---|---|---|
| 1970s | SRAM/DRAM 탄생 | 최초의 반도체 메모리 |
| 1990s | DDR DRAM | 더블 데이터 레이트 |
| 2000s | Multi-level Cell (MLC) NAND | 셀당 2비트 저장 |
| 2010s | DDR4/DDR5, 3D NAND | 고대역폭, 수직 적층 |
| 2020s | HBM, CXL 메모리 | 고대역폭, 이기종 메모리 |
메모리 병목 문제
프로세서와 메모리 사이의 속도 차이는 메모리 병목(Memory Wall) 문제를 야기한다:
- 프로세서 성능: 매년 ~50% 향상
- 메모리 성능: 매년 ~10% 향상
- 결과: 메모리 접근이 프로세서 성능의 제약 요소로 부상
해결 방안:
- 캐시 계층 확대: 더 크고 빠른 캐시
- 멀티채널 메모리: 병렬 메모리 접근
- 프리페치: 예측 기반 사전 데이터 로드
- 메모리 압축: 적은 공간에 더 많은 데이터
- 비동기 메모리: 메모리 접근과 연산 동시 수행
동작 원리
캐시 라인 (Cache Line)
캐시는 고정 크기 블록인 캐시 라인 단위로 데이터를 관리한다:
캐시 주소 = Tag + Index + Offset
- Tag: 메모리 주소의 상위 비트, 캐시 블록 식별
- Index: 캐시 세트 선택
- Offset: 캐시 라인 내 바이트 위치
일반적인 캐시 라인 크기: 64바이트 (현대 프로세서)
캐시 접근 과정
- Tag 비교: 요청된 주소의 Tag와 캐시의 Tag를 병렬 비교
- Index 선택: 주소의 Index 비트로 캐시 세트 선택
- Valid 검사: Valid 비트가 1인지 확인
- Hit/Miss 판정: Tag 일치 + Valid = Hit, 그 외 = Miss
- 데이터 반환: Hit 시 캐시 라인에서 Offset 위치의 데이터 반환
메모리 인터리빙 (Memory Interleaving)
메모리 대역폭을 향상시키기 위해 여러 메모리 뱅크를 병렬로 접근:
- 비트 인터리빙: 인접 비트가 다른 뱅크에 분산
- 워드 인터리빙: 인접 워드가 다른 뱅크에 분산
- 뱅크 인터리빙: 여러 뱅크를 독립적으로 접근 가능
프리페치 (Prefetching)
| 방식 | 설명 | 장점 | 단점 |
|---|---|---|---|
| 하드웨어 프리페치 | 프로세서가 자동으로 다음 블록 로드 | 프로그래머 부담 없음 | 정확도 제한 |
| 소프트웨어 프리페치 | 프로그래머가 명시적 명령 삽입 | 정확한 타이밍 가능 | 프로그래밍 복잡도 증가 |
| Stride 프리페치 | 일정 간격 접근 패턴 예측 | 배열 순회에 효과적 | 불규칙 패턴에 약함 |
| PPB (Prefetch Prefetch Buffer) | 프리페치된 데이터를 별도 버퍼에 유지 | 프리페치 실패 시에도 성능 유지 | 추가 하드웨어 필요 |
장단점
| 장점 | 단점 |
|---|---|
| 프로세서-메모리 속도 차이 완화 | 캐시 미스 시 오버헤드 발생 |
| 시스템 전체 비용 절감 (적은 고속 메모리 사용) | 캐시 일관성 관리 복잡 |
| 프로그래머에게 투명한 성능 향상 | 캐시 크라시(cache thrashing) 위험 |
| 다양한 응용에 유연한 구성 가능 | 커다란 데이터 구조에서 캐시 효율 저하 |
| 기존 시스템과의 호환성 유지 | 메모리 분할로 인한 내부 단편화 |
관련 기술
관련 문서
- CPU Cache Architecture: 캐시 계층, 일관성, 프리페치 설계
- Virtual Memory: 페이지 폴트와 저장 계층 하강
- Memory Controller: DRAM 접근 스케줄링 및 대역폭 관리
- ECC Error Correction: 메모리 오류 정정과 신뢰성
- NVMe Architecture: SSD 계층의 고속 인터페이스
- DDR Generation Comparison: DRAM 세대별 구조와 대역폭 변화
- HBM Generation Comparison: 고대역폭 메모리 계층 비교
참고 자료
- Hennessy & Patterson, Computer Architecture: A Quantitative Approach
- Agner Fog, The microarchitecture of Intel and AMD CPUs
- Wikipedia: Memory hierarchy, Cache hierarchy, Cache replacement policies
핵심 정리
메모리 계층은 프로세서와 저장 장치 사이의 속도 차이를 완화하기 위해 속도와 용량이 다른 저장 계층을 구조화한 것이다. SRAM 캐시(1-30 ns), DRAM 메인 메모리(50-100 ns), SSD(10-100 µs), HDD(5-10 ms) 순으로 속도가 감소하고 용량과 비용 효율이 향상된다. Locality 원리(시간적·공간적)는 캐시의 효율성에 기여하며, 캐시 매핑 방식(Direct, Fully Associative, Set Associative)과 교체 정책(LRU, FIFO, Random)은 캐시 성능을 결정하는 핵심 요소이다. 메모리 병목(Memory Wall) 문제는 프로세서와 메모리의 비대칭적 성장으로 인해 지속적으로 악화되고 있으며, 캐시 계층 확대, 프리페치, 메모리 압축 등의 기술로 대응하고 있다.