하다보니
캐시(Cache) 본문
캐시란 자주 사용하는 데이터나 값을 미리 복사해 놓는 임시 장소를 가리킨다.
캐시는 캐시의 접근 시간에 비해 원래 데이터에 접근하는 시간이 오래 걸리는 경우나 값을 다시 계산하는 시간을 절약하고 싶은 경우에 사용한다. 캐시에 데이터를 미리 복사해놓으면 계산이나 접근 시간 없이 더 빠른 속도로 데이터에 접근이 가능하다.
무어의 법칙(Moore's law)에 의해 최근까지 CPU의 처리 속도가 급격하게 증가했다. 이에 따라 메모리 접근 속도도 함께 늘어나면 좋았겠지만 그러지 못했다.
따라서 메인 메모리에서 데이터를 가져와 CPU에서 아무리 빨리 처리를 해도 다음 연산에 필요한 데이터가 오는 속도가 너무 느려서 CPU의 성능을 모두 내지 못하였다. 이러한 부분을 극복하기 위해 cache(캐시)가 등장했다.
메모리보다는 빠르고 CPU보다는 느린 cache를 메모리와 cpu사이에 위치시켜 cpu가 접근하는 시간을 줄여주었다.
캐시는 cpu에서 사용할 테이터들을 메모리에서 가져와 저장한다.
또는 CPU에서 연산 후 나온 결과물을 저장할 때도 사용한다. 결과가 나올 때마다 메모리에 접근해 저장하는 것보다 cache에 저장해두었다가 한 번에 메모리에 접근해 최신화하는 것이 더 효율적이기 때문이다.
그렇다면 캐시를 엄청 크게 사용하면 메모리에 여러번 접근하지 않아도 되니 좋은 것일까?
물론 캐시의 크기를 증가시키면 성능이 올라가는 것은 맞으나 cache=cash라는 말이 있다. 그만큼 캐시가 비싸다는 말이다. 또한 캐시가 커지면 주소 해독에 대한 주변 회로가 복잡해져 성능이 마냥 좋아지는 것도 아니다.
따라서 우리는 캐시를 효율적으로 사용할 필요가 있다. 캐시를 효율적으로 사용하려면 처리할 데이터가 캐시 내부에 항상 존재하면 가장 효율적이라고 할 수 있다. 내가 필요한 데이터가 캐시 내부에 있다면 hit 이라고 하고 만약 캐시 내부에 없다면 miss라고 한다.
miss가 나게 되면 다시 메모리에 가서 데이터를 가져와야 하고 그 시간 동안 cpu는 연산을 할 수 없으니 치명적이다.
캐시에 hit할 확률을 cache hit ratio라고 하고 miss날 확률을 cache miss ratio라고 한다. cache hit ratio가 높아야 한다.
캐시를 효율적으로 사용하기 위한 많은 요인들이 있지만 그 중에 지역성(locality)을 살펴보겠다.
지역성에는 1. 시간적 지역성(Temporal Locality)와 2. 공간적 지역성(Spatial Locality)이 있다. 캐시는 메모리에서 데이터를 가져올 때 메모리의 주소를 이용해 데이터를 가져온다. 이때 그 주소뿐만 아니라 해당하는 블록을 가져온다.
1. 시간적 지역성
특정 데이터에 한번 접근해서 가져온 경우, 그 데이터에 가까운 미래에 또 한번 접근할 가능성이 높은 것을 시간적 지역성이라고 한다. 즉, 한 번 가져왔던 데이터를 또 쓸 일이 있다는 의미이다. 그런 경우 캐시에 한 번 가져와서 저장하고 여러 번 사용하게 되면 메모리에 접근하는 횟수가 줄어든다. 따라서 캐시는 반복적으로 사용되는 데이터가 많을수록 높은 효율성을 낸다.
2. 공간적 지역성
특정 데이터와 가까운 주소가 순서대로 접근되었을 경우 공간적 지역성이라고 한다. 즉, 앞으로 사용할 데이터들이 가져올 블록 안에 많이 모여있는 것을 의미한다. 필요한 데이터가 모여있다면, 한 번만 메모리에 접근해도 필요한 데이터들을 가져올 수 있다. 만약 데이터들이 여기저기 흩어져 있다면, cache miss가 날 확률이 높아지고 메모리에 여러 번 접근하게 되어 효율성이 떨어진다.
'WEB지식' 카테고리의 다른 글
[RESTful] (0) | 2022.05.12 |
---|---|
[상태관리와 반응형 프로그래밍] (0) | 2022.05.12 |
API 활용 (0) | 2022.02.08 |