캐시 메모리란?
캐시 메모리는 CPU와 주 메모리(RAM) 사이에 위치한 고속의 임시 저장 장치이다.
주 목적은 자주 사용되는 데이터나 명령어를 빠르게 접근할 수 있는 위치에 저장하여 컴퓨터의 전반적인 성능을 향상시키는게 목적이다.
CPU가 매번 메모리에 방문하는 것은 시간이 오래걸리니 CPU가 사용할 일부 데이터를 미리 캐시 메모리로 가져와 활용하는것
주요 특징
- 고속 접근성:
- 캐시 메모리는 주 메모리보다 훨씬 빠른 접근 속도를 제공한다.
- 일반적으로 CPU 클럭 속도와 비슷한 속도로 작동하여 지연 시간을 최소화한다.
- 작은 용량:
- 캐시 메모리는 주 메모리에 비해 용량이 매우 작다.
- 일반적으로 수 KB에서 수 MB 정도의 크기를 가진다.
- 계층적 구조:
- 여러 레벨(L1, L2, L3)의 캐시가 존재하며, 각각 속도와 용량이 다르다.
- L1 캐시가 가장 빠르고 작으며, L3로 갈수록 더 크고 느려진다.
- 멀티코어 프로세서의 캐시 구조
- L1 캐시: 각 코어에 독립적으로 존재. 보통 데이터 캐시와 명령어 캐시로 분리됨.
- L2 캐시: 대부분의 경우 각 코어에 독립적으로 존재. L1보다 큰 용량을 가짐.
- L3 캐시: 모든 코어가 공유. 가장 큰 용량을 가지며, 코어 간 데이터 공유를 위한 중요한 역할 수행.
참조 지역성
시간 지역성
- 시간 지역성은 최근에 참조된 데이터가 가까운 미래에 다시 참조될 가능성이 높다는 원리이다.
- 상세 설명:
- 정의: 특정 데이터나 명령어가 한 번 액세스되면, 그것이 곧 다시 액세스될 가능성이 높다.
- 예시:
- 루프 카운터:
for (let i=0; i<1000; i++) 에서 변수 i는 반복적으로 액세스된다.
- 함수 호출: 자주 호출되는 함수는 그 코드가 캐시에 유지된다.
- 스택 데이터: 지역 변수와 함수 매개변수는 함수 실행 동안 자주 액세스된다.
공간 지역성
- 공간 지역성은 특정 메모리 위치가 참조되면, 그 주변 메모리 위치들도 곧 참조될 가능성이 높다는 원리이다.
- 상세 설명:
- 정의: 프로그램이 특정 메모리 주소를 참조할 때, 그 근처의 메모리 주소들도 곧 참조될 가능성이 높다.
- 예시:
- 배열 순회:
for (let i=0; i<1000; i++) { array[i] = i; }에서 array의 연속된 요소들이 순차적으로 접근된다.
- 구조체 접근: 구조체의 한 필드에 접근하면, 다른 필드들도 곧 접근될 가능성이 높다.
- 명령어 실행: CPU가 한 명령어를 실행하면, 다음 명령어들도 순차적으로 실행될 가능성이 높다.
분리형 캐시
캐시 메모리를 두 개의 독립적인 부분으로 나누어 구성하는 캐시 아키텍처이다
주로 명령어 캐시(I-Cache)와 데이터 캐시(D-Cache)로 분리된다
주요 특징
- 작동 원리
- 프로세서는 명령어를 가져올 때 I-Cache에 접근합니다.
- 데이터를 읽거나 쓸 때는 D-Cache에 접근합니다.
- 두 캐시는 동시에 접근할 수 있어 병렬 처리가 가능합니다.
- 장점
- 병렬 접근: 명령어와 데이터를 동시에 가져올 수 있어 성능이 향상됩니다.
- 특화된 최적화: 각 캐시의 특성에 맞는 최적화가 가능합니다.
- 예측 정확도 향상: 각 캐시의 접근 패턴이 더 일관되어 예측이 쉬워집니다
L1 캐시에만 분리형 캐시 방식을 선택한 이유
- 대부분의 캐시 데이터는 L1캐시에서 찾을 수 있음 (약 80-90%)
- 트레이드오프가 있음 → 복잡성 증가 대비 성능 향상이 미미할 수 있다
- 어차피 L1에서 데이터와 명령어가 필터링 된 상태인데 L2에서 또 필터링 작업을 거치는게 불필요할 수 있다
캐시 히트 & 캐시 미스
캐시 히트 : 예측한 데이터가 실제로 들어맞아 캐시 메모리 내 데이터가 CPU에서 활용될 경우
캐시 미스 : 예측이 틀려 필요한 데이터를 메모리에서 직접 가져와야 하는 경우
- 캐시 히트 :
- 작동 원리:
- 프로세서가 데이터를 요청할 때, 먼저 캐시 메모리를 확인한다
- 요청된 데이터가 캐시에 있으면, 이를 캐시 히트라고 한다
- 캐시 컨트롤러는 즉시 해당 데이터를 프로세서에 전달한다
- 성능 이점:
- 속도: 캐시 메모리는 주 메모리보다 훨씬 빠르기 때문에, 데이터 접근 시간이 크게 단축된다
- 대기 시간 감소: 프로세서가 주 메모리에 접근할 때 발생하는 대기 시간을 줄일 수 있다
- 대역폭 절약: 주 메모리와 프로세서 사이의 데이터 전송량을 줄일 수 있다
- 캐시 적중율:
- 정의: 전체 메모리 접근 중 캐시 히트가 발생한 비율
- 계산: 캐시 히트 횟수 / (히트 횟수 + 미스 횟수)
- 중요성: 높은 캐시 히트율은 시스템의 전반적인 성능 향상을 의미합니다
- 캐시 미스
- 발생 과정:
- 프로세서가 데이터를 요청할 때 먼저 캐시를 확인
- 요청된 데이터가 캐시에 없으면 캐시 미스가 발생
- 시스템은 주 메모리나 하위 레벨 캐시에서 데이터를 찾으러 가야 함
- 캐시 미스의 유형:
- 강제적 미스 (Compulsory Miss):
- 처음 접근하는 데이터로 인해 발생하는 미스
- 캐시가 비어있을 때 주로 발생
- 프로그램 실행 초기나 새로운 데이터 세트에 처음 접근할 때 주로 발생
- 용량 미스 (Capacity Miss):
- 캐시 크기의 한계로 인해 발생하는 미스
- 캐시가 모두 차있을 때 새로운 데이터를 위해 기존 데이터를 교체해야 할 때 발생