🏷️Cache Coherency
- 각 캐시에 저장된 데이터들 사이의 일관성은 유지되어야 한다.
- 캐시를 계층 구조로 갖는 멀티 코어 프로세서에서는 L1, L2 캐쉬가 코어마다 존재할 수 있다.
- 🖇️cf. 물론 어떻게 설계하느냐에 따라 다 다르기에 특정 아키텍처에 종속된 이야기다.
- L1은 보통 명령어 캐시와 데이터 캐시로 나뉘어지고, L2와 L3는 혼합되어 있다.
📌Snooping Protocol
1. MSI Snooping (Modified, Shared, Invalid)
- Invalid
- 해당 데이터(cache line)이 유효하지 않음을 의미한다.
- 읽거나 쓰려면 반드시 값을 요청해야한다.
- Modified
- 데이터는 해당 캐시에만 존재하고 메인 메모리는 최신 상태가 아니다.
- 즉, 오직 하나의 코어만 이 cache line을 갖고 있는 상태다.
- Shared
- 데이터가 한 곳 이상에서 공유중이거나 자기만 갖고 있다.
- 메인 메모리도 최신 값을 갖고 있다.
2. MESI (Modified, Exclusive, Shared, Invalid)
- MSI 프로토콜에 E상태를 추가한 것이다.
- MSI의 Shared상태에서 자기만 깨끗한(메모리와 같은) 데이터를 갖고잇는 상태를 분리하여 E라고 추가하였다.
- 즉, Exclusive 상태는 해당 데이터가 해당 캐시에만 존재하고 다른 어떤 캐시에도 존재하지 않지만, 메모리와 일치하는 상태를 의미한다.
3. MOESI (Modified, Owner, Exclusive, Shared, Invalid)
- dirty cache line도 공유할 수 있게 허용한 프로토콜이다.
- 한 프로세서를 Owner로 할당하고, Owner 상태를 가진 프로세서가 write back을 수행하도록 한다.
- AMD 프로세서에서 사용되며, MESI에 비해 더 효율적인 데이터 공유를 가능하게 한다.
4. MESIF (Intel) (Modified, Exclusive, Shared, Forward, Invalid)
- Forward 상태는 Shared와 유사하지만, 해당 캐시가 메인 메모리로부터 데이터를 다른 캐시로 직접 전달할 책임이 있다는 것을 의미한다.
- 즉, F상태의 cache line은 이 cache line을 달라는 요청에 응답할 수 있다.
- Intel 프로세서에서 사용된다.