Skip to content

Latest commit

 

History

History
95 lines (78 loc) · 6.11 KB

1. 캐시의 지역성.md

File metadata and controls

95 lines (78 loc) · 6.11 KB

캐시의 지역성

이 문서는 2022년 11월 11일에 @sumin-dev에 의해서 작성되었습니다.

1. 캐시란 무엇일까?
    1.1. 5분 53초만에 캐시 이해하기
    1.2. 메모리 계층 구조
    1.3. 캐시의 파레토 법칙
2. 캐시의 지역성 원리
    2.1. 시간적 지역성(Temporal Locality)
    2.2. 공간적 지역성(Spatial Locality)
    2.3. 시각적으로 나타낸 데이터 지역성 패턴

1. 캐시란 무엇일까?

1.1. 5분 53초만에 캐시 이해하기🔍CLICK!

  • 마을에는 모든 주민이 먹을 수 있는 1년치 식량을 저장할 자리가 없다!(땅값비쌈😪)
    • 마을에 멀리 떨어진 동굴에 채소, 과일, 쌀, 음료수, 고기 등 모든 것을 보관하자!
  • 매일 밥 먹으러 갈 때마다 멀어서 너무 힘들다!
    • 자주 먹는 쌀과 고기는 한달치 정도만 더 가까운 동굴을 파서 보관하자!
  • 마을 족장이 햇반과 닭고기 조합만 먹는다!
    • 마을 안의 비싼 창고에는 족장이 좋아하는 조합을 보관하자!

image

  • 하드 디스크 ➡ 멀리 있는 동굴은 크고 넓어서 모든 식량 보관 가능. 마을과 멀어서 땅값도 쌈.
  • 메인 메모리(램) ➡ 중간에 있는 동굴은 크진 않지만 마을사람들이 즐겨 찾는 음식 보관.
  • 캐시 메모리 ➡ 마을 안 창고는 아주 작지만 족장이 좋아하는 중요한 음식 보관.

image

  • ❓ 비싼 창고에는 중요한 물건만 들어가야 해! 어떤 물건이 들어가야 할까?
  • ✅ 규칙을 잘 정해야지!
    • 대표적인 캐시 메모리 저장 규칙
      • 최근에 접근된 데이터(시간적 지역성)
      • ➡ 족장이 햇반에 빠졌으니 햇반을 또 먹을 가능성이 높아~!
      • 최근에 접근된 데이터의 주변 데이터(공간적 지역성)
      • ➡ 족장이 햇반과 닭고기에 빠졌으니 현미와 소고기도 준비하자~!

1.2. 메모리 계층 구조

image

  • 데이터 저장 공간을 속도와 용량 순서대로 쌓으면 마치 피라미드 형상(Memory hierarchy)
  • 데이터를 저장하는 공간의 속도와 용량은 반비례 관계
    • 속도가 빠른 메모리일수록 용량이 작음
    • 용량이 큰 저장장치는 속도가 느림
    • 속도와 용량 모두를 잡기에는 비용이 많이 듦
    • ➡ 데이터 저장 공간은 속도와 용량에 따라 특성에 맞게 역할을 나누어서 사용해야 함
  • 캐시메모리는 CPU와 주기억장치 사이에 위치
    • 주기억장치에서 자주 사용하는 프로그램과 데이터를 저장해두어 속도를 빠르게 하는 메모리
    • 속도가 빠른 장치와 느린 장치 간의 속도 차에 따른 병목현상을 줄이기 위한 범용 메모리
    • 캐시메모리를 사용하면 주기억장치를 접근하는 횟수가 줄어들어 컴퓨터의 처리속도가 향상

1.3. 캐시의 파레토 법칙

image

  • 이탈리아의 경제학자 빌프레도 파레토가 발견한 현상
  • 원인 중 상위 20%가 전체 결과의 80%를 만든다는 법칙(2대8 법칙)
  • 예시
    • 인구의 20%가 전체 부의 80%를 가지고 있다
    • 즐겨입는 옷의 80%는 옷장에 걸린 옷의 20%에 지나지 않는다
  • 파레토 법칙을 캐시에 적용한다면?
    • ✅ 모든 데이터를 캐싱할 필요는 없으며, 많이 사용되는 데이터 20%를 캐싱한다면 효율을 극대화하여 전체 성능 향상

2. 캐시의 지역성 원리

  • 모든 데이터를 캐시에 담기에는 캐시라는 저장 공간은 작다!
  • 캐시가 효율적으로 동작하려면, 캐시의 적중율(Hit-rate)을 극대화시켜야 함
  • 파레토 법칙에 해당하는 소수의 데이터를 선별해야함. 그럼 어떻게?
  • ✅ 캐시에 저장할 데이터가 지역성을 가져야지!
    • 데이터 접근이 시간적, 혹은 공간적으로 가깝게 일어나는 것
    • 기억장치 내의 정보를 균일하게 Access하는 것이 아닌 어느 한 순간에 특정 부분을 집중적으로 참조하는 특성

2.1. 시간적 지역성(Temporal Locality)

  • 특정 데이터가 한 번 접근되었을 경우, 가까운 미래에 또 한번 데이터에 접근할 가능성이 높은 것
  • 캐시는 반복적으로 사용되는 데이터가 많을수록 높은 효율
  • 예시
    • for문에서 조건변수 let i = 0;을 선언했을 때, 해당 변수는 for문이 끝나기 전까지 계속 쓰일 확률이 높은 것

2.2. 공간적 지역성(Spatial Locality)

  • 특정 데이터와 가까운 주소의 데이터에 접근할 가능성이 높은 것
  • 캐시는 한 메모리 주소에 접근할 때 그 주소뿐 아니라 해당 블록을 전부 캐시에 가져옴
  • 블록 안에 필요한 데이터들이 모여있다면 한 번만 메모리에 접근해도 필요한 데이터를 많이 가져와 높은 효율
  • 예시
    • for문에서 어떤 배열에 접근했을 때, 해당 배열이 위치한 메모리 공간의 내용은 for문이 끝나기 전까지 계속 쓰일 확률이 높은 것.
    • for문에서 array[0], array[1], array[2]와 같이 배열에 접근할 때, 다음번에는 array[3]에 접근할 확률이 높음(순차 지역성)

2.3. 시각적으로 나타낸 데이터 지역성 패턴

image

Reference