KR100841484B1 - 캐시 일관성 프로토콜을 위한 추론적 분산식 충돌 해결방법 - Google Patents

캐시 일관성 프로토콜을 위한 추론적 분산식 충돌 해결방법 Download PDF

Info

Publication number
KR100841484B1
KR100841484B1 KR1020057011395A KR20057011395A KR100841484B1 KR 100841484 B1 KR100841484 B1 KR 100841484B1 KR 1020057011395 A KR1020057011395 A KR 1020057011395A KR 20057011395 A KR20057011395 A KR 20057011395A KR 100841484 B1 KR100841484 B1 KR 100841484B1
Authority
KR
South Korea
Prior art keywords
node
peer node
data
message
request
Prior art date
Application number
KR1020057011395A
Other languages
English (en)
Other versions
KR20050086922A (ko
Inventor
허버트 훔
제임스 굳맨
로버트 비어스
구겔 라즈니시
Original Assignee
인텔 코오퍼레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 인텔 코오퍼레이션 filed Critical 인텔 코오퍼레이션
Publication of KR20050086922A publication Critical patent/KR20050086922A/ko
Application granted granted Critical
Publication of KR100841484B1 publication Critical patent/KR100841484B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0831Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0817Cache consistency protocols using directory methods
    • G06F12/0826Limited pointers directories; State-only directories without pointers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/62Details of cache specific to multiprocessor cache arrangements
    • G06F2212/622State-only directory, i.e. not recording identity of sharing or owning nodes

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

충돌 해결 기술은 각 노드가 자신이 요청한 후에 다른 모든 요청을 감시하는 경우에 충돌하는 요청자들 중 적어도 어느 하나에 의해 모든 충돌이 검출될 수 있도록 하는 일관성을 제공한다. 어떤 라인이 배타적, 변경 또는 전송 상태에 있다면, 고유 카피를 유지하고 있는 노드에서 충돌이 해결된다. 충돌 해결의 승자(패자도 가능함)는 홈 노드에 충돌을 보고하고, 홈 노드는 충돌 보고를 쌍으로 묶고, 모든 요청 노드가 최종적으로 요청 데이터를 수신하는 것을 보장하는 전송 명령을 발행한다. 요청 캐시 라인이 캐시되지 않거나 공유 상태로만 존재하는 경우에는 홈 노드는 요청 데이터의 카피를 제공하여 충돌을 해결한다. 일 실시예에서, 어떤 요청에 대한 모든 응답 후 확인 메시지가 홈 노드로부터 수신될 때까지의 블랙아웃(blackout) 기간은 모든 충돌 노드가 노드들이 관련되어 있는 충돌을 인식할 수 있도록 한다.
Figure R1020057011395
캐시 일관성 프로토콜, 충돌 해결, 피어 노드, 홈 노드

Description

캐시 일관성 프로토콜을 위한 추론적 분산식 충돌 해결 방법{SPECULATIVE DISTRIBUTED CONFLICT RESOLUTION FOR A CACHE COHERENCY PROTOCOL}
<관련 분야>
본 미국 특허출원은 동일 날짜에 출원된 하기의 미국 특허출원에 관련된 것이다.
(1) 출원 제10/325,069(도켓 No. P13983)(출원일: 2002.12.19., 특허 제6,922,756호(2005.7.26) 발명의 명칭: "멀티 노드 시스템에서 캐시 일관성에 이용되는 전송 상태(FORWARD STATE FOR USE IN CACHE COHERENCY IN A MULTI-NODE SYSTEM)"
(2) 출원 제10/326,234(도켓 No. P13984)(출원일: 2002.12.19., 발명의 명칭: "멀티프로세서 시스템에서 캐시 일관성을 위한 계층적 디렉토리(HIERARCHICAL DIRECTORIES FOR CACHE COHERENCY IN A MULTIPROCESSOR SYSTEM)"
(3) 출원 제10/324,711(도켓 No. P13985)(출원일: 2002.12.19., 발명의 명칭: "멀티프로세서 시스템에서 캐시 계층의 계층적 가상 모델(HIERARCHICAL VIRTUAL MODEL OF A CACHE HIERARCHY IN A MULTIPROCESSOR SYSTEM)"
(4) 출원 제10/326,232(도켓 No. P13986)(출원일: 2002.12.19., 특허 제6,954,829호(2005.10.11) 발명의 명칭: "캐시 일관성 프로토콜을 위한 비추론적 분산식 충돌 해결(NON-SPECULATIVE DISTRIBUTED CONFLICT RESOLUTION FOR A CACHE COHERENCY PROTOCOL)"
본 발명은 캐시 메모리에 관한 것이다. 특히 본 발명은 다중 캐시 멀티프로세서 시스템에서 분산식 충돌 해법(distributed conflict resolution)에 관한 것이다.
전자 시스템이 다수의 캐시 메모리를 포함하고 있는 경우에는 가용 데이터의 유효성이 유지되어야 한다. 이것은 통상적으로 캐시 일관성 프로토콜(cache coherency protocol)에 따라 데이터를 조작함으로써 달성된다. 캐시 및/또는 프로세서의 수가 증가할수록 캐시 일관성 유지의 복잡성도 증가하게 된다.
다수의 구성요소(예컨대, 캐시 메모리와 프로세서)가 동일한 데이터 블록을 요청하는 경우에는, 그 다수의 구성요소 간의 충돌은 데이터 유효성을 유지하면서 해결되어야 한다. 현재의 캐시 일관성 프로토콜은 통상적으로 충돌 해결을 담당하는 단일의 구성요소를 갖고 있다. 그러나, 시스템의 복잡성이 증가함에 따라, 충돌 해결을 그 단일 구성요소에만 의존하게 되면 시스템의 전체 성능이 저하될 수가 있다.
도 1a 내지 도 1e는 멀티 노드 시스템에서의 충돌 상태의 개념을 나타낸 도면이다. 노드(110, 120 및 130)는 캐시 메모리에 요청된 데이터(예컨대, 캐시 라인)의 카피를 저장할 수 있는 피어 노드(peer node)이다. 홈 노드(home node; 140)는 이 요청된 데이터에 대한 홈(H) 노드이다. 도 1a 내지 도 1e의 예에서, 피어 노드(110 및 120)는 요청된 데이터의 무효 카피(invalid copy)를 저장한다. 즉 카피를 저장하지 않는다. 피어 노드(130)는 메모리에 재기록되지 않았던 그 요청 된 데이터의 변경된(modified) 카피를 저장한다. 홈 노드는 메모리에 데이터의 원본을 저장하거나 또는 변경이 메모리에 재기록될 때에 그 데이터의 변경본을 저장한다.
도 1a에 도시된 바와 같이, 피어 노드(120)는 데이터 블록, 예컨대 캐시 라인의 카피를 요청하는 데이터 요청 메시지(Data Request message)를 전송한다. 데이터 요청 메시지는 피어 노드(110)와 피어 노드(130)로 전송된다. 그러나, 피어 노드(130)로의 데이터 요청 메시지는 지연된다. 이 지연은 예컨대 가용 대역폭의 부족이나 버퍼링 고려 등에 의해 유발될 수 있다.
피어 노드(110)는 피어 노드(120)로부터의 데이터 요청 메시지에 대해 유효 카피 없음 메시지(No Valid Copy message)로 응답하는데, 이 유효 카피 없음 메시지는 피어 노드(110)가 요청 데이터의 유효 카피를 갖고 있지 않음을 피어 노드(120)에게 나타내어 준다. 피어 노드(120)가 데이터 요청 메시지를 전송한 후 어느 시기에 피어 노드(110)는, 도 1c에 도시된 바와 같이, 피어 노드(120)가 요청했던 그 데이터를 요청하는 데이터 요청 메시지를 피어 노드(120 및 130)에 전송한다.
피어 노드(120)는 그 데이터 요청 메시지에 응답하여 유효 카피 없음 메시지를 피어 노드(110)에 제공한다. 피어 노드(130)는 요청 데이터를 피어 노드(110)에 제공한다. 피어 노드(130)에 의해 유지된 데이터의 카피(있을 경우)는 무효인 것으로 표시되고, 피어 노드(110)에 의해 저장된 데이터의 카피는 변경된 것(Modified)으로 표시된다.
피어 노드(130)가 피어 노드(110)로부터의 데이터 요청에 응답하여 그 데이터의 카피를 무효화시킨 후 어느 시기에, 피어 노드(130)는 도 1c에 도시된 바와 같이 피어 노드(120)로부터 지연된 데이터 요청 메시지를 수신한다. 피어 노드(130)는 이 데이터 요청 메시지에 응답하여 유효 카피 없음 메시지를 피어 노드(120)에 제공한다. 여기서, 피어 노드(130)에 의해 저장된 데이터의 상태는 원래의 데이터 요청 메시지가 전송된 때의 상태에서 피어 노드(130)가 그 데이터 요청 메시지에 응답하는 때의 상태로 변화되었음에 주목한다.
피어 노드(110, 130)는 피어 노드(120)로부터의 데이터 요청 메시지에 대해 유효 카피 없음 메시지유효 카피 없음 메시지에, 피어 노드(120)는 요청 데이터의 무효 캐시된 카피(no valid cached copy)를 찾기 위해 홈 노드(140)에게 데이터의 카피를 요청한다. 따라서, 도 1d에 도시된 바와 같이 피어 노드는 읽기 메시지(Read message)를 홈 노드(140)로 전송한다. 홈 노드(140)는 메모리로부터 요청 데이터를 검색하여 이 데이터를 피어 노드(120)에 제공한다. 그러면, 피어 노드(120)는 그 요청 데이터를 배타적 상태(Exclusive state)로 저장한다.
도 1e에 도시된 바와 같이, 도 1a 내지 도 1e에 도시된 일련의 메시지들은 결과적으로 데이터 라인의 2개의 양립 불가능한 카피로 귀착된다. 본 예에서 피어 노드(110)는 데이터의 카피를 변경 상태(Modified state)로 저장하고 피어 노드(120)는 데이터의 카피를 배타적 상태로 저장한다. 그러나, 피어 노드(120)에 의해 저장된 카피는 피어 노드(120)에 배타적인 것은 아니다. 따라서, 멀티 노드 시스템에서는 캐시 충돌을 해결하는 메커니즘이 제공되지 않는 한 특정 환경 하에서 데이터의 양립 불가능한 카피를 만들어 낼 수 있다.
본 발명은 첨부된 도면을 참조로 한정이 아닌 예로서 설명되며, 도면에서 동일 도면부호는 동일 구성요소를 나타낸다.
도 1a 내지 도 1e는 멀티 노드 시스템에서 충돌 상태의 개념을 도시하는 도면.
도 2a 내지 도 2d는 공유 라인 충돌의 개념을 도시하는 도면.
도 3a 내지 도 3d는 대략 동시에 발행되는 요청들에 의해 생기는 공유 라인 충돌의 개념을 도시하는 도면.
도 4a 내지 도 4d는 다수의 요청들 중 어느 한 요청의 지연에 의해 생기는 공유 라인 충돌의 개념을 도시하는 도면.
도 5a 내지 도 5d는 무효 라인 충돌의 개념을 도시하는 도면.
도 6a 내지 도 6d는 다수의 요청들 중 어느 한 요청의 지연에 의해 생기는 무효 라인 충돌의 개념을 도시하는 도면.
도 7은 노드의 일 실시예의 블록도.
도 8은 멀티프로세서 시스템의 일 실시예를 도시하는 도면.
멀티 노드 시스템에서 분산식 캐시 일관성 충돌 해결(distributed cache coherency conflict resolution)을 위한 기술에 대해 설명된다. 이하의 설명에서는 설명 목적상 본 발명의 철저한 이해를 위하여 특정의 수치적 세부 사항이 제시된다. 그러나, 당업자라면 본 발명은 그와 같은 세부 사항이 없더라도 실시될 수 있음을 잘 알 것이다. 기타 다른 여러 가지 예에서는 본 발명을 명료하게 하기 위하여 여러 가지 구조와 장치들이 블록도 형태로 도시된다.
요청 메시지(Request Messages)
이하의 메시지들은 요청 노드로부터의 데이터/동작에 대한 요청들이다. 이들 메시지는 시스템의 모든 노드들로 전송된다.
포트 읽기 라인(Port Read Line; PRL ): 이것은 예컨대 캐시 라인과 같은 데이터 세그먼트의 카피에 대한 요청이다.
포트 읽기 무효화 라인(Port Read Invalidate Line; PRIL ): 이것은 제공자 노드의 데이터 카피가 무효화된 데이터 세그먼트의 카피에 대한 요청이다. 이 메시지는 "소유를 위한 요청(request for ownership)"라고도 할 수 있다.
포트 쓰기 라인(Port Write Line; PWL ): 이 메시지는 데이터(예컨대, 변경된 캐시 라인)를 메모리에 기록되게 한다. 이 메시지는 "더티 축출(dirty eviction)을 위한 요청"라고도 할 수 있다.
포트 무효화 라인(Port Invalidate Line; PIL ): 이 메시지는 지정된 데이터의 상태를 공유(Shared) 상태에서 배타적(Exclusive) 상태로 변화시킨다.
포트 쓰기 무효화 라인(Port Write Invalidate Line; PWIL ): 이 메시지는 데이터를 메모리에 기록되게 하며 데이터의 대상(target) 카피를 무효화시킨다.
응답 메시지
이하의 메시지들은 전술한 요청에 응답하여 피어(즉, 홈이 아닌(Non-Home)) 노드로부터 요청 노드로 전송되는 메시지이다.
무효 상태 확인(Invalid State Acknowledgement; IACK): 이 메시지는 응답을 전송하는 노드가 요청 데이터의 무효 카피(invalid copy)를 갖고 있는 경우, 즉 요청 데이터의 카피를 갖고 있지 않는 경우에 요청(PRL, PRIL, PWL, PIL, PWIL)에 대한 응답이다.
공유 상태 확인(Shared State Acknowledgement; SACK): 이 메시지는 응답을 전송하는 노드가 공유 상태에 있는 요청 데이터의 카피를 갖고 있는 경우에 요청에 대한 응답이다.
수신 데이터 확인(Acknowledgement of Data Received; DACK): 이 메시지는 요청 노드에 의해 이 요청 노드에 데이터를 전송했던 노드에 전송된다. 이 메시지는 요청 노드가 READ 또는 CNCL 메시지를 홈 노드에 전송하고 이 홈 노드로부터 XFR/XFRI 메시지 또는 ACK 메시지를 수신한 후에 전송된다.
충돌(Conflict): 이 메시지는 요청 캐시 라인에 대한 계류중인(copending) 요청이 있음을 나타낸다.
홈 노드로의 메시지
이하의 메시지들은 피어 노드에 의해 홈 노드에 전송된다.
읽기(충돌)(Read(Conflicts)): 이 메시지는 홈 노드에게 데이터를 요청하고 충돌들(있는 경우)을 목록화한다. 이 메시지는 피어 노드에 의해 모든 응답이 수신된 후에 그리고 이 수신된 응답 중 어느 것도 DATA 메시지가 아닌 경우에 전송된다.
CNCL(충돌): 이 메시지는 피어 노드에서의 적중(hit)에 응답하여 홈 노드에 전송되며 충돌들(있는 경우)을 목록화한다. 이 메시지는 홈 노드의 프리페치(prefetch) 동작을 취소시킨다. 이 메시지는 피어 노드에 의해 모든 응답이 수신된 후에 그리고 이 수신된 응답 중 어느 하나가 DATA 메시지인 경우에 전송된다.
데이터(Data): 이 메시지는 PWL 및 PWIL 요청에 대한 데이터를 다시 쓰기(write back)를 하는데 이용된다.
홈 노드로부터의 메시지
이하의 메시지들은 홈 노드로부터 피어 및/또는 요청 노드로 전송된다.
데이터(Data): 이 메시지는 요청 데이터를 포함하며 요청 노드에 의해 사용될 데이터의 상태(M/E/F/S)를 나타낼 수 있다.
이송(Transfer; XFR ): 이 메시지는 수신 노드가 메시지에 표시된 노드로 데이터를 이송하게 한다. 요청 데이터의 현재 소유자에게 데이터를 대상 노드로 이송할 것을 요청하는 충돌 상태가 홈 노드에 통지될 때에 홈 노드는 이 메시지를 요청 데이터의 현재 소유자에게 전송한다. 미해결 충돌 요청이 현재 소유자가 데이터 이송을 개시할 때에 해당 라인을 무효화시켜야 함을 의미하는 PRIL 메시지라고 홈 노드가 판정하는 경우, XFRI 메시지가 XFR 메시지 대신에 전송된다. 일 실시예에서 CNCL 메시지를 전송하는 시기(epoch)에서의 제1 노드는 현재 소유자이다. 시기(epoch)는 데이터의 제1 요청과 이 데이터의 모든 요청에의 해결 사이의 기간이다. 홈 노드가 데이터를 메모리로부터 소정의 노드로 전송한다면 그 노드는 현재 소유자이다. XFR/XFRI 메시지를 전송하면 대상 노드가 현재 소유자가 된다. 일 실시예에서 READ 또는 CNCL 메시지에서 홈 노드로 제공된 충돌 목록으로부터 대상 노드가 선택된다.
확인(Acknowledge; ACK ): 이 메시지는 요청 메시지가 요청 노드로 전송되었음을 나타낸다. 홈 노드가 ACK 메시지를 전송하면 현재 시기(current epoch)는 종료된다.
대기(Wait): 이 메시지는 메시지를 더 전송하기 전에 수신 노드가 일시 정지되게 한다.
MESIF 프로토콜의 개관
캐시 일관성을 제공하는데는 스누핑(snooping)(현재는 흔히 대칭적 멀티프로세싱(Symmetric MultiProcessing; SMP)이라고 함)과 디렉토리(흔히 분산 공유 메모리(Distributed Shared Memory; DSM)라 함)라고 하는 두 가지 기본 방식이 있다. 이 두 방식 간의 기본적인 차이는 메타(meta) 정보, 즉 캐시 라인의 카피의 저장 장소에 대한 정보의 배치 및 접근과 관련되어 있다.
스누핑 캐시에 있어서는 정보는 캐시된 카피 그 자체를 갖고서 분산된다. 즉, 캐시 라인의 각 유효 카피는, 임의의 노드가 새로운 방식으로 캐시 라인에의 접근 허락을 요청할 때마다 그 의무를 인식해야 하는 소정의 유닛에 의해 유지된다. 데이터가 캐시되지 않는 경우 그 데이터가 저장되는 장소는 임의적(보통은 고정된 위치)이다. 이 위치는 라인이 캐시되더라도 유효 카피를 포함할 수 있다. 그러나, 이 노드의 위치는 일반적으로 요청 노드에게는 알려져 있지 않다. 요청 노드는 단순히 필요한 허락과 함께 요청 캐시 라인의 어드레스를 동보(broadcast)하며, 카피를 가질 수 있는 모든 노드는 일관성이 유지되는 것을 보장하도록 응답해야 하며, 캐시되지 않은(uncached) 카피를 포함하는 노드는 어떤 다른 (피어) 노드도 응답하지 않는 경우에 응답한다.
디렉토리 방식에 있어서는, 캐시되지 않은 데이터가 저장되는 고정된 장소 이외에도, 캐시된 카피가 존재하는 곳을 나타내는 고정된 위치, 즉 디렉토리가 있다. 어떤 노드가 새로운 방식으로 캐시 라인에 접근하기 위해서는 디렉토리를 포함하는 노드(이 노드는 보통은 캐시되지 않은 데이터 저장소를 포함하는 노드임)와 통신해야 하며, 그에 따라서, 응답하는 노드는 주(main) 저장 카피가 유효한 경우에 데이터를 제공할 수 있게 된다. 그와 같은 노드를 홈 노드라 한다.
디렉토리는 두 가지 방식으로 분산될 수 있다. 첫째, 주 저장 데이터(캐시되지 않은 저장소)는 흔히 노드들 간에 분산되며, 디렉토리는 동일한 방식으로 분산된다. 둘째, 메타 정보 그 자체가 분산될 수 있으며, 이 경우, 홈 노드에서는 라인이 캐시되는지 여부에 대한 정보와, 라인이 캐시된 경우에는 단일의 카피가 존재하는 장소에 대한 정보를 거의 유지하지 않는다. 예컨대 SCI는 이 방식을 이용하며, 캐시된 카피를 포함하는 각 노드는 캐시된 카피를 가진 다른 노드들과 링크를 유지하며, 따라서 완전한 디렉토리를 집합적으로 유지한다.
스누핑 방식은 메타 정보가 유지되는 단일의 장소가 없기 때문에 동보에 의존하며, 따라서 각 질의는 모든 노드에 통지되어야 하며, 각 노드는 일관성이 유지되는 것을 보장할 책임이 있다. 이것은 홈 노드에게 다른 노드가 데이터를 제공하고 있을 때에는 응답하지 말라고 통지하는 중재(intervention) 메시지를 포함한다.
스누핑 방식은 응답이 직접적이고 빠를 수 있다는 장점을 갖고 있으나, 모든 노드가 모든 질의를 관찰해야하기 때문에 상황에 따라 융통성을 잘 발휘하지 못한다. 디렉토리 방식은 본래부터 융통성이 잘 발휘될 수 있는 것이지만, 더 복잡한 응답을 필요로 하고 흔히 점간(point-to-point) 통신에서는 3개의 노드를 포함한다.
여기서 설명된 기본 MESIF 프로토콜은 단일의 직렬화 버스의 제한 없이 스누핑 프로토콜을 제공한다. 스누핑 캐시 프로토콜처럼 MESIF는 일관성을 유지하기 위해서 데이터의 캐시된 카피를 가진 노드에 의존한다. 동기식 중앙 집중식 동보가 아닌 점간 링크를 이용하게 되면, 시간 왜곡(time-warp)의 문제(어떤 사건이 다른 노드 입장에서 보면 그 발생 순서가 달라져 보이는 현상)가 생기게 된다. MESIF 프로토콜은, 어떤 잠재적인 오류가 발생될 수 있는 때를 인식하고 이러한 오류가 정확하게 처리됨을 보장하여, 이러한 시간 왜곡을 정확하게 처리한다. 홈 노드의 개념은 첫째로 캐시되지 않은 카피가 존재하는 장소를 판정하기 위한 것이지만, 홈 노드는 충돌과 시간 왜곡 문제를 해결하기 위하여, 임계 경로(critical path) 상에 있지 않으면서 모든 트랜잭션(transaction)에 참여한다. 이 방식의 동보성(concurrent-broadcast nature) 때문에, MESIF는 스누핑 프로토콜과 관련된 지연 시간(latency)이 작고, 최소의 가능 지연 시간, 즉 단일 왕복(roundtrip) 요청-응답 동안 대부분의 경우에 데이터의 캐시가능 카피를 얻게 된다.
기본 MESIF 프로토콜은 홈 노드는 물론 모든 피어 노드에 대한 개시(initial) 요청을 동보하는 것을 포함한다. 만일 어떤 카피가 상태 E, F 또는 M으로 캐시되면, 이 카피는 그 응답에 포함된다. 그 다음, 이 요청이 만족되었음을 홈 노드에 알리는 두 번째 메시지가 홈 노드로 전송된다. 만일 요청된 라인이 캐시되지 않거나 S 상태 카피만이 존재하는 경우에는, 홈 노드로 전송된 두 번째 요청은, 홈 노드가 지금쯤 그 메모리로부터 페치(fetch)했을 수 있는 이전의 요청을 확인하는데 사용된다. 어느 경우에도 홈 노드는 동기화와 충돌 해결을 위해서 이 두 번째 요청에 대해(그리고, 첫 번째 요청에 대해서도)(때로는 이 두 가지 요청이 조합될 수도 있음) 응답하여야 한다. 여기서, 홈 노드가 하나 또는 그 이상의 캐시를 가질 수 있으며, 따라서 홈 노드는 다른 노드와 마찬가지로 개시 요청에 응답할 수 있음에 유의한다.
충돌은 분산 방식으로 처리된다. 개별적인 요청들이 임의의 장시간 동안 지연될 수 있기 때문에 시간 왜곡 문제는 충돌을 검출하는 것을 어렵게 만든다. 그러나, 만일 각 노드가 요청 후에 충돌을 감시하는 경우에는 충돌이 검출될 것이다. 노드 모두가 충돌을 검출할 수도 하지 못할 수도 있지만, 적어도 하나는 검출할 것이다. 모든 노드가 데이터를 공급하거나 아니면 노드가 소정의 카피를 가지고 있지 않음을(또는 어떤 상황에서는 노드가 가지고 있는 카피를 공급하지 않음을) 나타냄으로써 동보 요청에 응답해야하기 때문에, 응답은 충돌의 표시를 포함할 수 있으며, 따라서 충돌하는 노드들은 그 충돌을 검출할 것이다.
어떤 노드가 모든 응답을 기다리지 않고 데이터가 도착하자마자 그 데이터를 이용할 수 있게 하면 곤란한 문제가 일어나게 된다. 따라서, 데이터의 카피를 수신하는 노드는 데이터 수신시 바로 그 데이터를 내부적으로 이용할 수 있도록 하지만, 노드가 홈 노드로부터 확인을 수신할 때까지는 시스템의 나머지 부분에 보여질 수 있는 데이터를 이용하지 못할 수도 있다. 이 확인은 노드에게 그 카피를 다른 노드로 전송하라는 명령도 포함할 수 있으며, 아마도 그 노드를 자신의 캐시로부터 축출한다.
마지막으로, 한 노드가 캐시된 데이터를 공급함으로써 다른 노드로부터의 요청에 대해 응답하는 경우에, 그 응답한 노드는 데이터를 전송했다는 사실을 확인해주는 홈 노드로부터의 응답을 수신할 때까지는 동일 캐시에 대해 수신한 모든 다른 요청을 연기해야 하며, 따라서 모든 노드가 (기록가능한) 캐시 라인 이송의 동일한 순서를 관찰하는 것을 보장한다.
홈 노드는 캐시되지 않은 데이터를 위한 저장소이지만, 소정의 프로세서에게 요청을 발생하도록 할 수 있으며 하나 또는 그 이상의 캐시를 포함할 수 있다. 다른 노드들처럼, 홈 노드 프로세서가 없는 경우에는, 홈 노드는 다른 모든(피어) 노드들에게 요청을 동보해야 하며, 홈 노드를 위해 도착하는 다른 요청인 것처럼 요청을 내부적으로 처리해야 한다. 여기서, 이것은 홈 노드가 그 자신(홈 노드)에게 메시지를 명시적으로 전송하지 않는다는 점에서 특별한 경우임을 유의한다. 게다가, 국부적으로 캐시된 데이터에 대한 외부 요청이 도착하면, 홈 노드는 홈 노드로부터의 나중의 응답이 모호하게 해석되지 않도록 응답해야 한다. 즉, 홈 노드는 데이터를 공급함으로써 개시 요청에 응답할 수 있지만, 홈 노드는 홈 노드로서 제2 요청에도 응답해야 한다.
본 명세서에서 설명된 바와 같이 이용하는데 적당한 MESIF 프로토콜의 다양한 실시예의 더 상세한, 의사 코드 기반 설명(pseudo-code-based description)은 부록 A로서 첨부된다.
추론적 분산식 충돌 해결의 개관
일반적으로, 캐시 일관성 프로토콜은 각종 캐시 라인 또는 데이터 블록에 대한 상태 변화를 규칙적으로 제공하기 위하여 충돌 해결 기술을 필요로 한다. 여기서 설명되는 충돌 해결 기술은 순차적 일관성(sequential consistency)을 제공하는데, 순차적 일관성이라 함은 캐시 라인의 단 하나의 변경가능한 카피만이 임의 시각에 존재할 수 있고, 다른 카피가 읽기 가능한 동안에는 캐시 라인의 어떠한 카피도 변경될 수 없다는 것을 의미한다. 그러므로, 캐시 라인의 카피를 변경하는 충돌하는 요청들은 순차적 일관성을 유지하기 위하여 해결되어야 한다.
일 실시예에서 충돌은 시간의 특성을 이용하여 해결된다. 즉, 지연과 상관없이 두 개의 노드는 동시에 서로 먼저 캐시 라인을 요청할 수는 없다. 따라서, 만약 각 노드가 자신이 요청한 후에 다른 모든 요청을 감시한다면, 충돌하는 요청자들 중 적어도 어느 하나에 의해 충돌이 검출될 수 있다.
일 실시예에서, 만일 라인이 배타적(E), 변경(M) 또는 전송(F) 상태에 있다면, 충돌은 고유 카피를 유지하고 있는 노드에서 해결된다. 충돌 해결의 승자(패자도 가능함)는 홈 노드에 충돌을 보고하고, 홈 노드는 충돌 보고를 쌍으로 묶고, 모든 요청 노드가 결국 요청 데이터를 수신하는 것을 보장하는 전송 명령을 발행한다. 일 실시예에서, 요청 캐시 라인이 캐시되지 않거나 공유(S) 상태로만 존재하는 경우에는 요청 캐시 라인을 위한 홈 노드는 요청 데이터의 카피를 제공하여 충돌을 해결한다.
일 실시예에서, 본 명세서에서 설명된 분산식 충돌 해결은 MESIF 프로토콜이라고 하는 캐시 프로토콜의 일부이며, 이 프로토콜에서 다섯 가지 상태(변경, 배타적, 공유, 무효, 전송) 중 어느 한 상태는 캐시 라인의 캐시된 카피와 관련된다. 일 실시예에서, 어떤 요청에 대한 모든 응답 후에 확인 메시지가 홈 노드로부터 수신될 때까지의 블랙아웃(blackout) 기간은 모든 충돌 노드가 노드들이 관련되어 있는 충돌을 인식할 수 있도록 한다. 블랙아웃 기간은, 캐시에서의 데이터 이용을 제한하지 않으나, 데이터가 다른 캐시로 전파되지 못하게 한다.
이하에서는 멀티 노드 시스템 내의 노드에 관하여 설명한다. 일 실시예에서, 노드는 내부 캐시 메모리, 외부 캐시 메모리 및/또는 외부 메모리를 가진 프로세서를 포함한다. 다른 실시예에서, 노드는 다른 전자 시스템에 연결된 전자 시스템(예컨대, 컴퓨터 시스템, 모바일 장치)이다. 다른 유형의 노드 구성도 사용될 수 있다. 이하의 예에서, 파선(dashed lines)은 이전에 전송된 메시지를 나타내고 실선은 설명되고 있는 메시지를 나타낸다. 도면을 더 명료하게 나타내기 위하여, 메시지 세트(예컨대, PRIL 및 이에 대응하는 IACK)가 해결된 경우, 메시지를 나타내는 라인은 도면에 더 이상 포함되지 않는다.
도 2a 내지 도 2d는 공유 라인 충돌의 개념을 도시하는 도면이다. 도 2a 내지 2d의 예에서 피어 노드(210 및 220)는 둘 다 데이터 블록의 카피(예컨대, 캐시 라인)를 요청한다. 피어 노드(230)는 요청된 데이터 블록의 가용 카피를 M 상태로 저장한다. 이러한 처리는 피어 노드(230)가 요청된 데이터를 S 상태 또는 F 상태로 저장하는 경우에도 적용된다.
도 2a 내지 도 2d의 다양한 메시지와 관련된 숫자들(예컨대, 1.PRIL, 7.IACK)은 충돌의 예를 제공하기 위해 대략적인 순서를 붙인 것이다. 제공된 다른 예(즉, 도 3a 내지 도 3d, 4a 내지 도 4d, 5a 내지 도 5d, 6a 내지 도 6d)는 물론 도 2a 내지 도 2d에 나타낸 정확한 타이밍 관계는 반드시 요청되는 것은 아니다.
도 2a에 도시된 바와 같이, 피어 노드(210)는 PRIL 메시지를 피어 노드(220 및 230)와 홈 노드(240)에 전송함으로써 데이터 블록을 요청한다. 피어 노드(210)는 또한 PRL 메시지를 이용하여 그 데이터 블록을 요청할 수도 있는데, 이 경우에는 피어 노드(230)는 요청 메시지에 응답하여 그 카피를 무효화시키지 않을 것이다. 피어 노드(220)는, 피어 노드(220)가 요청된 데이터 블록의 유효 카피를 저장하지 않음을 나타내는 IACK 메시지를 가지고 PRIL 메시지에 대해 응답한다.
홈 노드(240)는 요청되는 데이터에 대한 홈 노드로서 기능 하는데, 이것은 노드(240)가 요청되는 데이터가 캐시되지 않은 때에 이 데이터를 저장하는 논캐시 메모리(non-cache memory)(예컨대, 메인 메모리)와 연관되는 것을 의미한다. 예컨대, 홈 노드(240)는 프로세서, 캐시 메모리 및 랜덤 액세스 메모리(RAM)가 될 수 있으며, 여기서 RAM은 데이터를 위한 논캐시된 저장 위치(non-cached storage location)를 제공한다.
도 2b는 피어 노드(210 및 230) 및 피어 노드(210)에 의해 이전에 요청된 데이터 블록을 요청하는 홈 노드(240)로 PRIL 메시지를 전송하는 피어 노드(220)를 나타낸다. 전술한 바와 같이, PRL 메시지를 이용하여 데이터가 요청될 수도 있다. 도 2a 내지 도 2d에서의 충돌은 PRIL 메시지로 도시되어 있지만, 일관성 없는(inconsistent) 결과가 발생할 수 있는 요청 메시지들의 조합은 충돌을 일으킨다.
피어 노드(220)가 PRIL 메시지를 전송하는 시간과 대략 동일한 시간에, 피어 노드(230)는 DataM 메시지를 피어 노드(210)로 전송함으로써 피어 노드(210)로부터의 PRIL 메시지에 응답한다. DataM 메시지는 요청 데이터의 카피를 피어 노드(210)에 제공하여 피어 노드(210)가 그 데이터를 변경(M) 상태로 저장하게 한다. 예컨대 전송(F) 상태와 같은 다른 상태도 특정될 수 있다. 피어 노드(230)에 의해 저장된 요청 데이터의 카피의 상태는 M 상태에서 무효(I) 상태로 변화된다.
도 2c에 도시된 바와 같이, 피어 노드(230)로부터 DataM 메시지를 수신한 것에 응답하여 피어 노드(210)는 홈 노드(240)에 CNCL() 메시지를 전송한다. CNCL() 메시지는, 메모리로부터 요청 데이터 블록의 검색이 시작된 경우, 그 검색을 취소시킨다. 홈 노드(240)는 CNCL() 메시지의 수신을 확인하는 ACK 메시지로 피어 노드(210)에 응답하는데, 이는 피어 노드(210)로부터의 PRIL 메시지의 처리 완료를 나타낸다.
홈 노드(240)로부터 ACK 메시지를 수신한 것에 응답하여 피어 노드(210)는 피어 노드(230)로부터의 요청 데이터의 수신을 확인하는 DACK 메시지를 피어 노드(230)에 전송한다. 피어 노드(230)로부터의 데이터 수신과 피어 노드(230)로의 DACK 메시지 전송 간의 기간이 블랙아웃 기간이며, 이 기간 동안에는 데이터 블록은 다른 노드로 전송되지 않는다. 블랙아웃 기간 동안에 피어 노드(210)는 피어 노드(220)로부터의 PRIL 메시지에 응답하지 않는다. 마찬가지로 피어 노드(230)도 블랙아웃 기간 동안에 피어 노드(220)로부터의 PRIL 메시지에 응답하지 않는다.
도 2d에 도시된 바와 같이, 피어 노드(210)는 DataM 메시지를 피어 노드(220)에 전송하여 요청 데이터의 카피를 피어 노드(220)에 제공하고 피어 노드(220)에게 요청 데이터의 카피를 M 상태로 저장하게 한다. 요청 데이터를 피어 노드(220)에 제공하는데는 다른 유형의 메시지(예컨대, DataF, DataS)가 이용될 수 있다. 피어 노드(210)는 또한 (만일 있다면) 보유하고 있는 데이터의 카피를 I 상태에 있는 것으로 표시하는데, 그 이유는 DataM 메시지가 PRIL 메시지에 응답한 것이기 때문이다. 보유하고 있는 요청 데이터의 카피는 예컨대 PRL 메시지에 의해 무효화되지는 않을 것이다. 피어 노드(220)는 또한 CNCL() 메시지를 홈 노드(240)에 전송하여 논캐시 메모리로부터의 요청 데이터의 검색을 취소시킨다. 홈 노드(240)는 피어 노드(220)가 메시지를 더 전송하기 전에 그 동작을 일시 정지시키는 WAIT 메시지를 가지고 응답한다.
전술한 처리 중의 어느 시기에 피어 노드(230)와 에이전트(290)는 현재 피어 노드(230)에 의해 저장되어 있지 않거나 I 상태로 저장된 데이터 블록을 요청하는 PRIL 메시지에 응답하여 IACK 메시지를 피어 노드(220)로 전송한다. 피어 노드(220)는 DACK 메시지를 피어 노드(210)에 전송함으로써 피어 노드(210)로부터의 DataM 메시지에 응답한다. DACK 메시지는 피어 노드(210 및 220)로부터의 충돌하는 PRIL 메시지의 해결을 완결한다.
도 3a 내지 도 3d는 대략 동시에 발행되는 (타이 상태(tie condition)) 요청들에 의해 생기는 공유 라인 충돌의 개념을 도시하는 도면이다. 도 3a에 도시된 바와 같이, 피어 노드(210)는 데이터 블록을 요청하는 PRIL 메시지를 피어 노드(220 및 230)와 홈 노드(240)에 전송한다. 짧은 기간 후 또는 동시에라도 피어 노드(220)는 동일한 데이터 블록을 요청하는 PRIL 메시지를 피어 노드(210 및 230)와 홈 노드(240)에 전송한다.
요청 데이터를 수신하기 전에 다른 피어 노드로부터 PRIL 메시지를 수신하는 것에 응답하여 피어 노드(210)는 CONFLICT 메시지를 충돌하는 PRIL 메시지의 소스인 피어 노드(220)에 전송한다. CONFLICT 메시지는 요청 충돌의 존재를 그 충돌을 인식하는 피어 노드로부터 그 충돌에 관련된 하나 또는 그 이상의 다른 피어 노드에 전달한다. 마찬가지로, 피어 노드(220)는 요청 데이터를 수신하기 전에 PRIL 메시지를 수신하는 것에 응답하여 CONFLICT 메시지를 피어 노드(210)에 전송한다. 도 3b는 피어 노드들(210 및 220) 간의 CONFLICT 메시지 전송을 도시한다.
도 3c에 도시된 바와 같이, 피어 노드(230)는 DataM 메시지에서 요청 데이터를 피어 노드(210)에 제공하고 (만일 있는 경우) 보유하고 있는 데이터의 카피를 I 상태로 표시한다. 피어 노드(210)는 요청 데이터를 수신하여 이것을 M 상태로 저장한다. 그 다음, 피어 노드(210)는 CNCL(220) 메시지를 홈 노드(240)로 전송한다. CNCL(220) 메시지는 홈 노드(240)에게 메모리로부터의 요청 데이터의 검색을 취소하게 하고, 홈 노드(240)에게 전송 노드(즉, 피어 노드(210))와 피어 노드(220) 간에 충돌이 존재함을 표시한다.
CNCL(220) 메시지에 응답하여 홈 노드(240)는 XFER(220) 메시지를 피어 노드(210)에 전송한다. XFER(220) 메시지는 피어 노드(210)에게 데이터의 카피를 피어 노드(220)에게 전송하게 한다. 일 실시예에서, 피어 노드(210)는 데이터의 카피를 피어 노드(220)에게 전송하기 전에, 요청된 데이터 블록을 이용 및/또는 변경한다. 다른 실시예에서, 피어 노드(210)는 데이터의 카피를 피어 노드(220)에 즉시 전송한다. 홈 노드(240)로부터 XFER(200) 메시지를 수신하는 것에 응답하여 피어 노드(210)는 요청 데이터의 수신을 확인해주는 DACK 메시지를 피어 노드(230)에 전송한다.
도 3d에 도시된 바와 같이, 피어 노드(210)로부터 DACK 메시지를 수신하는 것에 응답하여 피어 노드(230)는 피어 노드(230)가 요청 데이터의 유효 카피를 저장하고 있지 않음을 나타내는 IACK 메시지를 피어 노드(220)에 전송한다. 피어 노드(230)는 제1 PRIL 메시지(즉, 피어 노드(210)로부터의 PRIL 메시지)가 분석될 때까지는 제2 PRIL 메시지에 응답하지 않는다. 홈 노드(240)로부터의 XFER(220) 메시지에 응답하여 피어 노드(210)는 DataM 메시지로 요청 데이터의 카피를 피어 노드(220)로 전송한다. 피어 노드(210)는 보유하고 있는 데이터의 카피를 I 상태로 표시하고, 피어 노드(220)는 수신된 데이터의 카피를 M 상태로 저장한다.
피어 노드(220)는 메모리로부터의 요청 데이터의 검색을 중지시키고 피어 노드(220)가 피어 노드(210)와의 충돌을 검출했음을 나타내는 READ(210) 메시지를 전송한다. 홈 노드(240)는 피어 노드(220)로 전송된 WAIT 메시지를 가지고서 READ(210) 메시지에 응답한다. WAIT 메시지는 피어 노드(220)에게 후속 메시지를 전송하기 전 소정 기간 동안 그 동작을 중지하게 한다. 피어 노드(220)는 요청 데이터의 수신을 나타내는 DACK메시지를 피어 노드(210)에 전송한다.
도 4a 내지 도 4d는 다수의 요청들 중 어느 한 요청의 지연에 의해 생기는 공유 라인 충돌의 개념을 도시하는 도면이다. 도 4a에 도시된 바와 같이, 피어 노드(220)는 데이터 블록을 요청하는 PRIL 메시지를 피어 노드(210, 230)와 홈 노드(240)에 전송한다. 피어 노드(230)에 대한 PRIL 메시지는 지연된다. 이 지연은 예컨대 시스템 대기 시간, 패킷 오염(packet corruption), 기타 다른 이유의 결과일 수 있다. 피어 노드(210)는 피어 노드(210)가 요청 데이터의 유효 카피를 저장하지 않음을 나타내는 IACK 메시지를 가지고 PRIL 메시지에 응답한다.
도 4b에 도시된 바와 같이, 피어 노드(210)는 동일한 데이터 블록을 요청하는 PRIL 메시지를 피어 노드(220 및 230)와 홈 노드(240)에 전송한다. 피어 노드(220)로부터의 지연된 PRIL 메시지는 피어 노드(210)로부터의 PRIL 메시지와 동시에 또는 그 다음에 피어 노드(230)에 의해 수신된다. 피어 노드(230)는 요청 데이터의 카피를 피어 노드(210)에 제공하고 피어 노드(210)에게 데이터를 M 상태로 저장하게 하는 DataM 메시지를 가지고 피어 노드(210)로부터의 PRIL 메시지에 응답한다. 피어 노드(230)는 요청 데이터의 보유 카피(있는 경우)를 I 상태로 표시한다. 피어 노드(220)는 피어 노드(210)에게 피어 노드(220)가 그 두 개의 노드에 의한 요청들 간의 충돌을 검출했음을 나타내는 CONFLICT 메시지를 가지고 피어 노드(210)로부터의 PRIL 메시지에 응답한다.
도 4c에 도시된 바와 같이, 피어 노드(210)는 메모리로부터의 요청 데이터의 검색을 취소시키는 CNCL(220) 메시지를 전송한다. CNCL(220) 메시지는 또한 피어 노드(210)와 피어 노드(220) 간에 충돌이 존재함을 홈 노드(240)에게 나타낸다. 홈 노드(240)는 피어 노드(210)에게 요청 데이터의 카피를 피어 노드(220)에게 전송하게 하는 XFER(220) 메시지를 가지고 CNCL(220) 메시지에 응답한다. 일 실시예에서, 피어 노드(210)는 데이터의 카피를 피어 노드(220)에 전송하기 전에, 요청된 데이터 블록을 이용 및/또는 변경한다. 다른 실시예에서, 피어 노드(210)는 데이터의 카피를 피어 노드(220)에 즉시 전송한다.
피어 노드(210)는 요청 데이터의 수신을 확인해주는 DACK 메시지를 피어 노드(230)에 전송한다. 피어 노드(210)는 또한 요청 데이터의 카피를 제공하는 DataM 메시지를 피어 노드(220)에 전송한다. 피어 노드(220)는 요청 데이터를 M 상태로 저장하고, 피어 노드(210)는 요청 데이터의 나머지 카피를 I 상태로 표시한다.
도 4d에 도시된 바와 같이, 피어 노드(210)로부터 DACK 메시지를 수신하는 것에 응답하여 피어 노드(230)는 IACK 메시지를 피어 노드(220)에 전송한다. IACK 메시지는 피어 노드(230)가 요청 데이터의 유효 카피를 저장하고 있지 않음을 나타낸다. 피어 노드(220)는 READ(210) 메시지를 홈 노드(240)에 전송한다. READ(210) 메시지는 메모리로부터의 요청 데이터의 검색을 취소시키고, 피어 노드(220)가 피어 노드(210)와 충돌하고 있음을 홈 노드(240)에게 나타낸다.
홈 노드(240)는 피어 노드(220)에게 후속 메시지를 전송하기 전 소정 기간 동안 그 동작을 중지하게 하는 WAIT 메시지를 가지고 READ(210) 메시지에 응답한다. 피어 노드(220)는 피어 노드(210)로부터의 요청 데이터의 수신을 확인해 주는 DACK 메시지를 가지고 피어 노드(210)로부터의 DataM 메시지에 응답한다.
도 5a 내지 도 5d는 무효 라인 충돌의 개념을 도시하는 도면이다. 도 5a에 도시된 바와 같이, 피어 노드(210)는 데이터 블록을 요청하는 PRIL 메시지를 피어 노드(220 및 230)와 홈 노드(240)에 전송한다. 도 5b에 도시된 바와 같이, 피어 노드(210)로부터의 PRIL 메시지와 동시에 또는 그 바로 다음에, 피어 노드(220)는 동일 데이터를 요청하는 PRIL 메시지를 피어 노드(210 및 230)와 홈 노드(240)에 전송한다.
도 5c에 도시된 바와 같이, 피어 노드(230)는 피어 노드(230)가 요청 데이터의 유효 카피를 저장하지 않음을 나타내는 IACK 메시지를 가지고 피어 노드(210)로부터의 PRIL 메시지에 응답한다. 마찬가지로, 피어 노드(230)는 IACK 메시지를 가지고 피어 노드(220)로부터의 PRIL 메시지에 응답한다. 피어 노드(220)는 피어 노드들(210 및 220) 간의 충돌의 인식을 전달하는 CONFLICT 메시지를 가지고 피어 노드(210)로부터의 PRIL 메시지에 응답한다. 마찬가지로, 피어 노드(210)는 CONFLICT 메시지를 가지고 피어 노드(220)로부터의 PRIL 메시지에 응답한다.
도 5d에 도시된 바와 같이, 피어 노드(210)는 READ(220) 메시지를 홈 노드(240)에 전송한다. READ(220) 메시지는 메모리로부터 요청 데이터를 검색했던 홈 노드(240)로부터 이전의 요청 데이터를 읽어낸다. 홈 노드(240)는 Data,XFER(220) 메시지와 함께 요청 데이터를 피어 노드(210)에 제공한다. 일 실시예에서, 홈 노드(240)는 하나의 메시지 패킷으로 된 두 유형의 메시지(즉, Data와 XFER)로부터의 정보를 포함한다. 이와 같은 "피기백킹(piggybacking)" 기법은 충돌을 해결하는데 필요한 대역폭을 감소시킬 수 있다.
Data,XFER(220) 메시지는 피어 노드(210)에 요청 데이터를 제공하며 또한 피어 노드(210)에게 요청 데이터를 피어 노드(220)로 이송하게 한다. 피어 노드(210)가 요청 데이터를 수신하면, 요청 데이터는 M 상태로 저장된다.
요청 데이터를 수신하고 난 후에, 피어 노드(210)는 DataM 메시지와 함께 요청 데이터의 카피를 피어 노드(220)에 전송한다. 피어 노드(210)가 보유하는 요청 데이터의 카피는 I 상태로 표시된다. 피어 노드(220)는 요청 데이터를 M 상태로 저장하며 피어 노드(210)에게 DACK 메시지로 요청 데이터가 수신된 것을 확인해 준다.
도 6a 내지 도 6d는 다수의 요청들 중 어느 한 요청의 지연에 의해 생기는 무효 라인 충돌의 개념을 도시하는 도면이다. 도 6a에 도시된 바와 같이, 피어 노드(220)는 데이터 블록을 요청하는 PRIL 메시지를 피어 노드(210 및 230)와 홈 노드(240)에 전송한다. 피어 노드(230)에 대한 PRIL 메시지는 지연된다. 이 지연은 예컨대 시스템 대기 시간, 패킷 오염, 기타 다른 이유의 결과일 수 있다. 피어 노드(210)는 피어 노드(210)가 요청 데이터의 유효 카피를 저장하지 않음을 나타내는 IACK 메시지를 가지고 PRIL 메시지에 응답한다.
도 6b에 도시된 바와 같이, 피어 노드(210)는 동일한 데이터 블록을 요청하는 PRIL 메시지를 피어 노드(220 및 230)와 홈 노드(240)에 전송한다. 피어 노드(220)로부터의 지연된 PRIL 메시지는 피어 노드(210)로부터의 PRIL 메시지와 동시에 또는 그 다음에 피어 노드(230)에 의해 수신된다. 피어 노드(220)는 피어 노드(210)에게 피어 노드(220)가 그 두 개의 노드에 의한 요청들 간의 충돌을 검출했음을 나타내는 CONFLICT 메시지를 가지고 피어 노드(210)로부터의 PRIL 메시지에 응답한다.
도 6c에 도시된 바와 같이, 피어 노드(230)는 피어 노드(230)가 피어 노드(210)에 의한 요청 데이터의 유효 카피를 저장하지 않음을 나타내는 IACK 메시지를 가지고 피어 노드(210)로부터의 PRIL 메시지에 응답한다. 마찬가지로, 피어 노드(230)는 피어 노드(230)가 피어 노드(220)에 의한 요청 데이터의 유효 카피를 저장하지 않음을 나타내는 IACK 메시지를 가지고 피어 노드(220)로부터의 PRIL 메시지에 응답한다.
도 6d에 도시된 바와 같이, 피어 노드(210)는 READ(220) 메시지를 홈 노드(240)에 전송한다. READ(220) 메시지는 메모리로부터 요청 데이터를 검색한 홈 노드(240)로부터 이전의 요청 데이터를 읽어낸다. 홈 노드(240)는 Data,XFER(220) 메시지와 함께 요청 데이터를 피어 노드(210)에 제공한다.
요청 데이터를 수신하고 난 후에, 피어 노드(210)는 DataM 메시지와 함께 요청 데이터의 카피를 피어 노드(220)에 전송한다. 피어 노드(210)가 보유하는 요청 데이터의 카피는 I 상태로 표시된다. 피어 노드(220)는 요청 데이터를 M 상태로 저장하며 DACK 메시지와 함께 요청 데이터가 피어 노드(210)에 수신된 것을 확인해 준다.
추론적 분산식 충돌 해결을 지원하는 예시적인 시스템
도 7은 노드의 일 실시예의 블록도이다. 노드(700)는 단일의 프로세서, 캐시 메모리, 메모리 제어기 및 메모리를 가지는 것으로 도시되어 있지만, 하나의 노드에는 임의 수의 그와 같은 구성요소가 포함될 수 있다. 더욱이, 추가적인 및/또는 다른 구성요소(예컨대, 버스 브리지(bus bridge))도 하나의 노드에 포함될 수 있다.
프로세서(710)는 당업계에 알려져 있는 임의의 유형의 프로세서일 수 있다. 일 실시예에서, 프로세서(710)는 캐시 메모리(720)를 포함한다. 다른 실시예에서, 캐시 메모리(720)는 프로세서(710)의 외부에 있으며, 또는 프로세서(710)의 내부 또는 외부에 있는 추가적인 캐시 메모리가 포함될 수 있다.
메모리 제어기(730)는 캐시 메모리(720) 및 메모리(740)와 연결된다. 메모리 제어기(730)는 캐시 메모리(720)와 메모리(740) 간의 인터페이스로서 동작한다. 일 실시예에서, 메모리 제어기(730)는 전술한 캐시 일관성 프로토콜에 따라서 캐시 일관성을 유지한다. 메모리 제어기(730)는 노드 링크(750)를 통해 다른 노드들과 상호 작용한다. 다른 실시예에서, 프로세서(710)는 메모리 제어기(730)와 상호 작용하여 전술한 캐시 일관성을 유지하고 프로세서(710)는 대체 노드 링크(755)를 통해 다른 노드와 상호 작용한다.
일 실시예에서, 노드 링크(750)는 노드(700)가 상호 작용하는 각 노드를 위한 전용 인터페이스를 포함한다. 다른 실시예에서, 노드 링크(750)는 노드(700)가 상호 작용하는 노드의 수와 다른 수의 인터페이스를 포함한다. 일 실시예에서, 노드(700)는 멀티 노드를 나타내는 하나 또는 그 이상의 에이전트와 상호 작용한다.
도 8은 멀티프로세서의 일 실시예를 도시한 도면이다. 멀티프로세서 시스템(800)은 다수의 프로세서, 예컨대 컴퓨터 시스템, 실시간 모니터링 시스템 등을 가진 시스템의 범위를 나타내기 위한 것이다. 다른 멀티프로세서 시스템은 더 많은, 더 적은 그리고/또는 다른 구성요소를 포함할 수 있다. 특정 상황에서는 전술한 캐시 관리기술이 단일 프로세서와 멀티프로세서 시스템 양자에 적용될 수 있다. 멀티프로세서 시스템(800)은 멀티 노드 시스템으로 동작하도록 구성될 수 있다.
멀티 프로세서 시스템(800)은 정보를 전달하는 버스 시스템(810) 또는 기타 통신 장치를 포함한다. 버스 시스템(810)은 임의 수의 버스와, 이와 관련된 상호 접속 회로, 예컨대 버스 브리지(bus bridges)를 포함할 수 있다. 프로세서(820)는 버스 시스템(810)에 연결되어 정보를 처리한다. 프로세서(820)는 예컨대 레벨 제로(L0) 캐시 메모리와 같은 캐시 메모리(822)와 캐시 제어기(824)를 포함할 수 있다. 일 실시예에서, 프로세서(820)는 임의의 유형의 캐시 메모리일 수 있는 캐시(825)에도 연결된다. 다른 실시예에서, 캐시(825)는 버스 시스템(810)에 연결될 수 있다. 다른 유형의 프로세서-캐시 구성도 이용될 수 있다.
일 실시예에서, 캐시 제어기(824)는 예컨대 프로세서(820) 내부의 버스일 수 있는 캐시 메모리 인터페이스(828)를 통해 캐시 메모리(822)에 연결된다. 캐시 제어기는 프로세서(820)와 외부 캐시 메모리 간의 인터페이스를 제공하는 캐시 인터페이스(826)를 통해 캐시 메모리(825)에 연결된다.
멀티프로세서 시스템(800)은 캐시 메모리(832)와 캐시 제어기(834)를 구비한 프로세서(830)를 더 포함한다. 캐시 제어기(834)는 캐시 인터페이스(838)를 통해 캐시 메모리(832)에 연결된다. 마찬가지로 캐시 제어기(834)는 캐시 인터페이스(836)를 통해 캐시 메모리(835)에 연결된다. 일 실시예에서 캐시 메모리(835)는 프로세서(830)에 연결된다.
멀티프로세서 시스템(800)이 두 개의 프로세서로 이루어져 있는 것으로 도시되어 있지만, 멀티프로세서 시스템(800)은 임의의 수의 프로세서 및/또는 코-프로세서(co-processor)를 포함할 수 있다. 멀티프로세서 시스템(800)은 버스 시스템(810)에 연결된 메모리 시스템(840)을 더 포함한다. 메모리 시스템(840)은 적절한 곳에서 동적 메모리 장치(예컨대, 랜덤 액세스 메모리), 정적 메모리 장치(예컨대, 읽기 전용 메모리, CD-ROM, 디스크 저장 장치, 플래시 메모리) 및 이와 관련된 드라이브의 조합을 포함할 수 있다. 메모리 시스템(840)의 메모리 장치는 멀티프로세서 시스템(800)의 프로세서에 의해 실행될 명령어와 정보를 저장하는데 이용된다. 메모리 시스템(840)은 또한 프로세서에 의한 명령어 실행 중에 임시적 변수나 기타 다른 중간 정보를 저장하는데에도 이용될 수 있다.
자기 디스크, 읽기 전용 메모리(ROM) 집적 회로, CD-ROM, DVD와 같은 정적 또는 원격 저장 장치로부터 유선 또는 무선 등의 원격 접속부를 통해 메모리 시스템(840)에 명령어들이 제공될 수 있다. 다른 실시예에서, 소프트웨어 명령어 대신에, 또는 이와 결합하여, 하드-와이어 회로(hard-wired circuitry)가 이용될 수 있다. 따라서 일련의 명령어들의 실행은 하드웨어 회로와 소프트웨어 명령어의 특정한 조합에 한정되는 것은 아니다.
멀티프로세서 시스템(800)은 근거리 통신망 및/또는 인터넷과 같은 네트워크로의 액세스를 제공하는 네트워크 인터페이스(850)를 더 포함한다. 네트워크 인터페이스(850)는 원격 전자적 액세스가능 매체와의 명령어 통신을 포함할 수 있는 무선 및/또는 유선 네트워크 인터페이스를 제공할 수 있다. 전자적 액세스가능 매체는 전자 장치(예컨대, 컴퓨터, 휴대 정보 단말기, 셀룰러폰)에 의해 판독될 수 있는 형태의 내용(예컨대, 컴퓨터 실행가능 명령어)을 제공하는(즉, 저장 및/또는 전송하는) 임의의 메커니즘을 포함한다.
예컨대, 기계적 액세스가능 매체는 읽기 전용 메모리(ROM), 랜덤 액세스 메모리(RAM), 자기 디스크 저장 매체, 광 저장 매체, 플래시 메모리 장치, 전기적, 광학적, 음향적 또는 기타 다른 형태의 전파된 신호(예컨대, 반송파, 적외선 신호, 디지털 신호)를 포함한다.
멀티프로세서 시스템(800)은 정보를 디스플레이하는 음극선관(CRT)이나 액정 표시 장치(LCD)와 같은 디스플레이 장치(860)도 포함할 수 있다. 예컨대 영숫자 및 기타 다른 키를 가진 키보드를 포함하는 입력 장치(들)(870)는 통상적으로 버스(810)에 연결되어 정보와 명령 선택을 프로세서(820 및/또는 830)에 전달한다. 다른 유형의 사용자 입력 장치로는 방향 정보와 명령 선택을 프로세서(820 및 830)에 전달하고 디스플레이 장치(860) 상의 커서 이동을 제어하는 마우스, 트랙볼(trackball) 또는 커서 방향 키와 같은 커서 제어 장치가 있다.
본 명세서에 "일 실시예" 또는 "실시예"에 대한 언급은 실시예와 관련하여 설명된 특정의 형상, 구조 또는 특징이 본 발명의 적어도 하나의 실시예에 포함된다는 것을 의미한다. 명세서의 여러 곳에서 나타나는 "일 실시예에서"라는 구절은 반드시 바로 그 실시예만을 지칭하는 것은 아니다.
본 명세서에서, 본 발명은 특정의 실시예들을 참조로 설명하였다. 그러나 본 발명은 본 발명의 본질과 범위로부터 벗어남이 없이 여러 가지로 변경 및 수정이 가해질 수 있음은 명백하다. 따라서, 본 명세서와 도면은 한정적 의미가 아니라 예시적인 의미로 받아들여져야 한다.
부록 A
이하는 의사 코드 포맷(pseudo-code format)으로 된 MESIF 알고리즘의 예시적인 설명이다. 설명은 패킷 기반 방식이다. 즉, 각 루틴은 착신 패킷이나 발신 패킷에 응답하여 실행된다. 대안적으로, 알고리즘은 수신 또는 발생되고 있는 패킷으로 인한 상태 변화에 대한 반응으로서 설명될 수 있다.
설명을 단순화하기 위하여 다음과 같이 가정한다.
1. 각 피어/요청자 노드는 단일의 캐싱 에이전트(caching agent)를 가진다.
2. 홈 노드는 캐싱 에이전트를 갖지 않는다.
3. 홈 노드에서 메모리 요청에 대한 알고리즘은 기재된 것보다 더 복잡할 수 있으며 MESIF가 유발하는 모든 코너 케이스(corner cases)(하나 이상의 읽기, 다수의 시기(epoch), 쓰기, 전송 등)를 처리한다.
(일부 실시예에서 발생될 수 있는) 캐싱 에이전트를 가진 홈 노드의 경우는, 주어진 알고리즘으로부터, 즉 로컬 캐싱 에이전트(또는 프록시)에 의한 홈 노드로의/홈 노드로부터의 전송과 관련된 루틴을 내장하여 수신 패킷을 위한 루틴들을 조합함으로써 도출된다.
일 실시예에서, 캐시는 다음의 제한 조건을 따른다.
1. 캐시는 라인이 I 상태에 있을 때에만 PRL을 발생시킬 것이다.
2. 캐시는 라인이 I 또는 S 상태에 있을 때에만 PRIL을 발생시킬 것이다.
3. 캐시는 라인이 M 상태에 있을 때에만 PWL을 발생시킬 것이다.
4. 캐시는 S, F 및 E 상태로부터 I상태로 자유롭게 전이될 수 있다.
5. 캐시는 (쓰기 동작이 일어난 것으로 가정한 경우) E 상태로부터 M 상태로 자유롭게 전이될 수 있다.
6. 그 이외에는 캐시는 발행된 요청의 완료시에만 또는 피어로부터의 요청의 수신시에 전이할 수 있다.
이하 설명된 기본 프로토콜은 PRL, PRIL 및 PWL 요청에만 적용되며 이송된 데이터와 함께 전해지는 충돌 목록과 관련된 충돌 해결법을 사용한다. 이 기본 프로토콜에 대한 확장과 옵션은 다음 절에 포함된다.
기본 MESIF 프로토콜
요청 발생
호출:
(비활성) 어드레스에 대한 새로운 요청을 발생한 캐시
알고리즘:
어드레스를 활성으로 표시
만약 요청이 PRL 또는 PRIL이면
다른 모든 피어 노드와 홈 노드에 요청을 전송
만약 요청이 PWL이면
요청을 홈 노드에 전송
홈 노드에 의한 요청 수신
호출:
홈 노드에서 수신된 요청
알고리즘:
만약 요청이 PWL이면
메모리에 쓰기를 개시
(전송, 계류중인 읽기 취소 등을 처리)
요청자에게 다시 ACK를 전송
만약 요청이 PRL 또는 PRIL이면
메모리로부터 읽기를 개시
(만약 READ가 수신되기 전에 읽기가 종료되면 데이터를 버퍼링)
피어 노드에 의한 요청 수신
호출:
피어 노드에서 수신된 요청(PRL 또는 PRIL)
알고리즘:
만약 어드레스가 전송되고 있다면
착신 요청을 버퍼링
그렇지 않고 만약 어드레스가 비활성이면
캐시를 스누프(snoop)
그렇지 않고 만약 어드레스가 활성이면
만약 활성 요청이 PWL이면
착신 요청을 버퍼링
-- 만약 종료(end if)
만약 착신 요청이 활성 요청의 충돌 목록 내에 있으면
만약 활성 요청이 PRL이면
CNFL을 가지고 응답
그렇지 않으면(활성 요청이 PRIL이면)
CNFLI을 가지고 응답
그렇지 않고 만약 활성 요청이 "데이터 단계"(아래의 응답 수집을 참조) 내에 있으면
착신 요청을 버퍼링
그렇지 않으면
요청자를 (활성 요청의) 충돌 목록에 추가
만약 착신 요청이 PRIL이면
충돌 목록에 있는 요청자를 PRIL 충돌자(conflictor)로 표시
만약 착신 요청이 PRL이면
CNFL을 가지고 응답
그렇지 않으면(활성 요청이 PRIL이면)
CNFLI을 가지고 응답
스누프 응답
호출:
적절한 응답 발생을 위해 캐시에 (스누프로서) 제출된 요청
알고리즘:
현재 캐시 상태와 착신 요청 유형에 기초하여 아래의 테이블에서 응답과 다음 상태를 검색(S/I의 다음 상태는 라인을 각 상태로 이동시킬 수 있다는 것을 의미; 주해: 로컬 카피를 무효화시키더라도 PRL에 대한 DATA_F를 여전히 전송 -- 아래의 PRL DATA_E/M 응답 옵션을 참조)
응답 다음 상태
------------------------- ---------------------
상태 PRL PRIL PRL PRIL
---- ------------------------- --------------------
I IACK IACK I I
S SACK IACK S/I I
F DATA_F DATA_E S/I I
E DATA_F DATA_E S/I I
M DATA_F DATA_M S/I I
만약 PRL 스누프가 M 상태의 캐시 라인을 적중하면
PWL 요청을 개시
스누프를 버퍼링(다시 쓰기가 완료될 때까지 DATA_F의 전송을 연기)
그렇지 않고
만약 스누프가 (M, E 또는 F 상태의) 캐시 라인을 적중하면
어드레스를 전송되고 있는 것으로 표시
캐시 라인을 다음 상태로 변경
응답을 요청자에게 전송
응답 수집
호출:
피어 노드로부터 응답을 수신한 PRL/PRIL 요청
알고리즘:
만약 응답이 SACK(PRL만)이면
공유 카피의 존재를 시스템에 기록
그렇지 않고 만약 응답이 DATA이면
응답 노드로부터의 전송된 데이터의 수신을 기록
캐시 라인과 캐시할 새로운 상태를 전송한다(주해: 라인은 아직 전체적으로 관찰될 수 없다)
그렇지 않고 만약 응답이 CNFL이면
응답 노드를 충돌 목록에 추가
그렇지 않고 만약 응답이 CNFLI이면
응답 노드를 충돌 목록에 추가
응답 노드를 PRIL 충돌자로 표시한다
-- 만약 종료(end if)
모든 피어 노드가 응답했다면
요청을 "데이터 단계" 내에 있는 것으로 표시
데이터 응답이 수신되었다면
CNCL, 전송 노드 및 충돌 목록을 홈 노드로 전송
그렇지 않으면
READ 및 충돌 목록을 홈 노드로 전송
홈 노드에서 취소
호출:
(전송 노드와 충돌 목록을 포함하는) CNCL을 수신한 홈 노드
알고리즘:
계류 중인 읽기(있는 경우)를 취소
요청 노드를 이 어드레스에 대한 "현재 소유자"로 표시
DACK를 전송 노드로 전송
만약 충돌이 없다면
ACK를 요청 노드로 전송
-- 충돌없는 캐시된 시기가 완료됨
그렇지 않으면
충돌 목록을 이 어드레스에 대한 "계류 중인 요청"로서 포함시킴
-- READ 내지 XFR 데이터를 대기
홈 노드에서 읽기 요청
호출:
(충돌 목록을 포함하는) READ를 수신한 홈 노드
알고리즘:
만약 현재 소유자가 없다면
만약 데이터를 이용할 수 없다면
읽기 완료를 대기
DATA_E를 요청 노드로 전송
만약 충돌 목록이 비어 있다면
ACK를 요청 노드로 전송
-- 충돌없는 캐시되지 않은 시기가 완료
그렇지 않으면
충돌 목록을 이 어드레스에 대한 "계류 중인 노드"로서 포함시킴
그렇지 않으면
계류 중인 충돌을 이 어드레스에 대한 "계류 중인 노드"에 추가
"계류 중인 노드"로부터 요청 노드를 제거
만약 (남아 있는) 계류 중인 노드가 없다면
XFR(대상: 요청 노드)를 "현재 소유자"에게 전송
ACK를 요청 노드로 전송
-- 시기(epoch)가 완료
그렇지 않으면
만약 하나 또는 그 이상의 계류 중인 노드(요청자를 포함함)가 PRIL이면
XFRI(대상: 요청 노드)를 "현재 소유자"에게 전송
그렇지 않으면
XFR(대상: 요청 노드)을 "현재 소유자"에게 전송
요청 노드를 "현재 소유자"로 표시
이송 수신
호출:
(대상 노드를 포함하는) XFR 또는 XFRI를 수신한 요청자
알고리즘:
데이터가 아직 수신되지 않았다면 데이터를 대기
만약 XFRI를 수신했다면
PRIL 스누프를 캐시로 전송
그렇지 않으면
PRL 스누프를 캐시로 전송
(수신 노드가 없는) 충돌 목록을 DATA 패킷에 추가
DATA 패킷을 대상 노드로 전송
이송된(transferred) 데이터 수신
호출:
XFR의 결과로서 (충돌 목록을 포함하는) DATA를 수신한 요청자
알고리즘:
데이터를 프로세서에 전송
충돌 목록을 현재 충돌 목록에 포함시킴
충돌 목록의 엔트리와 일치하는 요청을 버퍼링하면
CNFL을 가지고 일치하는 각 요청에 응답
DACK 전송(forwarding)
호출:
DACK를 수신한 전송 노드
알고리즘:
어드레스의 전송 표시를 해제
피어 요청을 수신하기 위한 알고리즘당 버퍼링된 요청을 서비스
ACK 요청
호출:
홈 노드로부터 ACK를 수신한 요청자
알고리즘:
만약 활성 요청이 PWL이면
캐시 라인을 원하는 다음 상태(E 또는 I)로 전환
만약 스누프가 버퍼링되면(PRL이 M 상태의 라인을 적중하면)
DATA_F를 요청자에게 전송
캐시 라인을 다음 상태(S) 또는 I 상태로 변경
그렇지 않으면(요청이 PRL 또는 PRIL이면)
버퍼링된 요청을 해제(즉, 버퍼링된 요청을 노드에 막 도착한 것처럼 취급)
데이터가 아직 수신되지 않았다면 데이터를 대기
ACK를 프로세서로 전송
<<<=== 기본 프로토콜의 끝 ===>>>
PIL 요청
상기 프로토콜 알고리즘에서 노드가 F 상태로부터 E 상태로 이동하는 유일한 방법은 라인을 무효화시키고(라인을 I 상태로 변경하고) PRIL을 요청하는 것이다. 이것은 DATA 이송과 관계된다.
직접적인 F->E 전이를 지원하는데는 PIL 요청이 이용될 수 있다. 이 요청은 모든 피어 노드와 홈 노드로 전송되며, 다른 캐시들에게 그들의 라인의 공유 카피를 무효화하게 한다. 인-플라이트(in-flight) PRIL 및/또는 PRL이 전이에 방해가 되는 것을 막기 위해서 PIL에 더 높은 우선권이 주어질 수 있다.
기본 프로토콜의 변경:
요청 발생
호출:
(비활성) 어드레스에 대한 새로운 요청을 발생한 캐시
알고리즘:
어드레스를 활성으로 표시
만약 요청이 PRL 또는 PRIL이면
다른 모든 피어 노드와 홈 노드로 요청을 전송
>> 만약 요청이 PIL이면
>> 요청을 다른 모든 피어 노드로 전송
만약 요청이 PWL이면
요청을 홈 노드로 전송
피어 노드에 의한 요청 수신
호출:
피어 노드에서 수신된 요청(PRL 또는 PRIL)
알고리즘에 유일한 변경은, 활성 PWL에 대해 행한 바와 같이, 활성 PIL 요청이 있는 경우에 요청을 버퍼링하는 것이다.
피어 노드에 의한 PIL 요청 수신
호출:
피어 노드에서 수신된 PIL 요청
알고리즘:
PIL 스누프를 캐시로 전송
스누프 응답
새로운 응답/다음 상태 테이블이 사용된 동일 알고리즘(F 및 F, E 및 M에서의 요청자들은 상호 배타적이기 때문에 PIL을 가진 F, E 및 M에 대해서는 엔트리가 없다)
응답 다음 상태
------------------------- ---------------------
상태 PRL PRIL PIL PRL PRIL PIL
---- ------------------------- --------------------
I IACK IACK IACK I I I
S SACK IACK IACK S/I I I
F DATA_F DATA_E S/I I
E DATA_F DATA_E S/I I
M DATA_F DATA_M S/I I
응답 수집
호출:
피어 노드로부터 응답을 수신한 PIL 요청
알고리즘:
만약 모든 피어 노드가 응답했다면
캐시에게 라인을 E 상태로 이동시키라고 알림
버퍼링된 요청을 해제
-- PIL 요청이 완료
M->S PWL 및 즉시 응답
M 상태의 라인을 적중시키는 PRL의 성능 문제는 데이터를 전송하기 전에 다시 써야(PWL를 발행해야할) 필요가 있다는 것이다. 약간의 변경을 가해서 데이터는 동시에 전송되고 다시 써질 수 있다. 홈 노드는 요청자/승자로부터 PWL 요청과 CNCL을 모두 수신할 때까지 DACK를 전송하지 않는다.
기본 프로토콜의 변경:
홈 노드에 의한 요청 수신
호출:
홈 노드에서 수신된 요청
알고리즘:
만약 요청이 PWL이면
메모리에 쓰기를 개시
(전송, 계류중인 읽기 취소 등을 처리)
>> 만약 PWL이 PRL-적중-M이었다면
>> 만약 CNCL이 수신되었다면
>> DACK를 CNCL에 표시된 전송 노드로 전송
>> 그렇지 않으면
>> 어드레스를 다시 쓰여져 있는 것으로 표시
>> 그렇지 않으면
>> ACK를 다시 요청자에게 전송
만약 요청이 PRL 또는 PRIL이면
메모리로부터 읽기를 개시
(READ가 수신되기 전에 읽기가 종료되면 데이터를 버퍼링)
스누프 응답
호출:
적절한 응답 발생을 위해 캐시에 (스누프로서) 제출된 요청
알고리즘:
기본 프로토콜에서처럼 응답/다음 상태를 검색
만약 스누프가 (M, E 또는 F 상태의) 캐시 라인을 적중하면
어드레스를 전송되고 있는 것으로 표시
캐시 라인을 다음 상태로 변경
만약 PRL 스누프가 M 상태의 캐시 라인을 적중하면
PRL-적중-M 다시 쓰기로 표시된 PWL을 개시
PRL-적중-M으로 표시된 DATA_F를 요청자에게 전송
그렇지 않으면
응답을 요청자에게 전송
응답 수집
알고리즘:
차이는 PRL-적중-M 데이터를 기록하고, CNCL 전송시에 특별한 전송을 홈 노드에 통지하는데에 있다:
그렇지 않고 만약 응답이 DATA이면
응답 노드로부터의 전송된 데이터의 수신을 기록
만약 PRL 요청 및 (DATA를 통해 표시된) 적중 M이면
전송 노드를 PRL-적중-M으로 표시
캐시 라인과 새로운 상태를 캐시로 전송(주해: 라인은 아직 전체적으로 관측될 수 없다)
만약 모든 피어 노드가 응답했다면
만약 데이터 응답이 수신되었다면
CNCL, (만일 있었던 경우 PRL-적중-M으로 표시된) 전송 노드 및 충돌 목록을 홈 노드로 전송
홈 노드에서 취소
호출:
(전송 노드와 충돌 목록을 포함하는) CNCL을 수신한 홈 노드
알고리즘:
유일한 차이는 DACK를 전송할 것인지 여부를 결정하는 것이다:
만약 전송 노드가 PRL-적중-M 다시 쓰기를 했다면
만약 PWL이 수신되었다면
DACK를 전송 노드로 전송
그렇지 않으면
어드레스를 다시 쓰기 필요로 표시
그렇지 않으면
DACK를 전송 노드로 전송
DACK 전송
차이는 없다. 발행된 PWL은 원-샷 패킷(one-shot packet)(또는 DACK에 의해 종료된 요청)으로 취급된다.
FM 상태
M 상태의 라인을 적중하는 PRL에 대한 다른 대안은 MESIF에 FM 상태를 도입하는 것이다. 이 상태는 변경된 라인의 공유 카피를 나타낸다. M 상태와 같이, 데이터는 캐시로부터 축출되면 다시 쓰여져야(PWL) 한다. F 상태와 같이, 데이터는 변경될 수 없으며 노드는 라인 상의 읽기 요청에 대해 적중을 가지고 응답한다.
M 상태의 라인을 가진 노드가 PRL을 수신하면, 이 노드는 PWL을 발행하고 DATA_F를 가지고 응답하는 대신에 DATA_FM을 가지고 응답한다.
FM으로부터 M으로 전이하는 것은 PIL를 통한 경우를 제외하고는 허용되지 않는다. FM에서 바로 E로 변경하는 것은 허용되지 않는다.
기본 프로토콜의 변경:
스누프 응답
호출:
적절한 응답 발생을 위해 캐시에 (스누프로서) 제출된 요청
알고리즘:
현재 캐시 상태와 착신 요청 유형에 기초하여 아래의 테이블에서 응답 및 다음 상태를 검색 (S/I의 다음 상태는 라인을 각 상태로 이동시킬 수 있다는 것을 의미한다; 주해: 로컬 카피를 무효화시키더라도 PRL에 대한 DATA_F(M)를 여전히 전송한다 -- 아래의 PRL DATA_E/M 응답 옵션을 참조)
응답 다음 상태
------------------------- ---------------------
상태 PRL PRIL PIL PRL PRIL PIL
---- ------------------------- --------------------
I IACK IACK IACK I I I
S SACK IACK IACK S/I I I
F DATA_F DATA_E S/I I
E DATA_F DATA_E S/I I
M DATA_FM DATA_M S/I I
FM DATA_FM DATA_M S/I I
만약 스누프가 (M, E 또는 F 상태의) 캐시 라인을 적중하면
어드레스를 전송되고 있는 것으로 표시
캐시 라인을 다음 상태로 변경
응답을 요청자에게 전송
충돌없는 데이터
이송된 데이터와 함께 충돌 목록을 전송하는 것은 하드웨어에 있어 문제가 된다. 이송 체인의 중간에 있는 요청이 이것이 중간에 있음을 알고 또 이송 데이터 수신 후에 버퍼링된 요청(IACK/SACK를 가지고) 응답할 수 있다면, 이 충돌 목록을 피하는 것이 가능하다. 이에 의해서 다른 모든 충돌 노드는 더 진행하여 나머지 READ를 홈 노드에 도달시킨다.
이러한 옵션을 가지고 요청들(PRL 및 PRIL, 즉 읽기 요청들)은 다음의 4단계를 거친다:
1) 전송 단계 - 요청을 전송하는 것
2) 수집 단계 - 응답을 수집하는 것(이 다음에는 READ나 CNCL이 전송된다)
3) 데이터 단계 - 데이터를 대기하는 것
4) 유지 단계 - 충돌 체인의 중간에서, XFR까지 데이터를 유지하고, 버퍼링된 착신 요청에 대한 IACK/SACK를 전송
본 실시예에서, 이송된 DATA 상에 피기백 ACK가 없다면 요청은 체인의 중앙에 있음을 알 것이다. 이 유지 단계만이 기본 프로토콜과 다르다. 실제로는 기본 프로토콜의 데이터 단계는 (충돌없는 요청, 즉 시기/충돌 체인의 끝에서의 요청에 대해) 동일하게 유지되거나, 두 단계, 즉 여전히 데이터 단계인 첫 번째 단계와 XFR이 수신되면 종료되는 유지 단계인 두 번째 단계로 나누어진다.
기본 프로토콜의 변경:
피어 노드에 의한 요청 수신
알고리즘에 대한 유일한 변경은 유지 단계에서 활성 요청이 있는지를 조사하는 것이다.
만약 어드레스가 전송되고 있다면
[전과 동일]
그렇지 않고 만약 어드레스가 비활성이면
[전과 동일]
그렇지 않고 만약 어드레스가 활성이면
만약 활성 요청이 PWL이면
[전과 동일]
만약 착신 요청이 활성 요청의 충돌 목록 내에 있으면
[전과 동일]
그렇지 않고 만약 활성 요청이 "유지 단계"에 있으면
만약 착신 요청이 PRL이면
SACK(또는 앞서의 PRIL이 IACK를 취했다면 IACK)를 가지고 응답
그렇지 않으면--착신 요청이 PRIL이면
활성 요청을 무효화할 필요가 있는 것으로 표시
IACK를 가지고 응답
그렇지 않고 만약 활성 요청이 "데이터 단계"에 있으면
[전과 동일]
그렇지 않으면
[전과 동일]
응답 수집
이 알고리즘에 대한 유일한 변경은 요청이 CNCL을 전송하고 그 충돌 목록이 비어 있다면 그 요청은 완료된다는 것이다. 바꾸어 말하면, 시스템은 캐시-투-캐시 이송(cache-to-cache transfer)을 하였으며 충돌이 없었다; 해야 할 나머지 일은 ACK를 받을 필요가 없는 홈 노드에 통지하는 것이다.
주해: (충돌을 가진) CNCL 요청은 XFR을 대기하는 데이터 단계에 머무른다. 즉, 유지 단계로 들어가지 않는다.
홈 노드에서 취소
호출:
(전송 노드와 충돌 목록을 포함하는) CNCL을 수신한 홈 노드
알고리즘:
계류 중인 읽기(있는 경우)를 취소
요청 노드를 이 어드레스에 대한 "현재 소유자"로 표시
DACK를 전송 노드로 전송
만약 충돌이 없다면
-- 충돌없는 캐시된 시기가 완료
그렇지 않으면
충돌 목록을 이 어드레스에 대한 "계류 중인 요청"로서 포함시킴
-- READ 내지 XFR 데이터를 대기
홈 노드에서 읽기 요청
호출:
(충돌 목록을 포함하는) READ를 수신한 홈 노드
알고리즘:
만약 현재 소유자가 없다면
만약 데이터를 이용할 수 없다면
필요하다면 읽기를 개시
읽기 완료를 대기
DATA_E를 요청 노드로 전송
만약 충돌 목록이 비어 있다면
-- 충돌없는 캐시되지 않은 시기가 완료
그렇지 않으면
충돌 목록을 이 어드레스에 대한 "계류 중인 노드"로서 포함시킴
-- READ 내지 XFR 데이터를 대기
그렇지 않으면
계류 중인 충돌을 이 어드레스에 대한 "계류 중인 노드"에 추가
"계류 중인 노드"로부터 요청 노드를 제거
만약 (남아 있는) 계류 중인 노드가 없다면
XFR+ACK(대상: 요청 노드)를 "현재 소유자"에게 전송
-- 시기가 완료
그렇지 않으면
만약 하나 또는 그 이상의 계류 중인 노드(요청자를 포함함)가 PRIL이면
XFRI(대상: 요청 노드)를 "현재 소유자"에게 전송
그렇지 않으면
XFR(대상: 요청 노드)을 "현재 소유자"에게 전송
요청 노드를 "현재 소유자"로 표시
이송 수신
(XFR+ACK를 처리하는 것에 더하여) 여기서의 변경은 유지 단계 중에 IACK 응답이 PRIL을 위해 스푸프되었는지를 판정하는 것이다. 만일 그렇다면, 라인은 스누프를 사용하여 무효화된다.
호출:
(대상 노드를 포함하는) XFR, XFR+ACK 또는 XFRI을 수신한 요청자
알고리즘:
데이터가 아직 수신되지 않았다면 데이터를 대기
만약 수신된 XFRI 또는 요청이 무효화될 필요가 있는 것으로 표시되면
PRIL 스누프를 캐시로 전송
그렇지 않으면
PRL 스누프를 캐시로 전송
-- 만약 종료
만약 XFR+ACK가 수신되면
DATA+ACK 패킷을 대상 노드로 전송
그렇지 않으면
DATA 패킷을 대상 노드로 전송
이송된 데이터 수신
호출:
DATA 또는 DATA+ACK를 XFR의 결과로서 수신한 요청자(요청자는 데이터 단계에 있으며, 따라서 이것은 XFR을 통한다는 것을 안다)
알고리즘:
데이터를 프로세서로 전송
만약 DATA 패킷이 수신되면
요청을 유지 단계로 이동시킴
버퍼링된 각 요청에 대해서
만약 버퍼링된 요청이 PRL이면
SACK(또는 앞서의 PRIL이 IACK를 취했다면 IACK)를 가지고 응답
그렇지 않으면 -- 버퍼링된 요청이 PRIL이면
로컬 요청을 무효화할 필요가 있는 것으로 표시
IACK를 가지고 응답
그렇지 않으면 -- DATA_ACK가 수신되면
-- 요청은 완료되고 시기가 완료됨
PRL DATA_E/M 응답
PRL 스누프가 캐시 라인을 적중하면, 캐시가 라인을 S 또는 I로 전이시키는지 여부에 관계없이 정확함을 유지하기 위하여 DATA_F를 가지고 응답해야 한다. I로 전이될 때에 DATA_E를 전송하는 것을 지원하는 것은 가능하지만, 수신된 E 상태가 F로 끌어낼 필요가 있음을 알리기 위하여 캐시와의 추가적인 통신을 필요로 한다. 기본적으로 알고리즘은 노드가 DATA_E를 이미 수신하였고 그 다음에 SACK를 수신한다면 캐시 상태를 E에서 F로 변경해야 한다는 것이다.

Claims (40)

  1. 멀티-노드 시스템(multi-node system)에서 데이터 블록의 카피(copy of a block of data)에 대한 요청을 제1 피어 노드(peer node)로부터 다수의 노드로 전송하는 단계;
    데이터 블록의 카피에 대한 요청을 제2 피어 노드로부터 상기 제1 피어 노드에 의해 수신하는 단계;
    상기 수신된 요청이 상기 전송된 요청과 충돌하는지 여부를 판정하는 단계; 및
    상기 수신된 요청이 상기 전송된 요청과 충돌하는 경우, 충돌이 존재함을 나타내는 메시지를 상기 데이터 블록에 대한 홈 노드로 전송하는 단계
    를 포함하는 방법.
  2. 제1항에 있어서,
    상기 수신된 요청이 상기 전송된 요청과 충돌하는지 여부를 판정하는 단계는 상기 수신된 요청과 상기 전송된 요청이 동일한 데이터를 요청하는지 여부를 판정하는 단계를 포함하는 방법.
  3. 제1항에 있어서,
    상기 수신된 요청이 상기 전송된 요청과 충돌하는 경우, 충돌이 존재함을 나 타내는 메시지를 상기 데이터 블록에 대한 제3 피어 노드로 전송하는 단계를 더 포함하는 방법.
  4. 제1항에 있어서,
    상기 홈 노드로의 상기 메시지는, 상기 홈 노드가 제3 피어 노드로 명령어 메시지를 전송하게 하고, 상기 제3 피어 노드에게 전송된 상기 명령어 메시지는, 상기 제3 노드가 상기 제1 피어 노드에 의해 요청된 데이터를 상기 제1 피어 노드로 전송하게 하는 방법.
  5. 제1항에 있어서,
    상기 제1 피어 노드는 다수의 피어 노드를 나타내는 피어 에이전트(peer agent)를 통해 상기 제2 피어 노드와 통신하는 방법.
  6. 제1항에 있어서,
    상기 제1 피어 노드는 다수의 노드를 나타내는 홈 에이전트를 통해 상기 홈 노드와 통신하는 방법.
  7. 다수의 피어 엔티티(peer entities)와 홈 엔티티(home entity)를 가진 시스템에서 다수의 시스템 엔티티와 연결되기 위한 인터페이스; 및
    상기 인터페이스와 연결되어, 데이터 블록의 카피에 대한 요청을 하나 또는 그 이상의 상기 피어 엔티티에게 전송하며, 다른 피어 엔티티들로부터 수신된 충돌 하는 요청 메시지들을 검출하기 위한 제어 회로
    를 포함하며,
    상기 충돌하는 요청 메시지에 응답하여, 상기 제어 회로는 충돌을 나타내는 메시지를 상기 데이터 블록에 대응하는 홈 노드에 전송하는 장치.
  8. 제7항에 있어서,
    상기 피어 엔티티들은 하나 또는 그 이상의 피어 노드와, 다수의 피어 노드를 나타내는 하나 또는 그 이상의 피어 에이전트를 포함하는 장치.
  9. 제7항에 있어서,
    상기 홈 엔티티는 홈 노드를 포함하는 장치.
  10. 제7항에 있어서,
    상기 홈 엔티티는 다수의 노드를 나타내는 홈 에이전트를 포함하는 장치.
  11. 제7항에 있어서,
    상기 인터페이스와 연결된 프로세서를 더 포함하는 장치.
  12. 제11항에 있어서,
    상기 제어 회로는 상기 프로세서 내에 포함된 장치.
  13. 제7항에 있어서,
    상기 다른 피어 엔티티들로부터의 요청이 상기 제어 회로에 의해 만들어진 요청과 충돌하지 않는 경우, 상기 제어 회로는 요청된 데이터의 카피들을 요청하는 피어 노드들에 제공하는 장치.
  14. 제1 피어 노드에 의해 데이터 블록의 카피를 요청하는 제1 요청 메시지를 상기 요청된 데이터 블록에 대응하는 홈 노드 및 적어도 하나의 피어 노드로 전송하는 단계;
    제2 피어 노드에 의해 상기 데이터 블록의 카피를 요청하는 제2 요청 메시지를 적어도 상기 제1 피어 노드 및 상기 홈 노드와, 제3 피어 노드로 전송하는 단계;
    상기 데이터 블록의 카피를 상기 제3 피어 노드로부터 상기 제1 피어 노드로 전송하는 단계;
    상기 제3 피어 노드로부터의 상기 데이터 블록의 수신을 나타내는 메시지를 상기 제1 피어 노드로부터 상기 홈 노드로 전송하는 단계;
    상기 데이터 블록의 카피를 상기 제1 피어 노드로부터 상기 제2 피어 노드로 전송하는 단계; 및
    상기 제2 피어 노드로부터의 상기 데이터 블록의 수신을 나타내는 메시지를 상기 제2 피어 노드로부터 상기 홈 노드로 전송하는 단계
    를 포함하는 방법.
  15. 제14항에 있어서,
    상기 데이터 블록은 캐시 라인(cache line)을 포함하는 방법.
  16. 제14항에 있어서,
    상기 제1 요청 메시지는 다수의 노드를 나타내는 에이전트로 전송되는 방법.
  17. 제14항에 있어서,
    상기 제2 요청 메시지는 다수의 노드를 나타내는 에이전트로 전송되는 방법.
  18. 제14항에 있어서,
    상기 데이터 블록의 카피를 상기 제3 피어 노드로부터 상기 제1 피어 노드로 전송하는 단계는 상기 제3 피어 노드가 상기 데이터 블록을 보유하는 경우 상기 데이터 블록의 상태를 변경시키는 단계를 포함하는 방법.
  19. 제14항에 있어서,
    상기 데이터 블록의 카피를 상기 제1 피어 노드로부터 상기 제2 피어 노드로 전송하는 단계는 상기 제1 피어 노드가 상기 데이터 블록을 보유하는 경우 상기 데이터 블록의 상태를 변경시키는 단계를 포함하는 방법.
  20. 데이터 블록의 카피를 요청하는 제1 요청 메시지를 제1 피어 노드로부터 적어도 제2 피어 노드, 제3 피어 노드 및 상기 데이터 블록에 대응하는 홈 노드로 전송하는 단계;
    상기 데이터 블록의 카피를 요청하는 제2 요청 메시지를, 상기 제2 피어 노드가 상기 제1 요청 메시지를 수신하기 전에, 상기 제2 피어 노드로부터 상기 제1 피어 노드, 상기 제3 피어 노드 및 상기 홈 노드로 전송하는 단계;
    상기 제1 요청 메시지와 상기 제2 요청 메시지 간의 충돌을 나타내는 메시지를 상기 제1 피어 노드로부터 상기 제2 피어 노드로 전송하는 단계;
    상기 데이터 블록의 카피를 상기 제3 피어 노드로부터 상기 제1 피어 노드로 전송하는 단계;
    상기 제1 요청 메시지와 상기 제2 요청 메시지 간의 충돌을 나타내는 메시지를 상기 제1 노드로부터 상기 홈 노드로 전송하는 단계; 및
    상기 제1 피어 노드가 상기 데이터 블록의 카피를 상기 제2 피어 노드에 전송하게 하는 메시지를 상기 홈 노드로부터 상기 제1 피어 노드로 전송하는 단계
    를 포함하는 방법.
  21. 제20항에 있어서,
    상기 데이터 블록의 카피를 상기 제1 피어 노드로부터 상기 제2 피어 노드로 전송하는 단계를 더 포함하는 방법.
  22. 제21항에 있어서,
    상기 제1 요청 메시지와 상기 제2 요청 메시지 간의 충돌을 나타내는 메시지를 상기 제2 피어 노드로부터 상기 제1 피어 노드로 전송하는 단계를 더 포함하는 방법.
  23. 제21항에 있어서,
    상기 데이터 블록의 카피를 상기 제1 피어 노드로부터 상기 제2 피어 노드로 전송하는 단계는 상기 제1 피어 노드가 상기 데이터 블록을 보유하는 경우 상기 데이터 블록의 상태를 변경시키는 단계를 포함하는 방법.
  24. 제20항에 있어서,
    상기 데이터 블록은 캐시 라인을 포함하는 방법.
  25. 제20항에 있어서,
    상기 제1 요청 메시지는 다수의 노드를 나타내는 에이전트로 전송되는 방법.
  26. 제20항에 있어서,
    상기 제2 요청 메시지는 다수의 노드를 나타내는 에이전트로 전송되는 방법.
  27. 데이터 블록의 카피를 요청하는 제1 요청 메시지를 제1 피어 노드로부터 상기 데이터 블록에 대응하는 홈 노드, 제2 피어 노드 및 제3 피어 노드로 전송하는 단계 - 상기 제3 피어 노드로의 상기 메시지는 지연됨 -;
    상기 데이터 블록의 카피를 요청하는 제2 요청 메시지를, 상기 제3 피어 노드가 상기 지연된 제1 요청 메시지를 수신하기 전에, 상기 제2 피어 노드로부터 상기 제1 피어 노드, 상기 제3 피어 노드 및 상기 홈 노드로 전송하는 단계;
    상기 제1 메시지와 상기 제2 메시지 간의 충돌을 나타내는 메시지를 상기 제2 피어 노드로부터 상기 제1 피어 노드로 전송하는 단계;
    상기 데이터 블록의 카피를 상기 제3 피어 노드로부터 상기 제2 피어 노드로 전송하는 단계;
    상기 제1 요청 메시지와 상기 제2 요청 메시지 간의 충돌을 나타내는 메시지를 상기 제2 피어 노드로부터 상기 홈 노드로 전송하는 단계; 및
    상기 제2 피어 노드가 상기 데이터 블록의 카피를 상기 제1 피어 노드로 전송하게 하는 메시지를 상기 홈 노드로부터 상기 제2 피어 노드로 전송하는 단계
    를 포함하는 방법.
  28. 제27항에 있어서,
    상기 데이터 블록의 카피를 상기 제2 피어 노드로부터 상기 제1 피어 노드로 전송하는 단계를 더 포함하는 방법.
  29. 제27항에 있어서,
    상기 데이터 블록은 캐시 라인을 포함하는 방법.
  30. 제27항에 있어서,
    상기 제1 노드는 상기 제1 요청 메시지를 다수의 노드를 나타내는 에이전트로 전송하는 방법.
  31. 제27항에 있어서,
    상기 제2 노드는 상기 제2 요청 메시지를 다수의 노드를 나타내는 에이전트로 전송하는 방법.
  32. 제27항에 있어서,
    상기 데이터 블록의 카피를 상기 제3 피어 노드로부터 상기 제2 피어 노드로 전송하는 단계는 상기 제1 피어 노드가 상기 데이터 블록을 보유하는 경우 상기 데이터 블록의 상태를 변경시키는 단계를 포함하는 방법.
  33. 데이터 블록의 카피를 요청하는 제1 메시지를 제1 피어 노드로부터 제2 피어 노드 및 홈 노드로 전송하는 단계;
    상기 데이터 블록의 카피에 대한 제2 요청을 상기 제2 피어 노드로부터 상기 제1 피어 노드 및 상기 홈 노드로 전송하는 단계;
    상기 제1 메시지와 상기 제2 메시지 간의 충돌을 나타내는 메시지를 상기 제1 피어 노드로부터 상기 제2 피어 노드로 전송하는 단계;
    상기 제2 피어 노드가 상기 데이터 블록의 유효 카피(valid copy)를 가지고 있지 않음을 나타내는 메시지를 상기 제2 노드로부터 상기 제1 노드로 전송하는 단계;
    상기 데이터 블록의 카피를 상기 홈 노드로부터 상기 제1 피어 노드로 전송하는 단계; 및
    상기 제1 피어 노드가 상기 데이터 블록의 카피를 상기 제2 피어 노드로 전송하게 하는 메시지를 상기 홈 노드로부터 상기 제1 피어 노드로 전송하는 단계
    를 포함하는 방법.
  34. 제33항에 있어서,
    상기 제1 메시지와 상기 제2 메시지 간의 충돌을 나타내는 메시지를 상기 제2 피어 노드로부터 상기 제1 피어 노드로 전송하는 단계를 더 포함하는 방법.
  35. 제33항에 있어서,
    상기 제1 피어 노드가 상기 데이터 블록의 유효 카피를 가지고 있지 않음을 나타내는 메시지를 상기 제1 피어 노드로부터 상기 제2 피어 노드로 전송하는 단계를 더 포함하는 방법.
  36. 제35항에 있어서,
    상기 제1 요청과 상기 제2 요청 간의 충돌을 나타내는 메시지를 상기 제2 피어 노드로부터 상기 홈 노드로 전송하는 단계를 더 포함하는 방법.
  37. 제33항에 있어서,
    상기 데이터 블록은 캐시 라인을 포함하는 방법.
  38. 제33항에 있어서,
    상기 홈 노드는 상기 데이터 블록의 카피와, 상기 제1 피어 노드에게 상기 데이터 블록의 카피를 상기 제2 피어 노드로 전송하게 하는 상기 메시지를 단일 통신(single communication)으로서 전송하는 방법.
  39. 제33항에 있어서,
    상기 제1 메시지는 다수의 노드를 나타내는 에이전트로 전송되는 방법.
  40. 제39항에 있어서,
    상기 제2 메시지는 다수의 노드를 나타내는 상기 에이전트로 전송되는 방법.
KR1020057011395A 2002-12-19 2003-11-26 캐시 일관성 프로토콜을 위한 추론적 분산식 충돌 해결방법 KR100841484B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/325,427 US7917646B2 (en) 2002-12-19 2002-12-19 Speculative distributed conflict resolution for a cache coherency protocol
US10/325,427 2002-12-19

Publications (2)

Publication Number Publication Date
KR20050086922A KR20050086922A (ko) 2005-08-30
KR100841484B1 true KR100841484B1 (ko) 2008-06-25

Family

ID=32593763

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020057011395A KR100841484B1 (ko) 2002-12-19 2003-11-26 캐시 일관성 프로토콜을 위한 추론적 분산식 충돌 해결방법

Country Status (7)

Country Link
US (2) US7917646B2 (ko)
JP (1) JP4261487B2 (ko)
KR (1) KR100841484B1 (ko)
CN (1) CN100468365C (ko)
AU (1) AU2003295949A1 (ko)
DE (1) DE10393919B4 (ko)
WO (1) WO2004061677A2 (ko)

Families Citing this family (33)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8185602B2 (en) 2002-11-05 2012-05-22 Newisys, Inc. Transaction processing using multiple protocol engines in systems having multiple multi-processor clusters
US7526672B2 (en) * 2004-02-25 2009-04-28 Microsoft Corporation Mutual exclusion techniques in a dynamic peer-to-peer environment
US7822929B2 (en) * 2004-04-27 2010-10-26 Intel Corporation Two-hop cache coherency protocol
US20070073977A1 (en) * 2005-09-29 2007-03-29 Safranek Robert J Early global observation point for a uniprocessor system
US20070150664A1 (en) * 2005-12-28 2007-06-28 Chris Dombrowski System and method for default data forwarding coherent caching agent
US7536515B2 (en) * 2006-06-30 2009-05-19 Intel Corporation Repeated conflict acknowledgements in a cache coherency protocol
US7506108B2 (en) * 2006-06-30 2009-03-17 Intel Corporation Requester-generated forward for late conflicts in a cache coherency protocol
US7721050B2 (en) * 2006-06-30 2010-05-18 Intel Corporation Re-snoop for conflict resolution in a cache coherency protocol
US7836144B2 (en) * 2006-12-29 2010-11-16 Intel Corporation System and method for a 3-hop cache coherency protocol
US7500037B2 (en) * 2007-01-30 2009-03-03 International Business Machines Corporation System, method and program for managing locks
US7934059B2 (en) * 2008-01-29 2011-04-26 International Business Machines Corporation Method, system and computer program product for preventing lockout and stalling conditions in a multi-node system with speculative memory fetching
US8190820B2 (en) * 2008-06-13 2012-05-29 Intel Corporation Optimizing concurrent accesses in a directory-based coherency protocol
US8205045B2 (en) * 2008-07-07 2012-06-19 Intel Corporation Satisfying memory ordering requirements between partial writes and non-snoop accesses
US8250311B2 (en) 2008-07-07 2012-08-21 Intel Corporation Satisfying memory ordering requirements between partial reads and non-snoop accesses
JP4600700B2 (ja) * 2009-03-17 2010-12-15 日本電気株式会社 プログラムのメモリ空間への配置方法、装置、およびプログラム
JP5408713B2 (ja) * 2009-09-29 2014-02-05 エヌイーシーコンピュータテクノ株式会社 キャッシュメモリ制御システム及びキャッシュメモリの制御方法
US8244986B2 (en) * 2009-12-30 2012-08-14 Empire Technology Development, Llc Data storage and access in multi-core processor architectures
US8463960B2 (en) * 2011-08-08 2013-06-11 Arm Limited Synchronisation of data processing systems
US10204049B2 (en) 2012-01-06 2019-02-12 Intel Corporation Value of forward state by increasing local caching agent forwarding
US10268583B2 (en) * 2012-10-22 2019-04-23 Intel Corporation High performance interconnect coherence protocol resolving conflict based on home transaction identifier different from requester transaction identifier
US9906597B2 (en) * 2015-04-07 2018-02-27 Microsoft Technology Licensing, Llc Collaboration data proxy system in cloud computing platforms
US10506031B1 (en) 2015-09-18 2019-12-10 Amazon Technologies, Inc. Scalable network for processing virtual environments
US10484249B1 (en) 2015-09-18 2019-11-19 Amazon Technologies, Inc. Dynamic distribution of simulation load
US10230583B1 (en) 2015-09-18 2019-03-12 Amazon Technologies, Inc. Multi-node object simulation
US10911535B1 (en) * 2015-09-18 2021-02-02 Amazon Technologies, Inc. Object ownership migration
US10298679B1 (en) 2015-09-18 2019-05-21 Amazon Technologies, Inc. Object ownership migration
US10104173B1 (en) 2015-09-18 2018-10-16 Amazon Technologies, Inc. Object subscription rule propagation
US10230809B2 (en) * 2016-02-29 2019-03-12 Intel Corporation Managing replica caching in a distributed storage system
US10802971B2 (en) 2016-10-13 2020-10-13 International Business Machines Corporation Cache memory transaction shielding via prefetch suppression
US10585800B2 (en) * 2017-06-16 2020-03-10 International Business Machines Corporation Reducing cache transfer overhead in a system
CN109840216B (zh) * 2017-11-28 2023-05-09 华为技术有限公司 针对高速缓存的数据处理方法及相关元件、设备、***
CN110083548B (zh) * 2018-01-26 2023-01-13 华为技术有限公司 数据处理方法及相关网元、设备、***
US11229038B2 (en) 2018-08-09 2022-01-18 Qualcomm Incorporated Multi-link network coordination

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020129211A1 (en) * 2000-12-30 2002-09-12 Arimilli Ravi Kumar Data processing system and method for resolving a conflict between requests to modify a shared cache line

Family Cites Families (64)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6026A (en) * 1849-01-09 Cast-iron car-wheel
US5297269A (en) 1990-04-26 1994-03-22 Digital Equipment Company Cache coherency protocol for multi processor computer system
JP2952128B2 (ja) * 1992-01-27 1999-09-20 キヤノン株式会社 インクジェット捺染用布帛、インクジェット捺染方法及び捺染物
US5190386A (en) * 1992-01-28 1993-03-02 Eudy James R Printer with edge strip trimmer
US5463629A (en) 1992-07-13 1995-10-31 Ko; Cheng-Hsu Dynamic channel allocation method and system for integrated services digital network
EP0600626A1 (en) 1992-11-13 1994-06-08 Cyrix Corporation Coherency for write-back cache in a system designed for write-through cache
JP2819982B2 (ja) 1993-03-18 1998-11-05 株式会社日立製作所 範囲指定可能なキャッシュ一致保証機能を有するマルチプロセッサシステム
JP3183993B2 (ja) 1993-03-31 2001-07-09 株式会社東芝 ディスク制御システム
US5623644A (en) 1994-08-25 1997-04-22 Intel Corporation Point-to-point phase-tolerant communication
US5819296A (en) 1996-10-31 1998-10-06 Veritas Software Corporation Method and apparatus for moving large numbers of data files between computer systems using import and export processes employing a directory of file handles
US6636944B1 (en) 1997-04-24 2003-10-21 International Business Machines Corporation Associative cache and method for replacing data entries having an IO state
US6189043B1 (en) 1997-06-09 2001-02-13 At&T Corp Dynamic cache replication in a internet environment through routers and servers utilizing a reverse tree generation
US6092155A (en) 1997-07-10 2000-07-18 International Business Machines Corporation Cache coherent network adapter for scalable shared memory processing systems
US6085276A (en) * 1997-10-24 2000-07-04 Compaq Computers Corporation Multi-processor computer system having a data switch with simultaneous insertion buffers for eliminating arbitration interdependencies
US6009488A (en) 1997-11-07 1999-12-28 Microlinc, Llc Computer having packet-based interconnect channel
US6460119B1 (en) 1997-12-29 2002-10-01 Intel Corporation Snoop blocking for cache coherency
US6341337B1 (en) 1998-01-30 2002-01-22 Sun Microsystems, Inc. Apparatus and method for implementing a snoop bus protocol without snoop-in and snoop-out logic
US6067611A (en) 1998-06-30 2000-05-23 International Business Machines Corporation Non-uniform memory access (NUMA) data processing system that buffers potential third node transactions to decrease communication latency
US6430657B1 (en) 1998-10-12 2002-08-06 Institute For The Development Of Emerging Architecture L.L.C. Computer system that provides atomicity by using a tlb to indicate whether an exportable instruction should be executed using cache coherency or by exporting the exportable instruction, and emulates instructions specifying a bus lock
US6275907B1 (en) 1998-11-02 2001-08-14 International Business Machines Corporation Reservation management in a non-uniform memory access (NUMA) data processing system
US6477535B1 (en) 1998-11-25 2002-11-05 Computer Associates Think Inc. Method and apparatus for concurrent DBMS table operations
US6338122B1 (en) 1998-12-15 2002-01-08 International Business Machines Corporation Non-uniform memory access (NUMA) data processing system that speculatively forwards a read request to a remote processing node
US6275905B1 (en) 1998-12-21 2001-08-14 Advanced Micro Devices, Inc. Messaging scheme to maintain cache coherency and conserve system memory bandwidth during a memory read operation in a multiprocessing computer system
US6370621B1 (en) 1998-12-21 2002-04-09 Advanced Micro Devices, Inc. Memory cancel response optionally cancelling memory controller's providing of data in response to a read operation
US6263409B1 (en) 1998-12-22 2001-07-17 Unisys Corporation Data processing system and method for substituting one type of request for another for increased performance when processing back-to-back requests of certain types
US6275995B1 (en) * 1999-02-26 2001-08-21 Sweports Limited Hand covering with reversible cleaning membrane
JP4363539B2 (ja) 1999-06-04 2009-11-11 諏訪熱工業株式会社 ボールペン用ボール
US6442597B1 (en) * 1999-07-08 2002-08-27 International Business Machines Corporation Providing global coherence in SMP systems using response combination block coupled to address switch connecting node controllers to memory
US6484220B1 (en) 1999-08-26 2002-11-19 International Business Machines Corporation Transfer of data between processors in a multi-processor system
US6457100B1 (en) * 1999-09-15 2002-09-24 International Business Machines Corporation Scaleable shared-memory multi-processor computer system having repetitive chip structure with efficient busing and coherence controls
US6405289B1 (en) * 1999-11-09 2002-06-11 International Business Machines Corporation Multiprocessor system in which a cache serving as a highest point of coherency is indicated by a snoop response
JP3959914B2 (ja) 1999-12-24 2007-08-15 株式会社日立製作所 主記憶共有型並列計算機及びそれに用いるノード制御装置
US6493809B1 (en) 2000-01-28 2002-12-10 International Business Machines Corporation Maintaining order of write operations in a multiprocessor for memory consistency
US6922755B1 (en) 2000-02-18 2005-07-26 International Business Machines Corporation Directory tree multinode computer system
US6769017B1 (en) 2000-03-13 2004-07-27 Hewlett-Packard Development Company, L.P. Apparatus for and method of memory-affinity process scheduling in CC-NUMA systems
US7062541B1 (en) 2000-04-27 2006-06-13 International Business Machines Corporation System and method for transferring related data objects in a distributed data storage environment
US6640287B2 (en) 2000-06-10 2003-10-28 Hewlett-Packard Development Company, L.P. Scalable multiprocessor system and cache coherence method incorporating invalid-to-dirty requests
US6795900B1 (en) 2000-07-20 2004-09-21 Silicon Graphics, Inc. Method and system for storing data at input/output (I/O) interfaces for a multiprocessor system
US6760728B1 (en) 2000-09-27 2004-07-06 Palmsource, Inc. Method and apparatus for importing and exporting directory and calendar information to and from personal information management applications
US6594733B1 (en) * 2000-09-27 2003-07-15 John T. Cardente Cache based vector coherency methods and mechanisms for tracking and managing data use in a multiprocessor system
US6631449B1 (en) 2000-10-05 2003-10-07 Veritas Operating Corporation Dynamic distributed data system and method
DE10052443A1 (de) 2000-10-23 2002-05-08 Boehringer Werkzeugmaschinen Kombimaschine
US6826591B2 (en) 2000-12-15 2004-11-30 International Business Machines Corporation Flexible result data structure and multi-node logging for a multi-node application system
US6571322B2 (en) 2000-12-28 2003-05-27 International Business Machines Corporation Multiprocessor computer system with sectored cache line mechanism for cache intervention
US6615319B2 (en) 2000-12-29 2003-09-02 Intel Corporation Distributed mechanism for resolving cache coherence conflicts in a multi-node computer architecture
US6842830B2 (en) * 2001-03-31 2005-01-11 Intel Corporation Mechanism for handling explicit writeback in a cache coherent multi-node architecture
US6877026B2 (en) 2001-06-08 2005-04-05 Sun Microsystems, Inc. Bulk import in a directory server
US6901485B2 (en) 2001-06-21 2005-05-31 International Business Machines Corporation Memory directory management in a multi-node computer system
US6691192B2 (en) 2001-08-24 2004-02-10 Intel Corporation Enhanced general input/output architecture and related methods for establishing virtual channels therein
US20030074430A1 (en) 2001-10-05 2003-04-17 Gieseke Eric James Object oriented provisioning server object model
US6785774B2 (en) 2001-10-16 2004-08-31 International Business Machines Corporation High performance symmetric multiprocessing systems via super-coherent data mechanisms
JP2005519391A (ja) 2002-02-28 2005-06-30 シリコン、グラフィクス、インコーポレイテッド 共有ベクトルの増加を伴わないdsmマルチプロセッサシステムにおけるキャッシュコヒーレンスのための方法およびシステム
US7269709B2 (en) 2002-05-15 2007-09-11 Broadcom Corporation Memory controller configurable to allow bandwidth/latency tradeoff
US6944719B2 (en) 2002-05-15 2005-09-13 Broadcom Corp. Scalable cache coherent distributed shared memory processing system
US7209976B2 (en) 2002-07-16 2007-04-24 Jeremy Benjamin Protocol communication and transit packet forwarding routed between multiple virtual routers within a single physical router
US7051163B2 (en) 2002-10-03 2006-05-23 Hewlett-Packard Development Company, L.P. Directory structure permitting efficient write-backs in a shared memory computer system
US6934814B2 (en) 2002-11-05 2005-08-23 Newisys, Inc. Cache coherence directory eviction mechanisms in multiprocessor systems which maintain transaction ordering
US7111128B2 (en) 2002-12-19 2006-09-19 Intel Corporation Hierarchical virtual model of a cache hierarchy in a multiprocessor system
US7130969B2 (en) 2002-12-19 2006-10-31 Intel Corporation Hierarchical directories for cache coherency in a multiprocessor system
JP3944449B2 (ja) 2002-12-19 2007-07-11 株式会社日立製作所 計算機システム、磁気ディスク装置、および、ディスクキャッシュ制御方法
US6954829B2 (en) 2002-12-19 2005-10-11 Intel Corporation Non-speculative distributed conflict resolution for a cache coherency protocol
US8145847B2 (en) 2004-01-20 2012-03-27 Hewlett-Packard Development Company, L.P. Cache coherency protocol with ordering points
US7818391B2 (en) 2004-01-20 2010-10-19 Hewlett-Packard Development Company, L.P. System and method to facilitate ordering point migration
US7533134B2 (en) 2004-04-01 2009-05-12 Microsoft Corporation Systems and methods for the propagation of conflict resolution to enforce item convergence (i.e., data convergence)

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020129211A1 (en) * 2000-12-30 2002-09-12 Arimilli Ravi Kumar Data processing system and method for resolving a conflict between requests to modify a shared cache line

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
RAJWAR R. et al. "Improving the throughput of synchronization by insertion of delays", Proceedings of HIGH PERFORMANCE COMPUTER ARCHITECTURE, pp.168-179, 2000-01-08

Also Published As

Publication number Publication date
US7917646B2 (en) 2011-03-29
JP4261487B2 (ja) 2009-04-30
AU2003295949A8 (en) 2004-07-29
KR20050086922A (ko) 2005-08-30
WO2004061677A2 (en) 2004-07-22
DE10393919T5 (de) 2006-01-12
AU2003295949A1 (en) 2004-07-29
DE10393919B4 (de) 2019-10-10
US8171095B2 (en) 2012-05-01
CN100468365C (zh) 2009-03-11
JP2006516058A (ja) 2006-06-15
US20040122966A1 (en) 2004-06-24
CN1849592A (zh) 2006-10-18
US20110161451A1 (en) 2011-06-30
WO2004061677A3 (en) 2006-02-16

Similar Documents

Publication Publication Date Title
KR100841484B1 (ko) 캐시 일관성 프로토콜을 위한 추론적 분산식 충돌 해결방법
US7434006B2 (en) Non-speculative distributed conflict resolution for a cache coherency protocol
US6922756B2 (en) Forward state for use in cache coherency in a multiprocessor system
US10019366B2 (en) Satisfying memory ordering requirements between partial reads and non-snoop accesses
KR100880059B1 (ko) 효율적인 이홉(two-hop) 캐시 일관성 프로토콜
US8205045B2 (en) Satisfying memory ordering requirements between partial writes and non-snoop accesses
US7360033B2 (en) Hierarchical virtual model of a cache hierarchy in a multiprocessor system
JP3317329B2 (ja) 逐次符号化スヌープ応答を使用してキャッシュの一貫性を保つ方法およびシステム
US20020087811A1 (en) Method and apparatus for reducing memory latency in a cache coherent multi-node architecture
WO2006012198A1 (en) Pushing of clean data to one or more caches corresponding to one or more processors in a system having coherency protocol
US20050262250A1 (en) Messaging protocol

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20130603

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20140603

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20150529

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20160527

Year of fee payment: 9