캐시를 위한 두가지 방식
- Write Through : 캐시 갱신 때마다 주기억장치를 동시에 갱신
- Write Back : 주기억장치는 캐시 라인이 캐시로부터 제거(flush)될 때만 갱신

캐시 일관성 문제

- SMP와 같은 공유 메모리 방식의 병렬 컴퓨터에서 주기억 장치(공유 메모리)와 캐시에 저장된 데이터가 달라지는 현상. 캐시 내의 데이터가 변경되면 주기억장치 내의 해당 단어 뿐 아니라 다른 캐시 내의 그 단어도 무효가 된다. Write Through 방식 역시 갱신된 캐시와 주기억장치의 데이터는 동일하지만 타 캐시의 데이터가 무효가 되므로 캐시 일관성 문제가 발생될 수 있다.

캐시 프로토콜의 목적
- 최근에 사용된 지격 변수들을 적절한 캐시에 넣고, 읽기 및 쓰기 동작 동안 최대한 캐시에 머무르도록 하며, 동시에 여러 캐시들에 존재할 공유 변수들이 일관성을 유지할 수 있도록 함.
캐시 일관성 유지 방식
- 일반적으로 하드웨어 방식과 소프트웨어 방식으로 나뉘며, 두 방식 모두를 포함하는 구현도 있음.

소프트웨어 방식
컴파일러와 OS를 이용. 잠재된 문제를 검출하는 오버헤드가 run time에서 compile time으로 이동하고, 설계 복잡도가 하드웨어에서 소프트웨어로 이동하는 것이 장점. 반면 compile time에 문제를 검출해야 하므로 캐시 이용률이 저하됨. 공유 데이터 변수들이 캐시에 저장되지 않도록 하는 방법과 안전한 공유 변수 사용을 위한 주기를 코드 분석을 통해 결정하는 방법이 있음.

하드웨어 방식
캐시 일관성 프로토콜이라고도 하며, 잠재적인 불일치 조건들을 run time에 동적으로 검출. 소프트웨어 방식에 비해 캐시 사용률이 좋으며, 프로그래머와 컴파일러에 투명하므로 소프트웨어 개발 부담을 줄임. 일반적으로 디렉토리 프로토콜(directory protocol)과 스누피 프로토콜(snoopy protocol)으로 나뉘며, 이들은 데이터 라인에 대한 상태 정보가 유지되는 위치, 정보가 조직화되는 방법, 일관성이 지켜지는 위치 등이 다름.

1. 디렉토리 프로토콜
라인의 복사본이 존재하는 위치에 대한 정보를 수집하고 유지. 주기억장치에는 여러 개의 지역 캐시들의 내용에 대한 전역 상태 정보가 담긴 디렉토리가 저장된다. 또한 주기억장치 제어기의 일부로 존재하는 중앙 제어기는 프로세서가 가진 복사본의 라인 정보를 가지고 있다. 중앙 제어기는 모든 지역 캐시 제어기의 동작을 제어하고 보고를 받아 캐시 일관성을 유지한다.
중앙 병목(central bottleneck) 및 캐시 제어기들과 중앙 제어기 간의 통신 어버헤드를 가지는 단점이 존재하나 다중 버스(multiple buses)나 복잡한 상호연결망을 포함하는 대규모 시스템에 효과적이다.

2. 스누피 프로토콜(snoopy protocol)
캐시 일관성 유지에 대한 책임을 다중 프로세서 내의 모든 캐시 제어기들에게 분산한다. 캐시는 자신이 가진 라인이 다른 캐시와 공유되는지를 파악하고 있으며, 공유 캐시 라인이 갱신되었을 때, 각 캐시 제어기는 broadcasting된 캐시 갱신 소식을 받아 해당 캐시를 무효화한다. 공유 버스가 broadcasting과 snooping에 유리하므로 스누피 프로토콜은 버스 기반 다중 프로세서에 적합하다. write-invalidate, write-update, write-broadcast 등으로 스누피 방식을 구현하며, write-invalidate 방식의 경우 펜티엄 4나 PowerPC 등의 상용화된 시스템에서 가장 널리 사용된다. 이 방법은 모든 캐시 라인의 상태를 Modified, Exclusive, Shared, Invalid로 표현하기에 MESI 프로토콜이라고도 한다.

* MESI 프로토콜
SMP에서 사용하는 write-invalidate 방식의 snoopy 프로토콜. 데이터 캐시는 태그 당 두 개의 상태 비트를 포함하며 다음과 같은 상태 정보 중 하나를 저장한다.
- modified : 캐시 내 라인이 수정되었으며, 그 라인은 캐시에만 있다.
- exclusive : 캐시 내 라인은 주기억장치의 것과 동일하며, 다른 캐시에는 존재하지 않는다.
- shared : 캐시 내 라인은 주기억장치의 것과 동일하며, 다른 캐시에도 있을 수 있다.
- ivalidate : 캐시 내 라인은 유효한 데이터를 가지고 있지 않다.
reference:
컴퓨터시스템구조론 7판. William Stallings저, 김종현 역
Cache coherency. Wikipedia
Posted by 어쨌건간에