더북(TheBook)

3 지역성과 캐시 히트


캐시가 없던 시절에는 CPU가 데이터를 요청하면 데이터를 메모리에서 레지스터로 바로 가져왔습니다. CPU가 레지스터에서 데이터를 가져올 때는 1사이클이 걸리는 반면, 메인 메모리에서 가져올 때는 20~100사이클이 걸립니다. CPU의 처리 속도가 빨라지면서 데이터를 요청할 때마다 메모리에서 데이터를 가져오는 이 시간이 매우 부담스러워졌습니다. 연산 속도가 아무리 빨라도 연산에 필요한 데이터가 레지스터에 도착하지 않으면 도착할 때까지 기다려야 하기 때문입니다.

이때 캐시가 등장했습니다. 캐시는 레지스터와 메인 메모리 사이에 있습니다. CPU가 데이터를 요청하면 메인 메모리에서 해당 데이터만 가져오는 것이 아니라, 그 데이터와 함께 인접 데이터로 이루어진 메모리 블록을 캐시로 가져옵니다. 그다음 캐시에서 해당 데이터만 레지스터로 전송합니다. 이때 요청 데이터와 인접 데이터로 이루어진 메모리 블록을 캐시 행(cache line)이라고 하는데 크기는 64~128바이트 정도입니다.

CPU가 다시 다른 데이터를 요청하면 메인 메모리에서 가져오지 않고 우선 캐시에 요청한 데이터가 있는지 확인합니다. 요청한 데이터가 캐시에 있으면 이를 캐시 히트(cache hit)라고 하고, 캐시에 없어서 메인 메모리에서 가져와야 하면 캐시 미스(cache miss)라고 합니다. 캐시에서 데이터를 읽어올 때는 3사이클이 걸립니다. 메인 메모리에서 데이터를 가져오는 것보다 훨씬 빠릅니다. CPU가 데이터를 요청했을 때 캐시 히트가 계속 일어나면 날수록 시스템 성능이 좋아집니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.