KR20230163559A - 메시지 전달 회로부 및 방법 - Google Patents

메시지 전달 회로부 및 방법 Download PDF

Info

Publication number
KR20230163559A
KR20230163559A KR1020237037866A KR20237037866A KR20230163559A KR 20230163559 A KR20230163559 A KR 20230163559A KR 1020237037866 A KR1020237037866 A KR 1020237037866A KR 20237037866 A KR20237037866 A KR 20237037866A KR 20230163559 A KR20230163559 A KR 20230163559A
Authority
KR
South Korea
Prior art keywords
channel
consumer
message
event notification
address
Prior art date
Application number
KR1020237037866A
Other languages
English (en)
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 KR20230163559A publication Critical patent/KR20230163559A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7807System on chip, i.e. computer system on a single chip; System in package, i.e. computer system on one or more chips in a single package
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1009Address translation using page tables, e.g. page table structures
    • 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/17Interprocessor communication using an input/output type connection, e.g. channel, I/O port
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7807System on chip, i.e. computer system on a single chip; System in package, i.e. computer system on one or more chips in a single package
    • G06F15/7817Specially adapted for signal processing, e.g. Harvard architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/542Event management; Broadcasting; Multicasting; Notifications
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2115/00Details relating to the type of the circuit
    • G06F2115/02System on chip [SoC] design

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Microelectronics & Electronic Packaging (AREA)
  • Computing Systems (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Multi Processors (AREA)
  • Storage Device Security (AREA)

Abstract

메시지 전달 회로부는, 시스템-온-칩의 생성자 노드에 의해 타깃 메시지 채널 상에서 제공되는 메시지 데이터를 표시하는 생성자 요청에 응답하여, 채널 소비자 정보 구조로부터, 타깃 메시지 채널에 가입한 주어진 소비자 노드와 연관된 선택된 채널 소비자 정보를 획득하기 위한 룩업 회로부를 포함한다. 제어 회로부는, 선택된 채널 소비자 정보에 기초하여 결정된 어드레스 공간의 소비자-정의된 구역 내의 어드레스와 연관된 위치에 메시지 데이터를 기입한다. 이벤트 통지 조건이 타깃 메시지 채널 및 주어진 소비자 노드에 대해 만족되고, 이벤트 통지 채널이 사용될 때, 이벤트 통지 데이터는 이벤트 통지 채널과 연관된 이벤트 통지 채널 소비자 정보에 기초하여 결정된 어드레스 공간의 소비자-정의된 구역 내의 어드레스와 연관된 위치에 기입된다.

Description

메시지 전달 회로부 및 방법
본 기법은 시스템-온-칩(SOC)들의 분야에 관한 것이다.
시스템-온-칩(SoC)은 서로 통신할 수 있는 다수의 회로 노드들을 가질 수 있다. 하나의 노드에서 실행되는 소프트웨어는 SoC의 다른 노드에 의해 생성된 데이터를 획득할 필요가 있을 수 있다. 하나의 접근법은 생성자 노드 및 소비자 노드가 메시지들을 교환하기 위해 메모리의 공유 구역을 사용할 수 있다는 것일 수 있다. 그러나, 공유 메모리의 사용은 일관성(coherency) 문제들을 도입할 수 있으며, 특히 생성자로부터의 동일한 메시지들이 다수의 소비자들에 의해 수신되어야 한다면 잘 스케일링되지 않을 수 있다.
적어도 일부 예들은 시스템-온-칩의 노드들 사이의 메시지 전달을 위한 메시지 전달 회로부를 제공하며; 메시지 전달 회로부는, 시스템-온-칩의 생성자 노드에 의해 타깃 메시지 채널 상에서 제공되는 메시지 데이터를 표시하는 생성자 요청에 응답하여, 복수의 메시지 채널들 및 메시지 채널들에 가입한 시스템-온-칩의 하나 이상의 소비자 노드들에 대한 채널 소비자 정보를 특정하기 위한 채널 소비자 정보 구조로부터, 타깃 메시지 채널에 가입한 주어진 소비자 노드와 연관된 선택된 채널 소비자 정보를 획득하기 위한 룩업 회로부; 및 제어 회로부를 포함하며, 제어 회로부는, 선택된 채널 소비자 정보에 기초하여 결정된 어드레스 공간의 소비자-정의된 구역 내의 어드레스와 연관된 위치에 생성자 요청에 의해 표시된 메시지 데이터를 기입하고; 이벤트 통지 조건이 타깃 메시지 채널 및 주어진 소비자 노드에 대해 만족될 때: 이벤트 통지 조건에 응답하여, 타깃 메시지 채널에 대한 이벤트 통지들이 주어진 소비자 노드에 제공될 때, 이벤트 통지를 주어진 소비자 노드에 제공하고; 타깃 메시지 채널에 대한 이벤트 통지들이 상기 복수의 메시지 채널들의 이벤트 통지 채널 상에서 제공될 때, 이벤트 통지 데이터로 하여금, 이벤트 통지 채널과 연관된 이벤트 통지 채널 소비자 정보에 기초하여 결정된 어드레스 공간의 소비자-정의된 구역 내의 어드레스와 연관된 위치에 기입되게 하기 위한 것이다.
적어도 일부 예들은 시스템-온-칩을 제공하며, 그 시스템-온-칩은, 복수의 노드들; 및 노드들 사이에서 메시지들을 전달하기 위한 메시지 전달 회로부를 포함하고, 메시지 전달 회로부는, 시스템-온-칩의 생성자 노드에 의해 타깃 메시지 채널 상에서 제공되는 메시지 데이터를 표시하는 생성자 요청에 응답하여, 복수의 메시지 채널들 및 메시지 채널들에 가입한 시스템-온-칩의 하나 이상의 소비자 노드들에 대한 채널 소비자 정보를 특정하기 위한 채널 소비자 정보 구조로부터, 타깃 메시지 채널에 가입한 주어진 소비자 노드와 연관된 선택된 채널 소비자 정보를 획득하기 위한 룩업 회로부; 및 제어 회로부를 포함하며, 제어 회로부는, 선택된 채널 소비자 정보에 의해 표시된 어드레스 공간의 소비자-정의된 구역 내의 어드레스와 연관된 위치에 생성자 요청에 의해 표시된 메시지 데이터를 기입하고; 이벤트 통지 조건이 타깃 메시지 채널 및 주어진 소비자 노드에 대해 만족될 때: 이벤트 통지 조건에 응답하여, 타깃 메시지 채널에 대한 이벤트 통지들이 주어진 소비자 노드에 제공될 때, 이벤트 통지를 주어진 소비자 노드에 제공하고; 타깃 메시지 채널에 대한 이벤트 통지들이 상기 복수의 메시지 채널들의 이벤트 통지 채널 상에서 제공될 때, 이벤트 통지 데이터로 하여금, 이벤트 통지 채널과 연관된 이벤트 통지 채널 소비자 정보에 기초하여 결정된 어드레스 공간의 소비자-정의된 구역 내의 어드레스와 연관된 위치에 기입되게 하기 위한 것이다.
적어도 일부 예들은 시스템-온-칩의 노드들 사이의 메시지 전달을 위한 방법을 제공하며; 메시지 전달 회로부는, 시스템-온-칩의 생성자 노드에 의해 타깃 메시지 채널 상에서 제공되는 메시지 데이터를 표시하는 생성자 요청에 응답하여, 복수의 메시지 채널들 및 메시지 채널들에 가입한 시스템-온-칩의 하나 이상의 소비자 노드들에 대한 채널 소비자 정보를 특정하기 위한 채널 소비자 정보 구조로부터, 타깃 메시지 채널에 가입한 주어진 소비자 노드와 연관된 선택된 채널 소비자 정보를 획득하는 것; 선택된 채널 소비자 정보에 의해 표시된 어드레스 공간의 소비자-정의된 구역에 생성자 요청에 의해 표시된 메시지 데이터를 기입하는 것; 및 이벤트 통지 조건이 타깃 메시지 채널 및 주어진 소비자 노드에 대해 만족될 때: 이벤트 통지 조건에 응답하여, 타깃 메시지 채널에 대한 이벤트 통지들이 주어진 소비자 노드에 제공될 때, 이벤트 통지를 주어진 소비자 노드에 제공하는 것; 및 타깃 메시지 채널에 대한 이벤트 통지들이 상기 복수의 메시지 채널들의 이벤트 통지 채널 상에서 제공될 때, 이벤트 통지 데이터로 하여금, 이벤트 통지 채널과 연관된 이벤트 통지 채널 소비자 정보에 기초하여 결정된 어드레스 공간의 소비자-정의된 구역에 기입되게 하는 것을 포함한다.
본 기법의 추가적인 태양들, 특징들 및 장점들이 첨부 도면들과 관련하여 판독될 예들의 다음의 설명으로부터 명백해질 것이다.
도 1은 메시지 전달 회로부를 갖는 시스템-온-칩의 일 예를 개략적으로 예시한다.
도 2는 메시지 전달 회로부를 더 상세히 예시한다.
도 3은 메시지 채널을 통해 생성자 가상 어드레스 공간으로부터 하나 이상의 소비자 가상 어드레스 공간들로 메시지들을 전달하는 개념을 개략적으로 예시한다.
도 4는 소비자 노드에 의한 메시지 채널의 구성 및 메시지 채널을 통한 생성자 노드로부터 소비자 노드로의 메시지의 전달을 개략적으로 예시한다.
도 5는 타깃 메시지 채널 상에서 메시지를 제공하기 위한 생성자 요청 및 주어진 메시지 채널에 가입한 소비자 노드에 의해 구성된 정보를 제공하는 채널 소비자 정보의 일 예를 도시한다.
도 6은 비교를 위해, 주어진 소비자 노드가 다수의 메시지 채널들을 모니터링하기 위한 접근법을 도시한다.
도 7은 소비자 노드가 다수의 메시지 채널들에 관한 통지들을 획득하기 위해 단일 어드레스를 모니터링하게 하기 위한 이벤트 통지 채널의 사용을 도시한다.
도 8은 이벤트 통지 채널의 사용을 지원하는 채널 소비자 정보를 도시한다.
도 9는 채널 가입 요청의 프로세싱을 예시하는 흐름도이다.
도 10은 생성자 요청의 프로세싱 및 이벤트 통지의 제공을 예시하는 흐름도이다.
도 11은 가상 캐시 스태싱(stashing)의 사용을 예시한다.
메시지 전달을 위한 이벤트 통지 채널
시스템-온-칩(SoC)의 노드들 사이의 메시지 전달을 가능하게 하기 위한 메시지 전달 회로부가 제공된다. 메시지 전달 회로부는, 2개 이상의 메시지 채널들 및 메시지 채널들에 가입한 SoC의 하나 이상의 소비자 노드들에 대한 채널 소비자 정보를 특정하는 채널 소비자 정보 구조로부터 정보를 룩업하기 위한 룩업 회로부를 포함한다. SoC의 생성자 노드에 의해 타깃 메시지 채널 상에서 제공되는 메시지 데이터를 표시하는 생성자 요청에 응답하여, 룩업 회로부는 채널 소비자 정보 구조로부터, 타깃 메시지 채널에 가입한 주어진 소비자 노드와 연관된 선택된 채널 소비자 정보를 획득한다. 제어 회로부는, 선택된 채널 소비자 정보에 기초하여 결정된 어드레스 공간의 소비자-정의된 구역 내의 어드레스와 연관된 위치에 생성자 요청에 의해 표시된 메시지 데이터를 기입한다.
이러한 접근법을 이용하여, 생성자 노드 및 소비자 노드가 물리적 메모리의 공유 구역에 대한 액세스를 공유하지 않더라도, 메시지들은 생성자 노드로부터 소비자 노드로 전달될 수 있다. 메시지 전달 회로부는 메시지 전달 채널을 구현하는 하드웨어 가속을 제공하며, 이는 생성자 노드의 어드레스 공간과 소비자 노드의 어드레스 공간 사이의 터널 또는 웜홀(wormhole)로서 보여질 수 있다. 메시지 데이터가 기입되는 어드레스가 선택된 채널 소비자 정보를 사용하여 소비자 노드에 의해 정의될 수 있으므로, 생성자 노드는 메시지 데이터가 기입될 어드레스에 대한 액세스를 가질 필요가 없다. 또한, 소비자 노드가 메시지 전달 회로부 내의 하드웨어 구조들로부터보다는 메모리 내의 소비자-정의된 어드레스 공간의 구역으로부터 메시지를 판독할 수 있으므로, 이러한 접근법은, 메시지들이 소비자 노드에 의해 판독될 수 있을 때까지 메시지들을 버퍼링하기 위해 메시지 전달 회로부 내의 제한된 용량의 하드웨어 저장소를 사용하는 대안적인 접근법에서의 경우와 상이한 수들의 소비자들 및 상이한 수들의 채널들로 더 스케일러블(scalable)하다.
메시지 전달 회로부는 이벤트 통지 조건이 타깃 메시지 채널에 대해 만족될 때 주목되는 주어진 소비자에 이벤트 통지를 제공할 수 있다. 예를 들어, 이벤트 통지는 특정 수의 메시지들이 타깃 메시지 채널 상에서 수신되었다는 것, 또는 특정 기준 또는 기준들의 세트를 충족시키는 메시지 데이터가 수신되었다는 것일 수 있다. 일부 채널들의 경우, 이벤트 통지 조건이 주어진 메시지 채널 상에서 발생할 때, 이벤트 통지들이 주어진 소비자 노드에 직접 제공될 수 있다. 그러나, 일부 소비자 노드들의 경우, 이러한 접근법은 소비자 노드가 다수의 메시지 채널들 상에서 이벤트 통지들을 모니터링하기를 원한다면 소비자 노드에 대한 성능 오버헤드를 초래할 수 있다. 일부 소비자 노드들에 의해 지원되는 모니터링 메커니즘들은 한 번에 단일 이벤트 통지에 대한 모니터링만을 지원할 수 있으며, 다수의 채널들 상에서의 통지들의 모니터링을 더 효율적으로 지원하기 위해 그러한 소비자 노드들을 수정하는 데 높은 개발 비용이 있을 수 있다. 그 결과, 일부 소비자 노드들은 폴링(polling)(모니터링되는 상이한 채널들에 대한 임의의 관심 이벤트가 존재하는지 여부를 체크하기 위해, 메모리의 다수의 어드레스들로부터 데이터를 추론적으로 판독하는 것)에 의지해야 할 수 있으며, 이는 다수의 채널들이 이벤트들에 대해 모니터링될 때 성능을 감소시킬 수 있다.
아래에서 논의되는 예들에서, 이벤트 통지 채널은 메시지 전달 회로부에 의해 지원되는 메시지 채널들 중 하나로서 정의될 수 있다. 이벤트 통지 채널은 다른 메시지 채널들 상에서 발생하는 이벤트 통지들을 수신하는 데 사용될 수 있다. 따라서, 생성자 요청이 타깃 메시지 채널 상에서 수신되고, 이벤트 통지 조건이 타깃 메시지 채널 및 주어진 소비자 노드에 대해 만족될 때, 제어 회로부는, 타깃 메시지 채널에 대한 이벤트 통지들이 주어진 소비자 노드에 직접 제공될지 또는 이벤트 통지 채널 상에서 제공될지를 결정할 수 있다. 이벤트 통지들이 이벤트 통지 채널 상에서 제공될 때, 이벤트 통지 데이터는 이벤트 통지 채널과 연관된 이벤트 통지 채널 소비자 정보에 의해 표시된 어드레스 공간의 소비자-정의된 구역 내의 어드레스와 연관된 위치에 기입된다.
효과적으로, 이벤트 통지 채널은 메시지 전달 회로부에 의해 구현된 다른 메시지 채널들과 유사한 것으로 간주될 수 있다(예를 들어, 이벤트 통지 채널들에 대한 채널 소비자 정보를 구성하거나 이벤트 통지 조건들의 검출 또는 메시지 데이터의 기입을 제어하기 위한 회로부는 다른 메시지 채널들 상에서 대응하는 기능들을 수행하기 위한 회로부와 공유될 수 있음). 그러나, 이벤트 통지 채널의 경우, 생성자 노드는 효과적으로, SoC의 별개의 노드보다는 메시지 전달 회로부 자체이다. 따라서, 이벤트 통지들이 다른 채널들 상에서 발생할 때, 이벤트 통지 데이터는 이벤트 통지 채널에 대해 정의된 어드레스 공간의 구역에 기입될 수 있다. 이는, 다수의 메시지 채널들에 가입하기를 원하는 주어진 소비자 노드가 그것이 모니터링하기를 원하는 채널들의 그룹 내의 각각의 개별 채널에 대해 별개로 통지들을 모니터링할 필요가 있기보다는 통지들에 대한 이벤트 통지 채널을 모니터링함으로써 이러한 채널들 모두를 모니터링할 수 있다는 것을 의미한다. 이는, 다수의 채널들을 모니터링하기 위한 아키텍처 지원을 갖지 않는 소비자 노드가 각각의 채널과 연관된 위치들을 개별적으로 폴링할 필요 없이 다수의 메시지 채널들에 관한 통지들을 그럼에도 불구하고 수신하게 허용한다. 이것은 성능을 개선시키는 데 도움을 준다.
제어 회로부 및 룩업 회로부는 2개 이상의 메시지 채널들이 동일한 이벤트 통지 채널을 공유한다는 것을 표시하는 채널 소비자 정보를 지원할 수 있다. 이는 채널들의 그룹에 대한 이벤트 통지들이 동일한 이벤트 통지 채널을 사용하는 것으로 정의되게 허용하여, 소비자가 다수의 다른 메시지 채널들에 대한 업데이트들을 제공하는 단일 채널에 가입하게 허용한다. 채널 소비자 정보가 주어진 메시지 채널과 그의 대응하는 이벤트 통지 채널 사이의 관계를 표시할 수 있는 다양한 방식들이 존재할 수 있다. 예를 들어, 주어진 채널/소비자 쌍에 대한 채널 소비자 정보는, 그 특정 메시지 채널 및 소비자에 대한 이벤트 통지들을 제공하기 위한 이벤트 통지 채널로서 사용될 채널을 표시하는 채널 식별자를 제공하도록 설정될 수 있는 필드를 포함할 수 있다.
제어 회로부 및 룩업 회로부는 또한, 동일한 메시지 채널에 가입한 2개 이상의 상이한 소비자 노드들을 지원할 수 있으며, 이때 2개 이상의 소비자 노드들 각각은 메시지 데이터가 그 메시지 채널에 대한 생성자 요청에 응답하여 기입될 어드레스 공간의 개개의 소비자-정의된 구역을 특정하는 채널 소비자 정보의 개개의 항목들과 연관된다. 따라서, 동일한 메시지 채널에 가입한 상이한 소비자 노드들은 메시지들이 기입될 어드레스 공간의 상이한 구역들을 특정할 수 있어서, 생성자 요청이 다수의 가입자들을 갖는 메시지 채널 상에서 수신될 때, 동일한 메시지는 메시지 전달 회로부에 의해 어드레스 공간의 다수의 상이한 구역들에 기입될 필요가 있을 수 있다. 따라서, 이러한 접근법은 동일한 채널에 가입한 상이한 수들의 소비자 노드들로 스케일러블하다. 이벤트 통지 채널들이 사용될 경우, 상이한 소비자 노드들은 또한 이어서, 메시지 채널들의 상이한(잠재적으로 중첩되는) 서브세트들에 대응할 수 있는 상이한 이벤트 통지 채널들을 특정할 수 있어서, 이벤트 통지 조건이 주어진 메시지 채널 상에서 발생할 때, 이는 이어서, 동일한 메시지 채널에 가입한 개개의 소비자들에 의해 구성되었을 수 있는 2개 이상의 상이한 이벤트 통지 채널들에 기입되도록 상이한 소비자-정의된 이벤트 통지 데이터에게 요구할 수 있다.
따라서, 일부 예들에서, 채널 소비자 정보 구조는 다수의 채널 소비자 정보 엔트리들을 가질 수 있으며, 각각의 엔트리는 주어진 메시지 채널에 대응하고, 주어진 메시지 채널에 가입한 특정 소비자 노드에 의해 정의된 채널 소비자 정보를 특정한다. 다수의 소비자들이 동일한 메시지 채널에 가입했다면, 그 동일한 메시지 채널에 대해 다수의 엔트리들이 존재할 수 있다. 예를 들어, 동일한 채널 상에서 다수의 소비자들을 허용하도록 동일한 채널 식별자에 대한 다수의 히트(hit)들을 허용하는 메커니즘을 갖는 채널 식별자에 의해 검색가능한 콘텐츠-어드레싱가능-메모리(CAM) 구조로서 채널 소비자 정보 구조를 조직화하는 상이한 방식들이 존재할 수 있거나; 또는 대안적으로, 채널 소비자 정보 구조는 채널당 하나의 엔트리를 제공하는 채널 룩업 구조 및 앞서 언급된 채널 소비자 정보 엔트리들을 제공하는 채널 소비자 정보 테이블을 포함할 수 있으며, 여기서 주어진 메시지 채널에 대응하는 채널 룩업 구조 내의 엔트리는 주어진 메시지 채널에 대응하는 엔트리들의 링크된 목록의 헤드(head)에서 채널 소비자 정보 테이블의 채널 소비자 정보 엔트리를 특정하고, 각각의 채널 소비자 정보 엔트리는, 동일한 채널에 가입한 다수의 소비자들이 존재할 경우들에서, 링크된 목록 내의 다음 엔트리에 대한 포인터를 특정할 수 있다. 링크된 목록에 대한 대안은, 채널 소비자 정보 테이블의 어느 엔트리들이 주어진 메시지 채널의 채널 식별자에 대응하는지를 표시하는 비트맵을 채널 룩업 구조의 각각의 엔트리가 특정할 수 있다는 것일 수 있다.
채널 소비자 정보 구조는 메시지 전달 회로부의 하드웨어 레지스터들로 또는 메모리 기반 데이터 구조로서 구현될 수 있으며, 메모리 기반 데이터 구조로부터의 엔트리들은 메시지 전달 회로부의 룩업 회로부에 의해 메모리로부터 판독될 수 있다. 메모리 기반 데이터 구조가 사용되면, 채널 소비자 정보 구조의 캐싱 부분들이 메모리로부터 판독되어야 하는 경우보다 더 빠른 액세스를 위해 그 캐싱 부분들에 대한 채널 소비자 정보 캐시를 메시지 전달 회로부가 포함하는 것이 가능하다.
이벤트 통지 채널 자체는 그와 연관된 이벤트 통지 조건을 가질 수 있으며, 제어 회로부가 이벤트 통지 조건이 이벤트 통지 채널에 대해 만족되었다고 결정할 때, 제어 회로부는 이어서, 이벤트 통지를 주어진 소비자 노드에 제공할 수 있다. 예를 들어, 이벤트 통지 조건은 이벤트 통지 데이터의 특정 수의 항목들이 이벤트 통지 채널에 기입되었다는 것일 수 있다. 따라서, 이벤트 통지 채널과 연관된 위치에 이벤트 통지 데이터를 기입하는 각각의 인스턴스에 응답하여 소비자 노드에 통지할 필요가 없다.
이벤트 통지들은 상이한 방식들로 구현될 수 있다. 일 예에서, 이벤트 통지는, 예를 들어 이용가능한 모니터링된 메시지 채널과 연관된 정보가 존재한다는 것을 주어진 소비자 노드에 통지하기 위해, 주어진 소비자 노드에서 프로세싱을 중단하기 위한 주어진 소비자 노드에 전송된 인터럽트일 수 있다. 그러나, 이벤트 통지가 발생할 때마다 소비자 노드에서 프로세싱을 중단하는 것은 성능에 방해되는 것으로 고려될 수 있다.
다른 접근법은, 선택된 채널 소비자 정보에서 표시된 이벤트 통지 어드레스와 연관된 위치로의 기입을 요청하는 기입 요청을 발행함으로써 이벤트 통지가 주어진 소비자 노드에 제공될 수 있다는 것일 수 있다. 이벤트 통지 어드레스는, 주어진 소비자 노드가 타깃 메시지 채널에 가입할 때 그 주어진 소비자 노드에 의해 정의될 수 있다.
일부 프로세서 아키텍처들은, 업데이트들이 모니터링될 메모리 어드레스를 프로세서가 설정할 수 있는 이벤트 대기(wait for event, WFE) 메커니즘을 지원할 수 있다. WFE 명령어가 지원될 수 있으며, 이는 실행될 때 프로세서로 하여금, WFE 이벤트들의 세트 중 임의의 WFE 이벤트가 발생하기를 대기하기 위해, 주어진 스레드에서의 프로세싱을 중단시키게 한다. WFE 이벤트들은 인터럽트의 발생, 디버그 모드로의 진입, 또는 프로세서에 의해 이전에 지정된 모니터링된 어드레스로의 기입이 검출되는 것을 포함할 수 있다. WFE 메커니즘은 프로세서가 전력 절약 상태에 진입하게 허용하거나 또는 WFE 이벤트가 발생하기를 대기할 일정 시간 기간에 상이한 스레드를 프로세싱하는 것으로 스위칭하게 허용할 수 있다.
따라서, 메시지 채널에 대한 업데이트들을 모니터링할 때, 소프트웨어는 주어진 어드레스(주어진 채널에 대한 이벤트 통지들을 수신하기 위한 이벤트 통지 어드레스로서 메시지 전달 회로부에 등록됨)를 WFE 이벤트에 대한 모니터링된 어드레스로서 설정하며, 이벤트 통지들을 체크하기 위해 메모리를 힘들게 폴링할 필요가 있는 소프트웨어를 피하기 위해, 전력 절약을 허용하거나 또는 다른 동작들이 이벤트 통지를 대기할 기간에 수행되게 허용하도록 WFE 명령어를 실행할 수 있다. 따라서, 이벤트가 주어진 메시지 채널(이벤트 통지 채널을 포함함) 상에서 발생할 때, 이벤트 통지는 선택된 채널 소비자 정보에서 표시된 소비자-정의된 이벤트 통지 어드레스에 기입함으로써, 주어진 소비자 노드에 전송될 수 있으며, 이는 소비자가 메시지 채널 상에서 이벤트들을 통지받을 수 있게 할 수 있는 효율적인 방식을 제공할 수 있다.
그러나, 일부 프로세서 아키텍처들은 한 번에 단일 어드레스의 모니터링에 관련된 WFE 이벤트들만을 지원할 수 있으므로, 위에서 언급된 바와 같이 WFE 메커니즘에 대한 지원이 존재하더라도, 이어서, 다수의 채널들이 그러한 아키텍처들 상에서 모니터링될 필요가 있다면, 소비자 노드는 각각의 채널에 대한 이벤트 통지 어드레스와 동일한 WFE 어드레스를 정의할 수 있지만, 그 경우, 이어서 이벤트 통지가 수신될 때, 소비자는 이벤트가 어느 채널에 관련되는지를 알지 못할 것이고, 이어서, 어느 메시지 채널이 이벤트가 생성되었던 채널인지를 조사하기 위해 개별적으로 각각의 채널과 연관된 메모리 내의 위치들을 폴링할 필요가 있을 것이고, 이는 모니터링되는 채널들의 수가 증가함에 따라 비효율적일 수 있다.
따라서, 단일 이벤트 통지 채널과 연관된 위치를 폴링하고 다수의 다른 메시지 채널들 상에서 이벤트들에 관해 이벤트 통지 채널에 푸시되었던 이벤트 통지 데이터를 획득하는 것이 대신 가능하므로, 이벤트 통지 채널의 사용은, WFE 이벤트가 발생한 이후 개별적으로 다수의 채널들을 폴링할 필요성을 피함으로써, 그러한 아키텍처를 갖는 프로세서들이 다수의 채널들을 모니터링하는 성능 비용을 감소시키게 허용하는 데 특히 유용할 수 있다.
이벤트 통지가 다른 채널에 대해 발생할 때 이벤트 통지 채널 상에서 푸시되는 이벤트 통지 데이터는 상이한 형태들을 가질 수 있다. 예를 들어, 이벤트 통지 데이터는 이벤트 통지 조건이 만족되었던 메시지 채널을 식별할 수 있다. 그러나, 실제로, 메시지 전달 회로부의 하드웨어에 의해 사용되는 채널 식별자들은 소비자 노드 상의 소프트웨어에 의미있지 않을 수 있다. 따라서, 일부 예들에서, 타깃 메시지 채널에 가입한 주어진 소비자 노드와 연관된 선택된 채널 소비자 정보에 특정된 소비자-정의된 값을 이벤트 통지 데이터가 포함하는 것이 유용할 수 있다. 주어진 소비자 노드가 타깃 메시지 채널에 가입할 때, 이벤트가 대응하는 채널 상에서 발생할 때 이벤트 통지 데이터로서 제공될 소비자-정의된 값을 주어진 소비자 노드가 표시하기 위한 능력을 제공함으로써, 이는 이벤트 통지 채널이 발생한 특정 이벤트를 식별할 수 있는 소비자 소프트웨어에 의미있는 정보를 제공할 수 있다는 것을 의미한다. 메시지 전달 회로부의 시점으로부터, 소비자-정의된 값은 단순히 임의적인 값일 수 있고, 메시지 전달 회로부의 하드웨어에 대한 의미를 갖지 않을 수 있지만, 소비자가 이벤트 통지 데이터로서 제공될 소비자-정의된 값을 메시지 전달 회로부에 등록하기 위한 하드웨어 지원을 메시지 전달 회로부에서 제공함으로써, 이는 이벤트 통지들의 소프트웨어 프로세싱을 단순화할 수 있다.
이벤트 통지 조건은 상이한 방식들로 구현될 수 있다. 일부 구현예들에서, 이벤트 통지 조건은 주어진 채널/소비자 노드 쌍에 대한 채널 소비자 정보에서 주어진 소비자 노드에 의해 특정된 임의의 정보와 독립적으로, 메시지 전달 회로부에 의해 고정될 수 있다. 그러나, 이벤트 통지 조건이 소비자-정의된 이벤트 통지 조건인 것이 유용할 수 있어서, 상이한 소비자들은 이벤트 통지들이 전송될 때를 관리하는 상이한 조건들을 특정할 수 있고 그리고/또는 상이한 채널들은 그들에 대해 정의된 상이한 이벤트 통지 조건들을 가질 수 있다.
이벤트 통지 조건이 만족되는지 여부를 평가하는 데 사용되는 기준들은 또한 변할 수 있다. 예를 들어, 타깃 메시지 채널 상에서 제공된 메시지가, 예를 들어 그것이 특정 생성자 노드로부터 수신되었거나 특정 기준들을 충족시키는 메시지 페이로드를 갖는다는 특정 기준들을 만족시키면, 이벤트 통지 조건이 만족될 수 있다.
그러나, 실제로, 메시지 페이로드의 포맷 및 의미는 특정 생성자 및 소비자에 특정적일 수 있으므로, 일부 구현예들은 메시지 페이로드 콘텐츠들의 임의의 체크를 적용하는 메시지 전달 회로부에서 어떠한 회로부도 제공하지 않을 수 있다. 메시지 전달 회로부의 하드웨어의 시점으로부터, 메시지 페이로드 콘텐츠들은 단순히 임의적인 이진 데이터일 수 있다.
하드웨어에서 지원되는 하나의 유형의 이벤트 통지 조건은 타깃 메시지 채널 상에서 제공된 메시지들의 수가 임계치 값에 도달했는지 또는 이를 초과했는지를 체크하는 것일 수 있다. 예를 들어, 이는 버퍼 오버플로우가 검출될 수 있게 할 수 있으며, 여기서 주어진 채널 상에서 수신된 메시지들의 수는 그 채널로부터의 메시지 데이터를 큐잉하기 위해 메모리에 할당된 버퍼 데이터 구조의 크기를 초과했다. 일부 경우들에서, 타깃 메시지 채널 상에서 제공된 메시지들의 수에 관한 임계치 값은 하드웨어에서 특정된 고정 임계치일 수 있으며, 이러한 경우, 이는 적어도 임계 수의 메시지들을 수용하기에 충분한 크기의 구역을 주어진 메시지 채널에 대한 메시지 데이터를 수용하기 위한 버퍼 공간의 구역으로서 정의하도록 소비자 노드를 제한할 수 있다.
그러나, 그것은 임계치 값이 주어진 소비자 노드에 의해 특정된 소비자-정의된 임계치 값이면 특히 유용할 수 있다. 예를 들어, 주어진 메시지 채널에 가입하라는 가입 요청을 전송할 때, 소비자 노드는 소비자-정의된 임계치 값을 특정할 수 있다. 이는 소비자들이 그들의 필요성들에 의존하여 상이한 크기들의 버퍼들에 대한 메모리 어드레스 공간을 할당하기 위한 더 많은 유연성을 제공하므로, 하나의 소비자(이는 비교적 작은 버퍼를 할당받았음)는 특정 수의 메시지들이 채널 상에서 수신된 이후 통지를 요청할 수 있고, 다른 소비자(더 큰 버퍼를 할당받음)는 더 많은 수의 메시지들이 수신된 이후 통지를 요청할 수 있다.
타깃 메시지 채널 상에서 제공된 메시지들의 수의 카운팅은 상이한 방식들로 구현될 수 있다. 예를 들어, 채널 소비자 정보의 일부는, 메시지가 대응하는 메시지 채널 상에서 수신될 때마다 증분 또는 감분되는 카운트 필드일 수 있다. 하나의 접근법에서, 카운트 값은 소비자가 메시지 채널에 처음 가입할 때 초기에 0일 수 있고, 소비자-정의된 이벤트 통지 조건에 대한 임계치를 특정하는 별개의 필드가 제공될 수 있으며, 이어서, 메시지가 수신될 때마다, 카운트 값이 증분될 수 있고, 일단 카운트 값이 임계치에 도달했다면, 이벤트 통지 조건은 만족된 것으로 고려될 수 있다. 이러한 경우, 카운트 값은 또한, 메시지 데이터가 기입될 어드레스 공간의 소비자-정의된 구역을 식별하는 버퍼 베이스 어드레스에 대한 오프셋을 결정하는 데 사용될 수 있으며, 이때 오프셋은 채널 상에서 수신된 최신 메시지가 기입되는 그 버퍼 공간 내의 상대적인 위치를 표시한다.
대안적으로, 다른 접근법은, 소비자가 타깃 메시지 채널에 가입할 때 감분 카운터가 초기에 임계치 값으로 설정되고, 이어서 후속하여, 그것이 0(그 지점에서 이벤트 통지가 트리거됨(소비자 노드에 직접 제공되거나 또는 이벤트 통지 채널 상에서 제공됨))에 도달할 때까지 메시지가 그 메시지 채널 상에서 수신될 때마다 감분되도록 감분 카운터가 카운트 필드에 대해 사용되는 것일 수 있다. 이러한 경우, 어드레스 공간의 소비자-정의된 구역을 식별하는 어드레스는 또한, 생성자 요청이 그 채널에 대해 수신될 때마다 단일 메시지의 크기에 대응하는 양만큼 증분될 수 있어서, 생성자 요청이 동일한 채널에 대해 수신되는 다음 시간에, 그 제2 생성자 요청의 메시지 데이터는, 이전의 생성자 요청의 메시지 데이터가 기입되었던 위치 이후의 어드레스 공간의 소비자-정의된 구역 내의 다음 위치에 기입될 것이다. 대안적으로, 어드레스 공간의 소비자-정의된 구역을 식별하는 베이스 어드레스는 일정하게 유지될 수 있지만, 메시지들의 수를 카운팅하는 별개의 증분 카운트 필드는 각각의 연속적인 메시지가 기입될 베이스 어드레스에 대한 오프셋들을 생성하는 데 사용될 수 있다.
주어진 메시지 채널과 연관된 식별자를 특정하는 가입 소비자 노드로부터의 채널 가입 요청에 응답하여, 제어 회로부는 주어진 메시지 채널에 가입한 가입 소비자 노드들에 대한 채널 소비자 정보를 특정하기 위해 채널 소비자 정보 구조를 업데이트할 수 있다. 예를 들어, 채널 가입 요청은 메시지 전달 회로부가 메시지들을 그 소비자에게 어떻게 전달하는지를 제어하는 데 사용될 수 있는, 가입 소비자 노드에 의해 제공되는 정보를 특정할 수 있다. 예를 들어, 채널 가입 요청은, 주어진 메시지 채널에 가입한 가입 소비자 노드에 대한 채널 소비자 정보에서 특정될 어드레스 공간의 소비자-정의된 구역의 어드레스; 주어진 메시지 채널에 가입한 가입 소비자 노드에 대한 채널 소비자 정보에서 특정될 소비자-정의된 이벤트 통지 조건; 및 주어진 메시지 채널에 대한 가입 소비자 노드에 이벤트 통지를 제공할 때 제어 회로부가 기입할 이벤트 통지 어드레스 중 적어도 하나를 특정할 수 있다. 따라서, 이는 가입 소비자 노드가 주어진 채널에 대한 메시지 전달을 구성하게 허용한다. 상이한 소비자 노드들은 동일한 메시지 채널에 관련된 상이한 파라미터들을 정의할 수 있다. 주어진 메시지 채널을 식별하는 데 사용되는 식별자는 생성자와 소비자 사이에서 동의된 소프트웨어-정의된 값일 수 있는 메시지 핸들(handle) 값일 수 있다. 일부 예들에서, 메시지 전달 회로부는 채널 소비자 정보 구조 내의 채널 소비자 정보의 하나 이상의 엔트리들에 메시지 핸들 값을 맵핑하는 채널 룩업 구조를 가질 수 있다.
채널 가입 요청의 일부는, 가입 소비자 노드가 이벤트 통지 채널, 또는 이벤트 통지 채널 이외의 메시지 채널에 대한 가입을 요청하고 있는지 여부의 표시일 수 있다. 따라서, 공통 이벤트 가입 메커니즘이 사용될 수 있지만, 가입 요청 내의 파라미터는 어떤 유형의 채널이 구성되고 있는지를 특정할 수 있다.
이벤트 통지들이 이벤트 통지 채널 상에서 제공될, 이벤트 통지 채널 이외의 주어진 메시지 채널에 대한 가입을 가입 소비자 노드가 요청하고 있다는 것을 채널 가입 요청이 특정할 때, 채널 가입 요청은 이벤트 통지 조건이 주어진 메시지 채널에 대해 만족될 때 이벤트 통지 채널 상에서 이벤트 통지 데이터로서 제공될 소비자-정의된 값을 특정할 수 있다. 따라서, 위에서 논의된 바와 같이, 소비자는 어떤 이벤트가 발생했는지를 소프트웨어가 이해하게 허용하기 위해, 이벤트 통지 채널에 푸시되는 이벤트 통지 데이터로서 사용될 값을 메시지 전달 회로부에 등록할 수 있다.
주어진 메시지 채널과 그의 대응하는 이벤트 통지 채널 사이의 연관이 가입 요청에서 표시될 수 있는 다양한 방식들이 존재할 수 있다. 예를 들어, 이벤트 채널 가입 요청은 이벤트 통지 채널이 사용될 관련 메시지 채널들의 메시지 채널 핸들들을 특정할 수 있다. 그러나, 이러한 접근법은 동일한 이벤트 통지 채널을 공유할 수 있는 메시지 채널들의 수를 제한할 수 있다.
주어진 메시지 채널에 대한 가입 소비자 노드에 이벤트 통지를 제공할 때 제어 회로부가 기입할 이벤트 통지 어드레스를 특정하기 위한 이벤트 통지 어드레스 필드를 주어진 메시지 채널에 대한 채널 가입 요청이 특정하는 구현예들에서 더 유연한 접근법이 사용될 수 있다. 이러한 경우, 비이벤트 통지 채널 및 이벤트 통지 채널에 대한 대응하는 채널 가입 요청들을 연관시키는 하나의 방식은, 가입 소비자 노드가 이벤트 통지 채널에 대한 가입을 요청하고 있다는 것을 특정하는 이벤트 채널 가입 요청의 프로세싱에 후속하여, 이벤트 통지 어드레스 필드가 이벤트 채널 가입 요청의 이벤트 통지 어드레스 필드와 동일한 어드레스를 특정하는 주어진 메시지 채널에 대한 채널 가입 요청의 수신에 응답하여, 제어 회로부는, 주어진 메시지 채널에 대한 이벤트 통지들이 이벤트 통지 채널 상에서 제공될 것이라는 것을 표시하기 위해, 주어진 메시지 채널에 가입한 가입 소비자 노드에 대한 채널 소비자 정보를 설정한다. 따라서, 소비자 노드가 이전에 구성된 이벤트 통지 채널에 대해 사용되는 이벤트 통지 어드레스와 동일한 이벤트 통지 어드레스를 특정하는 주어진 메시지 채널이 이벤트 통지 채널을 통해 보고된 그의 이벤트 통지들을 가져야 한다고 가정된다. 이는 메시지 채널들의 연관된 그룹의 채널 핸들들을 특정하기 위한 이벤트 통지 채널 가입 요청에서 부가적인 필드들에 대한 필요성을 회피하므로, 비이벤트 통지 메시지 채널들에 대해 사용되는 가입 요청들의 포맷에 대한 더 적은 수정을 요구한다. 또한, 이러한 접근법은 이벤트 통지 그룹으로 그룹화되는 임의의 수의 메시지 채널들로 스케일러블하다.
채널 가입 요청은, 메시지 전달 회로부와 연관된 커맨드 인터페이스에 맵핑된 어드레스를 타깃 어드레스로서 특정하는 가입 소비자 노드에 의해 발행된 기입 요청일 수 있다. 따라서, 이는 가입 요청을 구현하기 위해 가입 소비자 노드가 하드웨어에서 전용 신호 프로토콜을 지원하는 것을 필요로 하지 않는데, 그 이유는 대신에, 가입 요청이 메시지 전달 회로부의 커맨드 인터페이스에 대응하는 메모리-맵핑된 어드레스에 기입하는 표준 메모리 기입 동작일 수 있기 때문이다. 기입 요청과 연관된 기입 데이터는 어드레스 공간의 소비자-정의된 구역의 어드레스, 소비자-정의된 이벤트 통지 조건에 대한 임계치, 또는 위에서 논의된 바와 같은 이벤트 통지 어드레스와 같은 채널 가입 정보를 특정할 수 있다.
유사하게, (채널 상에서 전달될 메시지 데이터가 존재한다는 것을 표시하기 위해 생성자 노드에 의해 전송된) 생성자 요청은, 메시지 전달 회로부와 연관된 메시지 인터페이스에 맵핑된 어드레스를 타깃 어드레스로서 특정하는 생성자 노드에 의해 발행된 기입 요청을 포함할 수 있다. 이러한 메시지 인터페이스는 일부 예들에서 커맨드 인터페이스와 동일한 인터페이스일 수 있거나, 또는 대안적으로, 메시지 인터페이스는 커맨드 인터페이스와 별개일 수 있으며, 이때 메시지 인터페이스 및 커맨드 인터페이스는 물리적 어드레스 공간 내의 상이한 메모리 어드레스들에 맵핑된다. 따라서, 생성자는 메시지 전달을 위해 하드웨어에서 특정 신호 프로토콜을 지원할 필요가 없지만, 메모리 맵핑된 어드레스에 대한 메모리 기입 동작들을 발행함으로써 그의 생성자 요청을 발행할 수 있다.
따라서, 생성자 요청들 또는 가입 요청들을 전송하기 위한 메커니즘으로서 메모리 기입들을 사용함으로써, 이는 더 스케일러블하고 생성자 및 소비자 단부들에서 더 적은 하드웨어 수정을 요구하는 구현예를 제공한다.
생성자 인터페이스는 생성자 요청이 성공 또는 실패하게 허용하기 위한 메커니즘을 지원할 수 있다. 따라서, 제어 회로부가 주어진 생성자 요청에 의해 표시된 메시지를 프로세싱할 수 없을 때, 제어 회로부는 생성자 요청에 응답하여 실패 표시를 생성자 노드에 리턴할 수 있다. 생성자가 실패된 메시지들을 통지받을 수 있어서, 그들이 생성자에 의해 재시도될 수 있도록 실패 메커니즘을 지원함으로써, 이는 메시지 전달 회로부가 회로 영역 및 전력의 관점들에서 더 효율적이게 허용할 수 있고, 상이한 수들의 생성자들 및 채널들 및 상이한 레벨들의 메시지 트래픽으로 더 스케일러블하게 허용할 수 있다. 어떠한 실패 메커니즘도 지원되지 않았다면, 이는 메시지가 재시도되어야 한다는 것을 생성자에게 표시하기 위한 어떠한 메커니즘도 존재하지 않을 것이므로, 수신된 메시지들이 프로세싱될 수 있을 때까지 그 수신된 메시지들을 버퍼링하기에 충분한 버퍼 공간을 메시지 전달 회로부가 필요로 하지 않을 것이라는 것일 것이므로, 이는 최악의 경우의 메시지 수요를 처리하기 위한 버퍼 용량의 오버프로비저닝(overprovisioning)을 요구할 수 있고, 이는 또한, 일단 생성자들의 수 또는 수요 레벨이 특정 임계치를 넘어 증가하면, 임의의 선택된 버퍼 용량이 불충분할 수 있으므로 메시지 전달 회로부의 스케일러비티(scalability)를 제한할 것이다. 대조적으로, 실패 메커니즘을 지원함으로써, 필요한 버퍼 용량의 양은 스케일러비티를 제한하지 않으면서 더 실현가능한 크기로 감소될 수 있는데, 메시지 전달 회로부의 임의의 로컬 버퍼 용량이 가득 차게 되면, 버퍼 용량이 다시 이용가능할 때까지, 실패 표시들이 생성자들에 리턴될 수 있기 때문이다.
일반적으로, 어떠한 이유로 제어 회로부가 주어진 생성자 요청에 의해 표시된 메시지를 프로세싱할 수 없다면, 실패 표시가 리턴될 수 있다. 실패 표시가 리턴될 수 있는 다수의 이유들이 존재할 수 있다. 예를 들어, 요청을 수용하기에 불충분한 버퍼 용량이 메시지 전달 회로부에 있다면, 실패 표시가 리턴될 수 있다. 또한, 예를 들어 유효하지 않거나 또는 소프트웨어에 의해 아직 적절하게 구성되지 않은 메시지 채널의 식별자를 생성자 요청이 특정했다는 다른 에러 조건들이 발생했다면, 실패 표시가 리턴될 수 있다. 선택적으로, 메시지 채널이 유효하지만 어떠한 소비자 노드들도 그 채널에 아직 가입하지 않았다면, 실패 응답이 또한 리턴될 수 있다. 이는, 어떠한 소비자들도 존재하지 않는 채널들 상에서 메시지들을 핸들링하기 위한 메시지 전달 회로부에서의 리소스들 및 전력의 불필요한 소비를 감소시키기 위해 생성자가 추가적인 메시지들을 전송할 가능성을 감소시키는 데 도움이 될 수 있다.
실패 표시를 리턴하는 것을 지원하는 생성자 요청 메커니즘을 제공하는 하나의 방식은, 생성자 요청이 하나의 캐시 라인, 예를 들어 64 바이트보다 큰 크기의 데이터 블록의 원자적(atomic) 업데이트를 요청하는 원자적 기입 요청인 경우일 수 있다. 메모리 시스템 아키텍처는, 원자적 기입 요청에 의해 업데이트된 데이터의 블록에 대해, 다른 관찰자들에 의한 그 데이터 블록의 뷰가, 그러한 다른 관찰자들이 (기입 요청에 응답하여 업데이트되기 전에) 전체 블록의 오래된 값을 관찰하거나 또는 (기입 요청에 응답하여 설정된) 전체 블록에서 데이터의 새로운 값들을 관측하도록 이루어져야 한다는 보장을 제공할 수 있지만, 여기서 블록의 일부 부분들이 업데이트되었고 다른 부분들이 업데이트되지 않은 부분 업데이트를 그러한 다른 관찰자들이 관측하는 것이 가능하지 않다. 이러한 동작의 특정 마이크로-아키텍처 구현예는 변할 수 있고, 이러한 보장을 시행하기 위한 기법들의 범위가 존재할 수 있다. 예를 들어, 일부 구현예들은 전체 블록이 업데이트될 때까지 원자적 기입 요청에 의해 업데이트되고 있는 타깃 블록에 대한 다른 관찰자들의 요청들을 차단할 수 있는 반면, 다른 구현예들에서, 그들은 다른 관찰자들로부터의 블록에 액세스하라는 개재 요청들을 허용하지만, 다른 관찰자로부터의 개재 판독 또는 기입이 블록의 제1 부분을 업데이트하는 것과 블록의 마지막 부분을 업데이트하는 것 사이에서 타깃 블록의 부분들 중 하나에 대해 발생하는 경우들에서 실패 표시가 요청자에게 리턴되게(그리고 임의의 부분 업데이트들이 반전되게) 할 수 있다. 원자성(atomicity)이 그러한 원자적 기입 요청에 대해 어떻게 시행되는지에 관계없이, 원자적 기입 요청은, 업데이트되고 있는 타깃 블록에 대한 액세스를 잠글 필요성을 회피하기 위해 일부 구현예들이 실패 표시의 리턴을 사용하게 허용하도록 성공/실패 표시의 리턴을 지원할 수 있다. 그러한 원자적 기입 요청이 어드레스들의 비교적 큰 블록의 업데이트를 지원할 수 있고, 성공/실패 표시를 리턴하기 위한 지원을 가질 수 있으므로, 이러한 유형의 요청은 생성자 요청을 구현하는 데 유용할 수 있는데, 그 이유는, 그것이 합당한 크기의 메시지 페이로드 데이터가 단일 요청에 응답하여 전달되게 허용하고, 또한, 오류가 메시지 전달 회로부에서 발생했다면 실패 표시의 리턴을 지원하기 때문이다.
유사하게, 채널 가입 요청은 또한, 생성자 요청에 대해 설명된 것들과 유사한 장점들을 제공하기 위해 그러한 원자적 기입 요청을 사용하여 구현될 수 있다.
일부 구현예들에서, 제어 회로부가 주어진 채널에 대한 메시지 데이터로 하여금 어드레스 공간의 소비자-정의된 구역 내의 위치에 기입되게 할 때, 그 메시지 데이터는 단순히 메모리의 구역에 기입될 수 있다. 이러한 경우, 소비자 노드가 후속하여, 주어진 채널 상에서 메시지들을 프로세싱할 때, 소비자 노드들은 어드레스 공간의 소비자-정의된 구역 내의 어드레스들에 대한 판독 요청들을 발행할 수 있고, 이러한 요청들은 소비자 캐시에서 미스(miss)될 수 있으므로, 이는 메시지 데이터가 메모리로부터 소비자 캐시로 판독되는 동안 소비자에 대한 지연을 야기할 수 있다.
다른 접근법에서, 캐시 스태싱 요청들은 메시지 데이터를 어드레스 공간의 소비자-정의된 구역에 푸시하기 위해 메시지 전달 회로부의 제어 회로부에 의해 사용될 수 있어서, 소비자가 그 데이터를 프로세싱하게 될 때, 메시지 데이터는 소비자 캐시로 푸시되어, 캐시 미스의 레이턴시를 회피할 수 있다. 따라서, 제어 회로부는, 메시지 데이터가 주어진 소비자 노드와 연관된 캐시에 스태싱되는 것을 요청하기 위한 캐시 스태시 요청을 발행함으로써, 어드레스 공간의 소비자-정의된 구역 내의 어드레스와 연관된 위치에 생성자 요청에 의해 표시된 메시지 데이터를 기입할 수 있다. 일부 시스템-온-칩 상호연결 아키텍처들은 주어진 어드레스에 대한 데이터를 특정된 캐시에 할당하라는 요청인 캐시 스태싱 요청을 지원할 수 있으며, 여기서 캐시 스태싱 요청은 노드(그의 캐시는 스태싱된 데이터의 수신측임) 이외의 SoC의 노드에 의해 개시된다. 캐시 스태싱을 지원하는 구현예들에서, 주어진 메시지 채널에 대한 채널 소비자 정보는 또한, 메시지 데이터가 스태싱될 캐시를 식별하는 노드 식별자를 포함할 수 있다.
유사하게, 이벤트 통지 채널의 경우, 이벤트 통지 데이터가 이벤트 통지 채널에 푸시될 때, 이는 다른 메시지 채널들에 대한 메시지 데이터의 푸시와 동일한 메커니즘을 사용할 수 있다. 이벤트 통지 데이터는 캐시 스태싱 없이 메모리에 기입될 수 있거나, 또는 위에서 설명된 바와 같이 캐시 스태싱 요청을 사용함으로써 소비자의 캐시에 스태싱될 수 있다.
일부 예들은, 물리적 어드레스 공간 내에서 데이터를 식별하는 물리적 어드레스를 데이터가 소비자 캐시에 스태싱될 타깃 어드레스로서 표시하는 캐시 스태싱 요청들을 지원할 수 있다. 그러나, 이어서, 이러한 접근법을 이용하면, 실제로 메시지 전달 회로부는 물리적 어드레스들로의 가상 어드레스들의 변환을 허용하기 위해 어드레스 변환 회로부를 구현할 필요가 있을 수 있다. 실제로, 상이한 가상-물리적 어드레스 맵핑들을 각각 사용할 수 있는 다수의 소비자들 사이에서 메시지 전달 회로부가 공유될 수 있으므로, 어드레스 변환 기능을 구현하는 메시지 전달 회로부에 비교적 큰 오버헤드가 존재할 수 있다.
따라서, 다른 접근법은, 캐시 스태시 요청이 어드레스 공간의 소비자-정의된 구역 내의 가상 어드레스 및 주어진 소비자 노드에서 가상 어드레스를 물리적 어드레스로 변환하기 위한 변환 체제를 표시하는 어드레스 공간 식별자를 특정한다는 것일 수 있다. 사용될 가상 어드레스 및 어드레스 공간 식별자는 소비자가 대응하는 메시지 채널에 가입할 때 메시지 전달 회로부에 등록될 수 있다. 따라서, 이는 메시지 전달 회로부 자체가 어드레스 변환을 수행할 필요가 있는 것을 방지하는데, 그 이유는 대신에 그의 캐시 스태시 요청들이 그에 등록된 가상 어드레스 및 어드레스 공간 식별자를 특정할 수 있고, 이어서 소비자 노드의 변환 회로부가 이어서, 소비자의 캐시에서의 스태싱된 데이터의 할당을 제어하기 위해 가상 어드레스를 물리적 어드레스로 변환할 수 있기 때문이다. 이는 메시지 전달 회로부를 구현하는 회로 영역 및 전력 비용을 감소시키고, 소비자에서 이미 제공된 어드레스 변환 회로부의 재사용을 허용한다.
가상 캐시 스태시 요청들이 사용되면, 가상 어드레스를 특정하는 캐시 스태시 요청은 반드시 캐싱된 데이터 자체를 특정하지는 않을 수 있다. 일 구현예에서, 캐시 스태싱을 요청하는 캐시 스태시 요청은 가상 어드레스를 소비자에게 제공할 수 있고, 이어서 소비자는 물리적 어드레스로 응답할 수 있어서, 데이터는 이어서, 변환된 물리적 어드레스와 연관된 후속 요청에 의해 포워딩될 수 있다.
메시지 전달 회로부의 룩업 회로부 및 제어 회로부는 SoC의 개개의 노드들과 연관된 2개 이상의 캐시들 사이의 일관성을 관리하는 일관성 상호연결부에서 제공될 수 있다. 다른 예들에서, 메시지 전달 회로부는 그러한 일관성 상호연결부와는 별개인 독립형 컴포넌트일 수 있다. 그러나, 일관성 상호연결부는 메시지 전달 회로부로 구현하기 위한 편리한 장소일 수 있는데, 그 이유는 그곳이 개개의 캐시들을 갖는 다수의 노드들로부터의 요청들이 수신되는 지점에 있을 수 있기 때문이다.
시스템-온-칩 예
도 1은 다수의 요청자 디바이스들(4, 6, 8), 및 요청자 디바이스들과 다른 캐시들 사이의 일관성을 관리하기 위한 상호연결부(10)를 포함하는 시스템-온-칩(SoC)(2)의 일 예를 개략적으로 예시한다. 요청자 디바이스들(4, 6, 8) 및 상호연결부(10)는 동일한 집적 회로 상의 온-칩 디바이스들이다. 이러한 예에서, 요청자 디바이스들은 범용 프로세싱을 수행하기 위한 중앙 프로세싱 유닛(CPU)(4), 그래픽 프로세싱을 수행하기 위한 그래픽 프로세싱 유닛(GPU)(6) 및 네트워크를 통한 데이터의 송신 및 수신을 제어하기 위한 네트워크 인터페이스 제어기(NIC)(8)를 포함한다. CPU 및 GPU는 캐시들(11, 12, 14), 예를 들어 특정 코어들(9)과 연관된 레벨 1 캐시들 및 CPU에 대한 공유 레벨 2 캐시(12) 또는 GPU에 대한 공유 캐시(14)를 포함한다(실제로, GPU의 코어들(9)은 또한 개별 캐시들을 가질 수 있음). NIC(8)는 네트워크 패킷 송신 및 수신을 제어하기 위한 프로세싱 회로부(18), 및 패킷들을 네트워크에 송신하고 네트워크로부터 패킷들을 수신하기 위한 네트워크 인터페이스(20)를 갖는다. 요청자 디바이스들(4, 6, 8) 각각은 일관성 상호연결부와 상호작용하기 위한 일관성 인터페이스(16, 22)를 갖는다. 예를 들어, 일관성 인터페이스(16, 22)는 관련 요청자로부터의 캐시 액세스들에 응답하여, 요구되는 일관성 프로토콜 거래(transaction)들을 생성하고, 적절한 응답들 및 일관성 상태의 변경들을 이용하여 상호연결부(10)로부터의 스누프(snoop) 요청들에 응답하는 것을 담당할 수 있다. 이는 일부 요청자 디바이스들의 단지 일 예이며, 다른 유형들의 요청자들, 예컨대 스크린 상의 데이터의 디스플레이를 제어하기 위한 디스플레이 제어기들, 또는 예를 들어 메모리와 주변 디바이스 사이의 데이터의 전달을 제어하기 위한 DMA(직접 메모리 액세스) 제어기가 또한 제공될 수 있다는 것이 인식될 것이다. 사용될 수 있는 일관성 프로토콜들의 예들은 영국 캠브리지 소재의 ARM® Ltd에 의해 제공된 AMBA® 4 ACE 및 AMBA® 5 CHI 일관성 프로토콜들이지만, 본 명세서에서 논의된 기법들이 또한 다른 일관성 프로토콜들에 적용될 수 있다는 것이 인식될 것이다. 시스템 캐시(30)는 일관성 상호연결부(10)에 커플링되지만, 특정 요청자 디바이스에 할당되지 않는다. 시스템 캐시(30)는 요청자들로부터의 모든 판독들 및 기입들이 메인 메모리(33)에 의해 서빙되어야 하는 경우와 비교하여 요청자들에 의해 일부 캐싱된 데이터에 대한 액세스를 가속시키도록 제공될 수 있다. 메모리 유닛들(33)은 요청자들(4, 6, 8) 및 상호연결부(10)와 동일한 집적 회로 상에 온-칩 메모리, 또는 SoC(2)와 별개의 집적 회로 상에 오프-칩 메모리를 포함할 수 있다. 상호연결부는 또한 요청자 디바이스들 상에서 수행되는 동작들에 대한 암호화 지원을 제공하기 위한 암호화 유닛과 같은 다른 유형들의 디바이스(34)에 커플링될 수 있다. 도 1에 도시된 바와 같이, 일관성 상호연결(10)는 (선택적으로) 어느 데이터 어드레스들이 특정 요청자 디바이스들(4, 6)에서 캐싱되는지를 추적하기 위한 스누프 필터(40)를 포함할 수 있다. 스누프 필터(40)는 데이터가 특정 요청자에서 캐싱되지 않을 때를 일관성 상호연결부(10)가 결정하게 허용함으로써 스누프 트래픽을 감소시키는 데 사용될 수 있다. 일부 예들에서, 시스템 캐시(30) 및 스누프 필터(40)가 조합될 수 있으며, 이때 단일 구조는 어드레스와 연관된 캐싱된 데이터 및 스누프 필터 정보 둘 모두를 제공하기 위한 그 어드레스에 기초하여 룩업된다.
일관성 상호연결부(10)에 의해 지원되는 일관성 프로토콜은 다수의 요청자 디바이스들이 메모리의 공통 구역에 대한 액세스를 공유하게 허용하는 데 유용하다. 그러나, 상이한 요청자들에서의 캐싱된 데이터 사이에서 일관성을 유지하는 것은 스누프 트래픽의 여분의 오버헤드 및 교환을 도입할 수 있고, 이는 성능 및 회로 영역 비용을 가질 수 있다.
일부 사용 경우들에서, 하나의 요청자가 다른 요청자에 대한 메시지를 제공하는 것이 바람직할 수 있으며, 여기서 메시지를 전송하는 요청자는 메시지를 전송한 이후 메시지의 데이터를 필요로 하지 않으므로, 메시지를 전송하는 "생성자" 요청자 및 메시지를 수신하는 "소비자" 요청자의 개개의 캐시들 내의 메모리의 공유된 구역으로부터의 데이터 사이에서 일관성을 유지하는 오버헤드가 불필요할 수 있다.
그러한 메시지들을 전달하는 일관성 오버헤드를 제거하기 위해, 일관성 상호연결부(10)는 생성자 노드 및 소비자 노드가 메모리의 공유 구역에 대한 액세스를 공유할 필요 없이, 시스템-온-칩의 생성자 노드와 연관된 가상 어드레스 공간으로부터 시스템-온-칩의 소비자 노드의 가상 어드레스 공간으로의 메시지들의 전달을 가속시키는 하드웨어 인터페이스를 제공하는 메시지 전달 회로부(50)를 포함한다. 사실상, 메시지 전달 회로부(50)는 생성자 및 소비자 노드들이 물리적 어드레스 공간 내의 공통 구역에 대한 액세스를 가질 필요 없이, 2개의 가상 어드레스 공간들 사이에 웜홀을 제공할 수 있어서, 생성자 노드가 웜홀의 일측 상에 기입할 때, 메시지 페이로드는 소비자 노드의 가상 어드레스 공간에서 다른 측 상에 나타난다. 이는, 생성자의 캐시(11)에 메시지의 발신 데이터를 저장할 필요가 없기 때문에 일관성 문제들을 제거한다. 그러한 메시지 전달이 유용할 수 있는 예시적인 사용 경우들은, 예를 들어 웹 서버 상에서와 같은 이벤트 구동 프로그래밍 및 데이터 중심 사용 경우들을 포함할 수 있다. 생성자 노드는, 예를 들어 CPU(4) 또는 GPU(6) 내의 네트워크 인터페이스 제어기(8) 또는 주어진 프로세서 코어(9)일 수 있고, 소비자 노드는, 예를 들어 생성자로부터의 메시지의 수신을 모니터링하고 있는 소비자 소프트웨어를 실행하고 있는 CPU(4) 또는 GPU(6) 내의 다른 코어(9)일 수 있다.
도 2는 메시지 전달 회로부(50)의 일 예를 더 상세히 도시한다. 메시지 전달 회로부(50)는 생성자 노드로부터 소비자 노드로의 메시지들의 전달을 제어하는 제어 회로부(52), 및 메시지 채널들의 수 및 개개의 메시지 채널들에 대한 메시지들을 수신하는 것에 가입한 가입 소비자 노드들의 수에 관한 정보를 제공하는 채널 소비자 정보 구조(62)로부터의 정보를 룩업하기 위한 룩업 회로부(54)를 갖는다. 도 2에 도시된 예에서, 채널 소비자 정보 구조(62)는 물리적 어드레스 공간의 지정된 구역 내의 어드레스들에서 메모리 시스템에 저장된 메모리 기반 구조이다. 채널 소비자 정보 구조(62)에 대해 사용되는 물리적 어드레스 공간 구역은 코어들(9) 중 하나 상에서 실행되는 감독 소프트웨어에 의해 구성가능할 수 있다. 예를 들어, 메시지 전달 회로부(50)는 채널 소비자 정보 구조(62)의 베이스 어드레스를 특정하는 레지스터(도시되지 않음)를 포함할 수 있다(또는 채널 소비자 정보 구조의 개개의 부분들을 식별하기 위한 다수의 베이스 어드레스들, 예를 들어 아래에서 언급된 채널 룩업 구조(64) 및 채널 소비자 정보 테이블(66)에 대한 별개의 베이스 어드레스들이 존재할 수 있음).
채널 소비자 정보 구조가 메모리에 저장되지만, 채널 소비자 정보 구조로부터의 정보는 하나 이상의 채널 소비자 정보 캐시들(56) 내에서, 더 빠른 액세스를 위해 메시지 전달 회로부(50) 내에 캐싱될 수 있다. 예를 들어, 채널 소비자 정보 구조(62)의 가장 최근에 사용된 엔트리들의 서브세트가 소비자 정보 캐시(56)에 캐싱될 수 있다.
채널 소비자 정보 구조(62)를 메모리에 위치시키는 것에 대한 대안은 채널 소비자 정보 구조(62)를 저장하는 메시지 전달 회로부(50) 내의 하드웨어 레지스터들을 구현하는 것일 수 있으며, 이는, 채널 소비자 정보의 특정 엔트리에 액세스하는 데 지연을 야기하는 캐시 미스의 어떠한 예상도 존재하지 않을 것이므로 채널 소비자 정보 구조에 대한 더 빠른 액세스를 제공할 수 있다. 그러나, 채널 소비자 정보 구조가 메모리 공간에 저장되고 메시지 전달 회로부(50)에 캐싱되는 도 2에 도시된 접근법은 상이하게 크기설정된 채널 소비자 정보 구조들에 더 스케일러블할 수 있다. 어느 하나의 접근법이 사용될 수 있다.
도 2에 도시된 예에서, 채널 소비자 정보 구조(62)는 채널 룩업 구조(64) 및 다수의 채널 소비자 정보 엔트리들을 제공하는 채널 소비자 정보 테이블(66)을 포함한다. 채널 룩업 구조는 채널 식별자에 의해 식별된 메시지 채널 상에서 메시지를 전달하는 것을 요청하는 생성자 요청에 의해 특정된 채널 식별자(또는 메시지 큐 핸들)에 기초하여 룩업되고, 채널 룩업 구조(64)는 각각의 채널 식별자에 대해, 특정된 채널 식별자를 갖는 채널에 가입한 하나 이상의 소비자들에 의해 정의된 채널 소비자 엔트리들의 링크된 목록의 헤드에 있는 테이블(66) 내의 채널 소비자 엔트리들 중 하나의 엔트리의 표시를 특정한다. 링크된 목록 내의 최종 엔트리 이외의 링크된 목록 내의 각각의 채널 소비자 정보 엔트리는 링크된 목록 내의 다음의 엔트리에 대한 포인터(68)를 포함하여, 동일한 채널에 가입한 다수의 소비자들이 존재하면, 포인터들은 그 채널의 각각의 소비자에 대한 채널 소비자 정보 엔트리들을 위치시키도록 뒤따를 수 있다. 채널 소비자 엔트리들의 콘텐츠는 아래에서 더 상세히 설명되지만, 일반적으로, 제어 회로부(52)가 생성자 노드로부터 수신된 메시지 페이로드를 기입해야 하는 버퍼 구역(70)으로서, 메시지 채널에 가입한 관련 소비자 노드에 의해 정의된 어드레스 공간(버퍼)의 소비자-정의된 구역을 식별하는 데 사용될 수 있다.
링크된 목록 구조가 동일한 채널에 가입한 다수의 소비자들을 지원하는 데 사용되는 일 예를 도 2가 도시하지만, 대안은, 각각의 채널 식별자에 대해, 그 메시지 채널에 가입한 하나 이상의 개개의 소비자들에 의해 정의된 특정 채널 소비자 정보 엔트리들을 표시하는 비트맵을 채널 룩업 구조(64)가 특정하는 것일 것이다. 대안적으로, 채널 룩업 구조(64) 및 채널 소비자 정보 구조(66)는 채널 소비자 정보 구조(62)로서 작용하는 단일 구조로 조합될 수 있다. 예를 들어, 콘텐츠 어드레싱가능 메모리(CAM) 구조는 채널 식별자에 의해 룩업될 수 있으며, 다수의 소비자들이 동일한 채널에 대한 조합 구조로 정의된 엔트리들을 가질 수 있도록 동일한 채널 식별자에 대한 다수의 히트들을 지원할 수 있다. CAM 접근법은 채널 소비자 정보 구조(62)가 메시지 전달 회로부(50) 내의 하드웨어 저장소를 사용하여 구현되면 더 실현가능할 수 있다. 별개의 채널 룩업 및 채널 소비자 테이블 구조들(64, 66)을 이용한 접근법은, CAM 룩업이 회피되게 허용하고, 따라서 채널 소비자 정보 구조(62)를 저장하기 위해 메모리를 사용하는 것을 더 실현가능하게 만들게 허용함으로써 더 스케일러블할 수 있다. 그럼에도 불구하고, 채널 소비자 정보 구조(62)를 조직화하는 상이한 방식들이 존재할 수 있으며, 일반적으로, 그 채널에 가입한 소비자들과 연관된 하나 이상의 엔트리들의, 주어진 채널 식별자에 대한 식별을 허용하는 임의의 구조가 사용될 수 있다는 것이 인식될 것이다.
메시지 전달 회로부(50)는 커맨드 인터페이스/큐(58) 및 메시지 인터페이스/큐(60)를 갖는다. 각각의 인터페이스는 메시지 전달 회로부(50)에 의해 수신된 요청들을 버퍼링하기 위한 큐 구조를 포함한다. 커맨드 및 메시지 인터페이스들(58, 60)은 각각 물리적 어드레스 공간 내의 적어도 하나의 어드레스에 맵핑되어, 커맨드 인터페이스(58)에 맵핑된 어드레스 또는 메시지 인터페이스(60)에 맵핑된 어드레스에 데이터를 기입하라는 기입 요청들은 메시지 전달 회로부(50)에 의한 프로세싱을 대기하기 위해 기입 요청의 기입 데이터가 커맨드 또는 메시지 큐(58, 60) 내에 삽입되게 한다. 커맨드 큐는 메시지 전달 회로부(50)의 동작을 구성하기 위한 임의의 커맨드들, 예컨대 메시지 전달 회로부의 동작을 구성(예를 들어, 위에서 언급된 바와 같은 채널 소비자 정보 구조에 대한 베이스 어드레스를 정의)하기 위한 감독 커맨드들, 또는 특정된 메시지 채널에 가입하기 위해 소비자 노드에 의해 이루어진 가입 요청에 대해 사용된다. 타깃 메시지 채널을 특정하는 주어진 소비자 노드로부터 수신된 가입 요청에 응답하여, 커맨드 인터페이스(58)가 가입 요청을 프로세싱할 때, 이는 타깃 메시지 채널 상의 메시지들이 주어진 소비자 노드에 어떻게 공급되는지를 제어하기 위한 소비자-정의된 정보를 표시하기 위해 새로운 엔트리가 채널 소비자 정보 구조(62)에 할당되게 할 수 있다.
메시지 인터페이스/큐(60)는 특정된 메시지 채널에 가입된 하나 이상의 소비자들로의 새로운 메시지의 전달을 요청하기 위해 생성자 노드에 의해 전송된 생성자 요청들을 수신 및 프로세싱하는 데 사용된다. 생성자 요청이 메시지 인터페이스(60)에서 수신될 때, 이는 이어서, 룩업 회로부(54)가 특정된 메시지 채널 상에서 하나 이상의 소비자들에 대한 채널 소비자 정보를 식별하기 위해 (가능하게는, 채널 소비자 정보 캐시(56)가 제공되면, 그러한 캐시에서) 채널 소비자 정보 구조(62)를 룩업하게 하고, 이러한 채널 소비자 정보는 생성자 요청에 의해 특정된 타깃 메시지 채널에 대한 각각의 소비자에 의해 정의된 어드레스 공간(70)의 소비자-정의된 구역들로의 메시지들의 기입을 제어하기 위해 제어 회로부(52)에 의해 사용된다. 생성자 요청에 응답하여 이벤트 통지 조건이 만족되면, 또한 이벤트 통지(74)가 주어진 소비자에 제공될 수 있다. 예를 들어, 이벤트 통지(74)는 아래에서 더 상세히 논의될 바와 같이 WFE(이벤트 대기) 어드레스와 연관된 위치로의 데이터를 기입일 수 있다.
도 2가 메시지 인터페이스(60) 및 커맨드 인터페이스(58)에 대한 별개의 인터페이스들을 도시하지만, 공통의 메모리 맵핑된 어드레스에 맵핑된 공유 인터페이스를 사용하는 것이 또한 가능할 수 있다. 그러나, 별개의 메시지 및 명령 인터페이스들을 갖는 것은, 커맨드들이 메시지들에 비해 우선순위화되게 허용하고, 또한, 메모리 관리 기법들이 메시지 인터페이스에 대한 액세스와 비교하여 커맨드 인터페이스에 대한 액세스를 제한하게 허용하는 데 도움이 될 수 있는데, 그 이유는 메시지들을 전송할 필요가 있을 수 있는 일부 소프트웨어 프로세스들이 커맨드들을 전송하도록 허용되지 않을 수 있으므로, 인터페이스들(58, 60)을 분리시키는 것은 커맨드 인터페이스(58)에 맵핑된 어드레스(들)이 그러한 소프트웨어 프로세스들에 액세스가능하지 않게 만들게 허용할 수 있는 것이 바람직하기 때문이다.
도 3은 메시지 전달 회로부(50)를 사용한 메시지 전달을 개략적으로 예시한다(메시지 전달 회로부는 또한 다음의 예들에서 "라우터(50)"로 불릴 수 있음). 도 3의 예에서, 시스템-온-칩(2)(예를 들어, SoC 내의 개개의 코어들(9) 상에서 실행되는 소프트웨어)의 2개의 상이한 소비자들(B, C)은 주어진 메시지 채널에 가입할 수 있으며, 그 메시지 채널 상에서 메시지들을 생성할 수 있는 하나 이상의 생성자 노드들, 예를 들어 가상 어드레스 공간 A와 연관된 SoC의 다른 코어(9) 또는 디바이스, 예컨대 네트워크 인터페이스 제어기(8) 상에서 실행되는 소프트웨어가 존재할 수 있다. 이러한 예에서, 생성자 요청을 전송하는 데 사용되는 요청은 특정된 메모리 어드레스에 대한 원자적 비일관성 저장을 수행하라는 요청이며, 이는 이러한 예에서 64 바이트 원자적 비일관성 저장 동작이다(그러나, 유사한 비일관성 저장 동작들이 메모리의 블록들의 다른 사이즈들에 대해 수행될 수 있다는 것이 인식될 것임). 생성자 요청으로서 전송될 때, 원자적 비일관성 저장 동작은 라우터(50)의 메시지 인터페이스(60)에 맵핑된 어드레스를 그의 타깃 어드레스로서 특정한다. 메모리의 64 바이트들(또는 다른 크기설정된 블록)을 업데이트하기 위한 저장 요청의 효과들이 다른 관찰자들에 의해 원자적으로 관측될 아키텍처 레벨로 메모리 시스템의 상호연결부(10) 또는 다른 부분들이 보장을 제공할 수 있어서, 다른 관찰자들이 메모리의 특정된 64 바이트들에 대한 업데이트된 값들 중 어느 것도 관측하지 못하거나 또는 메모리의 64 바이트들에 대한 업데이트된 값들 모두를 관측하도록 보장되지만, 그러한 64 바이트들 중 일부가 업데이트된 반면 다른 것들은 그렇지 않은 부분 업데이트를 관측할 수 없다는 점에서, 원자적 비일관성 저장 요청의 원자적 속성이 반영된다. 이는 주어진 프로세서 구현에 대한 마이크로-아키텍처 선택들에 의존하여 상이한 방식들로 시행될 수 있다. 예를 들어, 하나의 접근법은 특정된 64 바이트들이 업데이트될 때까지 그 특정된 64 바이트들에 대한 액세스를 잠그는 것일 수 있는 반면, 다른 접근법은 64 바이트들에 대한 개재 액세스들을 허용하지만 그러한 액세스들을 추적하는 것일 수 있으며, 64 바이트 블록의 제1 부분을 업데이트하는 것과 64 바이트 블록의 마지막 부분을 업데이트하는 것 사이의 기간에서 개재 액세스가 64 바이트 블록의 주어진 부분에 대해 이루어지는 경우에서, 64 바이트 원자적 비일관성 저장 요청에 의해 이루어진 임의의 변경들은 반전될 수 있고, 실패 표시는 저장 요청을 발행했던 요청자로 리턴될 수 있다. 저장 요청의 비일관성 속성은, 저장 요청과 연관된 데이터가 요청을 전송했던 요청자의 캐시(11, 14) 내에 저장될 필요가 없다는 사실에 의해 반영될 수 있다.
따라서, 생성자 노드가 생성자 요청을 표현하는 64 바이트 원자적 비일관성 저장 요청을 발행할 때(그에 대해, 그러한 64 바이트들에 기입될 기입 데이터가 채널에 가입한 임의의 소비자에 전송될 메시지의 메시지 페이로드를 표현함), 라우터(50)는 요청을 수신하고, 요청을 그의 메시지 버퍼에 버퍼링한다. 라우터(50)가 메시지를 프로세싱할 준비가 될 때, 라우터(50)의 룩업 회로부(54)는 저장 요청의 일부에서 특정된 채널 식별자에 기초하여 채널 소비자 정보 구조(62)를 룩업한다. 그 채널에 대한 임의의 가입자들이 존재한다는 것을 채널 소비자 정보 구조(62)가 표시하면, 각각의 가입자에 대해, 채널 소비자 정보의 대응하는 엔트리는 개개의 소비자의 가상 어드레스 공간 내의 소비자-정의된 버퍼 구역(70)의 어드레스를 식별하는 데 사용되고, 메시지 페이로드는 각각의 소비자에 대해 그 버퍼 구역(70) 내의 위치에 기입된다. 상이한 소비자들은 동일한 채널에 대해 상이한 버퍼 구역들(70)을 정의할 수 있어서, 상이한 위치들로의 동일한 메시지 데이터의 다수의 기입들이 존재할 수 있다. 라우터(50)를 사용함으로써, 생성자 노드는 메시지가 메모리 내의 어느 위치들에 기입되기를 각각의 소비자가 원하는지를 인식할 필요가 없고, 생성자 및 소비자가 메모리 내의 그러한 구역들에 대한 액세스를 공유할 필요성이 존재하지 않으며, 이는 일관성 오버헤드를 회피한다.
도 4는 주어진 메시지 채널 상에서 메시지들을 생성하는 생성자 노드(80) 및 그 채널에 가입한 소비자 노드(82)에 의해 수행되는 동작들을 더 상세히 도시한다. 도 4의 단계 1에서, 소비자 노드(82)는, 라우터(50)가 소비자(82)에 의해 정의된 70의 버퍼 구역 메모리에 메시지들을 어떻게 기입할지를 정의하고, 이벤트 통지 조건이 만족될 때 이벤트 통지들을 소비자에 제공하기 위해 채널 소비자 정보 구조(62)에 할당될 정보를 특정하는 가입 정보를 그의 기입 데이터로서 제공하는 64 바이트 원자적 비일관성 저장 동작을 발행함으로써 가입 요청을 라우터(50)에 발행한다. 이것은 아래에서 더 상세히 설명된다. 가입 요청은 그의 타깃 어드레스에서 라우터(50)의 커맨드 인터페이스(58)에 맵핑된 어드레스를 특정한다. 제어 회로부(52)는 가입 요청에서 특정된 정보에 따라 채널 소비자 정보 구조(62)를 업데이트한다.
도 4의 단계 2에서, 생성자 노드(80)는 특정된 타깃 메시지 채널에 대한 데이터를 라우터(50)의 메시지 큐(60)에 인큐잉하기 위해 다시 64 바이트 원자적 비일관성 저장 동작을 사용하여 생성자 요청을 발행한다. 라우터(50)가 생성자 요청을 프로세싱하게 할 때, 그것은 타깃 채널에 대한 채널 소비자 정보(62)를 룩업하고, 각각의 소비자에 대해, 메시지가 기입될 곳을 특정하는 소비자-정의된 정보를 판독하고, 단계 3에서, 소비자(82)가 액세스가능한 소비자-정의된 어드레스에 메시지 데이터를 기입하라는 기입 요청을 발행한다. 도 4에 도시된 바와 같이, 이러한 예에서, 메시지 데이터의 기입은, 기입 데이터가 소비자(82)의 프라이빗 캐시(private cache)(11, 12, 14)로 스태싱되게 할 수 있는 캐시 스태싱 요청을 발행함으로써 수행된다. 캐시 스태싱 요청은 SoC의 주어진 노드의 프라이빗 캐시에 데이터를 할당하라는 요청이며, 여기서 그 요청은 프라이빗 캐시와 연관된 프로세싱 요소 이외의 요청자에 의해 개시되고, 따라서, 이러한 경우 (생성자(80)로부터의 생성자 요청에 응답하여) 스태시 요청은 라우터(50)에 의해 개시된다. 소비자 노드(82)의 프라이빗 캐시로 데이터를 직접 스태싱함으로써, 이는, 소비자 노드가 후속하여 데이터를 판독하게 될 때, 이어서 판독 요청이 소비자의 캐시에서 히트될 수 있으므로, 이것이 메인 메모리로부터 데이터를 판독해야 하는 레이턴시를 회피한다는 것을 의미한다.
도 5는 생성자 요청의 일 예, 및 메시지 전달 회로부(50)의 룩업 회로부(54)를 사용하여 채널 소비자 정보 구조(62)를 룩업하는 일 예를 예시한다. 생성자 요청은 타깃 물리적 어드레스(85) 및 메시지 페이로드(86)를 포함한다. 메시지 페이로드는 메시지가 사용되고 있는 특정 사용 경우에 의존하여 생성자 및 소비자 상에서 실행되는 소프트웨어에 의해 이해되는 바와 같은 임의의 임의적인 의미를 가질 수 있으므로, 라우터(50)는 페이로드(86)에 대한 임의의 특정 포맷을 규정할 필요가 없다. 이러한 예에서, 페이로드(86)는 데이터의 64 바이트 블록이지만, 다른 구현예들은 다른 페이로드 크기들을 지원할 수 있다.
메시지가 전송되는 타깃 채널의 식별자를 식별하기 위해 페이로드의 비트들을 소비하는 것을 회피하기 위해, 이러한 예에서, 타깃 물리적 어드레스(85)의 어드레스 비트들의 일부는 타깃 채널 식별자(87)를 식별하는 데 사용된다. 라우터(50)의 메시지 인터페이스(60)로서 작용하는 입력 레지스터는 물리적 어드레스 공간 내의 일정 범위의 물리적 어드레스들에 사실상 맵핑될 수 있으며, 이는 타깃 어드레스의 어드레스 비트들의 공통 부분(도 5에서 RI(88)로 마킹됨)을 공유한다. 따라서, 메시지 인터페이스(60)에 맵핑된 비트들의 패턴으로 설정된 부분(88)에서 어드레스 비트들을 갖는 임의의 물리적 어드레스는 생성자 요청으로서 작용하는 것으로 고려될 수 있다. 메시지 인터페이스에 모두 맵핑된 일정 범위의 어드레스들을 할당함으로써, 이는 다른 정보를 표시하기 위해 타깃 어드레스(85)의 다른 비트들을 확보(free up)하는데, 그 이유는 이러한 다른 비트들이 입력 레지스터(60) 상으로의 요청의 맵핑에 영향을 주지 않을 것이기 때문이다. 메시지 채널 식별자(공유 큐 핸들(SQH))(87)는 메시지가 전송되는 타깃 메시지 채널의 식별자를 제공하기 위해 이러한 다른 비트들 중 일부에서 식별될 수 있다. 도 5에 도시된 예에서, SQH(87)는 어드레스가 메시지 인터페이스(60)에 맵핑되는지 여부를 특정하는 비트들을 식별하는 데 사용되는 부분(88)보다 타깃 어드레스의 덜 중요한 부분에서의 비트들의 일부에서 식별되어, 물리적 어드레스 공간의 인접 부분이 메시지 인터페이스(60)에 맵핑된다. 그러나, 메시지 인터페이스 식별 비트들(88)보다 더 중요한 비트들에서 SQH 비트들(87)을 인코딩하는 것이 또한 가능할 것이며, 이 경우, 메시지 인터페이스에 맵핑된 물리적 어드레스 공간의 부분들은 물리적 어드레스 공간의 다수의 인접하지 않은 구역들을 포함할 수 있다.
타깃 채널 식별자(SQH)(87)는 채널 룩업 구조(64)를 룩업하기 위해 룩업 회로부(54)에 의해 사용된다. 생성자 및 소비자 노드들 상의 소프트웨어는 공유된 큐 핸들에 미리 동의할 수 있고, 커맨드 인터페이스(58)에 전송된(예를 들어, 생성자 소프트웨어, 또는 소비자 소프트웨어, 또는 일부 감독 소프트웨어 중 어느 하나에 의해 전송된) 커맨드는 그 메시지 채널 상에서 메시지들을 전송하는 것에 앞서, 주어진 채널에 대한 SQH를 채널 룩업 구조(64)에 등록하는 데 사용될 수 있다.
SQH(87)에 기초하여 채널 룩업 구조(64)를 룩업함으로써, 이는 링크된 목록의 헤드에 있는 소비자 수요 테이블(consumer demand table)(채널 소비자 정보 테이블)(66)의 엔트리를 식별할 수 있고, 이는 특정된 채널 상에서 제1 소비자에 대한 채널 소비자 정보를 제공한다. 동일한 채널 상에 다수의 소비자들이 존재하면, 선택된 채널 소비자 정보 엔트리의 다음 엔트리 포인터 필드(90)는 링크된 목록 내의 다음 채널 소비자 정보 엔트리를 식별하고, 그러한 포인터들은 링크 목록의 테일(tail)에서의 엔트리까지 엔트리마다 뒤따를 수 있다. 따라서, 도 5에 도시된 특정 예에서, 현재 생성자 요청에 의해 특정된 특정 채널에 대한 링크된 목록은 2개의 엔트리들, 엔트리 ID 1 및 엔트리 ID 4를 포함하는데, 그 이유는 엔트리 ID1이 4로 설정된 다음의 엔트리 포인터(90)를 갖기 때문이다.
링크된 목록의 헤드를 추적할 뿐만 아니라, 채널 룩업 구조(64) 내의 주어진 엔트리는 또한, 대응하는 메시지 채널에 대한 링크된 목록의 테일에 있는 소비자 수요 테이블(66)의 엔트리의 ID를 특정할 수 있다. 테일 엔트리 식별자는 생성자 요청에 응답하여 구조를 룩업할 때 필요하지 않다. 그러나, 테일 엔트리 식별자는 동일한 채널에 가입한 적어도 하나의 다른 소비자가 이미 존재할 때 채널에 대한 새로운 가입 요청이 다른 소비자로부터 수신될 때, 링크된 목록의 포인터들을 횡단할 필요가 있는 것을 회피하는 데 유용할 수 있다. 이러한 경우, 링크 목록의 테일에 현재 있는 테이블(66)의 엔트리는 채널 룩업 구조(64)로부터 식별될 수 있고, 이어서, 링크 목록 내의 현재 테일 엔트리의 다음 엔트리 포인터(90)는 가입 요청에 응답하여 소비자 수요 테이블(66)에 새롭게 할당된 엔트리의 ID를 표시하도록 업데이트될 수 있고, 채널 룩업 구조(64) 내의 테일 엔트리 식별자는 새롭게 할당된 엔트리의 식별자를 표시하도록 업데이트될 수 있다. 따라서, 다음 엔트리 필드(90)는 가입 요청을 전송했던 소비자에 의해 정의되지 않지만, 라우터 제어 회로부(52)에 의해 제어된다.
각각의 채널 소비자 정보 엔트리 내의 정보의 다른 편부(piece)들은 가입 요청에서 소비자 노드에 의해 (적어도 초기에) 특정될 수 있다. 채널 소비자 정보 테이블(66)의 각각의 엔트리는, 예를 들어 다음을 특정할 수 있다:
Figure pct00001
소비자가 가입하고 있는 채널 상에서 메시지가 수신될 때 메시지 데이터가 스태싱되어야 하는 특정 캐시(11, 12, 14)를 식별하는 데 사용되는 노드 식별자(92).
메시지 데이터가 기입될 버퍼 구역(70)과 연관된 어드레스 공간을 식별하는 어드레스 공간 식별자(94). 어드레스 공간 식별자는 소비자 노드에서 사용 중일 수 있는 어드레스 맵핑들의 상이한 세트들 사이를 구별하는 데 도움을 준다. 이러한 예에서, 어드레스 공간 식별자는 물리적 어드레스 공간 식별자(PASID)이다. 다른 예들은 상이한 방식으로 어드레스 공간 식별자를 표현할 수 있다. 예를 들어, 일부 구현예들에서, 가상 머신 식별자(VMID)는 프로세싱 시스템 상에서 실행되는 특정 가상 머신과 연관될 수 있고, 어드레스 공간 식별자(ASID)는 가상 머신에 의해 감독되는 상이한 프로세스들과 연관된 상이한 어드레스 변환 체제들을 구별할 수 있으며 - 그 경우, VMID 및 ASID의 조합은 도 5에 도시된 PASID와 유사한 방식으로 어드레스 공간을 식별할 수 있다.
소비자의 가상 어드레스 공간 내의 어드레스 공간(70)의 할당된 소비자-정의된 구역을 식별하는 가상 어드레스 베이스(95).
특정 소비자-정의된 수의 메시지들이 대응하는 메시지 채널 상에서 수신되었을 때 이벤트 통지가 생성되게 허용하기 위해 메시지 채널 상에서 수신된 메시지들의 수를 카운팅하는 데 사용되는 카운트 값(96).
(이벤트 통지들이 메모리-기반 통지 메커니즘을 사용하여 제공되면), 일단 이벤트 통지 조건(예를 들어, 소비자-정의된 수의 메시지들이 그 채널 상에서 이미 수신되었다는 것을 카운트(96)가 표시함)이 만족되면 라우터(50)가 기입 요청을 발행해야 하는 이벤트 통지 어드레스. 이러한 예에서, 이벤트 통지 어드레스는 "WFE 어드레스"로 지칭되는데, 그 이유는, WFE 어드레스로서 설정된 어드레스에 대한 업데이트가 검출될 때까지 코어가 스레드의 프로세싱을 일시정지하게 허용하도록 소비자 코어가 "이벤트 대기"(WFE) 특징을 지원한다고, 아래에서 설명되는 특정 코드 예가 가정하기 때문이다. 그러나, 주어진 어드레스에 대한 업데이트를 모니터링하기 위해 WFE 메커니즘을 사용하는 것은 필수적이지 않으며, 다른 예들이 다른 메모리-기반 통지 메커니즘을 사용할 수 있고, 여기서 메모리 내의 특정된 이벤트 통지 어드레스로의 기입이 이벤트 통지로서 사용되고, 프로세서는 특정된 이벤트 통지 어드레스에 대한 업데이트들을 체크하기 위해 (이벤트 대기 이외의) 다른 메커니즘을 사용할 수 있다. 따라서, 일부 예들이 WFE 어드레스를 지칭하지만, 이는 단지 메모리-전달 통지가 제공될 수 있는 이벤트 통지 어드레스의 일 예라는 것이 인식될 것이다.
또한, 일부 구현예들은 이벤트 통지(WFE) 어드레스(98)를 완전히 생략하고, 대신에 소비자 노드에 인터럽트를 전송함으로써 이벤트 통지들을 제공할 수 있다. 이러한 경우, 이벤트 통지 어드레스를 소비자 수요 테이블에 저장할 필요성이 존재하지 않는다.
물리적 어드레스로의 가상 어드레스 베이스(95) 및 (제공된다면) 이벤트 통지 어드레스(98)의 변환은, 예를 들어 라우터(50)에 로컬인 어드레스 변환 회로부를 사용하여 또는 소비자 노드 내의 어드레스 변환 회로부를 사용하여, 또는 변환 서비스를 통해 작동되는 변환 색인 버퍼를 사용하여 또는 시스템 메모리 관리 유닛을 사용하여 발생할 수 있다. 따라서, 가상 어드레스들(95, 98)을 물리적 어드레스들로 변환하기 위한 가상-물리적 어드레스 변환을 구현하기 위한 옵션들의 범위가 존재한다. 그러한 변환은 1-스테이지 변환 또는 중간 어드레스를 통한 2-스테이지 변환일 수 있다(일부 시스템들은 둘 모두의 옵션들을 지원할 수 있음).
카운트 필드(96)를 사용한 메시지들의 수의 카운팅을 구현하기 위한 옵션들의 범위가 또한 존재할 수 있다. 도 5에 도시된 예들에서, 소비자 노드가 주어진 메시지 채널에 가입할 때, 가입 요청은 이벤트 통지가 제공되기 전에 채널 상에서 수신된 메시지들의 수를 표현하는 특정 카운트 값(예를 들어, 도 5에 도시된 엔트리 ID1에 대한 20)을 특정할 수 있다. 이어서, 메시지가 수신된 때마다, 카운트 값(96)이 감분될 수 있고, 계정이 0에 도달할 때 이벤트 통지가 이어서 트리거될 수 있다. 이러한 예에서, 개개의 메시지 페이로드들이 가상 어드레스 베이스(95)에 대해 상이한 오프셋들에 기입되게 허용하기 위해, 이어서 메시지가 채널 상에서 수신될 때마다, 가상 어드레스 베이스(95) 자체는 하나의 메시지 페이로드의 크기에 대응하는 양만큼 증분될 수 있거나, 또는 특정 메시지를 할당된 버퍼 구역(70)에 기입할 때 사용될 VA 베이스(95)에 대한 오프셋을 계산하기 위해 필드가 사용될 수 있도록 소비자가 채널에 가입했으므로, 수신된 메시지들의 수를 추적하기 위해 부가적인 필드가 소비자 수요 테이블(66)에 추가될 수 있다. 그러나, 다른 접근법은, 감분 카운터를 갖는 대신에, 카운트 값(96)이 0에서 시작하도록 증분 카운터가 사용될 수 있고, 이벤트 통지가 트리거되어야 하는 메시지들의 임계 수를 표시하기 위한 별개의 필드가 존재한다는 것일 수 있으며(이때, 그 임계치는 소비자로부터의 가입 커맨드에서 특정되었음), 이러한 경우, 가상 어드레스 베이스(95)를 증분시킬 필요성이 존재하지 않는데, 그 이유는 대신, 소비자가 채널에 처음 가입할 때 카운트 필드(96)가 0에서 시작하고, 이어서 상방으로 카운팅될 수 있어서, 그것이 또한, 주어진 메시지가 기입될 VA 베이스(95)에 대한 오프셋을 도출하는 데 사용될 수 있기 때문이다.
도 5에 도시된 테이블(64, 66)은 소비자 정보 캐시(56)에 캐싱될 수 있으며, 이는 엔트리들이 적어도 최근에 사용되는 것과 같은 캐시 할당 정책에 기초하여 라우터(50)에 의해 메인 메모리 내에 그리고 그의 외부로 스와핑(swap)될 수 있다는 것을 의미한다.
도 5에 도시된 라우팅 메커니즘을 사용함으로써, 이는, 각각의 소비자 말단 포인트 또는 데이터 타깃이 그 자신의 버퍼 공간(70)을 할당하는 것을 담당하여, 각각의 채널에 대해, 다수의 말단 지점들이 존재할 수 있고, 각각의 말단 지점은 그에 부착된 버퍼(심지어 단일 캐시 라인만큼 작은 버퍼)를 가질 수 있다는 것을 의미한다. 이벤트 통지를 트리거하기 위한 소비자-정의된 임계치는 상이한 소비자들이 그들의 필요성들에 의존하여 상이하게 크기설정된 버퍼들을 정의할 수 있고, 버퍼가 가득 찰 때 이벤트 통지가 트리거될 수 있다는 것을 의미한다. 개별 어드레스들의 입도보다는 채널 기반으로 소비자 가입들을 정의함으로써, 이는 다수의 생성자들이 동일한 어드레스에 대한 액세스를 공유하지 않더라도 그 다수의 생성자들이 동일한 채널 상에 메시지들을 제공할 수 있다는 것을 의미한다.
도 5는 이벤트 통지 채널들의 사용을 지원하지 않는 소비자 수요 테이블(66)의 기본 구현예를 도시한다. 도 6에 도시된 바와 같이, 특정 소비자 노드(82)가 다수의 채널들에 가입하기를 원하므로, 상이한 채널들과 연관된 다수의 큐들에 대한 버퍼 구역들(70)을 확립할 때 문제가 발생할 수 있다. 소비자는 다수의 메시지 채널들에 대해 그러한 큐들의 위치들을 라우터(50)에 등록하는 가입 요청들을 전송할 수 있다. 따라서, 메시지들이 상이한 채널들 상에서 수신됨에 따라, 대응하는 메시지들이 라우터에 의해 개개의 큐들(70)에 푸시된다. 그러나, 소비자 노드(82)는 이어서 큐들 중 임의의 큐가 업데이트되었는지 여부를 모니터링할 시에 문제에 직면한다.
일부 프로세서 코어 아키텍처들은 코어가 이벤트 대기(WFE) 명령어를 실행할 수 있는 WFE 특징을 지원할 수 있고, 이는 코어로 하여금 이벤트가 발생하기를 대기하는 기간 동안 전력 절약 상태로 스위칭되게 하거나 또는 상이한 스레드의 프로세싱으로 스위칭되게 한다. 다수의 정의된 유형들 중 하나의 유형의 이벤트가 발생하는 지점에서, 코어가 이어서 중단되고, 웨이크 업(wake up)되고 그리고/또는 WFE 동작을 요청했던 스레드로 다시 스위칭될 수 있다. WFE 동작 이후 중단되도록 코어를 트리거할 수 있는 이벤트의 하나의 유형은, WFE 상태에 진입했던 코어(82)에 의해 WFE 어드레스로서 정의된 어드레스로의, 다른 코어 또는 동일한 코어 상의 다른 스레드에 의한 기입일 수 있다. 그러나, 문제는 일부 프로세서 아키텍처들이 한 번에 WFE 어드레스로서 정의되는 단일 어드레스만을 지원할 수 있다는 것이며, 이는 다수의 큐들의 모니터링을 가능하게 하기 위해, 그러한 큐들이 모두 WFE 필드(98) 내의 동일한 어드레스와 연관될 필요가 있을 수 있어서, 이벤트와 조우할 시에, 코어(82)가 어느 특정 큐가 이벤트와 조우했는지를 알지 못할 것이라는 것을 의미한다. 따라서, 소비자 코어(82) 상에서 실행되는 스레드는, 각각의 큐와 연관된 어드레스들에 폴링 판독 요청들을 전송함으로써, 새로운 데이터가 이용가능한지를 관측하도록 체크하기 위해 모든 큐들에 걸쳐 스핀(spin)될 필요가 있을 것이고, 이는, 큐들의 수가, 예컨대 웹 서버들 상의 일부 애플리케이션들에 대해 클 수 있으므로 성능의 관점들에서 낭비일 수 있다. 유사하게, 프로세서 코어 아키텍처가 어떠한 WFE 메커니즘도 전혀 지원하지 않으면, 이벤트 통지는, WFE 어드레스로의 기입을 사용하여 제공되는 대신에, 소비자 코어(82)를 중단시킴으로써 소비자 코어(82)에 제공될 수 있다. 대안적으로, 다른 메모리-전달 통지 메커니즘이 사용될 수 있다(이때, 이벤트 통지 어드레스로의 기입은 위에서 설명된 WFE 메커니즘 이외의 메커니즘에 의해 모니터링됨). 그러나, 이러한 대안들은 또한, 일단 중단되거나 통지되면, 어떤 큐가 업데이트되었는지를 소비자 코어가 알지 못하므로, 다시 모든 큐들에 걸쳐 스핀될 필요가 있을 것이라는 점에서 유사한 문제에 직면한다.
일부 프로세서 코어들은 다수의 어드레스들에 대한 업데이트들을 동시에 모니터링할 수 있는 다중-어드레스 WFE 메커니즘을 지원할 수 있지만, 많은 프로세서 코어들은 이러한 특징을 지원하지 않을 수 있고, 그것은 이러한 메커니즘을 지원하기 위해 기존의 프로세서 코어 설계들을 수정하는 중요한 개발 노력일 수 있는데, 그 이유는 이것이 다중-어드레스 모니터링 메커니즘을 구현하기 위해 새로운 명령어들에 대한 명령어 세트 아키텍처 지원을 요구할 수 있기 때문이다. 많은 경우들에서, 시스템 개발자들 및 프로세서 설계자들은 이러한 특징을 추가하는 데 개발 비용들을 초래하기를 원하지 않을 수 있다.
도 7은 이러한 문제를 해결하는 방식을 도시한다. 명령어 세트 아키텍처 지원을 요구할 솔루션을 프로세서 코어(82) 자체 내에 구축하는 대신에, 이러한 메커니즘은 라우터 디바이스(50) 자체 내에 메시지 채널 이벤트들을 자가-모니터링하기 위한 능력을 추가한다. 라우터(50)의 메시지 채널 아키텍처는 이벤트 통지 채널에 대한 선택적인 부가적인 이벤트 큐를 지원하도록 적응될 수 있다. 이러한 이벤트 큐(도 7에서 이벤트 레지스트리 공간/로그로 도시됨)는 어느 메시지 채널이 특정 이벤트를 트리거했는지를 표시하기 위해 다른 채널들 상에서 각각의 완료된 이벤트에 대한 메타-데이터를 수신한다. 주어진 다중-이벤트 레지스트리에 대한 이벤트들은 라우터에 의해 FIFO 순서로 순서화되어, 소비자 코어(82)에서의 호출 스레드가 그의 이벤트 레지스트리 큐를 체크할 때, 가장 오래된 이벤트가 먼저 보여진다. 이벤트 로그에 저장된 메타-데이터는 고정 폭의 임의의 식별 특징일 수 있다. 예를 들어, 이벤트를 그의 가입 커맨드를 사용하여 등록할 시에, 소비자 노드에서의 스레드는 소비자-정의된 통지 값(예를 들어, 소프트웨어에 대한 특정 이벤트를 식별하는 32 비트 정수 값)을 제공할 수 있다. 그 수는 채널 소비자 정보 테이블(66)의 관련 엔트리에 등록되고, 그 엔트리에 의해 정의된 메시지 채널에 대한 이벤트 통지 조건이 만족될 시에 이벤트 통지 채널에 대한 이벤트 레지스트리 큐(102) 내에 저장된다.
따라서, 도 7에 도시된 바와 같이, 소비자 코어(82)가 그러한 채널들 상의 메시지들에 대한 큐들로서 작용하는 개개의 버퍼들(70)과 연관된 관련 메시지 채널들에 대한 그의 가입들을 설정할 때, 코어(82)는 또한, 소비자 코어(82)에 의해 이벤트 레지스트리 공간(102)으로서 정의된 메모리의 주어진 구역을 이벤트 통지 채널 상에서 메시지들을 수신하기 위한 버퍼 구역(70)으로서 갖는 이벤트 통지 채널에 코어를 가입시키는 가입 요청을 전송한다(100). 메시지들이 표준 메시지 채널들 중 임의의 채널 상에서 수신될 때, 이어서 이들은 앞서 논의된 바와 같이 그러한 채널들에 대한 개개의 버퍼들(70)로 푸시된다. 이벤트 통지 조건이 모니터링된 채널들 중 임의의 채널에 대해 만족될 때(예를 들어, 이전에 정의된 임계 수의 메시지들이 채널에 대해 도달했다는 것을 카운트가 표시함), 이어서, 이벤트 통지(예를 들어, 이벤트 통지 어드레스로의 기입 또는 인터럽트)를 소비자 코어(82)에 직접 제공하는 대신에, 일부 이벤트 통지 데이터(104)는 대신 이벤트 통지 채널(100)의 버퍼 구역(102)으로 푸시된다. 이벤트 통지 조건들이 그러한 모니터링된 데이터 채널들 중 임의의 채널 상에서 발생하면 일부 이벤트 통지 데이터가 이벤트 레지스트리 로그(102)로 푸시되도록, 동일한 이벤트 통지 채널이 상이한 데이터 채널들 사이에서 공유된다. 그러나, 상이한 소비자는 또한, 도 7에 도시된 소비자와 동일한 메시지 채널에 관련된 이벤트 통지 채널을 특정했을 수 있으므로, 그것은, 관련 통지 이벤트가 그 채널 상에서 발생할 때, 라우터(50)가 동일한 메시지 채널에 대한 다수의 이벤트 통지 채널들을 업데이트하는 것일 수 있다(도 7에 도시되지 않음).
소비자 코어(82)는 이벤트 통지 채널과 연관된 이벤트 통지 어드레스를 정의할 수 있어서, 일단 특정 수의 이벤트 통지들이 (채널들의 모니터링된 그룹 중 임의의 그룹에 관련된) 이벤트 레지스트리 로그(102)로 푸시되었다면, 특정된 이벤트 통지 어드레스로의 기입이 트리거될 수 있고, 이는 소비자 코어(82)에서 단일-어드레스 모니터링 메커니즘에 의해 모니터링될 수 있어서, 소비자 코어가 폴링 메커니즘을 사용하여 다수의 큐들을 모니터링할 필요성이 존재하지 않는다. 대안적으로, 특정 수의 이벤트 통지들이 이벤트 통지 채널에 푸시되었을 때, 인터럽트가 소비자 코어에 전송될 수 있다. 어느 방식으로든, 이벤트 통지 조건이 연관된 데이터 채널들 중 하나 상에서 발생할 때 이벤트 레지스트리 로그(102) 내에서 이벤트 통지 데이터(104)로서 특정된 정보는 그러한 채널들을 구성할 때 소비자 노드(82)에 의해 선택된 임의적인 값일 수 있어서, 이벤트 레지스트리 로그(102)부터 판독된 값은, 그의 본래 가입 요청에서 소비자에 의해 정의된 이벤트 통지 값(104)의 소프트웨어-특정 의미에 의존하여, 소비자 코어(82) 상에서 실행되는 스레드가 어느 큐를 체크할지 또는 어떤 액션을 취할지를 신속하게 식별하게 허용하기 위해, 어느 큐가 대응하는 이벤트와 연관되는지를 표시하거나 또는 어느 타입의 이벤트가 발생했는지에 관한 정보를 표시할 수 있다.
요약하면, 도 7은, 연관된 데이터 채널들 상에 다수의 관심 이벤트들을 등록하기 위해 스레드에 의해 사용되는 이벤트 통지 채널로서 부가적인 메시지 채널이 어떻게 등록되는지를 도시한다. 라우터(50)의 시점으로부터, 이벤트 통지 채널(100)은 임의의 다른 데이터 채널과 동일하게 기능하여, 그 채널 내에 삽입된 메시지 페이로드들의 수의 카운팅 및 이벤트 통지들의 트리거링에 대한 유사한 고려사항들이 수행될 수 있다. 그러나, 이벤트 통지 채널은, 생성자 요청들을 라우터(50)에 전송하고 있는 다른 프로세서 코어(9)와 같은 생성자 노드를 그의 생성자로서 갖기보다는, 이벤트 통지 채널에 대한 생성자 노드가 라우터(50) 자체라는 점에서 다른 메시지 채널들과 상이하다.
도 8은 이벤트 통지 채널의 사용을 지원하기 위한 채널 소비자 정보 테이블(66)의 사용을 도시한다. 각각의 엔트리는 위에서 논의된 바와 같은 필드들(90, 92, 94, 95, 96, 98)을 여전히 갖는다. 이벤트 통지 채널은 다른 메시지 채널들에 대해서만 채널 소비자 정보 테이블(66)의 엔트리를 할당받는다. 이러한 예에서, 이벤트 통지 어드레스에 기입함으로써 소비자 노드에 직접 대신에, 연관된 이벤트 통지 채널 상에서 이벤트 통지들이 제공되어야 한다는 것을 소비자 노드가 표시했던 메시지 채널들에 관련된 엔트리들의 경우, 이벤트 통지 어드레스 필드(98)는 이벤트 통지 채널에 대해 할당된 엔트리의 엔트리 ID를 대신 표시하기 위해 재사용될 수 있다. 예를 들어, 도 8에서, ID들 1 및 3을 갖는 엔트리들 둘 모두는, 이벤트 통지들이 엔트리 ID 0에 의해 표현된 이벤트 통지 채널 상에서 제공되어야 한다는 것을 소비자가 표시했던 메시지 채널들에 관련된다. 도 8에 도시되지 않았지만, 각각의 엔트리는 또한, 이벤트 통지 어드레스 필드가 이벤트 통지 어드레스로서 해석되어야 하는지 또는 특정 이벤트 통지 채널의 식별으로서 해석되어야 하는지를 표시하는 플래그를 포함할 수 있다. 예컨대, 별개의 이벤트 통지 어드레스 및 이벤트 통지 채널 ID 필드들을 가짐으로써, 특정 메시지 채널들에 관련된 이벤트 통지 채널을 식별하기 위한 다른 메커니즘들이 또한 존재할 수 있거나, 또는 이벤트 통지들이 인터럽트들을 사용하여 제공되는 일 구현예에서, 이벤트 통지 어드레스 필드(98)가 전혀 제공되지 않을 수 있으므로, 별개의 필드가 이벤트 통지 채널과 연관된 엔트리의 ID를 표시하기 위해 사용될 수 있다는 것이 인식될 것이다.
따라서, 채널 소비자 정보 구조(62, 66) 내의 엔트리들 중 하나에 의해 표현되는 바와 같은 주어진 채널/소비자 쌍에 대해 이벤트 통지 조건이 만족되면(예를 들어, 카운트 필드(96)에 기초하여 결정됨), 이어서, 통지가 소비자에 직접 제공되어야 한다는 것을 그 엔트리가 특정하면, 메시지 전달 회로부(50)의 제어 회로부(52)는 통지를 소비자에게 (예를 들어, 이벤트 통지 어드레스로의 기입 또는 인터럽트로서) 직접 발행하는 반면, 특정된 채널 및 소비자에 대한 이벤트 통지들이 이벤트 통지 채널 상에서 제공되면, 제어 회로부(52)는 대신에 (예를 들어, 이벤트 통지 조건과 조우했던 채널의 이벤트 통지 어드레스 필드(98) 내의 엔트리 ID에서 특정된 바와 같이) 이벤트 통지 채널과 연관된 테이블(66)의 엔트리를 판독하고, 이어서, 이벤트 통지 채널과 연관된 엔트리 내의 어드레스 공간 ID(94) 및 VA 베이스(95)를 사용하여 식별된 이벤트 레지스트리 공간(102) 내의 위치로 이벤트 통지 데이터를 푸시함으로써 이벤트 통지 데이터를 그 이벤트 통지 채널에 기입한다. 다시, 캐시 스태싱 메커니즘이 사용될 수 있고, 이벤트 통지 데이터는 이벤트 통지 채널의 엔트리 내의 노드 ID(92)에 의해 식별된 캐시에 푸시될 수 있다. 이벤트가 그의 연관된 메시지 채널들 중 주어진 채널 상에서 발생할 때 이벤트 통지 채널에 푸시될 이벤트 통지 데이터(104)의 값은 이벤트와 조우했던 주어진 메시지 채널의 엔트리 내의 부가적인 필드(110)에서 특정될 수 있다.
도 8의 상단 부분에 도시된 명령어들은 관련 데이터 메시지 채널들 및 이벤트 통지 채널에 가입하기 위해 소비자 노드에서 실행하기 위한 코드 예를 예시한다. 이러한 코드 예는 WFE 메커니즘을 지원하는 도 8에 도시된 구현예에 기초하므로, 이벤트 통지 어드레스는 이러한 특정 예에서 WFE 어드레스로서 설명된다.
코드 예의 라인 1에서의 제1 원자적 비일관성 저장 요청(st64)은 소비자 코어가 이벤트 통지 채널에 대한 가입을 요청하기 위해 발행하는 이벤트 채널 가입 요청이다. 저장 요청의 타깃 어드레스는 메시지 전달 회로부(50)의 커맨드 큐(58)에 맵핑된 어드레스이고, 저장 요청의 나머지 파라미터들은 저장 요청의 기입 데이터 내에 포함된다. 이러한 파라미터들은, 이러한 요청이 이벤트 통지 채널에 대한 가입을 위한 것이라는 것을 구별하는 채널 유형 파라미터(112), 이벤트 통지 채널에 대한 VA 베이스(95)로서 특정될 어드레스(114), 소비자 코어(82)로의 WFE 통지가 수행되기 전에 이벤트 통지 채널에 기입될 이벤트 통지 항목들(104)의 임계 수를 표현하는 소비자-정의된 카운트 값(116), 및 그러한 통지들이 이벤트 통지 채널에 대해 이루어질 WFE 가상 어드레스(118)를 포함한다.
코드 예의 라인들 2 및 3에서의 후속의 2개의 가입 요청들(st64)은 관련 데이터 채널들에 가입하기 위한 가입 요청들이다. 도 8에 도시되지 않았지만, 가입 요청들은, 소비자가 가입하기를 원하는 채널을 식별하는 타깃 채널 식별자를 그들의 커맨드 데이터의 일부로서(또는 도 5에 관해 앞서 설명된 바와 같이 생성자 요청의 타깃 어드레스에서 공유 큐 핸들(SQH)을 정의하기 위한 메커니즘과 유사한, 저장소의 타깃 어드레스의 일부로서) 특정할 수 있다. 이러한 가입 요청들은 또한, VA 베이스(95), WFE VA(98) 및 이벤트 통지가 제공되기 전에 채널 상에서 수신될 메시지들의 수의 카운트를 표시하는 임계치 값을 특정한다. 이러한 예에서, 이러한 가입 요청들은 라인 1에서 st64를 사용하여 구성된 이벤트 통지 채널 상에서 이벤트 통지들이 제공될 채널들에 관련된다. 이는 라인들 2 및 3에서의 가입 요청들의 WFE 가상 어드레스가 라인 1에서 이벤트 채널 가입 요청에 대해 정의된 WFE 가상 어드레스(118)와 동일한 것에 기초하여 식별된다. 따라서, 이러한 접근법은 이벤트 통지 채널 가입 요청에 대해 그리고 이벤트들이 이벤트 통지 채널을 통해 통지될 모니터링된 큐들의 그룹에 대해 동일한 WFE 어드레스를 정의하도록 소프트웨어에게 요구한다. 이는 어느 큐들이 통지 그룹으로 함께 결부(tie)되어야 하는지를 식별하는 하나의 방식이지만, 다른 메커니즘들은 또한, 예를 들어 데이터 메시지 채널들과 이벤트 통지 채널 사이의 관계를 식별하기 위해 (데이터 채널 가입 요청들에서 특정되면 이벤트 통지 채널, 또는 이벤트 통지 채널 가입 요청에서 특정되면 개별 데이터 메시지 채널들 중 어느 하나의) SQH를 사용함으로써 사용될 수 있다는 것이 인식될 것이다(예를 들어, 이는, 인터럽트들이 이벤트 통지들을 소비자 코어들에 제공하는 데 사용되므로, WFE 필드(98)가 제공되지 않을 수 있는 대안적인 구현예에 유용할 수 있음). 또한, 도 8에 도시되지 않지만, 라인들 2 및 3에서 도시된 후속 가입 요청들은 이벤트 통지 조건이 그러한 다른 메시지 채널들에 대해 발생할 때 이벤트 채널에 푸시될 이벤트 통지 데이터(110)를 그들의 커맨드 데이터의 일부로서 특정할 수 있다.
코드 예의 라인 4에서, 코어(82)는 더 이른 가입 요청들에 의해 특정되었던 WFE 가상 어드레스를 그의 타깃 어드레스로서 특정하는 로드-독점적(load-exclusive) 명령어를 실행한다. 이는 WFE 메커니즘에 의해 모니터링될 어드레스로서 WFE 가상 어드레스를 등록하는 효과를 갖는다. 후속하여, 라인 5에서, 코어는 코어로 하여금 현재 스레드의 프로세싱을 중단시키게 하고, 전력 절약 상태로 스위칭하게 하거나 또는 상이한 스레드가 실행되게 허용하게 하도록 WFE 명령어를 실행한다. WFE 가상 어드레스에 대한 액세스가 트리거(예를 들어, 상호연결부(10)로부터 전송된 스누프 요청에 기초하여 코어(82)에 의해 검출)될 때, 이는 이어서 코어를 웨이크업하고 그리고/또는 코어로 하여금 WFE 명령어를 실행했던 스레드로 리턴되게 하며, 이는 이어서, WFE 어드레스에 대한 업데이트에 의해 표현된 통지를 사용하여, 이벤트 레지스트리 공간(102)이 업데이트되었을 수 있다고 결정할 수 있고, 이어서, 그 이벤트 레지스트리 공간의 어드레스들을 판독하여, 이벤트 통지 데이터(104)를 식별하고, 관련 큐들에서 메시지들을 어떻게 프로세싱할지를 결정할 수 있다.
도 9는 주어진 메시지 채널(이는 데이터 메시지 채널 또는 이벤트 통지 메시지 채널 중 어느 하나일 수 있음)에 가입하기를 원하는 가입 소비자 노드로부터 수신된 채널 가입 요청의 프로세싱을 예시하는 흐름도이다. 단계(200)에서, 예를 들어 메시지 전달 회로부(50)의 커맨드 인터페이스(58)에 맵핑된 타깃 어드레스를 특정하는 원자적 비일관성 저장 요청에 기초하여 채널 가입 요청이 수신된다. 채널 가입 요청은 다음 중 임의의 것을 포함할 수 있는 가입 파라미터들을 특정한다:
소비자 노드가 가입하기를 원하는 선택된 메시지 채널의 식별자. 이러한 식별자는 생성자와 이전에 동의된 공유 큐 핸들일 수 있다. 식별자는 상이한 방식들로, 예를 들어 커맨드의 커맨드 페이로드 데이터에서, 또는 도 5에 도시된 접근법과 유사한 접근법을 사용함으로써 식별될 수 있으며, 여기서 저장 요청의 타깃 어드레스의 어드레스 비트들의 일부는 공유 큐 핸들(89)을 특정한다(이러한 경우, 다시 일정 범위의 어드레스들은 모두 메시지 전달 회로부(50)의 커맨드 인터페이스(58)에 맵핑될 수 있어서, 그 범위 내의 임의의 어드레스는 커맨드로서 해석될 수 있고, 다른 어드레스 비트들은 채널 ID와 다른 파라미터들을 구별하는 데 사용될 수 있음).
메시지 데이터가 주어진 메시지 채널에 대해 스태싱될 가입 소비자 노드와 연관된 캐시의 노드 식별자(92).
선택된 메시지 채널이 이벤트 통지 채널인지 또는 이벤트 통지 채널 이외의 메시지 채널인지를 식별하는 파라미터(112). 예를 들어, 가입 파라미터들은 메시지 채널의 유형을 특정하는 플래그 또는 다른 표시자를 포함할 수 있다.
메시지 데이터가 선택된 메시지 채널에 대해 기입될 어드레스 공간의 소비자-정의된 구역(70, 102)의 어드레스를 제공하는 VA 베이스(95). 이는 또한 VA 베이스(95)를 변환하기 위한 상이한 변환 체제들을 구별하기 위해 앞서 논의된 바와 같이 어드레스 공간 ID(94)와 연관될 수 있다.
만족될 때, 이벤트 통지 어드레스로의 기입을 사용하는 직접 통지 또는 이벤트 통지 채널을 사용하는 통지 중 어느 하나를 사용하여 이벤트 통지를 트리거해야 하는 소비자-정의된 이벤트 통지 조건을 특정하는 정보. 이러한 예에서, 소비자-정의된 이벤트 통지 조건은 이벤트 통지가 트리거되기 전에, 주어진 메시지 채널 상에서 전달될 메시지들의 임계 수를 표시하는 카운트 값(116)으로서 정의된다. 그러나, 다른 구현예들은 또한 소비자에 의해 표시될 수 있는 다른 유형들의 이벤트 통지 조건을 지원할 수 있다.
(이벤트 통지들이 메모리-전달 통지 메커니즘을 사용하여 지원되면), 이벤트 통지 채널을 사용하지 않을 채널들에 대해, 이벤트 통지가 제공될 때 데이터가 기입될 이벤트 통지 어드레스(98)를 표현하는 이벤트 통지 어드레스(WFE 어드레스). 주어진 메시지 채널이 이벤트 통지 채널을 통해 그의 이벤트 통지들을 제공하면, 이러한 이벤트 통지 어드레스 값은 도 8에 언급된 바와 같이 더 이른 이벤트 통지 채널 가입 요청에 대해 선택된 이벤트 통지 어드레스(118)와 동일하도록 설정될 수 있다. 대안적으로, 주어진 메시지 채널과 대응하는 이벤트 통지 채널 사이의 관계를 표시하기 위한 대안적으로 다른 메커니즘, 예컨대 이벤트 통지 채널 및 데이터 메시지 채널과의 연관을 식별하기 위해 가입 파라미터들에서 이벤트 통지 어드레스와 별개의 필드를 제공하는 것이 사용될 수 있다.
선택된 메시지 채널에 대한 이벤트 통지들이 이벤트 통지 채널 상에서 제공되면, 가입 요청은 또한, 주어진 메시지 채널 상의 이벤트 통지가 발생할 때 이벤트 레지스트리(102)에 푸시될 소비자-정의된 이벤트 통지 데이터(110)를 특정할 수 있다.
모든 구현예들이 이러한 유형들의 가입 파라미터들 모두를 정의할 필요는 없다는 것이 인식될 것이다. 예를 들어, 캐시 스태싱을 사용하지 않는 구현예들은 가입 소비자 노드의 노드 ID를 생략할 수 있다. 또한, 일부 구현예들은 이벤트 통지들이 생성될 특정 이벤트 통지 조건을 소비자가 정의하기 위한 능력을 제거할 수 있으며, 예를 들어 대신에 라우터는 특정 디폴트 수의 메시지들을 규정할 수 있고, 그 이후, 이벤트 통지가 제공되고, 이러한 경우, 가입 요청이 소비자-정의된 이벤트 통지 조건을 특정할 필요성이 존재하지 않는다(테이블(66)은, 임계치가 소비자에 의해 정의되지 않더라도, 메시지들의 수를 카운팅하기 위한 카운트 필드(96)를 여전히 포함할 수 있음). 그러나, 실제로 소비자-정의된 이벤트 통지 조건을 지원하는 것은 소비자가 주어진 채널에 대해 그의 버퍼(70)를 어떻게 셋업하는지에서 유연성을 허용하는 데 유용할 수 있다. 또한, 이벤트 통지들을 제공하기 위해 인터럽트들을 사용하는 구현예는 이벤트 통지 어드레스를 생략할 수 있다.
채널 가입 요청에 응답하여, 단계(202)에서, 제어 회로부(52)는 소비자 노드가 가입을 요청하고 있는 주어진 메시지 채널이 이벤트 통지 채널인지 여부를 결정하고, 그러하다면, 단계(204)에서, 소비자 채널 정보 엔트리가 이벤트 통지 채널 및 가입 소비자 노드에 대응하여 할당된다. 예를 들어, 소비자 수요 테이블(66)의 유효하지 않은 엔트리는 이벤트 통지 채널에 대한 채널 소비자 정보를 표현하기 위해 선택될 수 있고, 새롭게 할당된 엔트리의 필드들(92, 94, 95, 96, 98)은 가입 요청의 파라미터들에 기초하여 설정될 수 있고, 엔트리는 (예를 들어, 도 8에 도시되지 않은 엔트리의 유효 필드를 사용하여) 유효한 것으로 설정될 수 있다.
메시지 채널이 이벤트 통지 채널이 아니었다면, 단계(206)에서, 제어 회로부(52)는 주어진 메시지 채널에 대한 이벤트 통지들이 이벤트 통지 채널 상에서 제공될지 여부를 결정한다(예를 들어, 이는 앞서 언급된 바와 같이 가입 요청에서 정의된 이벤트 통지 어드레스에 기초하여 또는 다른 메커니즘에 의해 결정될 수 있음). 방법은, 이벤트 통지 채널이 사용되지 않는다면 단계(208)로 또는 이벤트 통지 채널이 사용되면 단계(210)로 진행한다. 단계들(208, 210)은 일부 공통 특징들을 가지며 - 이벤트 통지 채널이 사용될지 여부에 관계없이, 제어 회로부(52)는 그 채널로의 새로운 소비자에 대한 할당을 위한 유효하지 않은 소비자 채널 정보 엔트리를 선택한다. 제어 회로부는, 어떠한 이전의 소비자들도 그 주어진 메시지 채널에 대해 등록되지 않았다면, 새로운 채널 룩업 엔트리(단지 하나의 엔트리만을 현재 포함하는 링크된 목록의 헤드 및 테일 둘 모두와 동일한 엔트리를 표시함)를 할당하기 위해 채널 룩업 구조(64)를 업데이트할 수 있다. 그 채널 상에 이미 다른 소비자가 존재했다면, 새로운 엔트리는 링크된 목록의 테일에 할당되어, 그 채널에 대한 링크된 목록을 연장시키므로, 링크된 목록의 테일에서의 이전의 엔트리 내의 다음 엔트리 포인터(90)는 소비자 수요 테이블(66)의 새롭게 추가된 엔트리를 표시하도록 업데이트되고, 또한 채널 룩업 구조(64)의 룩업된 엔트리 내의 테일 엔트리 식별자는 앞서 언급된 바와 같이 새롭게 할당된 엔트리를 표시하도록 업데이트된다. 어느 방식으로든, 주어진 메시지 채널 및 가입 소비자 모드에 대한 소비자 수요 테이블(66) 내의 할당된 소비자 채널 정보 엔트리는 가입 요청의 파라미터들에 기초하여 필드들(92, 94, 95, 96)을 특정한다.
단계들(208, 210)은 이벤트 통지들이 소비자 노드에 직접 제공될지 여부를 표시하는 정보의 설정(단계(208)) 또는 이벤트 통지 채널을 사용하는 것(단계(210))에서 상이하다. 이러한 특정 예에서, 단계들(208, 210)은 이벤트 통지 어드레스 필드(98) 및 이벤트 통지 데이터 필드(110)의 설정에서 상이하다. 단계(208)에서, 이벤트 통지 채널이 이벤트 통지들을 제공하기 위해 사용되지 않으면, 새롭게 할당된 엔트리에 대한 이벤트 통지 어드레스(98)는 가입 요청에서 특정된 이벤트 통지 어드레스로 설정된다. 반면에, 주어진 메시지 채널에 대한 이벤트 통지들이 이벤트 통지 채널 상에서 제공되었다면, 단계(210)에서, 이벤트 통지 어드레스 필드(98)는 이벤트 통지 채널에 대해 이전에 할당된 채널 수요 테이블(66)의 엔트리의 식별자로 설정된다. 또한, 단계(208)에서와 달리, 단계(210)에서, 이벤트 통지 데이터 필드(110)는 가입 요청에서 특정된 소비자-정의 값으로 설정될 수 있다. 이는 단계(208)에서 필수적이지는 않다. 다시, (예를 들어, 메모리-전달 통지 메커니즘 대신에, 이벤트들을 소비자 코어에 시그널링하기 위해 인터럽트 기반 통지 메커니즘을 사용하는) 대안적인 구현예들은, 이벤트 통지들이 소비자 노드에 직접 제공될지 여부를 구별하기 위해(단계(208)) 또는 이벤트 통지 채널과 연관된 어드레스 공간의 구역에 이벤트 통지 데이터를 기입함으로써(단계(210)) 엔트리의 다른 정보(예를 들어, 전용 플래그 또는 필드)를 설정할 수 있다.
도 10은 메시지 전달 회로부(50)의 메시지 인터페이스(60)에서 수신된 생성자 요청의 프로세싱을 예시하는 흐름도이다. 단계(250)에서, 생성자 요청이 수신되어, 타깃 메시지 채널에 대한 메시지 데이터(86)를 제공한다. 이에 응답하여, 단계(252)에서, 제어 회로부(52)는 임의의 실패 조건이 생성자 요청에 대해 식별되었는지 여부를 결정한다. 예를 들어, 가능한 실패에 대한 이유들은, 수신된 메시지를 수용하기에 불충분한 공간이 메시지 큐(60)에 존재한다는 것, 메시지 전달 회로부(50)가 현재 사용 중이고 메시지를 핸들링할 수 없다는 것, 메시지 페이로드가 잘못 되었다는 것, 또는 (예를 들어, 일부 감독자 소프트웨어가 특정된 메시지 채널에 대한 유효 상태를 표시하도록 메시지 전달 회로부(50)를 구성할 필요가 있을 수 있기 전에) 메시지 전달 회로부(50)에서 타깃 메시지 채널에 대해 어떠한 유효 채널 정보도 정의되지 않았다는 것일 수 있다. 다른 유형들의 장애 조건이 또한 특정 플랫폼의 필요성들에 의존하여 구현될 수 있다는 것이 인식될 것이다. 실패 조건이 식별되어, 메시지가 현재 프로세싱될 수 없다면, 단계(254)에서, 생성자 요청을 전송했던 생성자 노드로 실패 표시가 리턴된다. 이는 메시지 전달이 실패했다는 것을 생성자에게 표시하는 임의의 리턴된 신호 또는 데이터 값일 수 있다. 생성자는 메시지를 나중에 전송하기를 재시도할지 여부 또는 주어진 메시지 채널 상에서의 메시지 전달을 가능하게 하도록 감독 코드가 메시지 전달 회로부(50)를 구성할 것을 요청할지 여부를 결정하기 위해 이를 사용할 수 있다. 일부 예들에서, 실패 표시는 실패에 대한 이유의 표시를 포함할 수 있어서, 생성자는 이에 응답하여 어떤 액션을 취할지를 결정할 수 있다.
한편, (단계(252)에서 어떠한 실패 조건도 존재하지 않는다는 식별에 후속하여, 또는 단계(250)로부터 단계(256)로 직접 전달하는 화살표에 의해 도시된 바와 같이, 임의의 실패 조건이 발생했는지 여부의 평가와 병렬로) 생성자 요청에 응답하여, 룩업 회로부(54)는 타깃 메시지 채널에 대해 정의된 임의의 채널 소비자 정보가 존재하는지 여부를 결정하기 위해 채널 소비자 정보 구조(62)를 룩업한다. 이는 메모리 내의 구조로부터 데이터를 판독하라는 요청들을 발행함으로써 또는 내부 레지스터들에서 또는 채널 소비자 정보 캐시(56) 내에서 구조를 룩업함으로써 행해질 수 있다. 캐시가 사용되고 요청이 캐시에서 미스되면, 메모리로부터 채널 소비자 정보를 요청하기 위한 라인 충전 요청이 발행될 수 있다.
어떠한 채널 소비자 정보도 타깃 메시지 채널에 대해 정의되지 않았다면, 도 10에서 점선들에 의해 도시된 바와 같이 여러가지 옵션들이 존재한다. 하나의 옵션은 이를 실패로서 처리하고, 단계(254)로 진행하여, 실패 표시를 생성자 노드로 리턴하는 것이다. 다른 옵션은 단순히, 메시지를 무시하지만, 메시지 전달이 성공적이었다는 것을 생성자 요청에 대해 표시하므로, 단계(258)에서, 성공 표시가 생성자로 리턴될 수 있고, 이어서 메시지 전달 회로부(50)가 다음의 수신된 생성자 요청을 프로세싱할 준비가 될 수 있다는 것이다. 이러한 옵션들 중 어느 하나는, 그들이 유효 채널 상에서 메시지를 전송했지만 그 채널에 대한 어떠한 가입자도 아직 존재하지 않았을 때 생성자 요청들을 통지하는 것이 요구되는지 여부에 의존하여 가능하다.
채널 소비자 정보의 적어도 하나의 유효 엔트리가 타깃 메시지 채널에 대해 이용가능하면(예를 들어, 채널 소비자 수요 테이블(66)이 그 채널에 대한 적어도 하나의 유효 엔트리를 포함한다는 것을 정의하는 엔트리가 채널 룩업 구조(64)에 존재했거나, 또는 대안적으로, 채널 소비자 정보를 제공하는 CAM 구조에서, 적어도 하나의 히트가 식별되었다면), 방법은 단계(260)로 진행한다. 단계(260)에서, 타깃 메시지 채널에 대한 가입자에 대한 채널 소비자 정보의 제1 항목이 획득되고, 선택된 채널 소비자 정보로서 처리된다. 예를 들어, 획득된 정보는 앞서 설명된 예에서, 링크된 목록의 헤드에서의 테이블(66)의 엔트리일 수 있다.
단계(260)에서, 제어 회로부(52)는, 선택된 채널 소비자 정보의 필드들(94, 95, 96)에 의해 특정된 바와 같은 어드레스 공간의 소비자-정의된 구역(70) 내의 어드레스와 연관된 위치로의, 생성자 요청에서 수신된 메시지 데이터(86)의 기입을 요청한다. 예를 들어, 카운트 필드(96)는 VA 베이스(95)에 대한 오프셋을 식별하는 데 사용될 수 있거나, 또는 대안적으로, 오프셋을 추적하는 별개의 필드가 사용될 수 있거나, 또는 일부 구현예들에서, 새로운 메시지가 수신될 때마다 VA 베이스(95)가 증분되면, 오프셋을 적용할 필요성이 존재하지 않고, 기입은 VA 베이스(95) 자체에 의해 식별된 위치에 대한 것일 수 있다. 어드레스 공간 식별자(94)는 특정된 가상 어드레스에 대응하는 물리적 어드레스를 획득하기 위해 사용될 특정 가상 어드레스-물리적 어드레스 맵핑을 식별할 수 있다.
단계(260)에서의 메시지 데이터의 기입은 도 4에 관해 앞서 설명된 바와 같이 캐시 스태싱 요청을 사용할 수 있다. 도 11은 캐시 스태싱 동작을 더 상세히 예시한다. 가상 캐시 스태싱 메커니즘이 사용될 수 있으며, 이에 의해, 소비자의 캐시에 전송된 초기 스태싱 요청은 선택된 채널 소비자 정보에서 (VA 베이스 필드(95)에 기초한) 가상 어드레스 및 어드레스 공간 식별자(94)를 초기에 특정할 수 있다. 이는, 소비자의 메모리 관리 유닛의 변환 색인 버퍼(TLB)(130)가 어드레스 변환을 수행하는 데 대신 사용될 수 있으므로, 메시지 전달 회로부(50)가 자체적으로 가상-물리적 어드레스 변환을 지원할 필요가 없다는 것을 의미한다. 이는 라우터(50)의 구현을 단순화할 수 있다.
관련 채널에 대한 가입 요청을 전송할 때, 소비자 노드는 스태시가 수행될 관련 캐시의 노드 ID(92), 버퍼 구역(70)의 가상 어드레스(95) 및 채널 소비자 정보 내의 대응하는 어드레스 공간 ID(94)를 등록했다. 따라서, 메시지가 채널 상에서 수신될 때, 초기에 라우터(50)는 가상 스태싱 요청을 표현하는 스누프 요청(132)을 발행할 수 있으며, 그 가상 스태싱 요청은, 등록된 가상 어드레스 및 어드레스 공간 식별자를 특정하고, 노드 ID에 의해 식별된 노드에 발행되며, 어드레스 공간 식별자(94)에 의해 식별된 변환 체제의 어드레스 공간 맵핑에 따라 가상 어드레스를 물리적 어드레스로 변환하도록 소비자 노드의 TLB(130)를 이어서 트리거링할 가상 스태싱 요청을 이것이 표현한다는 것을 식별하는 파라미터를 특정한다. 소비자는 변환된 물리적 어드레스를 표시하는 스누프 응답(134)을 제공한다. 변환된 물리적 어드레스를 수신한 이후, 도 11의 단계 3에서, 물리적 스태시 요청(136)은 소비자 노드의 캐시에 전송되고, 이러한 물리적 스태시 요청은 변환된 물리적 어드레스를 특정하고, 관련 메시지 채널 상에서 푸시될 실제 데이터가 동반되며, 소비자 노드는 이어서, 이러한 데이터를 그의 캐시들 중 하나에 할당한다. 이는, 후속 이벤트 통지가 관련 메시지 채널 상에서 발생할 때, 이어서, 데이터가 대신 이미 그의 캐시 내에 상주하기 때문에, 소비자 코어가 메인 메모리(DRAM)로부터의 대응하는 데이터에서 페치할 필요성이 존재하지 않으므로, 이것이 액세스 레이턴시를 감소시킬 수 있다는 것을 의미한다.
소비자는 그의 현재 상황들에 의존하여 스태싱 요청들을 거부할 수 있을 수 있으며, 예를 들어 특정된 물리적 어드레스에 대한 데이터를 할당받을 수 있는 캐시 엔트리들의 세트는 코어가 축출하기를 원하지 않을 수 있는 다른 데이터에 대해 이미 사용 중일 수 있다. 스태시 요청을 수락할지 또는 거부할지를 판단하기 위한 특정 기준들은 구현 특정적일 수 있고, 소비자 코어의 필요성들에 의존하여 변할 수 있다. 소비자는, 단계 1에서 초기 스누프 요청을 수신할 때, 또는 단계 3에서 실제 스태시 데이터를 수신할 때, 또는 둘 모두의 기회들에서 캐시 스태싱 요청을 거부할 수 있을 수 있다. 소비자 코어가 그것이 그의 데이터를 소비자 캐시에 할당할 수 없다고 판단했다면, 단계 3에서 물리적 스태시 요청이 수신될 때, 이어서 소비자는 데이터를 스태싱하지 않도록 선택할 수 있고, 대신에 라우터(50)로부터 수신된 데이터로 하여금 변환된 물리적 어드레스에 의해 식별된 DRAM 또는 다른 메모리 내의 위치에 기입되게 할 수 있다. 도 11에 도시된 접근법에 대한 대안적인 접근법은, 변환된 물리적 어드레스를 단계 2에서의 가상 스태시 요청에 대한 응답으로서 전송하는 단계 2에서의 스누프 응답이 소비자 코어가 스태싱을 수용할지 여부를 표시할 수 있고, 이러한 경우 이어서, 소비자가 그것이 스태시 요청을 수락하지 않을 것이라는 것을 표시했다면, 라우터(50)는 메시지 데이터를 DRAM에 직접 기입할 수 있다.
대안적인 접근법은 도 11의 단계들 1 및 3에서 전송된 메시지들을, 가상 어드레스 및 실제 스태싱된 데이터 둘 모두를 제공하는 단일 요청으로 조합할 수 있어서, 스태싱된 데이터를 제공하는 제2 요청을 전송할 필요성이 존재하지 않는데, 그 이유는, 소비자가 스태싱된 데이터를 수락하지 않으면, 단일 요청이 물리적 어드레스로의 가상 어드레스의 변환 둘 모두를 트리거하고, 이어서 데이터로 하여금 캐시에 스태싱되게 하거나 메모리에 기입되게 할 수 있기 때문이다.
어느 방식으로든, 도 10의 단계(260)에서 가상 스태싱을 지원하기 위한 이러한 접근법은 라우터가 다수의 생성자들 및 소비자들 사이에서 공유될 때 라우터가 비교적 복잡할 수 있는 어드레스 변환을 구현할 필요성을 회피한다.
도 10으로 돌아가면, 단계(260)에서 메시지 데이터를 기입했을 때, 단계(262)에서, 선택된 채널 소비자 정보 엔트리의 카운트 필드(96)는 다른 메시지가 타깃 메시지 채널에 푸시되었다는 것을 반영하도록 업데이트된다. 예를 들어, 도 8에 도시된 접근법에서, 카운트 필드는 감분될 수 있으며, 또한 가상 어드레스 베이스(95)는 하나의 메시지의 크기만큼 증분될 수 있거나, 또는 대안적으로, 도 8에 도시되지 않은 별개의 필드는 이전에 수신된 메시지들의 카운트를 표현하도록 증분되어, 이것이 VA 베이스(95)에 대한 오프셋으로서 사용되게 허용할 수 있다.
단계(264)에서, 제어 회로부(52)는 선택된 채널 소비자 정보 엔트리에서 특정된 정보에 기초하여 이벤트 통지 조건이 타깃 메시지 채널에 대해 만족되는지 여부를 결정한다. 예를 들어, 제어 회로부는, 타깃 메시지 채널 상에서 제공된 메시지들의 수가 임계치에 도달했거나 임계치를 초과했다는 것을 카운트 필드(96)가 표시하는지 여부를 결정하며, 그 임계치는 소비자가 채널에 가입했을 시간에 설정된 소비자-정의된 임계치일 수 있다. 예를 들어, 도 8에 도시된 구현예에서, 카운트 필드(96)가 0에 도달할 때 이벤트 통지 조건이 만족되는 것으로 고려될 수 있다. 대안은, 선택된 채널 소비자 엔트리 정보가 이벤트 통지 조건이 만족되는 메시지들의 임계 수를 특정하는 임계치 필드를 포함할 수 있다는 것일 것이며, 임계치를 향해 위로 증분하는 카운트 필드(96)는, 카운트가 임계치와 동일하거나 임계치를 초과할 때 만족되도록 이벤트 통지 조건을 트리거할 수 있다.
어떠한 이벤트 통지 조건도 발생하지 않았다면, 임의의 이벤트 통지를 트리거할 필요성이 존재하지 않으며, 단계(266)에서, 룩업 회로부(54)는 생성자 요청이 수신되었던 동일한 타깃 메시지 채널에 가입된 다른 소비자에 대한 채널 소비자 정보가 존재하는지 여부를 결정한다. 예를 들어, 이는 단계들(256, 260, 262, 264)에서 사용되는 선택된 채널 소비자 정보의 다음 엔트리 포인터(90)에 기초하여 식별될 수 있거나, 또는 이는 다수의 히트 신호들이 콘텐츠 어드레싱가능 메모리 룩업에서 수신되었는지 여부에 기초할 수 있다. 동일한 타깃 메시지 채널에 가입한 다른 소비자에 대한 채널 소비자 정보의 다른 엔트리가 존재하면, 단계(268)에서, 그 다음 소비자에 대한 채널 소비자 정보는 선택된 채널 소비자 정보로서 처리되고, 이어서 방법은 앞서 논의된 것과 동일하게 그 다음 소비자의 엔트리를 프로세싱하도록 단계(260)로 리턴된다. 동일한 타깃 메시지 채널 상에서 다른 소비자에 대해 식별된 어떠한 추가적인 채널 소비자 정보도 존재하지 않으면, 단계(266)에 후속하여, 방법은 단계(258)로 계속되며, 여기서 성공 표시는 생성자로 리턴되고, 메시지 전달 회로부(50)는 다음 생성자 요청을 프로세싱할 준비가 된다.
단계(264)에서, 제어 회로부(52)가 선택된 채널 소비자 정보에 기초하여, 이벤트 통지 조건이 타깃 메시지 채널에 대해 만족되었다고 결정했다면, 단계(270)에서, 제어 회로부(52)는 이벤트 통지들이 이벤트 통지 채널 상에서 제공될 것이라는 것을 선택된 채널 소비자 정보가 특정하는지 여부를 결정한다. 그렇지 않으면, 이벤트 통지들은 소비자 노드에 직접 제공될 것이므로, 단계(272)에서 이벤트 통지가 소비자 노드에 전송된다. 예를 들어, 이벤트 통지 어드레스 필드(98)가 판독되고, 기입은 선택된 채널 소비자 정보에서 특정된 바와 같이 이벤트 통지 어드레스와 연관된 데이터를 업데이트하도록 발행된다. 소비자 노드가 (위의 도 8의 코드 예에서 설명된 바와 같이) WFE 모니터를 이전에 셋업했고, 이벤트 통지 어드레스에 대한 통지를 대기하고 있다면, 이는 소비자 노드로 하여금 웨이크 업되게 하거나 중단되게 할 수 있고, 이어서 그것은 적절한 메시지 채널과 연관된 정보를 판독할 수 있다. 단계(272)에서 이벤트 통지 어드레스로의 기입을 생성했을 때, 방법은 앞서 설명된 것과 동일하게 다른 소비자에 대한 채널 소비자 정보를 체크하도록 단계(266)로 계속된다. 다른 예들에서, 이벤트 통지들은 이벤트 통지 어드레스에 기입하기보다는, 소비자 노드에 인터럽트 신호를 전송함으로써 소비자 노드에 송신될 수 있다(예를 들어, 인터럽트를 전송하기 위한 소비자 노드는 노드 ID(92)에 기초하여 식별될 수 있음).
그러나, 단계(270)에서, 이벤트 통지들이 이벤트 통지 채널 상에서 제공될 것이라는 것을 선택된 채널 소비자 정보가 특정하는 것을 제어 회로부(52)가 식별하면, 단계(274)에서, 이벤트 통지 채널로서 사용될 특정 채널은 선택된 채널 소비자 정보에 기초하여, 예를 들어 도 8의 예에 도시된 바와 같이 이벤트 통지 어드레스 필드(98)로부터 이벤트 통지 채널의 엔트리 ID를 판독함으로써 식별된다. 룩업 회로부(54)는 그 특정 이벤트 통지 채널과 연관된 채널 소비자 정보의 엔트리를 룩업하고, 제어 회로부(52)는 채널 소비자 정보의 이벤트 통지 채널의 엔트리의 VA 베이스(95)에 기초하여 식별된 바와 같이, 이벤트 레지스트리 공간으로서 소비자에 의해 정의된 어드레스 공간(102)의 소비자-정의된 구역 내의 어드레스와 연관된 위치로의 이벤트 통지 데이터의 기입을 제어하기 위해 이벤트 통지 채널의 엔트리를 사용한다. 이벤트 통지 채널의 버퍼 구역(102)에 기입될 이벤트 통지 데이터(104)는 타깃 메시지 채널에 대한 선택된 채널 소비자 정보의 이벤트 통지 데이터(110)에 기초하여 식별될 수 있다. 다시, 이벤트 통지 데이터의 기입은 단계(260)에서 도 11에 대해 논의된 바와 같이 가상 캐시 스태싱 메커니즘을 사용할 수 있다.
도 10의 단계(276)에서, 이벤트 통지 채널 소비자 정보의 카운트 필드(96)는 타깃 메시지 채널에 대해 단계(262)와 유사한 방식으로 업데이트된다(그리고 선택적으로, VA 베이스(95)의 증분은 또한, 사용된 구현에 의존하여 수행될 수 있음).
단계(278)에서, 제어 회로부(52)는 타깃 메시지 채널에 대해 단계(264)에 대응하는 방식으로, 예를 들어 이벤트 통지 채널 상에서 제공된 메시지들의 수가 임계치에 도달했거나 임계치를 초과했다는 것을 이벤트 통지 채널의 소비자 정보 엔트리의 카운트 필드(96)가 표시하는지 여부에 다시 기초하여, 이벤트 통지 조건이 이벤트 통지 채널에 대해 만족되는지 여부를 결정한다. 따라서, 단계(280)에서, 이벤트 통지 조건이 이벤트 통지 채널에 대해 만족되면, 제어 회로부(52)는, 예를 들어 채널 소비자 정보의 이벤트 통지 채널의 엔트리에서 특정된 이벤트 통지 어드레스 필드(98)에서 정의된 이벤트 통지 어드레스로의 기입을 트리거함으로써 이벤트 통지 채널과 연관된 이벤트 통지를 생성한다. 대안적으로, 이벤트 통지 채널 상의 이벤트 통지는 인터럽트 신호를 소비자 노드에 전송함으로써 수행될 수 있다. 단계(278)에서 어떠한 이벤트 통지 조건도 식별되지 않았다면, 단계(280)는 생략된다.
어느 방식으로든, 단계들(274, 276, 278, 280)은 단계들(260, 262, 264, 272)에서 타깃 메시지 채널에 대해 수행되는 동작들을 미러링한다. 이는, 메시지 전달 회로부(50)의 시점으로부터, 이벤트 통지 채널이 단지 임의의 다른 메시지 채널로서만 기능하므로, 정규 데이터 메시지 채널들에 대해 이러한 동작들을 수행하기 위해 이미 제공된 회로 로직을 재사용할 수 있다는 것을 의미한다. 메시지 전달 회로부(50)는, 어떤 유형의 이벤트 통지가 사용될지를 체크하는 단계(270)를 구현하고, 단계(274)에서, 라우터(50) 이외의 생성자로부터 수신된 메시지 데이터를 푸시하는 대신에 필드(110)에서 특정된 데이터 값을 이벤트 통지 데이터로서 생성하기 위해 일부 부가적인 로직을 제공받는다.
단계(278)에서 이벤트 통지 조건이 발생했는지 여부에 관계없이, 단계(278) 또는 단계(280) 중 어느 하나에 후속하여, 방법은 이어서, 앞서 논의된 것과 동일한 타깃 메시지 채널 상의 다른 소비자들에 대한 임의의 다른 채널 소비자 정보를 다시 체크하기 위해 단계(266)로 진행한다. 단계(264)에서 이벤트 통지 조건이 하나의 소비자에 대해 발생할 수 있는 반면, 단계(264)에서 이벤트 통지 조건은 동일한 채널 상의 다른 소비자에 대해 발생하지 않을 수 있다는 것이 가능하다는 것을 유의한다. 유사하게, 주어진 소비자에게 통지들을 제공하기 위해 이벤트 통지 채널이 사용되어야 하는지 여부, 테이블(66)의 어느 특정 엔트리가 단계(274)에서 이벤트 통지 채널의 채널 소비자 정보를 획득하기 위해 판독되는지, 및 단계(278)에서 이벤트 통지 조건이 발생했는지 여부에 관한 단계(270)에서의 결과는 주어진 메시지가 그 채널 상에서 수신될 때 동일한 채널에 가입한 상이한 소비자들 사이에서 변할 수 있다.
도 9 및 도 10이 단계들 사이의 특정 순서화 또는 종속성을 예시하는 흐름도들을 도시하지만, 이는 단지 하나의 예이고, 다른 예들이 단계들을 재순서화하거나, 또는 대신에 도 9 및 도 10에 순차적으로 도시된 일부 단계들을 병렬로 수행할 수 있다는 것이 인식될 것이다.
따라서, 요약하면, 위의 예들은 다중 어드레스 모니터링을 지원하도록 소비자 자체에게 요구하지 않으면서, 주어진 소비자에 의한 다수의 큐들의 모니터링을 가능하게 하기 위해 메시지 채널 라우팅 디바이스(50)에 대한 메커니즘을 제공한다. 이는 단일 어드레스에 대한 단일 이벤트 대기 메커니즘이 메시지 채널 라우터를 사용하여 다수의 채널들 또는 소켓들을 모니터링하기 위해 사용되게 허용할 수 있다.
본 출원에서, "...하도록 구성된"이라는 단어들은 장치의 요소가 정의된 동작을 수행할 수 있는 구성을 갖는다는 것을 의미하는 데 사용된다. 이러한 문맥에서, "구성"은 하드웨어 또는 소프트웨어의 상호연결의 배열 또는 방식을 의미한다. 예를 들어, 장치는 정의된 동작을 제공하는 전용 하드웨어를 가질 수 있거나, 프로세서 또는 다른 프로세싱 디바이스가 기능을 수행하도록 프로그래밍될 수 있다. "하도록 구성된"은, 장치 요소가, 정의된 동작을 제공하기 위해 어떤 방식으로든 변경될 필요가 있음을 암시하지는 않는다.
본 발명의 예시적인 실시예들이 첨부 도면들을 참조하여 본 명세서에 상세히 설명되었지만, 본 발명은 그러한 정확한 실시예들로 제한되지 않으며, 첨부된 청구범위에 의해 정의되는 바와 같은 본 발명의 범주로부터 벗어나지 않으면서 당업자에 의해 다양한 변경들 및 수정들이 본 명세서에서 달성될 수 있다는 것이 이해될 것이다.

Claims (20)

  1. 시스템-온-칩(system-on-chip)의 노드들 사이의 메시지 전달을 위한 메시지 전달 회로부로서, 상기 메시지 전달 회로부는,
    상기 시스템-온-칩의 생성자 노드에 의해 타깃 메시지 채널 상에서 제공되는 메시지 데이터를 표시하는 생성자 요청에 응답하여, 복수의 메시지 채널들 및 상기 메시지 채널들에 가입한 상기 시스템-온-칩의 하나 이상의 소비자 노드들에 대한 채널 소비자 정보를 특정하기 위한 채널 소비자 정보 구조로부터, 상기 타깃 메시지 채널에 가입한 주어진 소비자 노드와 연관된 선택된 채널 소비자 정보를 획득하기 위한 룩업 회로부; 및
    제어 회로부를 포함하며, 상기 제어 회로부는,
    상기 선택된 채널 소비자 정보에 기초하여 결정된 어드레스 공간의 소비자-정의된 구역 내의 어드레스와 연관된 위치에 상기 생성자 요청에 의해 표시된 상기 메시지 데이터를 기입하고;
    이벤트 통지 조건이 상기 타깃 메시지 채널 및 상기 주어진 소비자 노드에 대해 만족될 때,
    상기 이벤트 통지 조건에 응답하여, 상기 타깃 메시지 채널에 대한 이벤트 통지들이 상기 주어진 소비자 노드에 제공될 때, 상기 이벤트 통지를 상기 주어진 소비자 노드에 제공하고;
    상기 타깃 메시지 채널에 대한 이벤트 통지들이 상기 복수의 메시지 채널들의 이벤트 통지 채널 상에서 제공될 때, 이벤트 통지 데이터로 하여금, 상기 이벤트 통지 채널과 연관된 이벤트 통지 채널 소비자 정보에 기초하여 결정된 어드레스 공간의 소비자-정의된 구역 내의 어드레스와 연관된 위치에 기입되게 하기 위한 것인, 메시지 전달 회로부.
  2. 제1항에 있어서,
    상기 제어 회로부 및 상기 룩업 회로부는 복수의 메시지 채널들이 동일한 이벤트 통지 채널을 공유한다는 것을 표시하는 상기 채널 소비자 정보를 지원하도록 구성되는, 메시지 전달 회로부.
  3. 제1항 또는 제2항에 있어서,
    이벤트 통지 조건이 상기 이벤트 통지 채널에 대해 만족될 때, 상기 제어 회로부는 이벤트 통지를 상기 주어진 소비자 노드에 제공하도록 구성되는, 메시지 전달 회로부.
  4. 제1항 내지 제3항 중 어느 한 항에 있어서,
    상기 제어 회로부는 상기 선택된 채널 소비자 정보에서 표시된 이벤트 통지 어드레스와 연관된 위치로의 기입을 요청하는 기입 요청을 발행함으로써 상기 이벤트 통지를 상기 주어진 소비자 노드에 제공하도록 구성되는, 메시지 전달 회로부.
  5. 제1항 내지 제4항 중 어느 한 항에 있어서,
    상기 이벤트 통지 데이터는 상기 타깃 메시지 채널에 가입한 상기 주어진 소비자 노드와 연관된 상기 선택된 채널 소비자 정보에서 특정된 소비자-정의된 값을 포함하는, 메시지 전달 회로부.
  6. 제1항 내지 제5항 중 어느 한 항에 있어서,
    상기 이벤트 통지 조건은 상기 타깃 메시지 채널 상에서 제공된 메시지들의 수가 임계치 값에 도달했거나 상기 임계치 값을 초과했다는 검출을 포함하는, 메시지 전달 회로부.
  7. 제6항에 있어서,
    상기 임계치 값은 상기 주어진 소비자 노드에 의해 특정된 소비자-정의된 임계치 값인, 메시지 전달 회로부.
  8. 제1항 내지 제7항 중 어느 한 항에 있어서,
    상기 제어 회로부 및 상기 룩업 회로부는 동일한 메시지 채널에 가입한 복수의 소비자 노드들을 지원하도록 구성되며, 상기 복수의 소비자 노드들 각각은 상기 메시지 채널에 대한 생성자 요청에 응답하여 메시지 데이터가 기입될 어드레스 공간의 개개의 소비자-정의된 구역을 특정하는 개개의 채널 소비자 정보와 연관되는, 메시지 전달 회로부.
  9. 제1항 내지 제8항 중 어느 한 항에 있어서,
    주어진 메시지 채널과 연관된 식별자를 특정하는 가입 소비자 노드로부터의 채널 가입 요청에 응답하여, 상기 제어 회로부는 상기 주어진 메시지 채널에 가입한 상기 가입 소비자 노드에 대한 채널 소비자 정보를 특정하기 위해 상기 채널 소비자 정보 구조를 업데이트하도록 구성되는, 메시지 전달 회로부.
  10. 제9항에 있어서,
    상기 채널 가입 요청은,
    상기 주어진 메시지 채널에 가입한 상기 가입 소비자 노드에 대한 상기 채널 소비자 정보에서 특정될 상기 어드레스 공간의 소비자-정의된 구역의 상기 어드레스;
    상기 주어진 메시지 채널에 가입한 상기 가입 소비자 노드에 대한 상기 채널 소비자 정보에서 특정될 소비자-정의된 이벤트 통지 조건; 및
    상기 주어진 메시지 채널에 대한 상기 가입 소비자 노드에 상기 이벤트 통지를 제공할 때 상기 제어 회로부가 기입할 이벤트 통지 어드레스
    중 적어도 하나를 특정하는, 메시지 전달 회로부.
  11. 제9항 또는 제10항에 있어서,
    상기 채널 가입 요청은 상기 가입 소비자 노드가 이벤트 통지 채널에 대한 가입을 요청하고 있는지 또는 상기 이벤트 통지 채널 이외의 메시지 채널에 대한 가입을 요청하고 있는지를 특정하는, 메시지 전달 회로부.
  12. 제9항 내지 제11항 중 어느 한 항에 있어서,
    이벤트 통지들이 상기 이벤트 통지 채널 상에서 제공될, 상기 이벤트 통지 채널 이외의 주어진 메시지 채널에 대한 가입을 상기 가입 소비자 노드가 요청하고 있다는 것을 상기 채널 가입 요청이 특정할 때, 상기 채널 가입 요청은 상기 이벤트 통지 조건이 상기 주어진 메시지 채널에 대해 만족될 때 상기 이벤트 통지 채널 상에서 상기 이벤트 통지 데이터로서 제공될 소비자-정의된 값을 특정하는, 메시지 전달 회로부.
  13. 제9항 내지 제12항 중 어느 한 항에 있어서,
    상기 채널 가입 요청은, 상기 주어진 메시지 채널에 대한 상기 가입 소비자 노드에 상기 이벤트 통지를 제공할 때 상기 제어 회로부가 기입할 이벤트 통지 어드레스를 특정하기 위한 이벤트 통지 어드레스 필드를 특정하고;
    상기 가입 소비자 노드가 상기 이벤트 통지 채널에 대한 가입을 요청하고 있다는 것을 특정하는 이벤트 채널 가입 요청의 프로세싱에 후속하여, 상기 이벤트 통지 어드레스 필드가 상기 이벤트 채널 가입 요청의 상기 이벤트 통지 어드레스 필드와 동일한 어드레스를 특정하는 상기 주어진 메시지 채널에 대한 채널 가입 요청의 수신에 응답하여, 상기 제어 회로부는, 상기 주어진 메시지 채널에 대한 이벤트 통지들이 상기 이벤트 통지 채널 상에서 제공될 것이라는 것을 표시하기 위해 상기 주어진 메시지 채널에 가입한 상기 가입 소비자 노드에 대한 상기 채널 소비자 정보를 설정하도록 구성되는, 메시지 전달 회로부.
  14. 제9항 내지 제13항 중 어느 한 항에 있어서,
    상기 채널 가입 요청은, 상기 메시지 전달 회로부와 연관된 커맨드 인터페이스에 맵핑된 어드레스를 타깃 어드레스로서 특정하는 상기 가입 소비자 노드에 의해 발행된 기입 요청을 포함하는, 메시지 전달 회로부.
  15. 제1항 내지 제14항 중 어느 한 항에 있어서,
    상기 생성자 요청은, 상기 메시지 전달 회로부와 연관된 메시지 인터페이스에 맵핑된 어드레스를 타깃 어드레스로서 특정하는 상기 생성자 노드에 의해 발행된 기입 요청을 포함하는, 메시지 전달 회로부.
  16. 제1항 내지 제15항 중 어느 한 항에 있어서,
    상기 제어 회로부가 주어진 생성자 요청에 의해 표시된 메시지를 프로세싱할 수 없을 때, 상기 제어 회로부는 상기 생성자 요청에 응답하여 실패 표시로 하여금 상기 생성자 노드로 리턴되게 하도록 구성되는, 메시지 전달 회로부.
  17. 제1항 내지 제16항 중 어느 한 항에 있어서,
    상기 제어 회로부는, 상기 메시지 데이터가 상기 주어진 소비자 노드와 연관된 캐시에 스태싱(stash)되는 것을 요청하기 위한 캐시 스태시 요청을 발행함으로써, 상기 어드레스 공간의 소비자-정의된 구역 내의 상기 어드레스와 연관된 상기 위치에 상기 생성자 요청에 의해 표시된 상기 메시지 데이터를 기입하도록 구성되는, 메시지 전달 회로부.
  18. 제17항에 있어서,
    상기 캐시 스태시 요청은 상기 어드레스 공간의 소비자-정의된 구역 내의 가상 어드레스 및 상기 주어진 소비자 노드에서 상기 가상 어드레스를 물리적 어드레스로 변환하기 위한 변환 체제를 표시하는 어드레스 공간 식별자를 특정하는, 메시지 전달 회로부.
  19. 시스템-온-칩으로서,
    복수의 노드들; 및
    상기 노드들 사이에서 메시지들을 전달하기 위한 메시지 전달 회로부를 포함하며, 상기 메시지 전달 회로부는,
    상기 시스템-온-칩의 생성자 노드에 의해 타깃 메시지 채널 상에서 제공되는 메시지 데이터를 표시하는 생성자 요청에 응답하여, 복수의 메시지 채널들 및 상기 메시지 채널들에 가입한 상기 시스템-온-칩의 하나 이상의 소비자 노드들에 대한 채널 소비자 정보를 특정하기 위한 채널 소비자 정보 구조로부터, 상기 타깃 메시지 채널에 가입한 주어진 소비자 노드와 연관된 선택된 채널 소비자 정보를 획득하기 위한 룩업 회로부; 및
    제어 회로부를 포함하며, 상기 제어 회로부는,
    상기 선택된 채널 소비자 정보에 의해 표시된 어드레스 공간의 소비자-정의된 구역 내의 어드레스와 연관된 위치에 상기 생성자 요청에 의해 표시된 상기 메시지 데이터를 기입하고;
    이벤트 통지 조건이 상기 타깃 메시지 채널 및 상기 주어진 소비자 노드에 대해 만족될 때,
    상기 이벤트 통지 조건에 응답하여, 상기 타깃 메시지 채널에 대한 이벤트 통지들이 상기 주어진 소비자 노드에 제공될 때, 상기 이벤트 통지를 상기 주어진 소비자 노드에 제공하고;
    상기 타깃 메시지 채널에 대한 이벤트 통지들이 상기 복수의 메시지 채널들의 이벤트 통지 채널 상에서 제공될 때, 이벤트 통지 데이터로 하여금, 상기 이벤트 통지 채널과 연관된 이벤트 통지 채널 소비자 정보에 기초하여 결정된 어드레스 공간의 소비자-정의된 구역 내의 어드레스와 연관된 위치에 기입되게 하기 위한 것인, 시스템-온-칩.
  20. 시스템-온-칩의 노드들 사이의 메시지 전달을 위한 방법으로서, 메시지 전달 회로부는,
    상기 시스템-온-칩의 생성자 노드에 의해 타깃 메시지 채널 상에서 제공되는 메시지 데이터를 표시하는 생성자 요청에 응답하여,
    복수의 메시지 채널들 및 상기 메시지 채널들에 가입한 상기 시스템-온-칩의 하나 이상의 소비자 노드들에 대한 채널 소비자 정보를 특정하기 위한 채널 소비자 정보 구조로부터, 상기 타깃 메시지 채널에 가입한 주어진 소비자 노드와 연관된 선택된 채널 소비자 정보를 획득하는 것;
    상기 선택된 채널 소비자 정보에 의해 표시된 어드레스 공간의 소비자-정의된 구역에 상기 생성자 요청에 의해 표시된 상기 메시지 데이터를 기입하는 것; 및
    이벤트 통지 조건이 상기 타깃 메시지 채널 및 상기 주어진 소비자 노드에 대해 만족될 때,
    상기 이벤트 통지 조건에 응답하여, 상기 타깃 메시지 채널에 대한 이벤트 통지들이 상기 주어진 소비자 노드에 제공될 때, 상기 이벤트 통지를 상기 주어진 소비자 노드에 제공하는 것; 및
    상기 타깃 메시지 채널에 대한 이벤트 통지들이 상기 복수의 메시지 채널들의 이벤트 통지 채널 상에서 제공될 때, 이벤트 통지 데이터로 하여금, 상기 이벤트 통지 채널과 연관된 이벤트 통지 채널 소비자 정보에 기초하여 결정된 어드레스 공간의 소비자-정의된 구역에 기입되게 하는 것을 포함하는, 시스템-온-칩의 노드들 사이의 메시지 전달을 위한 방법.
KR1020237037866A 2021-04-08 2022-02-14 메시지 전달 회로부 및 방법 KR20230163559A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US17/225,674 2021-04-08
US17/225,674 US11960945B2 (en) 2021-04-08 2021-04-08 Message passing circuitry and method
PCT/GB2022/050388 WO2022214777A1 (en) 2021-04-08 2022-02-14 Message passing circuitry and method

Publications (1)

Publication Number Publication Date
KR20230163559A true KR20230163559A (ko) 2023-11-30

Family

ID=80685493

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020237037866A KR20230163559A (ko) 2021-04-08 2022-02-14 메시지 전달 회로부 및 방법

Country Status (8)

Country Link
US (1) US11960945B2 (ko)
EP (1) EP4320524A1 (ko)
JP (1) JP2024513076A (ko)
KR (1) KR20230163559A (ko)
CN (1) CN117120994A (ko)
GB (1) GB2618513A (ko)
IL (1) IL305943A (ko)
WO (1) WO2022214777A1 (ko)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11297029B2 (en) * 2019-10-02 2022-04-05 Paypal, Inc. System and method for unified multi-channel messaging with block-based datastore
US20230014973A1 (en) * 2021-07-09 2023-01-19 Vmware, Inc. Large message passing between containers in a virtualized computing system
US12001722B2 (en) * 2022-08-18 2024-06-04 Arm Limited Technique for controlling stashing of data
CN116938897B (zh) * 2023-09-19 2023-12-15 好信云(北京)网络通信有限公司 一种用于会议的实时通信的方法和装置

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7899050B2 (en) 2007-09-14 2011-03-01 International Business Machines Corporation Low latency multicast for infiniband® host channel adapters
US10474575B2 (en) 2017-04-10 2019-11-12 Arm Limited Cache-based communication between execution threads of a data processing system

Also Published As

Publication number Publication date
GB202313183D0 (en) 2023-10-11
IL305943A (en) 2023-11-01
US11960945B2 (en) 2024-04-16
EP4320524A1 (en) 2024-02-14
GB2618513A (en) 2023-11-08
US20220327009A1 (en) 2022-10-13
CN117120994A (zh) 2023-11-24
WO2022214777A1 (en) 2022-10-13
JP2024513076A (ja) 2024-03-21

Similar Documents

Publication Publication Date Title
JP6944983B2 (ja) ハイブリッドメモリ管理
US11755203B2 (en) Multicore shared cache operation engine
KR20230163559A (ko) 메시지 전달 회로부 및 방법
CN107992436B (zh) 一种NVMe数据读写方法及NVMe设备
CN110865968B (zh) 多核处理装置及其内核之间数据传输方法
US7533197B2 (en) System and method for remote direct memory access without page locking by the operating system
US8234407B2 (en) Network use of virtual addresses without pinning or registration
US8892827B2 (en) Cooperative memory management
US20060206635A1 (en) DMA engine for protocol processing
US8255591B2 (en) Method and system for managing cache injection in a multiprocessor system
US20130304990A1 (en) Dynamic Control of Cache Injection Based on Write Data Type
US9405725B2 (en) Writing message to controller memory space
US20220156084A1 (en) Processor architecture with micro-threading control by hardware-accelerated kernel thread
EP3335124B1 (en) Register files for i/o packet compression
US11687364B2 (en) Methods and apparatus for cache-aware task scheduling in a symmetric multi-processing (SMP) environment
WO2008057833A2 (en) System and method for remote direct memory access without page locking by the operating system
US8719499B2 (en) Cache-line based notification
US9678795B2 (en) Direct ring 3 submission of processing jobs to adjunct processors