스물두줄

컴퓨터시스템응용기술사 · 컴퓨터 구조 및 운영체제

캐시 일관성

캐시 일관성은 여러 코어의 캐시에 있는 같은 주소의 복사본 값을 일치시키는 기능이다. 코어마다 캐시를 두기 때문에 같은 데이터의 사본이 여러 곳에 생긴다. 한 코어가 값을 바꾸고 다른 코어가 옛 값을 읽으면 프로그램 결과가 틀린다. 캐시 일관성은 두 가지 요구를 만족…

주요 장면

  1. 0:02 정의
  2. 0:20 두 가지 요구
  3. 0:42 MESI 상태
  4. 1:16 스누피와 디렉터리
  5. 1:56 거짓 공유
  6. 2:16 정리

대본

정의

캐시 일관성은 여러 코어의 캐시에 있는 같은 주소의 복사본 값을 일치시키는 기능이다.

코어마다 캐시를 두기 때문에 같은 데이터의 사본이 여러 곳에 생긴다.

한 코어가 값을 바꾸고 다른 코어가 옛 값을 읽으면 프로그램 결과가 틀린다.

두 가지 요구

캐시 일관성은 두 가지 요구를 만족해야 한다.

첫째는 쓰기 전파다. 한 캐시의 변경이 다른 복사본에 반드시 알려져야 한다.

둘째는 트랜잭션 직렬화다. 같은 위치의 쓰기가 모든 코어에서 같은 순서로 보여야 한다.

이 두 요구가 있어야 공유 메모리 모델이 성립한다.

MESI 상태

MESI 프로토콜은 캐시 라인마다 M, E, S, I 네 상태를 둔다.

M은 수정 상태다. 유일한 복사본이며 메모리와 값이 다르다.

E는 독점 상태다. 유일한 복사본이고 메모리와 값이 같다.

S는 공유 상태다. 여러 캐시가 복사본을 가지며 메모리와 값이 같다.

I는 무효 상태다. 다른 캐시가 쓰면 그 복사본은 I가 된다.

쓰기 때는 한 캐시만 M으로 남고 나머지 복사본은 모두 I가 된다.

스누피와 디렉터리

스누피 방식은 모든 캐시 컨트롤러가 버스 트랜잭션을 감시하는 방식이다.

디렉터리 방식은 복사본 위치를 디렉터리가 기록하고 해당 코어에만 메시지를 보낸다.

그래서 스누피는 지연이 짧지만 노드가 늘면 버스 트래픽이 커진다.

디렉터리는 트래픽이 적지만 조회와 전달 때문에 지연이 길어진다.

정답은 디렉토리 프로토콜이다. 대규모 시스템에서는 점대점 전송이 대역폭을 아낀다.

거짓 공유

거짓 공유는 서로 다른 변수가 같은 캐시 라인에 있을 때 생기는 문제다.

코어 A가 변수 X를 쓰면 같은 라인을 가진 코어 B의 복사본이 무효화된다.

변수가 서로 무관해도 라인 단위로 무효화가 일어나 성능이 떨어진다.

해결은 데이터를 캐시 라인 경계로 정렬해 분리하는 것이다.

정리

정리하자. 캐시 일관성은 같은 주소 복사본의 값을 일치시키는 기능이다.

MESI는 네 상태로 쓰기 전에 다른 복사본을 무효화한다.

스누피는 브로드캐스트를 감시하고, 디렉터리는 점대점으로 보낸다.

시험에서는 방식 차이를 브로드캐스트 여부로 설명한다.

같은 장의 영상