1. 캐시 메모리란?
CPU와 메인 메모리 RAM 사이에서 데이터 접근 속도를 향상시키기 위해 사용되는 고속 메모리
- CPU는 작업을 수행할 때 필요한 데이터를 메인 메모리에서 가져와야 함
- 하지만 메인 메모리의 속도가 CPU보다 훨씬 느려 CPU의 성능을 저하시킬 수 있음
- 자주 사용되는 데이터를 미리 캐시 메모리에 저장하여 CPU가 빠르게 접근할 수 있도록 함
캐시 메모리의 위치
- CPU 내부 또는 외부에 존재할 수 있음
- 일반적으로 L1, L2는 CPU 내부, L3는 최근 CPU에서는 내부에 포함됨
- 일부 서버용 CPU는 L3를 외부에 배치하기도 함
- CPU는 L1 → L2 → L3 순서로 캐시를 탐색함
2. 캐시 메모리 성능
2.1 Hit Ratio (캐시 적중률)
CPU가 원하는 데이터가 캐시에서 발견되는 비율
$$
\text{Hit Ratio} = \frac{\text{Hit 횟수}}{\text{Hit 횟수 + Miss 횟수}}
$$
- 캐시 Hit: CPU가 원하는 데이터가 캐시에 존재할 때 발생
- 캐시 Miss: CPU가 원하는 데이터가 캐시에 없을 때 발생
2.2 캐시 Miss의 종류
- Compulsory Miss (필수 미스): 해당 데이터가 처음 캐시에 로드될 때 발생
- Conflict Miss (충돌 미스): 서로 다른 데이터가 같은 캐시 블록을 공유해야 할 때 발생
- Capacity Miss (용량 미스): 캐시 공간이 부족하여 기존 데이터를 교체해야 할 때 발생
3. 지역성(Locality)
CPU가 자주 사용할 것으로 예상되는 일부 데이터를 캐시에 저장하는 원리
3.1 시간 지역성 (Temporal Locality)
- 한 번 참조된 데이터는 잠시 후 다시 참조될 가능성이 높음
- 예시: 반복문 실행
3.2 공간 지역성 (Spatial Locality)
- 참조된 데이터 근처에 있는 데이터가 잠시 후 사용될 가능성이 높음
- 예시: 배열 순회
3.3 캐시 라인 (Cache Line)
- CPU는 데이터를 바이트 단위가 아니라, 32~128바이트 크기의 캐시 라인 단위로 가져옴
- 특정 데이터 요청 시, 해당 주소가 포함된 캐시 라인을 함께 저장하여 공간 지역성을 활용
3.4 캐시 블록 크기와 성능
- 캐시 블록 크기가 크면 공간 지역성 활용 가능 → 성능 향상 가능
- 하지만 너무 크면 불필요한 데이터까지 로드 → 성능 저하 가능
- 적절한 블록 크기를 선택하는 것이 중요
4. 캐시 매핑 방식
메모리 주소를 캐시에 저장하는 방법
4.1 Direct Mapped Cache (직접 매핑)
- 각 메모리 블록이 캐시의 한 블록에만 대응
- 구조가 단순하고 구현이 쉬움
- 단점: 특정 메모리 블록들이 같은 캐시 블록을 공유해야 하므로 Conflict Miss 발생 가능
4.2 Fully Associative Cache (완전 연관 매핑)
- 캐시의 모든 블록이 임의의 메모리 블록을 저장할 수 있음
- Conflict Miss가 없음 → 높은 Hit율 제공
- 단점: 모든 블록을 검색해야 하므로 Hit 시간이 길어지고, 하드웨어 오버헤드가 큼
4.3 N-Way Set Associative Cache (N-웨이 집합 연관 매핑)
- Direct Mapped와 Fully Associative의 절충안
- 캐시를 N개의 그룹(집합)으로 나누고, 각 집합 내에서 Fully Associative 방식으로 동작
- 장점: Direct Mapped보다 높은 Hit율, Conflict Miss 발생률 낮음
- 단점: N개의 블록을 검색해야 하므로 Hit 시간이 증가하며, 하드웨어 비용이 증가할 수 있음
5. 캐시 쓰기 정책 (Write Policy)
캐시에서 데이터를 수정할 때, 메인 메모리에 언제 반영할지 결정하는 방법
5.1 Write-through (즉시 기록)
- 데이터를 캐시와 메모리에 동시에 저장
- 데이터 일관성 유지 가능
- 단점: 모든 쓰기 연산이 메모리에 반영되어 속도가 느림
5.2 Write-back (지연 기록)
- 데이터를 캐시에만 저장하고, 이후에 메모리에 반영
- 성능 향상 가능
- 단점: 캐시와 메모리 간 데이터 불일치 문제 발생 가능 → 정합성을 유지하는 추가적인 정책 필요
6. 캐시 교체 알고리즘 (Cache Replacement Policy)
캐시가 가득 찼을 때, 어떤 데이터를 제거하고 새로운 데이터를 저장할지 결정하는 방법
6.1 FIFO (First In First Out)
- 가장 먼저 들어온 데이터를 먼저 제거
- 단점: 오래된 데이터가 자주 사용될 경우 Hit율이 저하될 수 있음
6.2 LRU (Least Recently Used)
- 가장 오랫동안 사용되지 않은 데이터를 제거
- 지역성 원리에 적합하여 실제 시스템에서 많이 사용됨
- 단점: 각 블록의 사용 시간을 추적해야 하므로 하드웨어 비용 증가
6.3 LFU (Least Frequently Used)
- 가장 적게 사용된 데이터를 제거
- 단점: 최근에 많이 사용된 데이터라도 빈도가 낮으면 제거될 가능성이 있음
6.4 Random (무작위 교체)
- 임의의 데이터를 선택하여 교체
- 장점: 구현이 단순하고, 일부 상황에서는 LRU보다 성능이 나을 수도 있음
- 단점: Hit율이 낮아질 가능성이 있음
7. 결론
- 캐시 메모리는 CPU와 메인 메모리 간 속도 차이를 줄이기 위한 중요한 기술
- Hit Ratio를 높이는 것이 캐시 설계의 핵심 목표
- 지역성을 적극 활용하여 성능을 최적화하는 것이 중요
- 적절한 매핑 방식, 쓰기 정책, 교체 알고리즘을 선택하는 것이 시스템 성능에 큰 영향을 미침