PE Notes · CA/OS
캐시 일관성
멀티코어가 같은 주소를 각자 캐시할 때 값을 맞추는 캐시 일관성을 스누피·디렉토리와 MESI 네 상태, 거짓 공유로 정리합니다.
코어마다 캐시가 있으면, 같은 주소가 여러 벌이 됩니다. 한 곳이 고쳤는데 다른 곳이 옛값을 읽으면 연산이 거짓입니다. 은 공유 메모리에서 그 벌들을 한 이야기로 맞추는 약속입니다. 캐시 계층이 속도를 주고, 일관성 프로토콜이 그 속도의 대가를 받습니다.
두 감시, 네 상태
원인은 단순합니다. L1·L2가 코어 사유이고, 쓰기가 한쪽에만 반영되면 나머지는 낡은 값입니다. 해결 손은 크게 둘입니다. 는 공유 버스를 모두가 엿듣고, 는 블록마다 누가 들고 있는지를 장부에 적습니다.
| 비교축 | 스누피 | 디렉토리 |
|---|---|---|
| 손 | 버스 방송·도청 | 장부 조회·점대점 |
| 확장 | 버스 폭에 막힘 | 대규모 SMP·NUMA |
| 지연 | 방송이 짧다 | 장부 한 Hop이 붙는다 |
| 자리 | 십수~수십 코어 | 수백 코어급 |
스누피의 대표 상태가 입니다. M은 나만 들고 메모리와 다릅니다. E는 나만 들고 메모리와 같습니다. S는 여럿이 읽기만 합니다. I는 무효입니다. 누군가 쓰면 다른 복본을 I로 밀고, 나만 고친 값이 M이 됩니다. 읽기 공유가 늘면 E가 S로 내려갑니다.
| 상태 | 복본 | 메모리와 |
|---|---|---|
| M Modified | 유일 | 다름(dirty) |
| E Exclusive | 유일 | 같음 |
| S Shared | 여럿 | 같음, 읽기 |
| I Invalid | 없음 | 사용 불가 |
방송과 장부, 그리고 거짓 공유
스누피 흐름은 짧습니다. CPU0가 X를 E로 들고 있을 때 CPU1이 읽으면 방송이 나가고, CPU0가 E→S로 바꾸며 값을 줍니다. CPU0가 쓰면 Invalidate 방송이 나가 CPU1은 I가 되고, CPU0는 M입니다. 디렉토리는 같은 일을 장부에 적습니다. 보유 목록을 보고 점대점으로만 전달해, 버스 폭을 사지 않습니다.
는 변수가 다른데도 같은 에 붙어 무효화가 오가는 현상입니다. 실제 공유가 없어도 일관성 트래픽이 폭주합니다. 패딩·정렬로 라인을 가르면 잦아듭니다. CXL은 이 약속을 가속기·원격 메모리까지 연장하고, 인터리빙은 대역을, 캐시 메모리 노트는 계층을 받습니다.
답안은 정의, 스누피·디렉토리 표, MESI 네 글자, 거짓 공유를 한 장에 닫습니다.