Cache Coherence Protocol - MESI

http://en.wikipedia.org/wiki/MESI_protocol

* MESI States
MODIFIED: cache line이 현재 cache에 올라와 있고 dirty 상태. 언젠간 write-back해야 함. write-back 후에는 EXCLUSIVE 상태로 전이
EXCLUSIVE: cache line이 현재 cache에 올라와 있고 clean 상태
SHARED: 이 cache line이 다른 cache에도 올라가 있을 수 있으며 clean한 상태.
INVALID: 이 cache line은 invalid 함


* Operations
- INVALID를 제외한 모든 상태에서 read 가능.
  INVALID 상태인 경우 메모리에서 fetch 해야 함
- cache가 MODIFIED/EXCLUSIVE 상태인 경우에만 write 가능.
  SHARED 상태에서 write가 일어나면 다른 곳에 있는 cache들을 모두 invalidate해야 함.
  이는 Request For Ownership(RFO)에 의해 수행 됨.
- non-MODIFIED 상태의 cache는 언제라도 discard(=INVALID 상태로 전이) 될 수 있음
  MODIFIED 상태인 경우 먼저 write-back이 일어나야 한다.
- MODIFIED 상태의 cache는 해당 메모리 영약에 대해 반드시 모든 read를 snoop해야 한다.
  이것은 강제로 해당 read를 back off(i.e. 나중에 재시도)하는 것으로 수행된다. 
  그리고 나서 memory에 해당 데이터를 write하고 cache의 상태를 shared 상태로 변경한다.
- SHARED 상태의 cache line을 유지하고 있는 cache는 반드시 invalidate 혹은 RFO 메시지를 listen하고 있다가 해당 메시지를 받으면 해당 cache line을 discard해야 한다.
- EXCLUSIVE 상태의 cache line을 유지하고 있는 cache는 반드시 모든 read operation을 snooping하고 있다가 해당 메시지를 받으면 SHARED 상태로 만들어야 한다.

- MODIFIED/EXCLUSIVE 상태는 항상 정확함
  -> 시스템에서 해당 cache line에 대한 ownership이 match 됨
- SHARED 상태는 부정확할 수 있음
  -> SHARED 상태의 cache line을 remote에서 discard하면 이 cache line은 나만의 것이 되지만 EXCLUSIVE가 되지는 않는다.
- 이런 맥락에서 EXCLUSIVE 상태는 기회 최적화(opportunistic optimization)이다.
  -> SHARED 상태의 cache line의 변경 => 다른 모든 cache를 invalidate하기 위해 bus transaction 필요
  -> EXCLUSIVE 상태를 변경하는 것은 bus transaction이 필요치 않음


* Request For Ownership(RFO)
read operation과 invalidate broadcast의 결합이다.
이것은 EXCLUSIVE 혹은 MODIFIED 상태가 아닌(=SHARED 혹은 INVALID 상태인) cacheline에 대해 write를 하는 CPU가 보냄
이 메시지를 받은 CPU는 해당 cache line을 INVALID 상태로 전이

ownership transaction을 위한 read operation은 해당 memory에 write하기 위한 read 임.그래서 이 operation은 exclusive 하다.
이로써 데이터를 내 cache로 가져오고 다른 CPU의 cache들은 invalidate 시킨다.

(A read for ownership transaction is a read operation with intent to write to that memory address. Therefore this operation is exclusive. It brings data to the cache and invalidates all other processor caches which hold this memory line.)

* 참고
clean: memory의 데이터와 cache의 데이터가 일치
dirty: memory의 데이터와 cache의 데이터가 불일치



결국, 각 상태마다 어떤 메시지들을 snoop 하거나 특정 메시지를 broadcast 함으로써 state transition을 수행..
이로써 cache coherence 지원..흠...


덧글

  • LINUS 2017/07/17 16:28 # 삭제 답글

    좋은 글 감사합니다.
댓글 입력 영역