웹 페이지 제작 및 배포 서비스를 하면서 중요하게 생각했던 요소가 바로 캐시 서버였다. ec2 서버를 프리티어 서버로 올리면서 서버에 과부하를 주지 않도록 하는게 중요했다. 그렇게 캐시 메모리를 처음 접했다.
우리 컴퓨터에도 캐시 메모리가 있다. 하는 역할은 크게 다르지 않다. 요청을 받을 때마다 매번 처음인거처럼 정해진 절차를 계속 밟으면서 처리한다면 과부하가 좀 더 쉽게 올 것이다. 이걸 어느정도 해결해주는 것이 캐시 메모리의 역할이다. 지금부터 캐시 메모리에 대해서 좀 더 자세하게 풀어보겠다.
1. 캐시 메모리 특징
앞서 말한 것처럼 캐싱은 컴퓨터 처리 성능을 높이기 위한 기법으로, 자주 쓰는 것, 또 쓸 것 같은 것들은 미리 따로 저장해 두었다가 요청 시 빨리 꺼내 주는 것이다. "Cache"라는 단어 자체도 임시 보관 이라는 뜻을 가지고 있다. 캐시 메모리는 이러한 목적을 가지고 만들어졌는데, 메인 메모리에서 자주 사용하는 프로그램과 데이터를 저장해두어 속도를 빠르게 한다.
캐시 메모리(Cache Memory)
- 속도가 빠른 장치와 느린 장치 간의 속도차에 따른 병목 현상을 줄이기 위한 범용 메모리
- 메인 메모리와 CPU 사이에 위치하며, CPU의 속도에 버금갈 만큼 메모리 계층에서 가장 속도가 빠름
(용량이 적고 비싼 것이 단점)
CPU에는 이러한 캐시 메모리가 2-3개 정도 있고, 이는 아래에서 다시 설명하도록 한다. 캐시 메모리의 특징은 빠른 처리 속도를 들 수 있는데, 메모리 계층 중에서는 가장 빠른 속도를 가지기 때문에 자주 쓰는 데이터가 캐시 메모리에 저장 되어 있다면 그 데이터에 관한 처리는 보다 빠르게 진행될 수 있다는 것이다(캐시 메모리는 작기 때문에 정확히는 CPU가 사용할 데이터의 참조정보를 저장한다.).
사실 그러기 위해선 캐시 메모리가 앞으로 쓰일 데이터를 예측해야 한다. 이를 적중(hit)과 실패(miss)로 나눠 생각해볼 수 있는데, 당연한 얘기지만 적중률이 높을 수록 캐시 메모리가 효율적으로 작동한다는 것이다. 그렇다면 캐시 메모리는 무슨 기준을 가지고 데이터를 예측하여 저장하는 걸까. 이를 위해서 캐시 메모리의 참조 지역성을 알아 볼 필요가 있다.
캐시 메모리의 지역성(Cache Locality)
- 시간 지역성
- for나 while 같은 반복문에 사용하는 조건 변수처럼 한번 참조된 데이터는 잠시후 또 참조될 가능성이 높음 - 공간 지역성
- A[0], A[1]과 같은 연속 접근 시, 참조된 데이터 근처에 있는 데이터가 잠시후 또 사용될 가능성이 높음
그래서 캐시에 데이터를 저장할 때는 참조 지역성에 따라 이후에도 사용될 확률이 높다고 판단되어 옆 데이터도 같이 저장된다. 그러나 늘 적중률이 높을 수 없다. 캐시 메모리에서 데이터를 불러올 수 없을 때 캐시 미스(Cache miss)라고 하는데, 캐시 미스가 나는 경우는 보통 3가지로 나눌 수 있다.
캐시 미스(Cache Miss)
- cold miss
해당 주소를 처음 불러와서 생기는 미스. - conflict miss
복수의 데이터가 같은 캐시 메모리 주소에 할당 되어 있어 발생하는 미스, Direct Mapped Cache에서 많이 발생한다. - capacity miss
캐시 메모리 공간이 부족해서 생기는 미스.
2. 구조, 동작 과정
Direct Mapped Cache
- 메모리상의 위치와 캐시 메모리 상의 위치가 다대일로 연결되어 있음
- 설계가 단순한 만큼 구현도 단순함, 하지만 적중률이 떨어질 수 있음. Conflict miss에 취약함
(위의 그림처럼 메모리가 참조 되어 있는데, 주황색에 해당되는 데이터를 전부 사용한다면 충돌남)
Fully Associative Cache
- 캐시 메모리의 빈 공간에 마음대로 주소를 저장
- 간단한 저장 방식에 비해, 찾을 때는 모두 뒤져봐야 한다.
- 그렇기에 병렬적으로 검사해서 데이터를 찾음 → 복잡함, 높은 비용 발생
Set Associative Cache
- Direct Mapped 와 Fully Associative 방식을 합쳐 놓은 방법
- 빈공간에 마음대로 저장한다. 단, 특정 행에만 저장하는 방식.
- 행을 일정 set으로 묶어 메모리의 위치는 특정 set을 참조하되, 해당 set 안의 어느 line이던 저장할 수 있다.
(set이 몇개인가에 따라 n-way set associative 라 불림) - 중간 방식이기 때문에 3개의 장점을 적절히 섞음
(Fully associative 보단 탐색이 빠르고, Direct mapped 보단 저장이 빠르다.
캐시 메모리의 매핑에 대해 알아 보았다. 캐시 메모리는 메인 메모리에 접근하기 전 먼저 접근 하는 공간이기 때문에 CPU의 성능을 판가름 할 수 있는 중요한 요소 중 하나다. 보통 CPU는 2-3개의 캐시 메모리를 가지고 있는데, L1, L2, L3 캐시 메모리라고 부른다. 여기서 L은 Level을 뜻한다. 뒤에 숫자는 속도와 크기에 따라 분류한 것으로 L1에서 데이터를 찾지 못하면 L2, L3 순으로 넘어가서 탐색하게 된다.
3. L1,L2,L3
L1
- 보통 8~64KB 정도의 용량
- CPU가 가장 빠르게 접근
L2
- 일반적으로 64KB~4MB 정도가 사용, L1과 비슷하지만 조금 더 느림(RAM보다는 빠름)
- CPU 회로판에 별도의 칩으로 내장.
- L1에 데이터가 없다면 L2로 넘어와서 탐색.
L3
- L1, L2와 동일한 원리로 작동, L3는 제일 크고 제일 느림
- 없는 경우가 더 많음(L2까지만 달아도 충분하기 때문)
(L1/L2 캐시 메모리 정도만 CPU 성능에 직접적인 영향을 미치기에 L3 캐시는 크게 신경쓰지 않는것이 일반적인 추세) - L3 캐시는 CPU가 아닌 메인보드에 내장.
출처
Tech Interview - 캐시 메모리(Cache Memory)
정보 캡슐 지식인 - 컴퓨터 메모리 CPU의 캐시메모리 역할과 동작원리
rebro의 코딩 일기장 - [운영체제(OS)] 10. 캐시 메모리(Cache Memory)
'CS 기초' 카테고리의 다른 글
[OS] Zero Copy (0) | 2023.07.14 |
---|---|
Java 개념 정리 (0) | 2023.05.23 |