월간 <네트워커> - 정보화에 대한 다른 시각
14호 이동영의
캐시란 무엇인가
자원을 공유하자

이동영  
조회수: 6125 / 추천: 59
컴퓨터 사양을 보거나, 컴퓨터를 설정하다 보면 캐시라는 말이 종종 나온다. 재미있는 개념이면서 또 성능에 큰 영향을 주기 때문에 이번 호에서는 캐시가 무엇인지에 대해 알아보려고 한다.

캐시를 이해하기 위해 비유를 들어 보겠다. 책이 많이 있는 도서실에서 참고 자료를 찾아 보면서 글을 쓰는 상황을 생각해 보자. 책이 책꽂이에 잘 정리되어 있기는 하지만, 책상에 앉아서 글을 쓰다가 책꽂이에 가서 필요한 책을 찾아오는 데는 꽤 시간이 걸린다. 따라서 무언가 참고할 것이 있어서 책을 한번 찾아오면, 필요한 내용을 본 뒤에 바로 책꽂이에 다시 갖다 꽂지 않고 책상 위에 놓아두는 것이 훨씬 편리하다. 잠시 후 같은 책을 다시 참고할 일이 생길 가능성이 크기 때문이다. 물론 책상의 넓이가 한정되어 있기 때문에 무한정 책을 가져다 놓을 수는 없다. 책상이 너무 비좁아지면 앞으로 비교적 덜 필요할 것 같은 책은 다시 책꽂이에 갖다둬야 한다.

책상 : 책꽂이 = 캐쉬 : 하드디스크

여기서 주목해야 할 사실이 있다.

첫째로 책꽂이와 책상이라는, 성격이 다른 두 가지 저장 장소가 있다는 점이다. 책꽂이는 용량이 큰 대신 시간이 많이 걸리고, 책상은 빨리 찾아볼 수 있는 대신 용량이 작다. 둘째는 한번 본 책은 앞으로 다시 보게 될 가능성이 크다는 점이다. 만약 그렇지 않다면 한번 본 책을 책상 위에 놓아 둘 필요는 없는 것이다.

캐시는 컴퓨터의 기억장치에 관련된 기술이다. 책꽂이와 책상의 비유에서와 마찬가지로, 컴퓨터에 있는 여러 기억장치들도 그 속도와 용량이 각각 다르다. 하드디스크는 용량이 아주 크지만 속도가 느리고, 메인 메모리(RAM)의 용량은 하드디스크의 백 분의 1 정도로 작지만 속도는 십만 배 정도로 빠르다. 또 CPU에 들어 있는 캐시 메모리는(그냥 캐시라고 하면 보통 이것을 말한다) 메인 메모리의 백 분의 1 정도 용량이지만 속도는 훨씬 빠르다. 즉 기억장치들은 피라미드 모양의 계층 구조를 이루고 있어서, 위쪽은 용량이 작은 대신 속도가 크고, 아래쪽은 용량이 크면서 속도는 느리다.

캐시는 이와 같이 속도가 느린 기억장치와 속도가 빠른 기억장치가 있을 때, 빠른 기억장치에 느린 기억장치의 내용 중 최근에 사용한 일부를 넣어 두는 것을 말한다. 이렇게 하면 같은 내용을 여러 번 참조할 때, 두 번째부터는 빠른 속도로 읽어들일 수 있다.

예를 들어 하드디스크와 메인 메모리의 경우를 생각해 보자. 최근에 나오는 디스크의 용량은 수십에서 수백 기가바이트에 이르지만, 특정한 짧은 시간 동안을 생각해 보면 디스크 안의 내용이 모두 필요한 것은 아니다. 일반적인 경우 전체 디스크의 용량 중에서 극히 일부만을 사용하게 된다. 따라서 이 부분을 하드디스크보다 훨씬 빠른 메인 메모리에 넣어 두면, 번번이 하드디스크를 읽고 쓰는 것보다 훨씬 빠르게 작업할 수 있는 것이다.

하드디스크를 한 번 읽거나 쓰는 데 백 분의 1초 정도의 시간이 걸리지만, 메인 메모리는 천만 분의 1초밖에 걸리지 않는다. 따라서 메모리 용량이 모자라면 하드디스크를 읽고 쓰는 일이 많아지고 컴퓨터의 속도가 급격히 느려지게 되므로, 컴퓨터를 업그레이드할 때 가장 먼저 살펴볼 것은 메모리 용량이 충분한가이다.

읽기 캐쉬와 쓰기 캐쉬

캐시에는 읽기 캐시와 쓰기 캐시가 있다. 읽기 캐시는 한번 읽어들인 내용을 캐시에 저장해 두었다가 다음에 읽을 때 사용하는 것이고, 쓰기 캐시는 데이터를 읽을 때뿐만 아니라 쓸 때에도 디스크에 바로 쓰지 않고 캐시에만 임시로 써 두는 것이다.

쓰기 캐시를 사용하면 방금 쓴 내용을 다시 변경할 때 디스크에 두 번 쓸 필요가 없고, 변경된 내용을 하나하나 쓰는 대신 모아서 한꺼번에 쓸 수 있다는 장점이 있다. (모아서 하면 더 빠르다.) 대신 캐시에 임시로 저장된 내용을 아직 디스크에 쓰지 않았는데 컴퓨터를 끈다든가 하면 문제가 생긴다. 컴퓨터를 끄기 전에 제대로 종료시켜야 하는 이유 중 하나가 이 때문이다.

CPU 발목 잡는 느린 메모리도 캐시가 해결

CPU와 메인 메모리의 경우도 마찬가지다. 컴퓨터의 역사를 돌아보면 CPU의 속도는 엄청나게 빨라졌지만 메모리의 속도는 큰 변화가 없었다. (대신 메모리는 용량이 늘어나는 쪽으로 발전해 왔다.) 최근의 CPU들은 수 GHz(기가헤르쯔)의 속도로 움직이는데, 이는 1초에 수 십억 개의 명령어를 실행할 수 있다는 것을 뜻한다.

그런데 CPU가 실행하는 명령어들(프로그램)은 메인 메모리에 있다. 위에서 메인 메모리를 읽어들이는 데 천만 분의 1초 정도가 걸린다고 했는데, 명령어를 실행할 때마다 매번 하나하나 메인 메모리에서 읽어들인다면 1초에 잘해야 천만 개의 명령어밖에 실행할 수 없다는 결론이 나온다. 메모리의 느린 속도가 CPU의 발목을 잡는 격이다.

이런 속도 차이 문제를 해결하는 데도 캐시가 사용된다. 컴퓨터 프로그램은 같은 작업을 반복하는 구조로 되어 있는 경우가 대부분이기 때문에, 명령어를 한번 메모리에서 읽어들여서 캐시에 넣어 두면 속도를 크게 높일 수 있다. 또한 CPU가 메인 메모리에서 명령어를 읽어들일 때 한 개씩이 아니라 수천 개의 명령어를 한꺼번에 읽어들여서 시간을 절약한다. 캐시의 위력을 실감할 수 있는 예가 인텔의 노트북용 CPU인 펜티엄 M(센트리노)이다. 노트북에서는 전력 소모가 중요한 문제이기 때문에, 펜티엄 M은 데스크탑용 CPU보다 훨씬 낮은 속도로 동작한다. 데스크탑용 CPU가 2-3GHz의 속도로 움직이는 데 비해 펜티엄 M은 1-2GHz의 속도로 움직이는 것이다. 그런데 실제 성능을 비교해 보면 큰 차이가 나지 않는다. 그 비결은 노트북용 CPU가 훨씬 큰 캐시를 가지고 있기 때문이다.

네트워크에도 캐시 기술 응용

컴퓨터 네트워크에도 캐시 기술을 응용할 수 있다. 인터넷에서 웹페이지를 본다는 것은 서버에 저장된 웹페이지를 네트워크를 통해 내려 받아 보는 것이다. 그런데 네트워크를 통해 내려 받는 데는 시간이 많이 걸리기 때문에, 한번 본 웹페이지를 사용자의 컴퓨터에 저장해 두면 다음에는 훨씬 빨리 볼 수 있다. 한 가지 문제점은 웹페이지의 내용이 바뀌는 경우이다. 아이콘 등의 이미지는 잘 바뀌지 않지만 텍스트는 바뀔 수 있고, 게시판의 목록 등은 매우 자주 바뀐다.

이 문제를 해결하기 위해 서버가 웹페이지를 이루는 파일들의 유효기간을 알려준다든가, 캐시에 저장된 내용을 사용하더라도 변경이 있었는지 여부를 서버로부터 확인한다든가 하는 보완책이 필요하다.
추천하기