본문 바로가기

CS/컴퓨터구조

[컴퓨터구조] 캐시(1)

현재 글은 컴퓨터 구조와 아키텍처 서적 및 대학에서 들은 강의를 기반으로 한다.


 캐시는 CPU와 메인 메모리 사이에서 동작하는 작은 용량의 메모리로, 메모리 접근 시간은 느리지만 용량이 큰 메인 메모리를 빠른 속도로 사용함으로써 큰 용량 및 빠른 메모리 접근 시간 두 가지를 동시에 잡기 위해 도입된다. locality에 근거하여 동작하며, CPU가 멀티코어 구조를 가짐에 따라 속도 및 용량이 다른 다계층 형태로 나타난다.

 메모리와 가장 가까운 위치에 존재하는 LLC(Last Level Cache)의 경우 메인 메모리 용량 증가에 따라 그의 0.1% 정도인 100MB 이상의 크기를 가지기도 한다.

캐시의 계층 구조

 일반적으로 캐시는 메모리 0.1% 수준의 용량을 가질 때 95% 정도의 hit rate을 가지며, 그 이상의 용량에 대해서는 hit rate가 크게 증가하지 않아 효율이 떨어지는 것으로 알려져 있다. 캐시가 필요한 이유 중 하나가 프로세서의 폭발적인 성능과 메모리의 낮은 성능의 간격을 줄이는 것인데, 2005년 경부터 프로세서의 성능 증가 추세가 주춤해짐에 따라 프로세서와 메모리 사이의 간격이 좁아지고 있다. 따라서 경우에 따라 캐시 계층이 더 증가하지는 않을 수 있다고 한다.

연도별 프로세서 및 메모리 성능 증가 추세


캐시 구조

구성 요소 설명
블록(Block) 캐시와 메인 메모리 사이의 최소 전송 단위
라인(Line) 한 블럭을 가질 수 있는 캐시 메모리 부분. 라인이 n자리라면, 2n 개의 블럭이 존재한다.
태그(Tag) 메모리의 주소와 관련된 정보

캐시와 메인 메모리 구조
(좌) 캐시 읽기 동작, (우) 일반적인 캐시 구조. 데이터와 주소가 캐시 및 프로세서에 동시에(parallel) 전달된다.


캐시 설계에 고려할 점들

고려 요소 내용
Cache Address Logical
Physical
Cache Size 캐시의 크기를 어떻게 설정할 것인지
Mapping Function Direct
Associative
Set Associative
Replacement Algorithm Least Recently Used(LRU)
First In First Out(FIFO)
Least Frequently Used(LFU)
Write Policy Write Through
Write Back
Line Size 블럭을 몇개나 둘 것인지
Number of Caches Single or two level
Unified or split (instruction과 data 구분)

 


Cache Address

 현대 컴퓨터들은 물리적 메모리보다 더 큰 용량의 메모리를 사용하기 위해 가상 메모리(virtual memory)를 사용한다. 가상 메모리 구조에서 프로세서는 메모리의 물리적 주소 대신 가상 메모리를 이용하며, 가상 메모리는 MMU(Memory Management Unit)에 의해 계산되어 실제 물리적 주소와 매핑된다. MMU 내부에는 TLB(Translation Lookaside Buffer)가 있는데, 이 장치는 최근에 사용된 주소를 페이지 단위로 저장해 두었다가 요청에 따라 반환하는 하드웨어로 만들어진 일종의 캐시 장치로 동작에 1 사이클 정도의 시간이 소요된다.

 캐시가 어떤 주소를 캐싱하는가에 따라 방법이 2가지로 나뉜다.

Logical Cache

 논리적 주소에 대해 캐싱을 수행하는 방법이다. MMU에 의한 매핑 과정 없이 바로 캐싱을 통해 원하는 데이터를 얻을 수 있다는 장점이 있다. 하지만 데이터 일관성 문제가 발생하는 문제가 있어 속도가 빠름에도 불구하고 현재 그리 사용되지는 않는 방식이다.

 가령 A라는 프로그램과 B라는 프로그램이 실행되고 있고, 이 두 프로그램이 동일한 대상을 가리키고 있다고 생각해보자. 가상 메모리를 사용하면 A와 B 각각에 대해 0번부터 시작되는 논리적 주소값이 부여된다. 이때 프로그램들이 캐싱을 통해 논리적 주소 500번지의 값을 가져온다면, 이 500번지의 값은 대체 누구의 500번지일까? 논리적 주소 수준에 캐시를 두면 현재 캐시가 어떤 프로그램의 논리적 주소에 대한 캐시인지에 대한 정보를 추가적으로 저장하거나, 컨텍스트 스위치와 함께 캐시의 내용도 바꿔야 한다. 이는 캐시를 더 복잡하게 만드므로, 조금 속도의 저하가 있더라도 물리적 주소를 이용한다.

Physical Cache

  Physical cache는 논리적 주소를 MMU을 통해 변환한 물리적 주소에 캐시를 두는 방식이다. MMU을 거쳐야만 캐시 정보를 얻을 수 있어 logical cache에 비해 약간의 성능 저하가 존재하지만, 메인 메모리 내에 물리적 주소는 단 하나씩만 존재하기 때문에 컨텍스트 스위치나 추가적인 정보가 필요하지 않다는 장점이 있다. 


Cache Size

 캐시의 크기는 비용, 속도 측면과 관계가 있다. 

요소 캐시 크기가 커지는 경우 발생하는 영향
속도  메인 메모리 크기의 0.1% 수준까지는 캐시의 크기가 증가함에 따라 hit ratio가 95%정도 까지 증가하나, 그 이상의 크기에 대해서는 거의 변화가 없다. 오히려 캐시에 값이 있는지 검사하기 위한 시간이 늘어나 성능이 더 떨어질수도 있다.
비용  캐시 크기가 커짐에 따라 비용이 크게 증가한다.

 캐시 메모리와 메인 메모리 사이의 속도 차이가 크지 않은 경우, 메인 메모리의 속도를 줄이는 것이 더 중요하다.


Mapping Function

  mapping function은 캐시 메모리와 메인 메모리 사이를 매핑하는 방식이다. mapping function이 달라지면캐시에서 전달된 주소 값에 대한 데이터를 찾을때 대응될 수 있는 라인의 수가 달라진다.

 현재 설명에서 주소는 24비트로 표현되며, 마지막 2비트는 캐시 운용과 관계 없으므로 22 비트를 기준으로 이야기한다.

  • Direct
  • Fully Associative
  • Set Associative

Direct Mapping

Direct Mapping
Direct Cache 구조

 하나의 주소에 대응되는 캐시 라인이 단 하나만 존재하는 방식이다. 주소 값은 tag, line으로 구성되며 캐시에 대응되는 라인 위치는 line 값에 대한 모듈러 연산(%) 결과다. 따라서 특정 line 값에 대해 반드시 대응되는 캐시 상의 위치가 존재한다.

 예를 들어 line =157, 캐시의 라인 수 =16이라면 데이터가 저장되는 위치는 157 mod 16 = 13이 된다.

  • 장점
    • 단순한 처리 방식 덕분에 회로 구조가 간단하므로 가격이 저렴하고 속도가 빠르다.
    • 일단 hit 하면 반드시 데이터가 존재하므로 원하는 데이터에 대한 접근과 태그 비교를 동시(concurrency)에 수행할 수 있다.
  • 단점
    • Conflict Miss: 데이터의 주소에 따라 캐시 상의 위치가 정해지므로 캐시 공간이 많더라도 반드시 캐시 전부를 사용할 수 있는 것은 아니다. 또한 하나의 라인에 서로 다른 데이터들이 캐시되는 경우 반복해서 충돌이 발생하여 캐시의 내용에 잦은 빈도로 miss가 발생한다.

Victim Cache

 direct mapping 방식에서 발생하는 conflict miss을 줄이기 위해 일부 기기는 캐시와 메모리 사이에 밀려난 데이터를 잠시 저장해두는 victim cache을 두어 운용하기도 한다.

 victim cache은 conflict miss로 인해 밀려난 데이터를 차후에 빠르게 접근할 수 있도록 저장해두는 캐시이다. 크기가 4 ~ 16 라인 수준으로 상당히 작기 때문에 데이터를 아무 위치에 저장한 후 전체 태그 값을 비교하여 찾는 Fully Associative 방식으로 운용된다.

Three C's

 캐시 miss가 발생하는 3가지 이유를 의미한다.

  • Compulsory: 컴퓨터를 처음 부팅하면 캐시가 비어 있으므로 크기와 관계 없이 miss 가 발생한다(first reference).
  • Capacity: 캐시의 크기가 너무 작은 경우 miss가 자주 발생한다. 단, 메인 메모리 크기의 0.1% 이상이면 영향이 작다.
  • Conflict: 다른 위치의 데이터가 동일한 라인에 대해 매핑되는 경우 miss가 발생한다.

Rules of Thumb about cache

 수학적으로 증명된 것은 아니지만, 캐시에 대한 경험적인 법칙들이 존재한다.

  • 90/10 Locality Rule: 프로그램은 10%의 코드에서 90%의 실행 주기를 보낸다.
  • 2:1 Cache Rule: N 크기의 direct-mapped cache의 miss rate은 N/2 크기의 two-way set associative cache의 것과 유사하다. 즉 direct-mapped cache의 miss rate가 상당히 높다는 것을 의미한다.

Fully Associative Mapping

Fully Associative Mapping
Fully Associative Cache 구조

 데이터를 캐시 상 어떤 위치에도 저장할 수 있는 방식의 매핑 방식이다. 캐시 상 남는 자리에 데이터를 저장하고, 해당 데이터를 찾을 때는 태그 값을 캐시 전체에 대해 비교하여 값을 얻는다. Direct Mapping 방식과 완전히 반대로 동작한다. 주소와 라인은 전혀 연관이 없으며, conflict miss가 발생하지 않는다.

 Direct Mapping에서는 모듈러 연산을 기반으로 데이터가 저장된 라인을 바로 알 수 있었으나, Fully Associative Mapping 방식에서는 라인 정보가 없기 때문에 캐시 내 모든 데이터에 대해 222 비트의 태그를 비교하면서 데이터가 저장된 라인을 찾아야 한다. 

  • 장점
    • 데이터를 캐시 상 어떤 위치에도 저장할 수 있으므로 캐시를 효율적으로 사용할 수 있다.
    • 주소와 라인 사이에 어떤 관계도 존재하지 않아 conflict miss가 발생하지 않는다.
  • 단점
    • 값을 찾기 위해 전체 데이터에 대한 태그를 비교해야 하므로 시간이 오래 걸리고 하드웨어 구현이 복잡해진다.
    • 캐시가 꽉 차서 데이터를 바꾸는 경우 교체 알고리즘이 요구된다.

 캐시를 효율적으로 사용할 수 있다는 장점이 있기는 하나, 이를 위해 요구되는 시간이나 구현이 현실적이지 않아 실제로 이 방식을 사용하는 방식의 캐시는 없다고 봐도 된다.


Set Associative Mapping

 Direct Mapping과 Associative Mapping을 섞어놓은 듯한 방식으로, 두가지 방식의 장점을 통합한다.

  • set: 캐시 라인 여러개를 묶어놓은 것
  • way: 캐시 라인을 묶어 놓은 개수. 2way, 4way 등

 Set Associative Mapping은 들어온 주소를 tag와 set으로 구분한다. set은 direct mapping 방식으로 동작하며, set 위치를 찾아간 이후 associative 방식으로 set 내의 각 라인의 주소 값을 비교하여 데이터를 얻는다. 두가지 방식의 단점인 conflict miss 및 tag 비교 문제가 그대로 존재하지만, 원 방식들에 비해 정도가 덜하다.

 way 값이 21, 22, 23... 으로 증가함에 따라 이를 표현하기 위한 tag의 길이가 1, 2, 3... 으로 증가한다는 특징이 있다.

Set Associative Mapping. 4way라면 tag = 10, set = 12가 된다.

 구조상 Direct Mapping 과 Associative Mapping 방식이 섞여 있어 서로 다른 관점으로 구조를 파악할 수 있다.

(좌) 여러개의 associative cache가 있는 구조로 본 것 (우) 여러개의 direct cache로 본 것

'CS > 컴퓨터구조' 카테고리의 다른 글

[컴퓨터구조] 캐시(3)  (0) 2022.10.10
[컴퓨터구조] 캐시(2)  (1) 2022.10.05
[컴퓨터구조] 메모리 계층  (0) 2022.09.28
[컴퓨터구조] Interconnection  (0) 2022.09.27
[컴퓨터구조] 컴퓨터의 기능  (0) 2022.09.24