KR20020030825A - 데드락이 없는 컴퓨터 시스템 작동을 위한 가상 채널들 및대응하는 버퍼 할당 - Google Patents

데드락이 없는 컴퓨터 시스템 작동을 위한 가상 채널들 및대응하는 버퍼 할당 Download PDF

Info

Publication number
KR20020030825A
KR20020030825A KR1020027003545A KR20027003545A KR20020030825A KR 20020030825 A KR20020030825 A KR 20020030825A KR 1020027003545 A KR1020027003545 A KR 1020027003545A KR 20027003545 A KR20027003545 A KR 20027003545A KR 20020030825 A KR20020030825 A KR 20020030825A
Authority
KR
South Korea
Prior art keywords
packet
node
data
packets
control packet
Prior art date
Application number
KR1020027003545A
Other languages
English (en)
Other versions
KR100643873B1 (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 KR20020030825A publication Critical patent/KR20020030825A/ko
Application granted granted Critical
Publication of KR100643873B1 publication Critical patent/KR100643873B1/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/173Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/173Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
    • G06F15/17356Indirect interconnection networks
    • G06F15/17368Indirect interconnection networks non hierarchical topologies
    • G06F15/17381Two dimensional, e.g. mesh, torus

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Mathematical Physics (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Multi Processors (AREA)
  • Information Transfer Systems (AREA)
  • Small-Scale Networks (AREA)

Abstract

컴퓨터 시스템(10)은 가상 채널들(40A-40B)을 이용하며, 이 가상 채널들에 다른 리소스들을 할당한다. 논리/프로토콜-관련 충돌들을 갖지 않는 패킷들은 가상 채널 내에 그룹화된다. 이에 따라, 논리적인 충돌들은 개별적인 가상 채널들 내의 패킷들 간에서 일어난다. 가상 채널 내의 패킷들은 리소스들을 공유할 수도 있으며 (그리고 이에 따라 리소스 충돌들을 경험하게 되지만), 다른 가상 채널들 내의 패킷들은 리소스들을 공유하지 않을 수도 있다. 이에 따라, 각 가상 채널에는 할당된 제어 패킷 버퍼들(60A-60C, 220) 및 데이터 패킷 버퍼들(60D-60E, 220)이 할당될 수도 있다. 데이터 패킷을 지정하지 않는 제어 패킷이 수신되면, 어떠한 데이터 패킷 버퍼 공간도 할당되지 않는다. 데이터 패킷을 지정하는 제어 패킷이 수신되면, 제어 패킷 버퍼 공간 및 데이터 패킷 버퍼 공간이 할당된다.

Description

데드락이 없는 컴퓨터 시스템 작동을 위한 가상 채널들 및 대응하는 버퍼 할당{VIRTUAL CHANNELS AND CORRESPONDING BUFFER ALLOCATIONS FOR DEADLOCK-FREE COMPUTER SYSTEM OPERATION}
일반적으로, 개인용 컴퓨터들(PCs) 및 다른 타입의 컴퓨터 시스템들은 메모리를 접속하기 위한 공유 버스 시스템 주변에 설계되었다. 하나 이상의 프로세서들 및 하나 이상의 입력/출력(I/O) 장치들이 공유 버스를 통하여 메모리에 결합된다. I/O 장치들은 공유 버스와 I/O 장치들 간의 정보 전송을 제어하는 I/O 브리지를 통하여 공유 버스에 연결될 수도 있는 반면, 프로세서들은 전형적으로 공유 버스에 직접 결합되거나, 또는 캐시 코히런시를 통하여 공유 버스에 결합된다.
불행히도, 공유 버스 시스템은 몇 가지의 문제점들을 갖는다. 예를 들어, 공유 버스에 다수의 장치들이 부착되기 때문에, 전형적으로 버스는 비교적 낮은 주파수에서 작동한다. 다수의 부착물들은 버스 상에서 신호를 구동하는 장치에 높은 용량성 부하를 제공하며, 그리고 다수의 부착 지점들은 고주파수들에 대하여 상당히 복잡한 전송 라인 모델을 제공한다. 따라서, 주파수는 낮게 유지되며, 공유 버스상에서 이용가능한 대역폭 또한 유사하게 비교적 좁다. 이러한 좁은 대역폭은, 이용가능한 대역폭에 의해 성능이 제한될 수도 있기 때문에, 공유 버스에 부착되는 부가적인 장치들에 대한 장벽을 제시한다.
공유 버스 시스템의 다른 문제점은 많은 수의 장치들에 대한 확장 가능성의 부족이다. 상기 언급한 바와 같이, 대역폭의 양은 고정되어 있으며 (그리고 부가적인 장치들이 버스의 작동가능한 주파수를 줄이는 경우에는 감소될 수도 있다). 일단 버스에 (직접 또는 간접적으로) 부착된 장치들의 대역폭 조건들이 버스의 이용가능한 대역폭을 초과한다면, 장치는 빈번하게 불안정해질 것이다. 전체 성능 또한 저하된다.
상기 문제점들 중 하나 또는 그 이상은 분산 메모리 시스템을 이용하여 제기될 수도 있다. 분산 메모리 시스템을 이용하는 컴퓨터 시스템은 다수의 노드들을 포함한다. 두 개 또는 그 이상의 노드들이 메모리에 연결되며, 이 노드들은 모든 적절한 상호 연결을 이용하여 서로 연결된다. 예를 들어, 각 노드는 전용선들을 이용하여 각각의 다른 노드에 연결될 수도 있다. 변형적으로, 각 노드는고정된 수의 다른 노드들에 연결될 수도 있으며, 제 1 노드로부터, 하나 또는 그 이상의 중간 노드들을 통하여 제 1 노드가 직접 연결되지 않은 제 2 노드로 트랜잭션들이 루트될 수도 있다. 메모리 어드레스 공간은 각 노드 내의 메모리들을 가로질러 할당된다. 일반적으로, "노드"는 상호 연결시 트랜잭션들에 참가할 수 있는 장치이다. 예를 들어, 패킷-기반 상호 연결 노드는 다른 노드들과 패킷들을 주고 받도록 구성될 수도 있다. 특정한 트랜잭션을 수행하는 데에 하나 이상의 패킷들이 이용될 수도있다. 특정 노드는 패킷을 위한 목적지가 될 수도 있는데, 이러한 경우 노드가 정보를 수신하여 내부적으로 처리한다. 변형적으로, 특정 노드가 패킷의 목적지 노드가 아닐 경우, 특정 노드가 소스 노드로부터 목적지 노드로 패킷을 릴레이시키는 데에 이용될 수도 있다.
분산 메모리 시스템들은 공유 버스 시스템들에서의 요구(challenges)와 다른 설계 도전을 제시한다. 예를 들어, 공유 버스 시스템들은 버스 중재를 통하여 트랜잭션들의 시작을 조정한다. 이에 따라, 적절한 중재 알고리즘은 각각의 버스 참가자에게 트랜잭션들을 시작할 수 있는 기회를 준다. 버스 상에서의 트랜잭션들의 순서는 (예를 들어, 코히런시 목적을 위하여) 트랜잭션들이 수행되는 순서를 나타낼 수도 있다. 반면, 분산 시스템들에서, 노드들은 트랜잭션들을 동시에 시작할 수도 있으며, 다른 노드들에 트랜잭션들을 전송하기 위하여 상호 연결을 이용할 수도 있다. 트랜잭션들의 시작을 제어하기 위한 어떠한 중앙 메커니즘도 제공되지 않기 때문에, 이러한 트랜잭션들은 이들 간의 논리적인 충돌들(예를 들어, 동일한 어드레스로의 트랜잭션들에 대한 코히런시 충돌들)을 가질 수도 있으며, 리소스 충돌들을 경험할 수도 있다(예를 들어, 버퍼 공간이 다양한 노드들 내에서 유용하지 않을 수도 있다). 이에 따라, 정보가 노드들 간에서 계속해서 전파되며, 그리고 (트랜잭션들 간의 충돌들로 인하여 어떠한 트랜잭션들도 완료되지 않는) 데드락 상태들을 피할 수 있음을 보장하는 것이 더 어려워지게 된다. 분산 시스템에서 데드락을 피할 수 있는 방법 및 장치가 요구된다. 또한, 실행의 용이성을 강화하기 위하여 (하드웨어의 측면에서) 장치를 최소화하는 것이 바람직하다.
본 발명은 컴퓨터 시스템들의 분야에 관한 것으로서, 특히 컴퓨터 시스템들 내의 노드들 간의 상호 연결에 관한 것이다.
본 발명의 다른 목적들 및 장점들은 첨부 도면들을 참조하여 하기의 상세한 설명으로부터 좀 더 상세히 설명된다.
도 1은 컴퓨터 시스템의 일 실시예의 블록도이다.
도 2는 도 1에 도시된 두 개의 노드들의 일 실시예의 블록도로서, 이들 사이의 연결의 일 실시예를 강조한다.
도 3은 정보 패킷의 일 실시예를 도시한 블록도이다.
도 4는 코히런트 링크에 대한 커맨드 패킷의 일 실시예를 도시한 블록도이다.
도 5는 코히런트 링크에 대한 응답 패킷의 일 실시예를 도시한 블록도이다.
도 6은 데이터 패킷의 일 실시예를 도시한 블록도이다.
도 7은 코히런트 링크에 대한 패킷 정의의 일 실시예를 도시한 표이다.
도 8은 한 쌍의 가상 채널들을 도시한 블록도이다.
도 9는 한 세트의 가상 채널들의 일 실시예를 도시한 표이다.
도 10은 도 1에 도시된 처리 노드의 일 실시예를 도시한 블록도이다.
도 11은 도 10에 도시된 패킷 처리 로직의 일 실시예를 도시한 블록도이다.
도 12는 데이터 버퍼 풀 엔트리의 일 실시예를 도시한 블록도이다.
도 13은 응답 카운터 풀 엔트리의 일 실시예를 도시한 블록도이다.
도 14는 패킷 수신을 위한 도 10에 도시된 패킷 처리 로직의 이리 실시예의 작동을 나타낸 흐름도이다.
도 15는 커맨트 패킷들을 처리하기 위한 도 10에 도시된 패킷 처리 로직의 이리 실시예의 작동을 나타낸 흐름도이다.
도 16은 응답 패킷을 처리하기 위한 도 10에 도시된 패킷 처리 로직의 이리 실시예의 작동을 나타낸 흐름도이다.
도 17은 패킷을 시작하기 위한 도 10에 도시된 패킷 처리 로직의 이리 실시예의 작동을 나타낸 흐름도이다.
도 18은 버퍼 릴리스(release) 필드들을 포함하는 정보 패킷의 일 실시예를도시한 블록도이다.
도 19는 도 1 및 2에 도시된 상호 연결과 유사한 연결들을 통하여 서로 연결된 호스트 브리지 및 다수의 I/O 노드들을 포함하는 I/O 하위 시스템의 일 실시예의 블록도이다.
도 20은 넌코히런트 링크에 대한 패킷 정의의 일 실시예를 도시한 표이다.
도 21은 넌코히런트 링크에 대한 커맨트 패킷의 일 실시예의 블록도이다.
도 22는 넌코히런트 링크에 대한 응답 패킷의 일 실시예의 블록도이다.
도 23은 I/O 노드의 일 실시예의 블록도이다.
도 24는 패킷 수신을 위한 도 23에 도시된 노드 로직의 일 실시예의 작동을 도시한 흐름도이다.
도 25는 커맨드 패킷들을 처리하기 위한 도 24에 도시된 노드 로직의 일 실시예의 작동을 도시한 흐름도이다.
도 26은 응답 패킷을 처리하기 위한 도 24에 도시된 노드 로직의 일 실시예이 작동을 도시한 흐름도이다
도 27은 패킷을 시작하기 위한 도 24에 도시된 노드 로직의 일 실시예이 작동을 도시한 흐름도이다
본 발명은 다양한 변형적인 형태들을 갖지만, 이들에 대한 특정한 실시예들이 예시적으로 설명된다. 그러나, 본 발명은 도면 및 상세한 설명에 개시된 형태에 한정되지 않으며, 첨부된 청구항들에 의해 규정되는 본 발명의 원리 및 범위 내에 있는 모든 변형들, 등가물들 및 대안들을 포함한다는 것을 유념하자.
상기 설명한 문제점들은, 가상 채널들을 이용하고 이 가상 채널들에 다른 리소스들을 할당하는 컴퓨터 시스템에 의해 대부분 해결된다. 논리/프로토콜-관련 충돌들을 갖지 않는 패킷들이 가상 채널 내에 그룹화된다. 이에 따라, 개별적인 가상 채널들 내이 패킷들 사이에서 논리 충돌들을 일어나게 된다. 가상 채널 내의 패킷들은 리소스들을 공유하여 (이에 따라 리소스 충돌들을 경험할 수도 있지만), 다른 가상 채널들 내의 패킷들은 리소스들을 공유하지 않을 수도 있다. 리소스 충돌들을 경험할 수도 있는 패킷들은 논리 충돌들을 경험하지 않고, 논리 충돌들을 경험할 수도 있는 패킷들은 리소스 충돌들을 경험하지 않기 때문에, 데드락이 없이 없이 작동이 이루어질 수도 있게 된다.
또한, 각 가상 채널은 할당된 제어 패킷 버퍼들 및 데이터 패킷 버퍼들이 될 수도 있다. 제어 패킷들은 데이터 패킷들 보다 실질적으로 크기가 더 작을 수도 있으며, 더 빈번하게 발생할 수도 있다. 개별적인 버퍼들을 제공함으로써, 버퍼 공간이 효율적으로 이용될 수도 있게 된다. 만일 데이터 패킷을 지정하지 않는 제어 패킷이 수신된다면, 어떠한 데이터 패킷 버퍼 공간도 할당되지 않는다. 만일 데이터 패킷을 지정하는 제어 패킷이 수신된다면, 제어 패킷 버퍼 공간 및 데이터 패킷 버퍼 공간이 할당된다. 제어 패킷들은 종종 데이터 패킷들 보다 크기가 더 작고 더 빈번하게 일어나기 때문에, 전체 버퍼 저장 공간을 실질적으로 증가시키지 않으면서, 데이터 패킷 버퍼들내에서 보다 제어 패킷 버퍼들 내에서 더 많은 버퍼 엔트리들이 제공될 수도 있다. 그러나, 패킷 처리량이 증가될 수도 있다.
대체적으로, 컴퓨터 시스템 내에서 다수의 노드들 간에 패킷들을 루팅하는 방법이 고려된다. 제 1 제어 패킷은 다수의 노드들 중 제 1 노드에서 수신된다. 제 1 노드는 다수의 제어 패킷 버퍼들로 구성되며, 각각의 제어 패킷 버퍼는 다수의 가상 채널들 중 별개의 것들에 할당된다. 제 1 제어 패킷이 속하는 다수의 가상 채널들중 제 1 가상 채널이 결정된다. 제 1 제어 패킷은 다수의 제어 패킷 버퍼들중 제 1 제어 패킷 버퍼에 저장되며, 상기 제 1 제어 패킷 버퍼는 제 1 가상 채널에 할당된다.
또한, 제 1 노드 및 제 2 노드를 포함하는 컴퓨터 시스템이 고려된다. 제 1 노드는 제 1 제어 패킷을 전송하도록 구성된다. 제 1 노드로부터 제 1 제어 패킷을 수신하도록 결합된 제 2 노드는 다수의 제어 패킷 버퍼들을 포함한다. 다수의 제어 패킷 버퍼들 각각은 다수의 가상 채널들 각각에 할당된다. 제 2 노드는 제 1 제어 패킷이 속하는 다수의 가상 채널들중 제 1 가상 채널에 응답하여 다수의 제어 패킷 버퍼들중 제 1 제어 패킷 버퍼 내에 제 1 제어 패킷을 저장하도록 구성된다.
시스템 개요
도 1은 컴퓨터 시스템(10)의 일 실시예를 도시한다. 다른 실시예들이 또한 가능하며 고려된다. 도 1의 실시예에서, 컴퓨터 시스템(10)은 몇 개의 처리 노드들(12A, 12B, 12C 및 12D)을 포함한다. 각 처리 노드는 각 처리 노드들(12A-12D) 내에 포함된 메모리 제어기(16A-16D)를 통하여 각각의 메모리들(14A-14D)에 결합된다. 또한, 처리 노드들(12A-12D)은 처리 노드들(12A-12D) 간의 통신에 이용되는 인터페이스 로직을 포함한다. 예를 들어, 처리 노드(12A)는 처리 노드(12B)와 통신하기 위한 인터페이스 로직(18A), 처리 노드(12C)와 통신하기 위한 인터페이스 로직(18B), 및 또 다른 처리 노드(미도시)와 통신하기 위한 제 3 인터페이스 로직(18C)을 포함한다. 유사하게, 처리 노드(12B)는 인터페이스 로직들(18D, 18E 및 18F)을 포함하고; 처리 노드(12C)는 인터페이스 로직들(18G, 18H 및 18I)를 포함하며; 그리고 처리 노드(12D)는 인터페이스 로직들(18J, 18K 및 18L)을 포함한다. 처리 노드(12D)는 인터페이스 로직(18L)을 통하여 I/O 브리지(20)와 통신하도록 결합된다. 다른 처리 노드들도 동일한 방식으로 다른 I/O 브리지들과 통신한다.
처리 노드들(12A-12D)은 상호-처리 노드 통신을 위한 패킷-기반 링크를 구현한다. 본 실시예에서, 이러한 링크는 단방향 라인들의 세트들로서 구현된다(예를 들어, 라인들(24A)은 패킷들을 처리 노드(12A)로부터 처리 노드(12B)로 전송하는 데에 이용되며, 라인들(24B)은 패킷들을 처리 노드(12B)로부터 처리 노드(12A)로 전송하는 데에 이용된다). 다른 세트의 라인들(24C-24H)은 도 1에 도시된 바와 같이 다른 노드들 간에 패킷들을 전송하는 데에 이용된다. 링크는 처리 노드들 간의 통신을 위하여 캐시 코히런트 방식으로 작동되거나("코히런트 링크"), 또는 처리 노드와 I/O 브리지 간의 통신을 위하여 넌코히런트 방식으로 작동될 수도 있다("넌코히런트 링크"). 또한, 넌코히런트 링크는 I/O 버스(22)를 대신하기 위한 I/O 장치들 간의 데이지-체인(daisy-chain) 구조로서 이용될 수도 있다. 코히런트 링크들을 통한 두 개 또는 그 이상의 노드들의 상호 연결은 "코히런트 구조(coherent fabric)"로서 일컬어질 수도 있다. 유사하게, 넌코히런트 링크들을 통한 두 개 또는 그 이상의 노드들의 상호 연결은 "넌코히런트 구조"로 일컬어질 수도 있다. 한 처리 노드로부터 다른 처리 노드로 전송될 패킷은 하나 또는 그 이상의 중간 노드들을 통하여 전송될 수도 있다는 것을 유념하자. 예를 들어, 처리 노드(12A)에 의해 처리 노드(12D)로 전송되는 패킷은 도 1에 도시된 바와 같이 처리 노드(12B) 또는 처리 노드(12C)를 통과할 수도 있다. 모든 적절한 루팅 알고리즘이 이용될 수도 있다. 컴퓨터 시스템(10)의 다른 실시예들은 도 1에 도시된 실시예에서 보다 더 많거나 또는 더 적은 처리 노드들을 포함할 수도 있다.
메모리 제어기 및 인터페이스 로직 외에, 처리 노드들(12A-12D)은 하나 또는 그 이상의 프로세서들을 포함할 수도 있다. 대체적으로 설명하여, 처리 노드는 적어도 하나의프로세서를 포함하며, 그리고 바람직한 경우 메모리 및 다른 로직과 통신하기 위한 메모리 제어기를 선택적으로 포함할 수도 있다.
메모리들(14A-14D)은 모든 적절한 메모리 장치들을 포함할 수도 있다.예를 들어, 메모리들(14A-14D)은 하나 또는 그 이상의 RAMBUS DRAMs (RDRAMs), 동기DRAMs (SDRAMs), 정적 RAM 등을 포함할 수도 있다. 컴퓨터 시스템(10)의 어드레스 공간은 메모리들(14A-14D) 사이에 분할된다. 각 처리 노드들(12A-12D)은 어떠한 어드레스들이 어떠한 메모리들(14A-14D)에 맵핑되는 지를 결정하고, 이에 따라 처리 노드들(12A-12D)에 특정 어드레스에 대한 메모리 요구가 루팅되어야 한다는 것을 결정하는 데에 이용되는 메모리 맵을 포함할 수도 있다. 일 실시예에서, 컴퓨터 시스템(10) 내의 어드레스에 대한 코히런시 포인트는 어드레스에 해당하는 메모리 저장 바이트들에 결합된 메모리 제어기들(16A-16D)이다. 다시 말해, 메모리 제어기들(16A-16D)은 해당하는 메모리들(14A-14D)에 대한 각 메모리 액세스가 캐시 코히런트 방식으로 일어나도록 보장하는 책임이 있다. 메모리 제어기들(16A-16D)은 메모리들(14A-14D)로의 인터페이싱을 위한 제어 회로를 포함할 수도 있다. 또한, 메모리 제어기들(16A-16D)은 메모리 요구들을 큐잉하기 위한 메모리 큐들을 포함할 수도 있다.
일반적으로, 인터페이스 로직들(18A-18D)은 링크로부터 패킷들을 수신하고 링크를 통하여 전송될 패킷들을 버퍼링하는 버퍼들을 포함할 수도 있다. 컴퓨터 시스템(10)은 패킷들을 전송하는 데에 모든 적절한 흐름 제어 메커니즘을 이용할 수도 있다. 예를 들어, 일 실시예에서, 각 노드는 각 인터페이스 로직이 연결된 링크의 다른 단부에서 수신기 내의 각 타입의 버퍼의 총수를 저장한다. 수신 노드가 패킷을 저장할 빈(free) 버퍼를 갖지 않는 한, 노드는 패킷을 전송하지 않는다. 패킷을 전방으로 루팅시킴으로써 수신 버퍼가 비게 되면, 수신 인터페이스 로직은 버퍼가 비었음을 나타내는 메세지를 송신 인터페이스 로직으로 전송한다. 이러한 메커니즘은 "쿠폰-기반(coupon-based)" 시스템으로 일컬어질 수도 있다.
도 2는 처리 노드들(12A 및 12B)을 도시한 블록도로서, 이들 간의 링크들의 일 실시예를 좀 더 상세히 도시한다. 다른 실시예들이 또한 가능하며 고려된다. 도 2의 실시예에서, 라인들(24A)은 클록 라인(24AA), 제어 라인(24AB), 및 제어/어드레스/데이터 버스(24AC)를 포함한다. 유사하게, 라인들(24B)은 클록 라인(24BA), 제어 라인(24BB), 및 제어/어드레스 데이터 버스(24BC)를 포함한다.
클록 라인은 제어 라인 및 제어/어드레스/데이터 버스에 대한 샘플 포인트를 나타내는 클록 신호를 전송한다. 일 특정 실시예에서는, 데이터/제어 비트들이 클록 신호의 각 에지(즉, 라이징 에지 및 폴링 에지)로 전송된다. 따라서, 라인당 두 개의 데이터 비트들이 클록 주기 마다 전송될 수도 있다. 라인당 한 비트를 전송하는 데에 이용되는 시간량은 본원에서 "비트 타임"으로 일컬어진다. 상기 설명된 실시예는 클록 주기당 두 개의 비트 타임들을 필요로 한다. 패킷은 두 개 또는 그 이상의 비트 타임들을 가로질러 전송될 수도 있다. 제어/어드레스/데이터 버스의 폭에 따라 다수의 클록 라인들이 이용될 수도 있다. 예를 들어, 두 개의 클록 라인들이 32 비트 제어/어드레스/데이터 버스에 이용될 수도 있다(제어/어드레스/데이터 버스의 절반은 클록 라인들중 하나에 관련되며, 제어/어드레스/데이터 버스의 나머지 절반은 클록 라인들중 다른 하나에 관련된다).
제어 라인은 제어/어드레스/데이터 버스를 통하여 전송되는 데이터가 제어 패킷의 비트 타임인지, 아니면 데이터 패킷의 비트 타임인지를 나타낸다. 제어 라인은 제어 패킷의 비트 타임을 나타내기 위해 어서트되며, 데이터 패킷의 비트 타임을 나타내기 위해 디어서트된다. 특정한 제어 패킷들은 데이터 패킷이 다음에 온다는 것을 나타낸다. 데이터 패킷은 해당하는 제어 패킷의 바로 다음에 올 수도 있다. 일 실시예에서, 다른 제어 패킷들은 데이터 패킷의 전송을 방해할 수도 있다. 이러한 방해는 데이터 패킷을 전송하는 동안 다수의 비트 타임들에 대하여 제어 라인을 어서트하고, 제어 라인이 어서트되는 동안 제어 패킷의 비트 타임들을 전송함으로써 수행될 수도 있다. 데이터 패킷을 방해하는 제어 패킷들은 데이터 패킷이 뒤따를 것임을 나타내지 않을 수도 있다. 또한, 일 실시예에서, 제어 라인은 스톨(stall) 비트 타임들을 나타내기 위해 제어 패킷을 전송하는 동안 디어서트될 수도 있다. 이후의 제어 라인의 리어서션은 제어 패킷이 계속되고 있음을 나타낼 수도 있다.
제어/어드레스/데이터 버스는 데이터/제어 비트들을 전송하기 위한 한 세트의 라인들을 구비한다. 각 처리 노드 또는 I/O 브리지는 설계 선택에 따라 지원되는 수의 라인들중 어떠한 하나를 이용할 수도 있다. 다른 실시예들은, 바람직한 경우 다른 크기를 갖는 제어/어드레스/데이터 버스를 지원할 수도 있다.
일 실시예에 따르면, 커맨드/어드레스/데이터 버스 라인들 및 클록 라인은 (논리 1이 라인 상에서 저전압으로 표시되고, 논리 0이 고전압으로 표시되는) 반전된 데이터를 전달할 수도 있다. 변형적으로, 라인들은 (논리 1이 라인 상에서 고전압으로 표시되고, 논리 0이 저전압을 표시되는) 비-반전된 데이터를 전달할 수도 있다.
도 3 내지 6은 코히런트 링크의 일 실시예에서 이용되는 예시적인 패킷들을도시한다. 도 3 내지 5는 제어 패킷들을 도시하고, 도 6은 데이터 패킷을 도시한다. 다른 실시예들은, 바람직한 경우 다른 패킷 정의를 이용할 수도 있다. 각 패킷은 "비트 타임" 표제로 열거된 일련의 비트 타임들로서 도시된다. 패킷의 비트 타임들은 리스트된 비트 타임 순서에 따라 전송된다. 도 3 내지 6은 8 비트 제어/어드레스/데이터 버스 구현을 위한 패킷들을 도시한다. 따라서, 각 비트 타임은 7에서 0으로 번호가 매겨진 8 비트들을 포함한다. 도면들에 어떠한 값도 제공되지 않는 비트들은 주어진 패킷을 위하여 지정된 것이거나, 또는 패킷-지정 정보를 전송하는 데에 이용될 수도 있다. 점선들로 표시된 필드들은 특정한 타입의 모든 패킷들 내에 포함되지 않을 수도 있는 임의 필드들을 나타낸다.
대체적으로 말하여, 패킷은 두 개의 노드들(패킷을 전송하는 시작 노드 및 패킷을 수신하는 목적지 노드) 간의 통신이다. 시작 노드 및 목적지 노드는 패킷이 일부가 되는 트랜잭션의 소스 및 타겟 노드와 다를 수도 있으며, 또는 각 노드는 소스 노드 또는 타겟 노드가 될 수도 있다. 제어 패킷은 트랜잭션에 대한 제어 정보를 전달하는 패킷이다. 특정한 제어 패킷은 데이터 패킷이 뒤따른다는 것을 지정한다. 데이터 패킷은 트랜잭션에 해당하는 데이터 및 제어 패킷의 지정에 해당하는 데이터를 전달한다.
도 3은 정보 패킷(info packet)(30)을 도시한다. 정보 패킷(30)은 8 비트 링크 상에 네 개의 비트 타임들을 포함한다. 본 실시예에서, 커맨드 엔코딩은 비트 타임 1 동안 전송되며 6 비트를 포함한다. 도 4 및 5에 도시된 다른 각 제어 패킷은 비트 타임 1 동안 동일한 비트 위치들에서 커맨드 엔코딩을 포함한다. 정보 패킷(30), 메세지들이 메모리 어드레스를 포함하지 않을 때, 처리 노드들 간에 메세지를 전송하는 데에 이용된다. 또한, 정보 패킷들은 쿠폰-기반 흐름 제어 메커니즘을 이용하여 빈 버퍼의 수를 전송하는 데에 이용될 수도 있다.
도 4는 커맨드 패킷(32)을 도시한다. 커맨드 패킷(32)은 8 비트 링크 상에 8개의 비트 타임들을 포함한다. 커맨드 엔코딩은 비트 타임 1 동안 전송된다. 소스 유닛 번호 또한 비트 타임 1 동안 전송되며, 소스 노드 번호는 비트 타임 2 동안 전송된다. 노드 번호는 컴퓨터 시스템(10) 내의 처리 노드들(12A-12D)중 하나를 명백히 확인하며, 컴퓨터 시스템(10)을 통하여 패킷을 루트시키는 데에 이용된다. 유닛 번호는 트랜잭션의 소스가 되거나(소스 유닛 번호), 또는 트랜잭션의 목적지가 되는(목적지 유닛 번호) 노드 내의 유닛을 확인한다. 유닛들은 메모리 제어기들, 캐시들, 프로세서들 등을 포함할 수도 있다. 선택적으로, 커맨드 패킷(32)은 비트 타임 2 내에 목적지 노드 번호 및 목적지 유닛(또는, 다른 어떠한 패킷들에 대해서는, 타겟 노드 번호 및 타겟 유닛)을 포함할 수도 있다. 만일 목적지 노드 번호가 포함된다면, 이는 패킷을 목적지 노드로 루트시키는 데에 이용된다. 또한, 많은 커맨드 패킷들은 비트 타임 3 내에, 소스 노드 및 소스 유닛과 함께, 패킷을 그것이 일부가 되는 특정 트랜잭션에 링크시킬 수도 있는 소스 택을 포함할 수도 있다. 비트 타임 5 내지 8은 트랜잭젼에 의해 영향을 받는 최상위 비트들을 전송하는 데에 이용된다. 커맨드 패킷(32)은 트랜잭션에 의해 영향을 받는 메모리 어드레스를 전달하는 커맨드들에 대한 트랜잭션을 수행하는 중인 커맨드들을 전송할 뿐 아니라, 트랜잭션(예를 들어, 판독 또는 기록 트랜잭션)을 시작하는 데에 이용될 수도 있다. 일반적으로, 커맨드 패킷은 목적지 노드에 의해 수행될 연산을 나타낸다.
패킷(32) 내의 규정되지 않은 일부 필드들은 패킷-지정 정보를 전달하기 위하여 많은 커맨드 패킷들 내에서 이용될 수도 있다. 또한, 비트 타임 4는 트랜잭션에 의해 영향을 받는 메모리 어드레스의 최하위 비트들을 전송하기 위하여 일부 커맨드들에서 이용될 수도 있다.
도 5는 응답 패킷(34)을 도시한다. 응답 패킷(34)은 커맨드 엔코딩, 목적지노드 번호 및 목적지 유닛 번호를 포함한다. 목적지 노드 번호는 응답 패킷에 대한 목적지 노드(어떠한 경우들에서는, 트랜잭션의 소스 노드 또는 타겟 노드가 될 수도 있는)를 확인한다. 목적지 유닛 번호는 목적지 노드 내의 목적지 유닛을 확인한다. 다양한 타입의 응답 패킷들은 부가적인 정볼르 포함할 수도 있다. 예를 들어, 판독 응답 패킷은 뒤따르는 데이터 패킷 내에 제공되는 판독 데이터의 양을 나타낼 수도 있다. 프로브 응답들은 요구된 캐시 블록의 카피가 (비트 타임 4 내의 임의 공유 비트 "Sh"를 이용하여) 프로브된 노드에 의해 보유되는 지의 여부를 나타낼 수도 있다. 일반적으로, 응답 패킷(34)은 트랜잭션에 의해 영향을 받는 메모리 어드레스의 전송을 요구하지 않는 트랜잭션을 전달하는 동안 커맨드들에 대하여 이용된다. 또한, 응답 패킷(34)은 트랜잭션을 종료시키기 위하여 포지티브 승인 패킷을 전송하는 데에 이용될 수도 있다. 커맨드 패킷(32)과 유사하게, 응답 패킷(34)은 (도 5에서 임의 필드들로서 도시된) 많은 타입의 응답들에 대한 소스 노드 번호, 소스 유닛 번호, 및 소스 택을 포함할 수도 있다.
도 6은 데이터 패킷(36)을 도시한다. 데이터 패킷(36)은 도 6의 실시예에서8 비트 링크 상에 8개의 비트 타임들을 포함한다. 데이터 패킷(36)은 전송되는 데이터의 양에 따라 다른 수의 비트 타임들을 포함할 수도 있다. 예를 들어, 일 실시예에서, 캐시 블록은 64 바이트들, 및 이에 따라 8 비트 링크 상에 64개의 비트 타임들을 포함한다. 다른 실시예들은, 바람직한 경우 다른 크기를 갖는 캐시 블록을 규정할 수도 있다. 또한, 데이터는 넌-캐시어블 판독 및 기록에 대하여 캐시 블록 크기들 이하로 전송될 수도 있다. 캐시 블록 크기 이하의 데이터를 전송하는 데이터 패킷들은 더 적은 비트 타임들을 이용한다. 일 실시예에서, 넌-캐시 블록 크기의 데이터 패킷들은, 데이터 패킷 내에서 어떤 데이터 바이트들이 유효한지를 나타내기 위하여 데이터를 전송하기 전에 바이트 인에이블의 몇 개의 비트 타임들을 전송할 수도 있다. 또한, 캐시 블록 데이터는 첫 번째 요구 어드레스의 최하위 비트에 의해 어드레스되는 쿼드워드(quadword)에 리턴될 수도 있으며, 이후 나머지 쿼드워드들의 인터리브 리턴이 이어진다. 일 실시예에서, 쿼드워드는 8 바이트들을 포함한다.
도 3 내지 6은 8 비트 링크에 대한 패킷들을 도시한다. 16 및 32 비트 링크들에 대한 패킷들은 도 3 내지 6에 도시된 연속적인 비트 타임들을 연결시킴으로써 형성될 수도 있다. 예를 들어, 16 비트 링크 상의 패킷의 비트 타임 1은 8 바트 링크 상에서 비트 타임들 1 및 2 동안 전송되는 정보를 포함할 수도 있다. 유사하게, 32 비트 링크 상의 패킷의 비트 타임 1은 8 비트 링크 상의 비트 타임들 1 내지 4 동안 전송되는 정보를 포함할 수도 있다. 하기의 식 1 및 2는 8 비트 링크로부터의 비트 타임들에 따른, 16 비트 링크의 비트 타임 1 및 32 비트 링크의 비트 타임 1의 형성을 도시한다.
도 7은 컴퓨터 시스템(10) 내의 코히런트 링크의 예시적인 일 실시예에 따라 이용되는 패킷들을 도시한 표(38)이다. 다른 모든 적절한 패킷들 및 커맨드 필드 엔코딩의 세트들을 포함하는, 다른 실시예들이 또한 가능하며 고려된다. 표(38)는 각 커맨드에 할당된 커맨트 엔코딩들을 도시한 커맨드 코드 칼럼과, 커맨드를 명명하는 커맨드 칼럼과, 그리고 어떠한 커맨드 패킷들(30-34)(및, 지정된 곳에서는 데이터 패킷(36))이 그 커맨드에 대하여 이용되는 지를 나타내는 패킷 타입 칼럼을 포함한다.
판독 트랜잭션은 ReadSized, RdBlk, RdBlkS 또는 RdBlkMod 커맨드들중 하나를 이용하여 시작된다. ReadSized 커맨드는 넌-캐시어블 판독들 또는 크기에 있어서 캐시 블록이 아닌 데이터의 판독에 이용된다. 판독될 데이터의 양은 ReadSized 커맨드 패킷으로 엔코드된다. 캐시 블록의 판독에 있어서, RdBlk 커맨드는, (i) 캐시 블록의 기록가능한 카피가 바람직하지 않다면, RdBlkMod 커맨드가 이용될 수도 있다; (ii) 캐시 블록의 카피가 바람직하지만 블록을 변형하는 어떠한 의도도 알려져있는 않는 경우에 이용될 수도 있는데, 이러한 경우 RdBlkS 커맨드가 이용될 수도 있다. RdBlkS 커맨드는 특정한 타입의 코히런시 구성(예를 들어, 디렉토리-기반 코히런시 구성)을 좀 더 효율적으로 하는 데에 이용될 수도 있다. 일반적으로, 적절한 판독 커맨드가 트랜잭션을 시작하는 소스로부터, 캐비 블록에 해당하는 메모리를 소유하는 타겟 노드로 전송된다. 타겟 노드 내의 메모리 제어기는 (트랜잭션들의 소스로의 프로브 응답들의 리턴을 나타내는) Probe 커맨드를 시스템 내의 다른 노드들로 전송하여, 노드들 내의 캐시 블로의 상태를 변경하고, 캐시 블록의 갱신된 카피를 포함하는 노드가 캐시 블록을 소스 노드로 전송하게 함으로써 코히런시를 유지한다. Probe 커맨드를 수신하는 각 노드는 ProbeResp 응답 패킷을 소스 노드로 전송한다. 프로브 노드가 판독 데이터의 갱신된 카피(즉, 더티 데이터)를 갖는 다면, 그 노드는 RdResponse 응답 패킷 및 더티 데이터를 전송한다. 더티 데이터를 전송하는 노드는 또한, 요구된 판독 데이터의 타겟 노드에 의한 전송을 취소하고자 하는 시도시, MemCancel 응답 패킷을 타겟 노드로 전송한다. 또한, 타겟 노드 내의 메모리 제어기는 데이터 패킷 내의 데이터가 그 뒤를 따르는 RdResponse 응답 패킷을 이용하여 요구된 판독 데이터를 전송한다. 만일 소스 노드가 프로브 노드로부터 RdResponse 응답 패킷을 수신한다면, 그 판독 데이터가 이용된다. 그렇지 않으면, 타겟 노드로부터의 데이터가 이용된다. 일단 각각의 프로브 응답들 및 판독 데이터가 소스 노드에 수신되면, 소스 노드는 타겟 노드로 트랜잭션 종료의 포지티브 승인으로서 SrcDone 응답 패킷을 전송한다.
기록 트랜잭션은 해당하는 데이터 패킷이 그 뒤를 따르는 WrSized 또는 VicBlk 커맨드를 이용하여 시작된다. WrSized 커맨드는 넌-캐시어블 기록들 또는 크기에 있어서 캐시 블록이 아닌 다른 데이터의 기록들에 이용된다. WrSized 커맨드들에 대한 코히런시를 유지하기 위하여, 타겟 노드 내의 메모리 제어기는 )트랜잭션의 타겟 노드에 대한 프로브 응답의 리턴을 나타내는) Probe 커맨드들을 시스템 내의 각각의 다른 노드들로 전송한다. Probe 커맨드들에 응답하여, 각각의 프로브 노드는 ProbeResp 응답 패킷을 타겟 노드로 전송한다. 프로브 노드가 더티 데이터를 저장하고 있다면, 프로브 노드는 RdResponse 응답 패킷 및 더티 데이터에 응답한다. 이러한 방식에 있어서, WrSized 커맨드에 의해 갱신된 캐시 블록은 WrSized 커맨드에 의해 제공되는 데이터와의 병합을 위하여 메모리 제어기로 리턴된다. 각각의 프로브 노드들로부터 프로브 응답들을 수신하게 되면, 메모리 제어기는 TgtDone 응답 패킷을 소스 노드로 전송하여 트랜잭션 종료에 대한 포지티브 승인을 제공한다. 소스 노드는 SrcDone 응답 패킷에 응답한다.
노드에 의해 변형되었으며 노드 내의 캐시 내에 대체되는 빅팀 캐시 블록이 VicBlk 커맨드를 이용하여 메모리로 다시 전송된다. VicBlk 커맨드에 대하여 프로브들을 요구되지 않는다. 따라서, 타겟 메모리 제어기가 빅팀 블록 데이터를 메모리로 전달하도록 준비될 때, 타겟 메모리 제어기는 TgtDone 응답 패킷을 빅팀 블록의 소스 노드로 전송한다. 소스 노드는 데이터가 전송되어야 하는 지를 나타내기 위하여 SrcDone 응답 패킷에 응답하거나, 또는 (예를 들어, 중간 프로브에 응답하여) 데이터가 VicBlk 커맨드의 전송 및 TgtDone 응답 패킷의 수신 간에서 무효화되었는 지를 나타내기 위하여 MemCancel 응답 패킷에 응답한다.
기록이 불가능한 상태(non-writeable)에서 소스 노드에 의해 저장된 캐시 블록에 대한 기록 허가를 얻기 위하여, ChangetoDirty 커맨드 패킷이 소스 노드에 의해 전송될 수도 있다. ChangetoDirty 커맨드에 의해 시작된 트랜잭션은 타겟 노드가 데이터를 리턴시키지 않는 것을 제외하고는 판독과 유사하게 작동할 수도 있다. ValidateBlk 커맨드는 소스 노드가 전체 캐시 블록을 갱신하고자 하는 경우, 소스 노드에 의해 저장되지 않은 캐시 블록에 대한 기록 허가를 얻는 데에 이용될 수도있다. 이러한 트랜잭션에 대하여 어떠한 데이터도 소스 노드로 전송되지 않지만, 만일 그렇지 않으면 판독 트랜잭션과 유사하게 작동한다.
Nop info 패킷은, 예를 들어 노드들 간에 빈 버퍼 표시를 전송하는 데에 이용될 수도 있는 비연산 패킷이다. Broadcast 커맨드는 노드들 간에 메세지들을 방송하는 데에 이용될 수도 있다(예를 들어, Broadcast 커맨드는 인터럽트들을 분배하는 데에 이용될 수도 있다). 마지막으로, sync info 패킷은, 구조의 동기가 바람직한 경우들(예를 들어, 에러 검출, 리셋, 초기화 등)에 대하여 이용될 수도 있다.
표(38)는 또한 가상 채널 칼럼(Vchan)을 포함한다. 가상 채널 칼럼은 각 패킷이 이동하는(즉, 각 패킷이 속해 있는) 가상 채널을 나타낸다. 본 실시예에서는, 세 개의 가상 채널들: 커맨드들(C), 응답들(R), 및 프로브들(P)이 규정된다. 이제, 가상 채널들에 대하여 좀 더 상세히 설명한다. info 패킷들은 인접하는 노드들 간의 통신에 이용되며, 이에 따라 본 실시예에서는 가상 채널들에 할당되지 않을 수도 있다는 것을 유념하자.
가상 채널들
도 8은 가상 채널들을 도시한 블록도이다. 도 8에서는, 두 개의 가상 채널들(가상 채널들(40A-40B))이 도시된다. 각 처리 노드들(12A-12D)은 가상 채널들(40A-40B)에 결합된다. 도 8은 단지 예시적으로 두 개의 가상 채널들을 도시한다. 다른 실시예들은 모든 적절한 수의 가상 채널들을 이용할 수도 있다. 예를 들어, 컴퓨터 시스템(10)의 실시예는 하기에서 설명되는 도 9에서와 같이 네 개의 가상 채널들을 이용할 수도 있다.
대체적으로 말하여, "가상 채널"은 다양한 처리 노드들 간에 패킷들을 전달하는 통신 경로이다. 각 가상 채널은 다른 가상 채널들과 리소스-독립적이다. (즉, 한 가상 채널 내에서 이동하는 패킷들은 일반적으로 물리적인 전송 측면에서, 다른 가상 채널 내의 패킷들의 존재 또는 부재에 의해 영향을 받지 않는다. 패킷들은 패킷 타입을 기초로 가상 채널에 할당된다. 동일한 가상 채널 내의 패킷들은 서로의 전송에 의해 물리적으로 충돌할 수도 있지만(즉, 동일한 가상 채널 내의 패킷들은 리소스 충돌을 경험할 수도 있지만), 다른 가상 채널 내의 패킷들의 전송과는 물리적으로 충돌하지 않을 수도 있다.
특정한 패킷들은 다른 패킷들과 논리적으로 충돌할 수도 있다(즉, 프로토콜 이유, 코히런시 이유, 또는 다른 이유로 인하여, 한 패킷이 다른 패킷과 논리적으로 충돌할 수도 있다). 만일 논리/프로토콜 이유에 대하여, 제 2 패킷이 그의 목적지 노드에 도달하기 전에 제 1 패킷이 그의 목적지에 도달해야 한다면, 제 2 패킷이 (충돌 리소스들을 점유함으로써) 제 1 패킷의 전송을 물리적으로 차단하는 경우, 컴퓨터 시스템은 데드락될 수 있게 된다. 제 1, 2 패킷들을 개별적인 가상 채널들에 할당함으로써, 그리고 개별적인 가상 채널들 내의 패킷들의 서로의 전송을 차단하지 않도록 컴퓨터 시스템 내에서 전송 매체를 실행시킴으로써, 데드락이 없이 작동된다. 다른 가상 채널들로부터의 패킷들은 동일한 물리적인 링크들(예를 들어, 도 1의 라인들(24))을 통하여 전송된다는 것을 유념하자. 그러나, 수신 버퍼는 전송 이전에 이용가능하기 때문에, 가상 채널들은 이러한 공유 리소스를 이용하는 동안 조차도 서로를 차단하지 않는다.
한 관점에서, 각각의 다른 패킷 타입(예를 들어, 각각의 다른 커맨드 엔코딩)이 그 자신의 가상 채널에 할당될 수 있다. 그러나, 가상 채널들이 물리적으로 충돌하지 않음을 보장하는 하드웨어는 가상 채널들의 수에 따라 증가한다. 예를 들어, 일 실시예에서, 각 가상 채널에 개별적인 버퍼들이 할당된다. 이러한 개별적인 버퍼들은 각 가상 채널에 대하여 이용되기 때문에, 한 가상 채널로부터의 패킷들은 (패킷들이 다른 버퍼들 내에 위치되기 때문에) 다른 가상 채널로부터의 패킷들과 물리적으로 충돌하지 않는다. 그러나, 버퍼들의 수는 가상 채널들의 수에 비례한다. 따라서, 논리/프로토콜 형태로 충돌하지 않는 다양한 패킷 타입들을 결합시킴으로써 가상 채널들의 수를 줄이는 것이 바람직하다. 이러한 패킷들이 동일한 가상 채널 내에서 이동할 때에 서로 물리적으로 충돌하는 동안, 논리적인 충돌의 부족(lack)은 리소스 충돌이 데드락없이 해결될 수 있게 한다. 유사하게, 개별적인 가상 채널들 내에서 서로 논리적으로 충돌하는 패킷들을 유지하게 되면, 패킷들 간에 어떠한 리소스 충돌도 없게 한다. 따라서, 논리적인 충돌은, 완료된 패킷을 먼저 진행시킴으로써 패킷들 간의 리소스 충돌의 부족(lack)을 통하여 해결된다.
일 실시예에서, 특정 소스 노드로부터 특정 목적지 노드로, 코히런트 링크 상에서 특정 가상 채널 내에서 이동하는 패킷들은 순서 대로 유지된다. 그러나, 다른 가상 채널들 내에서 이동하는, 특정 소스 노드로부터 특정 목적지 노드로의 패킷들은 순서대로 배열되지 않는다. 유사하게, 특정 소스 노드로부터 다른 목적지 노드들로, 또는 다른 소스 노드들로부터 동일한 목적지 노드로의 패킷들은 (동일한 가상 채널 내에서 이동한다고 할지라도) 순서대로 배열되지 않는다.
가상 채널들은 코히런트 구조 상에, 그리고 넌코히런트 구조 상에 물리적으로 맵핑된다(도 19 참조). 따라서, 다양한 가상 채널들 내에서 이동하는 패킷들은 단방향 링크들 상에서 물리적으로 전송된다. 패킷들은 소스 및 목적지 간에서 중간 노드들을 통하여 이동할 수도 있다. 예를 드렁, 노드(12A)로부터 노드(12D)로 이동하는 패킷들은 노드들(12B 및 12C)을 통과할 수도 있다. 다른 가상 채널들 내에서 이동하는 패킷들은 컴퓨터 시스템(10)을 통하여 개별적으로 루트될 수도 있다. 예를 들어, 노드(12A)로부터 노드(12D)로 제 1 가상 채널 내에서 이동하는 패킷들은 노드(12B)를 통과할 수도 있으며, 노드(12A)로부터 노드(12D)로 제 2 가상 채널 내에서 이동하는 패킷들은 노드(12C)를 통과할 수도 있다. 각 노드는 다른 가상 채널들 내의 패킷들이 서로 물리적으로 충돌하지 않도록 보장하는 회로를 포함한다. 넌코히런트 구조에서, I/O 노드로부터의 패킷들은 I/O 노드와 호스트 브리지 간에서 각 I/O 노드를 통과할 수도 있다(도 19 참조). I/O 노드들은 도 8에 도시된 것과 동일한 방식으로 가상 채널들에 결합될 수도 있다.
하기에서 좀 더 상세히 설명되는 한 특정 실시예에서, 제어 패킷 버퍼들이 각 가상 채널에 할당되어 그 가상 채널 내에서 이동하는 제어 패킷들을 버퍼링한다. 개별적인 데이터 패킷 버퍼들이 또한, 데이터 패킷들을 전달할 수도 있는 각 가상 채널에 할당된다. 제어 패킷 버퍼들(이의 각 엔트리는 비교적 적은 수의 비트 타림들을 포함할 수도 있음)과 데이터 패킷 버퍼들(이의 각 엔트리는 캐시 블록을 보유하기 위한 비교적 많은 수의 비트 타림들을 포함할 수도 있음)을 분리함으로써, 적절한 데이터 저장 공간을 여전히 제공하면서 버퍼 공간이 절약될 수도 있게된다. (모든 데이터 패킷들은 해당하는 제어 패킷을 갖지만, 모든 제어 패킷들이 해당하는 데이터 패킷을 갖는 것은 아니기 때문에), 데이터 패킷 버퍼들 보다 제어 패킷 버퍼들이 좀 더 많이 구현될 수도 있다. 생산량은 버퍼 공간을 비교적 효율적으로 이용하면서 높아진다.
도 9는 컴퓨터 시스템(10)의 일 실시예에 따라 규정된 가상 채널들을 도시하는 표(42)이다. 다른 실시예들이 또한 가능하며 고려된다. 도시된 실시예에서는, 세 개의 가상 채널들이 규정된다. 도 7은 코히런트 링크에 대하여 이러한 가상 채널들에 속하는 패킷들을 도시하며, 도 20은 넌코히런트 링크에 대하여 이러한 가상 채널들에 속하는 패킷들을 도시한다.
커맨드 가상 채널은 커맨드 패킷들 (및 해당하는 데이터 패킷들)에 이용된다. 일반적으로, 커맨드들은 트랜잭션들을 시작하며, 이에 따라 커맨드는 부가적인 커매드 패킷들의 전송을 야기시키지 않는다. 또한, 다양한 커맨드 패킷들은 서로 논리/프로토콜 충돌되지 않는데, 이는 이들이 목적지(트랜잭션의 타겟)에 이를 때 까지, 이들 간에 어떠한 순서도 없기 때문이다. 따라서, 커맨드 패킷들은 하나의 가상 채널에 포함될 수도 있다.
커맨드들은 (코히런트 구조내에서 코히런시를 유지하는) 프로브 커맨드 패킷들 및 (데이터를 전송하고 트랜잭션들이 포지티브 승인을 제공하는) 응답 패킷들을 발생시킨다. 따라서, 프로브 패킷들 및 응답 패킷들은 (리소스 충돌들 및 논리 충돌들이 데드락을 생성하는 것을 막기 위하여) 커맨드들처럼 동일한 가상 채널 내에 포함되지 않는다. 또한, 프로브 패킷들은 프로브 응답 및 판독 응답 패킷을 발생시키며, 이에 따라 응답 패킷들로부터 개별적인 가상 채널 내에 위치된다.
응답 패킷들은 또한 부가적인 응답 패킷들을 발생시킬 수도 있다(예를 들어, SrcDone 및 TgtDone는 서로를 발생되게 할 수도 있다). 이에 따라, 응답 패킷들이 이들을 동일한 가상 채널 내에 위치시킴으로써 다른 응답 패킷들 간의 논리적인 충돌을 생성할 수 있게 된다. 그러나, 다수의 응답 가상 채널들을 제공하는 것은 부가적인 가상 채널들을 처리하기 위한 증가된 리소스 필요물들(예를 들어, 버퍼들)로 인하여 바람직하지 않을 수도 있다. 응답 패킷들은 (예를 들어, 커맨드 패킷에 응답하여 발생된 프로브를 통하여) 직접 또는 간접적으로, 커맨드 패킷의 결과가 된다. 노드들(12A-12D) (및 하기 도시되는 I/O 노드)는, 커맨드 패킷에 의해 트랜잭션을 시작하기 전에, 트랜잭션 동안 빌생될 수도 있는 (모든 응답 데이터 패킷들을 포함하는) 응답 패킷드를 처리하기 위한 충분한 리소스들을 할당하도록 구성된다. 유사하게, 프로브 커맨드 패킷을 발생시키기 전에, 노드는 (응답 패킷이 그 노드로 리턴되는 경우), 프로브 응답 패킷들을 처리하기 위한 충분한 리소스들을 할당하도록 구성된다. 이러한 방식에서, 모든 응답 패킷들은 목적지 노드에 의해 수신된다. 따라서, 응답 패킷들은 하나의 응답 가상 채널 내에 통합될 수도 있게 된다. 응답 패킷들 (및 해당하는 데이터 패킷들)은 응답 가상 채널 내에서 이동한다.
마지막으로, 프로브 커맨드 패킷들은 프로브 가상 채널 내에서 이동한다. 프로브들은 메모리 위치의 다양한 캐시 카피들 및 메모리 위치 그 자체 간의 코히런시를 유지하는 데에 이용된다. 메모리 제어기에 의해 처리되는 제 1 커맨드 패킷에 해당하는 코히런시 작동들은 이후의 커맨드 패킷들이 완료되기 전에 완료될 필요가있을 수도 있다. 예를 들어, 만일 메모리 제어기의 큐가 동일한 캐시 블록에 대한 커맨드들로 가득차 있다면, 제 1 커맨드가 완료될 때 까지 메모리 제어기에서 어떠한 부가적인 커맨드 패킷들의 처리도 일어나지 않는다. 따라서, 프로브 커맨드 패킷들 (및 응답들)이 개별적인 가상 채널들에 제공되어, 다른 가상 채널들 내의 패킷들과의 리소스 충돌이 프로브 커맨드 패킷들을 막지 못하게 된다.
표(42)는 또한, 가상 채널들이 적용가능한 컴퓨터 시스템(10) 내의 링크들(코히런트 노드들 간의 코히런트 링크들, 및 넌-코히런트 노드들 간의 넌-코히런트 링크들)의 형태를 나타낸다. 넌-코히런트 및 코히런트 링크들은 커맨드 및 응답 가상 채널들을 지원한다. 넌-코히런트 링크들은 (프로브 커맨드 패킷들이 보장하는 데에 이용되는) 코히런시를 지원하며, 이에 따라 프로브 가상 채널은 지원하지 않을 수도 있다.
가상 채널들 - 코히런트 구조
도 10은 예시적인 처리 노드(12A)의 일 실시예의 블록도를 도시한다. 다른 처리 노드들(12B-12D)도 유사하게 구성될 수도 있다. 다른 실시예들이 또한 가능하며 고려된다. 도 10의 실시예에서, 처리 노드(12A)는 인터페이스 로직들(18A, 18B 및 18C)과 메모리 제어기(16A)를 포함한다. 또한, 처리 노드(12A)는 프로세서 코어(52), 캐시(50), 및 패킷 처리 로직(58)을 포함하며, 그리고 제 2 프로세서 코어(56) 및 제 2 캐시(54)를 선택적으로 포함한다. 인터페이스 로직들(18A-18C)은 패킷 처리 로직(58)에 결합된다. 프로세서 코어들(52 및 56)은 각각 캐시들(50 및 54)에 결합된다. 캐시들(50 및 54)은 패킷 처리 로직(58)에 결합된다. 패킷 처리로직(58)은 메모리 제어기(16A)에 결합된다.
일반적으로, 패킷 처리 로직(58)은 처리 노드(12A)가 결합된 링크 상에서 수신되는 제어 패킷들에 응답하도록, 캐시들(50 및 54) 및/또는 처리 코어들(52 및 56)에 응답하여 제어 패킷들을 발생시키도록, 서비스를 위하여 메모리 제어기(16A)에 의해 선택된 트랜잭션들에 반응하여 프로브 커맨드들 및 응답 패킷들을 발생시키도록, 그리고 노드(12A)가 중간 노드가 되는 패킷들을 다른 노드로의 전송을 위하여 인터페이스 로직들(18A-18C)중 다른 것으로 루트시키도록 구성된다. 인터페이스 로직들(18A, 18B 및 18C)은, 패킷들을 수신한 다음 이 패킷들을 패킷 처리 로직(58)에 의해 이용되는 내부 클록에 대하여 동기화시키는 로직을 포함할 수도 있다.
패킷 처리 로직(58)은 컴퓨터 시스템(10)에 의해 지원되는 가상 채널들의 리소스 독립을 지원하는 하드웨어를 포함할 수도 있다. 예를 들어, 패킷 처리 로직(58)은 각 가상 채널에 대하여 개별적인 버퍼들을 제공할 수도 있다. 도 11은 예시적인 실시예를 도시한다. 변형적인 실시예들은 인터페이스 로직들(18A-18C) 또는 다른 모든 적절한 위치 내에서 가상 채널들의 리소스 독립을 지원하는 하드웨어를 제공할 수도 있다.
캐시들(50 및 54)은 데이터의 캐시 블록들을 저장하도록 구성된 고속의 캐시 메모리들을 포함한다. 캐시들(50 및 54)은 개별적인 프로세서 코어들(52 및 56) 내에 통합될 수도 있다. 변형적으로, 캐시들(50 및 54)은 바람직한 경우, 이면 캐시 구성 또는 인라인(in-line) 구성으로 프로세서 코어들(52 및 56)에 결합될 수도 있다. 또한, 캐시들(50 및 54)은 캐시들의 계급 조직(hierarchy)으로서 구현될 수도 있다. (계급 조직 내의) 프로세서 코어들(52 및 56)에 더 가까이 있는 캐시들은, 바람직한 경우 프로세서 코어들(52 및 56) 내에 통합될 수도 있다.
프로세서 코어들(52 및 56)은 미리 규정된 명령 세트에 따라 명령들을 실행하는 회로를 포함한다. 예를 들어, x86 명령 세트 구조가 선택될 수도 있다. 또한, 알파(Alpha), 파워피씨(PowerPC), 또는 다른 모든 명령 세트 구조가 선택될 수도 있다. 일반적으로, 프로세서 코어들은 데이터 및 명령들에 대하여 캐시들을 액세스한다. 캐시 미스(miss)가 검출된다면, 판독 요구가 발생된 다음, 미싱 캐시 블록이 맵핑된 노드 내의 메모리 제어기로 전송된다.
도 11은 패킷 처리 로직(58)의 일 실시예의 블록도이다. 다른 실시예들이 또한 가능하며 고려된다. 도 11의 실시예에서, 패킷 처리 로직(58)은 제 1 세트의 제어 및 데이터 패킷 버퍼들(60), 제 2 세트의 제어 및 데이터 패킷 버퍼들(62), 제 3 세트의 제어 및 데이터 패킷 버퍼들(64), 제어 로직(66), 데이터 버퍼 풀(68), 및 응답 카운터 풀(70)을 포함한다. 제어 및 데이터 패킷 버퍼들(60)은 커맨드 버퍼(CB)(60A), 응답 버퍼(RB)(60B), 프로브 버퍼(PB)(60C), 커맨드 데이터 버퍼(CDB)(60D) 및 응답 데이터 버퍼(RDB)(60E)를 포함한다. 유사하게, 제어 및 데이터 패킷 버퍼들(62)은 커맨드 버퍼(CB)(62A), 응답 버퍼(RB)(62B), 프로브 버퍼(PB)(62C), 커맨드 데이터 버퍼(CDB)(62D) 및 응답 데이터 버퍼(RDB)(62E)를 포함한다. 제어 및 데이터 패킷 버퍼들(64)은 커맨드 버퍼(CB)(64A), 응답 버퍼(RB)(64B), 프로브 버퍼(PB)(64C), 커맨드 데이터 버퍼(CDB)(64D) 및 응답 데이터 버퍼(RDB)(64E)를 포함한다. 제어 및 데이터 패킷 버퍼들(60)은 (예를 들어 라인들(24B) 상으로) 인터페이스 로직(18A)에 의해 수신된 패킷을 수신하도록 결합된다. 유사하게, 제어 및 데이터 패킷 버퍼들(62)은 인터페이스 로직(18B)에 의해 수신된 패킷을 수신하도록 결합되며, 제어 및 데이터 패킷 버퍼들(64)은 인터페이스 로직(18C)에 의해 수신된 패킷을 수신하도록 결합된다. 제어 및 데이터 패킷 버퍼들(60, 62 및 64)은 제어 로직(66)에 결합된다. 또한, 응답 데이터 버퍼들(60E, 62E 및 64E)은 데이터 버퍼 풀(68)에 결합된다. 데이터 버퍼 풀(68) 및 응답 카운터 풀(70)은 제어 로직(66)에 결합되며, 이는 노드 ID 레지스터(72), 제어 패킷 액티브 레지스터들(74A-74C) 및 데이터 패킷 액티브 레지스터(76A-76C)를 더 포함한다. 제어 로직(66)은 수신 및 전송 인터페이스를 통하여 인터페이스들(18A-18C)에 결합되며, 메모리 제어기(16A)와 캐시(50) (및 임의 캐시(54))에 결합된다. 데이터 버퍼 풀(68)은 또한 메모리 제어기(16A)와 캐시(50) 및 (임의 캐시(54))에 결합된다.
각 세트의 제어 및 데이터 패킷 버퍼들은 각 가상 채널들에 다른 버퍼들을 제공한다. 즉, 본 실시예에서, 커맨드 버퍼(60A)는 커맨드 가상 채널에 할당되고, 응답 버퍼(60B)는 응답 가상 채널에 할당되며, 그리고 프로브 버퍼(60E)는 프로브 가상 채널에 할당된다. 이러한 방식에서, 한 가상 채널에서의 제어 패킷들의 수신은 다른 가상 채널에서의 제어 패킷들의 수신에 의해 방해를 받지 않는다. 각 가상 채널로부터의 제어 패킷들은 그 가상 채널에 대응하는 제어 패킷 버퍼에 저장되며, 이에 따라 (다른 제어 패킷 버퍼에 저장된) 다른 가상 채널로부터의 제어 패킷들과물리적으로 충돌하지 않는다. 버퍼들(62 및 64) 내의 유사하게 명명되는 버퍼들은 상기 설명한 바와 같이 가상 채널들에 할당된다.
유사하게, 데이터 패킷 버퍼들이 데이터 패킷들을 전달하는 각 가상 채널에 제공된다(본 실시예에서 프로브 가상 채널은 데이터 패킷들을 전달하지 않는다). 즉, 본 실시예에서, 커맨드 데이터 버퍼(60D)는 커맨드 가상 채널에 할당되며, 응답 데이터 버퍼(60E)는 응답 가상 채널에 할당된다. 버퍼들(62 및 64) 내의 유사하게 명명된 버퍼들은 상기 설명한 바와 같이 가상 채널들에 할당된다.
본 실시예에서, 인터페이스 로직들(18A-18C)은 수신된 패킷들을 (제어 경로 상에 제공되는) 제어 패킷들과 (데이터 경로 상에 제공되는) 데이터 패킷들로 분할된다. 제어 경로는 제어 패킷 버퍼들에 결합되고(예를 들어, 버퍼들(60A-60C)은 인터페이스 로직(18A)으로부터 제어 경로에 결합된다), 그리고 데이터 경로는 데이터 패킷 버퍼들에 결합된다(예를 들어, 버퍼들(60D-60E)은 인터페이스 로직(18A)으로부터 데이터 경로에 결합된다). 제어 로직(66)은 수신 및 전송 인터페이스를 통하여 패킷의 표시를 수신하도록 결합되며, 수신되는 패킷에 대한 버퍼 엔트리를 할당하도록 구성된다. 고려되는 다른 실시예들에서, 수신된 패킷들은 인터페이스 로직에 의해 제어 및 데이터 패킷들로 분할되지 않는다. 이러한 실시예들에서, 제어 로직(66)은 데이터 패킷들의 비트 타임들과 제어 패킷들의 비트 타임들을 구별하는 CTL 신호를 수신할 수도 있다.
일반적으로, 제어 로직(66)은 다른 버퍼들 내의 패킷들과 독립적으로 다양한 버퍼들로부터의 패킷들을 처리하도록 구성된다. 따라서, 다른 가상 채널들 내에서이동하는 패킷들은 서로 물리적으로 충돌하지 않는다.
제어 로직(66)은 버퍼들(60, 62 및 64) 내의 제어 패킷들을 검사하여, 제어 패킷들이 노드(12A)("이 노드(this node)")에 지정되었는지, 아니면 다른 노드로 전송될 것인 지를 결정한다. 노드 ID 레지스터(72)는 이 노드의 노드 ID를 저장하고, 제어 로직(66)은 노드 ID를 이용하여 제어 패킷들이 이 노드에 지정되었는 지를 결정한다. 본 실시예에서, 프로브 가상 채널 내의 패킷들은 방송 패킷들이며, 이에 따라 이 노드, 및 이 노드가 패킷을 전송하게 될 다른 노드에 지정되며, (이에 따라 노드 ID 비교는 이용되지 않는다). 다른 가상 채널들 내의 패킷들은 지시된(directed) 패킷들로서, 목적지 노드 필드가 패킷이 이 노드에 지정되었는지, 아니면 다른 노드로 전송될 것인 지를 확인한다. 제어 로직(66)은, 각 목적지 노드에 대하여, 인터페이스 로직들(18A-18C)이 패킷을 전송하는 데에 이용될 것인 지를 표시하는 하나 또는 그 이상의 루팅 표들을 포함할 수도 있다. 제어 로직(66)은, 확인된 인터페이스 로직들(18A-18C)을 통하여 전송된 패킷들을 수신하도록 결합된 수신 노드가 제어 패킷에 대응하는 가상 채널에 대하여 빈 제어 패킷 버퍼를 가질 때, 제어 패킷을 전송할 수도 있다. 또한, 제어 패킷이 데이터 패킷을 지정한다면, 제어 패킷, 및 이후 지정된 데이터 패킷을 전송하기 전에, 제어 패킷에 대응하는 가상 채널에 대한 빈 데이터 패킷 버퍼가 확인된다. 제어 로직(66)은 제어 패킷 (및 지정된 경우, 데이터 패킷)이 전송될 것인 지를 결정하고, 수신 및 전송 인터페이스를 이용하여 패킷을 확인된 인터페이스 로직들(18A-18C)로 전송한 다음, 이후 패킷을 수신 노드로 전송한다. 또한, 제어 로직(66)은 해당하는 타입의 버퍼가 비었음을 주목하며, 이에 따라 이후의 정보 패킷이 패킷이 노드(12A)에 의해 수신되었던 인터페이스들(18A-18C)을 통하여 전송되어, 수신 인터페이스 상의 전송 노드에 빈 버퍼를 나타낼 수도 있다.
반면, 제어 패킷이 이 노드에 대하여 지정된다면, 제어 로직(66)은 패킷의 타입의 기초로 패킷을 처리한다. 예를 들어, 제어 패킷이 메모리 제어기(16A)에서 목표로 하는 커맨드라면, 제어 로직(66)은 제어 패킷을 메모리 제어기(66)로 전달하자 시도한다. 메모리 제어기(16A)는 처리될 트랜잭션들에 대한 큐들을 이용할 수도 있으며, 예를 들어 큐들이 가득찰 경우에는 제어 패킷을 거절할 수도 있다. 프로브 패킷들을 처리하기 위하여, 제어 로직(66)은 캐시들(50 및 54) (및 프로세서 코어들(52 및 56) 내부의 모든 캐시들)과 통신할 수도 있다. 제어 로직(66)은 상태를 갖는 프로브 응답 패킷 (또는 캐시 블록이 노드 내에서 변형된 경우에는, 데이터를 갖는 판독 응답 패킷)을 발생시키고, (이용가능한 수신 노드 버퍼들을 필요로 하는) 프로브 응답 패킷을 전송할 수도 있다.
수신된 패킷들을 처리하는 것에 부가하여, 제어 로직(66)은 필(fill) 용구들 및 캐시들(50 및 54)로부터의 빅팀 블록들에 응답하여 패킷들을 발생시킬 뿐 아니라, 프로세서 코어들(52 및 56)로부터 직접적으로 비롯되는 요구들(예를 들어, 넌캐시어블 요구들, I/O 요구들 등)에 응답하여 패킷들을 발생시킬 수도 있다. 또한, 응답 패킷들은 트랜잭션의 전송 또는 완료를 위하여 데이터를 제공하는 메모리 제어기에 응답하여 발생될 수도 있다. 제어 로직(66)은 처리를 위한 해당 커맨드를 선택하는 메모리 제어기(16A)에 응답하여 프로브 커맨드 패킷을 발생시킬 수도 있으며, 그리고 (다른 패킷 전송처럼, 유용한 수신 노드 버퍼들을 필요로 하는) 프로브 커맨드 패킷을 방송할 수도 있다.
상기 설명한 바와 같이, 노드는 그 노드에 의해 발생된 제어 패킷에 해당하는 응답 패킷들을 처리하기 위한 충분한 리소스들을 제공한다. 본 실시예에서, 제어 로직(66)은 두 경우들에 있어서, 즉 (i) (예를 들어, 캐시들(50 및 54) 또는 프로세서 코어들(52 및 56)로부터의 요구들에 응답하여) 트랜잭션을 시작하는 커맨드 패킷을 발생시킬 때, 그리고 (ii) 메모리 제어기(16A)를 목표로 하는 제어 패킷에 대한 프로브 패킷을 발생시킬 때, 노드로 리턴되는 응답 패킷들이 되는 패킷들을 발생시킬 수도 있다. 좀 더 명확히 설명하면, 경우 (ii)는 메모리 제어기(16A)를 목표로 하는 크기가 정해진(sized) 기록들에 대하여 일어날 수도 있다. 어느 경우에 있어서, 제어 로직(66)은 응답 패킷들의 처리를 위하여 리소스들을 할당한다.
본 실시예에서, 제어 로직(66)은 응답들을 처리하기 위하여 데이터 버퍼 풀(68) 및 응답 카운터 풀(70)로부터의 리소스들을 할당한다. 데이터 버퍼 풀(68)은 데이터의 캐시 블록들을 저장하는 다수의 엔트리들을 포함할 수도 있으며, 응답 카운터 풀(70)은 다수의 카운터들을 포함할 수도 있다. 데이터 버퍼 풀 엔트리는 트랜잭션에 대응하는 응답 데이터를 저장하도록 할당될 수도 있다. 카운터는 수신된 응답들을 카운트하고 (그리고 프로브 응답들 내에 제공될 수도 있는 모든 상태 정보를 보유하도록) 할당될 수도 있다. 응답 패킷들은 할당된 카운터를 이용하여 (응답들의 기대 수에 이를 때 까지) 카운트될 수도 있으며, 응답 패킷에 의해 수신되는 데이터는 할당된 데이터 버퍼 내에 저장될 수도 있다. 트랜잭션 내에 포함된기껏해야 두 개의 응답 패킷들이 데이터(응답 패킷을 전송하기 전에 MemCancel 응답 패킷이 메모리 제어기에 도달하지 못하는 경우에는 목표 메모리 제어기로부터의 것, 그리고 데이터의 변형된 캐시된 카피를 갖는 프로브 노드로부터의 것)를 전달할 수도 있다는 것을 유념하자. 두 개의 데이터 패킷들이 수신되는 경우, 프로브 노드로부터의 패킷은 보유되며 메모리 제어기로부터의 패킷은 버려진다.
일단 각각의 기대 응답들이 수신되고 응답 데이터가 수신된다면, 제어 로직(66)은 수행되는 트랜잭션의 타입에 따라, 데이터를 메모리 제어기(16A) 또는 캐시들(50 또는 54)로 전송할 수도 있다. 예를 들어, 응답들이 패킷 처리 로직(58)에 의해 발생된 프로브 커맨드에 응답하여 발생된 프로브 응답들이라면, 응답 데이터는 메모리 제어기(16A)로 전송될 수도 있다. 또한, 응답들이 판독 트랜잭션에 기인한다면, 데이터는 캐시들(50 또는 54)로 전송될 수도 있다.
데이터 버퍼 풀(68)은 또한 노드(12A)로부터 전송될 데이터를 저장하는 데에 이용될 수도 있다는 것을 유념하자. 예를 들어, 노드(12A)로부터 비롯된 기록 커맨드들에 대한 빅팀 블록 데이터 또는 기록 데이터는 데이터 버퍼 풀(68)에 저장될 수도 있다. 또한, 개별적인 버퍼들이 이러한 데이터에 대하여 제공될 수도 있다. 또한, 다양한 트랜잭션들에 대하여 이용될 수도 있는 버퍼들의 풀을 제공하는 대신에, 바람직한 경우 트랜잭션 타입에 의해 개별적인 버퍼들이 제공될 수도 있다.
본원에서 이용되는 바와 같이, 버퍼는 이후의 검색을 위하여 하나 또는 그 이상의 정보 항목들을 저장하는 데에 이용되는 저장 요소이다. 버퍼는 하나 또는그 이상의 레지스터들, 래치들, 플립-플롭들, 또는 다른 클록 저장 장치들을 포함할 수도 있다. 또한, 버퍼는 적절히 배열된 임의 접속 메모리(RMA) 셀들의 세트를 포함할 수도 있다. 버퍼는 다수의 엔트리들로 분할되는데, 여기서 각 엔트리는 버퍼가 설계된 정보의 한 항목을 저장하도록 설계된다. 엔트리들은 모든 적절한 방법으로 할당되고 할당이 해제될 수도 있다. 예를 들어, 버퍼는 더 오래된 엔트리들이 삭제될 때 마다 엔트리들이 시프트 다운되는, 시프팅 선입선출(FIFO) 버퍼로서 작동할 수도 있다. 또한, 헤드 및 꼬리 포인터들은 버퍼 내의 가장 오래된 그리고 가장 최근의 엔트리들을 표시하는 데에 이용될 수도 있으며, 엔트리들은 삭제될 때 까지 버퍼의 특정한 저장 위치에 유지될 수도 있다. 본원에서 이용되는 "제어 로직"이란 용어는 입력들에 대하여 연산들을 수행하고 설명된 연산들을 이루기 위하여 그에 응답하여 출력들을 발생시키는 결합 로직 및/또는 상태 머신들의 모든 결합을 말한다.
일 특정 실시예에서, 패킷들은 일련의 비트 타임들로서 인터페이스 로직들(18A-18B)로부터 수신된다. 인터페이스 로직들(18A-18C)은 제어 또는 데이터 비트 타임들이 전송되고 있는 지를 나타내며, 제어 로직(66)은 적절한 버퍼들의 비트 타임들을 저장하게 한다. 제어 로직(66)은 패킷 액티브 레지스터들(74) 및 데이터 패킷 액티브 레지스터들(76)을 이용하여, 현재 수신되고 있는 제어 패킷 또는 데이터 패킷이 어떤 가상 채널에 속하는 지를 확인한다. 제어 패킷 액티브 레지스터(74)가 각 인터페이스 로직들(18A-18C)에 제공된다(예를 들어, 제어 패킷 액티브 레지스터(74A)는 인터페이스(18A)에 해당한다). 유사하게, 데이터 패킷 액티브 레지스터(76)가 각 인터페이스 로직들(18A-18C)에 대하여 제공된다(예를 들어, 데이터 패킷 액티브 레지스터(76A)는 인터페이스(18A)에 해당한다). 제어 패킷의 제 1 비트 타임에 응답하여, 제어 로직(66)은 (제 1 비트 타임 내에 있는) 커맨드 필드를 디코드하고, 그 가상 채널에 대하여 제어 패킷이 할당되었는 지를 결정한다. 제어 로직(66)은 (제어 패킷이 수신되는 해당하는 인터페이스 로직들(18A-18C)의 세트 내의) 해당하는 제어 패킷 버퍼 내의 버퍼 엔트리를 할당하고, 그 제어 패킷 버퍼를 나타내기 위하여 패킷이 수신되는 인터페이스 로직들(18A-18C)에 해당하는 제어 패킷 액티브 레지스터(76)를 세트시킨다. 동일한 인터페이스 로직들(18A-18C)로부터의 이후의 제어 패킷 비트 타임들은 제어 패킷의 각 비트 타임이 수신될 때 까지, 표시된 버퍼 내의 표시된 엔트리 내에 저장된다. 제어 패킷이 데이터 패킷을 지정한다면, 제어 로직(66)은 확인된 가상 채널에 해당하는 데이터 패킷 버퍼 내에 데이터 패킷 버퍼 엔트리를 할당한다. 데이터 패킷 비트 타임들은 데이터의 각 비트가 수신될 때 까지, 표시된 버퍼의 표시된 엔트리에 저장된다. 변형 실시예에서, 인터페이스 로직들(18A-18C)은 패킷의 비트 타임들을 모으며, 패킷들을 전체적으로 패킷 처리 로직(58)으로 전송할 수도 있다. 이러한 실시예에서, 제어 패킷 액티브 레지스터들(74) 및 데이터 패킷 액티브 레지스터들은 제거될 수도 있다. 다른 실시예에서, 인터페이스 로직들(18A-18C)은 패킷 처리 로직(58)으로의 동시 전송을 위하여 몇 개의 비트 타임들을 모을 수도 있지만, 비트 타임들의 수는 패킷 보다 적을 수도 있다. 또 다른 실시예에서, 버퍼들(60, 62 및 64)은 패킷 처리 로직(58) 대신에 각각의 인터페이스 로직들(18A-18C) 내에 위치될 수도 있다.
도 11에 도시된 실시예는 각 인터페이스 로직들(18A-18C)에 대한 개별적인 버퍼들의 세트를 제공한다. 변형 실시예에서, 버퍼들은 인터페이스 로직들 간에 분할될 수도 있는 (각 가상 채널 타입의) 풀로서 제공될 수도 있다. 이러한 실시예는 다른 노드(예를 들어, 도 1의 예에서의 인터페이스 로직(18A))에 결합되지 않는 제로 버퍼들을 제공함으로써 버퍼들을 효율적으로 이용할 수도 있게 된다. 그렇지 않으면 인터페이스 로직(18C)에 할당되는 버퍼들은 인터페이스 로직들(18A-18B)에 의한 이용을 위하여 할당될 수도 있다.
도 12는 데이터 버퍼 풀(68) 내에 있을 수도 있는 데이터 풀 엔트리(80)의 일 실시예의 블록도를 도시한다. 다른 실시예들이 또한 가능하며 고려된다. 도 12의 실시예에서, 데이터 버퍼 풀 엔트리(80)는 소스 택 필드(82), 소스 노드 필드(84), 소스 유닛 필드(88) 및 데이터 필드(86)를 포함한다.
제어 로직(66)이 트랜잭션에 대한 응답 데이터 패킷을 저장하기 위하여 데이터 버퍼 풀 엔트리(80)를 할당할 때, 제어 로직(66)은 트랜잭션의 소스 노드, 소스 유닛 및 소스 택을 각각 소스 노드 필드(84), 소스 유닛 필드(88), 및 소스 택 필드(82)에 저장할 수도 있다. 소스 노드, 소스 유닛, 및 소스 택이 현 트랜잭션을 특이하게 확인하고, 그리고 소스 노드, 소스 유닛, 소스 택은 현 트랜잭션에 해당하는 응답 패킷들에 의해 전달되기 때문에, 트랜잭션의 응답 패킷들 (및 해당하는 데이터 패킷들)이 확인될 수도 있으며, 데이터 패킷들은 할당된 엔트리 내에 저장된다. 다시 말해, 응답 데이터 패킷을 지정하는 응답 패킷이 수신되면, 응답 패킷의 소스 노드, 소스 유닛, 및 소스 택은 응답 데이터에 대하여 이전에 할당된 데이터 버퍼 풀 엔트리(80)를 위치시키기 위하여 소스 노드 필드(84), 소스 유닛 필드(88), 및 소스 택 필드(84)와 비교되며, 데이터는 응답 데이터 버퍼로부터 데이터 버퍼 풀 엔트리(80)의 데이터 필드(86) 내에 카피될 수도 있다. 데이터 필드(86)는 데이터의 캐시 블록을 포함할 수도 있다.
도 13은 응답 카운터 풀(70) 내에 있을 수도 있는 응답 카운터(90)의 일 실시예를 도시한 블록도이다. 다른 실시예들이 또한 가능하며 고려된다. 도 13에 도시된 실시예에서, 응답 카운터(90)는 소스 택 필드(92), 소스 노드 필드(94), 소스 유닛 필드(95), 응답 카운터 필드(96), 및 검색 상태 필드(98)를 포함한다.
제어 로직(66)이 트랜잭션에 대한 응답 카운트를 저장하기 위하여 응답 카운터(90)를 할당하게 되면, 제어 로직(66)은 소스 노드 필드(94), 소스 유닛 필드(95), 및 소스 택 필드(92) 내에 각각 트랜잭션의 소스 노드, 소스 유닛, 및 소스 택을 저장할 수도 있다. 소스 노드 필드(94), 소스 유닛 필드(95), 및 소스 택 필드(92)는 데이터 버퍼 풀 엔트리(80)의 대응하는 필드들(84, 88 및 82)과 유사하게 이용될 수도 있다.
응답 카운트 필드(96)는 트랜잭션에 대하여 할당될 때, 그 트랜잭션에 대하여 기대되는 응답들의 수로 시작될 수도 있다. 각각의 필드들(94, 95, 및 92)에 저장된 소스 노드, 소스 유닛, 및 소스 택을 갖는 응답 패킷들이 수신될 때 마다, 응답 카운트는 감소된다. 응답 카운트가 제로에 이르면, 모든 응답들이 수신되고 트랜잭션이 전달될 수도 있다. 또한, 카운트는 제로로 시작될 수도 있으며, 응답 패킷들은 응답들의 기대수에 이를 때 까지 응답 카운트를 증가시킬 것이다.
수신 상태 필드(98)는 데이터가 수신될 수도 있는 상태를 나타내는 데에 이용될 수도 있다. 이 상태는 캐시 블록에 대한 액세스 권한 뿐 아니라, 캐시 블록에 대한 코히런시를 유지하는 책임과, 캐시 블록을 수신하는 데에 요구되는 노드(12A)를 나타낸다. 예를 들어, MOESI(Modified, Owned, Exclusive, Shared, 및 Invalid) 코히런시 상태들이 이용될 수도 있으며, 수신 상태 필드(98)는 지원되는 상태들 중 하나로 엔코드될 수도 있다. 또한, 다른 모든 적절한 코히런시 상태들(예를 들어, MESI 상태들)의 세트가 이용될 수도 있다. 수신 상태 필드(98)는 다른 어떠한 노드도 트랜잭션에 의해 전송되는 캐시 블록의 카피를 갖지 않는 경우에 요구되는 상태로 시작될 수도 있다. 프로브 응답들이 수신될 때, 응답이 캐시 블록의 카피가 프로브 노드에 의해 유지되고 있음을 나타내거나, 또는 더티 데이터가 제공된다는 것을 나타낸다면, 수신 상태 필드(98)가 이에 따라 갱신될 수도 있다. 일 실시예에서는, 캐시 블록의 카피가 프로브 응답을 제공하는 프로브 노드에 의해 유지된다는 것을 나타내기 위하여, 공유 비트가 프로브 응답 패킷 내에 포함될 수도 있다. 또한, 프로브 노드로부터 판독 응답 패킷을 수신하는 것은 노드가 캐시 블록의 더티 카피를 갖고 있음을 나타낼 수도 있다. 판독 응답 패킷은 또한 프로브 노드에 의해 카피가 유지되고 있는 지를 나타내기 위한 공유 비트를 포함할 수도 있다.
데이터 버퍼 풀(68) 및 응답 카운터 풀(70)은 단지 현 트랜잭션들에 대한 응답을 처리하기 위하여 리소스들을 할당하는 한 예일 뿐이라는 것을 유념하자. 다른 실시예에서, 현 트랜잭션들의 표가 유지될 수도 있다. 이 표는 상기(또는 제어 로직(66)으로 하여금 모든 응답들이 수신되었음을 결정할 수 있게 하는 등가의 정보)와 유사하게 소스 노드, 소스 유닛, 소스 택, 데이터, 수신 상태, 및 응답 카운트를 포함할 수도 있다. 모든 적절한 리소스들의 세트가 이용될 수도 있다.
도 14는 패킷을 수신하기 위한 패킷 처리 로직(58)의 일 실시예의 작동을 도시한 흐름도이다. 다른 실시예들이 또한 가능하며 고려된다. 도시된 실시예는 패킷들을 일련의 비트 타임들로서 패킷 처리 로직(58) 내에 수신한다. 다른 실시예들은 인터페이스 로직들(18A-18C) 내에 패킷의 비트 타임들을 모을 수도 있으며, 패킷 처리 로직(58)에 완전한 패킷들을 제공하는데, 이러한 경우들에 있어서 비트 타임들로 패킷들의 수신을 조정하는 것에 관련된 단계들은 제거될 수도 있다. 도 14에 도시된 단계들은 이해의 용이를 위해 특정한 순서로 도시되었지만, 모든 적절한 순서가 이용될 수도 있다. 또한, 단계들은 패킷 처리 로직(58) 내의 결합 로직을 이용하여 동시에 수행될 수도 있다. 도 14에 도시된 단계들은 동시에, 그리고 각 인터페이스 로직들(18A-18C)에 대하여 독립적으로 수행될 수도 있는데, 이는 인터페이스 로직으로부터 비트 타임들이 동시에 수신될 수도 있기 때문이다.
패킷 처리 로직(58)은 수신된 비트 타임이 데이터 패킷 또는 커맨드 패킷의 일부인 지를 나타내는 신호를 인터페이스 로직으로부터 수신한다. 만일 비트 타임이 데이터 패킷 비트 타임이라면(결정 블록 100), 이 비트 타임은 그 인터페이스 로직에 대응하는 데이터 패킷 액티브 레지스터에 의해 표시되는 데이터 버퍼 내에 (그리고 데이터 버퍼 내의 엔트리에) 저장된다(단계 102). 만일 데이터 패킷 비트 타임이 데이터 패킷의 마지막 비트 타임이라면, 제어 로직(66)은 해당하는 데이터 패킷 액티브 레지스터를 무효화한다. 반면, 비트 타임이 제어 패킷 비트 타임이라면, 패킷 처리 로직(58)은 제어 패킷이 현재 수신되는 중인 지를 (예를 들어, 결정 블록(104)에서, 제어 패킷 액티브 레지스터가 유효한 지를) 결정한다. 만일 제어 패킷이 현재 진행중이라면, 비트 타임은 제어 패킷 액티브 레지스터에 의해 표시되는 제어 패킷 버퍼 내에 저장된다(단계 106). 만일 제어 패킷 비트 타임이 제어 패킷의 마지막 비트 타임이라면, 제어 로직(66)은 해당하는 제어 패킷 액티브 레지스터를 무효화할 수도 있다.
변형적으로, 제어 패킷은 현재 진행 중이 아닐 수도 있다. 이러한 경우, 패킷 처리 로직(58)은 제어 패킷이 속하는 가상 채널을 확인하기 위하여 새롭게 수신된 제어 패킷의 커맨드 필드를 디코드한다(단계 108). 확인된 가상 채널에 대응하는 제어 패킷 버퍼 엔트리가 할당되며, 제어 패킷 비트 타임은 할당된 제어 패킷 버퍼 엔트리 내에 저장된다.
또한, 패킷 처리 로직(58)은 제어 패킷이 이후의 데이터 패킷을 지정하는 지를 결정한다(결정 블록 110). 만일 데이터 패킷이 지정된다면, 패킷 처리 로직(58)은 확인된 가상 채널에 대응하는 데이터 버퍼로부터의 데이터 버퍼 엔트리를 할당하고, 그 데이터 버퍼 (및 엔트리)를 확인하기 위하여 데이터 패킷 액티브 레지스터를 갱신한다(단계 112).
도 15는 커맨드 패킷을 처리하기 위한 패킷 처리 로직(58)의 일 실시예의 작동을 도시한 흐름도이다. 다른 실시예들이 또한 가능하며 고려된다. 도 15에 도시된 단계들은 이해의 용이를 위해 특정한 순서로 도시되었지만, 모든 적절한 순서가 이용될 수도 있다. 또한, 단계들은 패킷 처리 로직(58) 내의 결합 로직을 이용하여동시에 수행될 수도 있다. 도 15에 도시된 단계들은 동시에, 그리고 각 인터페이스 로직들(18A-18C) 및/또는 각 커맨드 패킷 버퍼에 대하여 독립적으로 수행될 수도 있는데, 이는 다른 인터페이스들 및/또는 다른 가상 채널들로부터의 커맨드 패킷들은 물리적으로 독립적이기 때문이다. 변형적으로, 하나의 커맨드 패킷 (또는 인터페이스 로직들(18A-18C) 마다 하나의 커맨드 패킷)이 적절한 공정(fairness) 알고리즘에 따라 처리를 위해 선택될 수도 있다. 일반적으로, 처리를 위하여 하나의 가상 채널로부터 선택된 패킷들은 가상 채널 내의 패킷들에 대한 정렬 룰들(ordering rules)을 따르지만(예를 들어, 동일한 소스로부터 동일한 목적지로의 패킷들이 순서대로 선택된다), 바람직한 경우 그리고 정렬 룰이 이러한 선택을 허용하는 경우, 패킷들은 처리를 위하여 순서를 벗어나게 선택될 수도 있다.
패킷 처리 로직(58)은 커맨드 패킷의 목적이 이 노드인지를 결정한다(결정 단계 126). 예를 들어, 패킷 처리 로직(58)은 커맨드 패킷의 목적지 노드 내에 기록된 목적지 노드와 노드 ID 레지스터(72)의 노드 ID를 비교할 수도 있다. 만일 노드들이 일치한다면, 커맨드는 이 노드에 목표를 두게 된다. 만일 커맨드가 이 노드에 목표를 두지 않는 다면, 패킷 처리 로직(58)은 목적지 노드에 응답하여 커맨드 패킷 (및 지정된 경우, 해당하는 데이터 패킷)을 전송할 수도 있다(단계 128). 예를 들어, 패킷 처리 로직(58)은 패킷들을 특정한 목적지 노드로 전송하기 위하여, 인터페이스 로직들(18A-18C)중 하나를 전송 인터페이스로 확인하는 패킷 루팅표를 유지할 수도 있다. 패킷 처리 로직(58)은 패킷 루팅표에 의해 지정된 링크에 결합된 수신 노드에서 이용가능한 해당하는 커맨드 버퍼 (및 데이터 패킷이 지정된 경우에는, 데이터 버퍼에) 커매드 패킷을 전송한다. 또한, 커맨드 패킷이 데이터 패킷을 지정한다면, 전송 링크 상의 데이터 패킷이 액티브하지만, 아직 전송되지 않은 경우, 커맨드 패킷의 전송이 정지될 수도 있다.
만일 커맨드 패킷이 이 노드를 목표로 한다면, 패킷 처리 로직(58)은 커맨드 패킷 (및 적용가능한 경우, 해당하는 데이터 패킷)을 메모리 제어기(16A)로 전송한다(단계 130). 일단 커맨드 패킷이 처리된다면(이 노드에 의해 전송 또는 수신된다면), 커맨드 패킷은 커맨드 버퍼 엔트리로부터 제거되고 (그리고, 적용가능한 경우, 데이터가 커맨드 데이터 버퍼 엔트리로부터 제거된다)는 것을 유념하자.
프로브 커맨드들이 이후의 데이터 패킷을 지정하지 않고, 이에 따라 데이터 패킷 체크가 무시될 수도 있음에도 불구하고, 프로브 커맨드들은 유사한 방식으로 처리될 수도 있다는 것을 유념하자. 또한, 프로브들은 내부적으로 (예를 들어, 노드 내에 캐시들을 프로빙함으로써) 처리될 수도 있고 전송될 수도 있는데, 이는 이들이 방성 패킷들이기 때문이다. 노드는 캐시드를 프로빙한 후 프로브 응답 패킷을 발생시키고 전송할 수도 있다.
만일 선택된 커맨드 패킷이 해당하는 데이터 패킷을 지정한다면, 다양한 실시예들은, 데이터 패킷이 아직 수신되지 않았음에도 불구하고 커맨드 패킷을 처리할 수도 있거나, 또는 데이터의 전송을 단순화하기 위하여, 또는 동일한 링크 상으로 전송이 완료되는 데이터 패킷을 지정하는 다른 제어 패킷을 허용하기 위하여 데이터 패킷의 도달을 기다릴 수도 있다는 것을 유념하자. 만일 커맨드 패킷이 처리될 때 데이터 패킷이 아직 수신되지 않았다면, 데이터 패킷이 수신될 때 데이터 패킷은 상기 설명한 바와 같이 처리될 수도 있다.
도 16은 응답 패킷을 처리하기 위한 패킷 처리 로직(58)의 일 실시예의 작동을 도시한 흐름도이다. 다른 실시예들이 또한 가능하며 고려된다. 도 16에 도시된 단계들은 단지 이해의 용이를 위하여 특정한 순서로 도시되기는 하였지만, 모든 적절한 순서가 이용될 수도 있다. 또한, 단계들은 패킷 처리 로직(58) 내에서 결합 로직을 이용하여 동시에 수행될 수도 있다. 도 16에 도시된 단계들은 동시에, 그리고 각 인터페이스 로직들(18A-18C) 및/또는 각 응답 패킷 버퍼에 대하여 독립적으로 수행될 수도 있는데, 이는 다른 인터페이스들 및/또는 다른 가상 채널들로부터의 커맨드 패킷들이 물리적으로 독립적이기 때문이다.
패킷 처리 로직(58)은 응답 패킷의 목적지 노드가 이 노드인지를 결정한다(결정 블록 144). 만일 목적지 노드가 다른 노드라면, 패킷 처리 로직(58)은 응답 패킷 (및 적용가능한 경우, 해당하는 데이터 패킷을), 응답 패킷이 전송되는 링크를 통하여 수신기 내의 응답 가상 채널에 대한 빈 버퍼 엔트리로 전송한다(단계 146).
응답 패킷의 목적지 노드가 이 노드라면, 응답이 수신된 상태가 디폴트 상태로부터 변경되어야 함을 나타내는 프로브 응답인 경우, 패킷 처리 로직(58)은 해당하는 응답 카운터를 감소시키고 수신된 상태를 갱신하도록 구성된다. 또한, 응답 패킷이 데이터 패킷을 지정한다면, 데이터 패킷은 해당하는 응답 데이터 버퍼로부터, 그 응답에 할당된 데이터 버퍼로 이동된다(단계 150).
카운터를 감소시킨 후, 패킷 처리 로직은 모든 응답 패킷들이 수신되고 처리되었는 지를 결정하기 위하여 카운터를 테스트할 수도 있다(결정 블록 152). 만일 모든 응답 패킷들이 수신되고 처리되었다고 결정되면, 패킷 처리 로직(58)은 메모리 제어기(16A) 또는 캐시들(50 및 54)에 이들이 커맨드를 완료하였음을 알리고, 데이터 버퍼로부터의 관련 데이터 및 응답 카운터로부터 수신된 상태를 제공한다(적용가능한 경우, 단계 154). 일단 응답 패킷이 처리되면(이 노드에 의해 전송 또는 수신되면), 응답 패킷은 응답 버퍼 엔트리 (및 적용가능한 경우, 응답 데이터 버퍼 엔트리)로부터 제거된다는 것을 유념하자.
상기 설명에서는, 커맨드 패킷 또는 응답 패킷 처리의 "중단(suspension)"이란 용어가 이용되었다. 일반적으로, 특정 패킷의 처리가 중단될 경우, 중단이 이유가 제거될 때 까지 처리는 "중단된다". 그 커맨드 또는 응답의 처리가 중단되는 동안, 동일한 타입의 다른 패킷들이 처리될 수도 있다.
만일 선택된 응답 패킷이 해당하는 데이터 패킷을 지정한다면, 다양한 실시예들은 데이터 패킷이 아직 수신되지 않았음에도 불구하고 (즉, 데이터 패킷이 데이터 버퍼 내에 아직 수신되지 않았음에도 불구하고) 응답 패킷을 처리할 수도 있거나, 또는 데이터의 전송을 단순화하기 위하여, 또는 동일한 링크를 통하여 전송이 완료된 데이터 패킷을 지정하는 다른 제어 패킷을 허용하기 위하여 데이터 패킷의 도달을 기다릴 수도 있다. 만일 응답 패킷이 처리될 때 데이터 패킷이 수신되지 않았다면, 데이터 패킷은 이 데이터 패킷이 수신될 때 상기 설명한 바와 같이 처리될 수도 있다.
도 17은 노드가 결합된 링크들을 상에서 패킷을 시작하기 위한 패킷 처리 로직(58)의 일 실시예의 작동을 도시한 흐름도이다. 다른 시시예들이 또한 가능하며 고려된다. 도 17에 도시된 단계들은 이해의 용이를 위하여 특정한 순서로 도시되었지만, 모든 적절한 순서가 이용될 수도 있다. 또한, 단계들은 패킷 처리 로직(58) 내이 결합 로직을 이용하여 동시에 수행될 수도 있다. 패킷 처리 로직(58)은 캐시들(50 및 54)로부터의 필 요구들/빅팀 블록들 및/또는 코어들(52 및 6)에 의해 수행되는 연산들에 응답하여 링크 상에서 패킷들을 시작할 수도 있다. 따라서, 프로브 패킷들이 처리를 위한 메모리 연산을 선택하는 메모리 제어기(16A)에 응답하여 시작될 수도 있다. 응답 패킷들은 프로브들이 처리된 후에, 그리고 완료된 이 노드에 의해 비롯되거나, 또는 이 노드에 의해 목표가 되는 트랜잭션에 응답하여 시작될 수도 있다.
패킷 처리 로직(58)은 시작될 패킷이 이 노드로 리턴되는 데이터가 되는 지를 결정한다(결정 블록 160). 예를 들어, 이 노드에 의해 시작되는 판독 트랜잭션들은 데이터가 노드로 리턴되게 하며, 이 노드에 의해 시작되는 기록 트랜잭션들은 데이터가 그 노드로 리턴되게 하지 못한다. ChangetoDirty 트랜잭션들은 (다른 노드가 더티 상태로 영향을 받은 캐시 블록을 갖는 다면) 그 노드로 리턴되는 데이터가 될 수도 있다. 유사하게, 프로브 패킷들은, 다른 노드가 더티 상태로 영향을 받은 캐시 블록을 갖고 프로브 응답들이 이 노드로 향한다면, 데이터를 이 노드로 리턴되게 할 수도 있다. 만일 트랜잭션이 이 노드로 리턴되는 데이터가 된다면, 패킷 처리 로직(58)은 데이터 버퍼 풀(68)로부터 데이터 버퍼를 할당한다(단계 162).
또한, 패킷 처리 로직(58)은 프로브 응답들이 패킷에 응답하여 이 노드로 리턴될 것인 지를 결정한다(단계 166). 이는 패킷이 프로브인 경우, 또는 패킷이 이 노드에 대한 프로브 응답들이 되는 트랜잭션(예를 들어, 판독 트랜잭션)을 시작하는 경우에 일어날 수도 있다. 만일 프로브 트랜잭션이 이 노드로 리턴된다면, 패킷 처리 로직(58)은 응답들에 대한 응답 카운터를 트랜잭션에 할당하고, 응답 카운터를 코히런트 구조 내의 노드들의 수로 시작한다(단계 168).
패킷 처리 로직(58)은 또한, 시작되는 패킷에 응답하여 다른 응답들이 이 노드(예를 들어, SrcDone, TgtDone 등)로 리턴될 지를 결정한다(단계 164). 이러한 다른 응답들이 리턴된다면, 패킷 처리 로직(58)은 응답 카운터를 할당하고 초기 카운트를 1로 설정한다(단계 165). 이후, 패킷 처리 로직(58)이 패킷을 전송한다(단계 170).
트랜잭션을 시작하기 전에 (데이터를 포함하는) 응답 패킷들을 처리하기 위하여 리소스들을 미리 할당함으로써, 응답 패킷들은 수신시 처리가능해진다. 따라서, 일부 응답 패킷들이 다른 응답 패킷들과 논리/프로토콜 충돌들을 가질 수도 있지만, 각 응답 패킷이 그의 목적지 노드에 도달할 때 이들을 처리함으로써 물리적인 충돌들이 제거될 수도 있기 때문에, 응답 패킷들은 응답 가상 채널에 통합될 수도 있게 된다.
도 18은 버퍼 릴리스 필드들을 포함하는 정보 패킷(180)의 일 실시예를 도시한 블록도이다. 다른 실시예들이 또한 가능하며 고려된다. 버퍼 해제 필드는 각 버퍼 타입에 포함된다. RespData 필드는 응답 데이터 버퍼에 대응한다. 응답 필드는 응답 버퍼에 대응한다. 유사하게, CmdData 필드는 커맨드 데이터 버퍼에 대응하며,커맨드 필드는 커맨드 버퍼에 대응한다.
각각의 버퍼 릴리스 필드들은 두 개의 비트들을 포함하여, 단일 링크 상에서의 전송기로부터 수신기로의 하나의 정보 패킷(180)의 전송시 0 내지 3개의 각 타입의 버퍼가 비게 된다. 버퍼 내에는 세 개 이상의 엔트리들이 제공될 수도 있으며, 다수의 정보 패킷들이 한 타입의 세 개 이상을 비우는 데에 이용될 수도 있다. 패킷 처리 로직(58)은 각 타입의 버퍼 및 각 인터페이스 로직들(18A-18C)에 대하여, 각 인터페이스가 결합된 링크의 다른 단부 상에서 수신기에 의해 제공되는 각 타입의 버퍼들의 총수를 나타내는 버퍼 카운트들을 포함할 수도 있다. 이러한 카운트들은 정보 패킷들을 수신기로부터 버퍼 릴리스 필드들을 갖는 전송기로 전송함으로써 파워업시, 그 수신기 내에서 이용가능한 버퍼들의 수로 초기화된다. 다수의 정보 패킷들을 전송함으로써, 세 개 이상의 엔트리들이 표시될 수도 있다.
패킷 처리 로직(58)은 해당하는 타입의 버퍼(및 패킷이 데이터 패킷을 지정한다면, 데이터 버퍼)가 패킷들이 전송되고 있는 수신기 내에서 이용가능한 한, 주어진 가상 채널로 패킷들을 전송할 수도 있다. 또한, 패킷 처리 로직(58)은 이 패킷 처리 로직(58)에 의한 패킷들의 처리로 인하여 노드(12A) 내에서 비게 되는 각 타입의 인터페이스들(18A-18C)의 버퍼들의 수를 주목한다. 주기적으로, 패킷 처리로직(58)은 각 인터페이스 로직들(18A-18C)을 통하여 정보 패킷(180)을 전송하여, 그 링크 상의 전송기에, 패킷 처리 로직(58)에 의해 비게 되는 버퍼 엔트리들의 수를 나타낸다.
가상 채널들 - 넌코히런트 구조
도 19는 I/O 하위 시스템(200)의 일 실시예의 블록도를 도시한다. 다른 실시예들이 또한 가능하며 고려된다. 도 19의 실시예에서, I/O 하위 시스템(200)은 호스트 브리지(202) 및 다수의 I/O 노드들(204A, 204B 및 204C)을 포함한다. 호스트 브리지(202)는 라인들(24I-24J)을 포함하는 코히런트 링크를 통하여 처리 노드(12D)에 결합되며, 그리고 라인들(24K-24L)을 포함하는 넌코히런트 링크를 이용하여 I/O 노드(204A)에 결합된다. I/O 노드들(204A-204C)은 데이지 체인 구조(라인들(24N-24O)에서 부가적인 넌코히런트 링크들을 이용하여 서로 연결된다.
일반적으로, I/O 노드(204A-204C)는 I/O 하위 시스템(200) 내에서 트랜잭션들을 시작할 수도 있다. 트랜잭션들은 궁극적으로 I/O 노드들(204A-204C), 다른 넌코히런트 링크, 또는 메모리(14)에 타겟을 둘 수도 있다. 단순함을 위하여, 트랜잭션들은 그의 실제적인 타겟에도 불구하고, 호스트 브리지(202)와 I/O 노드들(204A-204C) 사이에서 수행될 수도 있다. 호스트 브리지(202)는 처리 노드들(12A-12D)로부터의 요구를 위하여 I/O 노드들(204A-204C) 내에서 트랜잭션을 시작할 수도 있으며, 그리고 컴퓨터 시스템 내의 다른 호스트 브리지 또는 코히런트 구조에 타겟을 두는 I/O 노드들(204A-204C)에 의해 시작되는 트랜잭션들을 처리할 수도 있다. 따라서, I/O 노드들(204A-204C)에 의해 전송되는 패킷들은 데이지 체인 연결을 통하여 호스트 브리지(202) 쪽으로 흐를 수도 있다("업스트림" 흐름). 호스트 브리지(202)에 의해 전송되는 패킷들은 수신 I/O 노드들(204A-204N) 쪽으로 흐를 수도 있다("다운스트림" 흐름). 데이지 체인 내에서 I/O 노드들과 호스트 브리지를 서로 연결하고 I/O 노드들을 단지 호스트 브리지와 (트랜잭션 레벨에서) 통신하게함으로써, I/O 노드들이 다른 노드들에는 연결되지 않고 호스트 브리지에만 바로 연결되는 것으로 보이는 I/O 하위 시스템(200)의 논리적인 측면을 제공한다.
I/O 하위 시스템(200)은 링크 고장의 경우 강력함을 제공하고 처리 노드들의 크러스터들 간에 공유 I/O 하위 시스템을 허용하기 위하여, 데이지 체인 상호 연결의 양쪽 단부들 상의 호스트 브리지에 연결될 수도 있다. 한 브리지는 마스터 브리지로서 규정되고, 다른 브리지는 스레이브 브리지로서 규정된다. 링크 고장이 없다면, 하위 시스템 내의 모든 I/O 노드들은 마스터 브리지에 속하게 될 것이다. 링크 고장을 검출하게 되면, 고장측 상의 노드들은 고장이 검출된 동일 측면 상의 호스트 브리지에 속하는 것으로 재프로그램됨으로써, 두 개의 하위 시스템들을 형성하고 처리 노드들과의 통신을 유지하게 된다. 트래픽의 균형을 유지하기 위하여 (두 개의 논리적으로 개별적인 체인들을 형성하는) 고장이 없는 경우, I/O 노드들은 두 개의 호스트 브리지들 간에 할당될 수도 있다.
만일 패킷들이 데이지 체인의 끝(예를 들어, 도 19의 I/O 노드(204C))에 도달하고 어떠한 I/O 노드들(204A-204C)도 패킷들을 수신하지 않는 다면, 체인의 단부에 있는 노드에 의해 에러가 발생될 수도 있다.
일반적으로, I/O 하위 시스템(200)은 넌코히런트 상호 연결로서 링크들을 실행할 수도 있다. 넌코히런트 링크에서의 데이터 패킷 정의는 도 6을 참조하여 설명된 것과 유사할 수도 있으며, 넌코히런트 링크에서의 정보 패킷 정의는 (프로브 필드가 지정되어 있는) 도 3 및 18에 도시된 패킷 정의들과 유사할 수도 있다. 커맨드 및 응답 패킷들은 하기의 도 21 및 22에 도시된다.
가상 채널들과 관련하여, 넌코히런트 링크들은 상기 설명된 코히런트 링크와 동일한 가상 채널들을 이용할 수도 있다. 그러나, 넌코히런트 링크에서는 프로브들이 이용되지 않기 때문에, 프로브 가상 채널은 제거될 수도 있다. 도 9에 도시된 표(42)는 넌코히런트 링크의 일 실시예에 대하여 규정된 가상 채널들을 도시한다.
호스트 노드(202)는 처리 노드들(12)과 개별적인 것으로 도시되었지만, 바람직한 경우 처리 노드에 통합될 수도 있다는 것을 유념하자.
도 20의 표(210)는 컴퓨터 시스템(10) 내의 넌코히런트 링크의 한 예시적인 실시예에 따라 이용되는 패킷들을 도시한다. 다른 모든 적절한 패킷들의 세트 및 커맨드 필드 엔코딩들을 포함하는 다른 실시예들이 또한 가능하며 고려된다. 표(210)는 각 커맨드에 할당된 커맨드 엔코딩들을 도시하는 커맨드 코드 칼럼과, 넌코히런트 패킷들이 속하는 가상 채널을 규정하는 가상 채널(Vchan) 칼럼과, 커맨드를 명명하는 커맨드 칼럼과, 그리고 그 커맨드에 대하여 어떤 커맨드 패킷들(30, 212 및 214)이 이용되는 지를 나타내는 패킷 타입 칼럼을 포함한다.
Nop, WrSized, ReadSized, RdResponse, TgtDone, Broadcast, 및 Sync 패킷들은 도 7과 관련하여 상기 설명된 대응하는 코히런트 패킷들과 유사할 수도 있다. 그러나, 넌코히런트 링크에서는, 어떠한 프로브 패킷들 또는 프로브 응답 패킷들도 없다.
Assign 및 AssignAck 패킷들은 노드들에 Unit IDs를 할당하는 데에 이용된다. 마스터 호스트 브리지는 (한번에 하나씩) 각 노드에 할당 패킷들을 전송하며, 마지막으로 이용되는 Unit ID를 나타낸다. 수신 노드는 그 노드에 의해 요구되는Unit IDs의 수를 할당하여, 마지막으로 이용되는 Unit ID+1에서 시작한다. 수신 노드는 할당된 Unit IDs의 수를 나타내는 ID 카운트를 포함하는 AssignAck 패킷을 리턴시킨다.
도 21은 넌코히런트 링크에서 이용될 수도 있는 커맨드 패킷(212)의 일 실시예의 블록도를 도시한다. 커맨드 패킷(212)은 코히런트 패킷과 유사한 커맨드 필드를 포함한다. 또한, 코히런트 커맨드 패킷과 유사하게, 선택 소스 택 필드(SrcTag)가 비트 타임 3에 포함될 수도 있다. 어드레스가 비트 타임들 5-8 (및 선택적으로 최하위 어드레스 비트들에 대해서는 비트 타임 4에) 포함된다. 그러나, 소스 노드 대신, 유닛 ID가 제공된다.
유닛 IDs는 (유닛 IDs가 동일한 경우) 동일한 논리 소스로부터 비롯되는 패킷들을 확인하는 역할을 한다. 그러나, I/O 노드는 (예를 들어, 노드가 논리적으로 개별적인 다수의 장치들 또는 기능들을 갖는 경우) 다수의 유닛 IDs를 가질 수도 있다. 따라서, 노드는 하나 이상의 유닛 ID를 갖는 패킷들을 수신할 수도 있다. 또한, 패킷들은 호스트 브리지와 노드 사이를 흐르기 때문에, 패킷 내에 포함되는 노드들중 하나(호스트 브리지 노드)는 그 패킷에 포함된다. 따라서, 넌코히런트 패킷 내에서는 단일 유닛 ID가 이용될 수도 있다. 일 실시예에서, 유닛 ID는 5 비트를 포함할 수도 있다. 유닛 ID 0은 호스트 브리지에 할당될 수도 있으며, 유닛 ID 31은 에러 경우들에 이용될 수도 있다. 따라서, 하나의 데이지 체인 내에 결합된 I/O 노드들 내에는 30개 까지의 유닛 IDs가 존재한다. 좀 더 명확하게 설명하면, 시퀀스 ID 필드가 제로라면, 패킷은 정렬되지 않는다. 만일 시퀀스 ID 필드가 제로가아니라면, 패킷은 동일한 시퀀스 ID 필드값을 갖는 다른 패킷들에 대하여 정렬된다.
도 22는 넌코히런트 링크에서 이용될 수도 있는 응답 패킷(214)의 일 실시예의 블록도를 도시한다. 응답 패킷(214)은 커맨드 패킷(212)과 유사하게, 커맨드 필드, 유닛 ID 필드, 및 소스 택 필드를 포함한다. 바람직한 경우, 다른 비트들이 포함될 수도 있다.
도 23은 I/O 노드(204A)의 일 실시예의 블록도를 도시한다. 다른 I/O 노드들(204B-204C) 또한 유사하게 구성될 수도 있다. 다른 실시예들이 또한 가능하며 고려된다. 도 23의 실시예에서, I/O 노드(204A)는 인터페이스 로직들(18M 및 18N), 제 1 세트의 패킷 버퍼들(220), 제 2 세트의 패킷 버퍼들(222), 및 노드 로직(224)을 포함한다. 인터페이스 로직(18M)은 라인들(24K 및 24L), 패킷 버퍼들(22) 및 노드 로직(224)에 결합된다. 인터페이스 로직(18N)은 라인들(24M 및 24N), 패킷 버퍼들(222) 및 노드 로직(224)에 결합된다. 노드 로직(224)은 또한 패킷 버퍼들(222 및 224)에 결합된다.
인터페이스 로직들(18M 및 18N)은 라인들(24L 및 24M)로부터 (각각) 패킷들을 수신하고, 라인들(24K 및 24N) 상으로 (각각) 패킷들을 전송하도록 구성된다. 코히런트 링크에 대하여 상기 설명된 인터페이스 로직과 유사하게, 인터페이스 로직들(18M 및 18N)은 수신된 패킷들을 제어 경로 및 데이터 경로로 분리할 수도 있다. 제어 로는 제어 패킷 버퍼들에 결합되고, 데이터 경로는 데이터 패킷 버퍼들에 결합된다. 또한, 인터페이스 로직은 수신된 패킷들을 제어 및 데이터 경로들로 분리하지 않을 수도 있으며, 노드 로직(224)은 분리를 수행하기 위하여 각 비트 타임에 대응하는 CTL 신호를 수신할 수도 있다. 코히런트 인터페이스와 유사하게, 패킷 버퍼들(220 및 222)은 넌코히런트 링크에서 실행되는 두 개의 가상 채널들에 대응하여, 제어 패킷들에 대한 커맨드 버퍼(CB) 및 응답 버퍼(RB)를 포함한다. 또한, 데이터 패킷 버퍼들(즉, 커맨드 데이터 버퍼(CDB) 및 응답 데이터 버퍼(RDB))이 각 가상 채널에 제공된다.
노드 로직(224)은 버퍼들(222 및 224) 내에 수신된 패킷들을 처리할 수도 있으며, I/O 노드(204A)에 의해 실행되는 주변 기능에 응답하여 패킷들을 시작할 수도 있다. 도 11에 도시된 제어 로직(66)과 유사하게, 노드 로직(224)은 (각각 패킷 버퍼들(222 및 224)에 대응하여) 제어 패킷 액티브 레지스터들(226A 및 226B) 및 (각각 패킷 버퍼들(222 및 224)에 대응하여) 데이터 패킷 액티브 레지스터들(228A 및 228B)를 실행할 수도 있다. 또한, 넌코히런트 링크는 노드 IDs 대신 유닛 IDs에 따라 작동하기 때문에, 노드로직(224)은 I/O 노드(204A)에 할당된 유닛 IDs를 저장하기 위한 하나 또는 그 이상의 유닛 ID 레지스터들(230A-230N)을 포함할 수도 있다. 유닛 ID 레지스터(230A-230N)의 수는, 그 노드 내에서 실행되는 유닛 IDs의 수에 따라, 노드 마다 다를 수도 있다.
다른 가상 채널들 내의 패킷들이 I/O 노드(204A) 내의 다른 버퍼들에 저장되기 때문에, 다른 가상 채널들 내의 패킷들은 서로 물리적으로 충돌하지 않는다. 이에 따라, 데드락이 없는 작동이 제공될 수도 있게 된다. 또한, 노드 로직(224)은 (상기 설명한 바와 같이) 응답 패킷들 및 응답 데이터를 처리하기 위하여 리소스들을 미리 할당할 수도 있으며, 이에 따라 (상기 설명한 바와 같이) 응답 패킷들은 단일의 가상 채널 내에 통합될 수도 있게 된다. 노드 로직(224)은 또한, 패킷들의 송신 및 수신에 대하여 제어 버퍼들(220 및 222) (및 다른 노드들 내의 유사한 버퍼들)을 순환(flow)시키기 위하여, (프로브 필드가 지정되어 있는) 도 18에 도시된 패킷과 유사하게 Nop 패킷들을 송수신하도록 구성될 수도 있다.
노드 로직(224)은 또한 다양한 I/O, 또는 I/O 노드(204A)에 의해 수행되는 주변 기능들에 대응하는 로직을 포함할 수도 있다. 예를 들어, I/O 노드(204A)는, 가령 디스크 드라이브들, CD ROMs, DVD 드라이브들 등과 같은 주변 저장 장치들을 포함할 수도 있다. I/O 노드(204A)는, 가령 IEEE 1394, 이서네트, 범용 직렬 버스(USB), 주변 요소 상호 연결(PCI) 버스, 모뎀 등과 같은 통신 주변 장치들을 포함할 수도 있다. 모든 적절한 I/O 기능들이 I/O 노드(204A)에 포함될 수도 있다.
도 24는 패킷을 수신하기 위한 노드 로직(224)의 일 실시예의 작동을 도시한 흐름도이다. 다른 실시예들이 또한 가능하며 고려된다. 도시된 실시예는 일련의 비트 타임들로서 패킷들을 버퍼들(220 및 222) 내에 수신한다. 다른 실시예들은 인터페이스 로직들(18M-18N) 내에 패킷의 비트 타임들을 모으고, 버퍼들(220 및 222)에 완전한 패킷들을 제공할 수도 있는데, 이러한 경우들에 있어서 비트 타임들로 패킷들의 수신을 조정하는 것에 관련된 단계들은 제거될 수도 있다. 도 24에 도시된 단계들은 이해의 용이를 위해 특정한 순서로 도시되었지만, 모든 적절한 순서가 이용될 수도 있다. 또한, 단계들은 노드 로직(224) 내의 결합 로직을 이용하여 동시에 수행될 수도 있다. 도 24에 도시된 단계들은, 비트 타임들이 각 인터페이스 로직으로부터 동시에 수신될 수도 있기 때문에, 동시에, 그리고 각 인터페이스 로직들(18M-18N)에 대하여 독립적으로 수행될 수도 있다. 단계들(100-112)은 상기 설명된 도 14의 대응하는 단계들과 유사할 수도 있다.
도 25는 커맨드 패킷을 처리하기 위한 노드 로직(224)의 일 실시예의 작동을 도시한 흐름도이다. 다른 실시예들이 또한 가능하며 고려된다. 도 25에 도시된 단계들은 이해의 용이를 위하여 특정한 순서도 도시되었지만, 모든 적절한 순서가 이용될 수도 있다. 또한, 단계들은 노드 로직(224) 내의 결합 로직을 이용하여 동시에 수행될 수도 있다. 도 25에 도시된 단계들은, 다른 인터페이스들 및/또는 다른 가상 채널들로부터의 커맨드 패킷들이 물리적으로 독립적이기 때문에, 동시에, 그리고 각각의 인터페이스 로직들(18M-18N) 및/또는 각각의 커맨드 패킷 버퍼와 독립적으로 수행될 수도 있다. 또한, 한 개의 커맨드 패킷 (또는 인터페이스 로직들(18M-18M) 마다 한 개의 커맨드 패킷)이 적절한 공정(fairness) 알고리즘에 따라 선택될 수도 있다. 일반적으로, 처리를 위하여 한 가상 채널로부터 선택되는 패킷들은 가상 채널 내의 패킷들에 대하여 정렬 룰들을 따르지만(예를 들어, 동일한 소스로부터 동일한 목적지로의 패킷들은 순서대로 선택된다); 바람직한 경우, 그리고 정렬 룰이 이러한 선택을 허용하는 경우, 패킷들은 처리를 위하여 순서를 벗어나게 선택될 수도 있다.
단계(126)는 일반적으로 (유닛 IDs 및 유닛 ID 레지스터들(230A-230N)을 기반으로 하기는 하지만) 도 15의 대응하는 단계와 유사할 수도 있다. 또한, 노드 로직(224)은 패킷 루팅표를 따르기 보다는, 패킷들을 동일한 방향(업스트림 또는 다운스트림)으로 전송하도록 구성된다. 패킷이 이 노드에 타겟을 둔다면, 노드 로직(224)은 (다운스트림 흐름으로부터의 패킷을 제거하면서) 패킷을 수신하고 패킷을 처리한다(단계 240). 일단 커맨드 패킷이 처리되면(이 노드에 의해 전송 또는 수신된면), 커맨드 패킷은 커맨드 버퍼 엔트리로부터 제거되며 (그리고 적용가능한 경우, 데이터 패킷은 데이터 버퍼 엔트리로부터 제거된다)는 것을 유념하자.
만일 선택된 커맨드 패킷이 대응하는 데이터 패킷을 지정한다면, 다양한 실시예들은 데이터 패킷이 아직 수신되지 않았다고 할지라도 커맨드 패킷을 처리할 수도 있으며, 또는 데이터의 전송을 단순화하기 위하여, 또는 동일한 링크 상에서 전송이 완료되는 데이터 패킷을 지정하는 다른 제어 패킷을 허용하기 위하여 데이터 패킷의 도달을 기다릴 수도 있다는 것을 유념하자. 만일 커맨드 패킷이 처리될 때 데이터 패킷이 아직 수신되지 않았다면, 데이터 패킷은 이 데이터 패킷이 수신될 때 상기 설명한 바와 같이 처리될 수도 있다.
도 26은 응답 패킷을 처리하기 위한 노드 로직(224)의 일 실시예의 작동을 도시한 흐름도이다. 다른 실시예들이 또한 가능하며 고려된다. 도 26에 도시된 단계들은 이해의 용이를 위하여 특정한 순서로 도시되었지만, 모든 적절한 순서가 이용될 수도 있다. 또한, 단계들은 노드 로직(224) 내의 결합 로직을 이용하여 동시에 수행될 수도 있다. 도 26에 도시된 단계들은, 다른 인터페이스들 및/또는 다른 가상 채널들로부터의 커매드 패킷들이 물리적으로 독립적이기 때문에, 동시에, 그리고 각각의 인터페이스 로직들(18M-18N) 및/또는 각 응답 패킷 버퍼와 독립적으로 수행될 수도 있다. 단계들(114)은 (노드 로직(224)에 대하여 유닛 IDs 및 유닛 ID레지스터들(230A-230N)을 기반으로 함에도 불구하고), 도 16의 대응 단계들과 유사할 수도 있다.
목적지 노드가 다른 노드라면, 노드 로직(224)은 응답 패킷들 (및 적용가능한 경우, 대응하는 데이터 패킷)을, 응답 패킷이 전송되는 링크 상의 수신기 내의 응답 가상 채널에 대한 빈 버퍼 엔트리로 전송한다(단계 250). 수신기는 응답 패킷을 패킷이 이미 흐르고 있는 동일한 방향(업스트림 또는 다운스트림)으로 흐를 수 있게 하는 노드이다.
만일 응답 패킷의 목적지 노드가 이 노드라면, 노드 로직(224)은, 만일 있다면, 대응하는 응답 데이터 버퍼로부터의 해당하는 데이터 패킷을 그 응답에 할당된 데이터 버퍼로 이동시키도록 구성된다(단계 252). 다시 말해, 노드 로직(224)은 데이터를 다 써버린다. 이후, 노드 로직(224)은 해당하는 커맨드를 완료하고, 데이터 버퍼의 할당을 해제한다(단계 254). 일단 응답 패킷이 처리되면(이 노드에 의해 전송 또는 수신되면), 응답 패킷이 응답 버퍼 엔트리로부터 제거되며 (그리고 적용가능한 경우, 데이터 패킷이 데이터 버퍼 엔트리로부터 제거된다)는 것을 유념하자.
만일 선택된 응답 패킷이 대응하는 데이터 패킷을 지정한다면, 다양한 실시예들은 데이터 패킷이 아직 수신되지 않았을 지라도 응답 패킷을 처리할 수도 있으며, 또는 데이터의 전송을 단순화하기 위하여, 또는 동일한 링크 상에서 전송이 완료되는 데이터 패킷을 지정하는 다른 제어 패킷을 가능하게 하기 위하여 데이터 패킷의 도달을 기다릴 수도 있다는 것을 유념하자. 만일 응답 패킷이 처리될 때 데이터 패킷이 아직 수신되지 않았다면, 데이터 패킷은 이 데이터 패킷이 수신될 때 상기 설명한 바와 같이 처리될 수도 있다.
도 27은 노드가 결합된 링크들 상에서 패킷을 시작하기 위한 노드 로직의 일 실시예의 작동을 도시한 흐름도이다. 다른 실시예들이 또한 가능하며 고려된다. 도 27에 도시된 단계들은 이해의 용이를 위하여 특정한 순서로 도시되었지만, 모든 적절한 순서가 이용될 수도 있다. 또한, 단계들은 노드 로직(224) 내의 결합 로직을 이용하여 동시에 수행될 수도 있다.
노드 로직(224)은 시작될 트랜잭션들이 이 노드로 리턴되는 데이터가 될 수도 있는 지를 결정한다(결정 블록 260). 예를 들어, 노드에 의해 시작되는 판독 트랜잭션들은 데이터를 노드로 리턴시키며, 노드에 의해 시작되는 기록 트랜잭션들은 데이터를 노드로 리턴시키지 못한다. 만일 트랜잭션이 데이터를 이 노드로 리턴되게 한다면, 노드 로직(224)은 리턴된 데이터를 저장하기 위하여 데이터 버퍼를 할당한다(단계 262).
본 발명은 컴퓨터 시스템들에 적용할 수 있다.

Claims (10)

  1. 컴퓨터 시스템(10) 내에서 다수의 노드들(12A-12D, 204A-204C) 간에 패킷들을 루팅하는 방법으로서,
    상기 다수의 노드들(12A-12D, 204A-204C)중 제 1 노드(12A, 204A)에서 제 1 제어 패킷을 수신하는 단계와, 여기서 상기 제 1 노드(12A, 204A)는 다수의 제어 패킷 버퍼들(60A-60C, 220)을 포함하고, 상기 다수의 제어 패킷 버퍼들(60A-60C, 220) 각각은 다수의 가상 채널들(40A-40B)의 개별적인 채널에 할당되며;
    상기 제 1 제어 패킷이 속하는 상기 다수의 가상 채널들(40A-40B)의 제 1 가상 채널(40A)을 결정하는 단계와; 그리고
    상기 다수의 제어 패킷 버퍼들(60A-60C, 220)중 제 1 제어 패킷 버퍼(60A, 220)에 제 1 제어 패킷을 저장하는 단계를 포함하며, 상기 제 1 제어 패킷 버퍼(60A, 220)은 상기 제 1 가상 채널(40A)에 할당되는 것을 특징으로 하는 방법.
  2. 제 1 항에 있어서,
    상기 제 1 제어 패킷에 의해 지정되는 제 1 데이터 패킷을 수신하는 단계와; 그리고
    상기 제 1 노드(12A, 204A) 내의 다수의 데이터 버퍼들(60D-60E, 220)중 제 1 데이터 버퍼(60D, 220)에 상기 제 1 데이터 패킷을 저장하는 단계를 더 포함하며, 상기 다수의 데이터 버퍼들(60D-60E, 220) 각각은 대응하는 데이터 패킷을 지정하는 적어도 하나의 제어 패킷을 포함하는 상기 다수의 가상 채널들(40A-40B)의 개별적인 채널에 할당되는 것을 특징으로 하는 방법.
  3. 제 1 항에 있어서,
    상기 제 1 노드(12A, 204A)에서 제 2 제어 패킷을 수신하는 단계와;
    상기 제 2 제어 패킷이 속하는 상기다수의 가상 채널들(40A-40B)중 제 2 가상 채널(40B)을 결정하는 단계와, 여기서 상기 제 2 가상 채널(40B)은 상기 제 1 가상 채널(40A)과 다르며; 그리고
    상기 다수의 제어 패킷 버퍼들(60A-60C, 220)중 제 2 제어 패킷 버퍼(60B, 220) 내에, 상기 제 2 가상 채널(40B)에 할당된 상기 제 2 제어 패킷을 저장하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  4. 제 3 항에 있어서,
    상기 다수의 노드들(12A-12D, 204A-204C)중 제 2 노드(12B, 204B)로 상기 제 1 제어 패킷을 전송하는 단계와, 여기서 상기 제 2 노드(12B, 204B)는 제 2 다수의 제어 패킷 버퍼들(60A-60C, 220)을 포함하고, 상기 제 2 다수의 제어 패킷 버퍼들(60A-60C, 220)은 상기 다수의 가상 채널들(40A-40B)의 개별적인 채널에 할당되며, 상기 제 2 다수의 제어 패킷 버퍼들(60A-60C, 220)의 제 3 제어 패킷 버퍼(60A, 220)에 응답하는 상기 전송은 상기 제 1 제어 패킷을 저장하기 위한 공간을 포함하고, 상기 제 3 제어 패킷 버퍼(60A, 220)는 상기 제 1 가상 채널(40A)에 할당되며; 그리고
    상기 제 2 제어 패킷을 저장하기 위한 공간을 포함하는 상기 제 2 다수의 제어 패킷 버퍼들(60A-60C, 220)중 제 4 제어 패킷 버퍼(60B, 220)에 응답하여 상기 제 2 노드로 상기 제 2 제어 패킷을 전송하는 단계를 더 포함하며, 상기 제 4 제어 패킷 버퍼(60B, 220)는 상기 제 2 가상 채널(40B)에 할당되는 것을 특징으로 하는 방법.
  5. 제 1 제어 패킷을 전송하도록 구성된 제 1 노드(12A, 204B)와; 그리고
    상기 제 1 노드(12A, 204B)로부터 상기 제 1 제어 패킷을 수신하도록 결합된 제 2 노드(12B, 204A)를 포함하며, 상기 제 2 노드(12B, 204A)는 다수의 제어 패킷 버퍼들(60A-60C, 220)을 포함하고, 상기 다수의 제어 패킷 버퍼들(60A-60C, 220) 각각은 다수의 가상 채널들(40A-40B)의 개별적인 채널에 할당되며, 그리고 상기 제 2 노드(12B, 204A)는 상기 제 1 제어 패킷이 속하는 상기 다수의 가상 채널들(40A-40B)중 제 1 가상 채널(40A)에 응답하여 상기 다수의 제어 패킷 버퍼들(60A-60C, 220)중 제 1 제어 패킷 버퍼(60A, 220) 내에 상기 제 1 제어 패킷을 저장하도록 구성되는 것을 특징으로 하는 컴퓨터 시스템.
  6. 제 5 항에 있어서, 상기 제 2 노드(12B, 204A)는 다수의 데이터 버퍼들(60D-60E, 220)을 더 포함하며, 상기 다수의 데이터 버퍼들(60D-60E, 220)은 대응하는 데이터 패킷을 지정하는 적어도 하나의 제어 패킷을 포함하는 상기 다수의 가상 채널들(40A-40B)의 개별적인 채널에 할당되는 것을 특징을 하는 컴퓨터 시스템.
  7. 제 6 항에 있어서, 제 1 노드(12A, 204B)는 상기 제 1 제어 패킷에 의해 지정된 제 1 데이터 패킷을 전송하도록 구성되고, 상기 제 2 노드(12B, 204A)는 상기 다수의 데이터 버퍼들(60D-60E, 220)중 제 1 데이터 버퍼(60D, 220) 내에 상기 제 1 데이터 패킷을 저장하도록 구성되며, 상기 제 1 데이터 버퍼(60D, 220)는 상기 제 1 가상 채널(40A)에 할당되는 것을 특징으로 하는 컴퓨터 시스템.
  8. 제 5 항에 있어서, 상기 제 1 노드(12A, 204B)는 상기 다수의 가상 채널들(40A-40B)중 제 2 가상 채널(40B)에 속하는 제 2 제어 패킷을 전송하도록 구성되고, 상기 제 2 가상 채널(40B)은 상기 제 1 가상 채널(40A)과 다르며, 그리고 상기 제 2 노드(12B, 204A)는 상기 다수의 제어 패킷 버퍼들(60A-60C, 220)중 제 2 제어 패킷 버퍼(60B, 220) 내에 상기 제 2 제어 패킷을 저장하도록 구성되는 것을 특징으로 하는 컴퓨터 시스템.
  9. 제 7 항에 있어서, 상기 제 2 노드(12B, 204A)가 상기 제 1 제어 패킷의 목적지라면, 상기 제 2 노드(12B, 204A)는 상기 제 1 제어 패킷 버퍼(60A, 220)로부터 상기 제 1 제어 패킷을 제거하고, 상기 제 1 제어 패킷에 응답하도록 구성되며, 그리고 상기 제 2 노드(12B, 204A)는 상기 제 1 데이터 버퍼(60D, 220)로부터 상기 제 1 데이터 패킷을 제거하고 상기 제 1 데이터 패킷을 처리하도록 구성되는 것을특징으로 하는 컴퓨터 시스템.
  10. 제 7 항에 있어서, 상기 제 2 노드(12B, 204A)로부터 패킷들을 수신하도록 결합된 제 3 노드(12C, 204C)를 더 포함하고, 상기 제 2 노드(12B, 204A)가 상기 제 1 제어 패킷의 목적지가 아니라면, 상기 제 2 노드(12B, 204A)는 상기 제 1 제어 패킷 버퍼(60A, 220)로부터 상기 제 1 제어 패킷을 제거하고 상기 제 3 노드(12C, 204C)로 상기 제 1 제어 패킷을 전송하도록 구성되며, 그리고 상기 제 2 노드(12B, 204A)는 상기 제 1 데이터 버퍼(60D, 220)로부터 상기 제 1 데이터 패킷을 제거하고 상기 제 3 노드(12C, 204C)로 상기 제 1 데이터 패킷을 전송하도록 구성되는 것을 특징으로 하는 방법.
KR1020027003545A 1999-09-17 2000-05-09 데드락이 없는 컴퓨터 시스템 동작을 위한 가상 채널들 및 대응하는 버퍼 할당 KR100643873B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/399,281 1999-09-17
US09/399,281 US6938094B1 (en) 1999-09-17 1999-09-17 Virtual channels and corresponding buffer allocations for deadlock-free computer system operation

Publications (2)

Publication Number Publication Date
KR20020030825A true KR20020030825A (ko) 2002-04-25
KR100643873B1 KR100643873B1 (ko) 2006-11-10

Family

ID=23578934

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020027003545A KR100643873B1 (ko) 1999-09-17 2000-05-09 데드락이 없는 컴퓨터 시스템 동작을 위한 가상 채널들 및 대응하는 버퍼 할당

Country Status (6)

Country Link
US (1) US6938094B1 (ko)
EP (1) EP1222558B1 (ko)
JP (1) JP4410967B2 (ko)
KR (1) KR100643873B1 (ko)
DE (1) DE60003834T2 (ko)
WO (1) WO2001022247A1 (ko)

Families Citing this family (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7230917B1 (en) * 2001-02-22 2007-06-12 Cisco Technology, Inc. Apparatus and technique for conveying per-channel flow control information to a forwarding engine of an intermediate network node
WO2003019394A1 (en) * 2001-08-24 2003-03-06 Intel Corporation A general input/output architecture, protocol and related methods to support legacy interrupts
US9836424B2 (en) 2001-08-24 2017-12-05 Intel Corporation General input/output architecture, protocol and related methods to implement flow control
US7979573B2 (en) * 2002-05-15 2011-07-12 Broadcom Corporation Smart routing between peers in a point-to-point link based system
US7447872B2 (en) * 2002-05-30 2008-11-04 Cisco Technology, Inc. Inter-chip processor control plane communication
US20040122973A1 (en) * 2002-12-19 2004-06-24 Advanced Micro Devices, Inc. System and method for programming hyper transport routing tables on multiprocessor systems
JP4891521B2 (ja) 2003-03-28 2012-03-07 三洋電機株式会社 データ入出力方法、およびその方法を利用可能な記憶装置およびホスト装置
US7386626B2 (en) * 2003-06-23 2008-06-10 Newisys, Inc. Bandwidth, framing and error detection in communications between multi-processor clusters of multi-cluster computer systems
US7395347B2 (en) * 2003-08-05 2008-07-01 Newisys, Inc, Communication between and within multi-processor clusters of multi-cluster computer systems
US7949782B2 (en) * 2003-11-06 2011-05-24 Qualcomm Incorporated Extended link monitoring channel for 10 Gb/s Ethernet
US7793067B2 (en) * 2005-08-12 2010-09-07 Globalfoundries Inc. Translation data prefetch in an IOMMU
US7543131B2 (en) 2005-08-12 2009-06-02 Advanced Micro Devices, Inc. Controlling an I/O MMU
US7516247B2 (en) 2005-08-12 2009-04-07 Advanced Micro Devices, Inc. Avoiding silent data corruption and data leakage in a virtual environment with multiple guests
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)
US9053072B2 (en) * 2007-01-25 2015-06-09 Hewlett-Packard Development Company, L.P. End node transactions at threshold-partial fullness of storage space
US7809006B2 (en) * 2007-08-16 2010-10-05 D. E. Shaw Research, Llc Routing with virtual channels
JP5119882B2 (ja) * 2007-11-21 2013-01-16 富士通株式会社 メモリクロック設定機能を有する情報処理装置およびメモリクロック設定方法
US7562168B1 (en) 2008-05-29 2009-07-14 International Business Machines Corporation Method of optimizing buffer usage of virtual channels of a physical communication link and apparatuses for performing the same
KR101250666B1 (ko) * 2009-01-30 2013-04-03 후지쯔 가부시끼가이샤 정보 처리 시스템, 정보 처리 장치, 정보 처리 장치의 제어 방법, 및 컴퓨터 판독 가능한 기록 매체
JP5696779B2 (ja) * 2011-03-22 2015-04-08 富士通株式会社 並列計算機システム及び並列計算機システムの制御方法
US8631212B2 (en) 2011-09-25 2014-01-14 Advanced Micro Devices, Inc. Input/output memory management unit with protection mode for preventing memory access by I/O devices
US9007962B2 (en) 2013-01-24 2015-04-14 International Business Machines Corporation Deadlock-free routing using edge-disjoint sub-networks
RU2653306C1 (ru) * 2014-03-20 2018-05-07 Интел Корпорейшн Способ, устройство и система для управления потреблением энергии неиспользуемым аппаратным средством канального интерфейса
US20160188519A1 (en) * 2014-12-27 2016-06-30 Intel Corporation Method, apparatus, system for embedded stream lanes in a high-performance interconnect
US10075383B2 (en) 2016-03-30 2018-09-11 Advanced Micro Devices, Inc. Self-timed router with virtual channel control
US11238041B2 (en) * 2020-03-25 2022-02-01 Ocient Holdings LLC Facilitating query executions via dynamic data block routing

Family Cites Families (37)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4905231A (en) 1988-05-03 1990-02-27 American Telephone And Telegraph Company, At&T Bell Laboratories Multi-media virtual circuit
GB8915136D0 (en) 1989-06-30 1989-08-23 Inmos Ltd Method for controlling communication between computers
JPH06509896A (ja) 1992-05-12 1994-11-02 セイコーエプソン株式会社 スケーラブル・コプロセッサ
US5533198A (en) * 1992-11-30 1996-07-02 Cray Research, Inc. Direction order priority routing of packets between nodes in a networked system
US6157967A (en) 1992-12-17 2000-12-05 Tandem Computer Incorporated Method of data communication flow control in a data processing system using busy/ready commands
JP3501305B2 (ja) * 1993-08-04 2004-03-02 サン・マイクロシステムズ・インコーポレイテッド 相互接続制御装置及び方法
US5583990A (en) 1993-12-10 1996-12-10 Cray Research, Inc. System for allocating messages between virtual channels to avoid deadlock and to optimize the amount of message traffic on each type of virtual channel
US5613129A (en) 1994-05-02 1997-03-18 Digital Equipment Corporation Adaptive mechanism for efficient interrupt processing
FI98774C (fi) * 1994-05-24 1997-08-11 Nokia Telecommunications Oy Menetelmä ja laitteisto liikenteen priorisoimiseksi ATM-verkossa
JPH08185380A (ja) 1994-12-28 1996-07-16 Hitachi Ltd 並列計算機
US5659796A (en) * 1995-04-13 1997-08-19 Cray Research, Inc. System for randomly modifying virtual channel allocation and accepting the random modification based on the cost function
US5822540A (en) 1995-07-19 1998-10-13 Fujitsu Network Communications, Inc. Method and apparatus for discarding frames in a communications device
GB2304210B (en) * 1995-08-11 2000-02-16 Fujitsu Ltd Data receiving devices
US6055618A (en) * 1995-10-31 2000-04-25 Cray Research, Inc. Virtual maintenance network in multiprocessing system having a non-flow controlled virtual maintenance channel
US6094431A (en) * 1995-11-30 2000-07-25 Kabushiki Kaisha Toshiba Node device and network resource reservation method for data packet transfer using ATM networks
US5848068A (en) 1996-03-07 1998-12-08 Lsi Logic Corporation ATM communication system interconnect/termination unit
US5748900A (en) 1996-03-13 1998-05-05 Cray Research, Inc. Adaptive congestion control mechanism for modular computer networks
JPH09293015A (ja) 1996-04-24 1997-11-11 Mitsubishi Electric Corp メモリシステムおよびそれに用いられる半導体記憶装置
US5892970A (en) 1996-07-01 1999-04-06 Sun Microsystems, Inc. Multiprocessing system configured to perform efficient block copy operations
US5749095A (en) 1996-07-01 1998-05-05 Sun Microsystems, Inc. Multiprocessing system configured to perform efficient write operations
US5881316A (en) 1996-11-12 1999-03-09 Hewlett-Packard Company Dynamic allocation of queue space using counters
US5996013A (en) * 1997-04-30 1999-11-30 International Business Machines Corporation Method and apparatus for resource allocation with guarantees
US6122700A (en) 1997-06-26 2000-09-19 Ncr Corporation Apparatus and method for reducing interrupt density in computer systems by storing one or more interrupt events received at a first device in a memory and issuing an interrupt upon occurrence of a first predefined event
US6005851A (en) * 1997-10-10 1999-12-21 Nortel Networks Corporation Adaptive channel control for data service delivery
US6014690A (en) * 1997-10-24 2000-01-11 Digital Equipment Corporation Employing multiple channels for deadlock avoidance in a cache coherency protocol
US6279084B1 (en) 1997-10-24 2001-08-21 Compaq Computer Corporation Shadow commands to optimize sequencing of requests in a switch-based multi-processor system
US6094686A (en) * 1997-10-24 2000-07-25 Compaq Computer Corporation Multi-processor system for transferring data without incurring deadlock using hierarchical virtual channels
US6101420A (en) * 1997-10-24 2000-08-08 Compaq Computer Corporation Method and apparatus for disambiguating change-to-dirty commands in a switch based multi-processing system with coarse directories
GB9809183D0 (en) 1998-04-29 1998-07-01 Sgs Thomson Microelectronics Microcomputer with interrupt packets
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
US6205508B1 (en) 1999-02-16 2001-03-20 Advanced Micro Devices, Inc. Method for distributing interrupts in a multi-processor system
US6449267B1 (en) * 1999-02-24 2002-09-10 Hughes Electronics Corporation Method and apparatus for medium access control from integrated services packet-switched satellite networks
US6370600B1 (en) 1999-05-25 2002-04-09 Advanced Micro Devices, Inc. Staging buffer for translating clock domains when source clock frequency exceeds target clock frequency
US6389526B1 (en) 1999-08-24 2002-05-14 Advanced Micro Devices, Inc. Circuit and method for selectively stalling interrupt requests initiated by devices coupled to a multiprocessor system
US6484220B1 (en) 1999-08-26 2002-11-19 International Business Machines Corporation Transfer of data between processors in a multi-processor system
GB2360168B (en) 2000-03-11 2003-07-16 3Com Corp Network switch including hysteresis in signalling fullness of transmit queues
US6715055B1 (en) 2001-10-15 2004-03-30 Advanced Micro Devices, Inc. Apparatus and method for allocating buffer space

Also Published As

Publication number Publication date
JP2003510686A (ja) 2003-03-18
KR100643873B1 (ko) 2006-11-10
DE60003834D1 (de) 2003-08-14
US6938094B1 (en) 2005-08-30
JP4410967B2 (ja) 2010-02-10
EP1222558A1 (en) 2002-07-17
EP1222558B1 (en) 2003-07-09
DE60003834T2 (de) 2004-05-13
WO2001022247A1 (en) 2001-03-29

Similar Documents

Publication Publication Date Title
KR100643873B1 (ko) 데드락이 없는 컴퓨터 시스템 동작을 위한 가상 채널들 및 대응하는 버퍼 할당
US6950438B1 (en) System and method for implementing a separate virtual channel for posted requests in a multiprocessor computer system
US6888843B2 (en) Response virtual channel for handling all responses
US6473849B1 (en) Implementing locks in a distributed processing system
US6721813B2 (en) Computer system implementing a system and method for tracking the progress of posted write transactions
KR100605142B1 (ko) 코히런시를 유지하기 위한 유연한 프로브/프로브 응답 라우팅
US6745272B2 (en) System and method of increasing bandwidth for issuing ordered transactions into a distributed communication system
US6557048B1 (en) Computer system implementing a system and method for ordering input/output (IO) memory operations within a coherent portion thereof
JP4700773B2 (ja) スイッチをベースとするマルチプロセッサシステムに使用するための順序サポート機構
US6725307B1 (en) Method and system for controlling data transfers with physical separation of data functionality from address and control functionality in a distributed multi-bus multiprocessor system
US6715055B1 (en) Apparatus and method for allocating buffer space
JP4660064B2 (ja) 分散処理システムにおけるロックの実行
JPH11282821A (ja) 同時トランザクションを依存性で管理するための低占有度プロトコル
EP1412871B1 (en) Method and apparatus for transmitting packets within a symmetric multiprocessor system
US7295563B2 (en) Method and apparatus for routing packets that have ordering requirements
US20020083254A1 (en) System and method of implementing interrupts in a computer processing system having a communication fabric comprising a plurality of point-to-point links
EP1314094B1 (en) System and method for separate virtual channels for posted requests in a multiprocessor system
US6714994B1 (en) Host bridge translating non-coherent packets from non-coherent link to coherent packets on conherent link and vice versa
US7221678B1 (en) Method and apparatus for routing packets
US7274692B1 (en) Method and apparatus for routing packets that have multiple destinations
US6457085B1 (en) Method and system for data bus latency reduction using transfer size prediction for split bus designs
US7043612B2 (en) Compute node to mesh interface for highly scalable parallel processing system and method of exchanging data
US6757793B1 (en) Reducing probe traffic in multiprocessor systems using a victim record table
EP1363188B1 (en) Load-linked/store conditional mechanism in a cc-numa (cache-coherent nonuniform memory access) system

Legal Events

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

Payment date: 20121030

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20131017

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20141022

Year of fee payment: 9

FPAY Annual fee payment

Payment date: 20151002

Year of fee payment: 10

FPAY Annual fee payment

Payment date: 20160929

Year of fee payment: 11

FPAY Annual fee payment

Payment date: 20181001

Year of fee payment: 13