Studies/Computer Science

[운영체제] 캐시 (Cache)

꽁치대디 2022. 8. 19. 08:42

[운영체제] 캐시 (Cache)

메모리 용량이 작을수록 파일을 저장하고 꺼내오는 속도는 더 빠릅니다. 그렇기 때문에 용량이 큰 저장장치는 속도가 느릴수밖에 없습니다.

 

하지만 메모리 용량이 크고, 속도가 빠른 두 가지 장점을 잡기에는 비용이 너무 많이 듭니다.

 

그래서 데이터 저장 공간은 속도와 용량 등 특성에 맞게 역할을 나눠서 사용하는데, 이를 메모리 계층 구조라고 합니다.

 

메모리 계층 구조

위 그림처럼 데이터 처리속도를 높이기 위해 자주 사용되는 데이터를 담아두고, 해당 데이터가 필요할 때 캐시에 접근합니다.

데이터 지역성 원리 (Principle of Locality)

파레토의 법칙은 원인 중 상위 20% 가 전체 결과의 80% 를 만든다는 법칙입니다.

 

이 법칙은 메모리에도 적용되는데요, 자주 쓰이는 데이터는 시간적 혹은 공간적으로 한 곳에 몰려있을 가능성이 높습니다. 이는 데이터 지역성의 원리라고 불립니다.

 

데이터 지역성은 크게 2가지로 나뉩니다.

 

시간 지역성

  • 최근 접근한 데이터에 다시 접근하는 경향
  • for 문에서 인덱스 역할을 하는 변수 i 는 짧은 시간안에 여러번 접근이 이뤄짐

공간 지역성

  • 최근 접근한 데이터의 주변 공간에 다시 접근하는 경향
  • 배열을 차례대로 탐색할 때 가까운 메모리 공간에 연속적으로 접근
  • 배열은 연속적인 메모리 공간을 가지기 때문
// 시간 지역성 - 반복해서 변수 i 에 접근
for i in 0 ... 10 {
    // 공간 지역성 - 연속적인 메모리공간 (배열) 에 접근
    array[i] = i		
}

캐시 동작 방식

  • 원본 데이터와는 별개로 자주 쓰이는 데이터 (Hot Data) 들을 복사해둘 캐시 공간 마련
  • 캐시 공간은 O(1) 등 낮은 시간복잡도로 접근 가능한 곳을 주로 사용
  • 데이터 요청이 들어오면 원본 데이터가 담긴 곳에 접근하기 전 먼저 캐시 내부부터 탐색
  • 캐시에 원하는데이터가 없거나 (Cache Miss), 너무 오래되어 최신성을 잃었을때 (Expiration)
    • 원본 데이터가 있는 곳에 접근해 데이터를 가져옴
    • 이 때 데이터를 가져오며 캐시에도 해당 데이터를 복사하거나 갱신함
  • 캐시에 원하는 데이터가 있을때 (Cache Hit)
    • 원본 데이터가 있는 공간에 접근하지 않고 바로 해당 데이터 제공
  • 캐시 공간은 작기 때문에 공간이 모자라게 되면 안쓰는 데이터부터 삭제하여 공간 확보 (Eviction)

캐시 종류

CPU 칩에는 여러개의 캐시가 들어가며 각각의 캐시는 각자의 목적과 역할을 가지고 있습니다.

 

L1 캐시

  • 프로세서와 가장 가까운 캐시, 속도를 위해 I$ 와 D$ 로 나눔
  • I$ (Instruction Cache) : 메모리의 텍스트 영역 데이터를 다루는 캐시
  • D$ (Data Cache) : 텍스트 영역을 제외한 모든 데이터를 다루는 캐시

L2 캐시

  • 용량이 큰 캐시, 크기를 위해 L1 캐시처럼 나누지 않음

L3 캐시

  • 멀티 코어 시스템에서 여러 코어가 공유하는 캐시

캐시에 달러 기호 $ 를 사용하는 이유는 Cache 와 현금을 뜻하는 Cash 의 발음이 같기 때문입니다.

캐시 성능 측정

캐시의 성능을 측정할 때는 Hit Latency 와 Miss Latency 가 중요한 요인으로 꼽힙니다.

  • CPU 에서 요청한 데이터가 캐시에 존재하는 경우를 Hit, 그렇지 않은 경우를 Miss 라고 함
  • Hit Latency 는 Hit 가 발생해 캐싱된 데이터를 가져올때 소요되는 시간
  • Miss Latency 는 Miss 가 발생해 상위 캐시나 메모리에서 데이터를 가져올때 소요되는 시간
    • ex) L1 캐시에 데이터가 존재하지 않아 L2 캐시나 메모리에서 데이터를 가져올 때

평균 접근 시간은 다음과 같은 식으로 구할 수 있습니다.

위 식을 보면 알 수 있듯이, 캐시의 성능을 높이기 위해서는 다음과 같은 방법들을 이용할 수 있습니다.

  • 캐시 크기를 줄여서 Hit Latency 를 줄인다
  • 캐시 크기를 늘려서 Miss 비율을 줄인다
  • 더 빠른 캐시를 이용해 Latency 를 줄인다

캐시 활용 예시

CPU 의 캐시 메모리

  • 현대 CPU 는 1초에 수십억번씩 작동 가능
    • 아무리 빠른 메모리라도 CPU 속도를 따라오기 어려움
    • 그래서 SRAM 이라는 특수 메모리를 CPU 에 넣어 캐시 메모리로 사용
  • 하드 디스크는 메인 메모리에 비해 10만배 이상 느림
    • 처리 효율을 올리기 위해서 자주 사용하는 데이터는 캐싱해두는것이 좋음
    • 데이터베이스 또한 쿼리를 실행하여 하드 디스크에서 데이터를 읽고 쓰는 것이 오래걸림
    • 데이터베이스는 대부분 쓰기보다 읽기가 많아서 자주 요청받는 쿼리의 결과를 캐싱해두면 효율이 오름

CDN (Content Delivery Network)

  • 세계 각지에 캐시 서버를 두어 전송속도를 높이고 부하를 분산하는 시스템
  • Google 은 각 통신사마다 Google Global Cache 를 둬서 인기있는 Youtube 영상은 미국서버까지 접속할 필요 없이 국내서버에서 처리하도록 함
  • 장점은 비싼 국제 회선 비용이 절감 및 버퍼링 감소

웹 캐시

  • 네트워크를 통해 데이터를 가져오는 것은 하드디스크보다 느릴때가 많음
  • 브라우저 캐시
    • 브라우저는 웹 페이지에 접속할때 HTML, CSS, JS, 이미지등을 하드 디스크나 메모리에 캐싱해뒀다가 다음번에 다시 접속할 때 이를 재활용함 
  • 응답 캐시
    • 웹 서버 또한 상당수의 경우 동적 웹 페이지라 할지라도 매번 내용이 바뀌지 않는 경우가 더 많음
    • 그래서 서버에서 생성한 HTML 을 캐싱해뒀다가 다음번 요청에 이를 재활용함
  • 프록시 캐시
    • 클라이언트에서 자주 요청받는 내용은 웹 서버로 전달하지 않고 웹 서버 앞단의 프록시 서버에서 캐싱해둔 데이터를 바로 제공하기도 함

참고 링크

https://parksb.github.io/article/29.html

 

💵 캐시가 동작하는 아주 구체적인 원리: 하드웨어로 구현한 해시 테이블

기술의 발전으로 프로세서 속도는 빠르게 증가해온 반면, 메모리의 속도는 이를 따라가지 못했다. 프로세서가 아무리 빨라도 메모리의 처리 속도가 느리면 결과적으로 전체 시스템 속도는 느려

parksb.github.io

https://chelseashin.tistory.com/43

 

[OS] 캐시 메모리(Cache Memory)란? 캐시의 지역성(Locality)이란?

캐시 메모리(Cache Memory) 주기억장치에서 자주 사용하는 프로그램과 데이터를 저장해두어 속도를 빠르게 하는 메모리 그러므로 캐시는 주기억장치보다 크기가 작을 수밖에 없다! 캐시 기억장치

chelseashin.tistory.com

https://www.youtube.com/watch?v=c33ojJ7kE7M&list=PLgXGHBqgT2TvpJ_p9L_yZKPifgdBOzdVH&index=124 

 

'Studies > Computer Science' 카테고리의 다른 글

[컴파일러 이론] Tokenizer, Lexer, Parser  (0) 2022.08.21
[운영체제] 캐시 교체 정책  (0) 2022.08.20
[Linux] Linux & Unix  (0) 2022.08.18
[네트워크] 쿠키와 세션  (0) 2022.07.13
[네트워크] JSON & XML  (0) 2022.07.05