ggoggo

5.3 캐시메모리 본문

3-1/컴퓨터구조 및 운영체제

5.3 캐시메모리

chchae01 2022. 5. 28. 14:31
  • 캐시메모리(cache memory, cpu cache)

- 주로 메인메모리의 액세스타임을 줄이기 위해 사용하는 메인메모리와 cpu 사이에 사용하는 빠른 속도의 메모리

 

- 프로그램이 사용 중인 근방을 저장

(자주 액세스하는 데이터나 프로그램 명령을 반복해 검색하지 않고 즉시 사용할 수 있도록 준비)

 

- 주로 액세스 타임이 빠른 SRAM 사용

 

- CPU에 아주 가까이 혹은 내장

 

1. 캐시와 메모리 계층

- 캐시로 메모리 계층 간 속도 차이를 완충시켜 전체 기억장치의 평균 액세스 타임을 줄임

- L3, L2, L1으로 올라갈수록 속도는 증가, 크기 축소

- cpu는 상위계층부터 자료를 찾아 없으면 차례대로 하위계층으로 내려가면서 찾음

(L1 -> L2 -> L3 -> 메인메모리 -> 하드디스크, 하위계층에 대한 액세스가 늘어날수록 평균속도가 느려져 전체 기억장치의 성능 저하)

- 캐시 성능 개선방법

1) 캐시의 위치 : CPU 코어 내부 > CPU 언코어 > CPU 칩 외부

2) 같은 CPU 코어 일때 -> CPU코어 클럭 증가, 내장 캐시의 성능개선(용량&연결 속도 개선), 멀티코어 구조

3) 내장 캐시의 연결 속도 개선 -> 비트 수와 클럭 증가

 

  • L1, L2, L3 캐시

- L1 캐시 : 명령 캐시와 데이터 캐시 분리 

슈퍼스칼라 방식으로 병렬처리를 설계하기 유리

  → L1 데이터 캐시 : 동시에 읽고 쓰기 가능하도록 데이터 출입구를 두개로 분리한 듀얼포트 SRAM 사용

 

- L2, L3 캐시 : 명령과 데이터가 공유   

  → L2 캐시는 프로세서 칩 내부의 다른 공유 장치들과의 버스 인터페이스 속도를 높이기 위해 사용

  L3 캐시는 멀티코어 간의 다중작업이나 하나의 작업을 나눠서 처리할 때 일관성 유지

 

  • 온-다이 캐시

- 온 다이(on-die) : 캐시가 CPU 코어와 같은 반도체 회로기판 위에 있다는 뜻

- 온 칩(on-chip) : 같은 칩 안에 있다는 뜻

 

 ** 멀티코어 프로세서에서 코어(core), 언코어(uncore)의 개념**

- 코어(core) : 독립적으로 명령을 실행하는데 필요한 부분

ex) ALU, 레지스터, 부동소수점 처리장치(FPU), 독립적인 명령어 실행장치, 단독으로 사용하는 L1, L2 캐시 등

 

- 언코어(uncore) : 내장된 장치 중 코어가 아닌 부분

각 코어가 공통으로 공유해 사용할 수 있는 부분

ex) 명령어 인출과 해동장치, L3 공유 캐시와 칩 내부에 내장된 메모리 컨트롤러, 버스 컨트롤러, 그래픽 처리장치(GPU) 등은 코어 개념에서 제외

 

  • 디스크 캐시

- 디스크 캐시(disk cache)

  : HDD, ODD 등 디스크의 액세스 타임을 줄이기 위해 CPU와 디스크 장치 사이에 사용하는 캐시메모리

   +) 디스크에서 데이터를 읽고 쓰는 법 : 디스크 컨트롤러와 I/O버스 컨트롤러 거침. 이들 장치에 분산된 버퍼도 중간 단계에서 일종의 디스크 캐시 역할 함

 

운영체제에 의해 주로 메인메모리의 일부를 할당됨

  메인메모리의 상당 부분을 할당(많게는 1/3)

    디트스 캐시를 늘리면 메인메모리가 줄어 가상메모리를 늘려야 하므로 적절한 비율을 OS가 자동 관리

 

cf. 하드디스크에 내장된 디스크 버퍼(disk buffer)   HDD를 읽고 쓸 때 임시로 저장해두는 버퍼 메모리

2. 전면버스와 후면버스

  • 메모리의 이중독립버스(dual independent bus)

메모리 버스가 두 개의 독립적인 버스를 갖는 구조

 1) 외부 시스템 버스 : CPU와 메인메모리 사이

 2) 내부 캐시 버스 : CPU 코어와 캐시 사이

  • 전면버스(front-side bus, FSB)

- 주로 CPU와 외부 메인메모리를 연결하는 시스템 버스

- 램 모듈 속도나 시스템 버스의 클럭등을 언급할 때

  • 후면버스(back-side bus, BSB)

- 주로 CPU 내부에 내장된 캐시와 CPU 코어 사이를 연결해주는 캐시 버스

- FSB보다 비트 수를 넓히고 클럭도 고속으로 설계

3. 캐시 적중과 실패

CPU가 액세스한 내용은 일단 캐시에 복사됨.

    캐시 데이터는 CPU가 요구할 때 신속히 재사용됨

    캐시 용량 한계 존재해 한동안 사용되지 않았던 내용은 빠져나감

 

  • 캐시 적중(hit)

CPU가 원하는 내용을 캐시에서 발견한 상태

    캐시에서 CPU로 정보 읽어옴

  • 캐시 실패(miss)

CPU가 원하는 내용이 캐시에 없는 상태

    메인 메모리나 그 아래 곛으에서 읽어옴

  • 캐시 적중률(hit rate)

H = (캐시 적중 회수) / (전체 메모리 액세스 회수) x 100

 

- 캐시가 커지면 적중률이 높아짐

    적중률이 높을수록 전체 기억장치의 평균 액세스 타임이 빨라져 캐시의 액세스 타임에 가까워짐

  • 캐시 실패율(miss rate) : 1 - H

4. 평균 액세스 타임

  • 캐시가 적용된 메모리 계층구조 사례 1

  • 캐시가 적용된 메모리 계층구조 사례 2

5. 지역성과 일관성

캐시의 목적 = 전체 기억장치의 평균 액세스타임을 줄이는 것

  → 상위계층에 데이터가 존재할 확률을 높여야함

 

  • 캐시 설계 시 고려사항

1) 액세스 타임이 빠른 소자 : 캐시와 메인메모리

2) 데이터의 지역성 : 블록 단위로 현재 필요한 정보와 앞으로 예측되는 정보를 함계 인출

3) 캐시와 메인메모리의 데이터의 일관성 : 캐시의 내용을 변경할 때 메인 메모리의 내용을 함께 바꾸어 주어야 함. (이때 걸리는 시간을 최소화 해야함)

4) CPU 발열문제 : 적중률 ↑ 시, 소비전력 발열량 

  • 데이터의 지역성

- 컴퓨터 시스템에서 지역성(locality)

  →CPU가 기억장치의 특정 부분에 위치한 프로그램이나 데이터를 빈번히, 집중적으로 액세스하는 현상

  →데이터의 분산 정도를 나타냄

   캐시 적중률에 가장 큰 영향

ex) 지역성 좋다 = 현재 사용중인 프로그램들은 CPU에 가까운 메모리 상위계층에 집중

      지역성 나쁘다 = 데이터가 여러계층에 분산

 

1) 시간적 지역성

   CPU에서 한번 참조한 프로그램이나 데이터는 조만간 다시 참조될 가능성이 높음.

 

2) 공간적 지역성

   한번 참조된 데이터 주변에 인접한 데이터는 같이 침조된 가능성이 높음 → 인접 저장된 배열 데이터

   대부분의 프로그램 명령어는 분기가 발생하기 전까지 기억장치에 저장된 순서대로 실행됨  → 순차적 지역성

  • 데이터의 일관성

- 메인 메모리와 캐시 간 데이터의 일관성

  메인메모리(CPU가 본래 액세스하려한 위치)와 복사본인 캐시는 데이터의 일관성이 유지 관리되고, 이때 걸리는 시간도 최소화해야함.

  캐시가 갱신될 때 메인메모리도 함께 갱신되어야 둘 사이의 매핑구조가 정상적으로 유지

6. 쓰기 정책

  • 캐시 쓰기 정책(wirte policy)

캐시의 블록이 변경되었을 때 메인메모리의 블록을 갱신하는 방법과 시기를 정하는 것

  • 연속기록(write-through) 캐시

CPU가 캐시와 메인메모리 두 군데 데이터를 정상적으로 함께 갱신하는 방식

 

속도가 빠른 캐시가 먼저 업데이트된 후 느린 메인메모리에 기록이 완료

  → 구조는 간단하지만 캐시가 갱신될 때, 느린 메인메모리를 매번 함께 액세스하므로 성능 저하

  → 가상메모리에 적용하면 시간이 더욱 오래 걸림

  • 후기록(write-back) 캐시

CPU가 캐시의 데이터만 우선 변경하고 메인메모리는 나중에 갱신하는 방식

 

평상시 : 캐시의 냉요을 메인메모리에 매번 백업하지 않고 변경된 자료를 표시만 하고 캐시를 계속 사용하고 나중에 그 자료가 교체될 때 메인메모리에 없는 내용이면 메인메모리로 복사한 후 자료를 캐시에서 비워줌.

CPU 기계 사이클이 대기 상태로 여유가 있을 때 캐시의 내용을 메인메모리에 블록단위로 수시로 미리 백업해두면 시스템 성능을 더 높일 수 있음.

  • 캐시 읽기

연속기록 캐시이든 후기록 캐시이든 걸리는 시간 동일

 

캐시 적중일 경우 CPU가 캐시에서 , 실패이면 메인메모리에서 원하는 데이터를 읽어옴

 

  • 캐시 쓰기

캐시의 내용이 변경되는 경우에 발생

 

1) 연속기록의 쓰기 동작 : 항상 함께 기록하므로 느린 메인메모리의 액세스 타임만큼 걸림

2) 후기록의 쓰기 동작 : 캐시 적중이면 캐시를 액세스하고 실패면 메인메모리를 액세스 하므로 읽기 동작과 같아짐.

  -> 캐시를 다 채운 후 캐시적중에 실패하면 자료가 교체되어 메인메모리로 옯겨져 기록됨

 

7. 교체 정책

  • 캐시 알고리즘 or 교체 정책

캐시 적중에 실패할 경우, 캐시의 내용 중 교체되어 나갈 자료를 결정하는 것

가장 이상적인 목표는 미래에 가장 오랫동안 필요로 하지 않는 자료를 교체하는 것!

 

<캐시 알고리즘>

(1) 선입선출(FIFO) : 가장 먼저 들어온 자료를 먼저 교체

(2) 가장 오래전 사용(LRU) : 가장 오래 전 사용된 자료를 먼저 교체

(3) 가장 최근에 사용(MRU) : 가장 최근에 사용된 자료를 먼저 교체

(4) 최소 빈도 사용(LFU) : 사용 횟수가 가장 적은 자료를 먼저 교체

 

  • MRU 알고리즘

 

  • LRU 알고리즘