Overview
요즘 processor의 clock speed는 external memory에 접근하는 bus speed에 비해 매우 빠른 속도를 가지고 있는데, 때문에 상대적으로 느리게 메모리에 접근하여 처리하는 동안 processor는 유휴 상태가 된다.
이와 같은 속도 차이때문에 발생하는 낭비를 막기 위해 cpu와 가까이 메모리를 위치시키고 미리 외부 메모리로 부터 data를 미리 가져옴으로써 성능을 향상하는 기법을 caching 기법이라 한다.
Memory Hierarchy
일반적으로 memory는 core와 근접해 있을수록 낮은 latency를 가지고 있어 속도면에서는 장점이 있으나 사이즈나 비용적인 측면에서 제한적이며 반대로 core와 멀어질수록 큰 size의 메모리를 구성할 수 있으나 속도 측면에서는 느린편.
이러한 trade-off 관계의 특성에서 적절하게 cache 구조를 구성하기 위해 계층구조를 구성하여 Level을 부여.
Level이 낮으면 낮을수록 Core에 가깝게 위치에 있어 접근 속도가 가장 빠름.
동작 간 L1에 먼저 접근하여 필요한 데이터가 있는지 확인하고, 없다면 이후 순차적으로 다음 level의 메모리(L2, L3...)에서 look-up을 진행
Cache
Core와 main memory사이에서 빠른 속도의 memory access를 위해 사용하는 메모리로서, 하기 두 가지 locality를 원리를 기반으로 구성
- Spatial Locality(공간적 지역성): 특정 영역의 data를 참조했을 때, 이후 참조할 data는 참조한 data의 영역 주변에 위치할 가능성이 높음.
- Temporal Locality: 접근한 메모리 영역을 짧은 시간 내에 다시 접근할 가능성이 높음.
위와 같은 원리로 main memory로부터 core에 가까운 cache에 미리 data를 복사해놔서 memory access 속도 향상
Cache 구성요소
구조
Instruction cache와 Data cache가 구분된 Harvard 구조의 I-cache와 D-cache
Instruction Cache와 Data Cache가 통합된 Unified cache
ARM cache 구조 예시
ARMv8에서는 L1 cache의 경우 I/D-cache, L2 cache의 경우 unified cache를 사용하는 구조.
(cache 구조나 size는 아키텍처 및 프로세서마다 다르므로 정확한 내용은 TRM 참고)
구성요소
Cache line
cache 구조에서 primitive한 block으로서, data와 tag 및 valid bit, dirty bit으로 구성된 logical block으로서 cache line size는 하나의 cache line에 저장할 수 있는 data의 size를 의미
Way
Set-associative cache 구조에서 같은 index를 가지면서 특정 set에 존재하는 cache line을 의미
Set
다수의 way로 구성된 cache block을 일컬음
Valid bit
해당 cache line에 유효한 data가 있음을 나타냄
Dirty bit
해당 cache line에 새로 값이 write되어 main memory와 sync가 맞지 않음을 나타내는 bit
Cache 접근 방식
cache에 대한 접근은 하기와 같이 접근하려는 address를 다음과 같이 활용한다.
Index bit
접근하려는 address에 대해 어떤 cache line에 저장되어 있는지 식별하기 위해 사용하는 값
address의 중간 부분의 bit를 사용
Offset bit
cache line 내부에 실제 어느 위치에 찾는 데이터가 저장되어 있는지 위치를 나타내는 offset으로 address의 하위 bit를 사용
cache line size가 32byte의 경우 2^5=32 즉, 5bit를 offset bit로 활용한다.
Tag bit
cache data와 함께 저장되는 memory address의 일부분으로서 address의 상위 비트를 사용하여 cache line의 data와 연관된 main memory의 주소를 식별(같은 way내에서 중복되는 index를 구별하는 역할)하는 용도.
즉, 현재 cache에 저장된 data가 실제 어느 위치의 main memory에서 copy 해온 것인지를 나타냄
대개 cache size를 나타날 때 tag를 저장하는 영역은 제외
ex) 8bit 주소체계 / cache line size: 4byte / cache block size가 8인 cache 구조 예시
- cache line size가 4이므로 cell 단위(1byte)의 접근을 위해서 4 = 2^2 / 즉 2bit를 offset bit로 사용.
- cache block은 총 8개이므로 8 = 2^3 / 3bit를 index bit로 사용.
- 나머지 상위 3bit는 tag bit으로 사용되며, cache line에 함께 저장되어 향후 중복되는 index에 대한 구별을 위해 사용.
Cache 동작
위와 같은 주소체계에 따라 cache는 다음과 같은 메커니즘으로 동작한다.
1. 먼저 접근하려는 address에서 index에 해당하는 bit에 해당하는 cache line에 접근
2. cache line의 valid bit를 check
3. 유효한 cache line이면 tag 비교하여 hit인지 miss인지 판별
4. hit가 발생하면 offset 위치에 해당하는 값을 cpu로 load
5. miss가 발생하면 cache line fill 동작이 수행
캐시 관련 용어
Cache Hit
요청한 데이터가 Cache에 존재할 경우 cache hit라고 함.
이 경우 main memory까지 접근하지 않고 cache에서 data를 load하는데, 이때 걸리는 시간을 Hit latency라고 함.
Cache Miss
Request한 데이터가 Cache에 존재하지 않는 경우 cache miss라고 함.
이 경우에는 하위 level의 memory에 접근해서 새로 data를 가져와 cache를 업데이트 해야 하는데 이 동작을 Cache Line Fill이라고 하며, 이때 걸리는 시간을 Miss latency라고 함.
'ARM Architecture > Memory System' 카테고리의 다른 글
ARM Memory System (0) | 2024.08.09 |
---|