반응형
Snooping 캐시 일관성 프로토콜 개요
공유 매체(버스 또는 스위치)를 통해 캐시 컨트롤러가 모든 트랜잭션을 Snooping(감시) 하는 방식으로 작동합니다
- 캐시 컨트롤러는 자신이 포함한 블록에 대한 관련 트랜잭션을 Snooping(감시)합니다.
- 일관성을 보장하기 위해 invalidate, update, supply value 제공 등의 조치를 취합니다.
- 구체적인 동작은 블록의 상태(ex. MESI)와 프로토콜(~일 때~해라)에 따라 다릅니다.
- 쓰기 전에 반드시 내가 쓴다는 것을 다른 프로세서(내가 쓸 데이터를 소유하고 있는)에게 알리고 써야한다.
- 소유하고 있던 다른 프로세서들에게 Invalidate라고 알리기만 한다. (일반적으로 사용되는 방식)
- 소유하고 있던 다른 프로세서들에게 Write 후에 값을 알려준다.(Wrtir-thr)
Architectural Building Blocks
- FSM(Finite State Machine): 블록의 상태 변화가 어떻게 변화하는 지정해준다.
- Broadcast Medium Transactions:
- Logically, design abstraction(프로세서들이 한 개의 버스로 모두 연결된 그림으로 설명하여도, 실제로는 1개의 버스로 연결된 것이 아니라 연결이 되어있다는 의미로 추상적으로 표현한 것이다.
- Serialization(write Serialization)
- 쓰기 작업을 위해서 가창 먼저 소유권을 얻어 낸다
- 쓰기 작업이 끝날 때까지 접근하지 못한다
- cache block에 대해서 serializing을 해야한다. (invalidata or update data)
- Need to find up-to-date copy of cache block: 가장 최신의 캐쉬 블럭을 사용한다.
Locate up-to-date copy of data(최신 데이터)
Write-through
- 캐시에 쓰기 작업이 발생할 때마다 즉시 메인 메모리에도 쓰기를 수행한다. (소유하고 있는 프로세서에 값을 업데이트를 해준다)
- 장점
- 구현이 단순하다
- 메모리와 캐시의 데이터가 항상 일치하므로, 최신 데이터를 쉽게 찾을 수 있다.
- 단점: 메모리 대역폭을 많이 사용합니다.
Write-back
- 캐시에 쓰기 작업이 발생해도 즉시 메모리에 쓰지 않고, 캐시에만(tag에 기록한다) 변경을 기록한다.
- 나중에 캐시 변경이 일어날 때(Snooping 중이기 때문에 누가 접근하는지 알 수 있다) 업데이트를 해준다.
- 장점
- 메모리 대역폭을 적게 사용합니다
- 더 많은 수의 빠른 프로세서를 지원할 수 있습니다.
- 단점
- 구현이 더 복잡합니다.(프로그래머가 하면 되니 소비자 입장에서는 단점이 아님)
Write-back(더 자세히, Snooping)
- 버스에 올라오는 모든 주소를 Snooping(감시)한다.
- 만약 프로세서가 요청된 캐시 블록의 복사본(내가 write를 해서 값이 바뀐)을 가지고 있다면
- 읽기 요청에 대해 해당 데이터를 제공하고, state를 변경한다.
- 메모리에서 가져오는 것 보다 복잡성이 증가해서, 시간이 더 오래걸릴 수도 있다.
대부분의 멀티프로세서 시스템은 Write-back 방식을 사용합니다.
- 메모리 대역폭을 적게 사용하여 시스템 성능을 향상시킬 수 있다..
- 더 많은 수의 빠른 프로세서를 지원할 수 있어 확장성이 좋다.
Cache resources for WB Snooping
Cache Tag
- 기존의 캐시 태그 구조를 스눕핑에 활용할 수 있다.
- 각 블록마다 있는 Valid 비트를 이용해 invalidation를 쉽게 수행한다.
- Read misses는 Snooping에 의존하기 때문에 처리가 쉽다.
캐시 블록 공유 상태 추적
- 공유 상태 추적
- 각 캐시 블록에 추가적인 상태 비트를 할당한다. (Valid 비트, Dirty 비트와 유사)
- 이 비트는 해당 블록이 공유 여부를 나타낸다.
- 공유 블록에 대한 쓰기 처리
- 다른 복사본이 없는 경우: Write-Back에서 버스에 쓰기를 올릴 필요가 없다.
- 다른 복사본이 있는 경우: 버스에 Invalidate를 보내야 한다.
- 그리고 private상태로 변경한다.
- Invalidation 최소화
- 블록이 private 상태가 되면, 해당 블록에 대한 추가적인 Invalidations는 발생하지 않는다.
- Owner 개념
- 이 과정을 수행한 프로세서를 해당 캐시 블록의 Owner라고 부른다.
- State 변경
- Owner는 캐시 블록의 State를 Shared에서 Unshared(Exclusive)으로 변경한다.
Cache Behavior in Response to Bus
모든 버스 트랜잭션은 Cache-Address Tags를 검사해야 한다
- 프로세서의 캐쉬 접근에 interference (간섭)을 일으킬 수 있다.
- interference(간섭) 감소를 위한 방법
- 태그 복제
- 태그를 두 세트로 복제한다. 하나는 캐시 접근용, 다른 하나는 버스 접근용
- 프로세서와 버스의 캐시 접근이 서로 독립적으로 이루어질 수 있다.
- 하지만 추가적인 Memory OverHead가 발생한다. ( Tag가 2배가 되기 때문에)
- L2 캐시 태그
- L2 캐시는 L1 캐시보다 덜 사용된다.
- Inclusion property(포함 속성) : L1 캐시의 모든 항목은 반드시 L2 캐시에도 존재해야 한다.
- L2 캐시에 없다면 L1캐시에 찾아봐야된다.
- L2 캐시에서 히트(hit)를 얻으면.
- L1 캐시의 데이터, 상태를 업데이트하가위해서 arbitrate(중재)해야한다.
- arbitrate: 상태 업데이트와 데이터 검색을 위한 것으로, 보통 프로세서의 지연(stall)을 유발합니다.
- 태그 복제
반응형
'ComputerGraphics > MultiProgramming' 카테고리의 다른 글
[MultiCoreProgramming]Cache Coherence(Snooping)-3 (1) | 2024.10.16 |
---|---|
[MultiCoreProgramming]Write Cache Coherence(Snooping)-2 (0) | 2024.10.15 |
[MultiCoreProgramming] 캐쉬 일관성(Write,Snooping, Directory) (0) | 2024.10.08 |
[MultiCoreProgramming] Cache Coherence & Cache Consistency (2) | 2024.10.04 |
[MultiCoreProgramming] 멀티프로세서의 종류 (0) | 2024.09.26 |