[go: up one dir, main page]

KR20160051883A - 가상 재시도 큐 - Google Patents

가상 재시도 큐 Download PDF

Info

Publication number
KR20160051883A
KR20160051883A KR1020167008971A KR20167008971A KR20160051883A KR 20160051883 A KR20160051883 A KR 20160051883A KR 1020167008971 A KR1020167008971 A KR 1020167008971A KR 20167008971 A KR20167008971 A KR 20167008971A KR 20160051883 A KR20160051883 A KR 20160051883A
Authority
KR
South Korea
Prior art keywords
request
dependency
logic
retry
queue
Prior art date
Legal status (The legal status 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 status listed.)
Granted
Application number
KR1020167008971A
Other languages
English (en)
Other versions
KR101775569B1 (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 KR20160051883A publication Critical patent/KR20160051883A/ko
Application granted granted Critical
Publication of KR101775569B1 publication Critical patent/KR101775569B1/ko
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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
    • 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/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • 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/466Transaction processing
    • 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/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Apparatus For Radiation Diagnosis (AREA)
  • Steering Control In Accordance With Driving Conditions (AREA)
  • Hardware Redundancy (AREA)
  • Advance Control (AREA)

Abstract

기아 상태 모드(starvation mode)가 진입되고, 재시도 큐 내의 제1 요청의 특정 의존성(particular dependency)이 식별된다. 이 특정 의존성이 결정되어 획득되고, 제1 요청은 이 특정 의존성의 획득에 기반하여 재시도된다.

Description

가상 재시도 큐{VIRTUAL RETRY QUEUE}
본원은 컴퓨팅 시스템에 관한 것으로, 더 구체적으로는 (전적인 것은 아니지만) 컴퓨팅 시스템에서의 일관성 제어(coherence control)에 관한 것이다.
프로세서 칩은 최근 수십 년간 상당히 진화했다. 다중 코어 칩의 출현은 개인용 컴퓨터 및 서버를 포함하는 컴퓨팅 장치 내에서 병렬 컴퓨팅과 그 외의 기능을 사용 가능하게 했다. 프로세서는 원래 하나의 코어를 갖도록 개발되었었다. 각각의 코어는 프로그램 명령어를 판독 및 실행할 수 있는 CPU에 독립적일 수 있다. 듀얼 코어, 쿼드 코어(quad core) 그리고 심지어 헥사 코어 프로세서가 개인용 컴퓨팅 장치를 위해 개발되었고, 반면에 고성능 서버 칩은 10개, 20개, 그리고 그 이상의 코어를 갖도록 개발되었다. 코어는 전선이나 다른 전송 매체의 온-칩 인터커넥트를 활용하는 다른 온-칩 구성요소들과 함께 상호연결될 수 있다. 코어의 고속 상호연결을 촉진하고자 하는 칩 설계자는 칩 상의 코어의 개수를 조정(scailing)하는 것에 도전할 수 있다. 특히 예를 들어 링 버스 인터커넥트(ring bus interconnect) 아키텍처를 포함한 다양한 인터커넥트 아키텍처가 개발되었다.
컴퓨팅 장치는 장치의 구성요소들 사이의 상호연결을 돕기 위해서 예컨대 PCIe(Peripheral Component Interconnect Express) 같은 인터커넥트 아키텍처를 활용할 수 있다. 인터커넥트 아키텍처는 크레디트 기반 흐름 제어(credit based flow control) 및 다른 흐름 제어 규칙을 이용하여, 장치의 자원에 대한 장치의 다양한 구성요소의 "공정한(fair)" 액세스 및 사용을 관리할 수 있다. 구성요소들이 자원에 대해 경쟁하므로, 자원에 대한 하나의 구성요소의 액세스는 이런 경쟁이나 다른 요인들로 인해 어려움을 겪는다. 예를 들자면, 교착(deadlock) 또는 무한 반복(livelock) 상태가 발생하여, 박탈당한 구성요소의 자원 기아 상태(resource starvation)를 초래한다. 동일 장치는 적시에 목표인 트랜잭션에 대해 응답을 발행할 수 있다. 컴퓨팅 장치의 구성요소의 요청 또는 응답이 순방향으로 진행하는 데 실패하는 경우를 다루기 위한 내부적 기아 상태 메커니즘(internal starvation mechanisms)이 개발되었다. 여기서 순방향이란 트랜잭션 요청(또는 완료 응답)을 발행하고 이를 적시에 완료하는(또는 성공적으로 인도하는) 구성요소의 능력을 말한다. 순방향 진행은 다양한 이유로 교착 상태에 빠지는데, 특히 예를 들면 장치가 링크에 패킷을 성공적으로 발행하는 흐름 제어 크레디트를 갖지 않는 경우에 그런 일이 발생한다.
도 1은 멀티코어 프로세서를 포함하는 컴퓨팅 시스템을 위한 블록도의 구현예를 예시한다.
도 2는 인터커넥트를 포함하는 멀티코어 시스템의 블록도를 예시한다.
도 3은 적어도 하나의 가상 재시도 큐의 특징을 사용 가능상태로 하는 로직을 포함하는 예시의 시스템 블록의 블록도를 예시한다.
도 4는 예시의 시스템 블록의 예시의 요청 가상 재시도 큐 및 응답 가상 재시도 큐를 나타내는 블록도를 예시한다.
도 5는 예시의 요청 가상 재시도 큐를 나타내는 블록도를 예시한다.
도 6은 예시의 응답 가상 재시도 큐를 나타내는 블록도를 예시한다.
도 7은 가상 재시도 큐의 이용을 위한 예시의 기술을 나타내는 흐름도를 예시한다.
도 8은 컴퓨팅 시스템을 위한 블록도의 다른 구현예를 예시한다.
여러 도면에서 같은 참조부호와 표시들은 같은 요소를 나타낸다.
다음 설명에서, 본 발명의 완전한 이해를 제공하기 위해서 다양한 구체적인 세부사항들이 설정되는데, 예를 들면 특정 유형의 프로세서와 시스템 구성, 특정 하드웨어 구성, 특정 아키텍처의 세부사항과 마이크로 아키텍처 세부사항, 특정 레지스터 구성, 특정 명령어 유형, 특정 시스템 구성요소, 특정 측정/높이, 특정 프로세서 파이프라인 스테이지 및 동작 등등이 설정된다. 그러나 본 기술분야에서 숙련된 사람이라면 본 발명을 실현하기 위해 이러한 특정 세부사항들이 반드시 활용되어야만 하는 것은 아님을 명확히 알 것이다. 다른 예로, 예컨대 특정의 프로세서 아키텍처와 대안의 프로세서 아키텍처, 설명된 알고리즘을 위한 특정 논리 회로/코드, 특정 펌웨어 코드, 특정 인터커넥트 동작, 특정 논리 구성, 특정 제조 기술 및 재료, 특정 컴파일러 구현, 코드로의 특정 알고리즘 표현, 특정 감압 및 게이트 기술/논리 및 컴퓨터 시스템의 다른 특정 동작 세부사항 같은 공지의 구성요소 또는 방법은 본 발명의 본질을 불필요하게 흐리게 하지 않도록 상세히 설명하지 않았다.
비록 다음의 실시예들이 예컨대 컴퓨팅 플랫폼 또는 마이크로프로세서 같은 특정 집적 회로에서 에너지 절약 및 에너지 효율을 참조하여 설명되었더라도, 다른 실시예들이 다른 유형의 집적 회로 및 논리 장치에 적용 가능하다. 본원에 설명된 실시예와 유사한 기술과 사상이 더 나은 에너지 효율과 에너지 절약의 이점을 가질 수 있는 다른 유형의 회로 또는 반도체 장치에도 적용 가능할 것이다. 예를 들어, 개시된 실시예는 데스크탑 컴퓨터 시스템 또는 UltrabooksTM으로 제한되지 않는다. 그리고 예컨대 휴대용 장치, 태블릿, 다른 얇은 노트북, 시스템 온 칩(SOC) 장치 및 내장형 애플리케이션 같은 다른 장치에서 이용될 수도 있다. 휴대용 장치의 일부 예들은 셀룰러 폰, 인터넷 프로토콜 장치, 디지털 카메라, PDA 및 휴대용 PC를 포함한다. 내장형 애플리케이션은 전형적으로 마이크로콘트롤러, 디지털 신호 처리기(DSP), 시스템 온 칩, 네트워크 컴퓨터(NetPC), 셋톱 박스, 네트워크 허브, 광역망(WAN) 스위치 또는 아래에 교시된 기능과 동작을 수행할 수 있는 임의의 다른 시스템을 포함한다. 더욱이, 본원에 설명된 장치, 방법 및 시스템은 물리적 컴퓨팅 장치에만 제한되지 않으며 에너지 절약 및 효율을 위한 소프트웨어 최적화에도 관련이 있을 수 있다. 아래의 설명에서 쉽게 명확해지듯이, 본원에 설명된 방법, 장치 및 시스템의 실시예들(하드웨어, 펌웨어, 소프트웨어 및 이들의 조합 중 어느 것을 참조하든 간에)은 성능 고려사항과 균형을 이룬 '녹색 기술' 미래에 매우 중요하다.
컴퓨팅 시스템이 진보함에 따라 그 구성요소들은 더 복잡해지고 있다. 그 결과, 구성요소들 사이를 접속하고 통신하는 인터커넥트 아키텍처도 점점 더 복잡해져서 대역폭 요건들이 반드시 최적의 구성요소 동작을 충족시켜야 한다. 더 나아가, 상이한 세분 시장(market segments)은 시장의 수요에 맞는 상이한 양상의 인터커넥트 아키텍처를 요구한다. 예를 들어, 서버는 더 좋은 고성능을 요구하지만 모바일 생태계는 때때로 절전을 위해 종합적인 성능을 희생할 수 있다. 그렇지만, 최대 절전을 달성하면서 할 수 있는 한 가장 좋은 성능을 제공하는 것이 대부분의 패브릭(fabrics)의 유일한 목적이다. 아래에는 본원에 설명된 발명의 양상들로부터 잠재적으로 이점을 얻는 다수의 인터커넥트가 논의된다.
도 1을 참조하면, 멀티코어 프로세서를 포함하는 컴퓨팅 시스템을 위한 블록도의 실시예가 도시된다. 프로세서(100)는 예컨대 마이크로프로세서, 내장형 프로세서, DSP, 네트워크 프로세서, 휴대용 프로세서, 애플리케이션 프로세서, 코프로세서, SOC 또는 코드를 실행하는 다른 장치처럼 임의의 프로세서나 처리 장치를 포함한다. 프로세서(100)는 일 실시예로 적어도 두 개의 코어, 즉 코어(101, 102)를 포함하는데, 이 코어(101, 102)는 비대칭 코어 또는 대칭 코어를 포함할 수 있다(예시된 실시예처럼). 그러나 프로세서(100)는 대칭 또는 비대칭일 수 있는 임의의 개수의 처리 요소를 포함할 수 있을 것이다.
일 실시예에서, 처리 요소는 소프트웨어 스레드를 지원하는 하드웨어 또는 로직을 말한다. 하드웨어 처리 요소의 예로서, 스레드 유닛, 스레드 슬롯, 스레드, 프로세스 유닛, 콘텍스트, 콘텍스트 유닛, 논리 프로세서, 하드웨어 스레드, 코어 및/또는 예컨대 실행 상태 또는 아키텍처 상태(architectural state) 같은 프로세서 관련 상태를 유지할 수 있는 임의의 다른 요소를 들 수 있다. 다시 말해서, 처리 요소는 일 실시예로 예컨대 소프트웨어 스레드, 운영 체계, 애플리케이션 또는 다른 코드처럼 코드와 독립적으로 연관될 수 있는 임의의 하드웨어를 말한다. 물리적 프로세서(또는 프로세서 소켓(processor socket))는 전형적으로 집적 회로를 말하는데, 이것은 잠재적으로 코어나 하드웨어 스레드처럼 임의의 개수의 다른 처리 요소를 포함한다.
코어는 종종 독립적인 아키텍처 상태를 보유할 수 있는 집적 회로상에 위치되는 로직으로서 이때 각각의 독립적으로 보유되는 아키텍처 상태는 적어도 몇몇 전용 실행 자원과 연관되어 있는 로직을 말한다. 코어와 대조적으로, 하드웨어 스레드는 전형적으로 독립적인 아키텍처 상태를 보유할 수 있는 집적 회로상에 위치된 임의의 로직으로서 이때 독립적으로 보유되는 아키텍처 상태는 실행 자원으로의 액세스를 공유하는 로직을 말한다. 알 수 있는 바와 같이, 특정 자원이 공유되고 다른 것들은 아키텍처 상태에 전용될 때, 하드웨어 스레드와 코어의 명칭 사이에 라인(line)이 겹쳐진다. 그렇지만, 종종 코어와 하드웨어 스레드는 운영 체계에 의해 개별적인 논리적 프로세서로서 보이며, 여기서 운영 체계는 각각의 논리적 프로세서상에서 개별적으로 동작들을 스케줄링할 수 있다.
도 1에 예시된 물리적 프로세서(100)는 두 개의 코어, 즉, 코어(101)와 코어(102)를 포함한다. 여기서 코어(101)와 코어(102)는 대칭 코어로 간주할 수 있는데, 다시 말해서 동일한 구성, 기능성 유닛 및/또는 로직을 갖는 코어이다. 또 다른 실시예로, 코어(101)는 비순차 프로세서 코어(out-of-order processor core)를 포함하고, 반면에 코어(102)는 순차 프로세서 코어를 포함한다. 그러나 코어(101)와 코어(102)는 예컨대 기본 코어, 소프트웨어 관리형 코어, 원시 ISA(Instruction Set Architecture)를 실행하도록 되어 있는 코어, 변환된(translated) ISA를 실행하도록 되어 있는 코어, 공동 설계형 코어(co-designed core) 또는 그 밖의 다른 공지의 코어처럼 임의의 유형의 코어로부터 개별적으로 선택될 수 있을 것이다. 이종 코어 환경(즉, 비대칭 코어)에서, 이진 변환(binary translation) 같은 일부 형태의 변환이 하나 또는 두 개의 코어에서 코드를 스케줄링하거나 실행하는데 활용될 수 있다. 또 다른 논의에서, 코어(101)에 예시되어 이후에 더 상세히 설명되는 기능성 유닛은 도시된 실시예에서 코어(102)의 유닛과 유사한 방식으로 동작한다.
도시된 것처럼, 코어(101)는 두 개의 하드웨어 스레드(101a, 101b)를 포함하고, 이 하드웨어 스레드는 하드웨어 스레드 슬롯(101a, 101b)으로 불리기도 한다. 그러므로, 운영 체계 같은 소프트웨어 엔티티는 일 실시예에서 잠재적으로 프로세서(100)를 4개의 독립적인 프로세서로서 여기는데, 즉, 4개의 소프트웨어 스레드를 동시에 실행할 수 있는 4개의 논리적 프로세서 또는 처리 요소로 여긴다. 위에 암시된 것처럼, 제1 스레드는 아키텍처 상태 레지스터(101a)와 연관되고, 제2 스레드는 아키텍처 상태 레지스터(101b)와 연관되며, 제3 스레드는 아키텍처 상태 레지스터(102a)와 연관되고, 제4 스레드는 아키텍처 상태 레지스터(102b)와 연관된다. 여기에서, 아키텍처 상태 레지스터(101a, 101b 102a, 102b)의 각각은 위에서 설명한 것처럼 처리 요소, 스레드 슬롯 또는 스레드 유닛으로 불릴 수도 있다. 예시된 것처럼, 아키텍처 상태 레지스터(101a)는 아키텍처 상태 레지스터(101b)에 복제되며, 따라서 개별 아키텍처 상태/콘텍스트는 논리 프로세서(101a)와 논리 프로세서(101b)을 이해 저장될 수 있다. 코어(101, 102)에서, 예컨대 할당자(allocator)내의 명령어 포인터와 재명명 로직(renaming logic) 같은 다른 작은 자원들 및 재명명자 블록(130, 131)도 스레드(101a, 101b 102a, 102b)에 각각 복제될 수 있다. 예컨대 재배열/회수 유닛(reorder/retirement unit)(135, 136)의 재배열 버퍼, ILTB(120, 121), 로드/저장 버퍼 및 큐 같은 일부 자원들은 분할(partitioning)을 통해 공유될 수도 있다. 예컨대 범용 내부 레지스터, 페이지-테이블 베이스 레지스터, 저 레벨 데이터-캐시 및 데이터-TLB(150, 151), 실행 유닛(140, 141) 및 비순차 유닛의 부분들 같은 다른 자원들은 잠재적으로 완전히 공유된다.
프로세서(100)는 종종 다른 자원들을 포함하는데, 이 자원들은 완전하게 공유되거나 분할을 통해서 공유되거나 또는 처리 요소에 대해 전용될 수 있다. 도 1에는, 프로세서의 예시적인 논리 유닛/자원과 함께 순수하게 예시적인 프로세서의 실시예가 예시된다. 프로세서는 이러한 기능 유닛들 중 임의의 것을 포함하거나 생락할 수 있을 뿐만 아니라 도시되지 않은 임의의 다른 공지의 기능 유닛, 로직 또는 펌웨어를 포함할 수도 있다. 예시된 것처럼, 코어(101)는 단순화된 대표적인 비순차(OOO;out-of-order) 프로세서 코어를 포함한다. 그러나 다른 실시예에서는 순차 프로세서(in-order processor)가 활용될 수도 있다. OOO 코어는 실행/선택될 브랜치를 예측하는 브랜치 타겟 버퍼(120)와, 명령어를 위한 어드레스 변환 엔트리를 저장하는 명령어-변환 버퍼(I-TLB)(120)를 포함한다.
코어(101)는 인출된 요소를 디코딩하기 위해 페치 유닛(fetch unit)에 접속된 디코드 모듈(decode module)(125)을 더 포함한다. 페치 로직은 일 실시예로 스레드 슬롯(101a, 101b)와 각기 연관된 개별의 시퀀서(sequencer)를 포함한다. 보통 코어(101)는 프로세서(100)상에서 실행 가능한 명령어를 정의/특정하는 제1의 ISA와 연관된다. 종종 제1의 ISA의 일부인 머신 코드 명령어가 수행될 동작 또는 명령어를 참조/특정하는 명령어의 일부분(연산 코드(opcode)로 불림)을 포함한다. 디코드 로직(125)은 자신의 연산 코드로부터 이러한 명령어를 인식하여 이 디코딩된 명령어를 제1의 ISA가 정의하는 처리를 위한 파이프라인에 전달하는 회로를 포함한다. 예를 들어, 이하에서 더 상세히 설명되듯이 디코더(125)는 일 실시예로 예컨대 트랜잭션 명령어처럼 특정 명령어를 인식하도록 설계된 로직을 포함한다. 디코더(125)에 의한 인식의 결과로, 아키텍처 또는 코어(101)는 적절한 명령어와 연관된 태스크를 수행하기 위해 특정의 사전 정의된 조치를 취한다. 본원에 설명된 태스크, 블록, 동작 및 방법 중 어떤 것은 단일 또는 다중 명령어에 응답하여 수행될 수 있으며, 이런 명령어 중 일부는 신규 또는 기존의 명령어일 수 있음을 유의하는 것이 중요하다. 디코더(126)는 일 실시예로 동일한 ISA(또는 그 부분집합)를 인식한다. 선택적으로, 이종 코어 환경에서, 디코더(126)는 제2의 ISA(제1의 ISA의 부분집합이거나 별개의 ISA)를 인식한다.
일 예에서, 할당자 및 재명명자 블록(130)은 명령어 처리 결과를 저장하는 레지스터 파일처럼 자원을 보유하는 할당자를 포함한다. 그러나 스레드(101a, 101b)는 잠재적으로 비순차적 실행을 할 수 있고, 여기서 할당자 및 재명명자 블록(130)은 예컨대 명령어 결과를 추적하는 재배열 버퍼 같은 다른 자원을 보유한다. 유닛(130)은 프로그램/명령어 참조 레지스터(program/instruction reference register)를 프로세서(100)에 대해 내부적인 다른 레지스터로 재명명하는 레지스터 재명명자를 포함할 수도 있다. 회수 유닛(135)은 비순차 실행을 지원하고 나중에는 비순차로 실행된 명령어의 순차적 회수를 지원하기 위해 예컨대 위에 언급된 재배열 버퍼, 로드 버퍼 및 저장 버퍼 같은 구성요소를 포함한다.
스케줄러 및 실행 유닛(140)은 일 실시예에서 실행 유닛에서 명령어/동작을 스케줄링하는 스케줄러 유닛을 포함한다. 예를 들어, 부동 소수점 명령어(floating point instruction)는 이용 가능한 부동 소수점 실행 유닛을 갖는 실행 유닛의 포트에 대해 스케줄링된다. 실행 유닛과 연관된 레지스터 파일은 정보 명령어 처리 결과를 저장하기 위해 포함된다. 예시적인 실행 유닛은 부동 소수점 실행 유닛, 정수 실행 유닛, 점프 실행 유닛, 로드 실행 유닛, 저장 실행 유닛 및 그 밖의 다른 공지의 실행 유닛을 포함한다.
하위 레벨 데이터와 데이터 변환 버퍼(D-TLB)(150)는 실행 유닛(140)에 접속된다. 데이터 캐시는 최근에 사용된/동작된 요소, 예컨대 데이터 오퍼랜드를 저장하기 위한 것으로, 이것은 메모리 일관성 상태에 잠재적으로 유지된다. D-TLB는 최근의 가상/선형 대 물리 어드레스 변환을 저장하기 위한 것이다. 특정 예로서, 프로세서는 물리적 메모리를 복수의 가상 페이지로 쪼개는 페이지 테이블 구조를 포함할 수도 있다.
여기서 코어(101, 102)는 예컨대 온-칩 인터페이스(110)와 연관된 제2 레벨 캐시처럼 상위 레벨 또는 훨씬 더 멀리 있는 레벨의 캐시로의 액세스를 공유한다. 상위 레벨 또는 훨씬 더 멀리 있는 레벨이란 실행 유닛으로부터 점점 떨어지거나 더 멀어지는 캐시 레벨을 말한다. 일 실시예에서, 상위 레벨 캐시는 예컨대 제2 또는 제3 레벨 데이터 캐시처럼 최종 레벨 데이터 캐시-프로세서(100)상의 메모리 계층 구조에서 최종 캐시-이다. 그러나 상위 레벨 캐시가 명령어 캐시를 포함하거나 또는 관련될 수도 있으므로 이에 한정되는 것은 아니다. 대신에 추적 캐시(trace cache)-명령어 캐시의 한 종류-가 디코더(125) 뒤에 접속되어, 최근에 디코딩된 자취를 저장할 수도 있다. 여기서, 명령어는 잠재적으로 매크로 명령어(즉, 디코더에 의해 인식되는 일반 명령어)를 말하며, 이것은 다수의 마이크로-명령어(마이크로-연산)으로 디코딩될 수 있다.
도시된 구성에서, 프로세서(100)는 온-칩 인터페이스 모듈(110)도 포함한다. 역사적으로, 이하에 더 상세히 설명되는 메모리 콘트롤러는 프로세서(100)에 대해 외부적인 컴퓨팅 시스템에 포함되었다. 이 시나리오에서, 온-칩 인터페이스(110)는 예컨대 시스템 메모리(175), 칩셋(이것은 종종 메모리(175)를 연결하는 메모리 콘트롤러 허브와 주변 장치를 연결하는 I/O 콘트롤러 허브를 포함함), 메모리 콘트롤러 허브, 노스브릿지(north bridge) 또는 그 밖의 다른 집적 회로처럼 프로세서(100) 외적인 장치와 통신하는 것이다. 그리고 이 시나리오에서, 버스(105)는 예컨대 멀티 드롭 버스(multi-drop bus), 포인트-투-포인트 인터커넥트, 직렬 인터커넥트, 병렬 인터커넥트, 일관성(예컨대 캐시 일관성) 버스, 계층형 프로토콜 아키텍처, 차동 버스 및 GTL 버스 같은 임의의 공지된 인터커넥트를 포함한다.
메모리(175)는 프로세서(100)에 전용일 수도 있고 또는 시스템 내의 다른 장치와 공유될 수도 있다. 메모리(175) 유형의 일반적인 예는 DRAM, SRAM, 비휘발성 메모리(NV 메모리) 및 그 밖의 공지된 저장 장치를 포함한다. 장치(180)가 메모리 콘트롤러 허브에 접속된 그래픽 가속도계, 프로세서 또는 카드, I/O 콘트롤러 허브에 접속된 데이터 저장 장치, 무선 송수신기, 플래시 장치, 오디오 콘트롤러, 네트워크 콘트롤러 또는 다른 공지의 장치를 포함할 수도 있음을 유의하라.
그러나 최근에 예컨대 SOC처럼 더 많은 로직과 장치들이 단일 다이(die) 상에 집적되고 있으며, 이 장치들의 각각은 프로세서(100)상에 포함될 수 있다. 예를 들어 일 실시예로 메모리 콘트롤러 허브는 프로세서(100)와 동일 패키지 및/또는 다이상에 존재한다. 여기서, 코어의 일부분(온-코어 부분)(110)은 예컨대 메모리(175)나 그래픽 장치(180) 같은 다른 장치를 인터페이싱하는 하나 이상의 콘트롤러를 포함한다. 이런 장치와 인터페이싱하는 인터커넥트와 콘트롤러를 포함하는 구성은 종종 온-코어(또는 언-코어(un-core) 구성)으로 불린다. 예로서, 온-칩 인터페이스(110)는 온-칩 통신을 위한 링 인터커넥트와, 고속 직렬 오프-칩 통신을 위한 포인트-투-포인트 링크(105)를 포함한다. 그래도 SOC 환경에서는 네트워크 인터페이스, 코프로세서, 메모리(175), 그래픽 프로세서(180), 그리고 임의의 다른 공지의 컴퓨터 장치/인터페이스 같은 훨씬 더 많은 장치가 단일 다이 또는 집적 회로에 집적되어, 고 기능성 및 저 전력 소비와 함께 작은 폼 팩터(form factor)를 제공한다.
일 실시예에서, 프로세서(100)는 본원에 설명된 장치 및 방법을 지원하거나 그들 사이를 인터페이스하기 위해 컴파일러를 실행하고/하거나, 최적화를 달성하고/하거나 변환기 코드(177)가 애플리케이션 코드(176)를 컴파일, 변환 및/또는 최적화할 수 있다. 컴파일러는 종종 원시 텍스트/코드를 목적 텍스트/코드로 변환하는 프로그램 또는 프로그램 세트를 포함한다. 흔히, 컴파일러를 이용한 프로그램/애플리케이션 코드의 컴파일링(compilation)은 고 레벨 프로그래밍 언어 코드를 저 레벨 머신 또는 어셈블리 언어 코드로 변환하기 위해 다중 단계(phase)와 패스(pass)에서 행해진다. 그렇지만, 간단한 컴파일을 위해서 단일 단계 컴파일러가 활용될 수도 있다. 컴파일러는 임의의 공지의 컴파일링 기술을 이용할 수 있고, 예컨대 어휘분석(lexical analysis), 전처리, 문장 분석(pasing), 의미 분석(semantic analysis), 코드 생성, 코드 변환 및 코드 최적화 같은 임의의 공지의 컴파일러 동작을 수행할 수 있다.
더 큰 컴파일러는 종종 다중 단계를 포함하지만 가장 흔하게 이 단계는 두 개의 일반 단계에 포함되는데, (1) 프론트-엔드(front-end), 즉, 일반적으로 구문적 처리(syntactic processing), 의미적 처리(semantic processing) 및 일부 변환/최적화가 일어나는 곳과 (2) 백-엔드(back-end), 즉, 일반적으로 분석, 변환, 최적화 및 코드 생성이 일어나는 곳에 포함된다. 일부 컴파일러는 컴파일러의 프론트-엔드와 백-엔드 사이에 묘사가 흐려진 중간을 참조한다. 그 결과, 컴파일러의 임의의 다른 공지의 단계 또는 패스와 함께 컴파일러의 삽입(insertion), 연관 또는 그 밖의 동작이 전술한 단계 또는 패스 중 어떤 곳에서 일어날 수 있다. 예시적인 예로서, 컴파일러는 잠재적으로 동작, 호출, 기능 등을 하나 이상의 컴파일링 단계에 삽입하는데, 예를 들면 호출/동작을 컴파일링의 프론트-엔드 단계에 십입한 뒤 변환 단계 동안에 이 호출/동작을 하위 레벨 코드로 변환하는 것을 삽입한다. 실행 시간 중에 실행을 위해 코드를 최적화함과 더불어 동적 컴파일링 중에 컴파일러 코드 또는 동적 최적화 코드가 예컨대 동작/호출을 삽입할 수도 있음을 유의하라. 특정의 예시로서, 이진 코드(이미 컴파일된 코드)는 실행시간 중에 동적으로 최적화될 수도 있다. 여기서 프로그램 코드는 동적 최적화 코드, 이진 코드 또는 이들의조합을 포함할 수도 있다.
컴파일러와 유사하게, 예컨대 이진 변환기 같은 변환기(translator)는 코드를 최적화 및/또는 번역하기 위해 코드를 정적으로 또는 동적으로 변환한다. 그러므로, 코드, 애플리케이션 코드, 프로그램 코드 또는 다른 소프트웨어 환경의 실행에 대한 참조는 (1) 동적으로 또는 정적으로 프로그램 코드를 컴파일하거나 소프트웨어 구조를 유지하거나 다른 동작을 수행하거나 코드를 최적화하거나 또는 코드를 번역하기 위한 컴파일러 프로그램, 최적화 코드 최적화기 또는 변환기의 실행, (2) 최적화된/컴파일된 예컨대 애플리케이션 코드 같은 동작/호출을 포함한 주 프로그램 코드의 실행, (3) 소프트웨어 구조를 유지하거나 다른 소프트웨어 관련 동작을 수행하거나 또는 코드를 최적화하기 위해 주 프로그램 코드와 연관된 예컨대 라이브러리 같은 다른 프로그램 코드의 실행, (4) 이들의 조합을 말한다.
예시의 인터커넥트 패브릭 및 프로토콜은 이러한 예시의 PCIe 아키텍처, 인텔 QPI(QuickPath Interconnect) 아키텍처, MIPI(Mobile Industry Processor Interface)를 특히 포함할 수 있다. 지원되는 프로세서의 범위는 다중 도메인 또는노드 콘트롤러 사이의 다른 인터커넥트의 이용을 통해 도달될 수 있다.
인터커넥트 패브릭 아키텍처는 계층형 프로토콜 아키텍처의 정의를 포함할 수 있다. 일 실시예에서, 프로토콜 계층(일관적 프로토콜, 비일관적 프로토콜 및 선택적으로 다른 메모리 기반 프로토콜), 라우팅 계층, 링크 계층 및 물리 계층이 제공될 수 있다. 더 나아가, 인터커넥트는 전력 관리자, DFT(design for test and debug), 장애 관리(fault handling), 레지스터, 보안 등과 관련하여 증강된다.
인터커넥트 패브릭의 물리 계층은 일 실시예로 물리 매체(전기적 또는 광학적 등등)상에서 정보의 빠른 전달을 관할할 수 있다. 물리적 링크는 두 개의 링크 계층 엔티티 사이에서 포인트-투-포인트이다. 링크 계층은 상위 레벨로부터 물리 계층을 추출할 수 있고, (요청과 더불어) 데이터를 신뢰성 있게 전달할 능력을 제공할 수 있으며, 두 개의 직접적으로 연결된 엔티티 사이에서 흐름 제어를 관리할 수 있다. 이것은 또한 물리 채널을 다중 가상 채널과 메시지 클래스(message classes)로 가상화(virtualizing)하는 책임을 갖는다. 프로토콜 계층은 물리 계층을 통한 전달을 위해 프로토콜 메시지를 물리 계층에 넘겨주기 전에 이 프로토콜 메시지를 적절한 메시지 클래스와 가상 채널로 매핑(map)하기 위한 링크 계층을 필요로 한다. 링크 계층은 예컨대 요구, 스누프(snoop), 응답, 라이트 백(writeback), 비 일관성 데이터 등등처럼 다중 메시지를 지원할 수 있다.
일부 구현예에서, 링크 계층은 흐름 제어에 크레디트 방식을 활용할 수 있다. 넌-크레디트형 흐름(non-credited flow)도 지원될 수 있다. 크레디트형 흐름(credited flows)과 관련하여, 초기화 동안에 송신자(sender)가 수신자(receiver)에게 패킷 또는 플릿(flits)을 송신하기 위한 정해진 수의 크레디트를 제공한다. 패킷 혹은 플릿이 수신자에게 보내질 때마다 송신자는 이용중인 가상 네트워크의 유형에 따라서 크레디트 카운터를 하나의 패킷이나 플릿을 나타내는 하나의 크레디트만큼 감소시킨다. 버퍼가 수신자에서 자유로워질 때마다 크레디트는 해당 버퍼 유형을 위한 송신자로 복귀된다. 주어진 채널을 위한 송신자의 크레디트가 소진될 때, 일 실시예로 이것은 해당 채널에서 임의의 플릿을 전송하는 것을 중단한다. 근본적으로, 크레디트는 수신자가 정보를 소비하고 적절한 버퍼를 자유롭게 한 이루에 복귀된다.
일 실시예에서, 라우팅 계층은 소스로부터 목적지로 패킷을 라우팅하는 유연하고 분산된 진로를 제공할 수 있다. 일부 플랫폼 유형에서(예를 들면, 단일 프로세서 및 듀얼 프로세서 시스템), 이 계층은 명확하지 않을 수도 있지만 링크 계층의 일부일 수도 있으며, 이런 경우에 이 계층은 선택 사양이다. 이것은 패킷을 라우팅하는 방식을 결정하는 기능의 일부로서 링크 계층에 의해 제공되는 가상 네트워크 및 메시지 클래스 추상화를 요구한다. 라우팅 기능은 일 구현예로 구현 특정 라우팅 테이블을 통해 정의된다. 이러한 정의는 다양한 사용 모델을 허용한다.
일 구현예에서, 프로토콜 계층은 통신 프로토콜, 순서화 규칙 및 일관성 유지, I/O, 인터럽트 및 다른 상위 레벨 통신을 구현할 수 있다. 프로토콜 계층은 일 실시예로 시스템과 구성요소를 위한 전력 상태를 절충하기 위해 메시지를 제공할 수 있음을 유의하라. 잠재적인 추가 사항으로서, 물리 계층이 개별의 링크의 전력 상태를 독립적으로 또는 연계하여 설정할 수도 있다.
다중 에이전트는 예컨대 홈 에이전트(메모리에 대한 요청을 명령함), 캐싱(일관성 메모리에 대해 요청을 발행하고 스누프에 응답함), 구성(구성 트랜잭션을 취급함), 인터럽트(인터럽트를 처리함), 레거시(legacy)(레거시 트랜잭션을 취급함), 비일관성(비일관성 트랜잭션을 취급함) 및 그 외의 것들처럼 인터커넥트 아키텍처에 연결될 수 있다.
전통적인 캐시 박스("cbox") 설계는 다양한 무한 반복/교착 상태가 되기 쉬운 재시도 기반 마이크로 아키텍처를 활용한다. 이러한 전통적인 재시도 기반 설계는 어떤 크레디트 또는 의존성(dependencies)이 현재 요청을 위해 존재하는지 사전에 알지 않고도 요청이 TOR 파이프라인으로 진입하므로 전형적으로 필터/최종 레벨 캐시("LLC")을 스누프하기 위한 낮은 대기시간 액세스와 크레디트/자원의 효율적 이용을 제공한다. 그러나 이러한 설계는 많은 액세스 공정성 문제를 끌어들인다. 예를 들어, 크레디트를 대기하고 있는 하나의 요청은 기아 상태인 요청이 재시도되는 동안 파이프라인에 진입하는 하나 이상의 다른 요청을 대기하면서 계속해서 크레디트를 잃을 수 있다. 일부 전통적인 기아 방지 체계는 내부적 기아 상태와 외부적 기아 상태 메커니즘을 통해 이 문제를 해결하려고 시도한다. 이러한 내부적 기아 상태 메커니즘은 서로 기아 상태인 동일한 흐름 제어 클래스 내부에서 상이한 요청들로부터 초래되는 기아 문제를 해결하는 능력을 제공할 수 있다. 예로서, 요청들은 ACK/NACK 판정을 위해 대기하지 않고 파이프라인(예를 들면, 요청 테이블(TOR), 스누프 필터, LLC 파이프라인)에 추론적으로 디스패치될 수 있다. ACK/NACK 판정은 많은 클록을 차지하고(파이프라인 크레디트 상태 등과 더불어 LLC/SF 록업 결과에 대한 의존성으로 인해), ACK/NACK와 관련한 대기는 파이프라인 및 TOR의 이용 가능한 대역폭을 줄어들게 할 수 있다. 어떤 경우에 이것은 더 오래된 요청이 진행하지 않는 동안에 더 최근의 요청이 진행하게 되는 결과를 초래할 수 있다.
외부적인 기아 상태 메커니즘은 동일한 자원에 대해 경쟁하는 상이한 유입 큐(ingress queue)로부터의 요청으로 인한 순방향 진행 문제를 해결하는 기능을 제공할 수 있다. 전통적인 외부적 기아 상태 메커니즘 해법에서, 기아 상태인 큐는 동일한 자원에 대해 경쟁 가능성이 있는 모든 다른 큐가 차단되게 할 수 있다. 그러나 어떤 경우에는 이런 경쟁하는 큐가 크레디트가 이용 가능해지도록 대기하는 것을 허용해야만 하므로 경쟁하는 큐를 차단하는 것이 기아 상태인 큐를 해결하는데 역효과를 낼 수도 있는 또 다른 문제를 일으킬 수 있다. 의존 규칙(dependency rule)은 어떤 큐가 어떤 조건에서 어떤 다른 큐를 차단할지를 나타낼 수 있다. 이러한 의존 규칙 중 일부는 인터커넥트, 다른 프로토콜 의존 규칙 및 마이크로 아키텍처에 강하게 묶일 수 있다. 이런 규칙은 어떤 경우에 프리-실리콘(pre-silicon)에서 공식적으로 입증하거나 검증하는 것이 상당히 어려울 수 있다.
프리-실리콘 검증(pre-silicon validation)은 예컨대 교착 상태/무한 반복 상태 시나리오를 만드는 데 있어서 테스트 시간제한 때문에 역사적으로 프리-실리콘 시뮬레이션에서 교착 상태/무한 반복 상태 버그를 노출하는데 도전하고 있다. 예를 들어, 전통적인 외적인 기아 상태 메커니즘은 어떤 예에서 각각의 요청에 대해 수용할 수 있는 재시도 횟수의 특정 상한선을 갖지 않아서, 어떤 경우에는 불가능하지는 않지만 교착 상태/무한 반복 상태의 검출이 어렵다.
시스템은 다른 예의 장점들 중에서 교착 상태/무한 반복 상태 어려움을 포함한 전술한 문제들 중 적어도 일부를 다룰 수 있는 cbox 및/또는 홈 에이전트 로직을 활용하는 IP(intellectual property) 블록(들)과 함께 제공될 수 있다. 예를 들면, 조합된 cbox-홈 에이전트("CHA") 로직은 요청, 응답 또는 진행을 만드는데 어려움을 갖는 다른 엔트리에 대해 의존 체인(dependency chain)을 만들고 우선순위에 기반하여 진행을 만들지 않은 엔트리에 크레디트를 분배하도록 제공될 수 있다. 이것은 하나의 큐가 다른 큐를 차단하지 않으면서(즉, 요청이 재시도되면서) 수행될 수 있다. 개선된 재시도 큐 해법은 재시도 횟수의 상한선과 함께 제공될 수 있다. 또한, 가상 재시도 큐는 복수의 흐름 제어 클래스 및 엔트리의 각각에 대해 유지될 수 있다. 일부 구현에서, 이러한 가상 큐 내부의 엔트리는 FIFO 순서로 처리될 수 있으며, 가상 큐 내부의 엔트리의 재시도는 엔트리의 의존성이 해결되거나 획득될 때까지 유지될 수 있다(본원에서는 총괄해서 의존성을 "획득"하는 것으로 지칭됨). 큐 사이에서 엔트리는 의존성 충돌이 없는 한 차단되지 않는다. 이러한 해법은 다른 예시의 이점 중에서 엔트리가 재시도 큐에서 대기하고 무차별적인 재시도를 통해 전력을 계속 소진하지 않으면서 크레디트를 획득하므로 순방향 진행 성능의 프리-실리콘 검증을 개선할 뿐만 아니라 활동 요인을 감소시킴으로써 전력 효율을 개선할 수 있다. 또한, 이러한 해법은 향후 설계에 대해 쉽게 조정가능하고, 다중의 상이한 마이크로아키텍처 또는 일관성 프로토콜에 적용 가능하다.
아래의 예에서 도시 및 설명된 것과 유사하게 위에서 소개된 원리를 포함하는 시스템이 제공될 수 있다. 예를 들어, 도 2의 간략화된 블록도에 예시된 예로 돌아가서, 복수의 IP 블록 또는 블록을 포함하는 시스템(200)이 도시되는데, 각각의 블록은 복수의 프로세서 코어(예컨대, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220) 중 하나와 그에 대응하는 (예컨대, 최종 레벨 캐시(LLC)의) 캐시 뱅크(예를 들면, 222, 224, 226, 228, 230, 232, 234, 236, 238, 240)를 포함한다. 각각의 타일(TILE)은 또한 하나 이상의 캐시 뱅크(예를 들면, 222, 224, 226, 228, 230, 232, 234, 236, 238, 240)와 함께 코어(예를 들면, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220)의 상호작용을 관리하는 로직을 포함한다. 예를 들어, 각각의 타일은 캐시 박스 로직 캐시 박스 로직, 코어 박스 로직, 홈 에이전트 로직 또는 전술한 내용의 조합(본원에서는 이들을 종합적으로 "CHA" 로직으로 부름)(예컨대, 242, 244, 246, 2548, 250, 252, 254, 256, 258, 260)을 포함하여, 코어를 시스템 캐시(예컨대 LLC)와 인터페이스하고, 캐시 레코드와 다른 자원들을 수반하는 코어(또는 다른 구성요소)로부터 요청 및 응답과 연계한 이용을 위한 기능을 제공할 수 있다. 이러한 기능은 다른 예시의 기능 중에서 요청된 캐시 레코드에 대응하는 캐시 뱅크를 결정하고 요청을 전송하는 경로를 결정하며 캐시 일관성을 수행하는 로직을 포함할 수 있다. 각각의 타일 또는 유닛은 유닛(및 구성요소 코어, 캐시 뱅크 등)을 인터케넉트(265)와 인터페이싱하는 개별 인터커넥트 인터페이스(예컨대, 264, 266)를 더 포함할 수 있다. CHA 로직은 대응하는 인터커넥트 인터페이스(예컨대, 264, 266)와 인터페이싱하거나 일부 경우에는 이를 포함할 수 있다.
인터커넥트(예컨대, 265)는 예를 들면 SOC, 마이크로서버 또는 다른 시스템에 포함될 수 있는 구성요소의 임의의 조합을 잠재적으로 연결하기 위해 잠재적으로 무제한의 다양한 시스템 레이아웃, 아키텍처 또는 플로어 플랜(floor plan) 중 어떤 것을 도입하여 제공될 수 있다. 도 2의 예는 이러한 시스템의 간략화된 한 가지 예임이 인지되어야 한다. 코어-캐시 타일 또는 그와 유사한 구성요소(예컨대 271, 272, 274) 이외의 구성요소, 예컨대 메모리 콘트롤러와 PCIe, QPI 또는 다른 인터커넥트 구성요소 같은 외부 인터페이스 구성요소는 인터커넥트를 통해 인터페이스하고, 시스템의 자원과 채널(예컨대, 274, 276, 278, 280, 282, 284, 286, 288, 290, 292)에 대해 액세스를 제공한다.
도 3의 예로 돌아가서, 예컨대 프로세서 코어(210)와 LLC 블록(230)을 포함하고 CHA 로직(310)을 지원하는 블록 같은 예시의 시스템 블록(305)의 예시적인 세부구성요소를 예시하는 간략화된 블록도(300)가 도시된다. 도 3의 특정 예에서, CHA 로직(310)은 요청 가상 재시도 큐와 응답 가상 재시도 큐를 지원하는 로직을 포함하는 다른 실행 가능한 소프트웨어 기반 및/또는 하드웨어 기반 로직 중에서 중재 로직(arbitration logic), 응답 로직, 내부적 기아 상태 로직 요청 큐 로직, 응답 큐 로직, 파이프라인 로직을 포함할 수 있다. CHA 로직(310)은 요청, 응답(예를 들면, 요청 또는 수신된 요청에 응답하는 완료)을 다루기 위해 제공될 수 있다. 요청은 인터커넥트(265) 또는 예컨대 캐시로부터 레코드를 구하는 외부 구성요소를 포함한 다른 구성요소를 통해 요청을 통신하는 시스템의 동일 블록 또는 다른 블록으로부터 수신된다. 응답 로직(320)은 착신 요청을 다루고 처리한다. 응답 로직(320)은 일부 경우에 추가의 요청을 발생하는데, 예컨대 수신된 요청에 적절히 응답하기 위한 정보를 획득하기 위해 캐시(230)나 다른 자원으로 요청을 발생한다. 파이프라인 로직(340)은 수신된 요청과, 특정 발신 요청이 순방향 진행을 만들지 못하고 있음을 나타내는 메시지를 포함한 다른 메시지를 처리하는 추가의 로직을 포함할 수 있다. 이런 메시지는 요청이 시스템 내부에서 순방향 진행을 만들지 못하는 이유 또는 종속성을 나타낼 수도 있다. 파이프라인 로직(340)은 일부 예에서 착신 요청의 어드레싱을 해석할 뿐만 아니라 요청에 요청된 레코드가 블록(305)의 캐시 뱅크(230)에 존재하는 지를 결정하는 시스템 어드레스 디코더(SAD)를 더 포함할 수 있다. SAD 로직은 요청된 레코드가 사실상 특정 캐시 뱅크(230)에 존재하지 않음을 결정할 수 있고, 그 응답으로 다른 예 중에서 예컨대 다른 캐시 뱅크나 시스템 메모리처럼 레코드의 대체 위치를 식별할 것을 시도하도록 응답 요청을 유도하는데 이용될 수 있다. 파이프라인 로직(340)은 일부 예에서 캐시 뱅크(230)를 수반하는 캐시 일관성 관리를 제공할 수 있다. 응답 로직(320)은 파이프라인 로직(340)과 인터페이스하여 수신된 요청에 대해 응답을 발생한다. 어떤 경우, 응답은 착신 요청에 대한 응답에서 발생하는 메시지를 포함하고, 다른 예들 중에서 캐시 뱅크(320)로부터 복귀되는 데이터(예를 들면, 요청된 레코드가 캐시 뱅크에 존재하는 곳), 일관성 메시지, "실패(miss)"를 나타내는 메시지(예를 들면, 요청된 레코드가 캐시 뱅크에 존재하지 않을 때), 캐시 또는 레코드가 발견될 가능성이 있는 메모리 내의 다른 위치를 지시하는 메시지, ACK/NACK 메시지를 포함할 수 있다.
CHA 로직(310)을 이용하여 발생된 응답은 CHA의 출구 로직(egress logic)의 이용을 통해 인터커넥트(265) 상에서의 전송될 준비가 된다. 출구 로직은 응답의 목적지를 식별하고 목적지로 이 응답을 전송하기 위해 인터커넥트(256) 상의 경로를 결정할 수 있다. 룩업 테이블 또는 다른 데이터 및 로직은 응답에 가정 적합한 경로를 결정하는데 이용될 수 있다. 중재 로직(315)은 인터커넥트(265) 상에서의 데이터 전송을 중재하기 위해 제공된다. 캐시 박스 로직 또는 코어 박스 로직에 의해 전송될 메시지는 예컨대 더 높은 우선순위의 트래픽이 존재하거나 인터커넥트(265) 상에 있거나 막 주입되기 시작할 때 일부 예에서 큐잉될 수 있다. 따라서, 다중 큐(예컨대, 330, 335)는 경쟁중인 요청 및 응답이 인터커넥트(265)의 파이프라인 상에 주입되는 순서를 정하는 중재 로직(315)을 이용하여 유지 및 관리된다. 일부 예에서, 독립적인 큐(예컨대, 330, 335)와 지원 로직이 특히 시스템 내에서 정의되는 복수의 상이한 흐름 제어 클래스의 각각을 위해 제공될 수 있다. 또한, 큐잉 및 중재 로직은 순방향 진행을 수행하지 않는 요청 및 응답의 재시도를 지원할 수 있다. 내부적 기아 상태 로직(325)은 하나 이상의 큐를 수반하는 재시도를 감시하여, 큐의 요청 및 응답과 관련된 교착 상태/무한 반복 상태를 경계한다. 내부적 기아 상태 로직(325)은 블록(305)의 일부 또는 전부를 기아 상태 모드 상태에 두도록 구성 가능하다. 기아 모드 상태 동안, 가상 재시도 큐(345, 350)는 순방향 진행에 실패하여 종래의 재시도 기술을 활용하는 다중의 반복된 재시도를 통해 파이프라인 대역폭을 확장하고 있는 하나 이상의 요청 또는 응답을 다루도록 활용될 수 있다. 가상 재시도 큐(345, 350)는 순방향 진행에 실패한 요청/응답의 의존성을 획득 및 추적하고, 순방향 진행을 멈추게 하는 하나 이상의 의존성을 획득하면서 후속의 재시도의 타이밍을 맞춘다.
도 4로 돌아가서, 특정 IP 블록(305)의 요청 가상 재시도 큐(345)와 응답 가상 재시도 큐(350)와 관련한 예시의 메시징을 예시하는 간략화된 블록도(400)가 도시된다. 일부 구현에서, 독립적인 요청 가상 재시도 큐(345)와 응답 가상 재시도 큐(350)는 블록에 의해 지원되는 각각의 개별 흐름 제어 클래스를 보유할 수 있다. 요청을 위한 흐름 제어 클래스는 예로서 특히 클래스 대응 코어 요청(IRQ), PCIe 요청(PRQ), 원격 프로브(probes)/스누프(IPQ), 원격 요청(RRQ), 원격 라이트백(EWB)을 포함할 수 있다. 기아 상태 모드일 때, 가상 큐(예컨대 345, 350)는 재시될 요청을 큐잉하는데 이용될 수 있다. 일부 구현에서, 독립적인 가상 재시도 큐는 각각의 흐름 제어 클래스에 대해 보유될 수 있고, 특별히 해당 흐름 제어 클래스를 위해 기아 상태 모드가 진입될 수 있다. 기아 상태 모드 동안, 예컨대 대응하는 흐름 제어 클래스를 위한 모든 다른 재시도는 정지되고, 대응하는 가상 큐를 이용하여 큐잉된다. 가상 큐 내의 하나 이상의 요청의 의존성이 결정되고, 예컨대 특정 자원에 대한 크레디트 같은 의존성을 획득하는 즉시 가상 큐의 최상부에 있는 요청이 재시도될 수 있다. 만약 순방향 진행이 복원되면, 재시도될 다른 요청은 요청을 재시도하기 전에 획득된 자신의 대응하는 의존성을 가질 수 있고, 이것은 가상 큐 내의 모든 요청에 대해 순방향 진행이 복원될 때까지 계속된다. 가상 큐가 소거될 때, 시스템은 기아 상태 모드에서 나올 수 있다.
큐는 이것이 실제 큐(예컨대, 330, 335) 내의 요청/응답에 대한 포인터의 테이블로서 구현될 수 있다는 점에서 가상일 수 있다. 가상 큐는 시스템이 기아 상태 모드에 있는 동안 실제 큐의 순서를 무시하도록 구현될 수 있다. 예를 들면, 가상 재시도 큐는 실제 FIFO 큐 엔트리를 가리킬 수 있다. 가상 재시도 큐를 제공하는 것은 특히 복잡도와 면적을 상당히 줄여서 유리할 수 있다.
도 4의 예에서, 의존성 갱신(405, 410)의 형태의 의존성 정보가 파이프라인으로 획득되고 요청 가상 재시도 큐(345)와 응답 가상 재시도 큐(350)에 의해 추적될 수 있다. 의존성이 획득됨에 따라, 가상 큐내의 큐 요청이 재시도된다. 일부 예에서, 재시도는 여전히 멈춘 진행을 초래할 수 있다. 이런 예에서, 요청의 의존성은 가장 최근의 순방향 진행 실패를 설명하기 위해 갱신될 수 있다. 갱신된 의존성이 획득될 때, 요청은 다시 재시도되고, 이것은 순방향 진행이 이루어질 때까지 계속된다. 일부 예에서, 요청의 의존성을 획득하는 것은 의존성을 식별하는 것과, 그 다음에 의존성을 입수하도록 시도하는 것을 포함할 수 있다. 예를 들어, 특정 자원을 위한 크레디트의 형태의 의존성인 경우라면, 가상 재시도 큐 로직은 시도에서 이루어질 대응하는 크레디트 요청이 의존성을 획득하도록 할 수 있다. 다른 의존성은 예를 들면 다른 두드러진 요청의 완료에 대한 의존성을 포함할 수 있고, 재시도 큐는 이 두드러진 요청과 재시도를 감시하고, 다른 예시의 의존성 중에서 이 두드러진 요청이 완료될 때 계류중인 요청을 재시도하도록 이용될 수 있다.
일부 예에서, 다중 가상 큐는 동일한 의존성에 대해 경쟁한다. 다시 말해서, 독립적인 가상 큐 내부의 두 개 이상의 상이한 요청(및/또는 응답)은 동일한 의존성에 대해 대기중일 수 있다. 이 의존성이 획득될 때, 이것은 다중 가상 큐에 대해 한 번에 효과적으로 획득될 수 있다. 크레디트 중재자 또는 다른 중재 로직은 이러한 의존성 충돌을 중재하여 경쟁중인 가상 큐 중 하나에서의 재시도가 하위 요청(subordinate request)으로서 지정되어, 경쟁중인 가상 큐의 다른 것에서의 재시도를 대기한다. 동일한 의존성을 갖는 다른 요청(또는 응답)의 재시도를 제기하는 것은 그 자체가 의존성이다. 일부 예에서, 일부 예에서, 경쟁중인 하위 요청의 의존성은 갱신되어, 경쟁중인 요청의 순방향 진행 또는 재시도의 식별이 하위 요청의 재시도를 트리거링한다.
도 4에 도시된 것처럼, 요청 및 응답 가상 재시도 큐(예컨대, 345, 350)는 추가의 메시지를 발생 및 전송할 수 있다. 예를 들어, 가상 재시도 큐는 예컨대 다른 예 중에서 대응하는 재시도 큐가 비었음을 나타내는 Empty 메시지와, 계류중인 요청을 재시도하기 위해서 재시도 큐가 파이프라인 액세스에 대해 응찰중임을 나타내는 Bid 메시지 같은 유입(ING) 메시지를 큐잉한다. ACK/NACK 메시지도 수신되거나 또는 메시지 또는 그 재시도가 성공적인지 여부를 나타내는 긍정응답이 감시된다. 대응하는 의존성 정보는 이러한 긍정응답 메시지로부터의 메시지와 관련하여 획득될 수 있다.
도 5로 돌아가서, 요청 가상 재시도 큐의 예시적인 구현의 세부사항을 예시하는 간략화된 블록도(500)가 도시된다. 일부 구현예에서, 시스템이 기아 상태 모드에 있지 않을 때, 대응하는 시스템 블록에 의해 파이프라인으로 전송된 요청에 대해 순방향 진행이 감시될 수 있다. 요청이 발생할 때(예를 들어 R-비트 로직(505)를 이용하여), 이것은 요청 큐(330)에 큐잉될 수 있다. 요청에 대응하는 ACK/NACK는 내부적 기아 상태 로직(325)에 의해 감시되어, 순방향 진행이 요청에 의해 이루어지고 있는지 결정된다. 정규 동작 동안(예를 들면, 기아 상태 모드가 아닐 때), 실패한 요청은 재시도될 수 있고, 요청의 순방향 진행을 시현시키기 위해 계속해서 여러 번 재시도된다. 일부 구현예에서, 내부적 기아 상태 로직(325)은 순방향 진행을 실행하지 못하고 보류되어 있는 각각의 요청에 대해 재시도 횟수의 카운터를 보유할 수 있다. 재시도된 요청의 첫 번째가 순방향 진행 없이 재시도의 특정 임계를 만족시킬 때, 내부적 기아 상태 로직(325)은 큐로 하여금 기아 상태 모드가 진입되며, 요청 가상 재시도 큐는 잠재적인 교착 상태, 무한 반복 상태 또는 재시도된 큐와 관련된 다른 상태를 바로 잡는데 이용될 수 있다. 이러한 재시도 임계는 다른 예 중에서 시스템의 허용한계(예컨대, 기아 상태 모드에 진입하는 것이 얼마나 어려운지 반영함), 요청의 유형, 흐름 제어 채널 또는 IP 블록에 기반하여 구성 가능하다.
일 예에서, 기아 상태 모드로 진입하는 것은 임의의 신규 요청이 정지되게 할 수 있다. 내부적 기아 상태 로직(325)에 의해 트리거링되는 기아 상태 모드 이전에 발생된 요청(즉, "오래된 엔트리")은 시스템에서 큐잉된 채로 유지될 수 있다. 재시도 모드에 있는 모든 요청, 즉, 순방향 진행에 실패하여 재시되거나 재시도될 모든 요청은 요청 가상 큐(510)에 큐잉될 수 있다. 일부 구현예에서, 요청은 FIFO 순서로 큐잉될 수 있고 이때 큐의 헤더는 처음에 재시도가 기아 상태 모드를 트리거한 요청이다. 상태 정보는 가산 재시도 큐 내의 요청에 대해 보유될 수 있다. 일부 실시예에서, 상태 정보는 가상 큐에서 헤더 또는 최상위 요청에 대해서만 보유될 수 있다. 상태 정보는 잠재적인 다른 정보 및 예 중에서 예를 들면 파이프라인 또는 요청의 TOR 식별자(TOR ID), 헤더 요청이 이미 재시도되었는지에 대한 식별(예컨대, "One Retry")(예를 들면 이진값), 요청을 위해 결정된 의존성의 식별(예컨대, "Dep Info")(예를 들면, 의존성 집합 중 하나에 대응하는 코드에 의해 식별된 것으로서), 요청에 대해 결정된 의존성이 공지된 것인지 비공지된 것인지의 식별(예컨대, "Dep Known"), 의존성이 획득되었는지의 여부에 대한 식별(예컨대, "Has Info"), 가상 큐와 다른 가상 큐 사이의 충돌의 존재 여부의 식별(예컨대, "Has Conflict")(예를 들면, 동일한 의존성에 대해 대기중인 두 개의 가상 큐에 기반하여), 큐잉된 요청이 의존적인 다른 요청의 식별(가상 재시도 큐 사이에 충돌이 있는 경우(예를 들면, Has Conflict=true일 때))를 포함할 수 있다.
가상 재시도 큐(510)에서 요청에 대한 상태 정보는 다양한 소스로부터 획득될 수 있다. 파이프라인 로직은 실패한 요청에 대해 이유의 표시를 제공한다. 요청의 특정 의존성은 파이프라인을 통해 제공된 정보로부터 식별될 수 있다. 의존성 정보는 우선 가상 재시도 큐(510)에서 헤더 요청의 처음 실패한 재시도에 응답하여 상태 정보에 기록될 수 있다. 의존성 정보는 실패한 재시도에 응답하여 입수될 수 있다. 첫 재시도 이후에, OneRetry 값은 "true"로 설정될 수 있고, 만약 재시도가 순방향 진행을 촉진하는 데 실패한다면, DepInfo가 실패한 재시도로부터 식별되는 의존성에 대응하는 의존성 코드 값으로 설정될 수 있다. 헤더 요청에 대한 이러한 초기 재시도는 임의의 의존성 정보가 획득되기 전에 개시될 수 있다. 일부 예에서, 가상 재시도 큐 내의 헤더 요청의 초기 재시도는 헤더 요청을 위한 의존성 정보를 획득하려고 시도할 목적으로는 효과적일 수 있다. 일단 재시도 가상 큐의 헤더 위치에 도달하거나 또는 헤더 위치에 도달한 이후에 첫 번째로 재시도되면 TOR ID는 요청에 자동으로 할당될 수 있다. 이것은 순방향 진행을 막는 의존성으로서의 TOR ID의 결핍을 사전 조치하는 역할을 할 수 있다. 일부 구현에서, 헤더 위치를 획득하는 각각의 요청은 동일한 TOR ID에 할당될 수 있다. 이런 예에서, TOR ID는 재사용될 수 있고, 다른 예 중에서 개별 가상 재시도 큐 내부에서 헤더 위치에 있는 요청을 위한 사전 정의된 TOR ID일 수 있다.
중재 및 다른 CHA 로직은 헤더 요청이 대기하는 의존성으로서 상태 정보(515)에서 식별된 특정 의존성의 획득을 획득 및 검출하는데 이용될 수 있다. 예를 들어, 특정 자원의 크레디트는 획득될 수 있고 재시도 로직은 대응하는 요청(예컨대 헤더 상태 정보 테이블의 DepInfo 필드에서)에 대해 상태 정보(515)에서 식별된 의존성이 획득되도록 결정한다. 구하는 의존성을 획득하는 즉시, 재시도 큐 로직은 헤더 요청이 재시도되도록 할 수 있다. 일부 경우에서, 초기 재시도는 순방향 진행을 초래할 수 있다. 다른 경우에서, 헤더 요청(예를 들어, 요청이 가상 재시도 큐의 헤더 위치를 획득할 때 요청의 초기 재시도로부터 식별된)에 대해 식별된 의존성을 획득한 이후의 첫 재시도는 순방향 진행을 초래할 수 있다. 또 다른 예시에서, 오직 증가하는 진행만이 헤더 요청의 식별된 의존성의 획득에 후속하는 재시도로부터 달성될 수 있다. 예를 들어, 다중 의존성은 요청의 순방향 진행을 수행하는 방식이며 의존성 중 하나를 획득한 이후에 요청을 재시도하는 즉시, 요청은 다시 실패할 수 있고 제2 의존성은 식별될 수 있다. 상태 정보 테이블(515)에서 식별된 것처럼, 요청의 의존성은 제2 의존성을 식별하기 위해 갱신될 수 있다. 이러한 상이한 제2의 의존성을 획득하는 즉시, 요청은 다시 재시도될 수 있고 계속해서 순방향 진행이 수행된다.
일부 구현에서, 일단 가상 재시도 큐의 헤더 요청이 순방향 진행을 수행한다면, 가상 큐 내의(예컨대 FIFO 순서 내의) 다음 요청에서 가상 큐의 헤더 위치를 가정할 수 있다. 초기 재시도는 신규 헤더 요청의 의존성을 획득하기 위해 이 신규 헤더 요청에 대해 수행할 수 있다. 의존성은 획득될 수 있고 가상 재시도 큐의 모든 요청이 대응적으로 재시도되고 순방향 진행을 만들 때까지 계속해서 신규 헤더 요청은 재시도될 수 있다. 가상 재시도 큐가 비어있을 때, 기아 상태 모드로부터 빠져나오게 하기 위해 신호를 발생할 수 있다. 가상 재시도 큐 로직은 유예될 수 있고고 정규 동작(예컨대 기존의 재시도 모드와 같은)이 순방향 진행을 조장하기 위해 재개된다.
위에서 설명한 바와 같이, 일부 예시에서 다중 큐(예컨대 다중 흐름 제어 클래스 및/또는 IP 블록의)는 동일한 의존성에 대해서 경쟁할 수 있다. 의존성이 획득될 때, 중재 로직은 경쟁하는 가상 재시도 큐(예컨대, 520) 중 어떤 것이 최초로 자신의 개별 헤더 요구를 재시도하도록 허용되어야 하는지 결정할 수 있다(예를 들어, 라운드 로빈, 규칙 기반, 또는 다른 방식을 사용해서). 자신의 개별 헤더 요구를 재시도하기 위해 허가되는 가상 재시도 큐는 이런 방식으로 동작할 것이고, 반면에 모든 다른 경쟁하는 헤더 요청(또는 응답)은 현재 헤더 요청의 재시도를 식별하기 위해 그들의 의존성을 갱신한다(예컨대, HasConflict 값을 설정하고 충돌하는 의존성에 기반하여 재시도되고 있는 헤더 요청의 TOR ID에 대해 ReqDepInfoTorId 필드에 대해 설정함으로써). 재시도되고 있는 가상 재시도 큐의 헤더가 순방향 진행을 하게 될 때, 획득된 의존성을 대기하는 모든 가상 재시도 큐의 헤더가 순방향 진행을 수행할 때까지 가상 재시도 큐 중 또 다른 것은 계속해서 자신의 개별 헤더를 재시도하는 것이 허용될 수 있다.
TOR ID 또는 다른 식별자는 파이프 라인 상에서 전송되는 모든 요청에 할당될 수 있다. 일부 구현에서 이러한 식별자들은 착신 요청을 수용할 때 CHA의 목적지에 의해 할당될 수 있다. 일부 구현에서, TOR ID의 할당(또는 다른 식별자의)은 요청이 순방향 진행을 획득했다는 것을 나타낼 수 있다. 이러한 식별자는 시스템 내에 있는 동안 요청에 대해 고유할 수 있다. 일부 구현에서, 일단 TOR ID가 요청에 할당되면, 상태 정보는 요청과 관련하여 전송될 다른 메시지에 대해 유지될 수 있다. 예를 들어, 캐시 또는 메모리의 레코드는 요청의 전송자에 응답하려고 시도하는 요청을 수신하는 CHA에 의해 요청될 수 있다. 마찬가지로, 요청에 응답하는 응답 메시지에 대한 상태 정보(예컨대, 완료)는 유지될 수 있다. 수신된 요청 또는 트랜잭션의 "응답 단계"에 대해 응답하여 전송되는 이러한 메시지는 본원에서 "응답" 메시지 또는 단순하게 "응답"으로 지칭된다. 한편으로는, "요청" 메시지 또는 "요청"은 트래커(tracker)(예컨대, TOR ID)가 메시지와 트랜잭션에 아직 할당되지 않았을 때 트랜잭션에서 초기 요청을 포함하는 메시지에 대응한다. 요청과 마찬가지로, 응답은 그 자체가 순방향 진행 제기 및 재시도의 대상일 수 있다. 따라서, 응답 가상 재시도 큐는 도 6의 예시에 도시되고 설명된 바와 같이 유지될 수 있다.
예를 들어, 도 6의 간략화된 블록도(600)와 관련하여 예시된 예에서 도시된 것처럼, 응답 가상 재시도 큐는 요청 가상 재시도 큐(예컨대, 도 5의 예시의 요청 가상 재시도)와 다르게 구조화 및 동작될 수 있다. 일부 구현에서, 기아 상태 모드는 요청과 마찬가지로 사전결정된 임계를 넘어서 연속적으로 재시도된 주어진 응답에 대해 트리거링 될 수 있다. 기아 상태 모드가 응답의 특정 흐름 제어 클래스에서처럼 임계에 기반하여 트리거링 될 때, 대응하는 가상 재시도 큐는 활성화될 수 있다. 일부 구현에서, 상태 정보는 트리거링된 기아 상태 모드보다 훨씬 이전의 응답에 대해 수집 및 유지될 수 있다. 또한, 오직 가상 재시도 큐의 헤더에 대해서만 상태 정보를 유지하는 것이 아니라, 상태 정보는 다른 예시들 중에서 TOR ID를 가지는 각각의 응답에 대해 획득될 수 있다.
예시적인 일 구현예에서, 적어도 일부의 상태 정보는 TOR ID에 할당된 트랜잭션(및 복합 요청(즉, 응답))에 대해서 발생되고, 수집되고, 유지될 수 있다. 이러한 상태 정보는 기아 상태 모드에 진입하기 훨씬 전에 수집될 수 있다. 예를 들어, 내부적 기아 상태 모듈(610)에 의해 트리거링 되는 기아 상태 모드 이전에 재시도될 때, 의존성 정보 테이블(605)은 응답에 대해 유지할 수 있다. 응답에 대한 의존성 정보는 요청 가상 재시도 큐의 요청에 대해 수집된 정보와 유사할 수 있다. 예컨대, 각 TOR ID에 대해, 의존성 정보(예를 들면, 605)는 재시도가 특정 TOR ID의 하나 이상의 응답(예를 들면 현재 응답 요청)에 대해 수행되고 있는지에 대한 식별을 포함할 수 있다. 의존성 정보는 또한 현재 의존성(예컨대, TOR ID에 대해서 식별된)의 식별을 포함하는데, 예를 들면, 응답의 가장 최근의 재시도로부터 식별되는 공지의 의존성 세트 중 하나의 코드를 포함한다.
요청 가상 재시도 큐처럼, 응답의 재시도는 추적될 수 있는데, 예를 들면 내부적 기아 상태 로직에 의해서, 하나 이상의 응답이 수용 가능한 임계를 넘어서 재시도되었을 때 식별할 수 있다. 임계가 충족될 때, 기아 상태 모드에 진입될 수 있고 응답 가상 재시도 큐(615)가 활성화될 수 있다. 일부 구현에서, 응답의 큐잉은 FIFO 방식에 따른다기보다는 라운드 로빈의 방식이나 다른 방식으로 행해질 수 있다. 예를 들면, 일 실시예에서, 기아 상태 모드에서 응답의 큐잉은 의존성 유형에 따를 수 있다. 의존성은 우선시될 수 있고, 응답은 이들이 의존하는 자원에 따라 재시도될 수 있다. 예컨대, 의존성이 획득될 때, 그 의존성을 갖는 가상 재시도 큐에 큐잉된 모든 응답은 재시도될 수 있다. 동일한 의존성을 갖는 시도에 대한 두 개 이상의 응답 중 어떤 것을 중재하는 것은 라운드 로빈, 응답 유형, FIFO, 또는 다른 방식에 기반할 수 있다. 예를 들면, 응답 의존성은 다양한 일관성 링크 흐름 제어 클래스 및 엔티티의 대기된 크레디트를 수반하는 의존성을 포함하는데, 예를 들면, 다른 예 중에서 요청 흐름 제어 채널, 응답 흐름 제어 채널, 비일관성 바이패스 채널, 라이트백 채널, 비일관성 표준 채널, 스누프 동보통신 채널, 로컬 홈 에이전트 크레디트를 포함할 수 있다.
추가적인 의존성 정보는 기아 상태 모드 동안 이용하기 위해 응답에 대해 유지될 수 있다. 예를 들면, 의존성 정보(620)는 요청 가상 재시도 큐 내에 유지되는 것과 마찬가지로, HasInfo, HasConflict 및 RespInfoTorID 값을 포함할 수 있다. 다른 값은 또한 재시도된 응답에 대해 유지될 수 있는데, 예를 들면 다른 예 중에서 RespInfoOrig 값(예컨대, 응답 재시도 큐의 대응하는 엔트리와 연관된)이 있다. 일부 예시에서, 이러한 정보(620)는 기아 상태 모드가 트리거링되었는지 되지 않았는지에 무관하게 모든 TOR ID에 대해 유지될 수 있다. 다른 예에서, 일부 의존성 정보(예컨대, 605)는 TOR ID가 할당한 능동 응답에 대해 내내 유지되고, 반면에 다른 정보(예컨대, 615)는 다른 잠재적인 예시들 중에서 기아 상태 모드가 트리거링 되었을 때 처음 수집된다.
요청 가상 재시도 큐처럼, 응답 가상 재시도 큐는 대응하는 의존성이 획득될 때까지 기아 상태 모드 동안 재시도를 중지할 수 있다. 가상 재시도 큐 로직은 또한 큐(예컨대, 의존성 정보(605)에 식별된 것처럼)의 응답에 대해 식별되는 의존성을 획득하기 위해 시도할 수 있다. 의존성이 획득될 때, 특정 의존성을 대기하는 모든 큐잉된 응답은 재시도될 수 있다. 일부 경우에서, 재시도는 응답에 대해서 순방향 진행을 초래할 것이고, 다른 점증하는 진행에서는 응답의 순방향 진행을 방해하는 추가적인 의존성의 식별을 초래할 것이다. 신규 또는 갱신된 의존성 정보가 TOR ID에 대해 획득될 때 의존성 갱신은 수행될 수 있다. 또한, 응답 가상 재시도 큐(예컨대, 615)와 다른 가상 재시도 큐(예컨대, 520) 사이의 충돌은 식별될 수 있고 요청 가상 재시도 큐처럼, 시스템에 의해 중재될 수 있다. 또한, 가상 재시도 큐가 소거될 때까지 기아 상태 모드는 유지될 수 있는데, 그때 제어는 응답 큐(625)로 복귀된다. 일부 예에서, 응답 큐(625)는 라운드 로빈 또는 다른 방식에 따라 큐잉될 수 있다.
이제, 도 7의 간략화된 흐름도(700)로 돌아가서, 일부 예시적인 구현에 따라 가상 재시도 큐와 관련하여 예시의 기술이 예시된다. 예를 들면, 기아 상태 모드가 IP 블록의 특정 CHA의 큐에 대해 진입될 수 있다(705). 큐는 다중의 상이한 흐름 제어 클래스 중 특정 클래스에 대응할 수 있다. 기아 상태 모드는 임계를 충족하거나 초과하는 특정 요청(또는 응답)의 검출된 재시도 횟수에 기반하여 진입될 수 있다(705). 특정 의존성은 요청에 대해 식별될 수 있다(710). 일부 경우, 의존성은 큐 내의 요청에 대해 식별될 수 있다(710). 일부 예에서, 기아 상태가 진입된 이후에 큐 내의 리드(lead), 헤더, 요청에 대해 의존성이 식별된다. 요청은 큐의 최상부를 향해 높아지므로, 한 번에 하나씩 요청에 대해 의존성이 식별될 수 있다. 다른 예에서, 응답 재시도 큐처럼 의존성이 식별될 수 있고, 기아 상태 모드가 진입되기 이전과 이후에 모든 의존성에 대해 추적될 수 있다.
재시도 큐 내의 하나 이상의 요청에 대해 의존성이 식별(710)되어 의존성이 획득되도록 시도될 수 있다. 예를 들어, 크레디트가 자원에 대해 요청될 수 있고 이에 따라 요청이 의존성이다. 의존성이 획득 또는 해소되었음을 식별하는 데이터가 수신된다. 예를 들어, 크레디트가 승인되고 다른 요청이 재시도되었으며 자원을 액세스하는 다른 블록이 자원을 해방하였음 식별하는 데이터가 수신될 수 있다. 의존성 획득이 감시된다(715). 요청에 대한 의존성이 획득될 때, 요청은 재시도될 수 있다(720). 일부 경우, 동일한 의존성을 대기하는 다중 요청(예컨대 응답)이 의존성의 획득을 기반으로 재시도될 수 있다.
요청의 재시도(720) 다음에 요청이 순방향 진행을 수행하는지가 평가될 수 있다(725). 어떤 경우, 이전에 순방향 진행이 지연된 의존성을 해소하는 즉시, 재시도가 요청의 성공적인 완료 또는 제출할 것이다. 다시 말해서, 순방향 진향은 추가의 의존성 덕분에 여전히 교착 상태에 빠질 수도 있다. 만약에 순방향 진행이 재시도로부터 요청과 관련해 발생하지 않으면, 일부 경우에 재시도로부터 획득된 정보로부터 다른 의존성이 식별된다(710). 이러한 제2 의존성은 획득될 수 있고(715), 순방향 진행이 이루어질 때까지 시퀀스가 반복되면서 요청이 재시도될 수 있다(720). 만약 순방향 진행이 이루어진다면, 성공적으로 재시도된 요청이 재시도 큐로부터 누락될 수 있다. 만약 재시도 큐가 성공적인 재시도 이후에 비어 있다면, 기아 상태 모드는 종료될 수 있고(735), 제어는 재시도 큐로부터 표준 큐로 전달될 수 있다. 만약 추가의 요청이 남아 있으면, 이 요청의 의존성이 식별되고(710)(요청이 없을 때까지), 의존성이 획득될 수 있다(715). 일단 의존성이 획득되면(715), 재시도 큐 내의 모든 요청에 대해 순방향 진행이 설립될 때까지 두드러진 요청이 재시도된다(720).
위에 설명된 장치, 방법 및 시스템이 전술한 임의의 전자 장치 또는 시스템에 구현될 수 있음에 유의하라. 특정 예시로서, 아래에 예는 본원에 설명된 발명을 활용하는 예시적인 시스템을 제공한다. 아래의 시스템이 더 자세히 설명되므로, 다수의 상이한 인터커넥트가 전술한 내용으로부터 개시, 설명 및 재논의된다. 그리고 명확히 알 수 있듯이, 인터커넥트, 패브릭 또는 아키텍처 중 임의의 것에 전술한 개선 내용이 적용될 수 있다.
도 8로 돌아가서, 본 발명의 실시예에 따른 제2 시스템(800)의 블록도가 도시된다. 도 8에 도시된 것처럼, 멀티프로세서 시스템(800)은 포인트-투-포인트 인터커넥트 시스템이고, 제1 프로세서(870)와, 포인트-투-포인트 인터커넥트(850)를 통해 접속된 제2 프로세서(880)를 포함한다. 프로세서(870, 880)의 각각은 어떤 버전의 프로세서일 것이다. 일 실시예에서, 도면부호(852, 854)는 직렬의 포인트-투-포인트 일관성 인터커넥트 패브릭의 일부인데, 예컨대 인텔의 QPI 아키텍처이다. 그 결과, 본 발명은 QPI 아키텍처 내에 구현될 수 있다.
두 개의 프로세서(870, 880)만 도시되어 있지만, 본 발명의 범주는 이에 제한되지 않음이 이해될 것이다. 다른 실시예에서, 하나 이상의 추가의 프로세서가 소정의 프로세서에 제공될 수도 있다.
프로세서(870, 880)는 집적된 메모리 콘트롤러 유닛(872, 882)를 각각 포함하는 것으로 도시된다. 프로세서(870)는 자신의 버스 콘트롤러 유닛의 일부로서 포인트-투-포인트(P-P) 인터페이스(876, 878)를 포함하고, 마찬가지로 제2 프로세서(880)는 P-P 인터페이스(886, 888)를 포함한다. 프로세서(870, 880)는 P-P 인터페이스 회로(878, 888)을 이용하여 포인트-투-포인트(P-P) 인터페이스(850)를 통해 정보를 교환할 수 있다. 도 8에 도시된 것처럼, IMC(872, 882)는 프로세서를 개별 메모리, 즉, 메모리(832)와 메모리(834)에 접속하는데, 이것은 각각의 프로세서에 국소적으로 부착된 주 메모리의 일부분일 수 있다.
프로세(870, 880)는 각각 포인트-투-포인트 인터페이스 회로(876, 894, 886, 989)를 이용하여 개별 P-P 인터페이스(852, 854)를 통해 칩셋(890)과 정보를 교환한다. 칩셋(890)은 고성능 그래픽 인터커넥트(839)와 함께 집적 회로(892)를 통해 고성능 그래픽 회로(838)와 정보를 교환한다.
공유된 캐시(도시 안 됨)는 한쪽 프로세서에 포함되거나 또는 두 프로세서의 외부에 포함될 수 있는데, 이들은 P-P 인터커넥트를 통해 여전히 프로세서에 연결되어 있으므로, 프로세서가 저 전력 모드에 있다면 한쪽 프로세서 또는 두 프로세서의 로컬 캐시 정보는 공유된 캐시에 저장될 수 있다.
칩셋(890)은 인터페이스(896)를 통해 제1 버스(816)에 접속될 수 있다. 일 실시예에서, 제1 버스(816)는, 본 발명의 범주가 그런 식으로 제한되지는 않지만, PCI 버스이거나 예컨대 PCIe 같은 버스이거나 또는 또 다른 제3세대 I/O 인터커넥트 버스일 수 있다.
도 8에 도시된 것처럼, 다양한 I/O 장치(814)가 제1 버스(816)에 접속되고, 버스 브릿지(818)는 제1 버스(816)를 제2 버스(820)에 접속한다. 일 실시예에서, 제2 버스(820)는 LPD(low pin count) 버스를 포함한다. 키보드 및/또는 마우스(822)와, 통신 장치(827)와, 예컨대 명령어/코드 및 데이터(830)를 포함하는 디스크 드라이브나 대용량 저장 장치 같은 저장 유닛(828)을 포함한 다양한 장치들이 제2 버스(820)에 접속된다. 또한, 오디오 I/O(824)가 제2 버스(820)에 접속되도록 도시된다. 다른 아키텍처도 가능함에 유의하며, 이때 포함된 구성요소와 인터커넥트 아키텍처는 변한다. 예를 들어, 도 8의 포인트-투-포인트 아키텍처 대신에 시스템이 다중 드롭 버스 또는 다른 이런 아키텍처를 구현할 수도 있다.
본 발명이 제한 수의 실시예와 관련하여 설명되었지만, 본 기술분야에 숙련된 사람이라면 다양한 수정안 및 변형안을 인지할 것이다. 첨부된 특허청구범위는 이러한 모든 수정안 및 변형안을 본 발명의 사상과 범주 내에 있는 것으로서 포함하는 것으로 의도된다.
설계는 생성에서부터 시뮬레이션을 통해 제조에 이르기까지 다양한 단계들을 거칠 것이다. 설계를 나타내는 데이터는 다수의 방식으로 설계를 나타낼 수 있다. 먼저, 시뮬레이션에서 유용하므로 하드웨어는 하드웨어 설명 언어 또는 또 다른 기능성 설명 언어를 이용하여 표현될 수 있다. 게다가, 로직 및/또는 트랜지스터 게이트와 함께 회로 레벨 모델이 설계 프로세스의 일부 단계에서 만들어질 것이다. 더 나아가, 대부분의 설계는 일부 단계에서 하드웨어 모델에서 다양한 장치의 물리적 배치를 나타내는 데이터의 레벨에 이른다. 종래의 반도체 제조 기술이 이용되는 경우, 하드웨어 모델을 나타내는 데이터는 집적 회로를 만드는데 이용되는 마스크와 관련하여 상이한 마스크 계층에서 다양한 특징의 존재 또는 부재를 지정하는 데이터일 수 있다. 임의의 설계 표현에서, 데이터는 임의의 형태의 머신 판독 가능 매체에 저장될 수 있다. 메모리나 예컨대 디스크 같은 자기적 혹은 광학적 저장 장치는 이런 정보를 전송하기 위해서 변조되거나 발생된 광학적 또는 전기적 파를 통해 전송되는 정보를 저장하는 머신 판독 가능 매체일 수 있다. 코드 또는 설계를 나타내거나 운반하는 전기적 반송파가 전송될 때, 전기적 신호의 복사, 버퍼링 또는 재전송이 수행될 정도까지 새로운 복사가 이루어진다. 그러므로 통신 공급자 또는 네트워크 공급자는 본 발명의 실시예의 가르침을 구현하는 예컨대 반송파에 엔코딩된 정보와 같은 조항을 적어도 일시적으로 실체적인 머신 판독 가능 매체에 저장할 수 있다.
본원에서 이용되는 모듈은 하드웨어, 소프트웨어 및/또는 펌웨어의 임의의 조합을 말한다. 예로서, 모듈은 마이크로콘트롤러 같은 하드웨어를 포함하며 이것은 마이크로콘트롤러에 의해 실행되도록 되어 있는 코드를 저장하는 비일시성 매체와 연관된다. 그러므로 일 실시예로 모듈에 대한 언급은 구체적으로 비일시성 매체에 보유되는 코드를 인식 및/또는 실행하도록 구성되는 하드웨어를 말한다. 더 나아가, 다른 실시예에서, 모듈의 이용은 코드를 포함하는 비일시성 매체를 참조하는데, 이것은 구체적으로 사전 결정된 동작을 수행하도록 마이크로콘트롤러에 의해 실행되도록 되어 있다. 추론할 수 있는 바와 같이, 또 다른 실시예에서, 모듈이라는 용어(이 예에서)는 마이크로콘트롤러와 비일시성 매체의 조합을 지칭한다. 종종, 독립적인 것으로 예시된 모듈의 경계는 공동으로 변하고 잠재적으로 중첩한다. 예를 들어, 제1 및 제2 모듈은 일부 독립적인 하드웨어, 소프트웨어 또는 펌웨어를 잠재적으로 함유하는 동안 하드웨어, 소프트웨어, 펌웨어 또는 이들의 조합을 공유할 수 있다. 일 실시예에서, 로직이라는 용어의 이용은 프로그램 가능 로직 장치처럼 예컨대 트랜지스터, 레지스터 또는 다른 하드웨어 같은 하드웨어를 포함한다.
일 실시예에서, '하도록' 또는 '하도록 구성되는'이라는 표현의 이용은 지정 또는 결정된 태스크를 수행하기 위해 장치, 하드웨어, 로직 또는 요소를 배열하기, 조립하기, 제조하기, 판매를 제공하기, 불러오기 및/또는 설계하기를 지칭한다. 이 예에서, 동작하지 않는 장치 또는 그 요소는 만약에 그것이 지정된 태스크를 수행하도록 설계, 접속 및/또는 상호연결된다면 그 지정된 태스크를 수행하도록 "구성되는 것이다. 순수하게 예시를 위한 예로서, 로직 게이트는 동작 동안에 0 또는 1을 제공한다. 그러나 클록에 대해 인에이블 신호를 제공하도록 구성된 로직 게이트는 1 또는 0을 제공할 수 있는 잠재적인 로직 게이트를 포함하지 않는다. 대신에, 로직 게이트는 동작 동안에 1 또는 0 출력이 클록을 인에이블하는 어떤 방식으로 접속된 것이다. 일단 "하도록 구성되는'이라는 용어의 이용은 동작을 요구하지는 않지만 대신에 장치, 하드웨어 및/또는 요소의 잠재적인 상태에 초점을 맞추며, 여기서 이러한 잠재적인 상태에서 장치, 하드웨어 및/또는 요소는 장치, 하드웨어 및/또는 요소가 동작중일 때 특정 태스크를 수행하도록 설계된다.
더 나아가, 일 실시예에서 '할 수 있는' 및/또는 '동작 가능한'이란 표현의 이용은 특정 방식으로 장치, 로직, 하드웨어 및/또는 요소의 이용을 가능하게 하는 방식으로 설계된 일부 장치, 하드웨어 및/또는 요소를 지칭한다. 일 실시예에서, 위에서처럼 '할 수 있는' 또는 '동작 가능한'이란 표현의 이용은 장치, 로직, 하드웨어 및/또는 요소의 잠재적인 상태를 말하는데, 여기서 장치, 로직, 하드웨어 및/또는 요소는 동작중이지는 않지만 특정 방식으로 장치의 이용을 가능하게 하는 방식으로 설계된다.
본원에서 이용되는 값은 숫자, 상태, 논리 상태 또는 이진 로직 상태의 임의의 공지된 표현을 포함한다. 종종 로직 레벨, 로직 값 또는 논리값의 이용은 1과 0을 말하며, 이것은 단순히 이진 논리 상태를 나타낸다. 예를 들어, 1은 고 로직 레벨을 말하고, 0은 저 로직 레벨을 말한다. 일 실시예에서, 트랜지스터 또는 플래시 셀 같은 저장장치 셀은 단일 논리값 또는 다중 논리값을 보유할 수 있을 것이다. 그러나 컴퓨터 시스템 내의 값의 다른 표현들도 이용된다. 예를 들어, 십진수 10은 이진수 1110과 16진법 문자 A로 표시될 수 있다. 그러므로 값은 컴퓨터 시스템에 보유될 수 있는 정보의 임의적 표현을 포함한다.
더욱이, 상태는 값 또는 값의 부분으로 표현될 수 있다. 예로서, 논리 1 같은 제1 값은 초기 상태 또는 디폴트 상태를 나타낼 수 있으며, 반면에 논리 0 같은 제2 값은 넌-디폴트 상태를 나타낼 수 있다. 또한, 리셋(reset) 및 세트(set)란 용어는 일 실시예에서 디폴트 및 갱신된 값 또는 상태를 각각 말한다. 예를 들어, 디폴트 값은 잠재적으로 고 논리값, 즉 리셋을 포함하고, 반면에 갱신된 값은 잠재적으로 저 논리값, 즉, 세트를 포함한다. 값들의 임의의 조합은 임의 개수의 상태를 나타내는데 이용될 수 있음을 유의하라.
위에서 언급된 방법, 하드웨어, 소프트웨어, 펌웨어 또는 코드의 실시예는 처리 요소에 의해 실행 가능한 머신 액세스 가능, 머신 판독 가능, 컴퓨터 액세스 가능 또는 컴퓨터 판독 가능 매체에 저장되는 명령어 또는 코드를 통해 구현될 수 있다. 비일시성 머신 액세스 가능/판독 가능 매체는 예컨대 컴퓨터 또는 전자 시스템 같은 머신에 의해 판독 가능한 형태로 정보를 제공(즉, 저장 및/또는 전송)하는 임의의 메커니즘을 포함한다. 예를 들어, 비일시성 머신 액세스 가능 매체는 예컨대 SRAM이나 DRAM 같은 RAM, ROM, 자기적 또는 광학적 저장 매체, 플래시 메모리 장치, 전기적 저장 장치, 광학적 저장 장치, 음향 저장 장치, 일시성(전파된) 신호(예컨대, 반송파, 적외선 신호, 디지털 신호)로부터 수신된 정보를 보유하는 다른 형태의 저장 장치를 포함하는데, 이것은 정보를 수신할 수 있는 비일시성 매체와 구별되어야 한다.
본 발명의 실시예를 수행하는 프로그램 로직에 이용되는 명령어는 예컨대 DRAM, 캐시, 플래시 메모리 또는 다른 저장장치처럼 시스템 내의 메모리에 저장될 수 있다. 더 나아가, 명령어는 다른 컴퓨터 판독 가능 매체에 의해 또는 네트워크를 통해 분산될 수 있다. 그러므로 머신 판독 가능 매체는 머신에 의해 판독 가능한 형태로 정보를 저장 또는 전송하는 임의의 메커니즘을 포함할 수 있는데, 제한하려는 것은 아니지만, 플로피 디스켓, 광학 디스크, CD, CD-ROM, 자기 광학적 디스크, ROM, RAM, EPROM, 지가 또는 광학 카드, 플래시 메모리 또는 전기적, 광학적, 음향적 또는 다른 형태의 전파된 신호(예를 들면, 반송파, 적외선 신호, 디지털 신호)를 통하여 인터넷상으로 정보의 전송에 이용되는 실체적인 머신 판독 가능 저장 장치를 포함할 수 있다. 따라서, 컴퓨터 판독 가능 매체는 머신에 의해 판독 가능한 형태로 전자적 명령어 또는 정보를 저장 또는 전송하기에 적합한 임의의 유형의 실체적 머신 판독 가능 매체를 포함한다.
다음의 예들은 본 명세서에 따른 실시예와 관련이 있다. 하나 이상의 실시예는 기아 상태 모드로 진입하고 재시도 큐 내의 제1 요청의 특정 의존성을 식별하고 특정 의존성이 획득됨을 결정하며 특정 의존성의 획득에 기반하여 제1 요청을 재시도하는 장치, 시스템, 머신 판독 가능 저장 장치, 머신 판독 가능 매체, 하드웨어 기반 로직 및/또는 소프트웨어 기반 로직 및 방법을 제공할 수 있다.
적어도 일 예에서, 로직은 하드웨어 회로의 적어도 일부에 구현된다.
적어도 일 예에서, 기아 상태 모드는 복수의 흐름 제어 클래스 중 특정 흐름 제어 클래스에 대해 진입되는 것이고, 재시도 큐는 복수의 흐름 제어 클래스의 각각에 대해 제공된다.
적어도 일 예에서, 제1 요청은 트랜잭션의 초기 요청을 포함하고, 제1 요청은 재시도 큐의 헤더 요청으로서 지정될 수 있다.
적어도 일 예에서, 재시도 큐 내의 요청은 FIFO 순서로 정렬된다.
적어도 일 예에서, 제1 요청의 재시도를 통해 순방향 진행이 달성됨이 결정될 수 있고, 복수의 요청에서 제2 요청은 재시도 큐의 헤더 요청으로서 지정될 수 있으며, 이때 제2 요청은 FIFO 순서에서 제1 요청에 후속한다. 제2 요청의 의존성이 식별될 수 있으며, 제2 요청의 의존성이 획득됨이 결정될 수 있고, 제2 요청은 제2 요청의 의존의 획득에 기반하여 재시도될 수 있다.
적어도 일 예에서, 제2 요청의 의존성은 상기 특정 의존성과 상이하다.
적어도 일 예에서, 제 1 요청은 수신된 요청에 대해 발생될 응답에 대응한다.
적어도 일 예에서, 재시도 큐는 의존성 유형을 적어도 일부분 기반하여 정렬되는 것이다.
적어도 일 예에서, 제1 요청은 재시도 큐 내의 복수의 요청 중 하나이며, 상기 특정 의존성이 복수의 요청 중 제2 요청에 적용됨이 결정될 수 있으며, 제2 요청은 상기 특정 의존성의 획득에 기반하여 재시도될 수 있다.
적어도 일 예에서, 제1 요청은 기아 상태 모드에 진입되기 전에 고유 식별자에 할당된다.
적어도 일 예에서, 의존성은 제1 요청이 전송될 파이프라인으로부터 수신된 의존성 정보로부터 획득된다.
적어도 일 예에서, 의존성 정보는 제1 요청의 재시도와 연관하여 수신된다.
적어도 일 예에서, 제1 요청은 순방향 진행의 실패로 재시도 큐에 부가된다.
적어도 일 예에서, 제1 요청이 계속해서 재시도로부터 순방향 진행을 수행하는 데 실패했음이 식별될 수 있고, 또 다른 의존성이 이 재시도에 기반하여 식별될 수 있으며, 제1 요청은 다른 의존성이 획득된 이후에 재시도된다.
적어도 일 예에서, 재시도 큐와 또 다른 재시도 큐 사이의 충돌이 식별될 수 있고, 여기서 충돌은 의존성의 적어도 일부분에 기반하여 제1 요청의 재시도와 다른 재시도 큐 내의 특정 요청의 재시도 사이에 충돌을 포함한다.
적어도 일 예에서, 재시도 큐는 가상 재시도 큐를 포함하고, 가상 재시도 큐는 표준 큐를 가리킨다.
적어도 일 예에서, 가상 재시도 큐는 기아 상태 모드 동안에 활성화된다.
적어도 일 예에서, 의존성 정보는 제1 요청 동안 보유될 수 있고, 여기서 의존성 정보는 제1 요청이 기아 상태 모드 동안에 재시도되었는지에 대한 식별, 상기 특정 의존성의 식별, 상기 특정 의존성이 획득되었는지에 대한 식별 및 충돌이 또 다른 재시도 큐와 함께 종료한건지에 대한 식별 중 하나 이상의 식별을 포함한다.
적어도 일 예에서, 의존성 정보는 재시도 큐의 헤더 요청을 위해서만 보유된다.
적어도 일 예에서, 의존성 정보는 재시도 큐 내의 각각의 요청을 위해 보유된다.
적어도 일 예에서, 제1 요청의 재시도의 분량이 결정될 수 있고, 재시도의 분량이 임계 분량을 초과함이 결정될 수 있다. 기아 상태 모드는 재시도의 분량이 임계 분량을 초과함을 결정하는 것에 기반하여 진입될 수 있다.
적어도 일 예에서, 신규 요청은 기아 상태 모드 동안 중단된다.
적어도 일 예에서, 기아 상태 모드는 재시도 큐가 비었을 때 종료된다.
적어도 일 예에서, 상기 특정 의존성은 획득되도록 시도될 수 있다.
적어도 일 예에서, 제1 장치와, 포인트-투-포인트 직렬 인터커넥트를 이용하여 제1 장치에 통신 가능하게 접속된 제2 장치를 포함하는 시스템이 제공될 수 있다. 제2 장치는 기아 상태 모드에 진입하고, 재시도 큐의 헤더 요청으로서 제2 장치로부터 제1 장치로 전송될 제1 요청을 지정하고, 제1 요청의 특정 의존성을 식별하고, 상기 특정 의존성이 획득됨을 결정하며, 상기 특정 의존성의 획득에 기반하여 제1 요청을 재시도하는 로직을 포함한다. 일부 예에서, 제1 장치는 복수의 IP(intellectual property) 블록 중 제1 블록을 포함하고, 제2 장치는 복수의 IP 블록 중 제2 블록을 포함한다. 일부 예에서, 제2 장치는 복수의 흐름 제어 클래스와 연관된 복수의 재시도 큐를 보유한다. 일부 예에서, 복수의 재시도 큐는 적어도 하나의 요청 가상 재시도 큐와 적어도 하나의 응답 가상 재시도 큐를 포함한다.
명세서의 전체에서 "일 실시예" 또는 "실시예"라고 언급하는 것은 이 실시예와 관련하여 설명된 특정 특징, 구조 또는 특성이 본 발명의 적어도 하나의 실시예에 포함됨을 의미한다. 그러므로 명세서의 전체적으로 여러 군데에서 나타나는 "일 실시예에서" 또는 "실시예에서"라는 표현이 반드시 동일한 실시예를 말하는 것은 아니다. 더욱이, 특정 특징, 구조 또는 특성이 하나 이상의 실시예에서 임의의 적합한 방식으로 조합될 수도 있다.
전술한 명세서에서, 세부적인 설명이 특정 예시적인 실시예를 참조하여 제공되었다. 그러나 이에 대해 특허청구범위에서 설정되는 본 발명의 광의적 사상과 범주를 벗어나지 않으면서 다양한 수정 및 변경이 행해질 수 있음이 자명할 것이다. 따라서 명세서 및 도면은 제한적 의미가 아닌 예시적 의미로 간주되어야 한다. 더 나아가, 전술한 실시예의 이용과 다른 예시적인 표현이 반드시 동일한 실시예 또는 동일한 예를 말하는 것은 아니며, 잠재적으로 동일한 실시예를 말하는 것과 더불어 상이하고 별개인 실시예를 말하는 것일 수도 있다.

Claims (31)

  1. 로직을 포함하는 장치로서,
    상기 로직은
    기아 상태 모드(starvation mode)에 진입하는 로직과,
    재시도 큐(retry queue) 내의 제1 요청의 특정 의존성(particular dependency)을 식별하는 로직과,
    상기 특정 의존성이 획득됨을 결정하는 로직과,
    상기 특정 의존성의 획득에 기반하여 상기 제1 요청을 재시도하는 로직에 접속되는
    장치.
  2. 제1항에 있어서,
    상기 로직은 하드웨어 회로 내에 적어도 일부분 구현되는
    장치.
  3. 제1항에 있어서,
    상기 기아 상태 모드는 복수의 흐름 제어 클래스(a plurality of flow control classes) 중 특정 흐름 제어 클래스에 대해 진입되는 것이고, 재시도 큐가 상기 복수의 흐름 제어 클래스의 각각에 대해 제공되는
    장치.
  4. 제1항에 있어서,
    상기 제1 요청은 트랜잭션의 초기 요청을 포함하고, 상기 로직은 상기 제1 요청을 상기 재시도 큐의 헤더 요청으로서 지정하는 로직에 또한 접속되는
    장치.
  5. 제4항에 있어서,
    상기 재시도 큐 내의 요청은 FIFO(first-in-first-out) 순서로 정렬되는
    장치.
  6. 제5항에 있어서,
    상기 로직은
    상기 제1 요청의 재시도를 통해 순방향 진행이 달성됨을 결정하는 로직과,
    복수의 요청에서 제2 요청을 상기 재시도 큐의 헤더 요청으로서 지정하는 로직―상기 제2 요청은 상기 FIFO 순서에서 상기 제1 요청에 후속함―과,
    상기 제2 요청의 의존성을 식별하는 로직과,
    상기 제2 요청의 의존성이 획득됨을 결정하는 로직과,
    상기 제2 요청의 의존성의 획득에 기반하여 상기 제2 요청을 재시도하는 로직에 또한 접속되는
    장치.
  7. 제6항에 있어서,
    상기 제2 요청의 의존성은 상기 특정 의존성과 상이한
    장치.
  8. 제1항에 있어서,
    상기 제1 요청은 수신된 요청에 대해 발생될 응답에 대응하는
    장치.
  9. 제8항에 있어서,
    상기 재시도 큐는 의존성 유형에 적어도 일부분 기반하여 정렬되는 것인
    장치.
  10. 제9항에 있어서,
    상기 제1 요청은 상기 재시도 큐 내의 복수의 요청 중 하나이며,
    상기 로직은
    상기 특정 의존성이 상기 복수의 요청 중 제2 요청에 적용됨을 결정하는 로직과,
    상기 특정 의존성의 획득에 기반하여 상기 제2 요청을 재시도하는 로직에 또한 접속되는
    장치.
  11. 제8항에 있어서,
    상기 제1 요청은 상기 기아 상태 모드에 진입하기 전에 고유 식별자에 할당되는
    장치.

  12. 제1항에 있어서,
    상기 로직은
    상기 제1 요청이 전송될 파이프라인으로부터 수신된 의존성 정보로부터 의존성을 획득하는 로직에 또한 접속되는
    장치.
  13. 제12항에 있어서,
    상기 의존성 정보는 상기 제1 요청의 재시도와 연관하여 수신되는
    장치.
  14. 제1항에 있어서,
    상기 제1 요청은 순방향 진행을 수행하는 것에 실패하여 상기 재시도 큐에 부가되는
    장치.
  15. 제14항에 있어서,
    상기 로직은
    상기 제1 요청이 상기 재시도로부터 순방향 진행을 수행는 데 계속 실패함을 식별하는 로직과,
    상기 재시도에 기반하여 또 다른 의존성을 식별하는 로직―상기 제1 요청은 상기 다른 의존성이 획득된 이후에 재시도되는 것임―에 또한 접속되는
    장치.
  16. 제14항에 있어서,
    상기 로직은
    상기 재시도 큐와 또 다른 재시도 큐 사이의 충돌을 식별하는 로직에 또한 접속되며,
    상기 충돌은 상기 의존성의 적어도 일부분에 기반하여 상기 제1 요청의 재시도와 상기 다른 재시도 큐 내의 특정 요청의 재시도 사이의 충돌을 포함하는
    장치.
  17. 제1항에 있어서,
    상기 재시도 큐는 가상 재시도 큐를 포함하고, 상기 가상 재시도 큐는 표준 큐를 가리키는
    장치.
  18. 제17항에 있어서,
    상기 가상 재시도 큐는 상기 기아 상태 모드 동안에 활성화되는
    장치.
  19. 기아 상태 모드에 진입하는 단계와,
    제1 요청을 재시도 큐의 헤더 요청으로서 지정하는 단계와,
    상기 제1 요청의 특정 의존성을 식별하는 단계와,
    상기 특정 의존성이 획득됨을 결정하는 단계와,
    상기 특정 의존성의 획득에 기반하여 상기 제1 요청을 재시도하는 단계를 포함하는
    방법.
  20. 제19항에 있어서,
    상기 제1 요청에 대해 의존성 정보를 유지하는 단계를 더 포함하되,
    상기 의존성 정보는 상기 제1 요청이 상기 기아 상태 모드 동안에 재시도되었는지에 대한 식별과, 상기 특정 의존성에 대한 식별과, 상기 특정 의존성이 획득되었는지에 대한 식별 및 충돌이 또 다른 재시도 큐와 함께 종료하는지에 대한 식별 중 하나 이상을 포함하는
    방법.
  21. 제20항에 있어서,
    상기 의존성 정보는 상기 재시도 큐의 헤더 요청을 위해서만 유지되는
    방법.
  22. 제20항에 있어서,
    상기 의존성 정보는 상기 재시도 큐 내의 각각의 요청을 위해 유지되는
    방법.
  23. 제20항에 있어서,
    상기 제1 요청의 재시도의 분량(an amount of retries)을 결정하는 단계와,
    상기 재시도의 분량이 임계 분량을 초과함을 결정하는 단계를 더 포함하되,
    상기 기아 상태 모드는 상기 재시도의 분량이 임계 분량을 초과한다는 결정에 기반하여 진입되는
    방법.
  24. 코드가 저장된 적어도 하나의 머신 액세스 가능 저장 매체로서,
    상기 코드는 머신에 의해 실행될 때 상기 머신으로 하여금
    기아 상태 모드에 진입하게 하고,
    제1 요청을 재시도 큐의 헤더 요청으로서 지정하게 하며,
    상기 제1 요청의 특정 의존성을 식별하게 하고,
    상기 특정 의존성이 획득됨을 결정하게 하며,
    상기 특정 의존성의 획득에 기반하여 상기 제1 요청을 재시도하게 하는
    머신 액세스 가능 저장 매체.
  25. 제24항에 있어서,
    상기 기아 상태 모드 동안 신규 요청은 중단되는
    머신 액세스 가능 저장 매체.
  26. 제24항에 있어서,
    상기 기아 상태 모드는 상기 재시도 큐가 비었을 때 종료되는
    머신 액세스 가능 저장 매체.
  27. 제24항에 있어서,
    상기 코드는 실행될 때 상기 머신으로 하여금 상기 특정 의존성을 획득하도록 시도하게 하는
    머신 액세스 가능 저장 매체.
  28. 제1 장치와,
    포인트-투-포인트 직렬 인터커넥트(point-to-point serial interconnect)를 이용하여 상기 제1 장치에 통신 가능하게 접속되는 제2 장치를 포함하되,
    상기 제2 장치는
    기아 상태 모드에 진입하고,
    상기 제2 장치로부터 상기 제1 장치로 전송될 제1 요청을 재시도 큐의 헤더 요청으로서 지정하고,
    상기 제1 요청의 특정 의존성을 식별하고,
    상기 특정 의존성이 획득됨을 결정하며,
    상기 특정 의존성의 획득에 기반하여 상기 제1 요청을 재시도하는 로직을 포함하는
    시스템.
  29. 제28항에 있어서,
    상기 제1 장치는 복수의 IP(intellectual property) 블록 중 제1 IP 블록을 포함하고, 상기 제2 장치는 상기 복수의 IP 블록 중 제2 IP 블록을 포함하는
    시스템.
  30. 제28항에 있어서,
    상기 제2 장치는 복수의 흐름 제어 클래스와 연관된 복수의 재시도 큐를 유지하는
    시스템.
  31. 제30항에 있어서,
    상기 복수의 재시도 큐는 적어도 하나의 요청 가상 재시도 큐와 적어도 하나의 응답 가상 재시도 큐를 포함하는
    시스템.
KR1020167008971A 2013-11-06 2013-11-06 가상 재시도 큐 Expired - Fee Related KR101775569B1 (ko)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/US2013/068734 WO2015069235A1 (en) 2013-11-06 2013-11-06 Virtual retry queue

Publications (2)

Publication Number Publication Date
KR20160051883A true KR20160051883A (ko) 2016-05-11
KR101775569B1 KR101775569B1 (ko) 2017-09-19

Family

ID=53008057

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020167008971A Expired - Fee Related KR101775569B1 (ko) 2013-11-06 2013-11-06 가상 재시도 큐

Country Status (5)

Country Link
US (1) US10338974B2 (ko)
EP (1) EP3066573A4 (ko)
KR (1) KR101775569B1 (ko)
CN (1) CN105612502B (ko)
WO (1) WO2015069235A1 (ko)

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9537646B2 (en) * 2014-08-27 2017-01-03 Lattice Semiconductor Corporation Retry disparity for control channel of a multimedia communication link
US9490962B2 (en) * 2014-08-27 2016-11-08 Lattice Semiconductor Corporation Phase relationship control for control channel of a multimedia communication link
US9703951B2 (en) 2014-09-30 2017-07-11 Amazon Technologies, Inc. Allocation of shared system resources
US9754103B1 (en) 2014-10-08 2017-09-05 Amazon Technologies, Inc. Micro-architecturally delayed timer
US9378363B1 (en) 2014-10-08 2016-06-28 Amazon Technologies, Inc. Noise injected virtual timer
US9491112B1 (en) 2014-12-10 2016-11-08 Amazon Technologies, Inc. Allocating processor resources based on a task identifier
US9864636B1 (en) * 2014-12-10 2018-01-09 Amazon Technologies, Inc. Allocating processor resources based on a service-level agreement
US9858190B2 (en) * 2015-01-27 2018-01-02 International Business Machines Corporation Maintaining order with parallel access data streams
US10496448B2 (en) * 2017-04-01 2019-12-03 Intel Corporation De-centralized load-balancing at processors
CN109241066B (zh) * 2017-07-04 2022-09-27 北京国双科技有限公司 请求处理方法及装置
US10417146B1 (en) 2018-05-15 2019-09-17 Apple Inc. Real-time resource handling in resource retry queue
JP7081321B2 (ja) * 2018-06-13 2022-06-07 富士通株式会社 演算処理装置、情報処理装置及び演算処理装置の制御方法
US10866892B2 (en) * 2018-08-13 2020-12-15 Apple Inc. Establishing dependency in a resource retry queue
US11909643B2 (en) 2021-09-13 2024-02-20 Hewlett Packard Enterprise Development Lp Efficient progression management in a tracker with multiple sources
US11899984B1 (en) 2022-07-26 2024-02-13 Beijing Tenafe Electronic Technology Co., Ltd. Virtual queue for messages
US11907147B1 (en) 2022-07-28 2024-02-20 Beijing Tenafe Electronic Technology Co., Ltd. Programmable message inspection engine implemented in hardware that generates an output message using a content modification plan and a destination control plan

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6834315B2 (en) * 2001-03-26 2004-12-21 International Business Machines Corporation Method, system, and program for prioritizing input/output (I/O) requests submitted to a device driver
US20040059858A1 (en) * 2002-09-23 2004-03-25 Blankenship Robert G. Methods and arrangements to enhance a downbound path
US7443869B2 (en) 2003-08-04 2008-10-28 Intel Corporation Deadlock avoidance queuing mechanism
US7143246B2 (en) * 2004-01-16 2006-11-28 International Business Machines Corporation Method for supporting improved burst transfers on a coherent bus
US20070288937A1 (en) * 2006-05-08 2007-12-13 Microsoft Corporation Virtual Device Driver
US8200939B2 (en) * 2008-01-31 2012-06-12 Arm Norway As Memory management unit in a microprocessor system
US9058206B2 (en) * 2008-06-19 2015-06-16 Freescale emiconductor, Inc. System, method and program product for determining execution flow of the scheduler in response to setting a scheduler control variable by the debugger or by a processing entity
US8370552B2 (en) * 2008-10-14 2013-02-05 Nvidia Corporation Priority based bus arbiters avoiding deadlock and starvation on buses that support retrying of transactions
US8868951B2 (en) * 2009-12-26 2014-10-21 Intel Corporation Multiple-queue multiple-resource entry sleep and wakeup for power savings and bandwidth conservation in a retry based pipeline
US8626968B2 (en) 2009-12-26 2014-01-07 Intel Corporation Inter-queue anti-starvation mechanism with dynamic deadlock avoidance in a retry based pipeline
US8266331B2 (en) 2010-07-12 2012-09-11 International Business Machines Corporation Transmitting retry request associated with non-posted command via response credit channel
US8972995B2 (en) 2010-08-06 2015-03-03 Sonics, Inc. Apparatus and methods to concurrently perform per-thread as well as per-tag memory access scheduling within a thread and across two or more threads
US20130111084A1 (en) * 2011-11-01 2013-05-02 Qualcomm Incorporated Methods and devices for single link aggregated buses
US9128754B2 (en) * 2012-05-31 2015-09-08 Hewlett-Packard Development Company, L.P. Resource starvation management in a computer system
US8867559B2 (en) * 2012-09-27 2014-10-21 Intel Corporation Managing starvation and congestion in a two-dimensional network having flow control

Also Published As

Publication number Publication date
EP3066573A4 (en) 2017-06-21
WO2015069235A1 (en) 2015-05-14
CN105612502B (zh) 2019-08-13
WO2015069235A8 (en) 2015-06-25
KR101775569B1 (ko) 2017-09-19
US10338974B2 (en) 2019-07-02
US20150128142A1 (en) 2015-05-07
CN105612502A (zh) 2016-05-25
EP3066573A1 (en) 2016-09-14

Similar Documents

Publication Publication Date Title
KR101775569B1 (ko) 가상 재시도 큐
CN109154924B (zh) 多个上行链路端口设备
KR101814412B1 (ko) 데이터 버퍼와 연관된 스누프 필터링의 제공
CN106815151B (zh) 高性能互连相干协议
KR101695328B1 (ko) 모듈러 온-다이 코히어런트 인터커넥트 방법, 장치 및 시스템
JP6147840B2 (ja) ルートポート及びRPIE(RootPortIntegratedEndpoint)のレジューム時間を向上させるための方法、装置及びシステム
KR101702292B1 (ko) 라이브 에러 복구
TWI522792B (zh) 用以產生要求之設備、用於記憶體要求之方法、及運算系統
US9405687B2 (en) Method, apparatus and system for handling cache misses in a processor
CN108604209B (zh) 扁平化端口桥
JP2021090188A (ja) ストリーミングファブリックインタフェース
US9552308B2 (en) Early wake-warn for clock gating control
KR20160004365A (ko) 크레딧 기반의 중재를 위한 서비스 레이트 재분배
US9189296B2 (en) Caching agent for deadlock prevention in a processor by allowing requests that do not deplete available coherence resources

Legal Events

Date Code Title Description
A201 Request for examination
PA0105 International application

Patent event date: 20160405

Patent event code: PA01051R01D

Comment text: International Patent Application

PA0201 Request for examination
PG1501 Laying open of application
E902 Notification of reason for refusal
PE0902 Notice of grounds for rejection

Comment text: Notification of reason for refusal

Patent event date: 20170111

Patent event code: PE09021S01D

PE0701 Decision of registration

Patent event code: PE07011S01D

Comment text: Decision to Grant Registration

Patent event date: 20170531

PR0701 Registration of establishment

Comment text: Registration of Establishment

Patent event date: 20170831

Patent event code: PR07011E01D

PR1002 Payment of registration fee

Payment date: 20170901

End annual number: 3

Start annual number: 1

PG1601 Publication of registration
PR1001 Payment of annual fee

Payment date: 20200730

Start annual number: 4

End annual number: 4

PR1001 Payment of annual fee

Payment date: 20210728

Start annual number: 5

End annual number: 5

PR1001 Payment of annual fee

Payment date: 20220728

Start annual number: 6

End annual number: 6

PC1903 Unpaid annual fee

Termination category: Default of registration fee

Termination date: 20240611