높은 레벨에서 낮은 레벨로 갈수록 저장장치는 느려지고, 값싸지고, 용량이 커짐
빠른 기술은 느린 기술보다 비싸고 용량이 작음, 또한 잘 짜여진 프로그램은 지역성이 좋음
따라서, 저장장치의 레벨을 나누고 높은 레벨의 저장장치가 낮은 레벨의 저장장치의 staging area(cache)
역할을 하게 함으로써 성능을 높일 수 있음
크고 느린 장치의 데이터에 대해 staging area
역할을 하는 작고 빠른 장치
캐시를 이용하는 과정을 caching
이라고 함
레벨 k 저장장치
는 레벨 k+1 저장장치
의 캐시 역할을 함
레벨 k, k+1 저장장치
는 동일 크기의 블록으로 파티셔닝 되어 있음
레벨 k 저장장치
는 레벨 k+1 저장장치
의 블록 일부의 복사본을 가짐
데이터는 두 레벨 사이에서 블록 크기의 전송 단위로 오고 감
hierarchy
에서 인접 레벨 pair
간 블록 크기는 고정이지만, 다른 레벨의 페어는 다른 블록 크기를 가질 수 있음
낮은 레벨의 저장장치는 접근하는 데 시간이 오래 걸리므로 블록 크기를 크게 함으로써 이를 상쇄함
프로그램이 레벨 k+1 저장장치
로부터 data object d
를 가져오려고 할 때 레벨 k 저장장치
를 먼저 탐색하게 됨
이때 레벨 k 저장장치
에 d
가 캐시되어 있으면 cache hit
라고 함
레벨 k 저장장치
에 data object d
가 저장되어 있지 않으면 cache miss
라고 함
cache miss
가 일어나면 레벨 k+1
로부터 d
가 들어 있는 블록을 가져옴
이때 레벨 k 캐시
에 자리가 없으면 이미 존재하는 블록을 덮어 쓰는데, 이를 replacing
또는 evicting
이라고 함
교체되는 블록은 victim block
이라고 부름
어떤 블록을 교체할 것인지는 캐시의 replacement policy
에 의해 결정됨 (ex. LRU replacement policy)
레벨 k 캐시
가 레벨 k+1
로부터 블록을 가져온 뒤에 프로그램은 d
를 레벨 k
에서 읽을 수 있음
empty cache(cold cache)
로 인해 발생하는 miss
warm-up
되면 더 이상 발생하지 않는 일시적인 현상data object
들을 저장할 수 있을 만큼 크지만 이들이 모두 같은
캐시 블록에 매핑됨으로써 발생하는 miss
작업 집합(working set)
보다 작을 때 발생하는 miss
phase
에 참조하는 블록들)각 레벨에서 특정 형태의 논리가 캐시를 관리해야 함 (블록으로 파티셔닝, 레벨 간 블록 전송, 캐시 히트/미스 처리)
이러한 관리는 하드웨어, 소프트웨어, 또는 이들의 조합
으로 관리됨
레지스터 파일
은 컴파일러
에 의해 관리됨
L1, L2, L3 캐시
는 완전히 캐시 내부 하드웨어 논리
에 의해 관리됨
가상 메모리 시스템
에서 DRAM 메인 메모리
는 운영체제 소프트웨어
와 CPU의 주소 변환 하드웨어(MMU)
에 의해서 관리됨
분산 파일 시스템
에서 캐시로서 사용되는 로컬 디스크
는 로컬 머신에서 작동하는 파일 시스템 클라이언트 프로세스
에 의해 관리됨