본문 바로가기

스파르타 부트캠프(spring)

[내일배움캠프] 자바 Spring 입문_cache_221230

캐시

: cpu의 업무처리에 필요한 정보를 빠르게 가져올 수 있게 해주는 역할

-->cpu와 메모리 사이의 데이터 전송 레이턴시 개선을 위해 사용되는 전략이다.

 

캐싱 알고리즘

: 지역성(Locality)

캐시도 나름의 근거를 토대를 가지고 메모리로부터 데이터 캐싱을 하는 것 . 엉떵한 데이터만 캐싱하면 cache miss 확률만 올라가서 시간과 공간을 쓸데없이 잡아먹는다. 근거가 중요!

  • 시간적 지역성
    지금 어떤 데이터를 사용했다면 가까운 미래에 재사용 할 가능성이 있다고 믿기
  • 공간적 지역성
    지금 어떤 데이터를 사용했다면 그와 인접한 데이터도 사요할 가능성이 있다고 믿기

 

 

cpu는 다수의 코어를 보유하고 있고 각 코어는 자체 캐시를 보유한다.

그림에서처럼 각 캐시들이 코어랑 거리가 멀수록 실제로도 멀어진다고 생각하여야한다. -> 거리가 가까울수록 데이터를 가져오는 속도가 빨라지고 멀수록 느려진다.

 

캐시 코히런스(일관성) 문제

: 캐시메모리에 저장된 데이터가 변경되었을 경우 해당 데이터를 동시에 보관하고 있다면 이 데이터의 일관성과 무결성은 어떻게 보장되어야 하는가에 대한 문제

-->MSI프로토콜을 사용

(MSI프로토콜 : 각각의 캐시 라인들에 상태를 부여-> 각 캐시 라인의 상태에 따라 최신값으로의 동기화 여부를 결정하는 프로토콜)

  • S(Shared) 상태
    가장 기본 상태. 동기화가 완료된 직후거나 값에 변함이 없으면 캐시 라인은 해당 상태를 유지

  • M(Modified) 상태
    -코어가 캐시 및 메모리의 값을 새롭게 바꾸려고 할 때 캐시 라인의 상태를 S→M 상태로 바꿔준다.
    -이러한 상태의 캐시 라인이 있으면 메모리는 해당 데이터가 새롭게 본인에게 쓰이기 전까지는 다른 코어의 요구를 거부.

  • I (Invalid) 상태
    -캐시 라인의 상태가 유효하지 않음을 뜻한다.
    -이 상태는 M 상태로 만들고 새롭게 데이터를 쓰려는 코어가 본인의 캐시 라인을 제외한 다른 캐시 라인들의 상태를 전부 I 상태로 바꾸어 놓는 것