Post

[Study - CS > Computer Architecture] 캐시 메모리(Cache Memory)

캐시 메모리(Cache Memory)

속도가 빠른 장치와 느린 장치에서 속도 차이에 따른 병목 현상을 줄이기 위한 메모리를 말한다.

예시
CPU 코어와 메모리 사이의 병목 현상 완화
웹 브라우저 캐시 파일은 하드디스크와 웹페이지 사이의 병목 현상을 완화

CPU가 주기억 장치에서 저장된 데이터를 읽어올 때, 자주 사용하는 데이터를 캐시 메모리에 저장한 뒤,
다음에 이용할 때 주기억 장치가 아닌 캐시 메모리에서 먼저 가져오면서 속도를 향상시킨다.
속도라는 장점을 얻지만, 용량이 적고 비용이 비싸다는 단점이 있다.

CPU에는 캐시 메모리가 2~3개 정도 사용된다.
L1, L2, L3 캐시 메모리라고 부른다.
속도와 크기에 따라 분류한 것으로, 일반적으로 L1 캐시부터 먼저 사용된다. (CPU에서 가장 빠르게 접근하고, 데이터를 찾지 못하면 L2로 간다.)

듀얼 코어 프로세서의 캐시 메모리

각 코어마다 독립된 L1 캐시 메모리를 가지고, 두 코어가 공유하는 L2 캐시 메모리가 내장되어 있다.
만약 L1 캐시가 128KB이면 64/64로 나누어 64KB에 명령어를 처리하기 직전의 명령어를 임시 저장하고, 나머지 64KB에는 실행 후 명령어를 임시 저장한다. (명령어 세트로 구성, I-Cache - D-Cache)

캐시 메모리 크기가 작은 이유 : SRAM 가격이 매우 비싸다.

  • L1 : CPU 내부에 존재
  • L2 : CPU와 RAM 사이에 존재
  • L3 : 보통 메인보드에 존재

    디스크 캐시 : 주기억 장치(RAM)와 보조 기억 장치(하드디스크) 사이에 존재하는 캐시


캐시 메모리 작동 원리

  • 시간 지역성

    for나 while 같은 반복문에 사용하는 조건 변수처럼 한번 참조된 데이터는 잠시후 또 참조될 가능성이 높음

  • 공간 지역성

    A[0], A[1]과 같은 연속 접근 시, 참조된 데이터 근처에 있는 데이터가 잠시후 또 사용될 가능성이 높음

이처럼 참조 지역성의 원리가 존재한다.


캐시에 데이터를 저장할 때는 참조 지역성(공간)을 최대한 활용하기 위해 해당 데이터뿐만 아니라, 옆 주소의 데이터도 같이 가져와 미래에 쓰일 것을 대비한다.

CPU가 요청한 데이터가 캐시에 있으면 ‘Cache Hit’, 없어서 DRAM에서 가져오면 ‘Cache Miss’이다.

3가지 캐시 미스

  1. Cold miss

    해당 메모리 주소를 처음 불러서 나는 미스

  2. Conflict miss

    캐시 메모리에 A와 B 데이터를 저장해야 하는데, A와 B가 같은 캐시 메모리 주소에 할당되어 있어서 나는 미스 (direct mapped cache에서 많이 발생)

  3. Capacity miss

    캐시 메모리의 공간이 부족해서 나는 미스

Conflict : 주소 할당 문제
Capacity : 공간 문제


캐시 크기를 키워서 문제를 해결하려고 하면, 캐시 접근 속도가 느려지고 파워를 많이 먹는 단점이 생긴다.

Misses and Associativity in Caches

* Associative Caches

Associative Caches

  • Direct Mapped Cache = 1-Way Set Associative Cache

    1:1 Mapping을 한다.

  • n-way Set Associative Cache

    Set Associative Cache는 Direct Mapped와 Fully Associative Cache의 중간 개념이다.
    주어진 set 안에 n개의 데이터가 존재하고, 데이터들은 지정된 공간중 아무 곳이나 위치할 수 있다.

  • Fully Associative

    모든 memory에 block이 cache에 아무 곳이나 위치할 수 있다.

Direct Mapped Cache = 1-Way Set Associative Cache

Direct Mapped Cache

block address % block 수 = cache block의 위치


Direct Mapped Cache Miss

  1. cache[0]에 0이 없어서 cache miss가 일어나고, cache[0]에 0이 위치하게 된다.
  2. cache[0]에 8이 없어서 cache miss가 일어나고, cache[0]에 8이 위치하게 된다. 이때 cache[0]에 있던 0은 밀려난다.
  3. cache[0]에 0이 없어서 cache miss가 일어나고, cache[0]에 0이 위치하게 된다. 이때 cache[0]에 있던 8은 밀려난다.
  4. cache[2]에 6이 없어서 cache miss가 일어나고, cache[2]에 6이 위치하게 된다.
  5. cache[0]에 8이 없어서 cache miss가 일어나고, cache[0]에 8이 위치하게 된다. 이때 cache[0]에 있던 0은 밀려난다.

따라서 총 일어난 cache miss는 5번이다.

2-Way Set Associative Cache

2-Way Associative Cache Miss

  • 2개의 set가 있으므로, 0, 6, 8을 2로 나누면 나머지가 0이기 때문에 모두 set[0]에 위치하게 된다.
  1. set[0]에 0이 없어서 cache miss가 일어나고, set[0]에 0이 위치하게 된다.
  2. set[0]에 8이 없어서 cache miss가 일어나고, set[0]에 8이 위치하게 된다.
  3. set[0]에 0이 있어서 cache hit가 일어난다.
  4. set[0]에 6이 없어서 cache miss가 일어나고, set[0]에 6이 위치하게 된다. 이때 set[0]에서 가장 오래전에 사용된 8은 밀려난다.

    LRU (Least Recently Used) : 가장 오래전에 사용된 memory를 밀어낸다.

  5. set[0]에 8이 없어서 cache miss가 일어나고, set[0]에 8이 위치하게 된다. 이때 set[0]에서 가장 오래전에 사용된 0은 밀려난다.

따라서 총 일어난 cache miss는 4번이고, cache hit는 1번이다.

Fully Associative Cache

Fully Associate Cache Miss

  • 4개의 cache block 아무 data에나 위치할 수 있다.
  1. 0은 cache에 없어서 cache miss가 일어나고, block[0]에 위치하게 된다.
  2. 8은 cache에 없어서 cache miss가 일어나고, block[1]에 위치하게 된다.
  3. 0은 cache에 있어서 cache hit가 일어난다.
  4. 6은 cache에 없어서 cache miss가 일어나고, block[2]에 위치하게 된다.
  5. 8은 cache에 있어서 cache hit가 일어난다.

따라서 총 일어난 cache miss는 3번이고, cache hit는 2번이다.

* replace 될 block 선정 방법 정리

  • Direct Mapped Cache : 정해진 구역만 갈 수 있는 하나의 선택지만 있어서 단순히 밀어내는 작업만 수행
  • Set Associative Cache : 정해진 구역 내에서 block 선정
  • Fully Associative Cache : 모든 data가 아무 block에 위치할 수 있어서 모든 block들이 대체 후보
    • replace 방법으로 가장 오랫동안 사용되지 않은 block을 선정하는 LRU(Least Recently Uesd) 방법 사용

References

gyoogle - 캐시 메모리(Cache Memory)

jja2han - Associative Cache

This post is licensed under CC BY 4.0 by the author.

© Yn3. Some rights reserved.