캐시 일관성(MESI)
Cache Coherence (MESI Protocol)
멀티코어·멀티프로세서 환경에서 각 프로세서의 캐시에 저장된 동일 메모리 블록 사본들이 서로 일치된 값을 유지하도록 보장하는 것으로, 대표 프로토콜인 MESI는 캐시 라인을 Modified·Exclusive·Shared·Invalid 네 상태로 관리함.
핵심 키워드
MESI(Modified·Exclusive·Shared·Invalid)스누핑(Snooping)디렉터리 기반(Directory-based)쓰기 무효화(Write-Invalidate)쓰기 갱신(Write-Update)캐시 라인 상태 전이거짓 공유(False Sharing)MOESI·MESIF
암기: MESI: 수정(M)·독점(E)·공유(S)·무효(I)
구성도
정리
1. 개요
- 배경: 멀티코어 CPU에서 코어별 전용 캐시(L1/L2)가 동일 데이터 사본 보유
- 문제: 한 코어가 값을 변경하면 다른 코어 캐시에 오래된(Stale) 값이 남아 불일치 발생
- 필요성: 공유 메모리 프로그래밍 모델의 정확성 보장 (동일 주소에 대한 쓰기 전파·쓰기 직렬화)
2. MESI 프로토콜 원리
| 상태 | 의미 | 메모리와 일치 | 타 캐시 보유 |
|---|---|---|---|
| M (Modified) | 해당 캐시만 보유, 값이 변경됨 | 불일치(Dirty) | 없음 |
| E (Exclusive) | 해당 캐시만 보유, 변경 없음 | 일치 | 없음 |
| S (Shared) | 여러 캐시가 동일 값 공유 | 일치 | 있을 수 있음 |
| I (Invalid) | 유효하지 않은 라인 | - | - |
- 주요 상태 전이
- 읽기 미스 시 타 캐시에 사본 없음 → E, 있음 → S
- E 상태에서 쓰기 → 버스 트랜잭션 없이 M으로 전이 (MSI 대비 장점)
- S 상태에서 쓰기 → 타 캐시에 무효화 요청 후 M으로 전이
- 타 코어가 M 라인 읽기 요청 → 데이터 제공(Write-back) 후 S로 전이
- 확장: MOESI(Owned 상태 추가, 더티 데이터 공유), MESIF(Forward 상태로 응답 캐시 지정)
3. 스누핑 vs 디렉터리 비교
| 구분 | 스누핑(Snooping) | 디렉터리(Directory) |
|---|---|---|
| 방식 | 모든 캐시가 공유 버스 트랜잭션 감시·브로드캐스트 | 디렉터리가 블록별 공유자 목록 관리, 해당 캐시에만 메시지 |
| 확장성 | 낮음 (버스 대역폭 병목) | 높음 (대규모 코어·NUMA) |
| 지연 | 짧음 (직접 브로드캐스트) | 디렉터리 조회로 간접 지연 |
| 하드웨어 | 단순 | 디렉터리 저장 공간 필요 |
| 적용 | 소규모 SMP | 대규모 멀티코어, 멀티소켓 |
- 쓰기 정책: 쓰기 무효화(대부분 채택, 트래픽 적음) vs 쓰기 갱신(모든 사본에 새 값 전파)
4. 고려사항 및 최신 동향
- 거짓 공유(False Sharing): 서로 다른 변수가 같은 캐시 라인에 위치해 불필요한 무효화 반복 → 패딩·정렬로 회피
- 일관성(Coherence) vs 일관성 모델(Consistency): 캐시 일관성은 단일 주소 대상, 메모리 일관성 모델은 여러 주소 접근 순서 규정 (메모리 배리어 필요)
- 스누프 필터: 스누핑 트래픽 감소를 위한 하이브리드 구조
- 이기종 확장: CPU-가속기 간 캐시 일관성 인터커넥트(CXL.cache 등) 확산
함께 볼 토픽
v1 · 2026. 10. 19. 갱신 · 틀린 내용을 발견하면 알려 주세요.