KR20160074390A - 공유 메모리 링크 내의 저전력 진입 - Google Patents

공유 메모리 링크 내의 저전력 진입 Download PDF

Info

Publication number
KR20160074390A
KR20160074390A KR1020150160900A KR20150160900A KR20160074390A KR 20160074390 A KR20160074390 A KR 20160074390A KR 1020150160900 A KR1020150160900 A KR 1020150160900A KR 20150160900 A KR20150160900 A KR 20150160900A KR 20160074390 A KR20160074390 A KR 20160074390A
Authority
KR
South Korea
Prior art keywords
protocol
data
link
token
memory access
Prior art date
Application number
KR1020150160900A
Other languages
English (en)
Other versions
KR101848379B1 (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 KR20160074390A publication Critical patent/KR20160074390A/ko
Application granted granted Critical
Publication of KR101848379B1 publication Critical patent/KR101848379B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/26Power supply means, e.g. regulation thereof
    • G06F1/32Means for saving power
    • G06F1/3203Power management, i.e. event-based initiation of a power-saving mode
    • G06F1/3234Power saving characterised by the action undertaken
    • G06F1/325Power saving in peripheral device
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0625Power saving in storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1605Handling requests for interconnection or transfer for access to memory bus based on arbitration
    • G06F13/1652Handling requests for interconnection or transfer for access to memory bus based on arbitration in a multiprocessor architecture
    • G06F13/1663Access to shared memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/26Power supply means, e.g. regulation thereof
    • G06F1/32Means for saving power
    • G06F1/3203Power management, i.e. event-based initiation of a power-saving mode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/26Power supply means, e.g. regulation thereof
    • G06F1/32Means for saving power
    • G06F1/3203Power management, i.e. event-based initiation of a power-saving mode
    • G06F1/3234Power saving characterised by the action undertaken
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/26Power supply means, e.g. regulation thereof
    • G06F1/32Means for saving power
    • G06F1/3203Power management, i.e. event-based initiation of a power-saving mode
    • G06F1/3234Power saving characterised by the action undertaken
    • G06F1/325Power saving in peripheral device
    • G06F1/3275Power saving in memory, e.g. RAM, cache
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1605Handling requests for interconnection or transfer for access to memory bus based on arbitration
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1605Handling requests for interconnection or transfer for access to memory bus based on arbitration
    • G06F13/161Handling requests for interconnection or transfer for access to memory bus based on arbitration with latency improvement
    • G06F13/1626Handling requests for interconnection or transfer for access to memory bus based on arbitration with latency improvement by reordering requests
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/382Information transfer, e.g. on bus using universal interface adapter
    • G06F13/385Information transfer, e.g. on bus using universal interface adapter for adaptation of a particular data processing system to different peripheral devices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Information Transfer Systems (AREA)
  • Communication Control (AREA)
  • Small-Scale Networks (AREA)
  • Multi Processors (AREA)

Abstract

메모리 액세스 링크 프로토콜에 따라 링크를 통해 공유 메모리와 연관된 로드 저장 유형 동작(load/store-type operation)에 대응하는 데이터가 발신되고 메모리 액세스 링크 프로토콜은 다른 상이한 링크 프로토콜 상에 오버레이되는 것이다. 저전력 상태에 진입하기 위한 요청이 발신되는데, 요청은 토큰의 필드 내에 인코딩된 데이터 값을 포함하는 것이되, 토큰은 패킷 데이터의 시작을 나타내는 것이고 또한 토큰 후에 발신될 후속 데이터가 다른 링크 프로토콜 및 메모리 액세스 링크 프로토콜 중 하나에 따른 데이터를 포함하는지를 나타내는 것이다.

Description

공유 메모리 링크 내의 저전력 진입{LOW POWER ENTRY IN A SHARED MEMORY LINK}
본 개시내용은 컴퓨팅 시스템에 관한 것이고, 특히 (그러나 전적으로는 아니고) 컴퓨팅 시스템 내의 컴포넌트들 간의 메모리 액세스에 관한 것이다.
반도체 처리 및 로직 설계에서의 발전은 집적 회로 디바이스 상에 존재할 수 있는 로직의 양의 증가를 가능하게 하였다. 귀결로서, 컴퓨터 시스템 구성은 시스템 내의 단일의 또는 다수의 집적 회로로부터 개별적인 집적 회로 상에 존재하는 다수의 코어, 다수의 하드웨어 쓰레드 및 다수의 논리적 프로세서는 물론 그러한 프로세서 내에 집적된 다른 인터페이스로 진화하였다. 프로세서 또는 집적 회로는 전형적으로 단일의 물리적 프로세서 다이(die)를 포함하는데, 그 프로세서 다이는 임의의 개수의 코어(core), 하드웨어 쓰레드(hardware thread), 논리적 프로세서(logical processor), 인터페이스(interface), 메모리(memory), 제어기 허브(controller hub) 등등을 포함할 수 있다.
더 많은 처리 능력을 더 작은 패키지에 적합하게 하는 더 큰 역량의 결과로서, 더 작은 컴퓨팅 디바이스는 인기가 상승하였다. 스마트폰, 태블릿, 초박형(ultrathin) 노트북, 그리고 다른 사용자 장비는 기하급수적으로 늘어났다. 그러나, 이들 더 작은 디바이스는 폼 팩터(form factor)를 초과하는 복잡한 처리 및 데이터 저장 양자 모두를 위해 서버에 의존적이다. 그래서, 고성능 컴퓨팅 시장에서의 수요(즉 서버 공간)도 증가하였다. 예를 들면, 최신식 서버에서는, 전형적으로 다수의 코어가 있는 단일 프로세서뿐만 아니라 다수의 물리적 프로세서(다수의 소켓으로도 지칭됨)가 있어 컴퓨팅 능력을 증가시킨다. 하지만 컴퓨팅 시스템 내의 디바이스의 개수와 함께 처리 능력이 늘어나므로, 소켓들과 다른 디바이스들 간의 통신은 더욱 중대하게 된다.
실제로, 상호연결은 전기적 통신을 주로 다룬 더욱 전통적인 멀티드롭 버스(multi-drop bus)로부터 고속 통신을 가능하게 하는 전면적인 상호연결 아키텍처(full blown interconnect architecture)로 성장하였다. 유감스럽게도, 훨씬 더 높은 속도로 쓸 장래의 프로세서에 대한 수요가 증가하므로 대응하는 수요가 기존의 상호연결 아키텍처의 능력에 가해진다.
도 1은 상호연결 아키텍처(interconnect architecture)를 포함하는 컴퓨팅 시스템(computing system)의 일 실시예를 보여준다.
도 2는 계층화된 스택(layered stack)을 포함하는 상호연결 아키텍처의 일 실시예를 보여준다.
도 3은 상호연결 아키텍처 내에서 생성되거나 수신될 요청(request) 또는 패킷(packet)의 일 실시예를 보여준다.
도 4는 상호연결 아키텍처를 위한 송신기 및 수신기 쌍의 일 실시예를 보여준다.
도 5는 상호연결의 예시적인 계층화된 프로토콜 스택을 보여준다.
도 6은 예시적인 노드(node)의 일 실시예의 단순화된 블록 다이어그램(block diagram)을 보여준다.
도 7은 복수의 노드를 포함하는 예시적인 시스템의 일 실시예의 단순화된 블록 다이어그램을 보여준다.
도 8은 심 로직(shim logic)을 포함하는 노드의 예시적인 로직을 보여준다.
도 9는 예시적인 공유 메모리 링크(shared memory link)에 따라 송신되는 데이터의 표현(representation)이다.
도 10은 데이터 스트림(data stream) 내에 임베딩된(embedded) 예시적인 제어 윈도우(control window)의 표현을 보여준다.
도 11a 및 도 11b는 임베드된 제어 윈도우를 활용하는 예시적인 핸드쉐이크의 흐름 다이어그램을 보여준다.
도 12는 다른 예시적인 핸드쉐이크의 표현이다.
도 13은 데이터 프레이밍 토큰(data framing token)의 예시적인 시작의 표현이다.
도 14는 저전력 링크 상태(low power link state)에 진입하기 위한 예시적인 기법을 보여주는 흐름도이다.
도 15는 다중코어 프로세서(multicore processor)를 포함하는 컴퓨팅 시스템을 위한 블록 다이어그램의 일 실시예를 보여준다.
도 16은 다중코어 프로세서를 포함하는 컴퓨팅 시스템을 위한 블록 다이어그램의 다른 실시예를 보여준다.
여러 도면 내의 동일한 참조 번호 및 명칭은 동일한 구성요소를 나타낸다.
이하의 설명에서, 본 발명의 철저한 이해를 제공하기 위해서 특정한 유형의 프로세서 및 시스템 구성, 특정한 하드웨어 구조, 특정한 아키텍처상의(architectural) 그리고 마이크로 아키텍처상(micro architectural) 세부사항, 특정한 레지스터 구성, 특정한 명령어 유형, 특정한 시스템 컴포넌트, 특정한 치수/높이, 특정한 프로세서 파이프라인 스테이지 및 동작 등등의 예들과 같은 많은 구체적인 세부사항이 개진된다. 그러나, 이들 구체적인 세부사항은 본 발명을 실시하는 데에 이용되지 않아도 됨은 당업자에게 명백할 것이다. 다른 사례에서, 특정하고 대안적인 프로세서 아키텍처, 기술된 알고리즘을 위한 특정한 로직 회로/코드, 특정한 펌웨어 코드, 특정한 상호연결 동작, 특정한 로직 구성, 특정한 제조 기법 및 재료, 특정한 컴파일러 구현, 코드 내 알고리즘의 특정한 표현, 특정한 전력 차단(power down) 및 게이팅(gating) 기법/로직, 그리고 컴퓨터 시스템의 특정한 동작상의(operational) 세부사항과 같은 잘 알려진 컴포넌트 또는 방법은 본 발명을 불필요하게 모호하게 하는 것을 방지하기 위해서 상세히 기술되지 않았다.
특정한 집적 회로에서의, 이를테면 컴퓨팅 플랫폼 또는 마이크로프로세서에서의 에너지 보존 및 에너지 효율을 참조하여 이하의 실시예들이 기술될 수 있으나, 다른 유형의 집적 회로 및 로직 디바이스에 다른 실시예들이 적용가능하다. 본 문서에 기술된 실시예의 유사한 기법 및 교시는 더 나은 에너지 효율 및 에너지 보존으로부터 이득을 얻을 수도 있는 다른 유형의 회로 또는 반도체 디바이스에 적용될 수 있다. 예를 들어, 개시된 실시예는 데스크톱 컴퓨터 시스템 또는 울트라북(Ultrabooks™)에 한정되지 않는다. 그리고 핸드헬드(handheld) 디바이스, 태블릿, 다른 박형(thin) 노트북, 시스템 온 칩(System On a Chip: SOC) 디바이스, 그리고 임베딩된 애플리케이션과 같은 다른 디바이스에서 사용될 수도 있다. 핸드헬드 디바이스의 몇몇 예는 셀룰러 전화, 인터넷 프로토콜 디바이스, 디지털 카메라, 개인용 디지털 보조기기(Personal Digital Assistant: PDA) 및 핸드헬드 PC를 포함한다. 임베딩된 애플리케이션은 전형적으로 마이크로제어기, 디지털 신호 프로세서(Digital Signal Processor: DSP), 시스템 온 칩, 네트워크 컴퓨터(NetPC), 셋톱 박스, 네트워크 허브, 광역 네트워크(Wide Area Network: WAN) 스위치, 또는 아래에 교시된 기능 및 동작을 수행할 수 있는 임의의 다른 시스템을 포함한다. 더욱이, 본 문서에 기술된 장치, 방법 및 시스템은 물리적 컴퓨팅 디바이스에 한정되는 것이 아니라, 에너지 보존 및 효율을 위한 소프트웨어 최적화에 관련될 수도 있다. 아래의 설명에서 곧 명백하게 될 바와 같이, (하드웨어에 관해서든, 펌웨어에 관해서든, 소프트웨어에 관해서든, 또는 이들의 조합에 관해서든) 본 문서에 기술된 방법, 장치 및 시스템의 실시예는 성능 고려사항과 어우러져 '녹색 기술'(green technology) 장래에 긴요하다.
컴퓨팅 시스템이 발전하고 있음에 따라, 그 안의 컴포넌트는 더 복잡해지고 있다. 결과적으로, 컴포넌트들 사이에서 커플링하고(couple) 통신하기 위한 상호연결 아키텍처도 최적의 컴포넌트 동작을 위해 대역폭 요구사항이 충족되게끔 하기 위해 복잡도가 증가하고 있다. 나아가, 상이한 시장 부문들은 그 시장의 필요에 적합할 상호연결 아키텍처의 상이한 양상들을 요구한다. 예를 들어, 서버는 더 높은 성능을 요구하나, 모바일 에코시스템(mobile ecosystem)은 때때로 전력 절감을 위해 전체적인 성능을 희생할 수 있다. 그렇지만, 최대의 전력 절감과 함께 최상의 가능한 성능을 제공하는 것은 대부분의 패브릭(fabric)들의 두드러진 목적이다. 아래에서, 다수의 상호연결이 논의되는데, 이는 본 문서에 기술된 발명의 양상으로부터 잠재적으로 이득을 얻을 것이다.
하나의 상호연결 패브릭 아키텍처는 주변 컴포넌트 상호연결 익스프레스 (Peripheral Component Interconnect (PCI) Express: PCIe) 아키텍처를 포함한다. PCIe의 주요 목적은 다수의 시장 부문(클라이언트 (데스크톱 및 모바일), 서버 (표준형(Standard) 및 기업형(Enterprise)), 그리고 임베딩된 디바이스 및 통신 디바이스)에 걸쳐서, 상이한 벤더로부터의 컴포넌트 및 디바이스가 개방형 아키텍처(open architecture)에서 상호동작할(inter-operate) 수 있게 하는 것이다. PCI 익스프레스는 광범위한 미래 컴퓨팅 및 통신 플랫폼을 위해 정의된 고성능, 범용(general purpose) I/O 상호연결이다. 몇몇 PCI 속성, 이를테면 그것의 사용 모델(usage model), 로드(load)-저장(store) 아키텍처 및 소프트웨어 인터페이스는 그것의 개정을 거쳐 유지되었던 반면, 이전의 병렬 버스 구현은 고도로 스케일가능한(scalable), 전적으로 직렬인 인터페이스에 의해 대체되었다. PCI 익스프레스의 더욱 최신의 버전은 새로운 레벨의 성능 및 특징을 내놓기 위해 점대점(point-to-point) 상호연결, 스위치 기반(Switch-based) 기술 및 패킷화된(packetized) 프로토콜에서의 발전을 이용한다. PCI 익스프레스에 의해 지원되는 고급 특징 중 몇몇 가운데에는 전력 관리(Power Management), 서비스 품질(Quality Of Service: QoS), 핫 플러그(Hot-Plug)/핫 스왑(Hot-Swap) 지원, 데이터 무결성(Data Integrity) 및 에러 핸들링(Error Handling)이 있다.
도 1을 참조하면, 컴포넌트의 세트(set)를 상호연결하는 점대점 링크로 이루어진 패브릭의 일 실시예가 예시된다. 시스템(100)은 제어기 허브(115)에 커플링된 프로세서(105) 및 시스템 메모리(110)를 포함한다. 프로세서(105)는 마이크로프로세서(microprocessor), 호스트 프로세서(host processor), 임베딩된 프로세서(embedded processor), 코프로세서(co-processor), 또는 다른 프로세서와 같은 임의의 처리 요소(processing element)를 포함한다. 프로세서(105)는 전면 버스(Front-Side Bus: FSB)(106)를 통해 제어기 허브(115)에 커플링된다. 하나의 실시예에서, FSB(106)는 아래에 기술된 바와 같이 직렬 점대점 상호연결이다. 다른 실시예에서, 링크(106)는 상이한 상호연결 표준과 부합하는(compliant) 직렬의 차동 상호연결 아키텍처(serial, differential interconnect architecture)를 포함한다.
시스템 메모리(110)는 랜덤 액세스 메모리(Random Access Memory: RAM), 비휘발성(Non-Volatile: NV) 메모리, 또는 시스템(100) 내의 디바이스에 의해 액세스가능한 다른 메모리와 같은 임의의 메모리 디바이스를 포함한다. 시스템 메모리(110)는 메모리 인터페이스(116)를 통해 제어기 허브(115)에 커플링된다. 메모리 인터페이스의 예는 더블 데이터 레이트(Double-Data Rate: DDR) 메모리 인터페이스, 이중 채널(dual-channel) DDR 메모리 인터페이스 및 동적 RAM(Dynamic RAM: DRAM) 메모리 인터페이스를 포함한다.
하나의 실시예에서, 제어기 허브(115)는 주변 컴포넌트 상호연결 익스프레스(Peripheral Component Interconnect Express: PCIe 또는 PCIE) 상호연결 계층구조(hierarchy) 내의 루트 허브(root hub), 루트 콤플렉스(root complex) 또는 루트 제어기(root controller)이다. 제어기 허브(115)의 예는 칩셋(chipset), 메모리 제어기 허브(Memory Controller Hub: MCH), 노스브리지(northbridge), 상호연결 제어기 허브(Interconnect Controller Hub: ICH) 사우스브리지(southbridge) 및 루트 제어기/허브를 포함한다. 흔히 칩셋이라는 용어는 두 개의 물리적으로 별개인 제어기 허브, 즉 상호연결 제어기 허브(Interconnect Controller Hub: ICH)에 커플링된 메모리 제어기 허브(Memory Controller Hub: MCH)를 나타낸다. 현재의 시스템은 프로세서(105)와 집적된 MCH를 흔히 포함하나, 제어기(115)는 아래에 기술된 것과 유사한 방식으로 I/O 디바이스와 통신할 것임에 유의하시오. 몇몇 실시예에서, 점대점 라우팅(routing)은 루트 콤플렉스(115)를 통해 선택적으로 지원된다.
여기서, 제어기 허브(115)는 직렬 링크(serial link)(119)를 통해 스위치(switch)/브리지(bridge)(120)에 커플링된다. 인터페이스/포트(117 및 121)로도 지칭될 수 있는 입력/출력 모듈(117 및 121)은 제어기 허브(115) 및 스위치(120) 간 통신을 제공하기 위한 계층화된 프로토콜 스택(layered protocol stack)을 포함/구현한다. 하나의 실시예에서, 다수의 디바이스가 스위치(120)에 커플링되는 것이 가능하다.
스위치/브리지(120)는 패킷/메시지를 디바이스(125)로부터 업스트림으로(upstream)(즉 루트 콤플렉스를 향해 계층구조 위로) 제어기 허브(115)에 그리고 다운스트림으로(downstream)(즉 루트 제어기로부터 떠나 계층구조 아래로) 프로세서(105) 또는 시스템 메모리(110)로부터 디바이스(125)로 라우팅한다. 스위치(120)는 하나의 실시예에서 다수의 가상 PCI 대 PCI 브리지 디바이스(virtual PCI-to-PCI bridge device)들의 논리적 어셈블리(logical assembly)로 지칭된다. 디바이스(125)는 I/O 디바이스, 네트워크 인터페이스 제어기(Network Interface Controller: NIC), 부속 카드(add-in card), 오디오 프로세서, 네트워크 프로세서, 하드 드라이브, 저장 디바이스, CD/DVD ROM, 모니터, 프린터, 마우스, 키보드, 라우터(router), 휴대가능(portable) 저장 디바이스, 파이어와이어(Firewire) 디바이스, 범용 직렬 버스(Universal Serial Bus: USB) 디바이스, 스캐너(scanner) 및 다른 입력/출력 디바이스와 같은 전자 시스템(electronic system)에 커플링될 임의의 내부 또는 외부 디바이스 또는 컴포넌트를 포함한다. 흔히 PCIe에서 디바이스와 같은 통칭은 종단점(endpoint)으로 지칭된다. 구체적으로 도시되지 않지만, 디바이스(125)는 레거시(legacy) 또는 다른 버전의 PCI 디바이스를 지원하기 위한 PCIe 대 PCI/PCI-X 브리지를 포함할 수 있다. PCIe에서의 종단점 디바이스는 흔히 레거시, PCIe, 또는 루트 콤플렉스 통합(root complex integrated) 종단점들로 분류된다.
그래픽 가속기(graphics accelerator)(130)는 또한 직렬 링크(132)를 통해 제어기 허브(115)에 커플링된다. 하나의 실시예에서, 그래픽 가속기(130)는 ICH에 커플링된 MCH에 커플링된다. 그리고 스위치(120)와, 이에 따라 I/O 디바이스(125)는 ICH에 커플링된다. I/O 모듈(131 및 118)은 그래픽 가속기(130) 및 제어기 허브(115) 간에 통신하기 위한 계층화된 프로토콜 스택을 또한 구현하는 것이다. 위의 MCH 논의와 유사하게, 그래픽 제어기 또는 그래픽 가속기(130) 그 자체는 프로세서(105) 내에 집적될 수 있다.
도 2로 넘어가면 계층화된 프로토콜 스택의 일 실시예가 예시된다. 계층화된 프로토콜 스택(200)은 퀵 패쓰 상호연결(Quick Path Interconnect: QPI) 스택, PCie 스택, 차세대 고성능 컴퓨팅 상호연결 스택, 또는 다른 계층화된 스택과 같은 임의의 형태의 계층화된 통신 스택을 포함한다. 도 1 내지 도 4와 관련한 바로 아래의 논의는 PCIe 스택에 관한 것이나, 동일한 개념이 다른 상호연결 스택에 적용될 수 있다. 하나의 실시예에서, 프로토콜 스택(200)은 트랜잭션 계층(transaction layer)(205), 링크 계층(link layer)(210) 및 물리 계층(physical layer)(220)을 포함하는 PCIe 프로토콜 스택이다. 도 1의 인터페이스(117, 118, 121, 122, 126 및 131)와 같은 인터페이스는 통신 프로토콜 스택(200)으로서 표현될 수 있다. 통신 프로토콜 스택으로서의 표현은 프로토콜 스택을 구현하는/포함하는 모듈 또는 인터페이스로서 지칭될 수도 있다.
PCI 익스프레스는 컴포넌트들 간에 정보를 통신하기 위해 패킷을 사용한다. 패킷은 송신 컴포넌트(transmitting component)로부터 수신 컴포넌트(receiving component)로 정보를 전달하도록 트랜잭션 계층(205) 및 데이터 링크 계층(210)에서 형성된다. 송신되는 패킷이 다른 계층을 거쳐 흐르므로, 그것은 패킷을 그 계층들에서 다루기 위해 필요한 추가적인 정보로써 확장된다. 수신 측에서 반대의 프로세스가 일어나고 패킷은 그것의 물리 계층(220) 표현으로부터 데이터 링크 계층(210) 표현으로 그리고 최종적으로는 (트랜잭션 계층 패킷(Transaction Layer Packet)을 위해) 수신 디바이스의 트랜잭션 계층(205)에 의해 처리될 수 있는 형태로 변환된다.
트랜잭션 계층
하나의 실시예에서, 트랜잭션 계층(205)은 이를테면 데이터 링크 계층(210) 및 물리 계층(220)와 같은, 디바이스의 처리 코어 및 상호연결 아키텍처 간의 인터페이스를 제공하는 것이다. 이와 관련하여, 트랜잭션 계층(205)의 주요 책임은 패킷(즉, 트랜잭션 계층 패킷(transaction layer packet) 또는 TLP)의 조립(assembly) 및 분해(disassembly)이다. 트랜잭션 계층(205)은 전형적으로는 TLP를 위한 크레딧 기반 흐름 제어(credit-base flow control)를 관리한다. PCIe는 분할된 트랜잭션(split transaction)들, 즉 요청 및 응답이 시간에 의해 분리된 트랜잭션들을 구현하여, 타겟 디바이스(target device)가 응답을 위해 데이터를 수집하는 동안 링크로 하여금 다른 트래픽을 전달하도록 한다.
추가로 PCIe는 크레딧 기반 흐름 제어를 활용한다. 이 방안에서, 디바이스는 트랜잭션 계층(205) 내의 수신 버퍼 각각을 위한 크레딧의 초기 양을 알린다(advertise). 도 1의 제어기 허브(105)와 같은, 링크의 반대쪽에서의 외부 디바이스는 각 TLP에 의해 소모되는 크레딧의 개수를 센다(count). 트랜잭션은 만약 그 트랜잭션이 크레딧 한도(credit limit)를 초과하지 않는 경우 송신될 수 있다. 응답을 수신할 때에 크레딧의 양이 회복된다. 크레딧 한도에 봉착되지(encountered) 않는다면 크레딧 복귀(credit return)의 지연(latency)은 성능에 영향을 미치지 않는다는 것이 크레딧 방안의 이점이다.
하나의 실시예에서, 네 개의 트랜잭션 주소 공간은 구성 주소 공간(configuration address space), 메모리 주소 공간(memory address space), 입력/출력 주소 공간(input/output address space) 및 메시지 주소 공간(message address space)을 포함한다. 메모리 공간 트랜잭션은 메모리 맵핑된 위치(memory-mapped location)로/로부터 데이터를 전송하기 위한 판독(read) 요청 및 기입(write) 요청 중 하나 이상을 포함한다. 하나의 실시예에서, 메모리 공간 트랜잭션은 두 개의 상이한 주소 포맷, 가령 32 비트 주소와 같은 짧은 주소 포맷, 또는 64 비트 주소와 같은 긴 주소 포맷을 사용하는 것이 가능하다. 구성 공간 트랜잭션은 PCIe 디바이스의 구성 공간을 액세스하는 데에 사용된다. 구성 공간으로의 트랜잭션은 판독 요청 및 기입 요청을 포함한다. 메시지 공간 트랜잭션(또는 단순히 메시지)은 PCIe 에이전트들 간의 대역내(in-band) 통신을 지원하도록 정의된다.
따라서, 하나의 실시예에서, 트랜잭션 계층(205)은 패킷 헤더(header)/페이로드(payload)(206)를 조립한다(assemble). 현재의 패킷 헤더/페이로드를 위한 포맷은 PCIe 사양 웹사이트에서의 PCIe 사양에서 찾아볼 수 있다.
도 3을 곧 참조하면, PCIe 트랜잭션 서술자(descriptor)의 일 실시예가 예시된다. 하나의 실시예에서, 트랜잭션 서술자(300)는 트랜잭션 정보를 전달하기 위한 메커니즘이다. 이와 관련하여, 트랜잭션 서술자(300)는 시스템 내의 트랜잭션의 식별(identification)을 지원한다. 다른 잠재적인 용례는 디폴트 트랜잭션 순서화(default transaction ordering)의 수정 및 채널과의 트랜잭션의 연관을 추적하는 것을 포함한다.
트랜잭션 서술자(300)는 전역 식별자 필드(global identifier field)(302), 속성 필드(attributes field)(304) 및 채널 식별자 필드(channel identifier field)(306)를 포함한다. 보여진 예에서, 전역 식별자 필드(302)는 로컬 트랜잭션 식별자 필드(local transaction identifier field)(308) 및 소스 식별자 필드(source identifier field)(310)를 포함하는 것으로 묘사된다. 하나의 실시예에서, 전역 트랜잭션 식별자(302)는 모든 미결(outstanding) 요청에 대해 특유하다(unique).
하나의 구현에 따르면, 로컬 트랜잭션 식별자 필드(308)는 요청 에이전트(requesting agent)에 의해 생성되는 필드이고, 그것은 해당 요청 에이전트를 위해 완료를 요하는 모든 미결 요청에 대해 특유하다. 나아가, 이 예에서, 소스 식별자(310)는 PCIe 계층구조 내의 요청자 에이전트(requestor agent)를 특유하게 식별한다. 이에 따라, 소스 ID(310)와 더불어, 로컬 트랜잭션 식별자(308) 필드는 계층구조 도메인(hierarchy domain) 내의 트랜잭션의 전역적인 식별(global identification)을 제공한다.
속성 필드(304)는 트랜잭션의 특성 및 관계를 명시한다. 이와 관련하여, 잠재적으로 속성 필드(304)는 트랜잭션의 디폴트 취급의 수정을 가능하게 하는 추가적인 정보를 제공하는 데에 사용된다. 하나의 실시예에서, 속성 필드(304)는 우선순위 필드(priority field)(312), 예비된 필드(reserved field)(314), 순서화 필드(ordering field)(316) 및 스누프 없음 필드(no-snoop field)(318)를 포함한다. 여기서, 우선순위 서브필드(312)는 트랜잭션에 우선순위를 할당하기 위해 개시자(initiator)에 의해 수정될 수 있다. 예비된 속성 필드(314)는 장래 또는 벤더 정의(vendor-defined) 용법을 위해 예비된 것으로 남겨져 있다. 우선순위 또는 보안 속성을 사용하는 가능한 사용 모델은 예비된 속성 필드를 사용하여 구현될 수 있다.
이 예에서, 순서화 속성 필드(316)는 디폴트 순서화 규칙을 수정할 수 있는 유형의 순서화를 전하는 선택적인 정보를 공급하는 데에 사용된다. 하나의 예시적 구현에 따르면, "0"이라는 순서화 속성은 디폴트 순서화 규칙이 적용될 것임을 표시하되, "1"이라는 순서화 속성은 완화된 순서화(relaxed ordering)를 표시하는데, 기입은 동일한 방향으로 기입을 전해줄 수 있고, 판독 완료는 기입을 동일한 방향으로 전해줄 수 있다. 스누프 속성 필드(318)는 트랜잭션이 스누핑되는지(snooped) 판정하기 위해 활용된다. 도시된 바와 같이, 채널 ID 필드(306)는 트랜잭션이 연관된 채널을 식별한다.
링크 계층
데이터 링크 계층(210)으로도 지칭되는 링크 계층(210)은 트랜잭션 계층(205) 및 물리 계층(220) 간의 중간 스테이지(intermediate stage)로서 작용한다. 하나의 실시예에서, 데이터 링크 계층(210)의 책임은 링크당 두 컴포넌트 사이에서 트랜잭션 계층 패킷(Transaction Layer Packet)을 교환하기 위한 신뢰성 있는 메커니즘을 제공하는 것이다. 데이터 링크 계층(210)의 일측은 트랜잭션 계층(205)에 의해 조립된 TLP를 받고, 패킷 시퀀스 식별자(packet sequence identifier)(211), 즉 식별 번호 또는 패킷 번호를 적용하며, 에러 검출 코드(error detection code), 즉 CRC(212)를 계산하고 적용하며, 물리 계층을 가로질러 외부 디바이스로 송신하는 것을 위해 물리 계층(220)에 수정된 TLP를 제시한다.
물리 계층
하나의 실시예에서, 물리 계층(220)은 논리적 서브 블록(221) 및 전기적 서브 블록(222)을 포함하여 패킷을 외부 디바이스에 물리적으로 송신한다. 여기서, 논리적 서브 블록(221)은 물리 계층(221)의 "디지털" 기능에 대해 책임이 있다. 이와 관련하여, 논리적 서브 블록은 물리적 서브 블록(222)에 의한 송신을 위한 송출 정보(outgoing information)를 준비하는 송신부(transmit section)와, 수신된 정보를 링크 계층(210)에 전해주기 전에 그것을 식별하고 준비하는 수신부(receiver section)를 포함한다.
물리적 블록(222)은 송신기 및 수신기를 포함한다. 송신기는 논리적 서브 블록(221)에 의해 심볼(symbol)들을 공급받는데, 이는 송신기가 직렬화하여(serialize) 외부 디바이스 상으로 송신한다. 수신기는 직렬화된 심볼을 외부 디바이스로부터 공급받고 수신된 신호를 비트스트림(bit-stream)으로 변환한다. 비트스트림은 역직렬화되어(de-serialized) 논리적 서브 블록(221)에 공급된다. 하나의 실시예에서, 8b/10b 송신 코드가 이용되는데, 여기서는 10 비트 심볼이 송신/수신된다. 여기서, 프레임(223)으로써 패킷을 프레이밍하기(frame) 위해 특수한 심볼이 사용된다. 추가로, 하나의 예에서, 수신기는 또한 유입 직렬 스트림(incoming serial stream)으로부터 복구되는 심볼 클록(symbol clock)을 제공한다.
앞서 언급된 바와 같이, 트랜잭션 계층(205), 링크 계층(210) 및 물리 계층(220)이 PCIe 프로토콜 스택의 특정 실시예와 관련하여 논의되나, 계층화된 프로토콜 스택은 그와 같이 한정되지 않는다. 사실, 임의의 계층화된 프로토콜이 포함/구현될 수 있다. 예로서, 계층화된 프로토콜로서 표현되는 포트/인터페이스는 (1) 패킷을 조립하는 제1 계층, 즉 트랜잭션 계층과, 패킷을 시퀀싱하는(sequence) 제2 계층, 즉 링크 계층과, 패킷을 송신하는 제3 계층, 즉 물리 계층을 포함한다. 특정 예로서, 공통 표준 인터페이스(Common Standard Interface: CSI) 계층화된 프로토콜이 활용된다.
다음으로 도 4를 참조하면, PCIe 직렬 점대점 패브릭의 일 실시예가 예시된다. PCIe 직렬 점대점 링크의 일 실시예가 예시되나, 직렬 점대점 링크는 그와 같이 한정되지 않는데, 이는 그것이 직렬 데이터를 송신하기 위한 임의의 송신 경로(transmission path)를 포함하기 때문이다. 도시된 실시예에서, 기본적인 PCIe 링크는 두 개의, 저전압의, 차동적으로 구동되는 신호 쌍들을 포함한다: 송신 쌍(transmit pair)(406/411) 및 수신 쌍(receive pair)(412/407). 이에 따라, 디바이스(405)는 디바이스(410)에 데이터를 송신하는 송신 로직(transmission logic)(406) 및 디바이스(410)로부터 데이터를 수신하는 수신 로직(receiving logic)(407)을 포함한다. 다시 말해, 두 개의 송신 경로, 즉 경로(416 및 417), 그리고 두 개의 수신 경로, 즉 경로(418 및 419)는 PCIe 링크에 포함된다.
송신 경로는 송신 라인(transmission line), 구리 라인(copper line), 광학 라인(optical line), 무선 통신 채널(wireless communication channel), 적외선 통신 링크(infrared communication link), 또는 다른 통신 경로와 같은, 데이터를 송신하기 위한 임의의 경로를 나타낸다. 두 개의 디바이스(이를테면 디바이스(405) 및 디바이스(410)) 간의 연결은 링크(이를테면 링크(415))로 지칭된다. 링크는 하나의 레인(lane)을 지원할 수 있는데 - 각 레인은 차동 신호 쌍의 세트를 나타낸다(송신을 위한 하나의 쌍, 수신을 위한 하나의 쌍). 대역폭을 스케일하기(scale) 위하여, 링크는 xN으로 표시되는 다수의 레인을 집성할(aggregate) 수 있는데, 여기서 N은 임의의 지원되는 링크 폭, 이를테면 1, 2, 4, 8, 12, 16, 32, 64 또는 더 넓은 것이다.
차동 쌍은 차동적 신호를 송신하기 위한 두 개의 송신 경로, 이를테면 라인(416 및 417)을 나타낸다. 예로서, 라인(416)이 낮은 전압 레벨(voltage level)로부터 높은 전압 레벨로 토글(toggle)하는 경우(즉 상승단(rising edge)), 라인(417)은 높은 로직 레벨(logic level)로부터 낮은 로직 레벨로 구동된다(즉 하강단(falling edge)). 잠재적으로 차동 신호는 더 나은 전기적 특성, 이를테면 더 나은 신호 무결성(signal integrity), 즉 상호 커플링(cross-coupling), 전압 오버슛(overshoot)/언더슛(undershoot), 링잉(ringing) 등등을 드러낸다. 이것은 더 나은 타이밍 윈도우(timing window)를 가능케 하는데, 이는 더 빠른 송신 주파수를 가능하게 한다.
PCIe를 포함하여, 기존의 상호연결 및 통신 아키텍처의 물리 계층은 시스템 내의 공유 메모리 및 I/O 서비스를 제공하기 위해 쓰일(leveraged) 수 있다. 종래에, 캐싱가능한 메모리(cacheable memory)는 전통적인 로드/저장(LD/ST) 메모리 시맨틱스(semantics)를 사용하여 독립적인 시스템들 간에 공유될 수 없다. 독립적인 시스템 또는 "노드"는 그것이 단일의 논리적 개체(entity)로서 기능하고/하거나, 단일의 운영 체제(operating system)(그리고/또는 단일의 BIOS 또는 가상 머신 모니터(Virtual Machine Monitor: VMM))에 의해 제어되고/되거나, 독립적인 결함 도메인(fault domain)을 가진다는 의미에서 독립적일 수 있다. 단일 노드는 하나 또는 다수의 프로세서 디바이스를 포함하고, 단일 보드 또는 다수의 보드 상에 구현되며, 동일한 노드 상의 디바이스에 의해 LD/ST 시맨틱스를 사용하여 액세스될 수 있는 캐싱가능한 메모리를 포함하는 로컬 메모리를 포함할 수 있다. 노드 내에서, 공유 메모리는 노드 내의 여러 상이한 프로세서(가령, 중앙 처리 유닛(Central Processing Unit: CPU))들에 의해 액세스될 수 있는, 랜덤 액세스 메모리(Random Access Memory: RAM)와 같은 메모리의 하나 이상의 블록을 포함할 수 있다. 공유 메모리는 노드 내의 프로세서 또는 다른 디바이스의 로컬 메모리를 또한 포함할 수 있다. 공유 메모리를 가지는 노드 내의 다수의 디바이스는 공유 메모리 내의 데이터의 단일 뷰(view)를 공유할 수 있다. 공유 메모리를 수반하는 I/O 통신은 지연이 매우 적고 다수의 프로세서에 의한 메모리로의 신속한 액세스를 가능하게 할 수 있다.
종래에, 상이한 노드들 간의 메모리 공유는 로드/저장 패러다임에 따른 메모리 공유를 허용하지 않았다. 예를 들면, 몇몇 시스템에서, 상이한 노드들 간의 메모리 공유는 분산 메모리 아키텍처를 통해 가능하게 되었다. 전통적인 해결책에서, 계산상의 작업(computational task)들은 로컬 데이터에 대해 동작하고, 만약 다른 노드의 데이터가 요망되는 경우, (가령, 다른 CPU 노드에 의해 실행되는) 계산상의 작업은, 예를 들면 이더넷(Ethernet), 인피니밴드(InfiniBand), 또는 다른 계층화된 프로토콜과 같은 통신 프로토콜 스택을 활용하는 통신 채널 상에서, 그 다른 노드와 통신한다. 전통적인 다중노드(multi-node) 시스템에서, 상이한 노드들의 프로세서들은 데이터가 어디에 있는지를 알 필요는 없다. 전통적인 접근법을 사용하여, 이를테면 프로토콜 스택 상에서, 데이터를 공유하는 것은 로드/저장 패러다임을 사용하는 노드 내 메모리 공유보다 상당히 더 큰 지연을 가질 수 있다. 공유 메모리 내의 데이터에 대해 직접적으로 주소지정(addressing)하고 동작하는 것보다는, 이더넷(또는 인피니밴드)와 같은 기존의 프로토콜 핸드쉐이크(handshake)를 사용하여 하나의 노드는 다른 노드로부터 데이터를 요청할 수 있고, 소스 노드는 데이터를 제공할 수 있는바, 다른 예들보다도 요청 노드(requesting node)가 데이터를 저장하고 이에 대해 동작할 수 있다.
몇몇 구현에서, 로드/저장(LD/ST) 메모리 시맨틱스를 사용하여 배타적이거나 공유된 액세스를 위해 독립적인 노드들 간에 메모리가 공유되게 하는 공유 메모리 아키텍처(shared memory architecture)가 제공될 수 있다. 하나의 예에서, (PCIe와 같은 프로토콜을 위한) I/O 시맨틱스와 함께 메모리 시맨틱스(그리고 만약 적용가능하다면 디렉토리 정보(directory information))는 공통 세트의 핀(a common set of pins) 상에든 별개 세트의 핀(a separate set of pins) 상에든 이출될(exported) 수 있다. 그러한 시스템에서, 개선된 공유 메모리 아키텍처는 시스템 내의 복수의 노드 각각이 자신의 독립적인 결함 도메인(그리고 로컬 메모리)을 유지하게 하되, 그 노드들에 의한 액세스를 위한 공유 메모리 풀(shared memory pool) 및 LD/ST 시맨틱스에 따라 메모리를 사용하여 노드들 사이에서 오가는 저지연(low-latency) 메시지를 가능하게 할 수 있다. 몇몇 구현에서, 그러한 공유 메모리 풀은 상이한 노드들 간에 동적으로 (또는 정적으로) 배분될 수 있다. 이에 따라, 시스템의 다양한 노드를, 예컨대 수요가 생길 때, 공유 메모리 인프라스트럭처(shared memory infrastructure)를 이용하는 다양한 작업들에 대해 협력적으로 및 융통성 있게 운용되는 노드들의 동적으로 변하는 그룹으로 구성할 수도 있다.
하나의 실시예에서, 상호연결은 프로세서, 가속기, 컴퓨팅 블록, I/O 디바이스 및 유사한 것을 연결하기 위한, 워크스테이션 또는 서버와 같은 고성능 컴퓨팅 플랫폼 내에 제공될 수 있다. 상호연결 아키텍처는 프로토콜 계층(일관적(coherent), 비일관적(non-coherent), 그리고 선택적으로는, 다른 메모리 기반 프로토콜), 라우팅 계층, 링크 계층 및 물리 계층과 같은 정의된 계층을 포함하도록 계층화될 수 있다. 도 5는 상호연결의 예시적인 계층화된 프로토콜 스택의 일 실시예를 보여준다. 몇몇 구현에서, 도 5에 예시된 계층 중 적어도 몇몇은 선택적일 수 있다. 각 계층은 자신의 레벨의 입자단위(granularity) 또는 양자단위(quantum)의 정보를 다룬다(프로토콜 계층(505a,b)은 패킷(530)으로써, 링크 계층(510a,b)은 플릿(flit)(535)으로써, 그리고 물리 계층(505a,b)은 핏(phit)(540)으로써). 패킷은 몇몇 실시예에서 구현에 기반하여 부분적인 플릿, 단일 플릿 또는 다수의 플릿을 포함할 수 있음에 유의하시오.
제1 예로서, 핏(540)의 폭은 비트로의 링크 폭의 1 대 1 맵핑을 포함한다(가령 20 비트 링크 폭은 20 비트의 핏을 포함함 등등). 플릿은 184, 192 또는 200 비트와 같은 더 큰 크기를 가질 수 있다. 만약 핏(540)이 20 비트 폭이고 플릿(535)의 크기가 184 비트인 경우 하나의 플릿(535)을 송신하는 데에는 분수(fractional number)의 핏(540)이 필요함에 유의하시오(다른 예들보다도, 가령 20 비트로 184 비트 플릿(535)을 송신하는 데에 9.2 핏 또는 20 비트로 192 비트 플릿을 송신하는 데에 9.6). 물리 계층에서의 기본적 링크의 폭은 달라질 수 있음에 유의하시오. 예를 들어, 방향당 레인의 수는 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24 등등을 포함할 수 있다. 하나의 실시예에서, 링크 계층(510a,b)은 상이한 트랜잭션들의 다수의 부분을 단일 플릿 내에 임베딩하는 것이 가능하고, 하나 또는 다수의 헤더(가령, 1, 2, 3, 4)가 그 플릿 내에 임베딩될 수 있다. 하나의 예에서, 헤더는 상이한 노드들로 향하게 된(destined) 플릿 내의 다수의 메시지를 가능하게 하기 위해 대응하는 슬롯으로 분할될 수 있다.
물리 계층(505a,b)은 하나의 실시예에서 물리적 매체(전기적 또는 광학적 등등) 상의 정보의 빠른 전송을 책임질 수 있다. 물리적 링크는 계층(505a 및 505b)과 같은 두 개의 링크 계층 개체 간에 점대점일 수 있다. 링크 계층(510a,b)은 더 상위의 계층으로부터 물리 계층(505a,b)을 추상화할(abstract) 수 있고 (요청뿐만 아니라) 데이터를 신뢰성 있게 전송하고 두 개의 직접적으로 연결된 개체 간의 흐름 제어를 관리하는 능력을 제공한다. 링크 계층은 또한 물리적 채널을 다수의 가상 채널 및 메시지 클래스로 가상화하는 것(virtualizing)에 책임이 있을 수 있다. 프로토콜 계층(520a,b)은 프로토콜 메시지들을 적절한 메시지 클래스들 및 가상 채널들로, 물리적 링크를 가로지르는 전송을 위해 물리 계층(505a,b)으로 그것들을 넘기기 전에 맵핑하기 위해 링크 계층(510a,b)에 의존한다. 링크 계층(510a,b)은 다른 예들보다도 요청, 스누프(snoop), 응답, 답신(writeback), 비일관적 데이터와 같은 다수의 메시지를 지원할 수 있다.
물리 계층(505a,b)(또는 PHY)은 도 5에 예시된 바와 같이 링크 계층(510a,b) 아래에 그리고 전기적 계층(즉 두 컴포넌트를 연결하는 전기적 도체) 위에 구현되도록 정의될 수 있다. 물리 계층 및 대응하는 로직은 각 에이전트 위에 있을 수 있고 서로 분리된 두 개의 에이전트(A 및 B) 상의 (가령 링크의 양쪽 각각 위의 디바이스들 상의) 링크 계층들을 연결한다. 로컬 전기적 계층 및 원격 전기적 계층은 물리적 매체(가령 배선, 도체, 광학식 등등)에 의해 연결된다. 물리 계층(505a,b)은 하나의 실시예에서 두 개의 주된 단계인 초기화 및 동작을 가진다. 초기화 중에, 연결은 링크 계층에 대해 불투명하고(opaque) 시그널링(signaling)은 타이밍된(timed) 상태 및 핸드쉐이크 이벤트의 조합을 수반할 수 있다. 동작 중에, 연결은 링크 계층에 대해 투명하고(transparent) 시그널링은 모든 레인이 함께 단일 링크로서 동작하는 어떤 속도(speed)로 된다. 동작 단계 중에, 물리 계층은 에이전트 A로부터 에이전트 B로 그리고 에이전트 B로부터 에이전트 A로 플릿을 보낸다. 연결은 또한 링크로 지칭되고 현재 구성(가령 폭)의 제어/상태 및 플릿을 링크 계층과 교환하면서 링크 계층으로부터 매체, 폭 및 속도를 포함하는 몇몇 물리적 양상을 추상화한다. 초기화 단계는 부차적 단계, 가령 폴링(Polling), 구성(Configuration)을 포함한다. 동작 단계는 또한 부차적 단계(가령 링크 전력 관리 상태)를 포함한다.
하나의 실시예에서, 링크 계층(510a,b)은 두 개의 프로토콜 또는 라우팅 개체들 간의 신뢰성 있는 데이터 전송을 제공하도록 구현될 수 있다. 링크 계층은 프로토콜 계층(520a,b)으로부터 물리 계층(505a,b)을 추상화할 수 있으며, 두 프로토콜 에이전트(A, B) 간의 흐름 제어를 책임지고 가상 채널 서비스를 프로토콜 계층(메시지 클래스) 및 라우팅 계층(가상 네트워크)에 제공할 수 있다. 프로토콜 계층(520a,b) 및 링크 계층(510a,b) 간의 인터페이스는 전형적으로 패킷 레벨일 수 있다. 하나의 실시예에서, 링크 계층에서의 최소 전송 단위는 지정된 개수의 비트, 이를테면 192 비트 또는 어떤 다른 단위명(denomination)인 플릿으로 지칭된다. 링크 계층(510a,b)은 물리 계층(505a,b)의 전송 단위(핏)을 링크 계층(510a,b)의 전송 단위(플릿)으로 프레이밍하기 위해 물리 계층(505a,b)에 의존한다. 추가로, 링크 계층(510a,b)은 논리적으로 두 부분(발신자 및 수신자)으로 나뉠 수 있다. 하나의 개체 상의 발신자/수신자 쌍은 다른 개체 상의 수신자/발신자 쌍에 연결될 수 있다. 흐름 제어는 흔히 플릿과 패킷 양자 모두를 기준으로 수행된다. 잠재적으로 에러 검출 및 정정은 또한 플릿 레벨 기준으로 수행된다.
하나의 실시예에서, 라우팅 계층(515a,b)은 소스(source)로부터 목적지(destination)로 트랜잭션을 라우팅하는 융통성 있고 분산된 방법을 제공한다. 그 방안은 다수의 토폴로지(topology)들을 위한 라우팅 알고리즘이 각 라우터에서 프로그램가능한(programmable) 라우팅 테이블을 통해서 지정될 수 있으므로 융통성이 있다(하나의 실시예에서 그 프로그래밍은 펌웨어, 소프트웨어, 또는 이들의 조합에 의해 수행됨). 라우팅 기능은 분산될 수 있으니, 라우팅은 일련의 라우팅 단계를 통해 행해질 수 있는데, 각 라우팅 단계는 소스, 중간, 또는 목적지 라우터들 어느 것에서든 테이블의 검색(lookup)을 통해 정의된다. 소스에서의 검색은 패킷을 패브릭 내에 주입하기 위해 사용될 수 있다. 중간 라우터에서의 검색은 패킷을 입력 포트로부터 출력 포트로 라우팅하기 위해 사용될 수 있다. 목적지 포트에서의 검색은 목적지 프로토콜 에이전트를 목표로 삼기(target) 위해 사용될 수 있다. 라우팅 테이블과, 따라서 라우팅 알고리즘이 지정에 의해 구체적으로 정의되지 아니하므로, 라우팅 계층은 몇몇 구현에서 박형(thin)일 수 있음에 유의하시오. 이것은 시스템 구현에 의해 정의될 융통성 있는 플랫폼 아키텍처상의 토폴로지를 포함하여 다양한 사용 모델 및 융통성을 가능케 한다. 라우팅 계층(515a,b)은 최대 세 개(또는 그 이상)의 가상 네트워크(Virtual Network: VN) - 하나의 예에서는, 여러 메시지 클래스가 각 가상 네트워크 내에 정의된 두 개의 교착상태 없는(deadlock-free) VN들인 VN0 및 VN1 - 의 사용을 제공하기 위해 링크 계층(510a,b)에 의존한다. 공유된 적응적 가상 네트워크(Adaptive Virtual Network: VNA)가 링크 계층 내에 정의될 수 있으나, 이 적응적 네트워크는 라우팅 개념 내에 직접적으로 드러나게 되지 않을 수 있으니, 각 메시지 클래스 및 가상 네트워크가 다른 특징들 및 예들보다도 전용 리소스 및 보장된 발송 진행(guaranteed forward progress)을 가질 수 있기 때문이다.
하나의 실시예에서, 상호연결 아키텍처는 메모리로부터 데이터의 라인을 캐싱하는(caching) 에이전트를 지원하기 위한 일관성 프로토콜 계층(Coherence Protocol layer)(520a,b)을 포함할 수 있다. 메모리 데이터를 캐싱하기를 바라는 에이전트는 그것의 캐시(cache) 내에 로드할 데이터의 라인을 판독하기 위해 일관성 프로토콜(coherence protocol)을 사용할 수 있다. 자신의 캐시 내의 데이터의 라인을 수정하기를 바라는 에이전트는 데이터를 수정하기 전에 그 라인의 소유권(ownership)을 얻기 위해 일관성 프로토콜을 사용할 수 있다. 라인을 수정한 후, 에이전트는 그 라인을 도로 메모리에 기입하거나 아니면 외부의 요청에 응답하여 그 라인을 포함할 때까지 그것을 자신의 캐시 내에 유지하는 프로토콜 요구사항을 따를 수 있다. 마지막으로, 에이전트는 그것의 캐시 내의 라인을 무효화하기(invalidate) 위한 외부의 요청을 충족시킬 수 있다. 프로토콜은 모든 캐싱 에이전트가 따를 수 있는 규칙을 지시함(dictating)으로써 데이터의 일관성을 보장한다. 그것은 또한 캐시 없이 에이전트가 메모리 데이터를 일관적으로 판독하고 기입하는 수단을 제공한다.
예시적 일관성 프로토콜을 활용하는 트랜잭션을 지원하기 위해 두 가지 조건이 시행될 수 있다. 첫째, 프로토콜은 일례로서 주소별로, 에이전트들의 캐시들 내의 데이터 사이에서 그리고 그런 데이터 및 메모리 내의 데이터 간에 데이터 일관성을 유지할 수 있다. 비격식적으로, 데이터 일관성은 데이터의 가장 최신의 값을 나타내는 에이전트의 캐시 내의 데이터의 각각의 유효한 라인을 나타낼 수 있고 일관성 프로토콜 패킷 내에서 송신되는 데이터는 그것이 발신되었을 때에 데이터의 가장 최신의 값을 나타낼 수 있다. 데이터의 어떠한 유효한 사본(copy)도 캐시 내에 또는 송신 내에 존재하지 않는 경우, 프로토콜은 데이터의 가장 최신의 값이 메모리 내에 있음을 보장할 수 있다. 둘째, 프로토콜은 요청을 위한 명확히 정의된 책무 사항(well-defined commitment point)들을 제공할 수 있다. 판독을 위한 책무 사항은 언제 데이터가 가용한지를 나타낼 수 있고, 기입에 대해서 그것은 기입된 데이터가 전역적으로 관측가능하고 후속 판독에 의해 로드될 때를 나타낼 수 있다. 프로토콜은 일관적 메모리 공간에서 캐싱가능한 요청 및 캐싱가능하지 않은(uncacheable: UC) 요청 양자 모두를 위해 이들 책무사항을 지원할 수 있다.
몇몇 구현에서, 상호연결은 임베딩된 클록(embedded clock)을 활용할 수 있다. 클록 신호는 상호연결을 사용하여 송신되는 데이터 내에 임베딩될 수 있다. 클록 신호가 데이터 내에 임베딩되면, 별개이고 전용인 클록 레인들이 제외될 수 있다. 이것은, 예컨대 그것이 디바이스의 더 많은 핀으로 하여금 데이터 전송에 전용이게 할 수 있으므로, 특히 핀을 위한 공간이 구하기 힘든 시스템에서 유용할 수 있다.
링크는 상호연결의 양쪽 각각 상의 두 에이전트 간에 수립될(established) 수 있다. 데이터를 발신하는 에이전트는 로컬 에이전트일 수 있고 데이터를 수신하는 에이전트는 원격 에이전트일 수 있다. 링크의 다양한 양상을 관리하기 위해 양 에이전트 모두에 의해 상태 머신(state machine)들이 이용될 수 있다. 하나의 실시예에서, 물리 계층 데이터 경로는 링크 계층으로부터 전기적 전단부(electrical front-end)로 플릿을 송신할 수 있다. 제어 경로는 하나의 구현에서 상태 머신(링크 훈련 상태 머신(link training state machine) 또는 유사한 것으로도 지칭됨)을 포함한다. 상태 머신의 행동(action) 및 상태로부터의 빠져나가기(exit)는 내부 신호, 타이머, 외부 신호 또는 다른 정보에 달려 있을 수 있다. 사실, 상태들 중 몇몇, 이를테면 몇 개의 초기화 상태는 상태를 빠져나가기 위한 타임아웃(timeout) 값을 제공하는 타이머를 가질 수 있다. 검출은 몇몇 실시예에서, 반드시 동시는 아니지만 레인의 양 구간(leg)들 상의 이벤트를 검출하는 것을 나타냄에 유의하시오.
상태 머신 내에 정의된 상태는 다른 카테고리들 및 서브카테고리들보다도 재설정(reset) 상태, 초기화 상태 및 동작상의 상태를 포함할 수 있다. 행동 및 빠져나가기는 하나의 실시예에서 훈련 시퀀스의 교환에 기반할 수 있다. 하나의 실시예에서, 링크 상태 머신은 로컬 에이전트 클록 도메인에서 작동되는 것이고 하나의 상태로부터 다음 상태로의 전이(transition)는 송신기 훈련 시퀀스 경계와 동시에 일어나는(coincide) 것이다. 상태 레지스터는 현재의 상태를 반영하기 위해 활용될 수 있다. 예로서, 상태는 가령 다음을 포함할 수 있다:
송신 링크 상태(Transmitting Link State): 링크 상태. 플릿은 원격 에이전트로 발신된다. 상태에는 차단 링크 상태(blocking link state)로부터 진입될 수 있고 그것은 타임아웃과 같은 이벤트 시에 차단 링크 상태로 복귀할 수 있다. 송신 링크 상태(Transmitting Link State: TLS) 중에 송신기는 플릿을 송신하고 수신기는 플릿을 수신한다. TLS로부터 저전력 링크 상태(low power link state)로 빠져나갈 수도 있다. 몇몇 구현에서, TLS는 "L0" 상태로 지칭될 수 있다.
차단 링크 상태(Blocking Link State): 링크 상태. 송신기 및 수신기는 통일된 방식으로 동작하고 있다. 물리 계층 정보는 원격 에이전트에 통신되나 링크 계층 플릿은 보류되는 중인 타이밍된 상태일 수 있다. 저전력 링크 상태(또는 설계에 기반하여 다른 링크 상태)로 빠져나갈 수 있다. 차단 링크 상태(Blocking Link State: BLS)는 하나의 실시예에서 주기적으로 발생할 수 있다. 주기는 BLS 간격(interval)으로 지칭될 수 있고 타이밍될 수 있으며, 느린 속도 및 동작상의 속도 사이에서 상이할 수 있다. 어떤 길이의 물리 계층 제어 시퀀스가 이를테면 송신 링크 상태 또는 부분적 폭 송신 링크 상태(partial width transmitting link state) 중에 발신될 수 있도록 링크 계층은 플릿을 발신하는 것이 주기적으로 차단될 수 있음에 유의하시오. 몇몇 구현에서, 차단 링크 상태(Blocking Link State: BLS)는 L0 제어 또는 "L0c" 상태로 지칭될 수 있다.
부분적 폭 송신 링크 상태(Partial Width Transmitting Link State): 전력 절감 링크 상태. 하나의 실시예에서 비대칭적인 부분적인 폭은 몇몇 설계에서 지원될 수 있는, 상이한 폭을 가지는 양방향 링크(two direction link)의 각 방향을 나타낸다. 부분적인 폭의 상태에서 속도가 바뀌지 않을 수 있으나, 링크의 레인의 폭은 그럴 수 있다. 따라서, 플릿은 잠재적으로는 상이한 폭으로 발신된다. 부분적 폭 상태는 다른 링크 상태(이를테면 어떤 수신 및 발신 메시지들 또는 부분적 폭 송신 링크 상태의 빠져나가기에 기반하여 저전력 링크 상태 또는 다른 이벤트에 기반하여 링크 차단 상태)로 빠져나갈 수 있다. 하나의 실시예에서, 송신기 포트는 더 나은 신호 무결성(즉 잡음 완화)을 제공하기 위해 시차를 두는 방식으로(in a staggered manner) 유휴(idle) 레인을 끌 수 있다. 링크 폭이 변하고 있는 기간 중에 널(Null) 플릿과 같은 재시도가능하지 않은(non-retry-able) 플릿이 활용될 수 있다. 대응하는 수신기는 이들 널 플릿을 빠뜨리고(drop) 유휴 레인을 시차를 두는 방식으로 끌 뿐만 아니라, 현재 및 이전의 레인 맵을 하나 이상의 구조에 기록할 수 있다. 상태 및 연관된 상태 레지스터가 바뀌지 않고 남아 있을 수 있음에 유의하시오. 몇몇 구현에서, 부분적 폭 송신 링크 상태는 부분적 L0 또는 L0p 상태로 지칭될 수 있다.
부분적 폭 송신 링크 빠져나가기 상태(Exit Partial Width Transmitting Link State): 부분적 폭 상태를 빠져나간다. 몇몇 구현에서 차단 링크 상태를 사용할 수 있거나 사용하지 않을 수 있다. 송신기는, 하나의 실시예에서, 유휴 레인 상에 부분적 폭 빠져나가기 패턴(partial width exit pattern)들을 발신하여 그것들을 훈련시키고 디스큐잉하는(deskew) 것에 의해, 빠져나가기를 개시한다. 하나의 예로서, 빠져나가기 패턴은 레인이 완전 송신 링크 상태(full transmitting link state)로의 진입을 시작할 준비가 되었음을 시그널링하기 위해 검출되고 디바운싱되는(debounced) EIEOS로 시작하며, 유휴 레인 상의 SDS 또는 고속 훈련 시퀀스(Fast Training Sequence: FTS)로 종료할 수 있다. 빠져나가기 시퀀스 동안의 임의의 장애(타임아웃 전에 완료되지 않은 디스큐잉과 같은 수신기 행동)는 링크 계층으로의 플릿 전송을 중단시키고 재설정을 어서트하는데(assert), 이는 다음 차단 링크 상태 발생 시에 링크를 재설정함으로써 다루어진다. SDS는 레인 상의 스크램블러(scrambler)/디스크램블러(descrambler)를 적절한 값으로 초기화할 수도 있다.
저전력 링크 상태(Low Power Link State): 저전력 상태이다. 하나의 실시예에서, 이 실시예에서의 시그널링이 모든 레인 상에서 그리고 양 방향 모두에서 중단되므로, 그것은 부분적 폭 링크 상태보다 더 낮은 전력이다. 송신기는 저전력 링크 상태를 요청하기 위해 차단 링크 상태를 사용할 수 있다. 여기서, 수신기는 요청을 디코딩하고 ACK 또는 NAK로써 응답할 수 있거나, 그렇지 않으면 재설정이 트리거될(triggered) 수 있다. 몇몇 구현에서, 저전력 링크 상태는 L1 상태로 지칭될 수 있다.
도 6으로 넘어가면, 복수의 독립적인 노드(610a 내지 610n) 각각에 의해 로드/저장 기법을 사용하여 액세스되는 것이 가능한 공유 메모리(605)를 포함하는 예시적 시스템을 보여주는 단순화된 블록 다이어그램(600)이 도시된다. 예를 들면, 시스템 상의 다양한 노드(610a 내지 610n)의 로드/저장 액세스 요청을 받을 수 있는 공유 메모리 제어기(615)가 제공될 수 있다. 공유 메모리(605)는 동기식 동적 랜덤 액세스 메모리(Synchronous Dynamic Random Access Memory: SDRAM), 듀얼 인라인 메모리 모듈(Dual In-line Memory Modules: DIMM) 및 다른 비휘발성 메모리(또는 휘발성 메모리)를 활용하여 구현될 수 있다.
각 노드는 그 자신이 하나 또는 다수의 CPU 소켓을 가질 수 있고 시스템 내의 다른 노드에 의한 LD/ST 액세스로부터 격리된 채 있는 로컬 메모리를 포함할 수도 있다. 노드는 다른 예들보다도 PCIe, QPI, 이더넷을 포함하는 하나 이상의 프로토콜을 사용하여 시스템 상의 다른 디바이스(가령, 공유 메모리 제어기(615), 네트워킹 제어기(620), 다른 노드 등등)와 통신할 수 있다. 몇몇 구현에서, 공유 메모리 링크(Shared Memory Link: SML) 프로토콜(이를 통해 저지연 LD/ST 메모리 시맨틱스가 지원될 수 있음)이 제공될 수 있다. 예를 들면, SML은 시스템의 다양한 노드(610a 내지 610n)에 의해 (공유 메모리 제어기(615)를 통해) 공유 메모리(605)의 판독 및 기입을 통신하는 데에서 사용될 수 있다. 몇몇 구현에서, SML은 도 5의 예와 관련하여 기술된 상호연결 아키텍처 및 프로토콜의 양상을 채택할 수 있다.
하나의 예에서, SML은 스케일가능 메모리 상호연결(Scalable Memory Interconnect: SMI) 3세대(SMI3)와 같은 메모리 액세스 프로토콜에 기반할 수 있다. 다른 메모리 액세스 프로토콜, 이를테면 다른 예들보다도 FD-DIMM(Fully Buffered DIMM), DDR-T(DDR Transactional)과 같은 트랜잭션상의 메모리 액세스 프로토콜(transactional memory access protocol)들이 대안적으로 사용될 수 있다. 다른 사례에서, SML은 추가적인 디렉토리 확장과 함께 고유의(native) PCIe 메모리 판독/기입 시맨틱스에 기반할 수 있다. SML의 메모리 프로토콜 기반 구현은 캐시 라인 메모리 액세스에 맞춰지는(tailored) 것으로 인한 대역폭 효율 이점을 줄 수 있다. PCIe와 같은 고성능 디바이스간 통신 프로토콜이 존재하나, 그러한 프로토콜의 더 상위의 계층(가령, 트랜잭션 및 링크 계층들)은 공유 메모리(605)를 수반하는 트랜잭션을 포함하는 LD/ST 메모리 트랜잭션에서의 사용을 위한 전 프로토콜의 적용을 열화시키는(degrade) 지연을 도입할 수 있다. SMI3와 같은 메모리 링크 프로토콜은 그것이 PCIe와 같은 다른 프로토콜 스택의 대부분을 건너뛸(bypass) 수 있기 때문에 더 적은 지연의 액세스를 제공하는 잠재적인 추가적 이점을 허용할 수 있다. 이에 따라, SML의 구현은 다른 프로토콜의 논리적 및 물리적 PHY 상에서 작동되는 SMI3 또는 다른 메모리 프로토콜, 이를테면 PCIe 상의 SMI3을 활용할 수 있다.
지적된 바와 같이, 몇몇 구현에서, 시스템 내의 노드(610a 내지 610n)의 로드/저장 요청을 취급하기 위한 로직을 포함하는 공유 메모리 제어기(Shared Memory Controller: SMC)(615)가 제공될 수 있다. 로드/저장 요청은 SML을 활용하고 노드(610a 내지 610n)를 SMC(615)에 연결하는 링크 상에서 SMC(615)에 의해 수신될 수 있다. 몇몇 구현에서 SMC(615)는 공유 메모리 리소스를 위한 노드(610a 내지 610n)의 액세스 요청을 서비스하기(servicing) 위한 로직을 포함하는, 애플리케이션 특정 집적 회로(Application-Speific Integrated Circuit: ASIC)와 같은 디바이스로서 구현될 수 있다. 다른 사례에서, (공유 메모리(605)뿐만 아니라) SMC(615)는 노드(610a 내지 610n) 중 하나 이상(또는 심지어 전부라도)과 별개인 디바이스, 칩 또는 보드 상에 있을 수 있다. SMC(615)는 공유 메모리(605)를 수반하는 다양한 노드의 트랜잭션을 조정하는(coordinate) 로직을 더 포함할 수 있다. 추가적으로, SMC는 공유 메모리(605)에 포함된, 각 캐시 라인과 같은 다양한 데이터 리소스로의 액세스를 추적하는 디렉토리를 유지할 수 있다. 예를 들면, 데이터 리소스는 다른 잠재적인 예들보다도 공유 액세스 상태(shared access state)(가령, 노드 내의 다수의 처리 및/또는 I/O 디바이스에 의해 동시에 액세스(가령 로드 또는 판독)되는 것이 가능함), 배타적 액세스 상태(exclusive access state)(가령, (가령, 저장 또는 기입 동작을 위해) 노드 내의 단일의 처리 및/또는 I/O 디바이스에 의해, 일시적이지 않으면, 배타적으로 예비됨), 캐싱되지 않은 상태(uncached state) 내에 있을 수 있다. 또한, 각 노드는 공유 메모리(605)의 하나 이상의 부분에 대한 직접적인 액세스를 가질 수 있으나, 동일한 공유 메모리 데이터가 제1 주소 값에 따라 제1 노드에 의해 (가령, 명령어 내에서) 참조되고 제2 주소 값에 따라 동일한 데이터를 제2 노드가 참조하게 되는 것을 초래하는 상이한 주소지정 방안들 및 값들이 다양한 노드(가령, 610a 내지 610n)에 의해 이용될 수 있다. SMC(615)는 SMC(615)로 하여금 다양한 노드의 다양한 액세스 요청을 해석하게 하는 로직(노드의 주소를 공유 메모리 리소스로 맵핑하는 데이터 구조를 포함함)을 포함할 수 있다.
추가적으로, 몇몇 경우에, 노드(610a 내지 610n)의 일부분만이 대응하는 데이터를 액세스하게 (가령, SMC(615)에 의해) 되도록 공유 메모리의 어떤 부분(가령, 몇몇 파티션, 메모리 블록, 레코드, 파일 등등)은 어떤 허가, 규칙 및 할당의 대상이 될 수 있다. 실제로, 각각의 공유 메모리 리소스는 시스템의 노드들(610a 내지 610n)의 각자의 (그리고 몇몇 경우에는 상이한) 서브세트에 할당될 수 있다. 이 할당은 동적일 수 있고 SMC(615)는 그러한 규칙 및 허가를 (가령 주문식으로(on-demand), 동적으로, 등등) 수정하여 공유 메모리(605)의 주어진 부분에 적용가능한 새로운 또는 변경된 규칙, 허가, 노드 할당 및 소유권에 부응할 수 있다.
예로서 SMC(615)는 또한 하나 이상의 공유 메모리 리소스를 액세스하는 시스템 내의 노드(가령, 610a 내지 610n)를 수반하는 다양한 트랜잭션을 추적할 수 있다. 예를 들면, SMC(615)는 다른 트랜잭션 정보보다도, 트랜잭션에 수반된 노드(들)의 식별, 트랜잭션의 진행(가령, 그것이 완료되었는지)을 포함하여, 각 공유 메모리(605) 트랜잭션을 위한 정보를 추적할 수 있다. 이것은 전통적인 분산 메모리 아키텍처의 트랜잭션 지향(transaction-oriented) 양상 중 몇몇이 본 문서에 기술된 개선된 다중노드 공유 메모리 아키텍처에 적용되게 할 수 있다. 추가적으로, (가령, SMC에 의한) 트랜잭션 추적은 각각의 노드의 별개이고 독립적인 결함 도메인을 유지하거나 시행하는 데에 도움이 되도록 사용될 수 있다. 예를 들면, SMC는 각각의 진행 중인 트랜잭션을 위한 대응하는 노드 ID를 그것의 내부 데이터 구조 내(메모리 내를 포함함)에 유지하고, 액세스 권한을 시행하고 각 노드를 위한 개별적인 결함 도메인을 유지하기 위해 해당 정보를 사용할 수 있다. 이에 따라, 노드들 중 하나가 (가령, 중대한 에러, 트리거된 복구 시퀀스, 또는 다른 결함 또는 이벤트로 인해) 정지하는 경우, 오직 해당 노드 및 공유 메모리(605)를 수반하는 그것의 트랜잭션이 중단되는데(interrupted)(가령, SMC에 의해 덤프됨(dumped)) - 공유 메모리(605)를 수반하는 나머지 노드의 트랜잭션은 그 다른 노드 내의 결함과 무관하게 계속된다.
시스템은 다수의 노드를 포함할 수 있다. 추가적으로, 몇몇 예시적 시스템은 다수의 SMC를 포함할 수 있다. 몇몇 경우에, 노드는 그것이 직접적으로 부착되지 않은 원격 SMC(즉 노드의 로컬 SMC는 하나 또는 다수의 SML 링크 홉을 통해 원격 SMC에 연결됨)에게서 공유 메모리를 액세스할 수 있다. 원격 SMC는 동일한 보드 내에 있을 수 있거나 상이한 보드 내에 있을 수 있다. 몇몇 경우에, 노드 중 몇몇은 오프 시스템(off-system)(가령, 오프 보드(off board) 또는 오프 칩(off chip))이나 그럼에도 불구하고 공유 메모리(605)를 액세스할 수 있다. 예를 들면, 하나 이상의 오프 시스템 노드는 다른 예들보다도 SML 부합 링크(SML-compliant link)를 사용하여 SMC에 직접적으로 연결될 수 있다. 추가적으로, 자신의 SMC 및 공유 메모리를 포함하는 다른 시스템은 예컨대 SML 링크를 통해서 SMC에 연결된 다른 SMC와 인터페이스하는 다른 보드 상에 포함된 노드로 메모리(605)의 공유를 확장하기 위해 SMC(610)와 연결될 수도 있다. 또한, 다른 오프 보드 또는 오프 칩 노드로의 액세스를 더 확장하기 위해 네트워크 연결을 통해 터널링될(tunneled) 수 있다. 예를 들면, SML은 도 6의 예시적 시스템을 다른 시스템(또한 하나 이상의 다른 노드를 포함하고 이 노드로 하여금 다른 예들보다도 SMC(615)와 이로써 공유 메모리(605)에 대한 액세스를 또한 얻게 할 수 있음)과 통신가능하게(communicatively) 커플링하는 이더넷 연결(가령, 네트워크 제어기(620)를 통해 제공됨) 상에서 터널링할 수 있다.
다른 예로서, 도 7의 단순화된 블록 다이어그램(700)에 도시된 바와 같이, LD/ST 메모리 시맨틱에 따라 다수의 독립적인 노드에 의한 공유 액세스를 허용하는 개선된 공유 메모리 아키텍처는 갖가지 상이한 다중노드 시스템 설계의 제공을 융통성 있게 가능케 할 수 있다. 다수의 노드의 다양한 조합은 예시적 시스템 내에 제공된 하나 이상의 공유 메모리 블록(shared memory block)의 부분을 공유하도록 할당될 수 있다. 예를 들면, 도 7의 예에 도시된 다른 예시적 시스템은 가령 별개의 다이, 보드, 칩 등등으로서 구현된 다수의 디바이스(705, 710, 715, 720)를 포함할 수 있는데, 각 디바이스는 하나 이상의 독립적인 CPU 노드(가령, 610a 내지 610h)를 포함한다. 각 노드는 자신의 로컬 메모리를 포함할 수 있다. 다수의 디바이스(705, 710, 715, 720) 중 하나 이상은 시스템의 노드(610a 내지 610h) 중 둘 이상에 의해 액세스될 수 있는 공유 메모리를 더 포함할 수 있다.
도 7에 예시된 시스템은 본 문서에 도시되고 기술된 바와 같은 개선된 공유 메모리 아키텍처를 통해 실현될 수 있는 가변성 중 일부를 예시하기 위해 제공되는 예이다. 예를 들면, 디바이스 A(705) 및 디바이스 C(715) 각각은 각자의 공유 메모리 요소(shared memory element)(가령, 605a, 605b)를 포함할 수 있다. 이에 따라, 몇몇 구현에서, 별개 디바이스 상의 각 공유 메모리 요소는 각자의 공유 메모리 제어기(Shared Memory Controller: SMC)(615a, 615b)를 더 포함할 수 있다. 노드(610a 내지 610h)의 다양한 조합은 노드로 하여금 대응하는 공유 메모리(가령, 605a, 605b)를 액세스하게 하는 각 SMC(가령, 615a, 615b)에 통신가능하게 커플링될 수 있다. 예로서, 디바이스 A(705)의 SMC(615a)는 SML을 지원하는 직접적인 데이터 링크(direct data link)를 사용하여 디바이스 A 상의 노드(610a, 610b)에 연결될 수 있다. 추가적으로, 다른 디바이스(가령, 디바이스 C(715)) 상의 다른 노드(610c)는 노드(610c)(및/또는 그것의 디바이스(715))로부터 SMC(615a)로의 (SML을 지원하는) 직접적인 고정배선 연결(direct, hardwired connection)에 의해서 공유 메모리(605a)에 대한 액세스를 가질 수도 있다. 원격 또는 오프 보드 디바이스(가령, 디바이스 D(720))의 노드(가령, 610f 내지 610h)로 하여금 SMC(615a)와 인터페이스하여 또한 공유 메모리(605a)로의 액세스를 가지기 위해 종래의 프로토콜 스택을 활용하게 하기 위해 간접적인, 네트워크 기반의, 또는 다른 그러한 연결이 사용될 수도 있다. 예를 들면, SML 터널(725)이 디바이스 A 및 디바이스 D를 커플링하는 이더넷, 인피니밴드, 또는 다른 연결 상에 수립될 수 있다. 터널을 수립하고 유지하는 것은 소프트웨어로 관리가 덜 되는(less-software-managed) 다른 물리적 연결 상에서 작동되는 SML에 비해 어떤 추가적인 오버헤드(overhead) 및 지연을 도입할 수 있으나, SML 터널(725)은 수립되는 경우 다른 SML 채널로서 동작하고 노드(610f 내지 610h)로 하여금 SML 링크 상에서 SMC와 통신하는 임의의 다른 노드가 할 수 있다시피 SML 상에서 SMC(615a)와 인터페이스하고 공유 메모리(605a)를 액세스하게 할 수 있다. 예를 들면, SML 채널 내의 패킷의 신뢰성 및 순서화는 시스템 내의 네트워킹 컴포넌트에 의해 시행될 수 있거나 아니면 그것은 SMC들 간에 단대단으로(end-to-end) 시행될 수 있다.
또 다른 예에서, 공유 메모리(가령, 605a)의 특정한 부분을 호스팅하는 것과는 상이한 디바이스 상의 노드(가령, 615d, 615e)는 대응하는 SMC(가령, SMC 615a)에 (가령, SML 링크를 사용하여) 그 자체가 커플링된 다른 SMC(가령, 615b)에 직접적으로 연결함으로써 대응하는 SMC(가령, SMC 615a)에 간접적으로 연결될 수 있다. 둘 이상의 SMC(가령, 615a, 615b)를 링크시키는 것(linking)은 시스템 상의 노드(610a 내지 610h)가 이용가능한 공유 메모리의 양을 효과적으로 확대할 수 있다. 예를 들면, 도 7의 예의 SMC들(615a, 615b) 간의 링크에 의해서, 몇몇 구현에서는, SMC(615a)를 통해 공유 메모리(605a)를 액세스하는 것이 가능한 노드(가령, 610a 내지 610c, 610f 내지 610h) 중 임의의 것이 잠재적으로는 SMC(615a) 및 SMC(615b) 간의 연결에 의해서 공유가능 메모리(605b)를 액세스할 수도 있다. 마찬가지로, 몇몇 구현에서, SMC(615b)를 직접적으로 액세스하는 노드 각각은 다른 잠재적인 예들보다도 SMC들(615a, 615b) 간의 연결에 의해서 공유가능 메모리(605a)를 액세스할 수도 있다.
앞서 지적된 바와 같이, 개선된 공유 메모리 아키텍처는 SMI3와 같은 메모리 액세스 프로토콜에 기반하고 공유 메모리를 수반하는 로드/저장 요청을 가능하게 하기 위해 제공되는 저지연 링크 프로토콜(즉, SML)을 포함할 수 있다. 전통적인 SMI3 및 다른 메모리 액세스 프로토콜이 단일 노드 내의 메모리 공유에서의 사용을 위해 구성될 수 있는 반면, SML은 다수의 노드 간의 메모리 공유를 허용하기 위해 메모리 액세스 시맨틱스를 다수의 노드로 확장할 수 있다. 또한, SML은 잠재적으로는 임의의 물리적 통신 링크 상에서 활용될 수 있다. SML은 별개 디바이스들(그리고 노드들)을 상호연결하도록 적응된 물리 계층(그리고 대응하는 물리 계층 로직) 상에 오버레이되는(overlaid) LD/ST 메모리 시맨틱스를 지원하는 메모리 액세스 프로토콜을 활용할 수 있다. 추가적으로, SML의 물리 계층 로직은 다른 특징들보다도 패킷 누락 없음 및 에러 재시도 기능을 제공할 수 있다.
몇몇 구현에서, SML은 SMI3을 PCIe PHY 상에 오버레이함(overlaying)으로써 구현될 수 있다. 흐름 제어 및 다른 특징을 앞서가서(forego) 전통적인 CPU 메모리 액세스 아키텍처에서는 특징적일 것과 같은 더 적은 지연의 메모리 액세스를 가능하게 하기 위해 SML 링크 계층은 (가령, 전통적인 PCIe 링크 계층 대신에) 제공될 수 있다. 하나의 예에서, SML 링크 계층 로직은 공유 메모리 트랜잭션 및 다른 트랜잭션 사이에서 다중화될 수 있다. 예를 들면, SML 링크 계층 로직은 SMI3 및 PCIe 트랜잭션들 사이에서 다중화될 수 있다. 예를 들면, 링크가 SMI3 및 PCIe 트랜잭션들 사이에서 동적으로 스위칭될 수 있도록 SMI3(또는 다른 메모리 프로토콜)은 PCIe(또는 다른 상호연결 프로토콜) 상부에 오버레이될 수 있다. 이것은 전통적인 PCIe 트래픽으로 하여금 몇몇 사례에서 SML 트래픽과 동일한 링크 상에 효과적으로 공존하게 할 수 있다.
도 8의 단순화된 블록 다이어그램(800)으로 넘어가면, 예시적 컴퓨팅 노드(가령, 610)의 특징이 예시된다. 컴퓨팅 노드(610)는 SMI3(또는 다른 메모리 프로토콜)을 PCIe(가령, PCIe 3.0) 부합 전기적 물리적 링크 상에 오버레이함으로써 구현되는 예시적 SML을 사용하여 공유 메모리 제어기 칩(615)과 통신할 수 있다. 노드(610)는 메모리 액세스 프로토콜(가령, SMI3)을 위한 칼럼(column) 및 다른 상호연결 프로토콜, 이를테면 PCIe와 같은 직렬 범용 상호연결 프로토콜을 위한 다른 칼럼을 포함하는 다중칼럼 계층화된 스택(multi-column layered stack)을 포함할 수 있다. 각 칼럼은 자신의 링크 계층(가령, 805, 810)은 물론, 각자의 링크 계층(805, 810)의 상부의 다른 계층(트랜잭션, 라우팅, 프로토콜 및/또는 일관성 계층(도시되지 않음)을 포함함)을 가질 수 있다. 이 예에서, 메모리 액세스 프로토콜은 192 비트 플릿을 활용하는 링크 계층을 사용할 수 있다. 그러한 플릿은 다른 프로토콜의 PHY, 이 경우에는 고유의 128 비트 인코딩 방안(가령 128b/130b)을 활용하는 PCIe 부합 PHY 상에서 가로질러 발신될 수 있다. 이에 따라, 노드(610)의 PCIe PHY 로직은 다른 예들보다도 PCIe 논리적 PHY(815), PCIe 베니어(veneer)(820)(가령, 디지털 도메인 및 아날로그 도메인 사이에 놓여 있는 추가적인 계층), 그리고 PCIe 아날로그 전단부(Analog Front End: AFE)(825)를 포함할 수 있다.
전환 로직(conversion logic)(830)은 메모리 액세스 프로토콜에 따라 발신된 192 비트 플릿 데이터를 PCIe 물리적 링크 상의 전달을 위해 128 비트 PCIe 페이로드로 전환할 수 있다. 마찬가지로, 128 비트 페이로드는 (가령, 로직(835)을 사용하여) 도로 192 비트 플릿 데이터로 전환될 수 있다. 이 예에서, PCIe 칼럼은 256b PCIe 3.0 페이로드를 128 비트 데이터로 전환하기 위한 유사한 전환 로직(840, 845)을 포함할 수 있다. 심 회로망(shim circuitry)(850)은 링크 계층 및 PCIe 물리 계층 간의 인터페이스로서 제공될 수 있다. 심(850)은 어느 링크 계층 데이터가 물리 계층으로 발신되는지를 제어할 수 있다. 몇몇 구현에서, 심(850)은 그것이 단지 다수의 칼럼 중 단 하나(그리고 링크 계층(805, 810) 중 단 하나)를 사용하게 하도록 (가령, 노드(610)의 하드웨어 내에 퓨즈(fuse)를 설정함으로써) 선택적으로 구성될 수 있다. 예를 들면, 심(850)은 노드가 고유의 PCIe 포트(즉, PCIe 링크 계층(805)만을 활용함) 또는 SML 포트(즉, PCIe 물리 계층 상에 오버레이되고 메모리 액세스 프로토콜 링크 계층(810)만을 활용하는 메모리 액세스 프로토콜)를 구현하도록 설정될 수 있다. 다른 사례에서, 심(850)은 어느 칼럼으로부터든 데이터를 동적으로 다중화하도록 기능하여, 데이터 스트림이 PCIe 데이터 모드 및 SML 데이터 모드 사이에서 토글하게 할 수 있다.
도 9는 메모리 액세스 프로토콜을 PCIe와 같은 다른 상이한 직렬 상호연결 프로토콜 상에 오버레이하는 예를 보여준다. 도 7a의 예에서, 메모리 액세스 및 상호연결 프로토콜 트래픽 간의 전이를 시그널링하기 위해 물리 계층 프레이밍 토큰(framing token)들이 사용될 수 있다. 프레이밍 토큰(또는 "토큰")은 토큰과 연관된 데이터의 스트림에 포함될 심볼의 개수를 명시하거나 암시하는 물리 계층 데이터 캡슐화(encapsulation)일 수 있다. 그래서, 프레이밍 토큰은 스트림이 시작하고 있음을 식별할 뿐만 아니라 그것이 종료할 곳을 암시할 수 있고 따라서 다음 프레이밍 토큰의 위치를 또한 식별하는 데에 사용될 수 있다. 데이터 스트림의 프레이밍 토큰은 데이터 스트림의 첫 번째 데이터 블록의 첫 번째 레인(가령, Lane 0)의 첫 번째 심볼(Symbol 0) 내에 위치될 수 있다. 프레이밍 토큰은 트래픽을 보내는 데에 사용되는 물리 계층의 고유한 프로토콜 내에 정의된 바와 같은 기존의 심볼을 사용하여 구현될 수 있다. 예를 들면, PCIe의 예에서, TLP 트래픽 시작(Start of TLP traffic: STP) 토큰, 데이터 스트림 종료(End of Data Stream: EDS) 토큰, 부적절 종료(End Bad: EDB) 토큰, DLLP 시작(Start of DLLP: SDP) 토큰 및 논리적 유휴(Logical Idle: IDL) 토큰을 포함하는 5개의 프레이밍 토큰이 정의될 수 있다.
도 9의 예에서, SML은 SMI3 또는 다른 데이터 액세스 프로토콜을 PCI 상에 오버레이함으로써 구현될 수 있고 표준 PCIe STP 토큰은 (TLP 트래픽 대신에) SMI3가 링크의 레인들 상에서 시작되는 것임을 식별하는 새로운 STP 토큰을 정의하기 위해 재사용되고 인코딩될 수 있다. 포트가 SML에서 정적으로 기능할 경우에, STP 토큰은 트래픽이 SML임을 나타내도록 인코딩될 수 있다. PCIe 및 SML 트래픽이 링크 상에 다중화될 수 있는 경우에, STP 토큰은 다른 예들보다도 PCIe 트래픽의 버스트(burst) 및 SML 트래픽의 버스트 간의 전이를 나타낼 수 있다.
하나의 예에서, 표준 PCIe STP 토큰의 예비 비트는 SML 트래픽 시작 STP 토큰(가령, "SML 토큰")을 정의하기 위해 수정될 수 있다. 예를 들면, PCIe 페이로드의 허용된 길이와 같이, 정의된 허용된 패킷 또는 페이로드 길이의 세트가 호스트 프로토콜을 위해 정의될 수 있다. STP 토큰은 길이 필드를 포함할 수 있고 길이 필드는 PCIe(또는 물리 계층의 다른 호스트 프로토콜)를 위해 정의된 허용된 길이의 세트의 외부에 속하는 인코딩을 가능케 할 수 있다. 하나의 구현에서, 허용된 길이의 외부에 속하는 다른 정의된 값 또는 불허되는 값으로써 길이 필드를 인코딩하는 것은 STP 토큰을 SML 토큰으로서 식별하기 위해 사용될 수 있다.
도 9의 예로 돌아가면, 동적 SML/PCIe 다중화(multiplexing)가 예시되는데, SML은 PCIe PHY 프로토콜 상에서의 SMI3를 활용한다. 예를 들면, 동기화 헤더 데이터(sync header data)는 전통적인 PCIe 128b/130b 인코딩을 위해 지정된 인코딩을 따르도록 정의될 수 있다. 예를 들면, 915a 내지 915c에서, 값 10b를 갖는 동기화 헤더가 수신되는데 데이터 블록이 다가오고 있음을 나타낸다. PCIe STP(가령, 920)가 수신되는 경우, PCIe TLP 페이로드가 예상되고 이에 따라 데이터 스트림이 처리된다. PCIe STP(920) 내에 식별된 페이로드 길이에 맞추어, PCIe TLP 페이로드는 배분된 전 페이로드 길이(full payload length)를 활용할 수 있다. TLP 페이로드의 끝을 뒤따르는 데이터 블록 내에서 실질적으로 임의의 시간에 다른 STP 토큰이 수신될 수 있다. 예를 들면, 925에서, PCIe TLP 데이터로부터 SMI3 플릿 데이터로의 전이를 시그널링하는 SMI3 STP가 수신될 수 있다. 그리고 SMI3 STP는 예컨대 PCIe 패킷 데이터의 끝이 식별되자마자 발신될 수 있다.
PCIe TLP 데이터에 있어서 그러하듯이, SMI3 STP(925)는 뒤따라올 SMI3 플릿 페이로드의 길이를 정의할 수 있다. 예를 들면, SMI3 데이터의 페이로드 길이는 발신될 SMI3 플릿의 개수(또는 대응하는 DW의 개수)에 대응할 수 있다. 페이로드 길이에 대응하는 윈도우(가령, Lane 3의 Symbol 15에서 종료함)는 이로써 레인 상에 정의될 수 있는데, 여기에서는 오직 SMI3 데이터가 발신될 것이다. 윈도우가 끝나는 경우, 순서화된 세트 데이터(ordered set data)와 같은, TLP 데이터 또는 다른 데이터의 발신을 재개하기 위한 다른 PCIe STP와 같은 다른 데이터가 발신될 수 있다. 예를 들면, 도 9의 예에 도시된 바와 같이, SMI3 STP 토큰(925)에 의해 정의된 SMI3 데이터 윈도우의 끝에 후속하여 EDS 토큰이 발신된다. 도 9의 예에서 그러한 바와 같이, EDS 토큰은 데이터 스트림의 끝을 시그널링하고 순서화된 세트 블록이 뒤따를 것임을 암시할 수 있다. 순서화된 세트 블록이 발신될 것임을 나타내도록 01b로 인코딩된 동기화 헤더(940)가 발신된다. 이 경우에 PCIe SKP 순서화된 세트가 발신된다. 그러한 순서화된 세트는 주기적으로 또는 세트 간격 또는 윈도우에 따라 발신될 수 있어서, 다른 예들보다도 비트 정렬(bit alignment)을 초기화하는 것, 심볼 정렬(symbol alignment)을 초기화하는 것, PHY 파라미터를 교환하는 것, 두 개의 통신 포트를 위한 상이한 비트 레이트(bit rate)들을 보상하는 것을 포함하는 다양한 PHY 레벨 작업 및 조정이 수행될 수 있다. 몇몇 경우에, 명령된 순서화된 세트는 대응하는 SMI3 STP 토큰에 의해 SMI3 플릿 데이터에 대해 지정된 정의된 윈도우 또는 데이터 블록을 중단하기 위해 발신될 수 있다.
도 9의 예에 명시적으로 도시되지 아니하나, STP 토큰은 링크 상의 SMI3 플릿 데이터로부터 PCIe TLP 데이터로 전이하기 위해 사용될 수도 있다. 예를 들면, 정의된 SMI3 윈도우의 끝에 후속하여, 다음 윈도우가 지정된 양의 PCIe TLP 데이터의 발신을 위한 것임을 나타내도록 (가령, 토큰(920)과 유사한) PCIe STP 토큰이 발신될 수 있다.
메모리 액세스 플릿(가령, SMI3 플릿)은 몇몇 실시예에서 크기가 달라져, 메모리 액세스 페이로드를 위해 대응하는 STP 토큰(가령, SMI3 STP 토큰) 내에 얼마나 많은 데이터를 예비할지 연역적으로 예측하는 것을 어렵게 할 수 있다. 예로서, 도 9에 도시된 바와 같이, SMI3 STP(925)는 SMI3 STP(952)를 뒤따르는 244 바이트의 SMI3 데이터가 예상되는 것임을 나타내는 길이 필드를 가질 수 있다. 그러나, 이 예에서, 오직 10개의 플릿(가령, SMI3 플릿 0 내지 9)이 윈도우 중에 발신될 준비가 되어 있고 이들 10개의 SMI3 플릿은 단지 244 바이트 중 240개를 활용한다. 이에 따라, 네(4) 바이트의 빈 대역폭이 남겨지고, 이들은 IDL 토큰으로써 채워진다. 이것은 PCIe TLP가 큐잉되고(queued) SMI3 윈도우가 닫히기를 기다리고 있는 경우에 특히 준최적(suboptimal)일 수 있다. 다른 경우에, SMI3 플릿의 발신을 위해 제공되는 윈도우는 레인을 위해 준비된 SMI3 데이터의 양을 발신하기에 불충분할 수 있다. 링크 상에 공존하는 SMI3 및 PCIe TLP 데이터 사이에서 어떻게 중재할지(arbitrate)를 판정하기 위해 중재 기법이 이용될 수 있다. 또한, 몇몇 구현에서, SMI3 윈도우의 길이는 링크의 더욱 효율적인 사용에 도움이 되도록 동적으로 수정될 수 있다. 예를 들면, 중재 또는 다른 로직은 정의된 윈도우 길이가 레인에 대해 예상되는 SMI3(그리고 경합하는 PCIe TLP 트래픽)의 양에 더 낫게 최적화될 수 있는지 판정하는 데에 정의된 SMI3 윈도우가 얼마나 제대로 활용되는지를 모니터링할 수 있다. 이에 따라, 그러한 구현에서, SMI3 STP 토큰의 길이 필드 값은 다른 예들보다도 (가령, TLP, DLLP 및 순서화된 세트 데이터를 포함하는 다른 PCIe 데이터와 비교하여) SMI3 플릿 데이터가 배분받아야 하는 링크 대역폭의 양에 따라 (가령, 상이한 값들 사이에서) 동적으로 조절될 수 있다.
직렬 입력/출력(Input/Output: I/O) 동작은 동작상인 경우에 상당한 전력을 소모할 수 있다. 이에 따라, 링크의 두 방향에 어떠한 트래픽도 계류 중(pending)이지 않은 경우에는 링크를 저전력 또는 유휴 상태(가령, L1 상태)로 두는 것이 바람직할 수 있다. 이것은 PCIe 또는 SML 모드 동작 중 어느 한쪽에 대해서든 또는 양자 모두에 대해서 참일 수 있다. 또한, SML 모드에서 사용되는 메모리 액세스 프로토콜은 호스트 PHY 계층 프로토콜 내에(가령, PCIe 내에) 정의된 것과는 상이하게 저전력 모드의 진입 및 빠져나가기를 정의할 수 있다. 또한, 메모리 액세스 프로토콜에 의해 활용되는 상태 머신은 물리 계층을 통제하는 다른 프로토콜에서 활용되는 것과는 상이할 수 있다.
예시하자면, 메모리 액세스 프로토콜의 하나의 예에서, 메모리 액세스 프로토콜의 링크 계층은 물리 계층이 제어 작업을 수행할 기회를 제공할 수 있고, 이들 제어 작업은 송신 링크 상태(Transmitting Link State: TLS)로부터 저전력 또는 L1 상태로의 전이를 포함할 수 있다. 예를 들면, 이질적 프로토콜의 PHY를 사용하는 것을 수반하는 SML 콘텍스트(context)의 외부에서 사용되는 경우, 메모리 액세스 프로토콜은 제어 상태(L0c) 또는 차단 링크 상태 윈도우(여기에서 물리 계층 요청 및 응답이 발신될 수 있음)를 제공할 수 있다. 예로서, 제어 상태 L0c는 그러한 제어 작업에 관련된 메시징(messaging)을 가능하게 하기 위해 제공될 수 있다. L0c 상태는 물리 계층 제어 메시지로 하여금 링크 계층을 사용하여 발신되는 플릿의 스트림 사이에서 발신되게 하기 위해 TLS 내의 주기적 윈도우로서 제공될 수 있다. 예를 들면, 도 10에 예시된 예에서 표현된 바와 같이, L0 상태는 L0c 간격들로 세분될 수 있다. 각 L0c 간격은 물리 계층 제어 코드 및 다른 데이터가 발신될 수 있는 L0c 상태 또는 윈도우(가령, 1005)로 시작할 수 있다. LOc 간격의 나머지(가령, 1010)는 플릿의 발신에 전용일 수 있다. L0c 간격 및 각 간격 내의 L0c 상태의 길이는, 예컨대 다른 예들보다도 하나 이상의 디바이스의 BIOS 또는 다른 소프트웨어 기반 제어기에 의해, 프로그램적으로(programmatically) 정의될 수 있다. L0c 상태는 L0c 간격의 나머지보다 기하급수적으로 짧을 수 있다. 예를 들면, 하나의 예에서, 다른 예들보다도, L0c는 8UI일 수 있으나 L0c 간격의 나머지는 4KUI 정도이다. 이것은 링크 데이터 대역폭을 실질적으로 방해하거나 낭비하지 않고 상대적으로 짧은 사전정의된 메시지가 발신될 수 있는 윈도우를 허용할 수 있다.
L0c 상태 메시지는 물리 계층 레벨에서의 다양한 조건을 통신할 수 있다. 하나의 예에서, 하나의 디바이스는 예컨대 특정한 임계량(threshold amount)을 초과하는 비트 에러 또는 다른 에러에 기반하여 링크 또는 레인의 재설정을 개시할 수 있다. 그러한 에러는 또한 (앞선 L0c 윈도우와 같은) L0c 윈도우에서 통신될 수 있다. L0c 상태는 다른 링크 상태들 간의 전이를 돕거나 트리거하는 데에서의 사용을 위한 시그널링과 같은 다른 대역내 시그널링을 실현하는 데에 쓰일 수도 있다. 하나의 예에서, L0c 메시지는 활성 L0 상태로부터 L1 상태와 같은 대기(standby) 또는 저전력 상태로 링크를 전이시키기 위해 활용될 수 있다. 도 11a의 단순화된 흐름 다이어그램(1100a)에 도시된 바와 같이, 특정한 L0c 상태는 L1 진입 요청(가령, 1110)을 통신하기 위해 사용될 수 있다. 또한 디바이스(또는 디바이스 상의 에이전트)가 요청(1110)의 확인응답(acknowledgement)을 기다리는 동안 플릿(가령, 1120, 1130)이 발신될 수 있다. 링크 상의 다른 디바이스는 확인응답(가령, 1140)을 발신할 수 있다. 몇몇 예에서, 확인응답은 L0c 윈도우에서 발신될 수도 있다. 몇몇 사례에서, 확인응답은 L1 요청(1110)의 수신/발신을 뒤따르는 다음 L0c 윈도우에서 발신될 수 있다. 각 디바이스에서의 L0c 간격을 동기화하기 위해 타이머가 이용될 수 있고 요청 디바이스(requesting device)는 다른 예들보다도 다음 L0c 윈도우에서 확인응답(1140)이 발신되었다는 식별에 기반하여 확인응답(1140)을 (가령, 독립적인 L1 진입 요청보다는) 요청(1110)의 확인응답으로서 식별할 수 있다. 몇몇 사례에서, 확인응답은 L1 진입 요청(1110)에서 사용되는 것과 별개인 L0c 코드를 통해 통신될 수 있다. 다른 사례에서, 확인응답(1140)은 다른 예들보다도 요청(1110)에서 사용된 L1 진입 요청 코드의 되풀이(echoing)를 포함할 수 있다. 또한, 도 11b에 예시된 것과 같은 대안적인 예에서, 링크로 하여금 L1 진입 요청(1110)에도 불구하고 링크 송신 상태에 남아 있게 하는 비확인(non-acknowledge) 신호 또는 NAK(1145)가 L0c 윈도우에서 통신될 수 있다.
도 10, 도 11a 및 도 11b의 예는 SML의 구현에 의해 사용되는 메모리 액세스 또는 다른 프로토콜에 따른 저전력 전이 핸드쉐이크의 하나의 예에 불과하다. 활성 상태로부터 저전력 또는 유휴 상태로의 전이를 실현하기 위해 다른 실시예에서는 다른 메커니즘이 이용될 수 있다. 그러나, 그러한 메커니즘은 메모리 액세스 프로토콜이 다른 프로토콜의 물리 계층 상에 오버레이되는 사례에서, 이를테면 메모리 액세스 프로토콜(가령, SMI3)이 PCIe와 같은 다른 직렬 상호연결 프로토콜 상에 오버레이되는 SML의 구현에서는 지원되지 않을 수 있다. 사실, PHY에 의해 활용되는 호스트 프로토콜이 활성 상태로부터 저전력 상태로의 전이를 상이하게 구현하여, 저전력 상태로의 전이를 개시하는 메모리 액세스 프로토콜의 능력을 복잡하게 할 수 있다. 이것은 SML이 정적으로 구현되는(즉, 다른 프로토콜의 물리 계층 상의 유일한 트래픽인) 구현에서 특히 성가실 수 있다.
그러한 잠재적인 차이를 예시하기 위하여, 도 10, 도 11a 및 도 11b에 예시된 저전력 상태로의 진입을 위한 메커니즘을 PCIe에서의 저전력 L1 상태로의 진입의 (도 12에서의) 표현과 비교하시오. 예를 들면, 제1 (업스트림) 컴포넌트(1205)는 다운스트림 컴포넌트(1210)로 구성 기입 요청(configuration write request)(1215)을 발신할 수 있다. 다운스트림 컴포넌트(1210)는 구성 기입 요청(1215)의 수신에 기반하여 송신 링크 상태로부터 저전력 상태(L1)로 (가령, 1220에서) 전이하는 프로세스를 시작할 수 있다. 다운스트림 컴포넌트(1210)는 구성 기입 요청에 대한 완료(1225)를 발신하고 최소 크레딧을 축적할 수 있고 새로운 트랜잭션 계층 패킷(Transaction Layer Packet: TLP)의 스케줄링을 차단한다(1230에서). 다운스트림 컴포넌트(1210)는 마지막 TLP에 대한 확인응답(ACK)을 수신하기를 (1235에서) 기다릴 수 있다. 다운스트림 컴포넌트의 TLP 전부가 확인되었으면, 다운스트림 컴포넌트는 그것이 업스트림 컴포넌트(1205)로부터 응답을 수신할 때까지 (L1 상태로의 진입을 나타내기 위해) Enter_L1 데이터 링크 계층 패킷(Data Link Layer Packet: DLLP)을 송신하기(1240) 시작할 수 있다.
Enter_L1 DLLP를 수신할 때에, 업스트림 컴포넌트(1205)는 새로운 TLP 송신의 스케줄링을 (1245에서) 차단할 수 있다. 그리고 업스트림 컴포넌트(1205)는 그것이 이전에 발신했던 마지막 TLP에 대한 링크 계층 확인응답을 그것이 수신할 때까지 기다릴 수 있다. 다운스트림 컴포넌트(1210)는 송신된 Enter_L1 DLLP에 대한 확인응답 DLLP(가령, Request_ACK)를 (1250에서) 기다릴 수 있다. (1255에서) 업스트림 컴포넌트(1205)가 그것의 마지막 TLP에 대한 ACK를 수신하는 경우 업스트림 컴포넌트(1205)는 수신된 Enter_L1 DLLP에 응답하여 반복적으로 Request_ACK DLLP를 발신할 수 있다(1260). 다운스트림 컴포넌트(1210)가 그것의 수신 레인 상에서 (업스트림 컴포넌트(1205)가 L1으로의 전이 요청을 확인하였음을 시그널링하는) Request_Ack DLLP를 포착했다면, 그것은 DLLP 송신을 (1265에서) 디스에이블하고(disable) 업스트림 지향 물리적 링크(upstream directed physical link)를 전기적 유휴 상태가 되게 한다. 또한, 업스트림 컴포넌트(1205) 상의 수신 레인이 전기적 유휴 상태에 진입함에 따라, 업스트림 컴포넌트(1205)는 Request_Ack DLLP를 발신하는 것을 중단하고, DLLP 송신을 (1270에서) 디스에이블하며, 그것의 송신 레인을 전기적 유휴가 되게 하여 이로써 L1으로의 링크의 전이를 완료한다. 몇몇 실시예에서 링크의 어느 한쪽의 컴포넌트든 L1을 빠져나갈 수 있다.
지적된 바와 같이, 호스트 프로토콜이든 또는 SML 프로토콜이든 저전력 링크 상태로의 전이를 개시하는 데에 사용되도록 하는 것이 바람직할 수 있다. 그러나, 몇몇 구현에서, SML에 의해 사용되는 메모리 액세스 프로토콜은 도 10, 도 11a 및 도 11b의 예에서 도시되고 기술된 것과 같이, 저전력 상태로의 진입의 협상을 PHY 계층에 위임하는 것이 가능하지 않을 수 있다. 이에 따라, SML의 몇몇 구현에서는, 저전력 상태에 진입하는 데에 사용되는 메모리 액세스 프로토콜의 고유한 인코딩으로 하여금 SML을 가능하게 하기 위해 사용되는 토큰 내에 터널링되도록 하는 L1 진입 방안이 제공될 수 있다. 예를 들면, 하나의 예에서, SML에 의해 사용되는 메모리 액세스 프로토콜은 차단 링크 상태 또는 제어 윈도우 내에서 링크 상태 전이 요청(그리고 확인응답)을 발신할 수 있다. 이들 동일한 인코딩은 토큰의 예비된 또는 사용되지 않는 필드에 포함될 수 있어서, 그것들은 호스트 (가령, PCIe) 프로토콜 또는 계층화된 스택에 영향을 미치지 않고 다운스트림 컴포넌트에 통신된다. 하나의 구현에서, STP 토큰(가령, SML 토큰)의 필드는 저전력 상태에 진입하기 위한 요청(또는 ACK/NAK)을 나타내는 데이터 값으로써 인코딩될 수 있다.
도 13으로 넘어가면, STP 토큰(1305)의 표현이 도시된다. STP 토큰(1305)은 TLP 시퀀스 번호 필드(1310), 그리고 STP에 후속할 메모리 액세스 프로토콜 (가령, SMI3) 페이로드의 길이를 (플릿의 개수의 측면에서) 식별하는 길이 필드(1315)를 포함하여, 여러 필드를 포함할 수 있다. 앞서 지적된 바와 같이, 길이 필드는 몇몇 구현에서, 후속하는 데이터가 호스트 상호연결 프로토콜(가령, PCIe)에 따른 것인지 또는 메모리 액세스 프로토콜(가령, SMI3)에 따른 것인지를 나타내기 위해 사용될 수 있다. 예를 들면, 하나 이상의 표준 페이로드 길이가 TLP 데이터를 위해 정의될 수 있다. SMI3 데이터는 몇몇 구현에서 고정된 개수의 플릿을 포함하도록 정의될 수 있거나, 다른 경우에는 가변적인 개수의 플릿을 가질 수 있는데 이 경우에 SMI3 플릿의 개수를 위한 길이 필드는 무시될 수 있는 필드가 된다. 또한, SMI3 STP를 위한 길이 필드는 정의된 TLP 페이로드 길이 중 하나가 아닌 길이로서 정의될 수 있다. 이에 따라, 하나의 예로서, SMI3 STP는 비 TLP 길이 값이 STP 길이 필드 내에 존재하는 것에 기반하여 식별될 수 있다.
도 13의 예와 함께 계속하면, TLP 시퀀스 번호 필드(1310)는 STP가 SML STP 토큰인 경우에 예비될(또는 사용되지 않을) 수 있다. TLP 시퀀스 번호 필드(1310)는 다른 가능한 인코딩보다도, L1으로 전이하기 위한 요청을 나타내도록, L1에 진입하기 위한 요청에 대한 ACK 또는 NAK을 나타내도록, 또는 어떠한 동작도 SML STP 토큰에 포함되지 않음을 나타내도록 인코딩될 수 있다. 예를 들면, 하나의 예시적 구현에서, 값의 세트가 메모리 액세스 프로토콜의 고유한 버전의 제어 윈도우에서의 사용을 위해 정의될 수 있고 이들 동일한 값은 SML STP 토큰의 예비된 필드 내에 인코딩될 수 있다. 예를 들면, SMI3를 메모리 액세스 프로토콜로서 활용하는 구현에서는 다음과 같다:
표 1
Figure pat00001
0
표 1의 예와 함께 계속하면, SML STP 토큰 내에 인코딩된, L1에 진입하기 위한 요청은 L1에 진입하기 위한 요청을 되풀이하고(echo) 확인하도록 인코딩된 SML STP 토큰(가령, QL1)으로써든 또는 대안적으로 비확인응답(non-acknowledgement) 메시지(가령, QL1n)로써든 응신받을 수 있도록 핸드쉐이크가 정의될 수 있다. 후자의 경우에, 프로세스는 확인응답 핸드쉐이크가 달성될 때까지 주기적으로 반복될 수 있다. L1에 진입하기 위한 요청(또는 응답) 또는 어떤 응답을 나타내도록 인코딩되지 않은 것들인 SML STP 토큰의 지정된 필드들은 다른 예들보다도, 대안적인 인코딩 또는 무동작(no operation) 인코딩으로써 인코딩될 수 있다.
도 14는 적어도 하나의 예에 따라, L1에 진입하기 위한 핸드쉐이크의 예를 보여주는 흐름도이다. 이 예에서, PCIe 상에서 메모리 액세스 프로토콜의 저전력 상태 진입 요청의 터널링을 가능하게 하기 위해 심(shim)(850)이 사용될 수 있다. 예를 들면, 전력 관리 에이전트(Power Management Agent: PMA)(1401, 1402)는 각각의 링크 계층이 저전력으로 되는 것을 (가령, 1405, 1415에서) 비동기식으로 가능하게 할 수 있다. 그리고 각각의 링크 계층(Link Layer: LL)(810a, 810b)은 (1410, 1420에서) 저전력 상태(가령, L1)로의 진입을 개시하기 위해 심(각각 805a, 805b)과 통신할 수 있다. 예를 들면, 심(805a, 805b)은 메모리 액세스 프로토콜에 따라 L1 진입 신호(1410, 1420)를 수신할 수 있다. 심(805a, 805b)은 저전력 상태 L1에 진입하기 위해, 메모리 액세스 프로토콜에 따라, EL1c 데이터가 요청임을 식별하기 위한 로직을 포함할 수 있다. 심(805b)은 PCIe 토큰의 필드, 이를테면 PCIe 기반 STP 토큰의 TLP 시퀀스 번호 필드를 메모리 액세스 프로토콜 내에 정의된 저전력 진입 요청 인코딩으로써 인코딩할 수 있다. 예를 들면, 메모리 액세스 프로토콜은 그러한 코드를 발신하기 위해 차단 링크 상태(L0c)를 사용할 수 있고, 심(805a,b)은 (1425에서) PCIe 기반 토큰 필드를 활용하는 L0c 저전력 진입 핸드쉐이크를 터널링하는 데에 사용될 수 있다. 이에 따라, 인코딩된 토큰을 심(805a)이 수신하는 경우, 그것은 L1에 진입하도록 (1430에서) 링크 계층(810a)에 시그널링할 수 있다. 심(805a)은 또한 L1 진입 요청의 확인응답을 (1425에서) 발신할 수 있고 ACK를 수신할 때에 심(805b)은 L1에 진입하도록 (1435에서) 그것의 링크 계층(810b)에 시그널링할 수 있다. 또한, 확인응답을 수신할 때에, 심(805b)은 또한 PCIe 물리 계층 L1 진입 핸드쉐이크를 개시하도록 (1440에서) 물리 계층(815b)에 시그널링할 수 있다. 이에 따라, 하나 이상의 전기적 유휴 순서화된 세트(Electrical Idle Ordered Set: EIEOS)는 PHY(815b)에 의해 발신되고 PHY(815a)에 의해 되풀이되어 PCIe 물리 계층으로 하여금 전기적 유휴에 진입하게 한다(1450). 동일사항이 신호(1455, 1460)를 통해 각각의 심(805a, 805b)에게 확증될(confirmed) 수 있다.
도 14의 예와 함께 계속하면, 몇몇 사례에서 L1으로의 링크의 진입에 이어서, (소프트웨어에 의해 유도되는(prompted) 바와 같이) 링크 계층(810b)은 송신 링크 상태(가령, L0 또는 L0p)에 재진입하기 위해 저전력 L1 상태로부터의 빠져나가기를 개시할 수 있다. 예를 들면, L1 빠져나가기 신호(L1 exit signal)(1465)는 심(805b)에 발신되고 심(805b)에 의해 디코딩될 수 있고 심(805b)은 저전력 상태를 빠져나오고 송신 링크 상태를 위해 링크를 구성하기 시작하도록 (1470에서) PHY(815b)에 시그널링할 수 있다. 예를 들면, 링크를 디바운싱하고 동기화하고 구성하기 위하여, 순서화된 세트(Ordered Set: OS) 및 훈련 시퀀스(Training Sequence: TS)가 (1475에서) 교환될 수 있다. (가령, 1475를 통한) 링크 훈련의 마무리 시에 심(805a, 805b)은 물리 계층이 송신 상태 L0 내에 있음을 식별할 수 있다. 그리고 심(805a, 805b)은 L0에 진입되었음을 링크 계층(810a, 810b)에 통지할 수 있다. 심(805a, 805b)이 PCIe 물리 계층 상에서 PCIe 데이터 및 메모리 액세스 프로토콜 데이터의 동적 다중화를 제공하는 경우에서는, L0(또는 L1)로의 진입은 다른 예들보다도 메모리 액세스 프로토콜 및 PCIe 링크 계층 양자 모두에 심(805a, 805b)에 의해 통신될 수 있다.
범용 I/O(General Purpose I/O: GPIO) 프로토콜의 물리 계층 상에서 GPIO 프로토콜(가령, PCIe) 및 메모리 액세스 프로토콜(가령, SMI3) 간의 동적 토글(dynamic toggling)을 지원하는 구현에서, 심은 전기적 유휴에 진입하도록 공통 물리 계층에 시그널링하기 전에 양 프로토콜 스택 모두가 저전력 링크 상태(가령, L1)에 진입할 준비가 되었음을 판정할 수 있다. 예를 들면, GPIO 프로토콜 링크 계층이든(대역폭 중 자신의 부분 중에) 또는 메모리 액세스 프로토콜이든 저전력 링크 상태에 진입하기를 (각자의 프로토콜에 따라) 독립적으로 요청할 수 있다. 그러나, 하나의 칼럼이 저전력 상태에 진입하고자 시도하는 경우, 다른 칼럼은 활성 링크 상에서 발신되기를 기다리는 데이터를 가질 수 있다. 동적 심은 몇몇 구현에서 스택들 간의 대역폭 수요들을 중재하는 능력을 가질 수 있다. 이에 따라, 몇몇 구현에서, 심은 두 개의 상이한 프로토콜 스택으로부터 데이터를 다중화하는 경우, 저전력 상태에 진입하기 위한 다른 칼럼의 요청을 승인하기 전에, 어떠한 데이터도 (가령 STP 토큰에 후속하여) 대역폭의 다음 분할에서 칼럼들 중 하나에 의해 발신되지 않게끔 하기 위해 양 칼럼을 모니터링할 수 있다. 몇몇 구현에서, 심은 L1으로의 진입을 요청하는 칼럼에 대해 PHY가 L1에 진입하였다는 확증(confirmation)을 합성하되, L1으로의 실제적인 진입을 트리거할 PHY로의 요청을 보류할 수 있다(그렇게 하는 것이 다른 칼럼으로부터 발신되기를 기다리는 데이터에 영향을 미치지 않는다고 심이 판정할 때까지). 예를 들면, 제1 칼럼은 다른 제2 칼럼이 L1으로의 진입을 요청하였고 링크가 실제로 L1 내에 있다고 여기는 후에 물리적 링크를 활용하도록 허용될 수 있다. 그러한 사례에서, 제1 칼럼이 데이터를 발신하는 것을 다하면 곧, 심은 링크로 하여금 유휴에 진입하게 하도록 물리 계층에 시그널링할 수 있다. 다른 사례에서, 제2 칼럼의 링크 계층은 링크가 활성인 채로 있는 동안 재기동하고(re-awaken) 이미 활성인(즉, 다른 칼럼의 데이터를 발신하는 데에 사용되고 있는) 링크를 재활성화하고자 시도할 수 있다. 그러한 사례에서, 심은 링크의 활성화를 개시하기 위해 제2 칼럼의 링크 계층으로부터 데이터를 수신할 수 있다. 그러한 사례에서, 심은 링크 계층 제2 칼럼에 대해, 링크의 재기동의 확증을 합성할 수 있다. 실제로는, 링크가 이미 훈련되고 동작상이므로, 물리 계층에 관련하여서는 어떠한 액션도 취해지지 않을 것이고 단지 심은 링크로 하여금 저전력 상태를 "빠져나가게" 하기 위해 제2 칼럼의 링크 계층으로부터의 신호에 응답하여 링크가 활성이라는 확증 신호를 제2 칼럼에 발신할 수 있다. 그러한 사례에서, 두 개의 별개 프로토콜의 데이터 간에 신호 물리적 링크의 대역폭이 공유될 수 있을 뿐만 아니라, 상이한 프로토콜들의 저전력 상태 진입 패러다임이 지원될 수도 있다.
위의 원리 및 예 중 많은 부분은 때때로 PCIe 및 SMI3와 같은 어떤 프로토콜의 콘텍스트 내에서 기술됨에 유의하여야 한다. 그러나, 이들 프로토콜은 단지 예로서 명명된다는 점 및 임의의 직렬 GPIO 프로토콜 및 메모리 액세스 프로토콜이 SML의 구현에서 활용될 수 있다는 점이 인식되어야 한다. 사실, 본 문서에 기술된 원리, 해결책 및 특징은 다른 프로토콜 및 시스템에 동등하게 적용가능할 수 있다. 더욱이, 다른 예들보다도 링크에 대한 논리적 및 물리적 향상의 조합과 그것의 대응하는 로직(본 문서에 기술된 바와 같은 것)을 포함하여, 위의 해결책들의 조합은 시스템 내에서 적용될 수 있다.
앞서 기술된 장치, 방법 및 시스템은 전술된 바와 같은 임의의 전자 디바이스 또는 시스템 내에 구현될 수 있음에 유의하시오. 특정한 예시로서, 아래의 특징은 본 문서에 기술된 바와 같은 발명을 활용하기 위한 예시적 시스템을 제공한다. 아래의 시스템이 더욱 상세히 기술되는바, 다수의 상이한 상호연결이 개시되고, 기술되며, 위의 논의로부터 재검토된다. 그리고 금세 명백하다시피, 앞서 기술된 발전은 그런 상호연결, 패브릭 또는 아키텍처 중 임의의 것에 적용될 수 있다.
도 15를 참조하면, 다중코어 프로세서를 포함하는 컴퓨팅 시스템을 위한 블록 다이어그램의 일 실시예가 묘사된다. 프로세서(1500)는 마이크로프로세서(microprocessor), 임베딩된 프로세서(embedded processor), 디지털 신호 프로세서(Digital Signal Processor: DSP), 네트워크 프로세서(network processor), 핸드헬드 프로세서(handheld processor), 애플리케이션 프로세서(application processor), 코프로세서(co-processor), 시스템 온 칩(System On a Chip: SOC), 또는 코드를 실행하기 위한 다른 디바이스와 같은 임의의 프로세서 또는 처리 디바이스를 포함한다. 프로세서(1500)는 하나의 실시예에서 적어도 두 개의 코어 - 코어(1501 및 1502) - 를 포함하는데, 이는 비대칭적 코어 또는 대칭적 코어(예시된 실시예)를 포함할 수 있다. 그러나, 프로세서(1500)는 대칭적이거나 비대칭적일 수 있는 임의의 개수의 처리 요소(processing element)를 포함할 수 있다.
하나의 실시예에서 처리 요소는 소프트웨어 쓰레드(software thread)를 지원하는 하드웨어 또는 로직을 나타낸다. 하드웨어 처리 요소의 예는, 쓰레드 유닛(thread unit), 쓰레드 슬롯(thread slot), 쓰레드(thread), 프로세스 유닛(process unit), 콘텍스트(context), 콘텍스트 유닛(context unit), 논리적 프로세서(logical processor), 하드웨어 쓰레드(hardware thread), 코어(core) 및/또는 임의의 다른 요소(실행 상태 또는 아키텍처상의 상태와 같은, 프로세서를 위한 상태를 유지하는 것이 가능함)를 포함한다. 다시 말해, 처리 요소는 하나의 실시예에서 소프트웨어 쓰레드, 운영 체제, 애플리케이션 또는 다른 코드와 같은 코드와 독립적으로 연관되는 것이 가능한 임의의 하드웨어를 나타낸다. 물리적 프로세서(또는 프로세서 소켓)은 전형적으로는 집적 회로를 나타내는데, 이는 코어 또는 하드웨어 쓰레드와 같은 임의의 개수의 다른 처리 요소를 잠재적으로 포함한다.
코어는 흔히 독립적인 아키텍처상의 상태를 유지하는 것이 가능한 집적 회로 상에 위치된 로직을 나타내되, 각각의 독립적으로 유지되는 아키텍처상의 상태는 적어도 몇몇 전용 실행 리소스와 연관된다. 코어와 대조적으로, 하드웨어 쓰레드는 전형적으로는 독립적인 아키텍처상의 상태를 유지하는 것이 가능한 집적 회로 상에 위치된 임의의 로직을 나타내되, 독립적으로 유지되는 상태는 실행 리소스에 대한 액세스를 공유한다. 알 수 있는 바와 같이, 어떤 리소스는 공유되고 다른 것은 아키텍처상의 상태에 전용인 경우, 하드웨어 쓰레드 및 코어의 명명법 사이의 선이 중첩된다. 그렇지만 흔히, 코어 및 하드웨어 쓰레드는 운영 체제가 개별적인 논리적 프로세서로 보는데, 운영 체제는 각 논리적 프로세서 상의 동작들을 개별적으로 스케줄링할 수 있다.
도 15에 예시된 바와 같은 물리적 프로세서(1500)는 두 개의 코어 - 코어(1501 및 1502) - 를 포함한다. 여기서, 코어(1501 및 1502)는 대칭적 코어, 즉 동일한 구성, 기능적 유닛 및/또는 로직을 갖는 코어로 간주된다. 다른 실시예에서, 코어(1501)는 비순차적(out-of-order) 프로세서 코어를 포함하나, 코어(1502)는 순차적(in-order) 프로세서 코어를 포함한다. 그러나, 코어(1501 및 1502)는 고유한 코어(native core), 소프트웨어로 관리되는 코어(software managed core), 고유한 명령어 세트 아키텍처(Instruction Set Architecture: ISA)를 실행하도록 적응된 코어, 변환된 명령어 세트 아키텍처(Instruction Set Architecture: ISA)를 실행하도록 적응된 코어, 통합설계된 코어(co-designed core), 또는 다른 알려진 코어와 같은 임의의 유형의 코어로부터 개별적으로 선택될 수 있다. 이종 코어 환경(heterogeneous core environment)(즉 비대칭적 코어들)에서, 이진 변환(binary translation)과 같은 어떤 형태의 변환은 하나 또는 양 코어 모두 상의 코드를 스케줄링하거나 실행하기 위해 활용될 수 있다. 그러나 논의를 더 하기 위하여, 코어(1501) 내에 예시된 기능적 유닛이 아래에서 더욱 상세히 기술되고, 코어(1502) 내의 유닛은 묘사된 실시예에서 유사한 방식으로 동작한다.
묘사된 바와 같이, 코어(1501)는 두 개의 하드웨어 쓰레드(1501a 및 1501b)를 포함하는데, 이는 하드웨어 쓰레드 슬롯(1501a 및 1501b)으로 지칭될 수도 있다. 따라서, 운영 체제와 같은 소프트웨어 개체는 하나의 실시예에서 잠재적으로 프로세서(1500)를 4개의 별개의 프로세서, 즉 4개의 소프트웨어 쓰레드를 동시적으로 실행하는 것이 가능한 4개의 논리적 프로세서 또는 처리 요소로 본다. 앞서 시사된 바와 같이, 제1 쓰레드는 아키텍처 상태 레지스터(1501a)와 연관되고, 제2 쓰레드는 아키텍처 상태 레지스터(1501b)와 연관되며, 제3 쓰레드는 아키텍처 상태 레지스터(1502a)와 연관되고, 제4 쓰레드는 아키텍처 상태 레지스터(1502b)와 연관된다. 여기서, 아키텍처 상태 레지스터(1501a, 1501b, 1502a 및 1502b) 각각은 앞서 기술된 바와 같이 처리 요소, 쓰레드 슬롯 또는 쓰레드 유닛으로 지칭될 수 있다. 예시된 바와 같이, 아키텍처 상태 레지스터(1501a)는 아키텍처 상태 레지스터(1501b) 내에 복제되어서, 논리적 프로세서(1501a) 및 논리적 프로세서(1501b)를 위해 개별적인 아키텍처 상태/콘텍스트가 저장되는 것이 가능하다. 코어(1501)에서, 다른 더 작은 리소스, 이를테면 배분기 및 재명명기 블록(allocator and renamer block)(1530) 내의 재명명 로직 및 명령어 포인터는 쓰레드(1501a 및 1501b)를 위해 복제될 수도 있다. 재순서화/퇴장 유닛(reorder/retirement unit)(1535) 내의 재순서화 버퍼, ILTB(1520), 로드/저장 버퍼 및 큐와 같은 몇몇 리소스는 파티셔닝(partitioning)을 통해 공유될 수 있다. 범용 내부 레지스터, 페이지-테이블 베이스 레지스터(page-table base register)(들), 저레벨 데이터 캐시 및 데이터 TLB(low-level data-cache and data-TLB)(1515), 실행 유닛(들)(1540) 및 비순차적 유닛(1535)의 부분들과 같은 다른 리소스는 잠재적으로는 완전히 공유된다.
프로세서(1500)는 흔히 다른 리소스를 포함하는데, 이는 완전히 공유되거나, 파티셔닝을 통해 공유되거나 처리 요소에/에 의해 전용으로 될 수 있다. 도 15에서, 프로세서의 예시적인 논리적 유닛/리소스가 있는 순전히 예시적인 프로세서의 일 실시예가 보여진다. 프로세서는 이들 기능적 유닛 중 임의의 것을 포함하거나 제외할 뿐만 아니라, 묘사되지 않은 임의의 다른 알려진 기능적 유닛, 로직 또는 펌웨어를 포함할 수 있음에 유의하시오. 예시된 바와 같이, 코어(1501)는 단순화된 대표적인 비순차적(Out-Of-Order: OOO) 프로세서 코어를 포함한다. 그러나 순차적 프로세서가 상이한 실시예에서 활용될 수 있다. OOO 코어는 실행될/취해질 브랜치를 예측하기 위한 브랜치 타겟 버퍼(branch target buffer)(1520) 및 명령어를 위한 주소 변환 엔트리(address translation entry)들을 저장하기 위한 명령어 변환 버퍼(Instruction-Translation Buffer: I-TLB)(1520)를 포함한다.
코어(1501)는 인출된(fetched) 요소를 디코딩하기 위해 인출 유닛(fetch unit)(1520)에 커플링된 디코드 모듈(decode module)(1525)을 더 포함한다. 인출 로직은 하나의 실시예에서 쓰레드 슬롯들(1501a, 1501b)과 각각 연관된 개별적인 시퀀서(sequencer)들을 포함한다. 통상적으로 코어(1501)는 제1 ISA와 연관되는데, 이는 프로세서(1500) 상에서 실행가능한 명령어를 정의/지정한다. 흔히 제1 ISA의 일부인 머신 코드 명령어는 (옵코드(opcode)로 지칭되는) 명령어의 부분을 포함하는데, 이는 수행될 명령어 또는 동작을 참조/지정한다. 디코드 로직(1525)은 이들 명령어를 그것의 옵코드로부터 인지하고 제1 ISA에 의해 지정된 바와 같은 처리를 위해 디코딩된 명령어를 파이프라인에서 넘기는 회로망을 포함한다. 예를 들어, 아래에서 더욱 상세히 논의되는 바와 같이 디코더(1525)는 하나의 실시예에서 트랜잭션상의 명령어와 같은 특정 명령어를 인지하도록 설계되거나 적응된 로직을 포함한다. 디코더(1525)에 의한 인지 의 결과로서, 아키텍처 또는 코어(1501)는 적절한 명령어와 연관된 작업을 수행하기 위해 특정한 사전정의된 행동을 취한다. 본 문서에 기술된 작업, 블록, 동작 및 방법 중 임의의 것은 단일의 또는 다수의 명령어(그 중 일부는 새로운 명령어이거나 예전 명령어일 수 있음)에 응답하여 수행될 수 있음에 유의하는 것이 중요하다. 디코더(1526)는 하나의 실시예에서 동일한 ISA(또는 이의 서브세트)를 인지함에 유의하시오. 대안적으로, 이종 코어 환경에서, 디코더(1526)는 제2 ISA(제1 ISA의 서브세트이거나 아니면 별개 ISA)를 인지한다.
하나의 예에서, 배분기 및 재명명기 블록(1530)은 명령어 처리 결과를 저장하기 위한 레지스터 파일과 같은 리소스를 예비하기 위한 배분기를 포함한다. 그러나, 쓰레드(1501a 및 1501b)는 잠재적으로 비순차적 실행이 가능할 수 있는데, 배분기 및 재명명기 블록(1530)은 명령어 결과를 추적하기 위한 재순서화 버퍼와 같은 다른 리소스를 또한 예비한다. 유닛(1530)은 프로그램/명령어 참조 레지스터를 프로세서(1500)의 내부의 다른 레지스터로 재명명하기 위한 레지스터 재명명기(register renamer)를 또한 포함할 수 있다. 재순서화/퇴장 유닛(reorder/retirement unit)(1535)은 비순차적 실행을, 그리고 이후에는 비순차적으로 실행된 명령어의 순차적 퇴장(in-order retirement)을 지원하기 위한, 앞서 언급된 재순서화 버퍼, 로드 버퍼 및 저장 버퍼와 같은 컴포넌트를 포함할 수 있다.
스케줄러 및 실행 유닛(들) 블록(1540)은 하나의 실시예에서 실행 유닛 상의 명령어/동작을 스케줄링하기 위한 스케줄러 유닛을 포함한다. 예를 들어, 부동소수점 명령어(floating point instruction)는 이용가능한 부동소수점 실행 유닛을 가지는 실행 유닛의 포트 상에 스케줄링된다. 실행 유닛과 연관된 레지스터 파일은 정보 명령어 처리 결과를 저장하기 위해 또한 포함된다. 예시적인 실행 유닛은 부동소수점 실행 유닛, 정수 실행 유닛(integer execution unit), 점프 실행 유닛(jump execution unit), 로드 실행 유닛(load execution unit), 저장 실행 유닛(store execution unit) 및 다른 알려진 실행 유닛을 포함한다.
더 낮은 레벨의 데이터 캐시 및 데이터 변환 버퍼(Data Translation Buffer: D-TLB)(1550)는 실행 유닛(들)(1540)에 커플링된다. 데이터 캐시는 메모리 일관성 상태 내에 잠재적으로 유지되는, 데이터 피연산자(operand)와 같은 최근에 사용된/연산된 요소를 저장하는 것이다. D-TLB는 최근의 가상적/선형적 대 물리적 주소 변환을 저장하는 것이다. 특정한 예로서, 프로세서는 물리적 메모리를 복수의 가상 페이지로 나누기 위한 페이지 테이블 구조(page table structure)를 포함할 수 있다.
여기서, 코어(1501 및 1502)는 더 높은 수준의 또는 더욱 나아간(further-out) 캐시, 이를테면 온칩 인터페이스(on-chip interface)(1510)와 연관된 제2 레벨 캐시에 대한 액세스를 공유한다. 더 높은 수준 또는 더욱 나아감은 실행 유닛(들)으로부터 증가하거나 더욱 멀어진 캐시 레벨을 나타냄에 유의하시오. 하나의 실시예에서, 더 높은 수준의 캐시는 마지막 레벨 데이터 캐시 - 프로세서(1500) 상의 메모리 계층구조 내의 마지막 캐시 - 이를테면 제2 또는 제3 레벨 데이터 캐시이다. 그러나, 더 높은 수준의 캐시는 그와 같이 한정되는 것은 아닌데, 그것이 명령어 캐시와 연관되거나 이를 포함할 수 있기 때문이다. 트레이스 캐시(trace cache) - 명령어 캐시의 한 유형 - 는 대신 최근에 디코딩된 트레이스를 저장하기 위해 디코더(1525) 뒤에 커플링될 수 있다. 여기서, 명령어는 잠재적으로는 매크로 명령어(macro-instruction)(즉 디코더에 의해 인지되는 일반적인 명령어)를 나타내는데, 이는 다수의 마이크로 명령어(마이크로 동작)으로 디코딩될 수 있다.
묘사된 구성에서, 프로세서(1500)는 온칩 인터페이스 모듈(1510)을 또한 포함한다. 역사적으로, 아래에 더욱 상세히 기술된 메모리 제어기는 프로세서(1500)의 외부의 컴퓨팅 시스템 내에 포함되었다. 이 시나리오에서, 온칩 인터페이스(1510)는 시스템 메모리(1575), 칩셋(메모리(1575)에 연결되는 메모리 제어기 허브 및 주변 디바이스들을 연결하는 I/O 제어기 허브를 흔히 포함함), 메모리 제어기 허브, 노스브리지 또는 다른 집적 회로와 같은, 프로세서(1500)의 외부의 디바이스와 통신하는 것이다. 그리고 이 시나리오에서, 버스(1505)는 멀티드롭 버스, 점대점 상호연결, 직렬 상호연결, 병렬 버스, 일관적 (가령, 캐시 일관적) 버스, 계층화된 프로토콜 아키텍처, 차동 버스(differential bus) 및 GTL 버스와 같은 임의의 알려진 상호연결을 포함할 수 있다.
메모리(1575)는 프로세서(1500)에 전용이거나 시스템 내의 다른 디바이스와 공유될 수 있다. 메모리(1575)의 유형의 흔한 예는 DRAM, SRAM, 비휘발성 메모리(Non-Volatile memory: NV memory) 및 다른 알려진 저장 디바이스를 포함한다. 디바이스(1580)는 메모리 제어기 허브에 커플링된 그래픽 가속기, 프로세서 또는 카드, I/O 제어기 허브에 커플링된 데이터 스토리지(data storage), 무선 송수신기(wireless tranceiver), 플래시 디바이스(flash device), 오디오 제어기, 네트워크 제어기 또는 다른 알려진 디바이스를 포함할 수 있음에 유의하시오.
그러나 최근에는, 더 많은 로직 및 디바이스가 SOC와 같은 단일의 다이 상에 집적되고 있으므로, 이들 디바이스 각각은 프로세서(1500) 상에 포함될 수 있다. 예를 들어 하나의 실시예에서, 메모리 제어기 허브는 프로세서(1500)와 함께 동일한 패키지 및/또는 다이 상에 있다. 여기서, 코어의 부분(온코어 부분(on-core portion))(1510)은 메모리(1575) 또는 그래픽 디바이스(1580)와 같은 다른 디바이스와 인터페이스하기 위한 하나 이상의 제어기(들)를 포함한다. 그러한 디바이스와 인터페이스하기 위한 제어기 및 상호연결을 포함하는 구성은 흔히 온코어(또는 언코어 구성(un-core configuration))로 지칭된다. 예로서, 온칩 인터페이스(1510)는 온칩 통신(on-chip communication)을 위한 링 상호연결(ring interconnect) 및 오프칩 통신(off-chip communication)을 위한 고속 직렬 점대점 링크(1505)를 포함한다. 그러나, SOC 환경에서, 네트워크 인터페이스, 코프로세서, 메모리(1575), 그래픽 프로세서(1580) 및 임의의 다른 알려진 컴퓨터 디바이스/인터페이스와 같은 훨씬 더 많은 디바이스가 높은 기능성 및 저전력 소모를 갖는 소형 폼 팩터를 제공하기 위해 단일의 다이 또는 집적 회로 상에 집적될 수 있다.
하나의 실시예에서, 프로세서(1500)는 본 문서에 기술된 장치 및 방법을 지원하거나 이와 인터페이스하기 위해 애플리케이션 코드(1576)를 컴파일, 변환 및/또는 최적화하는 컴파일러(compiler), 최적화, 그리고/또는 변환기(translator) 코드(1577)를 실행하는 것이 가능하다. 컴파일러는 흔히 소스 텍스트/코드를 타겟 텍스트/코드로 변환하는 프로그램 또는 프로그램의 세트를 포함한다. 통상적으로, 컴파일러로써 프로그램/애플리케이션 코드를 컴파일하는 것은 고레벨 프로그래밍 언어 코드를 저레벨 머신 또는 어셈블리 언어 코드로 변환하기 위해 다수의 국면과 단계로 행해진다. 그러나, 단일 단계 컴파일러가 여전히 단순한 컴파일을 위해 활용될 수 있다. 컴파일러는 임의의 알려진 컴파일 기법을 활용하고 임의의 알려진 컴파일러 동작, 이를테면 어휘 분석(lexical analysis), 사전처리(preprocessing), 파싱(parsing), 시맨틱 분석(semantic analysis), 코드 생성(code generation), 코드 변환(code transformation) 및 코드 최적화(code optimization)를 수행할 수 있다.
더욱 대형인 컴파일러는 흔히 다수의 국면을 포함하나, 가장 흔하게는 이들 국면이 두 개의 일반적 국면 내에 포함된다: (1) 전단부, 즉 일반적으로 구문론적 처리(syntactic processing), 시맨틱 처리(semantic processing) 및 어떤 변환/최적화가 일어날 수 있는 곳, 그리고(2) 후단부(back-end), 즉 일반적으로, 분석, 변환, 최적화 및 코드 생성이 일어나는 곳. 몇몇 컴파일러는 컴파일러의 전단부 및 후단부 간의 서술의 모호함(blurring)을 보여주는 중간부(middle)를 나타낸다. 결과적으로, 컴파일러의 삽입, 연관, 생성 또는 다른 동작에 대한 언급은 전술된 국면 또는 단계 중 임의의 것뿐만 아니라 컴파일러의 임의의 다른 알려진 국면 또는 단계에서도 일어날 수 있다. 설명적인 예로서, 컴파일러는 잠재적으로, 컴파일의 전단부 국면에서 호출/동작을 삽입하고 변환 단계 중에 호출/동작을 더 낮은 레벨의 코드로 변환하는 것과 같이, 동작, 호출, 함수 등등을 컴파일의 하나 이상의 국면에서 삽입한다. 동적 컴파일 중에 컴파일러 코드 또는 동적 최적화 코드는 그러한 동작/호출을 삽입할 뿐만 아니라, 런타임(runtime) 동안의 실행을 위해 코드를 최적화할 수 있음에 유의하시오. 특정한 설명적인 예로서, 이진 코드(이미 컴파일된 코드)는 런타임 중에 동적으로 최적화될 수 있다. 여기서, 프로그램 코드는 동적 최적화 코드, 이진 코드 또는 이들의 조합을 포함할 수 있다.
컴파일러와 유사하게, 이진 변환기와 같은 변환기는 코드를 최적화 및/또는 변환하기 위해 정적으로든 동적으로든 코드를 변환한다. 따라서, 코드, 애플리케이션 코드, 프로그램 코드 또는 다른 소프트웨어 환경의 실행에 대한 언급은 다음을 나타낼 수 있다: (1) 컴파일러 프로그램(들), 최적화 코드 최적화기, 또는 변환기를 정적으로든 또는 동적으로든 프로그램 코드를 컴파일하기 위해, 소프트웨어 구조를 유지하기 위해, 다른 동작을 수행하기 위해, 코드를 최적화하기 위해, 또는 코드를 변환하기 위해 실행하는 것; (2) 최적화/컴파일된 애플리케이션 코드와 같은, 동작/호출을 포함하는 주 프로그램 코드(main program code)의 실행; (3) 주 프로그램 코드와 연관된, 라이브러리와 같은 다른 프로그램 코드를 소프트웨어 구조를 유지하기 위해, 다른 소프트웨어 관련 동작을 수행하기 위해, 또는 코드를 최적화하기 위해 실행하는 것; 또는 (4) 이들의 조합.
이제 도 16을 참조하면, 다중코어 프로세서의 일 실시예의 블록 다이어그램이 도시된다. 도 16의 실시예에 도시된 바와 같이, 프로세서(1600)는 다수의 도메인을 포함한다. 특히, 복수의 코어(1630A 내지 1630N)를 포함하는 코어 도메인(core domain)(1630), 미디어 엔진(media engine)(1665)을 가지는 하나 이상의 그래픽 엔진을 포함하는 그래픽 도메인(graphics domain)(1660), 그리고 시스템 에이전트 도메인(system agent domain)(1610)이다.
다양한 실시예에서, 시스템 에이전트 도메인(1610)은 전력 제어 이벤트 및 전력 관리를 취급하여서, 도메인(1630 및 1660)의 개별 유닛(가령, 코어 및/또는 그래픽 엔진)은 주어진 유닛에서 일어나는 활동(또는 비활동)에 비추어 적절한 전력 모드/레벨(가령, 활성, 터보(turbo), 수면(sleep), 동면(hibernate), 숙면(deep sleep) 또는 다른 고급 구성 전력 인터페이스(Advanced Configuration Power Interface)와 흡사한 상태)에서 동적으로 동작하도록 독립적으로 제어가능하다. 도메인(1630 및 1660) 각각은 상이한 전압 및/또는 전력에서 동작할 수 있고, 나아가 도메인들 내의 개별 유닛은 각각 잠재적으로는 독립적인 주파수 및 전압에서 동작한다. 세 개의 도메인으로써 도시될 뿐이나, 본 발명의 범주는 이와 관련해서 한정되는 것이 아니고 추가적인 도메인이 다른 실시예에서 존재할 수 있다고 이해되는 데에 유의하시오.
도시된 바와 같이, 각 코어(1630)는 다양한 실행 유닛 및 추가적인 처리 요소 외에도 저레벨 캐시를 더 포함한다. 여기서, 다양한 코어는 서로에게 그리고 마지막 레벨 캐시(Last Level Cache: LLC)(1640A 내지 1640N)의 복수의 유닛 또는 슬라이스로 형성되는 공유 캐시 메모리(shared cache memory)에 커플링되는데, 이들 LLC는 흔히 저장 및 캐시 제어기 기능을 포함하고 코어들 사이에서뿐만 아니라 잠재적으로는 그래픽 엔진 사이에서도 공유된다.
보이는 바와 같이, 링 상호연결(ring interconnect)(1650)은 코어들을 함께 커플링하고, 각각 코어 및 LLC 슬라이스 간의 커플링에 있는 복수의 링 스톱(ring stop)(1652A 내지 1652N)을 통하여 코어 도메인(1630), 그래픽 도메인(1660) 및 시스템 에이전트 회로망(1610) 간의 상호연결을 제공한다. 도 16에 보이는 바와 같이, 상호연결(1650)은 주소 정보, 데이터 정보, 확인응답 정보 및 스누프/무효 정보를 포함하는 다양한 정보를 전달하기 위해 사용된다. 링 상호연결이 예시되었으나, 임의의 알려진 온다이(on-die) 상호연결 또는 패브릭이 활용될 수 있다. 설명적인 예로서, 앞서 논의된 패브릭 중 몇몇(가령 다른 온다이 상호연결, 온칩 시스템 패브릭(On-chip System Fabric: OSF), 고급 마이크로제어기 버스 아키텍처(Advanced Microcontroller Bus Architecture: AMBA) 상호연결, 다차원 메시 패브릭(multi-dimensional mesh fabric), 또는 다른 알려진 상호연결 아키텍처)이 유사한 방식으로 활용될 수 있다.
또한 묘사된 바와 같이, 시스템 에이전트 도메인(1610)은 연관된 디스플레이의 제어 및 이에 대한 인터페이스를 제공하는 것인 디스플레이 엔진(1612)을 포함한다. 시스템 에이전트 도메인(1610)은 다음과 같은 다른 유닛을 포함할 수 있다: 시스템 메모리(가령, 다수의 DIMM으로써 구현된 DRAM)로의 인터페이스를 제공하는 집적 메모리 제어기(integrated memory controller)(1620); 메모리 일관성 동작을 수행하는 일관성 로직(coherence logic)(1622). 프로세서와 다른 회로망 간의 상호연결을 가능하게 하기 위해 다수의 인터페이스가 존재할 수 있다. 예를 들어, 하나의 실시예에서 하나 이상의 PCIe™ 인터페이스(1614)뿐만 아니라 적어도 하나의 직접 미디어 인터페이스(Direct Media Interface: DMI)(1616) 인터페이스가 제공된다. 디스플레이 엔진 및 이들 인터페이스는 전형적으로는 PCIe™ 브리지(1618)를 통하여 메모리에 커플링된다. 더 나아가, 추가적인 프로세서 또는 다른 회로망과 같은 다른 에이전트들 간의 통신을 제공하기 위하여, 하나 이상의 다른 인터페이스가 제공될 수 있다.
본 발명은 한정된 수의 실시예에 관해 기술되었으나, 당업자는 이로부터 많은 수정 및 변경을 인식할 것이다. 부기된 청구항은 이 본 발명의 진정한 사상 및 범주에 속하는 모든 그러한 수정 및 변경을 포섭하는 것으로 의도된다.
설계는 창안부터 시뮬레이션까지 제작까지 다양한 스테이지를 거칠 수 있다. 설계를 표현하는 데이터는 다수의 방식으로 설계를 표현할 수 있다. 첫째, 시뮬레이션에서 유용한 바와 같이, 하드웨어는 하드웨어 서술 언어(Hardware Description Language: HDL) 또는 다른 기능적 서술 언어를 사용하여 표현될 수 있다. 추가적으로, 로직 및/또는 트랜지스터 게이트가 있는 회로 레벨 모델은 설계 프로세스의 몇몇 스테이지에서 산출될 수 있다. 나아가, 대부분의 설계는, 어떤 스테이지에서, 하드웨어 모델로 다양한 디바이스의 물리적 배치를 표현하는 데이터의 레벨에 도달할 수 있다. 종래의 반도체 제작 기법이 사용되는 경우에, 하드웨어 모델을 표현하는 데이터는 집적 회로를 산출하는 데에 사용되는 마스크를 위한 상이한 마스크 계층 상의 다양한 특징의 존재 또는 부재를 명시하는 데이터일 수 있다.
몇몇 구현에서, 소프트웨어 기반 하드웨어 모델, 그리고 HDL 및 다른 기능적 서술 언어 객체는 다른 예들보다도 레지스터 전송 언어(Register Transfer Language: RTL) 파일을 포함할 수 있다. 그러한 객체는 머신 파싱가능(machine-parsable)할 수 있어서 설계 도구는 HDL 객체(또는 모델)를 받아들이고, 서술된 하드웨어의 속성을 위해 HDL 객체를 파싱하며, 객체로부터 물리적 회로 및/또는 온칩 레이아웃(layout)을 정할 수 있다. 설계 도구의 출력은 물리적 디바이스를 제조하기 위해 사용될 수 있다. 예를 들면, 설계 도구는 HDL 객체 내에 모델링된 시스템을 실현하기 위해서 구현될 다른 속성들보다도 버스 폭, 레지스터(크기 및 유형을 포함함), 메모리 블록, 물리적 링크 경로, 패브릭 토폴로지와 같은, 다양한 하드웨어 및/또는 펌웨어 요소의 구성을 HDL 객체로부터 판정할 수 있다. 설계 도구는 시스템 온 칩(System on Chip: SoC) 및 다른 하드웨어 디바이스의 토폴로지 및 패브릭 구성을 판정하기 위한 도구를 포함할 수 있다. 몇몇 사례에서, HDL 객체는 서술된 하드웨어를 제조하기 위해 제조 장비에 의해 사용될 수 있는 모델 및 설계 파일을 개발하기 위한 기반으로서 사용될 수 있다. 실제로, HDL 객체 그 자체는 서술된 하드웨어를 야기하는 제조 시스템 소프트웨어에 대한 입력으로서 제공될 수 있다.
설계의 어떠한 표현에서든, 데이터는 임의의 형태의 머신 판독가능 매체(machine readable medium) 내에 저장될 수 있다. 메모리 또는 자기적 또는 광학 적 스토리지(이를테면 디스크)는 정보(그러한 정보를 송신하기 위해 변조되거나 그렇지 않으면 생성된 광학적 또는 전기적 파동을 통하여 송신됨)를 저장하기 위한 머신 판독가능 매체일 수 있다. 코드 또는 설계를 나타내거나 전달하는 전기적 반송파가 송신되는 경우, 전기적 신호의 복사, 버퍼링 또는 재전송이 수행되는 한, 새로운 사본이 만들어진다. 그러므로, 통신 제공자 또는 네트워크 제공자는 본 개시의 실시예의 기법을 구현하는, 반송파 내에 인코딩된 정보와 같은 항목(article)을, 적어도 일시적으로, 유형적인(tangible) 머신 판독가능 매체 상에 저장할 수 있다.
본 문서에서 사용되는 바와 같이 모듈은 하드웨어, 소프트웨어 및/또는 펌웨어의 임의의 조합을 나타낸다. 예로서, 모듈은 마이크로제어기에 의해 실행되도록 적응된 코드를 저장하기 위한 비일시적 매체(non-transitory medium)와 연관된, 마이크로제어기와 같은 하드웨어를 포함한다. 따라서, 하나의 실시예에서 모듈에 대한 언급은 비일시적 매체 상에 유지될 코드를 인지 및/또는 실행하도록 구체적으로 구성된 하드웨어를 나타낸다. 나아가, 다른 실시예에서, 모듈의 사용은 사전결정된 동작을 수행하기 위해 마이크로제어기에 의해 실행되도록 구체적으로 적응된 코드를 비일시적 매체가 포함함을 나타낸다. 그리고 추론될 수 있는 바와 같이, 또 다른 실시예에서, (이 예에서의) 모듈이라는 용어는 마이크로제어기 및 비일시적 매체의 조합을 나타낼 수 있다. 흔히 별개로 보여지는 모듈 경계는 통상적으로 달라지고 잠재적으로는 중첩된다. 예를 들어, 제1 및 제2 모듈은 잠재적으로는 어떤 독립적인 하드웨어, 소프트웨어 또는 펌웨어를 보유하되, 하드웨어, 소프트웨어, 펌웨어 또는 이들의 조합을 공유할 수 있다. 하나의 실시예에서, 로직이라는 용어의 사용은 하드웨어, 이를테면 트랜지스터, 레지스터 또는 다른 하드웨어, 이를테면 프로그램가능 로직 디바이스를 포함한다.
'하도록 구성된'이라는 구문의 사용은, 하나의 실시예에서, 지정되거나 결정된 작업을 수행하기 위해 장치, 하드웨어, 로직 또는 요소를 배열하는 것, 합해 두는 것, 제조하는 것, 판매하기를 제안하는 것, 수입하는 것 및/또는 설계하는 것을 나타낸다. 이 예에서, 동작하고 있지 않은 장치 또는 그것의 요소는 만약 그것이 지정된 작업을 수행하도록 설계, 커플링 및/또는 상호연결되는 경우 여전히 상기 지정된 작업을 수행'하도록 구성된' 것이다. 순전히 설명적인 예로서, 로직 게이트(logic gate)는 동작 중에 0 또는 1을 제공할 수 있다. 그러나 클록에 인에이블 신호(enable signal)를 제공'하도록 구성된' 로직 게이트는 1 또는 0을 제공할 수 있는 모든 잠재적인 로직 게이트를 포함하는 것은 아니다. 대신에, 그 로직 게이트는 동작 중에 1 또는 0 출력이 클록을 인에이블할(enable) 어떤 방식으로 커플링된 것이다. '하도록 구성된'이라는 용어의 사용은 동작을 요구하지 않지만, 대신 장치, 하드웨어 및/또는 요소의 잠재 상태(latent state)에 초점을 맞춘다(잠재 상태에서 장치, 하드웨어 및/또는 요소는 장치, 하드웨어 및/또는 요소가 동작하고 있는 경우 특정한 작업을 수행하도록 설계됨)는 점에 다시 한 번 유의하시오.
나아가, '하는 것임', '하는 것이 가능함', 및 또는 '하도록 동작가능함'이라는 구문의 사용은 하나의 실시예에서 어떤 장치, 로직, 하드웨어 및/또는 요소(지정된 방식으로 그 장치, 로직, 하드웨어 및/또는 요소의 사용을 가능하게 하는 그러한 방식으로 설계됨)를 나타낸다. 하는 것임, 하는 것이 가능함 또는 하도록 동작가능함의 사용은 하나의 실시예에서 장치, 로직, 하드웨어 및/또는 요소의 잠재 상태(여기서 장치, 로직, 하드웨어 및/또는 요소가 동작하고 있지 않으나 지정된 방식으로 장치의 사용을 가능하게 하는 그러한 방식으로 설계됨)를 나타낸다는 점에 앞서와 같이 유의하시오.
본 문서에서 사용된 바와 같이, 값은 수(number), 상태, 논리적 상태 또는 이진 논리적 상태의 임의의 알려진 표현을 포함한다. 흔히, 로직 레벨, 로직 값, 또는 논리적 값의 사용은 이진 로직 상태를 간단히 표현하는 1 및 0으로도 지칭된다. 예를 들어, 1은 높은 로직 레벨을 나타내고 0은 낮은 로직 레벨을 나타낸다. 하나의 실시예에서, 저장 셀(storage cell), 이를테면 트랜지스터 또는 플래시 셀은 단일의 논리적 값 또는 다수의 논리적 값을 유지하는 것이 가능할 수 있다. 그러나, 컴퓨터 시스템에서의 값의 다른 표현이 사용되었다. 예를 들어 십진수 10은 1010이라는 이진 값 및 16진수 문자 A로 표현될 수도 있다. 따라서, 값은 컴퓨터 시스템 내에 유지될 수 있는 정보의 임의의 표현을 포함한다.
더욱이, 상태는 값 또는 값의 부분에 의해 표현될 수 있다. 예로서, 제1 값, 이를테면 논리적 1은 디폴트(default) 또는 초기 상태를 표현할 수 있으나, 제2 값, 이를테면 논리적 0은 비 디폴트 상태를 표현할 수 있다. 추가로, 재설정 및 설정이라는 용어는 하나의 실시예에서 각각 디폴트 및 갱신된 값 또는 상태를 나타낸다. 예를 들어, 잠재적으로 디폴트 값은 높은 논리적 값, 즉 재설정을 포함하나, 갱신된 값은 잠재적으로는 낮은 논리적 값, 즉 설정을 포함한다. 임의의 개수의 상태를 표현하기 위해 값들의 임의의 조합이 활용될 수 있음에 유의하시오.
앞서 개진된 방법, 하드웨어, 소프트웨어, 펌웨어 또는 코드의 실시예는 처리 요소에 의해 실행가능한, 머신 액세스가능, 머신 판독가능, 컴퓨터 액세스가능, 또는 컴퓨터 판독가능 매체 상에 저장된 명령어 또는 코드를 통하여 구현될 수 있다. 비일시적 머신 액세스가능/판독가능 매체는 컴퓨터 또는 전자 시스템과 같은 머신에 의해 판독가능한 형태로 정보를 제공(즉, 저장 및/또는 송신)하는 임의의 메커니즘을 포함한다. 예를 들어, 비일시적 머신 액세스가능 매체는, 랜덤 액세스 메모리(Random-Access Memory: RAM), 이를테면 정적 RAM(Static RAM: SRAM) 또는 동적 RAM(Dynamic RAM: DRAM); ROM; 자기적 또는 광학적 저장 매체; 플래시 메모리 디바이스; 전기적 저장 디바이스; 광학적 저장 디바이스; 음향적(acoustical) 저장 디바이스; 일시적인 (전파되는(propagated)) 신호(가령, 반송파, 적외선 신호, 디지털 신호)로부터 수신된 정보를 유지하기 위한 다른 형태의 저장 디바이스; 기타 등등(이들은 비일시적 매체(이로부터 정보를 수신할 수 있음)와 구별되어야 함)을 포함한다.
발명의 실시예를 수행하기 위한 로직을 프로그램하는 데에 사용되는 명령어는 시스템 내의 메모리, 이를테면 DRAM, 캐시, 플래시 메모리 또는 다른 스토리지 내에 저장될 수 있다. 나아가, 명령어는 네트워크를 통하여 또는 다른 컴퓨터 판독가능 매체에 의하여 배포될 수 있다. 그러므로 머신 판독가능 매체는 머신(가령, 컴퓨터)에 의해 판독가능한 형태로 정보를 저장하거나 송신하기 위한 임의의 메커니즘을 포함할 수 있으나, 플로피 디스켓, 광 디스크, 콤팩트 디스크 판독 전용 메모리(Compact Disc, Read-Only Memory: CD-ROM), 그리고 자기-광 디스크, 판독 전용 메모리(Read-Only Memory: ROM), 랜덤 액세스 메모리(Random Access Memory: RAM), 소거가능 프로그램가능 판독 전용 메모리(Erasable Programmable Read-Only Memory: EPROM), 전기적 소거가능 프로그램가능 판독 전용 메모리(Electrically Erasable Programmable Read-Only Memory: EEPROM), 자기 또는 광학 카드, 플래시 메모리, 또는 전기적, 광학적, 음향적 또는 다른 형태의 전파되는 신호(가령, 반송파, 적외선 신호, 디지털 신호 등등)을 통한 인터넷 상에서의 정보의 송신에서 사용되는 유형적인 머신 판독가능 스토리지에 한정되는 것은 아니다. 이에 따라, 컴퓨터 판독가능 매체는 전자적 명령어 또는 정보를 머신(가령, 컴퓨터)에 의해 판독가능한 형태로 저장하거나 송신하는 데에 적합한 임의의 유형의 유형적인 머신 판독가능 매체를 포함한다.
이하의 예는 이 명세서에 따른 실시예에 관한 것이다. 하나 이상의 실시예는 메모리 액세스 링크 프로토콜에 따라 링크를 통해 공유 메모리와 연관된 로드/저장 유형 동작(load/store-type operation)에 대응하는 데이터를 발신(위 메모리 액세스 링크 프로토콜은 다른 상이한 링크 프로토콜 상에 오버레이되는 것임)하고, 저전력 상태에 진입하기 위한 요청을 발신(위 요청은 토큰의 필드 내에 인코딩된 데이터 값을 포함하는 것이되, 위 토큰은 패킷 데이터의 시작을 나타내는 것이고 또한 위 토큰 후에 발신될 후속 데이터가 위 다른 링크 프로토콜 및 위 메모리 액세스 링크 프로토콜 중 하나에 따른 데이터를 포함하는지를 나타내는 것임)하는 장치, 시스템, 머신 판독가능 스토리지, 머신 판독가능 매체, 하드웨어 및/또는 소프트웨어 기반 로직, 그리고 방법을 제공할 수 있다.
적어도 하나의 예에서, 위 다른 링크 프로토콜은 범용 입출력 상호연결 프로토콜을 포함한다.
적어도 하나의 예에서, 위 토큰은 위 범용 입출력 상호연결 프로토콜에 따라 정의된다.
적어도 하나의 예에서, 위 토큰의 제1 필드는 위 후속 데이터가 메모리 액세스 링크 프로토콜 데이터 또는 범용 입출력 상호연결 프로토콜 데이터를 포함하는지를 나타낸다.
적어도 하나의 예에서, 위 후속 데이터가 메모리 액세스 링크 프로토콜 데이터를 포함하는 것임을 위 제1 필드가 나타내는 경우 위 데이터 값은 위 토큰의 제2 필드 내에 인코딩되는 것이다.
적어도 하나의 예에서, 위 데이터 값은 위 메모리 액세스 링크 프로토콜 하에서 정의되는 인코딩을 포함하고 위 제2 필드는 위 범용 입출력 상호연결 프로토콜의 물리 계층을 통해 위 인코딩을 터널링하기 위해 사용된다.
적어도 하나의 예에서, 위 링크 상에서 발신되는 데이터는 위 토큰의 인스턴스(instance)들에 기반하여 메모리 액세스 링크 프로토콜 데이터 및 범용 입출력 상호연결 프로토콜 데이터 사이에서 토글하는 것이다.
적어도 하나의 예에서, 전력 관리 로직은 위 저전력 상태에 진입하기 위한 위 요청을 발신하기 전에 위 범용 입출력 상호연결 프로토콜의 데이터는 발신되기를 기다리고 있는지를 체크하는(check) 것이다.
적어도 하나의 예에서, 전력 관리 로직은 위 범용 입출력 상호연결 프로토콜 데이터가 발신될 때까지 위 저전력 상태에 진입하기 위한 위 요청을 발신하기를 기다리는 것이다.
적어도 하나의 예에서, 위 메모리 액세스 링크 프로토콜 또는 범용 입출력 상호연결 프로토콜의 링크 계층이은 물리 계층의 저전력 상태로의 진입을 트리거할(trigger) 수 있다.
적어도 하나의 예에서, 위 범용 입출력 상호연결 프로토콜에서 저전력 상태에 진입하기 위해 사용되는 신호는 위 메모리 액세스 링크 프로토콜에서 저전력 상태에 진입하기 위해 사용되는 신호와 상이하다.
적어도 하나의 예에서, 위 메모리 액세스 링크 프로토콜은 위 메모리 액세스 링크 프로토콜에서 위 저전력 상태에 진입하기 위한 위 신호를 발신할 주기적인 제어 윈도우를 정의한다.
하나 이상의 실시예는 링크를 통해 데이터 스트림을 수신하는 장치, 시스템, 머신 판독가능 스토리지, 머신 판독가능 매체, 하드웨어 및/또는 소프트웨어 기반 로직, 그리고 방법을 제공할 수 있다. 위 데이터 스트림은 토큰을 포함할 수 있는데, 이는 위 토큰에 후속하는 데이터가 적어도 두 개의 대체적(alternate) 프로토콜 중 하나에 따른 데이터를 포함함을 나타내는 제1 필드를 포함한다. 위 적어도 두 개의 대체적 프로토콜은 메모리 액세스 프로토콜 및 범용 입출력 프로토콜을 포함할 수 있다. 위 링크를 통해 발신되는 모든 데이터는 위 범용 입출력 프로토콜의 물리 계층을 통해 발신되는 것이며, 위 토큰의 제2 필드는 저전력 링크 상태에 진입하기 위해 위 메모리 액세스 프로토콜의 링크 계층에 의한 요청을 나타내도록 인코딩되는 것이다. 위 저전력 링크 상태로의 진입은 위 요청에 기반하여 개시될 수 있다.
적어도 하나의 예에서, 위 요청에 대하여 확인응답(acknowledgement) 및 부정확인응답(negative acknowledgement) 중 하나를 포함하는 응답이 발신되고, 위 응답은 위 토큰의 다른 인스턴스에서 발신되는 것이다.
적어도 하나의 예에서, 위 응답은 위 토큰의 위 다른 인스턴스 내의 위 제2 필드의 인스턴스에서 발신되는 것이다.
하나 이상의 실시예는 제1 프로토콜의 링크 계층과, 상이한 제2 프로토콜의 링크 계층과, 적어도 위 제2 프로토콜의 데이터를 발신하기 위한 위 제1 프로토콜의 물리 계층과, 심을 제공하는 장치, 시스템, 머신 판독가능 스토리지, 머신 판독가능 매체, 하드웨어 및/또는 소프트웨어 기반 로직을 제공할 수 있다. 위 심은 토큰(위 토큰에 후속하는 데이터가 제1 프로토콜 데이터 또는 제2 프로토콜 데이터 중 하나를 포함함을 나타내는 제1 필드를 포함함)을 포함하는 데이터 스트림을 수신할 수 있고, 위 토큰의 제2 필드는 저전력 링크 상태에 진입하기 위해 위 제2 프로토콜의 위 링크 계층에 의한 요청을 나타내도록 인코딩되는 것이다. 위 심은 또한 위 물리 계층으로 하여금 위 저전력 상태에 진입하게 하기 위해 위 물리 계층에 데이터를 발신할 수 있다.
적어도 하나의 예에서, 위 제1 프로토콜은 범용 입출력 상호연결 프로토콜을 포함하는 것이고 위 제2 프로토콜은 메모리 액세스 프로토콜을 포함하는 것이다.
적어도 하나의 예에서, 위 제1 프로토콜의 하나 이상의 계층 및 위 제2 프로토콜의 하나 이상의 계층이 또한 포함된다.
적어도 하나의 예에서, 위 제1 프로토콜의 위 링크 계층은 디스에이블된다(disabled).
이 명세서를 통틀어 "하나의 실시예" 또는 "일 실시예"에 대한 언급은 그 실시예와 관련하여 기술된 특정한 특징, 구조 또는 특성이 본 발명의 적어도 하나의 실시예에 포함됨을 의미한다. 그러므로, 이 명세서를 통틀어 다양한 자리에서 "하나의 실시예에서" 또는 "일 실시예에서"라는 구문의 출현은 반드시 전부 동일한 실시예를 나타내고 있는 것은 아니다. 나아가, 특정한 특징, 구조 또는 특성은 하나 이상의 실시예에서 임의의 적합한 방식으로 조합될 수 있다.
전술한 명세서에서, 상세한 설명은 특정한 예시적인 실시예를 참조하여 주어졌다. 그러나, 이에 대하여는 부기된 청구항에 개진된 바와 같은 본 발명의 더 넓은 사상 및 범주로부터 벗어나지 않고 다양한 수정 및 변경이 행해질 수 있음이 분명할 것이다. 이에 따라, 명세서 및 도면은 제한적인 의미보다는 설명적인 의미로 간주되어야 한다. 나아가, 실시예 및 다른 예시적인 언어의 전술한 사용이 반드시 동일한 실시예 또는 동일한 예를 나타내는 것은 아니고, 잠재적으로는 동일한 실시예뿐만 아니라, 상이하고 별개인 실시예를 나타낼 수 있다.

Claims (20)

  1. 공유 메모리(shared memory)와 연관된 로드/저장 유형 동작(load/store-type operation)에 대응하는 데이터를 발신하는 송신기 -상기 데이터는 메모리 액세스 링크 프로토콜(memory access link protocol)에 따라 링크를 통해 발신되고 상기 메모리 액세스 링크 프로토콜은 다른 상이한 링크 프로토콜 상에 오버레이됨(overlaid)- 와,
    저전력 상태에 진입하기 위한 요청을 발신하는 전력 관리 로직 - 상기 요청은 토큰(token)의 필드(field) 내에 인코딩된 데이터 값을 포함하되, 상기 토큰은 패킷 데이터의 시작을 나타내고 또한 상기 토큰 후에 발신될 후속 데이터가 상기 다른 링크 프로토콜 및 상기 메모리 액세스 링크 프로토콜 중 하나에 따른 데이터를 포함하는지를 나타냄 - 을 포함하는
    장치.
  2. 제 1 항에 있어서,
    상기 다른 링크 프로토콜은 범용 입출력(Input/Output: I/O) 상호연결 프로토콜을 포함하는
    장치.
  3. 제 2 항에 있어서,
    상기 토큰은 상기 범용 입출력 상호연결 프로토콜에 따라 정의되는
    장치.
  4. 제 3 항에 있어서,
    상기 토큰의 제1 필드는 상기 후속 데이터가 메모리 액세스 링크 프로토콜 데이터 또는 범용 입출력 상호연결 프로토콜 데이터를 포함하는지를 나타내는
    장치.
  5. 제 4 항에 있어서,
    상기 후속 데이터가 메모리 액세스 링크 프로토콜 데이터를 포함함을 상기 제1 필드가 나타내는 경우 상기 데이터 값은 상기 토큰의 제2 필드 내에 인코딩되는
    장치.
  6. 제 5 항에 있어서,
    상기 데이터 값은 상기 메모리 액세스 링크 프로토콜 하에서 정의되는 인코딩을 포함하고 상기 제2 필드는 상기 범용 입출력 상호연결 프로토콜의 물리 계층을 통해 상기 인코딩을 터널링하기(tunnel) 위해 사용되는
    장치.
  7. 제 2 항에 있어서,
    상기 링크 상에서 발신되는 데이터는 상기 토큰의 인스턴스에 기반하여 메모리 액세스 링크 프로토콜 데이터와 범용 입출력 상호연결 프로토콜 데이터 사이에서 토글(toggle)하는
    장치.
  8. 제 7 항에 있어서,
    상기 전력 관리 로직은 상기 저전력 상태에 진입하기 위한 요청을 발신하기 전에 상기 범용 입출력 상호연결 프로토콜의 데이터가 발신되기를 기다리고 있는지를 체크하는
    장치.
  9. 제 8 항에 있어서,
    상기 전력 관리 로직은 상기 범용 입출력 상호연결 프로토콜 데이터가 발신될 때까지 상기 저전력 상태에 진입하기 위한 요청을 발신하기를 기다리는
    장치.
  10. 제 7 항에 있어서,
    상기 메모리 액세스 링크 프로토콜 또는 범용 입출력 상호연결 프로토콜의 링크 계층은 물리 계층의 저전력 상태로의 진입을 트리거(trigger)할 수 있는
    장치.
  11. 제 10 항에 있어서,
    상기 범용 입출력 상호연결 프로토콜에서 저전력 상태에 진입하기 위해 사용되는 신호는 상기 메모리 액세스 링크 프로토콜에서 저전력 상태에 진입하기 위해 사용되는 신호와 상이한
    장치.
  12. 제 11 항에 있어서,
    상기 메모리 액세스 링크 프로토콜은 상기 메모리 액세스 링크 프로토콜에서 상기 저전력 상태에 진입하기 위한 상기 신호를 발신할 주기적인 제어 윈도우를 정의하는
    장치.
  13. 링크를 통해 데이터 스트림(data stream)을 수신하는 수신기 -상기 데이터 스트림은 토큰을 포함하고, 상기 토큰은 상기 토큰에 후속하는 데이터가 적어도 두 개의 대체적(alternate) 프로토콜 중 하나에 따른 데이터를 포함함을 나타내는 제1 필드를 포함하며, 상기 적어도 두 개의 대체적 프로토콜은 메모리 액세스 프로토콜 및 범용 입출력 프로토콜을 포함하고, 상기 링크를 통해 발신되는 모든 데이터는 상기 범용 입출력 프로토콜의 물리 계층을 통해 발신되며, 상기 토큰의 제2 필드는 저전력 링크 상태에 진입하기 위해 상기 메모리 액세스 프로토콜의 링크 계층에 의한 요청을 나타내도록 인코딩됨- 와,
    상기 요청에 기반하여 상기 저전력 링크 상태로의 진입을 개시하는 프로토콜 로직을 포함하는
    장치.
  14. 제 13 항에 있어서,
    상기 요청에 대한 응답을 발신하는 송신기를 더 포함하되, 상기 응답은 확인응답(acknowledgement)과 부정확인응답(negative acknowledgement) 중 하나를 포함하고, 상기 응답은 상기 토큰의 다른 인스턴스에서 발신되는
    장치.
  15. 제 14 항에 있어서,
    상기 응답은 상기 토큰의 다른 인스턴스 내의 상기 제2 필드의 인스턴스에서 발신되는
    장치.
  16. 링크를 통해 데이터 스트림을 수신하는 단계 -상기 데이터 스트림은 토큰의 제1 인스턴스를 포함하고, 상기 토큰의 인스턴스들은 상기 토큰에 후속하는 데이터가 적어도 두 개의 대체적 프로토콜 중 하나에 따른 데이터를 포함함을 나타내는 제1 필드를 포함하며, 상기 적어도 두 개의 대체적 프로토콜은 메모리 액세스 프로토콜 및 범용 입출력 프로토콜을 포함하고, 상기 링크를 통해 발신되는 모든 데이터는 상기 범용 입출력 프로토콜의 물리 계층을 통해 발신되며, 상기 토큰의 제1 인스턴스의 제2 필드는 저전력 링크 상태에 진입하기 위해 상기 메모리 액세스 프로토콜의 링크 계층에 의한 요청을 나타내도록 인코딩됨- 와,
    상기 요청에 대한 응답을 발신하는 단계 -상기 응답은 확인응답과 부정확인응답 중 하나를 포함하고, 상기 응답은 상기 토큰의 다른 인스턴스에서 발신됨- 와,
    상기 요청에 기반하여 상기 저전력 링크 상태로의 진입을 개시하는 단계를 포함하는
    방법.
  17. 제1 프로토콜의 링크 계층과,
    상이한 제2 프로토콜의 링크 계층과,
    상기 제1 프로토콜의 물리 계층 -상기 제2 프로토콜의 데이터는 상기 제1 프로토콜의 물리 계층을 통해 발신됨- 과,
    데이터 스트림을 수신 -상기 데이터 스트림은 토큰을 포함하고, 상기 토큰은 상기 토큰에 후속하는 데이터가 제1 프로토콜 데이터 또는 제2 프로토콜 데이터 중 하나를 포함함을 나타내는 제1 필드를 포함하며, 상기 토큰의 제2 필드는 저전력 링크 상태에 진입하기 위해 상기 제2 프로토콜의 링크 계층에 의한 요청을 나타내도록 인코딩됨- 하고, 상기 물리 계층으로 하여금 상기 저전력 상태에 진입하게 하기 위해 상기 물리 계층에 데이터를 발신하는 심(shim)을 포함하는
    장치.
  18. 제 17 항에 있어서,
    상기 제1 프로토콜은 범용 입출력 상호연결 프로토콜을 포함하고 상기 제2 프로토콜은 메모리 액세스 프로토콜을 포함하는
    장치.
  19. 제 17 항에 있어서,
    상기 제1 프로토콜의 하나 이상의 계층 및 상기 제2 프로토콜의 하나 이상의 계층을 더 포함하는
    장치.
  20. 제 17 항에 있어서,
    상기 제1 프로토콜의 링크 계층은 디스에이블된(disabled)
    장치.
KR1020150160900A 2014-12-18 2015-11-17 공유 메모리 링크 내의 저전력 진입 KR101848379B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US14/576,125 2014-12-18
US14/576,125 US9921768B2 (en) 2014-12-18 2014-12-18 Low power entry in a shared memory link

Publications (2)

Publication Number Publication Date
KR20160074390A true KR20160074390A (ko) 2016-06-28
KR101848379B1 KR101848379B1 (ko) 2018-05-28

Family

ID=54703757

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020150160900A KR101848379B1 (ko) 2014-12-18 2015-11-17 공유 메모리 링크 내의 저전력 진입

Country Status (6)

Country Link
US (1) US9921768B2 (ko)
EP (1) EP3035198B1 (ko)
JP (1) JP6225154B2 (ko)
KR (1) KR101848379B1 (ko)
CN (1) CN105718390B (ko)
TW (1) TWI616890B (ko)

Families Citing this family (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9940287B2 (en) * 2015-03-27 2018-04-10 Intel Corporation Pooled memory address translation
US10503684B2 (en) * 2016-07-01 2019-12-10 Intel Corporation Multiple uplink port devices
US10034407B2 (en) * 2016-07-22 2018-07-24 Intel Corporation Storage sled for a data center
US10080215B2 (en) * 2016-08-05 2018-09-18 Nokia Technologies Oy Transportation of user plane data across a split fronthaul interface
US10231254B2 (en) * 2016-08-05 2019-03-12 Nokia Technologies Oy 5G cloud RAN method for symbol by symbol bit streaming
US10152446B2 (en) * 2016-10-01 2018-12-11 Intel Corporation Link-physical layer interface adapter
CN112506568A (zh) * 2016-12-31 2021-03-16 英特尔公司 用于异构计算的系统、方法和装置
JP2019047146A (ja) 2017-08-29 2019-03-22 東芝メモリ株式会社 電子機器および電力管理方法
US11263143B2 (en) * 2017-09-29 2022-03-01 Intel Corporation Coherent accelerator fabric controller
CN107844435A (zh) * 2017-11-08 2018-03-27 北京锐安科技有限公司 一种缓存系统、方法及装置
US10528111B2 (en) * 2017-12-11 2020-01-07 Micron Technology, Inc. Apparatuses and methods for indicating an operation type associated with a power management event
CN108415869B (zh) * 2018-02-28 2020-06-26 北京零壹空间科技有限公司 串行数据的发送方法及装置
CN110275670B (zh) 2018-03-16 2021-02-05 华为技术有限公司 控制存储设备中数据流的方法、装置、存储设备及存储介质
US20190332558A1 (en) * 2018-04-25 2019-10-31 Qualcomm Incorporated Low-power states in a multi-protocol tunneling environment
US11467999B2 (en) 2018-06-29 2022-10-11 Intel Corporation Negotiating asymmetric link widths dynamically in a multi-lane link
KR102655094B1 (ko) * 2018-11-16 2024-04-08 삼성전자주식회사 메모리를 공유하는 이종의 프로세서들을 포함하는 스토리지 장치 및 그것의 동작 방법
US10771189B2 (en) * 2018-12-18 2020-09-08 Intel Corporation Forward error correction mechanism for data transmission across multi-lane links
US11637657B2 (en) 2019-02-15 2023-04-25 Intel Corporation Low-latency forward error correction for high-speed serial links
US11249837B2 (en) 2019-03-01 2022-02-15 Intel Corporation Flit-based parallel-forward error correction and parity
US10846247B2 (en) * 2019-03-05 2020-11-24 Intel Corporation Controlling partial link width states for multilane links
US10776302B2 (en) * 2019-04-02 2020-09-15 Intel Corporation Virtualized link states of multiple protocol layer package interconnects
DE102019111881A1 (de) * 2019-05-07 2020-11-12 Infineon Technologies Ag Verfahren und vorrichtung zum senden von daten gemäss einem signalzeitablauf
US11296994B2 (en) 2019-05-13 2022-04-05 Intel Corporation Ordered sets for high-speed interconnects
US11442876B2 (en) * 2019-05-30 2022-09-13 Intel Corporation System, apparatus and method for synchronizing multiple virtual link states over a package interconnect
US11836101B2 (en) 2019-11-27 2023-12-05 Intel Corporation Partial link width states for bidirectional multilane links
US11740958B2 (en) 2019-11-27 2023-08-29 Intel Corporation Multi-protocol support on common physical layer
US11588745B2 (en) 2020-08-31 2023-02-21 Micron Technology, Inc. Early credit return for credit-based flow control
US11580044B2 (en) 2020-08-31 2023-02-14 Micron Technology, Inc. Network credit return mechanisms
US11362939B2 (en) 2020-08-31 2022-06-14 Micron Technology, Inc. Flow control for a multiple flow control unit interface
US20210240655A1 (en) * 2020-11-16 2021-08-05 Intel Corporation Source ordering in device interconnects
CN115658569B (zh) * 2022-12-08 2023-04-14 井芯微电子技术(天津)有限公司 Amp多核处理器间中断与共享存储方法、系统及设备

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7433702B2 (en) * 2000-01-28 2008-10-07 Telefonaktiebolaget Lm Ericsson (Publ) Power status for wireless communications
US20020165975A1 (en) * 2001-05-07 2002-11-07 Michael Abbott Dynamic mapping of communication protocols
US20060045098A1 (en) * 2004-08-31 2006-03-02 Krause Michael R System for port mapping in a network
US7209991B2 (en) * 2004-09-03 2007-04-24 Intel Corporation Packet processing in switched fabric networks
US8041859B2 (en) * 2007-11-05 2011-10-18 Honywell International Inc. Apparatus and method for connectivity in networks capable of non-disruptively disconnecting peripheral devices
US8340111B1 (en) * 2008-03-26 2012-12-25 Marvell Israel (M.I.S.L) Ltd. Method and apparatus for power reduction in network
US7861027B2 (en) * 2008-05-30 2010-12-28 Intel Corporation Providing a peripheral component interconnect (PCI)-compatible transaction level protocol for a system on a chip (SoC)
US8522061B2 (en) * 2009-03-05 2013-08-27 Entropic Communications, Inc. Method and apparatus of power management of a node in home entertainment network by shifting from a normal state into either a first low power state based on the traffic at the node or a second low power state upon receipt of a message granting a request for the second low power state at the node
US8719547B2 (en) 2009-09-18 2014-05-06 Intel Corporation Providing hardware support for shared virtual memory between local and remote physical memory
US8751714B2 (en) * 2010-09-24 2014-06-10 Intel Corporation Implementing quickpath interconnect protocol over a PCIe interface
US8775713B2 (en) 2011-12-27 2014-07-08 Intel Corporation Multi-protocol tunneling over an I/O interconnect
US8446903B1 (en) * 2012-05-22 2013-05-21 Intel Corporation Providing a load/store communication protocol with a low power physical unit
US8972640B2 (en) * 2012-06-27 2015-03-03 Intel Corporation Controlling a physical link of a first protocol using an extended capability structure of a second protocol
DE112013007751B3 (de) * 2012-10-22 2023-01-12 Intel Corporation Hochleistungs-Zusammenschaltungs-Bitübertragungsschicht
US9189051B2 (en) * 2012-12-14 2015-11-17 International Business Machines Corporation Power reduction by minimizing bit transitions in the hamming distances of encoded communications

Also Published As

Publication number Publication date
EP3035198A1 (en) 2016-06-22
CN105718390A (zh) 2016-06-29
US20160179427A1 (en) 2016-06-23
TWI616890B (zh) 2018-03-01
CN105718390B (zh) 2018-12-18
JP6225154B2 (ja) 2017-11-01
JP2016123076A (ja) 2016-07-07
KR101848379B1 (ko) 2018-05-28
TW201626376A (zh) 2016-07-16
EP3035198B1 (en) 2017-08-23
US9921768B2 (en) 2018-03-20

Similar Documents

Publication Publication Date Title
KR101848379B1 (ko) 공유 메모리 링크 내의 저전력 진입
US12099458B2 (en) Pooled memory address translation
US11755486B2 (en) Shared buffered memory routing
US20220012189A1 (en) Sharing memory and i/o services between nodes
US11657015B2 (en) Multiple uplink port devices

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
AMND Amendment
E601 Decision to refuse application
AMND Amendment
X701 Decision to grant (after re-examination)
GRNT Written decision to grant