메모리 계층 구조
Processor의 성능 개선 속도와 DRAM의 성능 개선 속도의 차이는 점점 더 커졌습니다.
성능 측정 지표
- Latency: 한 word에 접근하는데 걸리는 시간
- Access time : 요청을 읽는 데 걸리는 시간
- Cycle time : 한 사이클을 완료하는 데 걸리는 시간
- Bandwidth: How much data can be supplied per time unit
Hit time(캐시에 접근해서 데이터를 레지스토로 불러들이는 시간)보다 Miss Penalty(메모리에서 데이터를 액세스해서 가져오는데 걸리는 시간)가 매우 큼
용어 정리
Locality
종류 | 설명 | 예 |
---|---|---|
Temporal locality | 최근에 접근된 항목 중 다시 접근될 가능성이 높은 item | i++ in loop |
Spatial locality | 최근에 접근된 항목 주변의 항목들 | array data |
Block (or line)
- Block(또는 line)은 캐시에 존재하거나 존재하지 않는 최소 정보 단위입니다.
Hit Rate
Hit Rate은 메모리 계층의 특정 수준에서 찾은 메모리 액세스의 적중률을 나타냅니다.
-
Hit Time: 해당 수준에서 데이터에 액세스하는 데 걸리는 시간
→ hit / miss 판별 시간 + 블록에 액세스하는 데 걸리는 시간
Miss Rate
메모리 계층의 특정 수준에서 찾지 못한 메모리 액세스의 분수, 1 - (Hit Rate)
로 계산
- Miss Penalty: 찾지 못한 블록을 낮은 수준에서 찾아 가져와, 해당 블록으로 교체하는 데 걸리는 시간
- 낮은 수준에서 블록에 액세스하는 데 걸리는 시간
- 해당 수준으로 해당 블록을 전송하는 데 걸리는 시간
- 해당 수준에 블록을 삽입하는 데 걸리는 시간
- 블록을 요청자에게 전달하는 데 걸리는 시간
관리 주체
Hierarchy | Manager |
---|---|
registers ↔ cache | complier와 CPU |
cache ↔ main memory | cache controller hardware |
main memory ↔ disks | operating system, TLB, hardware |
캐시 매핑 방법
Direct mapped cache
Multiword block을 사용하면 spatial locality에서 이점을 얻을 수 있습니다.
Block이 너무 크면, 2가지 오류 발생 가능
-
miss penalty가 증가할 수 있음
→ miss 발생시, 메모리에서 가져오는데 걸리는 시간이 증가
-
쓸모 없는 데이터도 같이 캐시로 올리기 때문에 캐시 pollution 발생 가능
Cache field sizes
하나의 캐시 내부에는 data와 tags 비트로 이루어져 있습니다.
- Direct mapped cache
캐시의 크기가 1K word들로 이루어져 있고, 1개의 word가 한 block으로 사용된다면, 총 cache block의 개수는 1,024개입니다. 그리고 block과 word를 구분할 필요가 없으므로 block offset이 필요하지 않습니다.
그리고, 하나의 block에 하나의 word만 들어갈 수 있어서 Temporal 지역성에서만 이점을 얻을 수 있습니다. 즉, spatial 지역성은 없습니다.
- Multiword block direct mapped cache
캐시의 크기인 1K words에서 16bytes line을 나누면, 총 cache block의 개수는 256입니다.
4개의 word가 한 block으로 사용된다면, block offset은 4개를 구분하기 위해 2 bits가 필요합니다. 이 경우, multiplexer가 더 필요하기 때문에 위의 경우보다 더 느려집니다.
32-bits 주소에서 direct mapped cache는 2n개의 블럭으로 이루어져 있으므로 n개의 비트가 인덱스로 사용됩니다.
예를 들어, block의 크기가 2m words라면, m bits는 block내의 word 주소를 의미합니다. 그리고 2 bits는 word내의 byte 주소를 가리키기 위해 사용합니다.
- Block offset: block내의 word 주소(m bits)
- Byte offset: word내의 byte 주소(2 bits)
캐시 메모리의 Write 정책
- Hit시 write through와 write back으로 구분
- Miss시, write allocate와 write no allocate로 구분
Hit
Write-Through
-
cache에 데이터가 write되는 즉시, 해당 데이터를 main memory에도 write하는 정책
-
데이터를 cache에 쓰고 동시에 main memory에도 업데이트함으로써 일관성을 유지하는 방식
-
쓰기 연산이 2번 필요하므로 속도가 느림
→ 대신, cache와 memory 사이에 write-buffer을 두어 느린 속도를 보완
-
구현하기 간단
Write-Back
- cache에 쓴 위치만 업데이트, 속도가 빠름
- 처음에는 데이터를 cache에만 기록, 캐시 메모리가 새로운 데이터 블록으로 대체될 때 (다른 Tag를 가진 데이터가 캐시 블록에 할당될 때) memory에도 데이터를 저장하는 정책
- dirty bit를 사용해서, 변경된 entry만 다음 계층에 쓰기
Miss
write-allocate
- Write to a buffer, then to the cache
- Cache miss시, buffer와 cache에 모두 쓰기
- 캐시에 데이터를 쓸 때, 업데이트한 해당 tag와 data를 word에 쓰는 방식
- Read는 항상 read-allocate. read-miss가 나면, cache에 올리고 메모리에도 올려야 함
no-write-allocate
- Cache miss시, 메모리에서 가져온 데이터를 write buffer에만 쓰고 cache에는 쓰지 않음
- cache write를 생략하고 write buffer에만 쓰는 방식. 즉, miss난 데이터를 cache에 쓰지 않고 메모리에만 write
- 접근 방식에서는 Read Miss시에만 데이터가 캐시에 로드