캐시 (Cache)

📝 1yangsh·2022년 4월 3일
0

오늘날 캐싱은 하드웨어 수준에서 그치는게 아닌,
운영체제, CDN, DNS 등의 네트워크 계층, 그리고 웹 애플리케이션 및 데이터베이스를 비롯한 다양한 기술 계층에 걸쳐 활용되고 있습니다.

여기서는 캐시의 대표격인 캐시 메모리 위주로 다뤄보고자 합니다.

Cache

캐시란,

  • 물건을 일시적으로 저장, 보관하기 위해 사용하는 곳
  • 기술적 cache
    • 자주 필요한 데이터나 값의 복사본을 일시적으로 저장, 보관하기 위해 사용하는 곳

캐시 메모리의 도입

먼저 컴퓨터의 동작 원리에 대해 간단하게 알아보겠습니다.
먼저 RAM은 하드디스크에서 데이터를 불러오고,
CPU는 RAM에 저장되어 있는 데이터를 기반으로 연산 작업을 수행하는 구조입니다.

CPU는 시대가 거듭되며 성능적으로 크게 향상된 반면, 메모리의 경우는 속도보다는 용량이 커지며 CPU와 메모리의 성능차이가 점점 벌어지게 됩니다.

기존 문제점
1. CPU는 데이터를 처리하기 위해 메모리와 끊임없이 데이터를 주고 받는 구조입니다.
2. 하지만 메모리가 CPU의 데이터 처리 속도를 따라가지 못합니다.
3. 따라서 CPU가 메모리를 기다려야 하는 병목현상이 발생하게 됩니다.

따라서, 이 병목현상을 완화하기 위해 CPU와 메인 메모리 사이에 크기는 작지만 속도가 빠른 캐시 메모리를 두고 캐시 메모리에 향후 재사용 가능성이 클 것으로 예상되는 데이터의 복사본은 저장해둔 후, CPU가 요청하는 데이터를 바로 전달할 수 있도록 합니다.

위 그림은 메모리 계층 구조를 나타낸 것입니다.
위로 갈수록 작고 빠르고 비싼 반면 아래로 내려갈수록 용량이 크고 느리고 저렴합니다.
해당 계층마다 데이터의 효율적인 전달을 위해 캐싱을 활용할 수 있습니다.

캐싱을 이용하는 이유는
캐싱을 이용하여 빠르고 작은 메모리와 크고 느린 메모리의 장점을 조합하여
크고 빠른 메모리처럼 행동하도록 만드는 것 입니다.

캐싱 동작 원리

캐싱은 데이터 재사용성이 클 것 같은 메모리의 복사본을 저장해 놓는다고 하였는데
어떻게 재사용성이 큰지 판단할 수 있을까요?

데이터 지역성의 원리를 이용합니다.

데이터 지역성의 원리

  • 데이터의 접근이 시간적, 공간적으로 가깝게 일어나는 것

시간지역성

  • 특정 데이터가 한번 접근되었을 경우, 가까운 미래에 또 한번 데이터가 접근할 가능성이 높은 것
  • 메모리 상의 같은 주소에 여러 차례 읽기 쓰기를 수행할 겨우 상대적으로 작은 크기의 캐시를 사용해도 효율성을 높일 수 있음
  • ex) for문이나 while문의 조건변수 i

공간지역성

  • 특정 데이터와 가까운 주소가 순서대로 접근하는 경우
  • 한 메모리 주소에 접근할 때 그 주소뿐만 아니라 해당 블록을 전부 캐시에 가져옴
  • 이때 메모리 주소를 오름차순, 또는 내림차순으로 접근한다면 캐시에 이미 저장된 같은 블록의 데이터를 접근하게 되므로 캐시의 효율성을 크게 향상시킬 수 있음
  • ex) 배열은 순서대로 접근할 가능성이 높다

cache hit & cache miss

CPU가 메인 메모리 접근하기에 앞서 캐시 메모리에 해당 데이터가 있는지 확인하게 됩니다.
만약 해당 데이터가 캐시 메모리에 있다면 캐시 히트,
캐시 메모리에 없어 메인 메모리에 접근해야 한다면 캐시 미스 라고 합니다.

캐시 메모리 쓰기 정책과 데이터 일관성

  • Write Through 정책
    • 메인 메모리를 바로 업데이트
    • 단순하고 캐시와 메인 메모리의 일관성을 유지할 수 있지만, 매번 바꿔줘야 하므로 느리다는 단점이 존재
  • Write Back 정책
    • 일단 캐시만 업데이트
    • 업데이트된 데이터가 캐시에서 빠지게 될 때 메인 메모리를 업데이트
    • 속도가 빠르지만 캐시와 메모리가 서로 값이 다른 경우가 발생하게 된다.
    • 데이터가 바뀌었는지 확인하기 위해 캐시 블록마다 dirty bit을 추가해야하며, 데이터가 변경되었다면 1로 바꾸어준다.

결론

Caching
캐시에 데이터가 계산된 값의 복사본을 저장해 둠으로써 전체적인 처리 속도를 향상시킵니다.

  • 데이터에 직접적으로 접근하는데 시간이 오래 걸릴 때
  • 필요한 값을 얻기 위해 계산하는 과정을 생략하고 싶을 때
  • 반복적으로 동일한 결과를 돌려주는 경우(이미지나 썸네일)

캐싱은 복사본을 이용하는 것 이다.
복사본과 원본이 달라질 수 있으므로 일관성 유지에 유의해야한다.

참고

profile
개발 경험 저장소

0개의 댓글