본문 바로가기
공부/부록

캐시 메모리란?

by Moonsc 2020. 5. 24.
728x90

캐시 부록


메모리 계층 구조

  • 데이터를 저장하는 공간의 속도와 용량은 반비례 관계이다.
  • 대체적으로 속도가 빠른 메모리는 저장공간이 작으며, 느린 메모리는 저장공간이 큰 특징을 가진다.
  • 속도와 공간 두마리 토끼를 잡기에는 비용이 너무 커진다. 그렇기에 데이터 저장 공간은 속도와 용량에 따라 각자 특성에
    맞게 역할을 나누어서 사용한다.

캐시 개요

  • 컴퓨터 시스템의 성능을 향상시키기 위해 주로 CPU 칩 안에 포함되는 빠르고 작고 비싼 메모리이다.
  • 프로그램에서 직접적으로 읽거나 쓸 수 없고 하드웨어의 메모리 관리 시스템이 내부적으로 제어한다.
  • 대부분 프로그램은 한 번 사용한 데이터를 다시 사용할 가능성이 높고, 그 주변의 데이터도 곧 사용할 가능성이 높은
    데이터 지역성을 가지고 있다.
  • 데이터 지역성을 활용하여 캐시보다는 느리지만 용량이 큰 메인 메모리에 있는 데이터를 캐시 메모리에 불러와 두고,
    CPU가 필요한 데이터를 캐시에서 먼저 찾도록 하면 시스템 성능을 향상시킬 수 있다.
  • 흔히 1단계 캐시(L1 캐시)와 레지스터를 혼동하는데 완전히 다른 개념이다. L1 캐시에 있는 데이터도 궁극적으로는
    레지스터에 올라가야 CPU에서 처리할 수 있으며, 레지스터 내 데이터는 프로그램 코드에서 직접 제어할 수 있다.
  • 메모리 형태를 가지고 있는 L1 캐시와는 다르게 레지스터는 CPU 아키텍처에 따라서 종류와 의미가 다르다.
  • 또한 가상메모리에서는 DRAM이 디스크의 캐시로서 동작한다.

캐시 배경

CPU의 클럭 속도가 매우 빨라짐에 따라 CPU 밖에 있는 DRAM과의 속도 차이가 현저하게 증가하였는데, 이 때문에 CPU 클럭
속도를 아무리 올려도 DRAM에서 데이터를 빠르게 제공해 주지 못하여 전체 시스템 성능이 증가하기 어렵게 되었다.메모리 기술
은 주로 DRAM 기술, SRAM 기술로 나뉘는데, DRAM은 가격은 싸지만 속도가 느리고, SRAM은 속도는 빠르지만 가격이 비싸
다는 단점이 있었다. 그래서 SRAM을 사용자가 직접 장착하게 하는 대신, CPU와 DRAM 사이에 SRAM을 별도로 두어서 DRAM
의 데이터를 직접 접근하는 것보다는 빠르게 접근할 수 있도록 했다. 여기에 사용하는 SRAM을 캐시 메모리라고 한다.

파레토의 법칙

  • 상위 20%가 전체 생산의 80%를 해낸다는 법칙. 더 정확하게는 전체 인원의 제곱근에 해당하는 인원이 전체 생산의
    50%를 해낸다는 법칙이다.
  • 이것은 메모리 계층 구조에도 적용된다. 자주 쓰이는 20%의 메모리 계층을 사용하면 80% 일을 효율적으로 처리할 수 있다.

캐시의 작동원리

  • 캐시 메모리는 데이터 지역성(Locality)의 원리를 사용한다.

  • 데이터 지역성은 대표적으로 시간 지역성(Temporal locality)과 공간 지역성(Spatial Locality)으로 나뉜다.

    시간 지역성이란

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

    공간 지역성이란

    • A[0], A[1]과 같은 데이터 배열에 연속으로 접근할 때 참조된 데이터 근처에 있는 데이터가 잠시 후에 사용될 가능성이 높다는 것이다.
  • 예를 들자면 무지하게 지랄맞고 부지런한 상사가 2010년 재무결산 보고서를 가져오라고 했을 때, 무슨 일인지는 몰라도 또 가져오라고 할지도 모르니까 2010년 재무결산보고서를 일단 준비해 놓고, 2009년이나 2011년, 2012년 재무결산보고서도 가져오라고 할지 모르니까 그것도 준비해 놓는 식이다.

  • 또 다른 예로는 캐시는 지갑이라고 생각하면 된다. 지갑 혹은 주머니가 없다면 우리가 현금이 필요할 때마다 매번 은행이나 ATM에 가야 할 것이다. 이는 당연히 매우 귀찮고 시간도 많이 걸린다. 하지만 우리가 현금을 지갑에 넣고 다님으로써 시간을 절약할 수 있다.

  • CPU가 메모리에 데이터를 요청할 때, DRAM에 접근하기 전에 일단 캐시 메모리에 접근하여 데이터 존재 여부를 확인한다. 캐시 메모리는 메인 메모리인 DRAM보다는 그 사이즈가 매우 작아서 데이터를 모두 저장할 수 없다. DRAM이 보통 4~16GB 정도인데 인텔 i5, i7에 들어가는 캐시 메모리는 32KB ~ 8MB 정도이다. 캐시 메모리는 DRAM의 데이터 일부를 가지고 있다가 CPU가 요청한 데이터가 캐시 메모리에 없으면 CPU를 잠시 기다리게 한 후 DRAM에서 해당 데이터를 가져온 후 CPU에게 넘겨 준다. CPU는 캐시의 존재를 알고 있지만, 그 위에서 실행되는 프로그램은 메모리 주소만 지정할 수 있지 프로그래머가 캐시를 직접 지정할 수는 없다. 이렇게 그 존재가 외부에 드러나지 않기 때문에 캐시 메모리는 CPU에 투명(transparent)하다고 한다. 투명하지 않은 작은 온칩 메모리는 Scratchpad Memory라고 부른다.

  • 캐시에 데이터를 저장할 때 공간 지역성을 최대한 활용하기 위해 해당 데이터뿐만 아니라 옆 주소의 데이터도 같이 가져와 미래에 쓰일 것을 대비한다. DRAM에는 프로그램을 수행하는 명령어(Instruction)와 그 명령이 실행되는 데이터(Data)가 함께 들어 있는데, 명령어는 읽기만 하고 데이터는 읽기와 쓰기를 동시에 하므로 캐시 메모리 내에 이들을 각각 I-Cache(Instruction Cache)와 D-Cache(Data Cache)에 저장한다. 보통 L1 캐시에는 I-Cache와 D-Cache가 따로 있고, L2 캐시는 딱히 둘의 구분 없이 하나의 캐시 메모리로 구성된다. L1 캐시는 CPU에 직접 데이터를 공급해 주기 때문에 빠른 접근 지연 시간(Access latency)이 매우 중요한데, 명령어는 보통 공간 지역성이 높고 데이터는 보통 시간 지역성이 높다. 이 둘을 나누어 서로 다른 지역성을 이용할 수 있다. 또한 명령어와 데이터를 동시에 읽어올 수 있게 함으로써 CPU의 파이프라이닝 성능을 향상시킬 수 있다.

  • CPU가 데이터를 요청했을 때 캐시 메모리가 해당 데이터를 가지고 있다면 이를 캐시 히트라 부르고, 해당 데이터가 없어서 DRAM에서 가져와야 한다면 캐시 미스라 부른다.

  • 캐시 미스 발생시의 처리 방법은 캐시 정책에 따라 다르며, 데이터를 읽어 오는 시점으로 사용하기도 한다.

  • 캐시 미스가 나는 경우는 3가지

    • Compulsory miss(또는 cold miss) : 해당 메모리 주소를 처음 불렀기 때문에 나는 미스. 예를 들어 프로그램을 새로 켜거나 하는 경우 발생한다. 간혹 사용할 데이터를 미리 프리페치하는 경우가 아닌 이상 사실상 예방이 불가능한 캐시미스지만, 전체 컴퓨터 이용 시간에 비하면 굉장히 드물게 나는 미스 유형이라 전체적인 성능에 영향을 미치는 정도는 작다.

    • Conflict miss : 캐시 메모리에 A 데이터와 B 데이터를 저장해야 하는데, A와 B가 같은 캐시 메모리 주소에 할당되어서 나는 캐시 미스다. 예를 들어 내가 휴대폰과 따뜻한 커피캔은 항상 외투 오른쪽 주머니에만 넣는 습관이 있다고 하자. 평상시에는 오른쪽 주머니에 휴대폰만 넣고 다니는데, 어느날 친구에게 커피캔을 받아서 잠시 휴대폰을 가방 속에 넣어두고 커피캔을 오른쪽 주머니에 넣었다. 이때 휴대폰을 오른쪽 주머니에서 찾으려고 한다면 그때 conflict miss가 난다. direct mapped cache에서 가장 발생빈도가 높고, n-associative cache에서 n이 커질수록 발생빈도가 낮아지지만 대신 n이 커질수록 캐시 속도가 느려지고 파워도 많이 먹는다.

    • Capacity miss : 캐시 메모리에 공간이 부족해서 나는 캐시 미스. 위의 conflict miss는 캐시에 공간이 남아도는데도 불구하고 주소 할당때문에 나는 미스지만, capacity miss는 주소 할당이 잘 되어있더라도 공간이 부족하면 나는 미스다. 캐시 공간이 작아서 벌어지는 일이므로 캐시 크기를 키우면 해결되지만, 캐시 크기를 키우면 캐시 접근속도가 느려지고 파워를 많이 먹는다는 단점이 생긴다.

  • 만약 대부분의 메모리 요청이 캐시 미스라면 캐시 메모리를 안 쓰는 게 더 빠르다. 하지만 다행히도 캐시 미스 비율이 대체로 평균 10% 안쪽이기 때문에 캐시 메모리를 통해 컴퓨터 시스템의 평균 성능을 크게 향상시킬 수 있으며 클럭 속도, 코어 개수와 함께 컴퓨터 성능에서 매우 큰 비중을 차지한다. 그러나 많은 사람들이 캐시 메모리에 대해 잘 모르며 이름부터 생소하니까 실제 캐시 메모리가 없이 클럭 속도가 더 높은 CPU가 클럭 속도는 낮지만 캐시 메모리가 있는 CPU보다 대체로 더 나쁜 성능을 보여준다. 셀러론이 싼데는 다 이유가

  • 어떤 이는 컴퓨터에 사용된 도박의 원리라고 하기도 하는데, 이는 캐시 메모리의 작동 원리가 도박에서 돈을 거는 것과 유사하기 때문이다. 캐시 미스 비율 (질 확률)이 매우 낮아 거의 항상 이기는 도박이라 할 수 있다.

'공부 > 부록' 카테고리의 다른 글

HTTP 더 알아보기  (0) 2020.05.24

댓글