KR102452302B1 - 경쟁 잠금 요청 생략 방식 - Google Patents
경쟁 잠금 요청 생략 방식 Download PDFInfo
- Publication number
- KR102452302B1 KR102452302B1 KR1020187034910A KR20187034910A KR102452302B1 KR 102452302 B1 KR102452302 B1 KR 102452302B1 KR 1020187034910 A KR1020187034910 A KR 1020187034910A KR 20187034910 A KR20187034910 A KR 20187034910A KR 102452302 B1 KR102452302 B1 KR 102452302B1
- Authority
- KR
- South Korea
- Prior art keywords
- node
- given
- block
- data
- copy
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0815—Cache consistency protocols
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0813—Multiuser, multiprocessor or multiprocessing cache systems with a network or matrix configuration
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0815—Cache consistency protocols
- G06F12/0817—Cache consistency protocols using directory methods
- G06F12/0828—Cache consistency protocols using directory methods with concurrent directory accessing, i.e. handling multiple concurrent coherency transactions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0842—Multiuser, multiprocessor or multiprocessing cache systems for multiprocessing or multitasking
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/526—Mutual exclusion algorithms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/52—Indexing scheme relating to G06F9/52
- G06F2209/522—Manager
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/52—Indexing scheme relating to G06F9/52
- G06F2209/523—Mode
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1016—Performance improvement
- G06F2212/1024—Latency reduction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1041—Resource optimization
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/15—Use in a specific computing environment
- G06F2212/154—Networked environment
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/28—Using a specific disk cache architecture
- G06F2212/283—Plural cache memories
- G06F2212/284—Plural cache memories being distributed
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/60—Details of cache memory
- G06F2212/608—Details relating to cache mapping
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/62—Details of cache specific to multiprocessor cache arrangements
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Mathematical Physics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
다수의 노드 간에 네트워크 트래픽을 관리하기 위한 시스템 및 방법이 설명된다. 컴퓨팅 시스템은 서로 연결된 다수의 노드를 포함한다. 홈 노드에 할당된 주어진 데이터 블록에 대한 판독 액세스를 요청하는 노드의 수가 임계값을 초과하고 상기 주어진 데이터 블록의 사본이 상기 시스템의 상기 다수의 노드 중 제1 노드에 이미 저장되어 있다고 상기 홈 노드가 결정하는 경우, 상기 홈 노드는 상기 제1 노드로 커맨드를 송신한다. 상기 커맨드는 상기 주어진 데이터 블록의 사본을 상기 홈 노드로 포워딩할 것을 상기 제1 노드에 지시한다. 그런 다음, 상기 홈 노드는 상기 주어진 데이터 블록의 사본을 유지하고, 상기 홈 노드가 상기 주어진 데이터 블록에 대한 기록 요청 또는 잠금 해제 요청을 검출할 때까지 상기 주어진 데이터 블록의 사본을 다른 요청 노드에 포워딩한다.
Description
본 발명은 컴퓨팅 네트워크 시스템에 관한 것으로, 보다 상세하게는 다수의 노드(node) 간의 통신을 관리하는 것에 관한 것이다.
현대 마이크로프로세서에서는, 하나 이상의 프로세서 및/또는 프로세서 코어들이 마이크로프로세서에 포함되며, 여기서 각각의 프로세서는 수퍼스칼라 파이프라인으로 명령을 실행할 수 있다. 마이크로프로세서는 데이터를 요청하는 마이크로프로세서의 대기 시간을 줄이기 위해 하나 이상의 캐시 계층 레벨을 포함하거나 이 캐시 계층 레벨에 결합된다. 추가적으로, 컴퓨팅 성능을 향상시키기 위해, 컴퓨팅 시스템은 종종 다수의 노드를 포함하고 각각의 노드는 하나 이상의 마이크로프로세서를 갖는다. 일부 경우에 데이터의 주어진 블록은 다수의 노드의 다수의 캐시에 저장된다. 하나의 노드에서 캐시된 사본(cached copy)들 중 하나의 사본은 다른 노드의 캐시된 사본에 대해 수정될 수 있으므로, 컴퓨팅 시스템은 주어진 캐시 일관성 프로토콜(cache coherency protocol)에 따라 캐시 일관성을 유지하도록 구성된다. 다양한 특정 일관성 프로토콜이 잘 알려져 있다.
많은 이러한 일관성 프로토콜은 시스템 내의 노드들 사이에서 전달되는 메시지, 커맨드 및/또는 프로브(probe)의 사용을 포함한다. 일부 경우에 메시지는 메모리 제어기와 같은 주어진 일관성 지점에 의해 조정된다. 또한 프로브는 주어진 블록에 대한 액세스를 동기화하는 데 사용된다. 일반적으로 소프트웨어는 데이터에 대한 액세스를 동기화하는 잠금 메커니즘(locking mechanism)을 사용한다. 다양한 시스템에서 많은 스레드(thread)가 데이터의 주어진 블록에 잠금을 획득하려고 시도한다. 이러한 경우에, 주어진 블록에 대해 특정 노드(예를 들어, 홈(home) 노드)는 주어진 블록에 다수의 잠금 획득 요청을 수신한다. 이러한 요청에 응답하여, 홈 노드는 일반적으로 잠금 획득 요청을 직렬로 처리할 것이다. 예를 들어, 이러한 경우 제1 스레드가 주어진 블록에 잠금을 성공적으로 획득한다. 제1 스레드가 주어진 블록의 처리를 완료하면 제1 스레드는 잠금을 해제하라는 메시지를 노드에 전달한다. 그러나, 이전에 수신된 잠금 획득 요청이 직렬화된 방식으로 처리되기 때문에, 이전의 요청이 처리 완료될 때까지 제1 스레드로부터의 잠금 해제 요청은 처리될 수 없다. 그 결과 잠금이 해제되기 전에 지연이 발생한다.
상기를 고려하여, 다중 노드 처리 시스템에서 통신을 관리하기 위한 효율적인 방법 및 시스템이 요구된다.
다수의 노드 간의 통신을 관리하기 위한 시스템 및 방법이 고려된다. 다양한 실시예에서, 컴퓨팅 시스템은 서로 연결된 다수의 처리 노드를 포함한다. 각각의 처리 노드는 하나 이상의 처리 코어 및 하나 이상의 대응하는 캐시 메모리 서브시스템을 포함한다. 다수의 노드는 홈 노드에 할당된 데이터 블록에 대한 판독 액세스 요청을 생성하도록 구성된다. 상기 홈 노드에 할당된 주어진 데이터 블록에 대해, 상기 홈 노드 이외의 노드는 현재 상기 주어진 데이터 블록의 사본을 저장한다. 다른 노드는 상기 주어진 데이터 블록의 사본을 갖는 동안 이 다른 노드는 상기 주어진 데이터 블록에 대해 판독 액세스 요청을 상기 홈 노드로 송신한다.
상기 주어진 데이터 블록에 대해 판독 액세스를 요청하는 다수의 노드가 임계값을 초과하였고 상기 주어진 데이터 블록의 사본이 또 다른 노드에 저장되어 있다고 상기 홈 노드가 결정하면, 상기 홈 노드는 상기 제1 노드에 커맨드를 송신한다. 상기 제1 노드로 송신된 상기 커맨드는 상기 주어진 데이터 블록의 사본을 상기 홈 노드로 포워딩(forward)할 것을 상기 제1 노드에 지시한다. 또한, 상기 제1 노드는 상기 주어진 데이터 블록의 사본에 대한 캐시 일관성 상태를 소유된 일관성 상태로 변경하도록 지시된다.
상기 사본을 수신한 것에 응답하여, 상기 홈 노드는 상기 주어진 데이터 블록의 사본을 상기 다수의 노드의 제2 노드와 같은 요청 노드로 포워딩한다. 추가적으로, 상기 제2 노드는 상기 주어진 데이터 블록의 사본에 대한 캐시 일관성 상태를 공유 상태로 변경하도록 지시된다. 상기 홈 노드가 상기 주어진 데이터 블록에 대해 수정할 의도를 갖는 기록 요청 또는 판독 요청을 검출할 때까지 상기 홈 노드는 상기 주어진 데이터 블록의 사본을 다른 요청 노드로 계속 포워딩한다.
이들 실시예 및 다른 실시예는 이하 상세한 설명 및 도면을 참조하면 더욱 명확해질 것이다.
도 1은 컴퓨팅 시스템의 일 실시예의 일반화된 다이어그램.
도 2는 다중 노드 컴퓨팅 시스템에서 판독 및 기록 요청을 처리하는데 사용되는 시퀀스 다이어그램의 일 실시예의 일반화된 다이어그램.
도 3은 메모리 제어기의 일 실시예의 일반화된 다이어그램.
도 4는 다중 노드 컴퓨팅 시스템에서 판독 및 기록 요청을 처리하는데 사용되는 시퀀스 다이어그램의 다른 실시예의 일반화된 다이어그램.
도 5는 다중 노드 컴퓨팅 시스템에서 판독 및 기록 요청을 처리하는데 사용되는 시퀀스 다이어그램의 다른 실시예의 일반화된 다이어그램.
도 6은 다중 노드 컴퓨팅 시스템에서 판독 및 기록 요청을 처리하는데 사용되는 시퀀스 다이어그램의 다른 실시예의 일반화된 다이어그램.
도 7은 다중 노드 컴퓨팅 시스템에서 판독 및 기록 요청을 처리하는데 사용되는 시퀀스 다이어그램의 다른 실시예의 일반화된 다이어그램.
도 8은 다중 노드 컴퓨팅 시스템에서 판독 및 기록 요청을 처리하는데 사용되는 시퀀스 다이어그램의 다른 실시예의 일반화된 다이어그램.
도 9는 다중 노드 컴퓨팅 시스템에서 일련의 판독 요청을 처리하기 위한 방법의 일 실시예의 일반화된 흐름도.
도 10은 예시적인 처리 노드의 일 실시예의 일반화된 다이어그램.
도 2는 다중 노드 컴퓨팅 시스템에서 판독 및 기록 요청을 처리하는데 사용되는 시퀀스 다이어그램의 일 실시예의 일반화된 다이어그램.
도 3은 메모리 제어기의 일 실시예의 일반화된 다이어그램.
도 4는 다중 노드 컴퓨팅 시스템에서 판독 및 기록 요청을 처리하는데 사용되는 시퀀스 다이어그램의 다른 실시예의 일반화된 다이어그램.
도 5는 다중 노드 컴퓨팅 시스템에서 판독 및 기록 요청을 처리하는데 사용되는 시퀀스 다이어그램의 다른 실시예의 일반화된 다이어그램.
도 6은 다중 노드 컴퓨팅 시스템에서 판독 및 기록 요청을 처리하는데 사용되는 시퀀스 다이어그램의 다른 실시예의 일반화된 다이어그램.
도 7은 다중 노드 컴퓨팅 시스템에서 판독 및 기록 요청을 처리하는데 사용되는 시퀀스 다이어그램의 다른 실시예의 일반화된 다이어그램.
도 8은 다중 노드 컴퓨팅 시스템에서 판독 및 기록 요청을 처리하는데 사용되는 시퀀스 다이어그램의 다른 실시예의 일반화된 다이어그램.
도 9는 다중 노드 컴퓨팅 시스템에서 일련의 판독 요청을 처리하기 위한 방법의 일 실시예의 일반화된 흐름도.
도 10은 예시적인 처리 노드의 일 실시예의 일반화된 다이어그램.
본 발명은 다양한 수정 및 대안적인 형태가 가능하지만, 특성 실시예가 도면에 예로서 도시되고 본 명세서에서 상세히 설명된다. 그러나, 도면 및 이에 대한 상세한 설명은 본 명세서에 개시된 특정 형태로 제한하려고 의도된 것이 아니고, 오히려 본 발명은 첨부된 청구 범위에 의해 한정된 본 발명의 범위 내에 있는 모든 변경, 등가물 및 대안을 포함하려고 의도된 것으로 이해되어야 한다.
이하의 설명에서, 본 발명의 완전한 이해를 제공하기 위해 다수의 특정 세부 사항이 제시된다. 그러나, 이 기술 분야에 통상의 지식을 가진 자라면 본 발명이 이러한 특정 세부 사항 없이 실시될 수 있다는 것을 인식할 수 있을 것이다. 일부 경우에, 잘 알려진 회로, 구조 및 기술은 본 발명을 모호하게 하는 것을 피하기 위해 상세하게 도시되지 않았다. 또한, 설명의 단순함 및 명료함을 위해, 도면에 도시된 요소들은 반드시 축척에 맞게 그려진 것은 아닌 것으로 이해된다. 예를 들어, 일부 구성 요소의 치수는 다른 구성 요소에 비해 과장되어 있다.
도 1을 참조하면, 컴퓨팅 시스템(100)의 일 실시예가 도시된다. 컴퓨팅 시스템(100)은 다중 처리 노드(110a 내지 110d)를 포함한다. 처리 노드(110a 내지 110d)는 또한 노드(110a 내지 110d)라고 지칭될 수 있다. 도 1에는 4개의 노드가 도시되어 있지만, 다른 실시예는 다른 수의 노드를 포함할 수 있고 각 노드는 하나 이상의 프로세서 코어 및 하나 이상의 대응하는 캐시 메모리 서브시스템을 포함할 수 있다.
각 노드(110a 내지 110d)는 해당 메모리(130a 내지 130d)에 연결된다. 처리 노드 내의 각 메모리 제어기(120a 내지 120d)는 처리 노드를 해당 메모리(130a 내지 130d)에 연결하는데 사용된다. 메모리 제어기(120a 내지 120d)는 메모리(130a 내지 130d)와 인터페이싱하기 위한 제어 회로를 포함한다. 추가적으로, 메모리 제어기(120a 내지 120d)는 메모리 요청을 큐잉하기 위한 요청 큐(request queue)를 포함한다. 메모리(130a 내지 130d)는 임의의 적합한 메모리 장치를 포함한다. 예를 들어, 다양한 실시예에서, 각 메모리(130a 내지 130d)는 하나 이상의 동적 랜덤 액세스 메모리(DRAM), 동기식 DRAM(SDRAM), 정적 RAM, 듀얼 인라인 메모리 모듈(DIMM), 하드 디스크, 솔리드-스테이트 드라이브 또는 그 밖의 다른 것을 포함한다.
컴퓨팅 시스템(100)의 어드레스 공간은 메모리(130a 내지 130d)들 간에 분할된다. 각 처리 노드(110a 내지 110d)는, 어느 어드레스가 메모리(130a 내지 130d) 중 어느 메모리에 매핑되는지, 및 그리하여 특정 어드레스에 대해 메모리 요청이 라우트되어야 하는 처리 노드(110a 내지 110d)가 어느 것인지를 결정하는데 사용되는 메모리 맵(memory map)을 포함한다. 다양한 실시예에서, 컴퓨팅 시스템(100) 내의 어드레스에 대한 일관성 지점은 어드레스에 대응하는 바이트를 저장하는 메모리(130a 내지 130d)들 중 하나의 메모리에 연결된 노드(110a 내지 110d)들 중 하나의 노드 내 메모리 제어기(120a 내지 120d)들 중 하나의 제어기이다. 그러나, 다른 실시예에서는, 다른 구성 요소가 일관성 지점으로서 동작하도록 구성될 수 있다.
각 처리 노드(110a 내지 110d)는 처리 노드(110a 내지 110d)들 중 다른 노드와 통신하기 위한 인터페이스 로직을 포함한다. 추가적으로, 각 처리 노드(110a 내지 110d)는 설명의 용이함을 위해 도시되지 않은 하나 이상의 입력/출력(I/O) 장치 및/또는 I/O 버스에 연결된다. 다양한 실시예에서, 컴퓨팅 시스템(100)은 노드 간 통신을 위한 패킷 기반 링크를 구현한다. 도시된 실시예에서, 링크는 노드(110a 내지 110d)들 간에 양방향 라인으로 도시된다. 다른 실시예에서, 노드(110a 내지 110d)들 중 하나 이상은 LAN, WAN, WiFi 연결, 이더넷, 광섬유 채널, 인터넷 또는 다른 것과 같은 네트워크를 통해 노드(110a 내지 110d)들 중 다른 노드에 연결된다.
링크를 통해 전송되는 패킷은 메시지, 커맨드, 요청 및 프로브를 포함한다. 노드(110a 내지 110d)들 사이의 링크는 캐시 일관된 방식으로 동작한다. 각 노드(110a 내지 110d)는 다른 노드(110a 내지 110d)들 중 다른 모든 노드에 직접 연결된 것으로 도시되어 있지만, 다른 실시예에서는 모든 다른 노드에 직접 연결된 것은 아닐 수 있다는 것이 주목된다. 이러한 실시예에서, 하나의 처리 노드로부터 다른 처리 노드로 전송되는 패킷은 하나 이상의 중간 노드를 통과한다. 컴퓨팅 시스템(100)은 패킷을 전송하기 위한 임의의 적절한 흐름 제어 메커니즘 및 알고리즘을 사용한다.
다양한 실시예에서, 각 노드(110a 내지 110d) 내 하나 이상의 프로세서는 데이터를 요청하는 프로세서의 대기 시간을 감소시키기 위해 하나 이상의 캐시 계층 레벨에 연결된다. 일반적으로 말하면, 캐시는 하나 이상의 데이터 블록을 저장하며, 각 데이터 블록은 시스템 메모리의 대응하는 어드레스에 저장된 데이터에 대응한다. 본 명세서에서 사용된 "블록"은 일관성 목적을 위한 단위로 취급되는 연속하는 메모리 위치들에 저장된 바이트 세트이다. 일부 실시예에서, 블록은 캐시에 할당하고 할당 해제하는 단위이다. 블록의 바이트 수는 설계 선택에 따라 변한다. 예를 들어, 32 바이트와 64 바이트 블록이 자주 사용된다. 본 명세서에 사용된 바와 같이, 데이터 블록, 캐시 라인 및 캐시 블록이라는 용어는 다양한 실시예의 이하의 설명에서 상호 교환 가능하게 사용된다.
컴퓨팅 시스템(100)의 어드레스 공간이 메모리(130a 내지 130d)들 간에 분할됨에 따라, 주어진 데이터 블록의 어드레스는 노드(110a 내지 110d)들 중 특정 노드에 매핑된다. 이 특정 노드는 주어진 데이터 블록에 대해 "홈" 노드로 간주된다. 주어진 데이터 블록의 유효한 사본이 노드(110a 내지 110d)들 중 다른 노드에서 수정된(modified)(M), 독점적인(exclusive)(E) 또는 소유된(owned)(O) 일관성 상태로 저장될 때, 이 다른 노드는 "소유자(owner)" 노드라고 지칭된다. 예를 들어, 주어진 블록의 어드레스는 노드(110a)에 매핑되어 노드(110a)를 주어진 블록에 대해 홈 노드로 만든다. 그러나, 노드(110b)가 주어진 블록의 독점적인 사본을 요청하고, 요청된 사본을 수신하고, 주어진 블록의 사본을 메모리(130b)에 저장하는 경우, 노드(110b)는 주어진 블록에 대해 소유자 노드이다.
다양한 실시예에서, 노드(110a 내지 110d)의 프로세서에 의해 수행되는 작업은 하나 이상의 프로세스에 대응하고 각 프로세스는 하나 이상의 스레드로 구성된다. 다양한 실시예에서, 컴퓨팅 시스템(100)의 링크를 통해 송신된 패킷은 데이터 블록에 대한 액세스를 동기화하는데 사용된다.
다양한 실시예에서, 잠금의 지시(예를 들어, 데이터 블록이 현재 잠겨 있거나 또는 잠겨 있지 않다는 지시)는 데이터 블록의 데이터 내에 저장된다. 일부 실시예에서, 잠금의 지시는 데이터 블록의 데이터 내의 단일 비트이다. 다른 실시예에서, 잠금의 지시는 데이터 블록의 데이터 내의 바이트이다. 예를 들어, 일 실시예에서 바이트는 테스트-및-설정 명령 유형과 함께 사용된다. 데이터 블록의 데이터 내에 잠금의 지시를 위한 다른 데이터 크기도 가능하고 고려된다. 일부 실시예에서, 잠금의 소유자의 지시는 또한 데이터 블록의 데이터 내에 저장된다. 다른 실시예에서, 소프트웨어 메커니즘은 주어진 블록 내의 데이터로부터 외부에서 잠금의 소유자를 결정한다. 예를 들어, 소프트웨어 메커니즘은 다른 곳에 저장된 스레드 식별자(ID)를 사용하여 잠금의 소유자를 결정한다.
전술한 바와 같이, 주어진 블록은 원래 홈 노드에 할당된다. 일 실시예에서, 노드(110a)는 컴퓨팅 시스템(100) 내의 주어진 블록에 대해 홈 노드이다. 나중에, 노드(110b)는 노드(110a)로부터 주어진 블록을 요청한다. 일부 실시예에서, 노드(110b)로부터의 요청은 캐시 일관성 프로토콜에 따라 주어진 블록에 대해 요청된 캐시 일관성 상태의 지시를 포함한다.
다양한 실시예에서, MOESI 캐시 일관성 프로토콜은 컴퓨팅 시스템(100)에서 사용된다. 이러한 실시예에서, 컴퓨팅 시스템(100)의 각 캐시 라인은 5개의 캐시 일관성 상태 중 하나의 상태에 있다. 5개의 상태는 수정된(M) 상태를 포함하는데, 이 상태는 캐시 라인의 사본을 저장하는 캐시가 캐시 라인의 유효한 사본만을 갖고 사본에 변경이 있었음을 나타낸다. 소유된(O) 상태는, 캐시 라인의 사본을 저장하는 캐시가 캐시 라인의 유효한 사본을 갖는 다수의 캐시 중 하나이지만 캐시가 캐시 라인의 사본을 변경할 독점적인 권리를 갖는 것을 나타낸다. 독점적인(E) 상태는 캐시 라인의 사본을 저장하는 캐시가 캐시 라인의 유효한 사본만을 갖고 사본에 변경이 없다는 것을 나타낸다. 공유된(S) 상태는 캐시 라인의 사본을 저장하는 캐시가 캐시 라인의 유효한 사본을 가진 다수의 캐시 중 하나이지만 이 캐시가 이 사본을 수정할 수 있는 권한이 없다는 것을 나타낸다. 무효된(I) 상태는 캐시가 캐시 라인의 유효한 사본을 저장하지 않는다는 것을 나타낸다.
다른 실시예에서, 다른 캐시 일관성 프로토콜이 컴퓨팅 시스템(100)에 사용된다. 예를 들어, MSI, MESI, MESIF 및 MOESIF 캐시 일관성 프로토콜이 컴퓨팅 시스템(100)에 사용된다. MESIF 및 MOESIF 프로토콜은 캐시 라인의 사본을 저장하는 캐시가 주어진 라인에 대한 임의의 요청에 대해 지정된 응답자로서 작동하는 것을 나타내기 위해 포워드(Forward: F) 상태를 사용한다. 프로토콜은, 임의의 캐시가 공유된(S) 상태의 캐시 라인을 보유하고 있다면, 많아야 하나의 다른 캐시가 캐시 라인을 포워드(F) 상태로 보유하는 것을 보장한다. 캐시 일관성 프로토콜에서 소유된(O) 상태를 사용하지 않는 실시예에서, 공유된(S) 상태는 주어진 블록에 대해 사용된다. 일반적으로 말하면, 본 명세서에 설명된 방법 및 메커니즘은 임의의 특정 캐시 일관성 프로토콜로 제한되지 않는다.
도 1에 도시된 바와 같이, 주어진 블록 내의 데이터는 잠금의 지시("L")를 포함한다. 본 명세서에서 사용된 바와 같이, 주어진 블록의 데이터 내에 잠금을 설정하는 것은, 주어진 블록의 데이터 내의 잠금 비트를 선언(assert)하는 것, 주어진 블록의 데이터 내의 잠금을 나타내는데 사용되는 바이트를 설정된 잠금 또는 잠긴 상태를 나타내는 값으로 변경하는 것 등을 지칭한다. 유사하게, 주어진 블록의 데이터 내에서 잠금을 리셋하는 것은 주어진 블록의 데이터 내의 잠금 비트를 선언 해제(de-asserting)하는 것, 주어진 블록의 데이터 내의 잠금을 나타내는 데 사용되는 바이트를 리셋된 잠금 또는 잠금 해제된 상태를 나타내는 값으로 수정하는 것 등을 지칭한다.
잠금의 지시가 주어진 블록 자체의 데이터 내에 있기 때문에, 데이터를 판독하는 것은 또한 데이터가 잠겨 있는지 여부에 관한 지시를 포함한다. 그리하여, 주어진 블록의 데이터는 잠금의 지시를 판독하기 위해 판독된다. 다시 말해, 주어진 블록의 데이터를 판독하는 것은 주어진 블록의 데이터 내의 잠금의 지시를 검사, 체크 또는 판독하기 위해 수행된다. 노드 내의 프로세서가 주어진 블록의 데이터 내에서 잠금을 설정하거나 리셋하는 경우, 노드가 다른 노드로부터의 외부 프로브 또는 다른 판독 요청을 처리하기 전에 수정하는 동작이 완료되는 것이 보장된다는 것이 주목된다. 주어진 블록 내의 데이터의 내부 수정과 외부 프로브 요청 사이를 정렬하면 라이브 잠금 상황이 방지된다.
다양한 실시예에서, 잠금을 설정하거나 리셋하기 위해 특별한 명령이 포함되지 않을 수 있다. 오히려, 잠금을 설정하거나 리셋하는 것은 주어진 블록 내의 데이터를 수정할 (또는 수정할 권한을 얻는) 요청을 사용하는 것에 응답하여 수행된다. 이러한 요청은 기록 요청, 요청을 수정할 의도를 갖는 판독 등을 포함한다. 그 결과, 이러한 실시예에서, 기록 요청 또는 요청을 수정할 의도를 갖는 판독은 "잠금 요청"인 것으로 간주된다. 다른 실시예에서, 잠금을 설정하거나 리셋하기 위해 특별한 명령이 포함될 수 있다. 주어진 실시예에서는 어느 하나도 가능하고 및/또는 둘 모두도 가능하다.
일부 실시예에서, 노드(110b)로부터 주어진 블록을 요청하는 경우, 요청은 일관성 프로토콜의 수정된(M) 상태에 있는 주어진 블록의 사본을 수신하라는 요청을 (명시적으로 또는 암시적으로) 나타낸다. 도시된 바와 같이, 데이터의 주어진 블록은 소유자 노드(노드(110b))의 로컬 캐시(local cache)(150)에 저장된다. 도시된 바와 같이, 데이터 블록은 "값"으로 지시된 데이터 값 및 잠금 지시 "L"을 포함한다. 이 실시예에서, 잠금의 지시는 주어진 블록의 데이터 내에 있다. 하나의 시나리오에서, 소유자 노드(노드(110b))는 잠금을 리셋(해제)할 준비가 되어 있으며, 이것이 주어진 블록에 대해 독점적인 액세스를 요청한 이유이다. 이전에 기술된 바와 같이, 잠금을 리셋하는 것은 주어진 블록의 데이터 내의 잠금 비트를 선언 해제하는 것, 주어진 블록의 데이터 내의 잠금을 나타내는 데 사용된 바이트를 리셋된 잠금 또는 잠겨 있지 않은 상태 등을 나타내는 값으로 수정하는 것 또는 다른 것을 포함한다.
주어진 시나리오에서, 주어진 블록에 대한 홈 노드(노드(110a))는 주어진 블록이 다른 노드에 의해 소유되는 시간에 주어진 블록에 액세스하라는 하나 이상의 요청을 수신한다. 다양한 실시예에서, 액세스하라는 요청은 명시적으로 또는 암시적으로 잠금 획득 요청이다. 수신된 잠금 획득 요청에 응답하여, 홈 노드(노드(110a))는 소유자 노드(노드(110b))가 주어진 블록의 사본을 홈 노드로 리턴할 것을 요청하도록 구성된다. 홈 노드(노드(110a))는 주어진 블록의 리턴된 사본을 저장하기 위해 포워딩 버퍼(160)에 항목(entry)을 할당한다. 도시된 바와 같이, 포워딩 버퍼(160)는 데이터 값 "값"의 사본 및 잠금의 지시 "L"의 사본을 포함하는 데이터의 사본을 포함한다. 홈 노드(노드(110a))는 포워딩 버퍼(160) 내의 데이터의 사본을 주어진 블록에 액세스를 요청하는 각 노드로 포워딩한다.
이제 도 2를 참조하면, 주어진 데이터 블록이 다른 노드(노드 1)(110b))에 의해 현재 소유될 때 홈 노드(110a)가 노드로부터 주어진 데이터 블록에 대한 판독 요청을 수신하는 것을 나타내는 일반화된 시퀀스 다이어그램의 일 실시예가 도시된다. 도시된 예에서, 앞서 설명한 회로 및 로직에는 동일한 번호가 매겨져 있다. 예를 들어, 노드(110a 내지 110d)가 다시 도시된다. 유사하게, 노드(110c)는 노드(2)로 도시되고 노드(110d)는 노드(3)로 도시된다. 노드(110a)는 홈 노드라고 지칭된다. 본 명세서에서 제공되는 시퀀스 다이어그램은 설명의 편의를 위해 제공된 것일 뿐, 이벤트의 엄격한 순서를 나타내기 위해 의도된 것이 아니라는 것이 주목된다. 오히려 일부 이벤트는 동시에 발생할 수 있고 다른 순서로 발생할 수 있다.
시간(t0)에서, 홈 노드는 잠금 요청으로서 취급되는, 노드(2)(110c)로부터의 판독 요청을 수신한다. 판독 요청은 주어진 데이터 블록에 대응하는 어드레스를 나타낸다. 홈 노드는 노드(110b)가 요청된 데이터 블록의 현재 소유자인 시간(t0)에서 판독 요청을 수신한다. 예를 들어, 소유자 노드(노드(1))는 로컬 캐시에 저장된 주어진 데이터 블록의 사본을 갖고 또한 블록에 대한 캐시 일관성 상태의 저장된 지시를 갖는다.
시간(t0)에서 요청을 수신한 것에 응답하여, 홈 노드는 노드(1)가 요청된 블록의 현재 소유자 노드인지를 결정하기 위해 디렉토리(directory) 유형 데이터 구조를 서치(search)한다. 또한, 홈 노드는 주어진 데이터 블록에 대한 수신된 판독 요청의 카운트를 유지하고, 요청에 응답하여 카운트를 증분시킨다. 다양한 실시예에서, 주어진 데이터 블록에 대한 판독 요청이 이 주어진 데이터 블록에 대한 이전의 보류(pending) 판독 요청과 히트(hit)할 때, 홈 노드는 주어진 데이터 블록에 대한 판독 요청의 카운트를 증분시킨다. 판독 요청이 수신되고 카운트가 주어진 임계값에 도달하지 않은 경우, 홈 노드는 어느 노드가 현재 소유자이고 소유자 노드에 커맨드를 송신하는 노드인지를 결정함으로써 수신된 요청을 처리한다. 커맨드는 주어진 데이터 블록의 사본을 요청 노드(2)에 송신할 것을 소유자 노드에 지시한다. 이와 달리, 판독 요청이 수신되고 카운트가 임계값에 도달하면(또는 임계값에 도달하였다면), 홈 노드는 주어진 데이터 블록에 대한 요청을 다른 방식으로 처리한다. 예를 들어, 소유자 노드가 주어진 데이터 블록의 사본을 요청 노드(2)로 포워딩하는 것이 아니라, 홈 노드 자체가 주어진 데이터 블록의 사본을 로컬 포워딩 버퍼로부터 요청 노드(2)로 송신할 수 있다.
아래에서 더 상세히 설명되는 바와 같이, 홈 노드가 자신의 로컬 포워딩 버퍼에 주어진 데이터 블록의 사본을 저장하기 위해서, 홈 노드는 먼저 소유자 노드로부터 주어진 데이터 블록의 사본을 요청한다. 일부 실시예에서, 홈 노드에 의해 유지되는 카운트가 주어진 임계값에 도달할 때, 홈 노드는 주어진 임계값에 도달한 것을 나타내는 지시를 저장한다. 예를 들어, 저장된 지시는 주어진 데이터 블록에 대한 수신된 판독 요청을 처리하는데 다른 모드가 사용될 것임을 나타내는 플래그(flag)(예를 들어, 모드 지시자(mode indicator))이다. 다른 실시예에서, 홈 노드는 요청이 수신될 때마다 간단히 카운트를 체크하여 주어진 임계값에 도달했는지 여부를 결정한다. 이러한 실시예에서, 카운트 자체와 임계값을 비교하여 모드를 결정한다. 일부 실시예에서, 홈 노드는 주어진 데이터 블록에 대한 기록 요청 또는 잠금 해제 요청이 수신될 때 카운트를 리셋한다. 도 2에 도시된 예에서, 주어진 데이터 블록에 대한 카운트는 시간(t0)에서 판독 블록 요청을 수신할 때 주어진 임계값에 도달하였다. 홈 노드는 또한 이전의 포워딩 버퍼(160)와 같은 포워딩 버퍼를 서치하여, 포워딩 버퍼가 요청된 데이터 블록의 사본을 갖는지 여부를 결정하도록 구성된다. 일부 실시예에서, 홈 노드는 디렉토리를 서치하기 전에 포워딩 버퍼를 먼저 서치한다.
시간(t1)에서, 홈 노드는 주어진 데이터 블록의 사본을 홈 노드에 송신하도록 소유자 노드에 지시하는 커맨드를 소유자 노드에 송신한다. 또한, 홈 노드로부터 송신된 커맨드는 데이터 블록의 사본에 대해 "소유된"이라는 캐시 일관성 상태를 저장하도록 소유자 노드에 지시한다.
시간(t2)에서, 소유자 노드는 주어진 데이터 블록의 사본을 홈 노드에 송신한다. 이 경우, 소유자 노드는 데이터 블록의 사본을 요청 노드인 노드(2)에 송신하지 않는다. 시간(t3)에서, 홈 노드는 주어진 데이터 블록의 사본을 수신하고 이를 포워딩 버퍼(예를 들어, 이전에 설명된 포워딩 버퍼(160))에 저장한다. 포워딩 버퍼는 다양한 저장 위치 중 임의의 저장 위치일 수 있음이 주목된다. 예를 들어, 일 실시예에서 포워딩 버퍼는 포워딩을 위해 값을 저장하도록 할당된 캐시의 일부이다. 대안적으로, 다른 실시예에서, 포워딩 버퍼는 포워딩을 위해 값을 저장하도록 할당된 레지스터의 세트이다. 또한, 포워딩 버퍼는 RAM(random access memory) 데이터 구조, CAM(content addressable memory) 데이터 구조 등으로 구현될 수 있다. 일부 실시예에서, 주어진 데이터 블록은 이전의 메모리(130a)와 같은 시스템 메모리에 아직 되 기록되지 않는다. 다른 실시예에서, 주어진 데이터 블록은 시스템 메모리에 되 기록되는 반면, 사본은 포워딩 버퍼에 남아 있다.
시간(t4)에서, 홈 노드는 수신된 데이터 블록의 사본을 노드(2)에 송신한다. 시간(t5)에서, 노드(2)는 캐시 일관성 프로토콜(예를 들어, MOESI)의 공유된(S) 일관성 상태로 (예를 들어, 그 로컬 캐시 중 하나의 캐시에) 주어진 데이터 블록의 사본을 저장한다. 시간(t6)에서, 노드(2)는 주어진 데이터 블록의 데이터를 검사하고 잠금 비트가 리셋된 것(즉, 데이터가 잠겨 있지 않은 것)을 발견한다. 따라서 주어진 데이터 블록은 잠겨지는데 이용 가능하다. 노드(2)는 주어진 데이터 블록의 데이터를 수정하여 잠금을 설정한다. 전술한 바와 같이, 일부 실시예에서, 잠금을 설정하는 것은 주어진 블록의 데이터 내에 잠금 비트를 선언하는 것을 포함한다. 대안적으로, 다른 실시예에서, 잠금을 설정하는 것은 설정된 잠금을 나타내기 위해 주어진 블록의 데이터 내의 잠금 바이트를 수정하는 것을 포함한다. 주어진 데이터 블록은 이제 잠긴 것으로 간주된다.
시간(t7)에서, 노드(3)는 데이터 블록에 대한 판독 요청을 홈 노드에 송신한다. 다시, 홈 노드는 요청을 수신하고, 홈 노드가 주어진 데이터 블록을 현재 소유하고 있는 것이 아니라, 소유자 노드가 주어진 데이터 블록을 현재 소유하고 있다고 결정한다. 시간(t8)에서, 홈 노드는 주어진 데이터 블록의 사본을 포워딩 버퍼로부터 주어진 데이터 블록을 요청한 노드(3)로 송신한다. 시간(t9)에서, 노드(3)는 주어진 데이터 블록의 사본을 공유된(S) 일관성 상태로 로컬 캐시 중 하나의 캐시에 저장한다. 시간(t10)에서, 노드(3)는 주어진 데이터 블록의 데이터를 검사하고, 잠금 비트가 설정된 것을 발견한다. 노드(3)는 주어진 데이터 블록이 잠긴 동안 주어진 데이터 블록을 사용할 수 없다. 따라서 노드(3)는 주어진 데이터 블록을 사용하기를 기다리는 동안 주기적으로 주어진 데이터 블록의 데이터를 대기하고 다시 체크한다. 다양한 실시예에서, 노드는 데이터 블록이 로컬 캐시에 저장되기 전에 데이터의 잠금 비트를 검사한다는 것이 주목된다.
하나 이상의 추가적인 노드가 주어진 데이터 블록에 대한 홈 노드에 요청(잠금 판독 요청 또는 간단히 판독 요청)을 송신하면, 홈 노드는 이 블록의 사본을 포워딩 버퍼로부터 각 요청자에게 전달한다. 그리하여, 홈 노드는 수신된 요청과 관련된 소유자 노드와 통신하지 않는다. 나중에, 소유자 노드는 주어진 데이터 블록을 홈 노드에 다시 기록하고, 소유자 노드에 저장된 사본을 무효화한다.
전술한 바와 같이, 액세스 요청의 카운트는 홈 노드에 의해 유지된다. 다양한 실시예에서, 주어진 데이터 블록에 대응하는 기록 요청 또는 잠금 해제 요청이 홈 노드에서 수신될 때 주어진 데이터 블록에 대한 판독 요청의 카운트가 리셋된다. 또한, 소유자 노드는, 주어진 데이터 블록을 홈 노드로 리턴하는 동작이 아직 발생하지 않은 경우, 홈 노드가 임의의 요청된 수정을 수행하고, 업데이트된 주어진 데이터 블록의 사본을 그 시스템 메모리에, 예를 들어, 컴퓨팅 시스템(100)의 앞선 메모리(130a)에 저장하도록, 주어진 데이터 블록을 홈 노드로 리턴하도록 지시된다.
다음에 도 3을 참조하면, 메모리 제어기(200)의 일 실시예가 도시된다. 메모리 제어기(200)는 다수의 소스로부터, 예를 들어, 홈 노드 이외의 노드로부터 다수의 스레드로부터 동일한 주어진 어드레스에 대한 일련의 판독 요청을 처리하기 위한 전술한 시퀀스 단계들을 구현하는데 사용된다. 예를 들어, 메모리 제어기(200)는 특정 조건이 만족될 때 주어진 블록을 포워딩 버퍼에 저장하는데 사용된다. 또한, 메모리 제어기(200)는, 주어진 블록의 사본을 요청 노드에 포워딩하도록 소유자 노드에 지시하는 것이 아니라, 주어진 블록을 포워딩 버퍼로부터 직접 요청 노드로 송신한다. 홈 노드로부터 직접 포워딩하면 주어진 블록의 사본을 요청 노드에 송신하는 데 사용되는 홉(hop) 또는 중간 노드의 수를 줄일 수 있다.
도 3의 실시예에서, 메모리 제어기(200)는 패킷 인터페이스(210), 요청 큐(220), 메모리 액세스 제어 로직(230), 일관성 제어 로직(240), 카운터(242) 및 포워딩 버퍼(250)를 포함한다. 패킷 인터페이스(210)는 네트워크 또는 다른 인터페이스를 통해 다른 노드로부터 커맨드 패킷을 수신한다. 일부 실시예에서, 패킷 인터페이스(210)는 다른 노드와 통신하는데 사용되는 네트워크 인터페이스 또는 다른 인터페이스 내에 포함된다.
패킷 인터페이스(210)는 수신된 커맨드 패킷을 요청 큐(220)에 송신하도록 결합된다. 커맨드 패킷에 의해 지시된 어드레스가 메모리 제어기(200)와 관련된 메모리의 메모리 위치에 대응하는 경우 커맨드 패킷은 메모리 제어기(200)로 라우팅된다. 다시 말해, 커맨드 패킷의 어드레스가 메모리 제어기(200)에 연결된 메모리에 저장된 블록을 어드레싱하면, 커맨드 패킷은 메모리 제어기(200)로 라우팅된다. 응답 패킷은 요청 큐(220)에 저장된 각각의 패킷이 처리되면 준비된다. 이러한 경우에, 패킷 인터페이스(210)는 또한 응답 패킷을 다른 노드로 송신한다.
수신된 경우 메모리 제어기(200)는 커맨드 패킷 정보를 요청 큐(220)에 큐잉한 후, 그 커맨드를 처리한다. 패킷을 수신한 것에 응답하여, 요청 큐(220)에서 이용 가능한 항목이 수신된 패킷에 할당된다. 도시된 바와 같이, 각각의 항목은 노드 식별자(ID), 스레드 ID, 커맨드의 지시, 커맨드에 대응하는 어드레스, 연대(age)의 지시(예를 들어, 수신된 시간) 및 상태 정보 중 하나 이상을 저장한다.
요청 큐(220) 내의 상태 정보는 데이터 크기, 유효 항목의 지시, 커맨드에 대한 우선 순위 레벨, 대응하는 커맨드에 대한 결과 데이터를 저장하기 위한 필드, 결과 데이터를 저장하는 또 다른 큐 내 위치를 식별하는 포인터, 커맨드가 성공적으로 처리되었는지 여부를 나타내는 지시 등을 포함한다. 요청 큐(220)의 항목 내의 필드가 특정 순서 및 연속하는 방식으로 저장된 것으로 도시되어 있지만, 저장 배열의 다른 조합도 가능하고 고려된다.
일부 실시예에서, 모든 커맨드 패킷은 수신된 순서로 처리된다. 다른 실시예에서, 동일한 어드레스로 보내지는 커맨드 패킷에 대해 패킷의 순차 처리가 요구된다. 이러한 경우에, 다른 어드레스로 보내지는 패킷은 이 패킷에 대해 순서 없이 처리될 수 있다. 또 다른 실시예에서, 커맨드 패킷은 우선 순위 레벨, 커맨드 유형, 타임스탬프(timestamp) 또는 큐 내의 위치와 같은 연대의 지시, 어드레스, 데이터 크기, 스레드 ID, 노드 ID 등 중 하나 이상에 의해 결정된 순서로 처리될 수 있다.
메모리 액세스 제어 로직(230)은 요청 큐(220) 및 메모리 제어기에 연결된 메모리의 각각과 인터페이싱하는 논리 및 저장 레지스터들을 포함한다. 예를 들어, 메모리 제어기(200)가 전술한 노드(110a)에 대한 메모리 제어기(120a)인 경우, 이 메모리는 메모리(130a)이다. 메모리 액세스 제어 로직(230)은 연관된 일관성 동작들이 전송되고 임의의 응답이 다른 노드로부터 수신된 후에 커맨드를 수행한다. 커맨드가 판독 동작인 경우, 데이터는, 패킷 인터페이스(210), 요청 큐(220), 특정 조건이 만족될 때 포워딩 버퍼(250), 또는 결과 데이터를 저장하도록 지정된 다른 큐(도시되지 않음) 중 하나에 응답 패킷으로 저장되기 위해 메모리로부터 리턴된다. 메모리 액세스 제어 로직(230) 내의 로직은 하드웨어, 펌웨어와 같은 소프트웨어 또는 이들의 조합으로 구현된다는 것이 주목된다.
일관성 제어 로직(240)은 요청 큐(220), 프로브를 다른 노드로 보내는데 사용되는 임의의 디렉토리 유형 구조, 관련된 노드를 위한 캐시 메모리 서브시스템, 및 포워딩 버퍼(250)의 각각과 인터페이싱하는 논리 및 저장 레지스터를 포함한다. 메모리 액세스 제어 로직(230)과 유사하게, 일관성 제어 로직(240) 내의 임의의 로직은 하드웨어, 펌웨어와 같은 소프트웨어 또는 이들의 조합으로 구현된다.
일관성 제어 로직(240)은 요청 큐(220)에 저장된 커맨드 패킷이 캐시 일관성 프로토콜에 따라 일관된 방식으로 처리되는 것을 보장하도록 구성된다. 주어진 커맨드에 대해 프로브가 필요한 경우, 일관성 제어 로직(240)은 대응하는 지시를 패킷 인터페이스(210)에 전송한다. 예를 들어, 지시는 대응하는 커맨드의 소스 노드, 어드레스, 커맨드 유형 및 다른 정보를 포함한다. 패킷 인터페이스(210)는 일관성 제어 로직(240)으로부터 프로브의 지시를 수신한 것에 응답하여 프로브 커맨드를 전송한다. 일관성 제어 로직(240)은 대응하는 트랜잭션이 패킷 인터페이스(210)로부터 완료된 것을 나타내는 패킷을 더 수신하고, 기록 커맨드에 대한 프로브 응답을 수신한다.
전술한 바와 같이, 다양한 실시예에서, 노드는, 어느 어드레스가 어느 시스템 메모리에 매핑되는지, 및 그리하여 특정 어드레스에 대해 메모리 요청이 라우팅되어야 하는 컴퓨팅 시스템 내의 노드가 어느 것인지를 결정하는데 사용되는 디렉토리를 포함한다. 디렉토리는 다수의 항목을 포함하거나, 메모리 맵을 포함하거나, 메모리 맵과 함께 사용된다. 주어진 블록에 대해 디렉토리 내에 할당된 항목은 메모리 내의 주어진 블록이 캐시에 저장된 사본을 가지고 있음을 나타낸다. 캐시는 동일한 노드 또는 다른 노드에 있다. 디렉토리 내에 할당된 항목은 주어진 블록의 소유자, 주어진 모드에서 블록이 수정되는지 여부, 및/또는 주어진 블록의 공유된 사본을 갖는 노드와 같은, 주어진 블록의 캐시 일관성 상태를 나타낸다.
다양한 실시예에서, 디렉토리 및 공유된(S) 일관성 상태에서 할당된 항목을 갖는 주어진 블록에 대응하는 판독 동작은 주어진 블록의 다른 사본을 무효화하기 위해 프로브 커맨드를 요구하지 않는다. 그러나, 공유된(S) 일관성 상태를 갖는 주어진 블록의 기록 동작은 다른 처리 노드에서 다른 사본의 무효화를 야기하는 프로브 커맨드를 요구할 수 있다. 그리하여, 디렉토리 및 일관성 제어 로직(240)은 이 시나리오를 검출하고 패킷 인터페이스(210)를 통해 송신할 적절한 프로브(들)를 생성하도록 구성된다. 디렉토리에서 할당된 항목을 갖는 주어진 블록의 일관성 상태에서 판독 및 기록 동작을 하는 다른 시나리오도 가능하고 고려된다. 일부 실시예에서, 디렉토리에 할당된 항목이 없다는 것은 주어진 블록이 디렉토리와 동일한 노드 내의 캐시에 저장되지 않는 것을 의미한다.
도시된 바와 같이, 일관성 제어 로직(240)은 하나 이상의 카운터(242)를 포함한다. 다양한 실시예에서, 카운터(242)는 0으로 리셋되고, 요청 큐(220)에 저장된 수신된 판독 요청에 대응하는 주어진 어드레스에 할당된다. 카운터(242)들 중 할당된 카운터는 주어진 어드레스에 대한 각각의 후속 판독 요청에 대해 증분된다. 예를 들어, 요청 큐(220)에 제시된 제2 항목은 어드레스(0x100)에 대한 잠금 판독 요청을 저장한다. 어드레스에서 "0x"는 16 진수 값을 나타낸다. 도시된 바와 같이, 잠금 판독 요청은 스레드(58)가 노드(2)에서 처리된 것으로부터 온다. 요청 큐(220) 내 제3 항목은 또한 어드레스(0x100)에 대한 잠금 판독 요청을 저장한다. 이 후속 판독 요청은 스레드(14)가 노드(3)에서 처리된 것으로부터 온다.
일부 실시예에서, 어드레스(0x100)에 할당된 카운터(242)의 주어진 카운터는 노드(2)로부터의 제2 판독 요청이 수신될 때 증분된다. 어드레스(0x100)에 대한 각 후속 판독 요청마다 카운터가 증분된다. 어드레스(0x100)에 대한 기록 요청 또는 잠금 해제 요청이 수신될 때 카운터는 어드레스(0x100)에 대해 리셋되거나 및/또는 무효화된다. 예를 들어, 요청 큐(220)의 제1 항목에서 제1 판독 요청은 잠금을 해제하라는 독점적인 판독 요청이다. 어드레스(0x100)에 대한 카운터는 이 판독 요청을 검출한 것에 응답하여 리셋된다. 요청 큐(220)의 제2 항목에서 제2 판독 요청이 어드레스(0x100)에 대해 검출될 때, 카운터는 어드레스(0x100)에 할당되고 0으로 설정되거나 1로 증분된다.
요청 큐(220)의 제3 항목에서 제3 요청이 어드레스(0x100)에 대해 검출될 때, 카운터(242)의 할당된 카운터가 증분된다. 어드레스(0x100)에 대한 각 후속 판독 요청 또는 잠금 판독 요청은 할당된 카운터를 증분시킨다. 일부 실시예에서, 카운터는 비-중복 카운터이다.
요청 큐(220)에 제시된 마지막 항목의 판독 요청은 잠금을 해제하라는 또 다른 독점적인 판독 요청이다. 어드레스(0x100)에 대한 카운터는 이 판독 요청을 검출한 것에 응답하여 리셋된다. 이 특정 판독 요청에 도달하기 전에, 카운터(242)의 할당된 카운터는 비교적 높은 수에 도달했다. 예를 들어, 64개만큼 많은 스레드가 어드레스(0x100)에 대응하는 메모리 제어기(200)에 판독 요청 또는 잠금 판독 요청을 송신하였을 수 있다. 주어진 카운터가 임계값을 초과하면, 메모리 제어기(200)는 위의 예에서 어드레스(0x100)와 같은 할당된 어드레스에 대응하는 판독 요청의 처리를 변경한다. 다양한 실시예에서, 임계값은 프로그래밍 가능한 값이다. 카운터가 임계값을 초과하면, 메모리 제어기(200)는 앞서 도 2에서 설명한 전술한 시퀀스 단계들을 사용한다. 예를 들어, 노드의 메모리 제어기(200)는 어드레스(0x100)에 대응하는 블록의 사본을 포워딩 버퍼(250)에 저장한다. 포워딩 버퍼(250)는 다수의 항목을 포함한다. 포워딩 버퍼 내의 각각의 항목은 어드레스의 지시, 블록의 데이터를 저장하는 다른 큐 내의 위치를 식별하는 어드레스 또는 포인터에 대응하는 블록의 사본, 및 상태 정보 중 하나 이상을 포함한다. 상태 정보는 유효 항목의 지시, 데이터에 대한 우선 순위 레벨 등 중 하나 이상을 포함한다. 어드레스에 대응하는 블록의 사본이 포워딩 버퍼(250)의 항목에 저장되면, 블록 내의 데이터는 또한 잠금의 지시를 포함한다. 지시는 항목에서 "L"로 표시된다.
메모리 제어기(200)는 디렉토리를 사용하여 주어진 블록의 사본이 홈 노드 또는 다른 노드에 있는지를 결정한다. 이 결정에 기초하여, 메모리 제어기(200)는 메모리 제어기(200)에 연결된 시스템 메모리로부터 또는 다른 노드로부터 포워딩 버퍼에 항목을 할당한다. 다른 노드가 포워딩 버퍼를 채우기 위해 사용되는 경우, 일부 실시예에서, 다른 노드는 주어진 블록의 캐시된 사본의 일관성 상태를 소유된(O) 일관성 상태로 변경하도록 지시된다. 판독 요청 및 잠금 판독 요청이 수신되어 요청 큐(220)에 저장될 때, 이들 요청은 포워딩 버퍼(250)로부터 직접 서비스된다. 요청 노드는 각각의 캐시 메모리 서브시스템에 공유된(S) 일관성 상태로 포워딩 버퍼(250)로부터 주어진 블록의 사본을 설치하도록 지시된다.
이제 도 4를 참조하면, 홈 노드에 대한 다수의 판독 요청을 처리하는데 사용되는 시퀀스 다이어그램의 다른 실시예를 나타내는 일반화된 블록도가 도시되어 있다. 앞서 설명한 회로 및 로직에는 동일한 번호가 매겨져 있다. 도시된 바와 같이, 노드(1)가 주어진 블록을 이전에 소유하고 주어진 블록을 잠글 때 단계의 시퀀스가 사용되지만 이제 노드(1)는, 잠긴 상태에서 주어진 블록을 사용하고 주어진 블록에 대해 잠금을 해제할 준비가 된 동작으로 종료한다. 시간(t0)에서, 노드(1)는 홈 노드에 요청을 송신한다. 요청은 주어진 블록에 독점적으로 액세스하라는 판독 요청이다. 독점적인 액세스는 노드(1)가 주어진 블록 내의 데이터를 수정하고 잠금을 리셋하게 한다.
시간(t1)에서, 홈 노드는 주어진 블록에 대한 별도의 소유자가 없다고 결정한다. 예를 들어, 홈 노드는 디렉토리를 서치하고 주어진 블록의 어드레스에 할당된 항목을 찾지 못했다면, 이는 주어진 블록이 소유된 상태로 로컬 캐시 또는 원격 캐시에 저장되지 않았음을 나타낸다. 대안적으로, 홈 노드가 디렉토리에서 할당된 항목을 찾을 수 있다면 이는 주어진 블록의 하나 이상의 사본이 공유된(S) 일관성 상태로 다른 노드의 캐시에 저장되어 있음을 나타낸다. 그 결과, 시간(t2 내지 t3)에서, 홈 노드는 주어진 블록의 사본을 얻기 위해 DRAM 또는 다른 것과 같은 메모리에 액세스한다.
다른 예에서, 주어진 블록의 사본이 소유된(O) 또는 독점적인(E) 일관성 상태로 다른 노드에 있다고 홈 노드가 결정하고, 주어진 데이터 블록에 대한 판독 요청의 카운트가 아직 임계값을 초과하지 않은 것으로 홈 노드가 결정하면, 홈 노드는 사본을 홈 노드에 송신하고 다른 노드에서 로컬 사본을 무효화할 것을 다른 노드에 지시한다.
시간(t4)에서, 홈 노드는 노드(1)가 주어진 블록에 대한 소유자 노드라는 지시를 저장한다. 이 지시는 디렉토리의 할당된 항목에 저장된다. 시간(t5)에서, 홈 노드는 주어진 블록의 사본을 요청 노드(1)에 송신한다. 또한, 홈 노드는 커맨드 패킷을 공유된(S) 상태의 블록의 사본을 갖는 노드(2 내지 3)와 같은 다른 노드에 송신하여, 이 노드들에 주어진 블록의 임의의 사본을 무효화할 것을 지시한다.
시간(t6)에서, 노드(1)는 주어진 블록의 사본을 독점적인(E) 일관성 상태로 로컬 캐시에 설치하고 데이터를 수정하여 잠금을 리셋한다. 예를 들어, 노드(1)는 주어진 블록의 데이터 내에서 잠금 지시를 선언 해제할 수 있다. 노드(1)는 또한 일관성 상태를 독점적인(E) 것으로부터 수정된(M) 것으로 수정한다. 노드(2)와 노드(3)는 또한 블록의 상태를 공유된 상태로부터 무효된 상태로 변경한다.
도 5는 홈 노드에 대한 다수의 판독 요청을 처리하는데 사용되는 시퀀스 다이어그램이 도시된 것을 나타낸다. 도시된 바와 같이, 시간(t7 내지 t13)에서 단계의 시퀀스는 도 4에서 전술한 시간(t0 내지 t6)에서 단계의 시퀀스 후에 사용된다. 앞서 설명한 회로 및 로직에는 동일한 번호가 매겨진다.
시간(t7)에서, 일련의 잠금 판독 요청이 홈 노드로 송신된다. 도시된 바와 같이, 노드(2 및 3)는 잠금 판독 요청을 홈 노드로 송신하여, 도 4의 시간(t6)에서 이전 단계에서 무효화된 블록에 액세스를 획득한다. 잠금 판독 요청을 송신하는 2개의 노드만이 도시되어 있지만, 다른 실시예에서는 컴퓨팅 시스템에 다른 개수의 노드를 사용하여 잠금 판독 요청을 홈 노드에 송신할 수 있다.
시간(t8)에서, 홈 노드(110a)는 수신된 잠금 판독 요청을 저장한다. 예를 들어, 요청 큐는 앞서 설명한 요청을 저장하는 데 사용된다. 잠금 판독 요청이 제시되지만 잠금 판독 요청과 표준 판독 요청의 임의의 조합이 수신된다. 전술한 바와 같이, 카운터는 블록에 대응하는 다수의 요청을 추적하도록 할당된다. 도시된 예에서, 노드(2)로부터의 잠금 판독 요청은 주어진 블록에 대한 다른 요청보다 먼저 수신된다. 시간(t9)에서, 홈 노드는 주어진 블록의 소유권을 노드(1)로부터 노드(2)로 업데이트한다. 추가적으로, 일부 실시예에서는 할당된 카운터가 증분된다.
시간(t10)에서, 홈 노드는 주어진 블록의 사본을 노드(2)에 송신할 것을 노드(1)에 지시하는 커맨드 패킷을 노드(1)에 송신한다. 시간(t11)에서, 노드(1)는 수신된 커맨드 패킷을 처리하고 주어진 블록의 사본을 노드(2)에 송신한다. 시간(t12)에서, 노드(1)는 주어진 블록의 사본을 무효화한다. 노드(2)는 주어진 블록의 사본을 수신하고 이를 독점적인(E) 일관성 상태로 로컬 캐시에 설치한다. 시간(t13)에서, 노드(2)는 주어진 블록의 데이터를 판독하고, 주어진 블록이 잠금 해제되거나 이용 가능한 것을 발견한다.
이제 도 6을 참조하면, 다중 노드 컴퓨팅 시스템에서 판독 및 기록 요청을 처리하는데 사용되는 시퀀스 다이어그램이 도시된다. 앞서 설명한 회로 및 로직에는 동일한 번호가 매겨져 있다. 도시된 바와 같이, 시간(t14 내지 t19)에서 단계의 시퀀스는 도 5에서 앞서 설명한 시간(t8 내지 t13)에서 단계의 시퀀스 후에 제시된다.
시간(t14 내지 t19)에서 단계의 시퀀스는 조건이 충족된 것을 결정한 후에 일련의 잠금 판독 요청을 서비스하는 데 사용되는 홉의 수를 줄이기 위해 잠금 요청 및 잠금 해제 요청의 처리를 변경하기 위해 사용된다. 하나 이상의 표준 판독 요청이 또한 잠금 판독 요청과 혼합(intermingled)될 수 있다.
수신된 블록이 잠겨 있지 않다는 결정(도 5의 시간(t13))에 응답하여, 노드(2)는 주어진 블록 내의 잠금 지시를 수정함으로써 잠금을 설정한다. 시간(t13)에서, 노드(2)는 또한 데이터 블록이 변경(그러나 이것은 잠금 지시일 수도 있음)되었기 때문에 주어진 블록에 대한 일관성 상태를 독점적인(E) 것으로부터 수정된(M) 것으로 전이시킨다. 이후 홈 노드의 요청 큐에서 그 다음 잠금 판독 요청이 처리된다. 그 다음 잠금 판독 요청이 노드(3)로부터 온다. 처리 노드(3)의 잠금 판독 요청(시간(t7)에서 수신됨)에 응답하여, 시간(t15)에서 홈 노드는 주어진 블록의 소유권을 노드(2)로부터 노드(3)로 업데이트한다. 일부 실시예에서, 대응하는 어드레스에 할당된 카운터가 또한 증분된다. 추가적으로, 홈 노드는 할당된 카운터가 프로그래밍 가능한 임계값을 아직 초과하지 않았다고 결정한다. 이에 응답하여, 시간(t16)에서, 홈 노드는 주어진 블록의 사본을 노드(3)에 송신할 것을 노드(2)에 지시하는 커맨드 패킷을 노드(2)에 송신한다.
시간(t17)에서, 노드(2)는 수신된 커맨드 패킷을 처리하고 주어진 블록의 사본을 노드(3)에 송신한다. 시간(t18)에서, 노드(2)는 주어진 블록의 사본을 무효화한다. 노드(3)는 주어진 블록의 사본을 수신하고 이를 독점적인(E) 일관성 상태로 로컬 캐시에 설치한다. 시간(t19)에서 노드(3)는 주어진 블록의 데이터를 판독하고, 주어진 블록이 잠겨 있거나 이용 가능하지 않다는 것을 발견한다. 이에 응답하여, 노드(3)는 주어진 블록의 데이터를 아직 사용할 수 없기 때문에 기다린다.
노드(3)로부터 잠금 판독 요청에 대해, 최소 3개의 홉이 요청을 처리하는데 사용된다. 제1 홉은 노드(3)로부터 홈 노드로 잠금 판독 요청을 송신하는 데 사용된다. 이 제1 홉은 도 5의 앞선 시간(t7)에 대응한다. 제2 홉은 홈 노드로부터 노드(2)로 커맨드 패킷을 송신하는데 사용된다. 이 제2 홉은 앞선 시간(t16)에 대응한다. 제3 홉은 주어진 블록의 사본을 노드(2)로부터 노드(3)로 송신하는 데 사용된다. 이 제3 홉은 앞선 시간(t17)에 대응한다. 이 프로토콜은 할당된 카운터가 아직 구성 가능한 임계값을 초과하지 않은 시나리오에 대응한다. 그러나 홈 노드에서 할당된 카운터가 임계값을 초과하면 잠금 판독 요청을 처리하는 데 사용되는 최소 홉 수는 3개의 홉으로부터 2개의 홉으로 줄어든다.
다양한 실시예에서, 할당된 카운터가 임계값을 초과할 때, 홈 노드는 앞서 기술된 바와 같이 포워딩 버퍼에 주어진 블록의 사본을 저장한다. 요청 큐에 저장된 잠금 판독 요청을 처리할 때 홈 노드는 주어진 블록의 사본을 요청 노드에 직접 포워딩한다. 주어진 노드의 사본을 요청 노드에 송신할 것을 다른 노드에 지시하는 프로브 또는 커맨드 패킷이 또 다른 노드로 송신되지 않는다. 예를 들어, 할당된 카운터가, 노드(3)에 대한 잠금 판독 요청에 의해, 구성 가능한 임계값을 초과하게 되면, 홈 노드는 임의의 단계에서 노드(2)를 포함하지 않고 주어진 블록의 사본을 노드(3)로 직접 포워딩할 수 있다. 그리하여, 제1 홉은 노드(3)로부터 홈 노드로 잠금 판독 요청을 송신하는 데 여전히 사용된다. 이 제1 홉은 여전히 도 4의 앞선 단계(8)에 대응한다. 그러나, 이제 제2 홉은 주어진 블록을 홈 노드의 포워딩 버퍼로부터 노드(3)로 포워딩하는데 사용된다. 3개의 홉이 아니라 최소 2개의 홉이 사용된다.
도 7은 요청의 수가 프로그래밍 가능한 임계값을 충족하였거나 초과하는 경우 다중 노드 컴퓨팅 시스템에서 판독 및 기록 요청을 처리하기 위한 실시예를 도시한다. 앞서 설명한 회로 및 로직에는 동일한 번호가 매겨져 있다. 도시된 바와 같이, 번호 매겨진 단계(t37 내지 t45)의 시퀀스는 앞서 도 4에서 설명된 단계(t0 내지 t6)의 단계 시퀀스 후에 사용된다. 시간(t37 내지 t45)에서의 단계는 주어진 블록의 공유된 사본이 다른 노드에서 무효화된 후에 발생한다.
시간(t37)에서, 홈 노드는 노드(2 내지 3)와 같은 다른 노드로부터 일련의 잠금 판독 요청을 수신한다. 도시된 바와 같이, 노드(2 내지 3)는 도 4의 시간(t6)에서 앞선 단계에서 무효화된 주어진 블록의 사본에 액세스를 얻기 위해 잠금 판독 요청을 홈 노드에 송신한다. 또한, 소유자 노드(이 예에서 110b)는 주어진 블록 내의 데이터를 수정함으로써 잠금을 리셋하고 일관성 상태를 수정된(M) 것으로 설정한다.
이후, 시간(t38)에서, 홈 노드는 수신된 잠금 판독 요청을 저장한다. 주어진 시나리오에서, 주어진 블록에 대응하는 어드레스에 대한 이전의 판독 요청은 주어진 블록의 데이터 내에서 잠금을 리셋하기 위한 독점적인 판독 요청일 수 있다. 이 판독 요청은 앞에서 설명된 시간(t0 내지 t6)에서 단계의 시퀀스 동안 처리되었다. 동일한 어드레스에 대응하는 제2 판독 요청은 도 7에 도시된 바와 같이 시간(t37)에서 노드(2)로부터의 잠금 판독 요청이다. 일부 실시예에서, 이 잠금 판독 요청은 할당된 카운터가 임계값을 초과하게 한다. 이제, 다양한 실시예에서, 주어진 블록의 로컬 사본을 노드(2)에 송신한 후에 주어진 블록의 로컬 사본을 무효화할 것을 노드(1)에 지시하는 커맨드 패킷을 노드(1)로 송신하는 것이 아니라, 홈 노드는 다른 유형의 커맨드 패킷을 송신한다.
시간(t39)에서, 홈 노드는 주어진 블록의 사본을 노드(2)에 송신하는 것이 아니라 홈 노드에 송신할 것을 노드(1)에 지시하는 커맨드를 노드(1)에 송신한다. 시간(t40)에서, 노드(1)는 수신된 커맨드를 처리하고, 주어진 블록의 일관성 상태를 수정된(M) 것으로부터 소유된(O) 것으로 전이시킨다. 시간(t41)에서, 노드(1)는 주어진 블록의 사본을 홈 노드에 송신한다. 시간(t42)에서, 홈 노드는 주어진 블록의 수신된 사본을 포워딩 버퍼에 저장한다.
홈 노드는 노드(1)가 소유자 노드임을 나타내기 위해 주어진 블록에 대한 디렉토리 항목을 더 업데이트한다. 일부 실시예에서, 홈 노드는 또한 수신된 주어진 블록의 사본을 이전에 기술된 메모리(130a)와 같은 시스템 메모리에 기록한다. 다양한 실시예에서, 노드(1)가 잠금을 리셋한 후에 주어진 블록으로 종료되면, 노드(1)는 또한 노드(1)의 로컬 사본이 무효화되고 있다(무효화되었다)는 지시를 홈 노드에 송신한다. 이러한 경우, 홈 노드는 노드(1)가 블록을 소유한다는 지시를 디렉토리에 저장하지 않을 것이다. 노드(1)가 주어진 블록의 사본으로 아직 종료되지 않은 경우 이 노드는 소유된(O) 일관성 상태로 사본을 유지한다.
시간(t43)에서, 홈 노드는 주어진 블록의 사본을 포워딩 버퍼로부터 노드(2)로 직접 포워딩한다. 노드(2)는 주어진 블록의 사본을 수신한다. 홈 노드로부터의 패킷에 의해 지시된 바와 같이, 노드(2)는 공유된(S) 일관성 상태로 로컬 캐시에 주어진 블록을 설치한다. 시간(t44)에서, 노드(2)는 주어진 블록의 데이터를 판독하고, 주어진 블록이 잠금 해제되거나 이용 가능한 것을 발견한다. 이에 응답하여, 노드(2)는 데이터를 수정하여 시간(t45)에서 주어진 블록의 데이터 내에서 잠금을 설정한다. 노드(2)는 이 수정을 고려하여 주어진 블록에 대한 일관성 상태를 독점적인(E) 것으로부터 수정된(M) 것으로 전이시킨다.
도 8은 도 7의 단계 후의 시점에서 잠금 판독 요청의 처리를 도시한다. 도시된 바와 같이, 시간(t46 내지 t49)에서의 단계 시퀀스는 도 7에서 앞서 설명한 시간(t37 내지 t45)에서의 단계 시퀀스 후에 사용된다. 시간(t46)에서, 홈 노드 내 요청 큐에서 그 다음 잠금 판독 요청이 처리된다. 그 다음 잠금 판독 요청은 노드(1 내지 2)로부터의 앞선 판독 요청이 이미 처리되었기 때문에 노드(3)로부터 온다. 노드(1)가 주어진 블록의 사본을 무효화하지 않았다면 홈 노드는 노드(1)가 주어진 블록의 소유자 노드라는 지시를 유지한다. 이 예에서 할당된 카운터는 임계값을 초과했다.
시간(t46)에서, 홈 노드는 그 포워딩 버퍼에 액세스한다. 시간(t47)에서, 홈 노드는 주어진 블록의 사본을 포워딩 버퍼로부터 노드(3)로 직접 포워딩한다. 노드(3)는 주어진 블록의 사본을 수신하고, 홈 노드로부터의 패킷에 의해 지시된 바와 같이, 시간(t48)에서 노드(3)는 공유된(S) 일관성 상태로 로컬 캐시에 주어진 블록을 설치한다. 시간(t49)에서, 노드(3)는 주어진 블록의 데이터를 판독하고, 주어진 블록이 잠겨 있거나 이용 가능하지 않은 것을 발견한다. 이에 응답하여, 노드(3)는 주어진 블록의 데이터를 아직 사용할 수 없기 때문에 기다린다.
이제 도 9를 참조하면, 다중 노드 컴퓨팅 시스템에서 일련의 판독 요청을 처리하기 위한 방법(900)의 일 실시예가 도시된다. 설명을 위해, 이 실시예에서의 단계들은 순차적인 순서로 도시된다. 그러나, 다른 실시예에서, 일부 단계는 도시된 것과 다른 순서로 발생하고, 일부 단계는 동시에 수행되고, 일부 단계는 다른 단계와 결합되며, 일부 단계는 존재하지 않을 수 있다.
블록(902)에서, 다중 노드 컴퓨팅 시스템의 홈 노드는 이 홈 노드가 처리할 판독 요청을 갖는다고 결정한다. 다양한 실시예에서, 홈 노드는 수신된 요청을 저장하기 위한 요청 큐를 포함한다. 추가적으로, 홈 노드는 주어진 블록에 대한 판독 요청의 카운트를 유지하도록 구성된다. 예를 들어, 일부 실시예에서, 카운트는 블록의 타깃 어드레스와 연관되고, 블록에 대한 요청이 수신될 때 증분된다. 다양한 실시예에서, 카운트는 어드레스에 대응하는 블록에 대한 기록 요청 또는 잠금 해제 요청이 검출될 때 리셋된다.
도시된 예에서, 어드레스에 대한 판독 요청의 임계값 수가 초과되지 않은 경우(조건 블록(904)), 블록(906)에서 어드레스에 대한 판독 요청의 카운트가 증분된다. 블록(908)에서, 판독 요청(또는 가장 오래된 보류 판독 요청)은 요청 노드에 대해 처리된다. 일부 실시예에서, 요청된 데이터는 요청 노드로 송신된다. 요청된 데이터는 홈 노드의 로컬 캐시로부터, 홈 노드의 시스템 메모리로부터, 또는 요청된 데이터의 사본을 현재 저장하고 있는 다른 노드의 캐시로부터 검색되었다. 후자의 경우, 데이터를 요청 노드로 포워딩할 것을 다른 노드에 지시하기 위해 커맨드(예를 들어, 프로브 요청 또는 다른 메시지)가 홈 노드로부터 다른 노드로 송신된다.
어드레스에 대한 판독 요청의 임계값 수가 충족되어(예를 들어, 실시예에 따라 같거나 초과되어)(조건 블록(904)), 홈 노드의 포워딩 버퍼에 히트가 있다면(조건 블록(910)), 블록(912)에서 요청된 데이터는 버퍼로부터 요청 노드로 포워딩된다. 홈 노드의 버퍼에 히트가 없다면(조건 블록(910)), 블록(914)에서 홈 노드는 요청된 데이터를 요청 노드에 송신하지 않는 것이 아니라 요청된 데이터를 홈 노드에 송신하라는 요청을 소유자 노드에 발행한다. 블록(916)에서, 홈 노드는 요청된 데이터가 리턴할 때까지 기다리고, 요청된 데이터가 리턴하면, 요청된 데이터를 홈 노드의 포워딩 버퍼에 저장한다. 이후, 방법(900)의 제어 흐름은 블록(912)으로 이동하고 여기서 홈 노드는 데이터의 사본을 요청 노드로 포워딩한다.
블록(930)에서, 홈 노드는 처리할 기록 요청 또는 잠금 해제 요청을 갖는다고 결정한다. 블록(932)에서, 홈 노드는 요청에 대응하는 어드레스를 결정하고, 만약 있다면, 데이터에 대한 판독 요청의 카운트를 리셋한다. 이전에, 홈 노드는 카운트가 임계값을 초과하는 것으로 인해 어드레스에 대응하는 판독 요청에 대해 포워딩 버퍼로부터 요청 노드로 데이터를 포워딩했을 수 있다. 그러나, 카운트의 리셋 시에, 홈 노드는 어드레스에 대응하는 판독 요청에 대해 포워딩 버퍼를 사용하는 것을 중단했다. 블록(934)에서, 홈 노드는 기록 요청 또는 잠금 해제 요청을 처리한다.
도 10을 참조하면, 예시적인 처리 노드(1000)의 일 실시예가 도시된다. 일부 실시예에서, 처리 노드(1000)의 도시된 기능은 단일 집적 회로에 통합된다. 처리 노드(1000)는 앞서 설명된 다중 노드 컴퓨팅 시스템에서 하나 이상의 노드로서 사용된다. 처리 노드(1000)는 하나 이상의 처리 유닛(1015)을 포함하고 각 처리 유닛은 하나 이상의 프로세서 코어(1012) 및 연관된 캐시 메모리 서브시스템(1094)을 포함한다. 다양한 실시예에서, 프로세서 코어(1012)는 범용 마이크로아키텍처를 이용한다.
일 실시예에서, 프로세서 코어(1012)는 미리 한정된 범용 명령 세트에 따라 명령을 실행하기 위한 회로를 포함한다. 예를 들어, SPARC® 명령 세트 아키텍처(instruction set architecture: ISA)가 선택된다. 대안적으로 x86, x86-64®, Alpha®, PowerPC®, MIPS®, PA-RISC®, 또는 임의의 다른 명령 세트 아키텍처가 선택된다. 일반적으로, 프로세서 코어(1012)는 데이터 및 명령을 위해 각각 캐시 메모리 서브시스템(1094)에 액세스한다. 요청된 블록이 캐시 메모리 서브시스템(1094)에서도 발견되지 않고 공유된 캐시 메모리 서브시스템(1098)에서도 발견되지 않으면, 판독 요청이 생성되고 나서, 누락된 블록이 매핑되는 노드 내 메모리 제어기(1020)로 전송된다. 캐시 메모리 서브시스템(1094)은 각각의 프로세서 코어(1012) 내에 통합된다. 캐시 메모리 서브시스템(1094) 및 공유된 캐시 메모리 서브시스템(1098)은 모두 대응하는 캐시 제어기에 결합된 캐시 메모리를 포함한다.
처리 노드(1000)는 또한 하나 이상의 처리 유닛(1070)을 포함하고 이 처리 유닛은 하나 이상의 프로세서 코어(1072) 및 데이터 저장 버퍼(1074)를 포함한다. 다양한 실시예에서, 프로세서 코어(1072)는 프로세서 코어(1012)의 미러링된 실리콘 이미지가 아니다. 오히려 프로세서 코어(1072)는 프로세서 코어(1012)에 의해 사용되는 마이크로 아키텍처와는 다른 마이크로 아키텍처를 가질 수 있다. 일부 실시예에서, 프로세서 코어(1072)는 연산 집약적인 작업을 위해 높은 명령 처리량을 제공하는 마이크로 아키텍처를 포함한다. 일부 실시예에서, 프로세서 코어(1072)는 병렬 아키텍처를 갖는다. 예를 들어, 일부 실시예에서 프로세서 코어(1072)는 단일 명령 다중 데이터(single instruction multiple data: SIMD) 기반 코어이다. SIMD 코어의 예는 그래픽 처리 유닛(graphics processing unit: GPU), 디지털 신호 처리(digital signal processing: DSP) 코어 또는 그 밖에 다른 것을 포함한다. 일 실시예에서, 처리 노드(1000)는 단일 명령 세트 아키텍처(ISA)를 포함한다.
소프트웨어 애플리케이션의 스레드는 각각의 스레드가 프로세서 코어(1012 및 1072)의 런타임 하드웨어 자원에 적어도 부분적으로 기초하여 가장 높은 명령 처리량을 갖는 방식으로 프로세서 코어(1012 및 1072) 중 하나에서 스케줄링된다. 일부 실시예에서 처리 유닛(1070)은 그래픽 처리 유닛(GPU)이다. 종래의 GPU는 매우 넓은 단일 명령 다중 데이터(SIMD) 아키텍처를 이용하여 고도의 데이터 병렬 애플리케이션에서 높은 처리량을 달성한다. 각 객체는 다른 객체와 독립적으로 처리되지만 동일한 조작 순서가 사용된다.
일 실시예에서, 유닛(1070)은 마더보드 상에 통합된다. 다른 실시예에서, 처리 노드(1000)의 도시된 기능은 단일 집적 회로 상에 통합된다. 이러한 실시예에서, CPU인 유닛(1015) 및 GPU인 유닛(1070) 각각은 상이한 설계 중심으로부터 전용 코어(proprietary core)이다. 또한, GPU(1070)는 인터페이스(1040)를 통해 오프-칩으로 메모리 액세스를 수행하는 것이 아니라 처리 노드(1000)로부터 메모리 제어기(120)를 통해 로컬 메모리(1094 및 1098) 및 주 메모리에 직접 액세스할 수 있다. 이 실시예는 GPU(1070)의 메모리에 액세스하는데 더 적은 지연 시간을 가져서 더 높은 성능을 나타낼 수 있다.
일반적으로, 패킷 처리 로직(1016)은, 처리 노드(1000)가 연결된 링크에서 수신된 제어 패킷에 응답하여, 프로세서 코어(1012 및 1072) 및/또는 캐시 메모리 서브시스템(1094)에 응답하여 제어 패킷을 생성하고, 서비스를 위해 메모리 제어기(1020)에 의해 선택된 트랜잭션에 응답하여 프로브 커맨드 및 응답 패킷을 생성하고, 노드(1000)를 중간 노드로 하여 패킷을 인터페이스 로직(1040)을 통해 다른 노드로 라우팅하도록 구성된다. 일부 실시예에서, 패킷 처리 로직(1016)은 크로스바 스위치(crossbar switch)라고 지칭될 수 있다.
인터페이스 로직(1040)은, 패킷을 수신하고 패킷을 패킷 처리 로직(1016)에 의해 사용되는 내부 클록에 동기화하는 로직을 포함한다. 인터페이스 로직(1040)은 또한 하나 이상의 입력/출력(I/O) 장치(1082)와 통신하기 위한 로직을 포함한다. 일부 실시예에서, 인터페이스 로직(1040)은 패킷 처리 로직(1016), 크로스바 스위치 또는 다른 구성 요소를 이용하지 않고 외부 장치와 직접 통신한다. 예를 들어, 네트워크 메시지는 각 유닛(1015)과 네트워크 인터페이스 카드(1080) 사이에 직접 전달되고 또 유사하게는 각 유닛(1070)과 네트워크 인터페이스 카드(1080) 사이에 전달된다.
도시된 실시예에서, 인터페이스 로직(1040)은 적어도 USB(Universal Serial Bus) 인터페이스, 저장 장치와의 직렬 ATA 버스 인터페이스, PCI 익스플레스 PCIe(PCI Express Peripheral Component Interconnect Express) 직렬 확장 버스 인터페이스, 낮은 핀 카운트(low pin count: LPC) 버스, 피어-투-피어(peer-to-peer: P2P) 직접 메모리 액세스(direct memory access: DMA) 제어기 등을 포함할 수 있다. 다른 실시예는 전술한 것 중 하나 이상을 배제하고 및/또는 다른 장치 또는 기술을 포함할 수 있다.
처리 노드(1000)는 네트워크 인터페이스 카드(NIC)(1080)에 연결된다. NIC(1080)는 네트워크를 통해 다른 처리 노드와 통신하기 위한 회로 및 로직을 포함한다. 예를 들어, NIC(1080)는 논리를 이용하여 이더넷, 파이버 채널, Wi-Fi 또는 토큰 링(Token Ring)과 같은 물리적 계층 및 데이터 링크 계층 표준과 통신한다. NIC(1080)는 동일한 근거리 네트워크(LAN) 상의 컴퓨터에 의해 근접 그룹과 통신할 수 있게 한다. 추가적으로, NIC(1080)는 네트워크를 통해 다른 노드와 통신하는 것을 허용한다. NIC(1080)는 응용 계층을 위한 HTTP 프로토콜, 전송 계층을 위한 TCP 프로토콜, 인터넷 계층을 위한 IP 프로토콜, 데이터 링크 계층을 위한 이더넷 프로토콜, 및 물리적 계층을 위한 IEEE 802.3u 프로토콜과 같은 네트워크 프로토콜 스택을 포함한다.
전술한 실시예들 중 하나 이상은 소프트웨어를 포함한다는 것을 유의해야 한다. 이러한 실시예에서, 방법 및/또는 메커니즘을 구현하는 프로그램 명령은 컴퓨터 판독 가능한 매체 상에 전달되거나 저장된다. 프로그램 명령을 저장하도록 구성된 다수의 유형의 매체가 이용 가능하고, 하드 디스크, 플로피 디스크, CD-ROM, DVD, 플래시 메모리, PROM(Programmable ROM), RAM(Random Access Memory) 및 여러 다른 형태의 휘발성 또는 비휘발성 저장매체를 포함할 수 있다. 일반적으로 말하면, 컴퓨터 액세스 가능한 저장 매체는 명령 및/또는 데이터를 컴퓨터에 제공하기 위해 사용 동안 컴퓨터에 의해 액세스 가능한 임의의 저장 매체를 포함한다. 예를 들어, 컴퓨터 액세스 가능한 저장 매체는 자기 매체 또는 광학 매체, 예를 들어, 디스크(고정식 또는 이동식), 테이프, CD-ROM, 또는 DVD-ROM, CD-R, CD-RW, DVD-R, DVD-RW 또는 블루 레이와 같은 저장 매체를 포함할 수 있다. 저장 매체는 RAM(예를 들어, 동기식 동적 RAM(SDRAM), 더블 데이터 레이트(double data rate)(DDR, DDR2, DDR3 등) SDRAM, 저전력 DDR(LPDDR2 등) SDRAM, 램버스(Rambus) DRAM(RDRAM), 정적 RAM(SRAM) 등), ROM, 플래시 메모리, 범용 직렬 버스(USB) 인터페이스와 같은 주변 인터페이스를 통해 액세스 가능한 비 휘발성 메모리(예를 들어, 플래시 메모리) 등과 같은 휘발성 또는 비 휘발성 메모리 매체를 더 포함한다. 저장 매체는 마이크로 전자 기계 시스템(microelectromechanical systems: MEMS)뿐만 아니라 네트워크 및/또는 무선 링크와 같은 통신 매체를 통해 액세스 가능한 저장 매체를 포함한다.
추가적으로, 다양한 실시예에서, 프로그램 명령은 C와 같은 고급 프로그래밍 언어, 베릴로그(Verilog), VHDL과 같은 설계 언어(HDL), 또는 GDS II 스트림 포맷(GDSII)과 같은 데이터베이스 포맷에서 하드웨어 기능의 행동 수준 설명(behavioral-level description) 또는 레지스터 전송 레벨(register-transfer level: RTL) 기술을 포함한다. 일부 경우에 설명은 합성 도구에 의해 판독되고, 이 합성 도구는 합성 라이브러리로부터 게이트의 리스트를 포함하는 넷리스트(netlist)를 생성하기 위해 설명을 합성한다. 넷리스트는 게이트 세트를 포함하며 이 게이트 세트는 시스템을 포함한 하드웨어의 기능을 더 나타낸다. 그런 다음 넷리스트를 배치하고 라우팅하여 마스크에 적용할 기하학적 형상을 설명하는 데이터 세트를 생성한다. 그 다음, 마스크를 다양한 반도체 제조 단계에 사용하여 반도체 회로 또는 시스템에 대응하는 회로를 생성한다. 대안적으로, 컴퓨터 액세스 가능한 저장 매체 상의 명령은 원하는 대로 (합성 라이브러리가 있거나 없는) 넷리스트 또는 데이터 세트이다. 추가적으로, 명령은 케이던스(Cadence)®, EVE®, 및 멘터 그래픽스(Mentor Graphics)®와 같은 공급업체로부터 하드웨어 기반 유형 에뮬레이터(emulator)에 의해 에뮬레이션하기 위해 이용된다.
상기 실시예는 상당히 상세하게 설명되었지만, 일단 상기 내용이 완전히 이해되면, 이 기술 분야에 통상의 지식을 가진 자에게는 다양한 변형 및 수정이 명백해질 것이다. 다음 청구범위는 모든 변형 및 수정을 포함하는 것으로 해석되어야 하는 것으로 의도된다.
Claims (20)
- 복수의 노드 간의 통신을 관리하는 방법으로서,
복수의 노드 중 홈 노드에서 복수의 데이터 블록을 저장하는 단계;
상기 홈 노드에서 제1 노드로부터의 요청을 수신하는 단계로서, 상기 요청은 상기 복수의 데이터 블록 중 주어진 데이터 블록에 액세스하는 요청인, 상기 요청을 수신하는 단계;
상기 주어진 데이터 블록에 대한 판독 요청의 수의 카운트를 상기 홈 노드에서 유지하는 단계;
상기 주어진 데이터 블록이 제2 노드에 현재 저장되어 있다고 결정하고 또한 상기 카운트가 임계값을 초과한다고 결정함에 응답하여, 상기 홈 노드는,
상기 제2 노드로부터 상기 주어진 데이터 블록의 사본을 요청하는 단계;
상기 제2 노드로부터 상기 주어진 데이터 블록의 사본을 수신한 것에 응답하여 상기 홈 노드에서 상기 주어진 데이터 블록의 사본을 저장하는 단계; 및
상기 주어진 데이터 블록의 사본을 상기 홈 노드로부터 상기 제1 노드로 포워딩하는 단계를 포함하는 방법. - 삭제
- 제1항에 있어서,
상기 요청하는 단계에 응답하여, 상기 방법은 상기 제2 노드에 저장된 상기 주어진 데이터 블록의 캐시 일관성 상태를 소유된 캐시 일관성 상태로 변경하는 단계를 더 포함하는, 방법. - 제1항에 있어서,
상기 포워딩하는 단계에 응답하여, 상기 방법은 상기 제1 노드 및 상기 홈 노드로부터 상기 주어진 데이터 블록의 포워딩된 사본을 수신한 복수의 노드 중 임의의 노드 각각에, 공유된 캐시 일관성 상태의 지시와 함께 상기 주어진 데이터 블록을 저장하는 단계를 더 포함하는, 방법. - 제3항에 있어서,
상기 방법은,
상기 주어진 데이터 블록이 잠겨지는데 이용가능하다고 결정함에 응답하여, 제1 노드에서 상기 주어진 데이터 블록의 포워딩된 사본에 대한 잠금(lock)을 설정하는 단계; 및
상기 주어진 데이터 블록이 잠겼다고 결정함에 응답하여, 제1 노드에서 상기 주어진 데이터 블록의 포워딩된 사본의 사용을 대기하는 단계
를 더 포함하는, 방법. - 삭제
- 제1항에 있어서,
상기 방법은 상기 주어진 데이터 블록에 대한 기록 요청 또는 잠금 해제 요청 중 어느 하나를 수신한 것에 응답하여 상기 카운트를 리셋하는 단계를 더 포함하는, 방법. - 제1항에 있어서,
상기 방법은,
상기 복수의 노드 중 상기 주어진 데이터 블록을 요청하는 노드로 상기 주어진 데이터 블록의 사본을 포워딩하는데 사용되는 상기 홈 노드의 버퍼에 상기 주어진 데이터 블록을 저장하는 단계를 더 포함하고, 상기 버퍼는 상기 홈 노드의 시스템 메모리와는 별개인, 방법. - 컴퓨팅 시스템으로서,
복수의 데이터 블록을 저장하도록 구성된 홈 노드;
상기 홈 노드에 저장된 데이터 블록에 대한 액세스 요청을 생성하도록 구성된 제1 노드; 및
상기 홈 노드에 저장된 데이터 블록에 대한 액세스 요청을 생성하도록 구성된 제2 노드를 포함하되;
상기 홈 노드는 주어진 데이터 블록에 대한 판독 요청의 수의 카운트를 유지하도록 구성되고;
상기 주어진 데이터 블록에 액세스하기 위한 상기 제2 노드로부터의 요청을 상기 홈 노드에서 수신하고, 그리고 상기 주어진 데이터 블록이 제1 노드에 현재 저장되어 있다고 결정하고 또한 상기 카운트가 임계값을 초과한다고 결정함에 응답하여, 상기 홈 노드는,
상기 제1 노드로부터 상기 주어진 데이터 블록의 사본을 요청하는 동작;
상기 제1 노드로부터 상기 주어진 데이터 블록의 사본을 수신한 것에 응답하여 상기 홈 노드에 상기 주어진 데이터 블록의 사본을 저장하는 동작; 및
상기 주어진 데이터 블록의 사본을 상기 홈 노드로부터 상기 제2 노드로 포워딩하는 동작을 수행하도록 구성된, 컴퓨팅 시스템. - 제9항에 있어서,
상기 판독 요청들 중 하나 이상은, 요청 노드가 상기 주어진 데이터 블록에 대한 잠금을 해제할 준비가 될 때까지 잠금 상태에서 상기 요청 노드에 의한 상기 주어진 데이터 블록에 대한 판독 액세스를 허용함으로써 상기 주어진 데이터 블록에 대한 액세스를 동기화하는데 이용되는 잠금 판독 요청인, 컴퓨팅 시스템. - 제9항에 있어서,
상기 요청에 응답하여, 상기 홈 노드는 상기 제1 노드에 저장된 상기 주어진 데이터의 캐시 일관성 상태를 소유된 캐시 일관성 상태로 변경하도록 더 구성된, 컴퓨팅 시스템. - 제9항에 있어서,
상기 포워딩하는 동작에 응답하여, 상기 홈 노드는, 상기 제2 노드 및 상기 홈 노드로부터 상기 주어진 데이터 블록의 포워딩된 사본을 수신한 복수의 노드 중 임의의 노드 각각에, 공유된 캐시 일관성 상태의 지시와 함께 상기 주어진 데이터 블록을 저장하도록 더 구성된, 컴퓨팅 시스템. - 제10항에 있어서,
상기 제2 노드는 또한,
상기 주어진 데이터 블록이 잠겨지는데 이용가능하다고 결정함에 응답하여, 제2 노드에서 상기 주어진 데이터 블록의 포워딩된 사본에 대한 잠금(lock)을 설정하고; 및
상기 주어진 데이터 블록이 잠겼다고 결정함에 응답하여, 제2 노드에서 상기 주어진 데이터 블록의 포워딩된 사본의 사용을 대기하도록 구성되는, 컴퓨팅 시스템. - 제9항에 있어서,
상기 홈 노드는 상기 제1 노드로부터 요청을 수신한 후에 수신된 상기 주어진 데이터 블록에 대한 액세스 요청에 관하여 상기 제1 노드와 통신하는 것을 삼가하는, 컴퓨팅 시스템. - 제14항에 있어서,
상기 홈 노드는 또한, 상기 주어진 데이터 블록에 대응하는 주어진 어드레스에 대한 기록 요청 또는 잠금 해제 요청 중 어느 하나를 수신한 것에 응답하여 상기 카운트를 리셋하도록 구성된, 컴퓨팅 시스템. - 제10항에 있어서,
상기 컴퓨팅 시스템은 또한, 상기 제1 노드 및 제2 노드를 포함하는 복수의 노드를 포함하고;
상기 홈 노드는 또한 상기 주어진 데이터 블록의 사본을 상기 복수의 노드 중 상기 주어진 데이터 블록을 요청한 노드로 포워딩하는데 사용되는 버퍼에 상기 주어진 데이터 블록을 저장하도록 구성되고;
상기 버퍼는 상기 홈 노드의 시스템 메모리와는 별개인, 컴퓨팅 시스템. - 프로그램 명령을 저장하는 비-일시적인 컴퓨터 판독 가능한 저장 매체로서, 상기 프로그램 명령은,
복수의 노드 중 홈 노드에 복수의 데이터 블록을 저장하는 동작;
주어진 데이터 블록에 대한 판독 요청들의 카운트를 상기 홈 노드에서 유지하는 동작;
상기 복수의 데이터 블록 중 상기 주어진 데이터 블록에 액세스하라는 제1 노드로부터의 요청을 상기 홈 노드에서 수신하고, 그리고 상기 주어진 데이터 블록이 제2 노드에 현재 저장되어 있다고 결정하고 또한 상기 카운트가 임계값을 초과한다고 결정함에 응답하여, 상기 홈 노드가,
상기 제2 노드로부터 상기 주어진 데이터 블록의 사본을 요청하는 동작;
상기 제2 노드로부터 상기 주어진 데이터 블록의 사본을 수신한 것에 응답하여 상기 주어진 데이터 블록의 사본을 상기 홈 노드에 저장하는 동작; 및
상기 주어진 데이터 블록의 사본을 상기 홈 노드로부터 상기 제1 노드로 포워딩하는 동작을 수행하도록 프로세서에 의해 실행 가능한, 비-일시적인 컴퓨터 판독 가능한 저장 매체. - 삭제
- 삭제
- 삭제
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/192,734 | 2016-06-24 | ||
US15/192,734 US10248564B2 (en) | 2016-06-24 | 2016-06-24 | Contended lock request elision scheme |
PCT/US2017/038811 WO2017223346A1 (en) | 2016-06-24 | 2017-06-22 | Contended lock request elision scheme |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20190021219A KR20190021219A (ko) | 2019-03-05 |
KR102452302B1 true KR102452302B1 (ko) | 2022-10-11 |
Family
ID=59285363
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020187034910A KR102452302B1 (ko) | 2016-06-24 | 2017-06-22 | 경쟁 잠금 요청 생략 방식 |
Country Status (6)
Country | Link |
---|---|
US (1) | US10248564B2 (ko) |
EP (1) | EP3433746B1 (ko) |
JP (1) | JP7166931B2 (ko) |
KR (1) | KR102452302B1 (ko) |
CN (1) | CN109564548A (ko) |
WO (1) | WO2017223346A1 (ko) |
Families Citing this family (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10496538B2 (en) | 2015-06-30 | 2019-12-03 | Veritas Technologies Llc | System, method and mechanism to efficiently coordinate cache sharing between cluster nodes operating on the same regions of a file or the file system blocks shared among multiple files |
WO2017100978A1 (zh) * | 2015-12-14 | 2017-06-22 | 华为技术有限公司 | 一种集群中锁管理的方法、锁服务器及客户端 |
US10521112B2 (en) | 2017-03-17 | 2019-12-31 | International Business Machines Corporation | Layered clustered scale-out storage system |
US10725915B1 (en) | 2017-03-31 | 2020-07-28 | Veritas Technologies Llc | Methods and systems for maintaining cache coherency between caches of nodes in a clustered environment |
US11586369B2 (en) | 2019-05-29 | 2023-02-21 | Xilinx, Inc. | Hybrid hardware-software coherent framework |
US10795819B1 (en) * | 2019-06-26 | 2020-10-06 | Intel Corporation | Multi-processor system with configurable cache sub-domains and cross-die memory coherency |
US10860388B1 (en) * | 2019-07-09 | 2020-12-08 | Micron Technology, Inc. | Lock management for memory subsystems |
US11113213B2 (en) * | 2019-12-30 | 2021-09-07 | Micron Technology, Inc. | Determining write commands for deletion in a host interface |
US11287987B2 (en) | 2020-03-04 | 2022-03-29 | Micron Technology, Inc. | Coherency locking schemes |
US11188471B2 (en) * | 2020-04-03 | 2021-11-30 | Alibaba Group Holding Limited | Cache coherency for host-device systems |
US20220206945A1 (en) * | 2020-12-25 | 2022-06-30 | Intel Corporation | Adaptive remote atomics |
WO2024000510A1 (zh) * | 2022-06-30 | 2024-01-04 | 华为技术有限公司 | 一种处理请求的方法、装置及系统 |
US20240037032A1 (en) * | 2022-07-28 | 2024-02-01 | Dell Products L.P. | Lcs data provisioning system |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7640315B1 (en) | 2000-08-04 | 2009-12-29 | Advanced Micro Devices, Inc. | Implementing locks in a distributed processing system |
US7099913B1 (en) * | 2000-08-31 | 2006-08-29 | Hewlett-Packard Development Company, L.P. | Speculative directory writes in a directory based cache coherent nonuniform memory access protocol |
JP2003216597A (ja) * | 2002-01-23 | 2003-07-31 | Hitachi Ltd | マルチプロセッサシステム |
US7962696B2 (en) * | 2004-01-15 | 2011-06-14 | Hewlett-Packard Development Company, L.P. | System and method for updating owner predictors |
US7373466B1 (en) | 2004-04-07 | 2008-05-13 | Advanced Micro Devices, Inc. | Method and apparatus for filtering memory write snoop activity in a distributed shared memory computer |
US7480784B2 (en) | 2005-08-12 | 2009-01-20 | Advanced Micro Devices, Inc. | Ensuring deadlock free operation for peer to peer traffic in an input/output memory management unit (IOMMU) |
EP2332043B1 (en) | 2008-07-28 | 2018-06-13 | Advanced Micro Devices, Inc. | Virtualizable advanced synchronization facility |
CN103294612B (zh) * | 2013-03-22 | 2014-08-13 | 浪潮电子信息产业股份有限公司 | 在多级缓存一致性域系统局部域构造Share-F状态的方法 |
-
2016
- 2016-06-24 US US15/192,734 patent/US10248564B2/en active Active
-
2017
- 2017-06-22 EP EP17735722.5A patent/EP3433746B1/en active Active
- 2017-06-22 JP JP2018556346A patent/JP7166931B2/ja active Active
- 2017-06-22 CN CN201780032262.8A patent/CN109564548A/zh active Pending
- 2017-06-22 WO PCT/US2017/038811 patent/WO2017223346A1/en active Application Filing
- 2017-06-22 KR KR1020187034910A patent/KR102452302B1/ko active IP Right Grant
Non-Patent Citations (2)
Title |
---|
R. Veldema 외, "Runtime Optimizations for a Java DSM Implementation."(2001)* |
Song Fu 외, "Distributed shared arrays: A distributed virtual machine with mobility support for reconfiguration."(2006)* |
Also Published As
Publication number | Publication date |
---|---|
EP3433746B1 (en) | 2022-03-16 |
EP3433746A1 (en) | 2019-01-30 |
JP7166931B2 (ja) | 2022-11-08 |
US20170371787A1 (en) | 2017-12-28 |
WO2017223346A1 (en) | 2017-12-28 |
US10248564B2 (en) | 2019-04-02 |
JP2019526086A (ja) | 2019-09-12 |
KR20190021219A (ko) | 2019-03-05 |
CN109564548A (zh) | 2019-04-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102452302B1 (ko) | 경쟁 잠금 요청 생략 방식 | |
US11698929B2 (en) | Offload of data lookup operations | |
CN108027804B (zh) | 片上原子事务引擎 | |
US9176913B2 (en) | Coherence switch for I/O traffic | |
US10298496B1 (en) | Packet processing cache | |
US7480770B2 (en) | Semi-blocking deterministic directory coherence | |
US9524261B2 (en) | Credit lookahead mechanism | |
JP4660064B2 (ja) | 分散処理システムにおけるロックの実行 | |
US10228869B1 (en) | Controlling shared resources and context data | |
US20170228164A1 (en) | User-level instruction for memory locality determination | |
JP6687845B2 (ja) | 演算処理装置及び演算処理装置の制御方法 | |
US9465740B2 (en) | Coherence processing with pre-kill mechanism to avoid duplicated transaction identifiers | |
JP2022547484A (ja) | プロデューサからコンシューマへのアクティブな直接キャッシュ転送 | |
US10678691B2 (en) | Coherence flows for dual-processing pipelines | |
JP6792139B2 (ja) | 演算処理装置及び演算処理装置の制御方法 | |
JP6975335B2 (ja) | ホームエージェントベースのキャッシュ転送アクセラレーションスキーム | |
US11030102B2 (en) | Reducing memory cache control command hops on a fabric | |
US9201791B2 (en) | Flow-ID dependency checking logic | |
US9367461B2 (en) | Ordering constraint management within coherent memory systems | |
US10503648B2 (en) | Cache to cache data transfer acceleration techniques | |
US20150067246A1 (en) | Coherence processing employing black box duplicate tags | |
US9158691B2 (en) | Cross dependency checking logic | |
US10877888B2 (en) | Systems and methods for providing distributed global ordering | |
US11138111B2 (en) | Parallel coherence and memory cache processing pipelines | |
US20220050779A1 (en) | Memory disposition device, memory disposition method, and recording medium storing memory disposition program |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
E902 | Notification of reason for refusal | ||
GRNT | Written decision to grant |