캐시 철학: Temporal vs. Spatial Locality
캐시(Cache)는 컴퓨터 시스템에서 자주 접근되는 데이터를 임시로 저장해두는 저장소로, 성능을 극적으로 향상시킬 수 있는 중요한 개념이다. 캐시의 핵심 철학은 지역성(Locality) 이라는 개념에 기반을 두고 있다. 지역성에는 크게 두 가지 종류가 있으며, 이를 각각 시간 지역성(Temporal Locality) 과 공간 지역성(Spatial Locality) 이라고 한다.
이 글에서는 이 두 가지 지역성의 개념과 그 철학이 어떻게 캐시 설계에 영향을 미치는지를 설명하고자 한다.
1. 시간 지역성 (Temporal Locality)
시간 지역성이란 한 번 접근된 데이터는 가까운 미래에 다시 접근될 가능성이 높다는 개념이다.
예를 들어, 루프 내에서 같은 변수를 반복적으로 참조하는 경우가 이에 해당한다.
for (int i = 0; i < 100; i++) {
sum += arr[i];
}
위 코드에서 sum
변수는 매 반복마다 접근되므로 시간 지역성을 가진다.
캐시 시스템에서는 이러한 시간 지역성을 고려하여, 최근에 접근한 데이터를 캐시에 유지함으로써 추후 재사용 시 빠르게 접근할 수 있도록 한다. Least Recently Used (LRU) 알고리즘 등은 이 시간 지역성 개념에 기반하여 캐시에서 오래된 데이터를 제거한다.
2. 공간 지역성 (Spatial Locality)
공간 지역성이란 한 번 접근된 데이터의 근처에 있는 데이터도 곧 접근될 가능성이 높다는 개념이다.
예를 들어, 배열의 연속된 요소에 접근하는 경우가 이에 해당한다.
for (int i = 0; i < 100; i++) {
total += arr[i];
}
이 경우 arr[0]
, arr[1]
, arr[2]
, ... 와 같이 순차적으로 메모리 상의 인접한 위치에 접근하므로, 공간 지역성이 높다고 할 수 있다.
이를 고려하여 캐시 메모리는 데이터를 단일 단위가 아닌 블록(block) 단위로 가져온다. 즉, arr[0]
을 가져올 때 그 근처의 arr[1]
, arr[2]
등도 함께 가져오는 방식이다. 이를 프리패칭(prefetching) 또는 캐시 라인(cache line) 개념이라고도 한다.
3. 캐시 설계에 미치는 영향
시간 지역성과 공간 지역성은 캐시 설계에 있어 매우 중요한 지침이 된다.
지역성 종류 | 캐시 전략 예시 |
---|---|
시간 지역성 | LRU 기반 캐시 정책, 재사용 우선순위 조정 |
공간 지역성 | 캐시 라인 단위 데이터 로딩, 프리패칭 |
이 두 철학을 고려하지 않은 캐시는 불필요한 캐시 미스(cache miss)를 유발하며, 시스템 성능을 오히려 저하시킬 수 있다.
4. 실생활 예시
웹 브라우저에서도 이 철학이 그대로 적용된다. 자주 방문하는 사이트의 리소스(CSS, JS 등)는 캐시에 저장되어 빠르게 로딩되고(시간 지역성), 한 페이지에서 연속적으로 불러오는 이미지들은 함께 미리 로딩되기도 한다(공간 지역성).
마치며
캐시 시스템의 효율성은 단순한 데이터 저장이 아니라, 데이터 접근 패턴의 철학적 이해에 달려 있다. 시간과 공간 지역성을 잘 이해하고 설계에 반영할수록 더 빠르고 효율적인 시스템을 구축할 수 있다.
참고 자료:
- [Computer Architecture: A Quantitative Approach – Hennessy & Patterson]
- Intel 64 and IA-32 Architectures Optimization Reference Manual
- MIT 6.004 Lecture Notes – Caching and Locality
'C# > TIL(Today I Learned)' 카테고리의 다른 글
2025-04-18 <SocketAsyncEventArgs 이해하기> (2) | 2025.04.18 |
---|---|
2025-04-18 <C# 비동기 멀티스레드 서버 구현하기> (0) | 2025.04.18 |
2025-04-03 <DotNetEnv 패키지 활용법> (0) | 2025.04.03 |
2025-04-02 <Race Condition 해소를 위한 전략> (2) | 2025.04.01 |
2025-03-24 <C# 스택 클래스와 성능 최적화> (0) | 2025.03.24 |
댓글