캐시 메모리란?
- 속도가 빠른 장치와 느린 장치에서 속도 차이에 따른 병목 현상을 줄이기 위한 메모리
- 빠른 응답 시간을 위해 자주 액세스하는 정보를 저장하는 데 사용되는 데이터 저장소 유형
- 메인 메모리와 CPU 사이에 위치하며, 메모리 계층 구조에서 레지스터 다음으로 상위에 위치
- CPU의 속도에 버금갈 만큼 메모리 계층에서 가장 속도가 빠르지만, 용량이 적고 비쌈
캐싱(caching) : 컴퓨터의 처리 성능을 높이기 위한 기법
캐시 메모리 구성
블록
데이터의 기본 단위인 워드의 집합
데이터 메모리
메모리의 데이터들이 저장된 블록
태그 메모리
데이터 메모리의 블록을 탐색할 정보
태그 메모리의 엔트리는 데이터 메모리 블록과 쌍을 이루면서 태그, 유효 비트, 갱신 비트를 포함
- 태그(tag) : CPU가 요청한 데이터를 탐색하는데 사용할 주소의 일부. 캐시 블록 주소에서 인덱스로 사용되지 않는 부분
- 유효 비트(valid bit) : 캐시 블록이 유효한 데이터인지 나타냄
- 갱신 비트(dirty bit) : 캐시로 블록을 가져온 후 CPU가 블록을 수정했는지 나타냄
캐시 메모리 동작
- CPU가 캐시에 주소 전송 > 태그 메모리 탐색 > 일치하는 태그 발견 (hit) > 블록 상태 갱신(필요할 경우) >데이터 메모리에서 블록 추출 > 요청받은 데이터 선택 > 캐시가 CPU에 데이터 전송
- CPU가 캐시에 주소 전송 > 태그 메모리 탐색 > 일치하는 태그 없음(miss) > 주소를 메모리로 전송해 대응하는 블록을 캐시에 저장 > 요청받은 데이터 선택 > 캐시가 CPU에 데이터 전송
캐시 메모리 수준
메인 메모리에서 자주 사용하는 프로그램과 데이터를 저장해 두어 속도를 향상시키기에 CPU가 어떤 데이터를 원하는지 예측할 때 사용
속도와 크기에 따라 분류
L1
- 일반적으로 프로세서 자체에 내장 (CPU 내부에 존재)
- 최근에 다시 요청될 가능성이 가장 높은 최근에 사용된 명령이나 데이터를 저장
- 다른 유형의 스토리지에 비해 속도가 매우 빠름
- 일반적으로 L1 캐시부터 먼저 사용되며 여기서 데이터를 찾지 못하면 L2 이동
L2
- CPU와 RAM 사이에 존재
- 프로세서에 필요할 수 있는 추가 정보를 저장하는 외부 구성 요소
- 레벨 1보다 약간 느리지만 필요한 경우 여전히 빠른 액세스를 제공
L3
- 메인보드에 존재
- 프로세서에 필요할 수 있는 추가 정보를 저장하는 외부 구성 요소
- 레벨 1보다 약간 느리지만 필요한 경우 여전히 빠른 액세스를 제공
듀얼 코어 프로세서의 캐시 메모리
각 코어마다 독립된 L1 캐시 메모리를 가지고, 두 코어가 공유하는 L2 캐시 메모리가 내장
캐시의 지역성(Cache Locality)
캐시 메모리의 성공 여부
데이터에 대한 접근이 시간적 혹은 공간적으로 가깝게 발생
캐시의 적중률(Hit rate)을 극대화하여 캐시가 효율적으로 동작하기 위해 사용되는 성질
지역성의 전제조건, 프로그램은 모든 코드나 데이터를 균등하게 접근하지 않음
시간 지역성
- 최근에 사용했던 데이터가 재참조될 가능성이 높음
- ex) for나 while 같은 반복문에 사용하는 조건 변수
공간 지역성
- 최근에 사용했던 데이터와 인접한 데이터가 참조될 가능성이 높음
- ex) A[0], A[1]과 같은 연속 접근 배열
지역성은 어디까지나 경향에 대한 것이므로 항상 캐시의 높은 적중률을 보장해주지는 않음
캐시에 데이터를 저장할 때는, 이러한 참조 지역성(공간)을 최대한 활용하기 위해 해당 데이터뿐만 아니라, 옆 주소의 데이터도 같이 가져와 미래에 쓰일 것을 대비
적중과 실패
CPU가 데이터 가져오는 과정 : 캐시 메모리 > 메모리 > 보조기억장치
캐시메모리가 있는 컴퓨터 시스템은 CPU가 메모리에 접근하기 전 먼저 캐시 메모리에서 원하는 데이터 존재 여부를 확인
Cache Hit : CPU가 요청한 데이터가 캐시에 있음
Cache Miss : CPU가 요청한 데이터가 캐시에 없음
적중률(hit ratio)
요청한 데이터를 캐시메모리에서 찾을 확률
캐시 메모리의 성능은 적중률에 의해 결정
적중률 = 캐시 메모리의 적중 횟수 / 전체 메모리의 참조 횟수
실패율
캐시 메모리의 실패 횟수를 전체 메모리 참조 횟수로 나눈 값
(1 - 적중률)
예시
- 캐시 적중일 때 : 캐시 메모리의 데이터를 CPU 레지스터에 복사
- 캐시 실패/메모리 적중일 때 : 메모리의 데이터를 캐시 메모리에 복사, 캐시 메모리의 복제된 내용을 CPU 레지스터에 복사
- 캐시, 메모리 실패일 때 : 보조 기억장치에서 필요한 데이터를 메모리에 복사, 메모리에 복제된 내용을 캐시 메모리에 복제, 캐시 메모리의 복제된 데이터를 CPU 레지스터에 복제
캐시 미스(Cache Miss)
프로세서가 캐시에서 데이터를 찾았으나 찾지 못할 때 (CPU가 참조하려는 데이터가 캐시 메모리에 없음)
캐시 누락 횟수가 많으면 시스템 메모리 관리에 문제가 있거나 시스템에 더 많은 RAM을 설치해야 함
캐시 크기를 키워서 해결할 경우 캐시 접근속도가 느려지고 파워를 많이 먹음
Compulsory Miss
특정 데이터에 처음 접근할 때 발생
해당 메모리 주소를 처음 호출
Capacity Miss
캐시 메모리에 공간이 부족 해서 발생
Conflict Miss
캐시 메모리에 A데이터와 B데이터를 저장해야되는데, A와 B가 같은 캐시 메모리 주소에 할당 되어 발생
캐싱 라인 (Caching Line)
캐시 메모리는 메인 메모리에 비해 크기가 매우 작기 때문에 메인 메모리와 1:1 매칭이 불가능
캐시가 아무리 CPU에 가깝게 위치하더라도, 데이터가 캐시 내의 어느 곳에 저장되어 있는지 찾기가 어려워 모든 데이터를 순회해야 한다면 캐시의 장점을 잃기 때문에 쉽게 찾을 수 있는 구조가 필요
캐싱 라인
캐시에 데이터를 저장할 때 특정 자료구조를 사용하여 묶음으로 저장
빈번하게 사용되는 데이터의 주소들의 정보들을 기록해둔 태그들의 묶음
Direct Mapped Cache
- 메인 메모리를 일정한 크기의 블록으로 나누어 각각의 블록을 캐시의 정해진 위치에 매핑하는 방식
- 가장 간단하고 구현도 쉽지만 적중률(Hit rate)이 낮아질 수 있음
- 동일한 캐시 메모리에 할당된 여러 데이터를 사용할 때 충돌이 발생
Fully Associative Cache
- 캐시 메모리의 빈 공간에 마음대로 주소를 저장하는 방식
- 저장 과정은 매우 간단함
- 원하는 데이터가 있는지 찾을 경우 모든 태그를 병렬적으로 검사(특정 캐시 Set 안에 있는 모든 블럭)
- CAM이라는 특수한 메모리 구조를 사용하므로 복잡하고 비용이 높음
Set Associative Cache
- Direct Mapping과 Full Associative Mapping의 장점을 결합한 방식
- 빈 공간에 마음대로 주소를 저장하되, 미리 정해둔 특정 행에만 저장
- Direct에 비해 검색 속도는 느리지만 저장이 빠르고 Full에 비해 저장이 느리지만 검색은 빠름
- 주로 사용되는 방식
https://woozzang.tistory.com/155
https://zion830.tistory.com/46