MOSI 프로토콜
MOSI protocolMOSI 프로토콜은 기본 MSI 캐시 일관성 프로토콜의 확장입니다.현재 프로세서가 이 블록을 소유하고 있음을 나타내는 소유 상태를 추가하고 블록에 대한 다른 프로세서의 요청을 처리합니다.
상태 개요
특정 캐시 라인의 허용 상태를 다음에 나타냅니다.
Modified (M) - 유효한 블록 복사본을 가진 캐시는 1개뿐이며 값은 메인 메모리 내의 캐시와 다를 수 있습니다.수정된 상태가 해당 블록의 배타적 소유권을 의미한다는 차이점을 제외하면 이는 쓰기 캐시 내의 더티 상태와 거의 동일한 의미를 가집니다.dirty 상태는 블록의 값이 메인 메모리의 값과 다르다는 것을 의미할 뿐이며 modified는 값이 메인 메모리의 값과 달라서 한 곳에만 캐시된다는 것을 의미합니다.
소유(O) - 여러 캐시가 블록의 최신 올바른 값을 보유할 수 있으며 메인 메모리 값이 정확하거나 정확하지 않을 수 있습니다.한 번에 하나의 캐시만 블록에 대해 소유 상태를 가질 수 있습니다.같은 블록의 다른 모든 캐시는 공유 [1]상태여야 합니다.
공유(S) - 캐시 블록은 유효하며 여러 캐시에 의해 공유될 수 있으며 메인 메모리와 같은 값을 가질 수도 있고 그렇지 않을 수도 있습니다.다른 프로세서는 이 데이터를 읽을 수 있지만 쓰기 권한은 없습니다.
Invalid(I) - 캐시 블록이 잘못되었습니다.
특정 캐시 쌍에 대해 특정 캐시 라인에서 허용되는 상태는 다음과 같습니다.
| M | O | S | I | |
|---|---|---|---|---|
| M | ||||
| O | ||||
| S | ||||
| I |
운용
MOSI 프로토콜에서는 각 캐시에 다음 요청이 있습니다.
- PrRd - 캐시 블록을 읽기 위한 프로세서 요청입니다.
- PrWr - 캐시 블록에 쓰기 위한 프로세서 요청입니다.
- BusRd - 다른 프로세서에 의해 작성된 캐시 블록에 대한 읽기 요구가 있음을 나타내는 스누핑 요구.
- BusRdX - 블록이 없는 다른 프로세서에 의해 작성된 캐시 블록에 대한 쓰기 요구가 있음을 나타내는 스누핑 요구.
- BusUpgr - 이미 해당 캐시에 블록이 있는 다른 프로세서에 의해 작성된 캐시 블록에 대한 쓰기 요구가 있음을 나타내는 스누핑 요구.
- 플러시 - [2]캐시 전송을 위해 캐시 블록을 버스에 배치하는 스누핑 요구.
프로세서 트랜잭션
프로세서 트랜잭션의 경우를 살펴보면 블록이 Invalid(I) 상태일 때 캐시 블록을 메모리에서 가져오지 않았거나 비활성화되었습니다.프로세서 읽기(PrRd)가 있으면 상태가 무효(I)에서 공유(S)로 바뀌어 버스 읽기(BusRd)가 생성됩니다.동시에 프로세서 쓰기 요구(PrWr)일 경우 스누핑 쓰기 요구(BusRdX)와 함께 블록 상태가 수정됨(M)으로 바뀝니다.
블록이 소유(O) 상태가 되면 프로세서 읽기(PrRd)는 스누핑 신호를 생성하지 않고 블록은 동일한 상태를 유지합니다.한편 프로세서(PrWr)로부터의 쓰기 요구는 스누핑 쓰기 요구(BusUpgr)[3] 생성과 함께 블록 상태를 소유(O)에서 수정(M)으로 변경합니다.
블록이 Modified(M) 상태일 경우 블록은 이미 최신 올바른 값이 해당 캐시에만 존재함을 나타내기 때문에 프로세서 읽기(PrRd) 요구도 프로세서 쓰기(PrWr) 요구도 스누핑 신호를 생성하지 않습니다.따라서 상태는 변경되지 않고 변경된(M) 상태로 유지됩니다.
블록이 Shared(S) 상태이고 Processor Read(PrRd; 프로세서 읽기) 요구가 있는 동안 캐시 블록의 값은 다른 모든 프로세서와 메인 메모리에서 동일하기 때문에 Processor Read(PrRd; 프로세서 읽기) 후에 생성되는 버스 신호는 없습니다.공유(S) 상태의 블록에 대한 프로세서 쓰기(PrWr) 요구가 있으면 버스 쓰기 요구(BusUpgr)가 생성된다.이는 캐시 블록이 현재 다른 모든 캐시에서 유효하지 않고 블록 상태가 공유(S)에서 수정(M)으로 변화하기 때문이다.
버스 트랜잭션
스누핑된 버스 트랜잭션에 대한 유한 상태 머신의 동작을 고려할 때 캐시 블록이 Invalid(I) 상태일 경우 스누핑된 버스 요구는 블록에 어떠한 영향도 주지 않습니다.따라서 블록(BusRdX 또는 BusUpgr)이 있는지 없는 프로세서로부터의 버스 읽기(BusRd) 또는 버스 쓰기 요구일 경우에도 블록은 그대로 유지됩니다.유효한(I) 상태이며 추가 액션은 생성되지 않습니다.
캐시 블록이 Shared(S; 공유) 상태이고 Snooped Bus Read(BusRd; 스누핑버스 읽기) 트랜잭션이 있는 경우 블록은 동일한 상태로 유지되며 메인 메모리를 포함한 모든 캐시 블록의 값이 같고 읽기만 수행되므로 트랜잭션은 더 이상 생성되지 않습니다.스누핑 쓰기 요청(BusRdX 또는 BusUpgr)이 있는 경우 블록의 값이 다른 캐시 블록 중 하나에서 변경되어 다른 모든 복사본이 비활성화되므로 블록 상태가 공유(S)에서 비활성화(I)로 변경됩니다.
캐시 블록이 수정됨(M) 상태가 되고 버스 읽기(BusRd) 요구가 있으면 블록은 변경된 데이터를 플러시(플래시)하고 상태를 소유됨(O)으로 변경하므로 특정 캐시 블록의 유일한 소유자가 됩니다.동시에 수정(M) 상태일 때는 캐시 블록이 없기 때문에 다른 프로세서로부터의 Bus Write Request(Bus Upgr; 버스 쓰기 요구)는 발생하지 않습니다.블록(BusRdX)이 없는 다른 프로세서에서 쓰기 요청이 있을 경우 다른 프로세서가 블록에 쓰기를 수행하므로 블록의 상태가 비활성화(I)로 변경됩니다.
캐시 블록이 변경된 상태일 때는 다른 프로세서로부터 BusUpgr 요구가 있을 가능성이 없습니다.이것은, 어느 프로세서도 블록을 가지지 않기 때문입니다.변경된(M) 상태의 정의에 따라 해당 프로세서만이 블록을 가지며 나머지는 모두 비활성화되므로 BusUpgr 요구를 시작할 수 없습니다.
Owner(O) 상태에서 Snooped Read Request(BusRd; 스누핑된 읽기 요청)가 있는 동안 블록은 다른 프로세서가 읽기 위해 데이터를 플러시(플래시)하는 동안 동일한 상태를 유지합니다.스누핑 쓰기 요구(BusRdX)를 사용하면 다른 프로세서가 데이터를 쓰고 있을 때 블록 상태가 무효(I)로 바뀌어 해당 블록에 대한 소유권이 상실됩니다.다른 프로세서가 해당 블록에 액세스하려고 할 때마다 해당 블록이 이미 소유(O) 상태인 다른 캐시에서 해당 블록을 가져옵니다.BusUpgr에서는 소유자(O)에서 비활성(I)[3]으로 상태를 변경합니다.
MSI 프로토콜과의 비교
MSI 프로토콜과 MOSI 프로토콜(버클리[4] 프로토콜이라고도 함)의 분명한 차이점은 MOSI에 수정(M) 상태만 있을 뿐 아니라 추가 상태(소유)가 있다는 것입니다.
MSI 프로토콜에서는 수정(M) 상태인 블록에 대한 읽기 미스 요구가 있을 때마다 블록의 상태를 공유(S)로 변경하면서 메인 메모리에 다시 쓴다.그러나 추가 상태(소유자)가 있는 MOSI 프로토콜의 경우 다른 프로세서가 읽기 작업을 요청할 때마다 블록이 수정에서 소유(O) 상태로 변경되므로 캐시의 더티 블록을 유지하므로 메인 메모리에 즉시 다시 쓸 필요가 없습니다.
이 지연을 통해 특정 트랜잭션 시퀀스에서 버스 트래픽 및 메인 메모리 쓰기를 절약할 수 있습니다.예를 들어 프로세서1의 캐시가 M인 경우 프로세서2는 캐시를 읽고 프로세서1은 캐시에 다시 씁니다.MSI 에서는, 프로세서 1의 읽기로부터의 MS 이행은 1개의 메모리 기입으로 이어지며, 그 후 SM 이행은 BusUpgr로 이어집니다.MOSI에서는 MO 천이에서는 트래픽이 생성되지 않으며 OM 천이에서는 이전과 같이1개의 BusUpgr도 생성됩니다.따라서 MOSI는 MSI와 같은 초기 메모리 라이트백 및 관련 버스트래픽을 분배했습니다.
MESI 프로토콜과의 비교
MESI([4]Ilinois라고도 함)와 MOSI 프로토콜은 모두 MSI 프로토콜을 확장하여 다양한 기능을 개선합니다.MOSI는 라이트백을 줄이는 데 중점을 두고 MESI는 다른 프로세서로부터의 읽기 및 쓰기 요구 후에 필요한 버스 트랜잭션 수를 줄이려고 합니다.MESI 프로토콜의 배타적(E) 상태는 캐시 블록이 유효하고 깨끗하며(메인 메모리와 동일한 값), 하나의 캐시에만 캐시된다는 것을 의미하며, MOSI 프로토콜의 소유(O) 상태는 캐시 블록이 유효하고, 잠재적으로 더러우며, 여러 캐시에 존재할 수 있음을 의미합니다(모든 캐시는 동일한 값을 가집니다).
레퍼런스
- ^ Sorin, Daniel; Hill, Mark; Wood, David (2011). A Primer on Memory Consistency and Cache Coherence. Morgan & Claypool. pp. 119–122. ISBN 9781608455645.
- ^ Solihin, Yan (2016). Fundamentals of parallel multi core architecture. RC Press, Taylor & Francis Group. ISBN 9781482211184.
- ^ a b "An Evaluation of Snoop-Based Cache Coherence Protocols" (PDF).
- ^ a b "Analysis and Comparison of Cache Coherence Protocols for a Packet-Switched Multiprocessor". IEEE Transactions on Computers. 38. doi:10.1109/12.30868.
