책너두 (컴퓨터 밑바닥의 비밀) 31일차 캐시, 어디에나 존재하는 것

  • 프로그램이 실행되는 동안 CPU는 메모리와 빈번하게 상호작용 해야 함.
  • 캐시, 어디에나 존재하는 것
  • 폰 노이만 구조에서는 CPU가 실행하는 기계 명령어와 명령어가 처리하는 데이터가 모두 메모리에 저장되어 있어야 함.
    • 하지만 레지스터 용량은 극히 제한되어있기에, CPU는 반드시 빈번히 메모리에 접근하여 명령어의 데이터를 가져와야 함.
      • 또 명령어 실행 결과도 메모리에 다시 기록해야 함.
    • CPU와 메모리 속도가 서로 잘 맞는지 확인해야 함.
  • CPU와 메모리의 속도 차이
  • 시스템 성능의 속도가 상대적으로 느린 쪽에 맞추어 제한됨.
    • CPU와 메모리의 속도가 같아야 가장 좋은 성능을 발휘할 수 있는 나무통 원리(cannikn law)를 만족함.
  • 하지만, CPU와 메모리는 시간이 지날 수록 속도 차이가 남.
    • 속도가 미친듯이 빠른 CPU는 명령어를 실행할 때 어쩔 수 없이 느릿느릿한 메모리를 기다릴 수밖에 없음.
    • 일반적인 시스템에서 메모리의 속도는 CPU의 100분의 1에 불과함.
  • 도서관, 책상, 캐시
  • 도서관에서 책을 가져온 후에는 다시 특정 자료를 찾을 때 일이 훨씬 쉬움.
    • 책상위에 책이 놓여있기에 바로 조사하면 됨.
    • 책상은 캐시(cache)에 비유할 수 있고, 서가는 메모리에 비유할 수 있음.
  • 최신 CPU는 메모리 사이에 캐시 계층이 추가되어 있음.
    • 캐시는 가격이 비싸고 용량이 제한적이지만 접근 속도가 거의 CPU 속도에 필적함.
    • 캐시 안에 최근 메모리에서 얻은 데이터가 저장되며 CPU는 메모리에서 명령어와 데이터를 꺼내야 할 때도 무조건 먼저 캐시에서 해당 내용을 찾음.
    • 캐시가 적중하면 메모리에 접근하지 않고 CPU가 명령어 실행하는 속도를 크게 끌어올릴 수 있음.
    • 또, CPU가 더이상 직접 메모리를 읽고 쓰지 않기에 CPU 와 메모리 속도 차이도 보완할 수 있음.
  • 일반적으로 x86 같은 최신 CPU와 메모리 사이에 실제로 세 단계의 캐시가 추가되어 있음.
    • L1 캐시 접근 속도는 레지스터 접근 속도에 비해 약간 느리지만 거의 대동소이 함.
      • 대략 4클럭 주기가 소요됨
    • L2 캐시 접근속도는 대략 10클럭 주기가 소요됨.
    • L3 캐시의 접근 속도는 대략 50클럭 주기가 소요됨.
      • 캐시 단계에 따라 접근 속도는 낮아지지만 용량이 증가함.
  • L1, L2, L3 캐시, CPU 코어는 레지스터 칩 내에 묶여 패키징(packaging) 되어 있음.
  • “CPU → L1 캐시 → L2 캐시 → L3 캐시 → 메모리” 순서대로 데이터를 캐시 히트, 미스에 따라 가져오게 됨.
  • 캐시는 컴퓨터 시스템 성능을 향상 시키는데 매우 중요함.
    • 오늘날 CPU 칩에 상당 부분의 공간을 캐시가 차지하고 있고, 실제로 기계 명령어를 실행하는 CPU 코어 공간은 크지 않음.
  • 공짜 점심은 없다: 캐시 갱신
  • 시스템 성능이 극적으로 향상된 만큼 대가가 있음.
    • 메모리에 기록할 때 나타남.
  • 캐시가 있기에 CPU는 더 이상 메모리와 직접 일하지 않음.
    • CPU는 캐시에 직접 기록함
    • 캐시의 데이터는 갱신 되었지만, 메모리 데이터는 아직 예전 것으로 불일치 문제가 발생함.
      • 이 문제를 해결하려면 캐시 갱신할 때 메모리도 함께 갱신해야 함.
        • 근데 이러면 CPU가 결국 메모리 갱신될 때까지 대기해야 함. → 동기실 설계 방법임.
      • CPU가 메모리에 기록할 때는 캐시를 직접 갱신하지만 이때 반드시 메모리가 갱신이 완료되기를 기다릴 필요 없이 CPU는 계속해서 다음 명령어를 실행할 수 있음.
        • 메모리가 업데이트 되는 시점은 캐시 용량이 부족한 경우임.
        • 캐시에서 자주 사용되지 않는 데이터를 제거해야 함.
          • 캐시에서 제거된 데이터가 수정된 적이 있다면 이를 메모리에 갱신해야 함.
          • 이렇게 캐시의 갱신과 메모리 갱신이 분리됨 (비동기 방식)
  • 세상에 공짜 저녁은 없다: 다중 코어 캐시와 일관성
  • 단일 CPU 성능은 무어의 법칙으로 더 이상 향상 시키기 어려움.
    • 다중 코어를 활용하는 방향으로 감
  • 다중 코어를 최대한 활용하는 다중 스레드 or 다중 프로세스가 없다면 다중 코어의 위력을 충분히 활용할 수 없음.
    • 다중 스레드 프로그램을 작성하는건 프로그래머에게 어려운 일임.
    • 소프트웨어 계층 뿐만 아니라 하드웨어 계층에도 어느 정도 어려움이 있음.
      • CPU가 코어 여러 개를 가지면 코어 별로 캐시를 가지게 되는데, 각 코어별 캐시 데이터가 불일치 문제가 발생함.
        • 이 문제를 해결하려면 캐시 한 개에서 갱신된 변수가 다른 CPU 코어의 캐시에 존재한다면 이 캐시도 함께 갱신되어야 함.
        • 최신 CPU에 고전적인 MESI 규칙같은 다중 코어 캐시 일관성을 유지하는 규칙이 있음.
          • 빈번하게 다중 코어 캐시의 일관성을 유지하면 성능에 대가를 따름.

댓글

Designed by JB FACTORY