CPU 캐시에 대해 알아보기 전에 캐시 라는 개념에 대해 먼저 알아보자
캐시는 자주 사용하는 데이터를 미리 복사해 놓는 임시 저장 장소를 말한다. 이러한 캐시는 원본 데이터에 접근하는 시간을 절약하기 위해 사용된다. 즉 데이터 검색 속도를 높이기 위함이다.
위 이미지는 CPU 캐시의 구조를 소프트웨어 관점으로 보여주는 이미지이다
위 이미지는 CPU 캐시의 구조를 하드웨어 관점으로 보여주는 이미지이다
데이터 지역성은 캐시의 적중률(hit)을 높여 메모리 접근 패턴을 최적화 하여 프로그램 성능을 향상 시키는 데에 중요한 역할을 하는 개념이다.
데이터 지역성은 자주 쓰이는 데이터가 시간적으로나 공간적으로 한 곳에 몰려있을 가능성이 높다는 원리를 말한다.
1. 시간지역성 : 시간 지역성은 특정 데이터가 한 번 접근되면, 가가운 미래에 그 데이터가 다시 접근될 가능성이 높다는 것을 의미한다. CPU 캐시가 시간 지역성을 활용하는 방법은 다음과 같습니다.
LRU(Lease Recently Used) 알고리즘 : 자주 사용되는 데이터를 캐시에 남겨두기 위해 LRU 알고리즘을 사용하여 덜 자주 사용되는 데이터를 제거하고, 최근에 사용된 데이터를 유지합니다.
예를 들어, 반복문에서 같은 변수를 여러 번 읽고 쓰는 경우가 있습니다. 이 경우 시간 지역성 때문에 해당 변수는 캐시에 남아 있어 반복문을 빠르게 실행할 수 있는 것.
2. 공간 지역성 : 공간 지역성은 특정 데이터가 접근되면, 그 데이터와 인접한 주소에 있는 데이터도 곧 접근될 가능성이 높다는 것을 의미한다.
CPU 캐시가 공간 지역성을 활용하는 방법은 다음과 같다.
캐시 라인 : 캐시 메모리는 보통 캐시 라인이라는 단위로 데이터를 저장하며, 캐시 라인을 일반적으로 여러 바이트의 데이터를 포함하고 하나의 캐시 라인에 연속된 메모리 주소의 데이터가 저장된다.
예를 들어, 배열의 요소를 순차적으로 접근하려는 경우에 공간 지역성 때문에 배열의 연속된 요소들이 캐시에 로드되어 배열 접근이 빠르게 이루어질 수 있음.
캐시 공간은 등 낮은 시간복잡도로 접근 가능한 곳을 주료 사용한다.
캐시에 원하는 데이터가 없거나 (Cache Miss) 너무 오래 되어 최신성을 잃었을 때 (Expiration)
캐시에 원하는 데이터가 있을 때 (Cache Hit)
캐시 공간은 작기 때문에 공간이 모자랄 경우 안쓰는 데이터부터 삭제하여 공간을 확보한다 (Eviction
세계 각지에 캐시 서버를 두어 전송속도를 높이고 부하를 분산하는 시스템을 말한다.
Google 은 각 통신사마다 Google Global Cache를 두어 인기있는 YouTube 영상은 미국서버까지 접속할 필요 없이 국내 서버에서 처리하도록 설계하였다.
가격이 비싼 국제 회선 비용이 절감되고 버퍼링이 감소한다는 장점을 가짐
네트워크를 통해 데이터를 가져오는 것은 때때로 하드디스크에서 가져오는 것 보다 느릴때가 있다.
브라우저 캐시 : 브라우저는 웹 페이지에 접속할 때 HTML,CSS,JS, 이미지 등을 하드 디스크나 메모리에 캐싱해뒀다가 다음번에 다시 접속할 때 이를 재활용하는 것을 말한다.
응답캐시 : 웹 서버 또한 상당수의 경우 동적 웹 페이지라 할지라도 매번 내용이 바뀌지 않는 경우가 더 많기 때문에 서버에서 생성한 HTML을 캐싱해뒀다가 다음번 요청에 이를 재활용 하는 것을 말한다.