KR20200139812A - 네트워크 스위치에서의 큐 - Google Patents

네트워크 스위치에서의 큐 Download PDF

Info

Publication number
KR20200139812A
KR20200139812A KR1020207032316A KR20207032316A KR20200139812A KR 20200139812 A KR20200139812 A KR 20200139812A KR 1020207032316 A KR1020207032316 A KR 1020207032316A KR 20207032316 A KR20207032316 A KR 20207032316A KR 20200139812 A KR20200139812 A KR 20200139812A
Authority
KR
South Korea
Prior art keywords
queue
entries
bit
bit vector
memory
Prior art date
Application number
KR1020207032316A
Other languages
English (en)
Other versions
KR102456086B1 (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 KR20200139812A publication Critical patent/KR20200139812A/ko
Application granted granted Critical
Publication of KR102456086B1 publication Critical patent/KR102456086B1/ko

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/50Queue scheduling
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/50Queue scheduling
    • H04L47/52Queue scheduling by attributing bandwidth to queues
    • H04L47/525Queue scheduling by attributing bandwidth to queues by redistribution of residual bandwidth
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/10Flow control; Congestion control
    • H04L47/28Flow control; Congestion control in relation to timing considerations
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/50Queue scheduling
    • H04L47/52Queue scheduling by attributing bandwidth to queues
    • H04L47/522Dynamic queue service slot or variable bandwidth allocation
    • H04L47/524Queue skipping
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/50Queue scheduling
    • H04L47/56Queue scheduling implementing delay-aware scheduling
    • H04L47/564Attaching a deadline to packets, e.g. earliest due date first
    • H04L47/566Deadline varies as a function of time spent in the queue
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/50Queue scheduling
    • H04L47/62Queue scheduling characterised by scheduling criteria
    • H04L47/622Queue service order
    • H04L47/6235Variable service order
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/50Queue scheduling
    • H04L47/62Queue scheduling characterised by scheduling criteria
    • H04L47/624Altering the ordering of packets in an individual queue
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/90Buffering arrangements
    • H04L49/9005Buffering arrangements using dynamic buffer space allocation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/90Buffering arrangements
    • H04L49/901Buffering arrangements using storage descriptor, e.g. read or write pointers
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/90Buffering arrangements
    • H04L49/9031Wraparound memory, e.g. overrun or underrun detection
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L12/00Data switching networks
    • H04L12/54Store-and-forward switching systems 
    • H04L12/56Packet switching systems
    • H04L12/5601Transfer mode dependent, e.g. ATM
    • H04L12/5602Bandwidth control in ATM Networks, e.g. leaky bucket
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L12/00Data switching networks
    • H04L12/54Store-and-forward switching systems 
    • H04L12/56Packet switching systems
    • H04L12/5601Transfer mode dependent, e.g. ATM
    • H04L2012/5678Traffic aspects, e.g. arbitration, load balancing, smoothing, buffer management
    • H04L2012/5679Arbitration or scheduling

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Memory System (AREA)

Abstract

컴퓨팅 시스템은 데이터를 저장하기 위한 메모리, 네트워크 트래픽을 생성하기 위한 하나 이상의 클라이언트들 및 네트워크 스위치들과의 통신 패브릭을 사용한다. 네트워크 스위치들은 별개의 입력 및 출력 저장 구조들보다는, 집중화된 저장 구조들을 포함한다. 네트워크 스위치들은 패킷들의 에이지가 큐 엔트리 위치에 대응하는 단일의, 집중화된 접이형 큐에 수신된 패킷들에 대응하는 특정한 메타데이터를 저장한다. 패킷들의 페이로드 데이터는 별개의 메모리에 저장되며, 따라서 비교적 많은 양의 데이터가 네트워크 스위치에서 패킷의 수명 동안 시프트되지 않는다. 네트워크 스위치들은 접이식 큐에서 희소 큐 엔트리들을 선택하고, 선택된 큐 엔트리들을 할당 해제하며, 네트워크 스위치들의 기수에 비례하는 지연을 갖고 큐의 제 1 단부를 향해 남아있는 할당된 큐 엔트리들을 시프트시킨다.

Description

네트워크 스위치에서의 큐
본 발명은 온-칩 네트워크 트래픽을 효율적으로 전달하기 위한 다양한 시스템들, 장치들, 방법들, 및 컴퓨터-판독 가능한 매체들에 관한 것이다.
컴퓨팅 시스템들에서, 몇몇 유형들의 애플리케이션들은 다른 애플리케이션들보다 양호하게 병렬 프로세싱 및 공유 메모리를 이용할 수 있는 기능들을 수행한다. 이러한 애플리케이션들의 예들은 기계 학습 애플리케이션들, 엔터테인먼트 및 실시간 애플리케이션들, 뿐만 아니라 몇몇 비즈니스, 과학, 의료 및 다른 애플리케이션들을 포함한다. 몇몇 프로세서 아키텍처들은 하나 이상의 프로세싱 유닛(예컨대, CPU, GPU 등) 또는 프로세싱 코어를 포함하지만, 메모리에 결합된 하나 또는 두 개의 부가적인 프로세싱 유닛들 또는 코어들이 반드시 원하는 레벨의 성능을 제공하기 위해 충분한 레벨의 병렬성을 제공하는 것은 아닐 수 있다. 부가적으로, 종래의 버스-기반 및 크로스바 상호연결 아키텍처들은 일반적으로 프로세싱 유닛들의 수가 증가함에 따라 잘 스케일링하지 않는다. 결과적으로, 프로세싱 유닛들의 수가 증가함에 따라, 프로세싱 유닛들로 지시들 및 데이터를 공급하는데 지연이 또한 증가한다.
다중-프로세싱 유닛 시스템들이 원하는 레벨의 성능을 지원하기 위해, 몇몇 시스템들은 버스-기반 및 크로스바 상호연결 아키텍처들로부터 네트워크 온 칩(NoC) 아키텍처로 이동하였다. NoC 아키텍처는 온-칩 트래픽을 전달하기 위해 시스템-레벨 네트워크 기술들을 사용한다. 버스-기반 아키텍처들에 의해 제공된 티어형 및 분할된 접근법과 대조적으로, NoC 아키텍처들은 데이터를 수송하기 위해 보다 동종의, 확장 가능한, 스위치 패브릭 네트워크를 제공한다. 적절한 스루풋을 유지하기 위해, NoC 아키텍처에서의 NoC 스위치는 그것의 내부 구조들을 통해 클록 사이클당 다수의 패킷들을 프로세싱하는 것으로 예상된다.
상기를 고려하여, 온-칩 네트워크 트래픽을 효율적으로 전달하기 위한 방법들 및 시스템들이 요구된다.
본 출원에서 설명된 방법들 및 메커니즘들의 이점들은 수반된 도면들과 함께 이하의 설명을 참조함으로써 보다 양호하게 이해될 수 있다:
도 1은 컴퓨팅 시스템의 일 구현예의 블록도이다.
도 2는 네트워크 온 칩(NoC : network on chip) 스위치의 일 구현예의 블록도이다.
도 3은 네트워크 스위치의 스루풋을 관리하기 위한 방법의 일 구현예의 흐름도이다.
도 4는 접이식(collapsible) 큐 업데이트 로직의 일 구현예의 블록도이다.
도 5는 변환 비트 벡터 로직의 일 구현예의 블록도이다.
도 6은 변환 큐 엔트리 로직의 일 구현예의 블록도이다.
도 7은 큐를 접기 위한 시프트 양들을 결정하기 위한 방법의 일 구현예의 흐름도이다.
도 8은 큐를 접기 위한 방법의 일 구현예의 흐름도이다.
도 9는 접은 큐 상태 정보의 일 구현예의 블록도이다.
본 발명은 다양한 수정들 및 대안적인 형태들에 영향을 받기 쉽지만, 특정 구현예들은 예로서 도면들에서 도시되며 여기에서 상세하게 설명된다. 그러나, 도면들 및 그것에 대한 상세한 설명은 본 발명을 개시된 특정한 형태로 제한하도록 의도되지 않으며, 반대로, 본 발명은 첨부된 청구항들에 의해 정의된 바와 같이 본 발명의 범위 내에 있는 모든 수정들, 등가물들 및 대안들을 커버한다는 것이 이해되어야 한다.
다음의 설명에서, 다수의 특정 세부사항들이 여기에서 제공된 방법들 및 메커니즘들의 철저한 이해를 제공하기 위해 제시된다. 그러나, 이 기술분야에서의 숙련자는 다양한 구현예들이 이들 특정 세부사항들 없이 실시될 수 있다는 것을 인지해야 한다. 몇몇 인스턴스들에서, 잘 알려진 구조들, 구성요소들, 신호들, 컴퓨터 프로그램 지시들, 및 기술들은 본 출원에서 설명된 접근법들을 모호하게 하는 것을 피하기 위해 상세하게 도시되지 않았다. 예시의 단순성 및 명료함을 위해, 도면들에 도시된 요소들은 반드시 일정한 비율로 그려진 것은 아니라는 것이 이해될 것이다. 예를 들어, 요소들 중 일부의 치수들은 다른 요소들에 대해 과장될 수 있다.
온-칩 네트워크 트래픽을 효율적으로 전달하기 위한 다양한 시스템들, 장치들, 방법들, 및 컴퓨터-판독 가능한 매체들이 개시된다. 다양한 구현예들에서, 컴퓨팅 시스템은 하나 이상의 클라이언트들을 포함한다. 이러한 클라이언트들의 예들은 범용 중앙 프로세싱 유닛(CPU), 그래픽스 프로세싱 유닛(GPU), 가속화 프로세싱 유닛(APU), 멀티미디어 엔진 등을 포함한다. 이들 하나 이상의 클라이언트들은 프로그램 지시들을 프로세싱하면서 메모리에 저장된 데이터에 대한 액세스 요청들을 생성한다. 몇몇 구현예들에서, 다수의 클라이언트들은 시스템-온-칩(SOC)과 같은, 단일의 다이에서 조합된다.
다양한 구현예들에서, 컴퓨팅 시스템은 또한 클라이언트들 사이에서, 뿐만 아니라 메모리와 클라이언트들 사이에서 데이터를 전달하기 위한 통신 네트워크(또는 "패브릭(fabric)")를 포함한다. 다양한 구현예들에서, 통신 패브릭은 주어진 소스로부터 데이터를 수신하고 수신된 데이터를 주어진 목적지로 운반하도록 구성된 엔티티들로서 보여질 수 있는 네트워크 스위치들을 포함한다. 원하는 스루풋을 유지하기 위해, 네트워크 스위치들은 클록 사이클에서 수신된 패킷들의 수와 동일한 클록 사이클 당 패킷들의 수까지 프로세싱한다. 주어진 클록 사이클에서 수신된 패킷들의 수는 네트워크 스위치에서의 (최대) 판독 포트들의 수와 동일하다. 데이터를 수신하는 판독 포트들의 수는 또한 데이터의 운반을 위한 기록 포트들의 수와 동일하다. 이러한 판독 및 기록 포트들(또는 스위치 포트들)의 수는 또한 네트워크 스위치의 "기수(radix")로 불리운다. 따라서 8개의 판독 포트들을 가진 네트워크 스위치는 8의 기수를 가질 것이다.
몇몇 구현예들에서, 네트워크 스위치들은 별개의 입력 및 출력 데이터 저장 구조들보다는, 집중화된 데이터 저장 구조들을 포함한다. 집중화된 데이터 저장 구조들은 데이터를 버퍼링할 때 중복성을 피한다. 중복 버퍼링은 온-다이 면적 및 전력 소비 양쪽 모두에서 증가를 야기한다. 네트워크 스위치들은 대응하는 패킷의 에이지(age)가 큐 엔트리 위치에 대응하는 단일의, 집중화된, 접이식 큐에 수신된 패킷들에 대응하는 메타데이터를 저장한다. 이러한 맥락에서, 에이지는 패킷이 스위치에 의해 수신된 시간을 나타낸다. 그러므로, 패킷의 에이지는 묵시적이며 에이지의 표시를 별도로 저장하는 것은 필요하지 않다. 패킷들의 페이로드(데이터)는 메타데이터로부터 분리된 메모리 구조에 저장된다. 이러한 방식으로, 비교적 많은 양의 데이터가 또한 접이식 큐에서 메타데이터의 접기 동안 시프트되지 않는다.
다양한 구현예들에서, 네트워크 스위치들은 할당 해제를 위해 접이식 큐에서 희소, 또는 비-연접(non-contiguous), 큐 엔트리들을 선택하는 제어 로직을 포함한다. 두 개의 연접 큐 엔트리들은 서로 인접하여 위치되는 반면, 두 개의 희소 큐 엔트리들은 그것들 사이에 위치된 하나 이상의 다른 큐 엔트리들을 가진다. 그러므로, 할당 해제를 위해 선택된 두 개의 희소 큐 엔트리들은 할당 해제를 위해 선택되지 않은 하나 이상의 다른 큐 엔트리들을 그것들 사이에 갖는다. 전체 스루풋을 유지하기 위해, 각각의 클록 사이클에서 할당 해제를 위해 선택된 큐 엔트리들의 수는 (최대) 네트워크 스위치의 기수와 동일하다.
네트워크 스위치들에서의 제어 로직은 선택된 큐 엔트리들의 각각의 위치를 찾고 이를 할당 해제한다. 제어 로직은 또한 남아있는 할당된 큐 엔트리들이 연접하도록 큐의 제 1 단부를 향해 남아있는 할당된 큐 엔트리들을 시프트한다. 이러한 시프트는 또한 "접기(collapse)"로서 불리울 수 있다. 다음의 논의에서, 제 1 단부는 큐의 헤드로서 불리우며 다른 단부는 큐의 테일로서 불리운다. 이와 같이, 큐의 헤드를 향해 시프트되는 남아있는 할당된 큐 엔트리들은 시프트 동작 다음에 큐의 헤드에서 연접 방식으로 위치된다. 시프트 동작 후 할당을 위해 이용 가능한 엔트리들은 큐의 테일(tail)에서 연접 엔트리들에 위치된다.
이제 도 1로 가면, 컴퓨팅 시스템(100)의 일 구현예의 일반화된 블록도가 도시된다. 도시된 바와 같이, 컴퓨팅 시스템(100)은 메모리 제어기들(140 및 142)의 각각과 다수의 클라이언트들 사이에 통신 패브릭(110)을 포함한다. 메모리 제어기들(140 및 142)은 메모리들(150 및 152)과 인터페이스하기 위해 사용된다. 다수의 클라이언트들의 예들은 중앙 프로세싱 유닛(CPU) 콤플렉스(160), 그래픽스 프로세싱 유닛(GPU)(162), 및 허브(164)이다. 허브(164)는 멀티미디어 엔진(166)과 통신하기 위해 사용된다. 몇몇 구현예들에서, 하나 이상의 허브들은 멀티미디어 플레이어(즉, 멀티미디어 엔진(166)을 위한 허브(164)), 디스플레이 유닛, 또는 기타로 인터페이스하기 위해 사용된다. 이러한 경우들에서, 허브들은 컴퓨팅 시스템(100)에서의 클라이언트들이다. 각각의 허브는 다양한 통신 프로토콜들에 따라 트래픽을 핸들링하기 위해 제어 로직 및 저장 요소들을 부가적으로 포함한다. 3개의 클라이언트들이 도시되지만, 다른 구현예들에서, 컴퓨팅 시스템(100)은 임의의 수의 클라이언트들 및 디스플레이 유닛들, 하나 이상의 입력/출력(I/O) 주변 디바이스들 등과 같은 다른 유형들의 클라이언트들을 포함한다.
몇몇 구현예들에서, 컴퓨팅 시스템(100)은 단일 반도체 다이 상에 집적된 묘사된 구성요소들의 각각을 가진 시스템 온 칩(SoC)이다. 다른 구현예들에서, 구성요소들은 시스템-인-패키지(SiP) 또는 다중-칩 모듈(MCM)에서의 개개의 다이들이다. 다양한 구현예들에서, CPU(160), GPU(162) 및 멀티미디어 엔진(166)은 스마트폰, 태블릿 컴퓨터, 게이밍 콘솔, 스마트워치, 데스크탑 컴퓨터, 가상 현실 헤드셋, 또는 기타에서 사용된다. CPU(160), GPU(162) 및 멀티미디어 엔진(166)은 온-칩 네트워크 트래픽을 생성할 수 있는 클라이언트들의 예들이다. 네트워크 트래픽의 예들은 클라이언트들 사이에서의 메모리 액세스 요청들, 메모리 액세스 응답들, 및 다른 네트워크 메시지들을 포함한다.
트래픽을 효율적으로 라우팅하기 위해, 다양한 구현예들에서, 통신 패브릭(110)은 네트워크 스위치들(170 내지 178)을 포함하는 라우팅 네트워크(120)를 사용한다. 몇몇 구현예들에서, 네트워크 스위치들(170 내지 178)은 네트워크 온 칩(NoC) 스위치들이다. 구현예에서, 라우팅 네트워크(120)는 점-대-점(P2P) 링 토폴로지에서 다수의 네트워크 스위치들(170 내지 178)을 사용한다. 다른 구현예들에서, 라우팅 네트워크(120)는 메시 토폴로지에서 프로그램 가능한 라우팅 표들을 가진 네트워크 스위치들(170 내지 178)을 사용한다. 다른 구현예들에서, 라우팅 네트워크(120)는 토폴로지들의 조합으로 네트워크 스위치들(170 내지 178)을 사용한다. 몇몇 구현예들에서, 라우팅 네트워크(120)는 컴퓨팅 시스템(100)에서 와이어들의 수를 감소시키기 위해 하나 이상의 버스들을 포함한다. 예를 들어, 하나 이상의 인터페이스들(130 내지 132)은 라우팅 네트워크(120) 내에서의 단일 버스 상에서 판독 응답들 및 기록 응답들을 전송한다.
다양한 구현예들에서, 통신 패브릭(110)("패브릭")은 CPU(160), GPU(162), 및 멀티미디어 엔진(166) 사이에서 트래픽을 전달한다. 패브릭(110)은 또한 메모리들(150 및 152)과 CPU(160), GPU(162) 및 멀티미디어 엔진(166)과 같은 클라이언트들 사이에서 트래픽을 전달한다. 네트워크 트래픽이 요청된 데이터를 획득하기 위한 네트워크 메시지들을 포함할 때, 인터페이스들(112, 114, 116, 130 및 132) 및 네트워크 스위치들(170 내지 178) 중 하나 이상은 요청된 데이터의 타겟 어드레스들을 변환한다.
다양한 구현예들에서, 패브릭(110) 및 라우팅 네트워크(120) 중 하나 이상은 요청들, 응답들, 및 제어 파라미터들을 저장하기 위해 상태 및 제어 레지스터들 및 다른 저장 요소들을 포함한다. 몇몇 구현예들에서, 패브릭(110)은 하나 이상의 버스들을 통해 트래픽을 라우팅하기 위해 통신, 데이터 송신, 및 네트워크 프로토콜들을 지원하기 위한 제어 로직을 포함한다. 몇몇 구현예들에서, 패브릭(110)은 어드레스 포맷들, 인터페이스 신호들 및 동기식/비동기식 클록 도메인 사용을 지원하기 위한 제어 로직을 포함한다.
전체 스루풋을 유지하기 위해, 몇몇 구현예들에서, 네트워크 스위치들(170 내지 178)의 각각은 스위치에서 판독 포트들의 수와 동일한 클록 사이클 당 패킷들의 수를 프로세싱한다. 다양한 구현예들에서, 스위치에서 판독 포트들의 수는 스위치에서 기록 포트들의 수와 동일하다. 이러한 판독 포트들의 수는 또한 네트워크 스위치의 기수로서 불리운다. 네트워크 스위치들(170 내지 178) 중 하나 이상이 클록 사이클 당 기수보다 작은 패킷들의 수를 프로세싱할 때, 라우팅 네트워크(120)를 위한 대역폭은 최대 미만이다. 그러므로, 네트워크 스위치들(170 내지 178)은 클록 사이클 당 패킷들의 기수 수와 동일한 프로세싱의 레이트를 유지하기 위해 저장 구조들 및 제어 로직을 포함한다.
몇몇 구현예들에서, 네트워크 스위치들(170 내지 178)은 별개의 입력 및 출력 저장 구조들보다, 집중화된 저장 구조들을 포함한다. 네트워크 스위치들(170 내지 178) 중 하나 이상에서 집중화된 저장 구조들은 온-다이 면적 및 전력 소비 양쪽 모두에서의 증가들을 야기하는 버퍼링 시 중복성을 피한다. 또한, 저장 구조들을 별개의 입력 및 출력 저장 구조들로 나누는 것은 네트워크 스위치에서의 수명을 위한 패킷들의 로컬 에이지를 유지하는데 부가적인 복잡성을 야기한다. 반대로, 네트워크 스위치들(170 내지 178)은 패킷의 에이지가 큐에서 그것의 위치에 대응하는 단일의, 집중화된, 접이식 큐에 수신된 패킷들에 대응하는 메타데이터를 저장한다. 그러므로, 패킷의 에이지는 묵시적이며 패킷들에 대한 에이지 정보를 별도로 저장하는 것은 필요하지 않다. 패킷들의 페이로드 데이터는 비교적 많은 양의 데이터가 접이식 큐의 시프트 동안 시프트되지 않도록 별개의 메모리 구조에 저장된다.
몇몇 구현예들에서, 네트워크 스위치들(170 내지 178) 중 하나 이상은 단일 클록 사이클에서 할당 해제를 위해 비-연접 큐 엔트리들을 선택하는 제어 로직 및 회로부를 포함한다. 전체 스루풋을 유지하기 위해, 할당 해제를 위해 선택된 큐 엔트리들의 수는 네트워크 스위치의 기수(즉, 단일 클록 사이클에서 스위치에 의해 수신될 수 있는 패킷들의 최대 수)까지이다. 할당 해제를 위한 큐 엔트리들을 식별하는 것 외에, 제어 로직은 또한 모든 남아있는 할당된 큐 엔트리들이 큐의 헤드에서 연접한 엔트리들에 위치되도록 큐의 헤드를 향해 남아있는 큐 엔트리들(할당 해제되지 않은 것들)을 시프트한다. 할당을 위해 이용 가능한 모든 큐 엔트리들은 그런 다음 큐의 테일에서 연접 엔트리들에 위치된다. 몇몇 구현예들에서, 네트워크 스위치들(170 내지 178) 중 하나 이상에서의 제어 로직은 단일 클록 사이클 내에서 큐의 접기를 수행한다.
인터페이스들(112 내지 116)은 라우팅 네트워크(120)와 CPU(160), GPU(162) 및 멀티미디어 엔진(166) 사이에서 데이터, 요청들 및 확인 응답들을 전달하기 위해 사용된다. 인터페이스들(130 내지 132)은 메모리 제어기들(140 내지 142)과 라우팅 네트워크(120) 사이에서 데이터, 요청들 및 확인 응답들을 전달하기 위해 사용된다. 구현예에서, 인터페이스들(112 내지 116 및 130 내지 132)은 어드레스 공간들과 메모리 채널들 사이에 매핑들을 갖는다. 다양한 구현예들에서, 인터페이스들(112 내지 116 및 130 내지 132) 및 메모리 제어기들(140 내지 142)은 기능을 제공할 알고리즘들을 구현하기 위해 하드웨어 회로부 및/또는 소프트웨어를 포함한다.
인터페이스들(112 내지 116)은 CPU(160), GPU(162) 및 멀티미디어 엔진(166)과의 통신 프로토콜들을 지원한다. 몇몇 구현예들에서, 인터페이스들(112 내지 116)은 요청들 및 응답들을 저장하기 위한 큐들, 및 요청들을 라우팅 네트워크(120)로 전송하기 전에 수신된 요청들 사이에서 중재하기 위한 선택 로직을 포함한다. 인터페이스들(112 내지 116)은 또한 패킷들을 생성하고, 패킷들을 디코딩하며, 라우팅 네트워크(120)와의 통신을 지원하기 위한 로직을 포함한다. 몇몇 구현예들에서, 인터페이스들(112 내지 116)의 각각은 도시된 바와 같이 단일 클라이언트와 통신한다. 다른 구현예들에서, 인터페이스들(112 내지 116) 중 하나 이상은 다수의 클라이언트들과 통신하며 클라이언트를 식별하는 식별자를 사용하여 클라이언트와의 트래픽을 추적한다.
단일 메모리 제어기(140)가 메모리(150)를 위해 도시되며 단일 메모리 제어기(142)가 메모리(152)를 위해 도시되지만, 다른 구현예들에서, 컴퓨팅 시스템(100)은 각각이 하나 이상의 메모리 채널들을 지원하는 다수의 메모리 제어기들을 포함한다. 메모리 제어기들(140 내지 142)은 요청들 및 응답들을 저장하기 위한 큐들을 포함한다. 부가적으로, 메모리 제어기들(140 내지 142)은 메모리들(150 내지 152)로 전송될 요청들을 그룹핑하고 버스트 모드들에 대한 지원으로 메모리들(150 내지 152)의 타이밍 규격들에 기초하여 요청들을 메모리들(150 내지 152)로 전송하기 위한 제어 로직을 포함한다.
메모리 제어기들(140 내지 142)은 제어 파라미터들을 저장하기 위한 상태 및 제어 레지스터들을 포함한다. 부가적으로, 메모리 제어기들(140 내지 142)은 효율적인 비 순차 프로세싱을 위해 수신된 메모리 액세스 요청들 및 응답들을 재순서화하기 위한 로직을 포함한다. 재순서화는 우선순위 레벨, 서비스 품질(QoS) 파라미터, 메모리 액세스 요청 또는 응답을 위한 패킷의 에이지(age), 또는 다른 고려사항들 중 하나 이상에 기초한다.
다양한 구현예들에서, 메모리들(150 내지 152)은 다양한 랜덤 액세스 메모리들(RAM들) 중 임의의 것을 포함한다. 몇몇 구현예들에서, 메모리들(150 내지 152)은 비동기식 RAM들(SRAM들)에 데이터 및 대응하는 메타데이터를 저장한다. 다른 구현예들에서, 메모리들(150 내지 152)은 다양한 동적 RAM들(DRAM들) 중 하나에 데이터 및 대응하는 메타데이터를 저장한다. 예를 들어, 구현예에 의존하여, 메모리들(150 내지 152)은 종래의 DRAM에 또는 서로 적층된 다수의 3-차원(3D) 메모리 다이들에 데이터를 저장한다.
도 2로 가면, 네트워크 스위치(200)의 일 구현예의 일반화된 블록도가 도시된다. 네트워크 스위치(200)는 버퍼(210), 제어 큐(220), 및 패킷 메모리(230)를 포함한다. 다양한 구현예들에서, 패킷 메모리(230)는 수신된 패킷들의 패킷 페이로드 데이터를 저장한다. 버퍼(210)는 또한 패킷 인덱스들로 불리우는 엔트리들의 어드레스들을 메모리(232)에 저장한다. 도시된 예에서, 버퍼(210)는 16개 엔트리들(0 내지 15)을 포함한다. 구현예에서, 각각의 패킷 인덱스는 메모리(232)에서의 엔트리들 중 특정한 하나를 가리킨다. 이러한 구현예에서, 패킷 메모리(230)는 직접-매핑 체계(organization)로 데이터를 저장한다. 다른 구현예들에서, 패킷 메모리(230)는 세트-연관(set-associative) 또는 전체 연관 체계와 같은 또 다른 체계를 사용하여 데이터를 저장한다.
몇몇 구현예들에서, 버퍼(210)는 순차 원형 버퍼로서 관리된다. 몇몇 구현예들에서, 판독 포인터(212) 및 기록 포인터(214)의 각각은 리셋 시 동일한 값(예컨대, 버퍼 엔트리 0)으로 설정된다. 몇몇 구현예들에서, 버퍼(210)의 버퍼 엔트리들에 저장된 패킷 인덱스들은 버퍼 엔트리들에 대응하는 값들로 리셋된다. 예를 들어, 버퍼 엔트리 0에 저장된 인덱스의 리셋 값은 0이다. 유사하게, 버퍼 엔트리 1에 저장된 인덱스의 리셋 값은 1 이다. 버퍼(210) 및 패킷 메모리(230)의 각각은 16개 엔트리들을 포함하는 것으로 도시되지만, 다른 구현예들에서, 버퍼(210) 및 패킷 메모리(230)의 각각은 또 다른 수의 엔트리들을 포함한다.
패킷이 네트워크 스위치(200)에 의해 수신될 때, 판독 포인터(212)로 가리켜진 버퍼 엔트리에 저장된 패킷 인덱스는 패킷 인덱스(216)로서 독출된다. 몇몇 구현예들에서, 다수의 패킷들은 동시에 수신되며 다수의 패킷 인덱스들은 판독 포인터(212)에 의해 가리켜진 버퍼 엔트리에 저장된 패킷 인덱스로 시작하는 버퍼(210)로부터 판독된다. 구현예에서, 버퍼(210)로부터 독출된 패킷 인덱스들(216)은 패킷 메모리(230) 및 제어 큐(220)에서 양쪽 할당 로직(234) 모두로 전송된다. 몇몇 구현예들에서, 수신된 패킷들의 수는 버퍼(210)로부터 독출된 패킷 인덱스들의 수와 동일하며, 이것은 네트워크 스위치(200)의 포트들의 수와 동일하다. 이러한 수는 네트워크 스위치(200)의 기수로서 불리운다. 예시된 구현예에서, 기수는 비-제로 정수 값 N이다. 구현예에서, 판독 포인터(212)는 수신된 패킷들의 수만큼 증분된다.
구현예에서, 할당 로직(234)은 어떤 메모리 엔트리들이 할당되는지를 결정하기 위해 다중화기들을 사용한다. 다른 조합 로직이 가능하며 고려된다. 도시된 바와 같이, 할당 로직(234)에서 다중화기들의 데이터 입력들은 인입 패킷 페이로드 데이터를 수신한다. 할당 로직(234)에서 다중화기들의 선택 라인들은 버퍼(210)로부터 검색된 패킷 인덱스들(216)의 디코딩 값들을 수신한다. 디코더들(도시되지 않음)은 할당될 메모리 엔트리들(232)을 선택하기 위해 수신된 패킷 인덱스들(216)을 디코딩한다. 다양한 구현예들에서, 패킷 메모리(230)는 데이터 저장을 위해 SRAM을 사용한다. 패킷 메모리(230)에 저장된 패킷 페이로드 데이터는 메모리 엔트리들 사이에서 시프트하지 않으며, 패킷 페이로드 데이터가 네트워크에 걸쳐 전송하기 위해 독출될 때까지 선택된 메모리 엔트리에 남아있다.
제어 큐(220)는 패킷 인덱스들(216)을 수신하며 그것들을 제어 큐(220)의 이용 가능한 엔트리들에 저장한다. 패킷 메모리(230)와 대조적으로, 패킷 인덱스들(216)은 어떤 큐 엔트리들이 할당을 위해 선택되는지를 결정하지 않는다. 구현예에서, 패킷 메모리(230)는 수신된 패킷들의 페이로드 데이터를 저장하는 반면, 제어 큐(220)는 수신된 패킷들의 메타데이터를 저장한다. 다양한 구현예들에서, 제어 큐(220)는 접이식 큐이다. 순차 버퍼(210)와는 대조적으로, 제어 큐(220)는 반드시 순차 방식으로 할당 해제를 위해 큐 엔트리들을 선택하는 것은 아니다. 대신에, 제어 큐(220)는 임의의 원하는 순서로 패킷들을 선택한다. 선택은 우선순위 레벨, 서비스 품질(QoS) 파라미터, 패킷의 에이지 등 중 하나 이상에 기초한다. 몇몇 구현예들에서, 제어 큐(220)는 네트워크 스위치(200)의 포트 당 하나의 스케줄러를 포함한다. 그러므로, 제어 큐(220)는 기수 수 N(여기에서 N은 정수이다)의 스케줄러들(222)을 포함한다.
몇몇 구현예들에서, 큐(220)의 큐 엔트리들에 저장된 데이터는 에이지에 따라 순차 연접 방식(in-order contiguous manner)으로 저장된다. 예를 들어, 구현예에서, 가장 오래된 패킷들에 대한 데이터는 제어 큐(220)의 헤드에서 시작하여 위치된 연접 할당된 큐 엔트리들에 저장된다. 할당을 위해 이용 가능한 무효 정보를 저장한 큐 엔트리들은 할당된 엔트리들에 이어 제어 큐(220)의 테일에 위치된다. 수신된 패킷 인덱스들(216)은 패킷에 대한 소스 및 목적지의 클라이언트 식별자들, 우선순위 레벨들 또는 QoS 파라미터들, 패킷의 데이터 크기 등 중 하나 이상과 함께 이용 가능한 큐 엔트리들에 저장된다. 몇몇 구현예들에서, 에이지의 표시는 제어 큐(220)의 큐 엔트리들에 저장되지 않는다. 오히려, 몇몇 구현예들에서, 에이지는 큐의 테일에 더 가까운 엔트리들보다 오래된 큐의 헤드에 더 가까운 엔트리들을 가진 엔트리 큐의 위치에 의해 암시된다.
하나 이상의 스케줄러들(222)이 프로세싱할 패킷들을 선택하고 네트워크상에서 전송할 때, 스케줄러들(222)은 선택된 큐 엔트리들에 저장된 스케줄링된 패킷 인덱스들(224)을 버퍼(210) 및 패킷 메모리(230)의 각각으로 전송한다. 버퍼(210)는 기록 포인터(214)에 의해 가리켜진 버퍼 엔트리로 시작하는 순차 방식으로 버퍼 엔트리들에 패킷 인덱스들(224)을 저장한다. 기록 포인터(214)는 수신된 패킷 인덱스들(224)의 수만큼 증분된다. 전체 스루풋이 달성될 때, 수신된 패킷 인덱스들(224)의 수는 네트워크 스위치(200)의 기수 N과 동일하다.
할당 해제 로직(236)은 스케줄링된 패킷 인덱스들(224)을 수신하며 대응하는 메모리 엔트리들을 선택한다. 디코더들(도시되지 않음)은 할당 해제할 메모리 엔트리들을 선택하기 위해 스케줄링된 패킷 인덱스들(224)을 디코딩한다. 구현예에서, 할당 해제 로직(236)은 어떤 메모리 엔트리들이 할당 해제되는지를 결정하기 위해 다중화기들을 사용한다. 다른 조합 로직이 가능하며 고려된다. 도시된 바와 같이, 할당 로직(236)에서 다중화기들의 데이터 입력들은 메모리 엔트리들에서의 데이터를 수신한다. 할당 해제 로직(236)에서 다중화기들의 선택 라인들은 스케줄링된 패킷 인덱스들(224)의 디코딩된 값들을 수신한다. 패킷 페이로드 데이터는 네트워크상에서 라우팅된 네트워크 스위치(200)로부터 그것의 목적지로 전송된다.
패킷들이 네트워크 스위치(200)에 의해 수신되고 송신될 때, 인터페이스 로직(도시되지 않음)은 통신 프로토콜들을 관리한다. 구현예에서, 버퍼(210), 제어 큐(220) 및 패킷 메모리(230) 사이에서의 인터페이스들(도시되지 않음)은 데이터를 송신하고 수신하기 위해 하나 이상의 버퍼들과의 와이어들을 포함한다. 구현예에서, 패킷들은 클록 사이클 내에서 프로세싱되므로, 어떤 순차적 요소들도 버퍼(210), 제어 큐(220) 및 패킷 메모리(230) 사이에서 사용되지 않는다. 그러므로, 스케줄러들(222)이 제어 큐(220)의 큐 엔트리들을 선택하고, 클록 사이클 내에서, 선택된 큐 엔트리들이 할당 해제되고, 패킷 메모리(230)에서의 대응하는 메모리 엔트리들이 할당 해제되고, 버퍼(210)에서의 버퍼 엔트리들이 업데이트되며, 기록 포인터(214)가 업데이트된다. 부가적으로, 클록 사이클 내에서, 제어 큐(220)는 남아있는 할당된 큐 엔트리들이 제어 큐(220)에서 연접 방식으로 위치되도록 큐의 끝을 향해 남아있는 할당된 큐 엔트리들을 시프트한다.
다양한 구현예들에서, 스케줄러들(222)은 제어 큐(220)에서 임의의 큐 엔트리들을 선택한다. 그러므로, 선택된 큐 엔트리들은 희소 큐 엔트리들이다. 두 개의 연접 큐 엔트리들은 서로 인접하여 위치되는 반면, 두 개의 희소 큐 엔트리들은 그것들 사이에 위치된 하나 이상의 다른 큐 엔트리들을 갖는다. 그러므로, 할당 해제를 위해 선택된 두 개의 희소 큐 엔트리들은 할당 해제를 위해 선택되지 않은 하나 이상의 할당된 큐 엔트리들을 그것들 사이에 갖는다.
전체 스루풋을 유지하기 위해, 할당 해제를 위해 선택된 큐 엔트리들의 수는 (최대) 네트워크 스위치(200)의 기수 N과 동일하다. 일 예에서, N은 4이다. 이러한 예에서, 스케줄러들(222)은 제어 큐(220)에서 할당 해제를 위해 4개의 희소 큐 엔트리들을 선택한다. 제어 큐(220)에서 제어 로직(도시되지 않음)은 선택된 큐 엔트리들의 각각을 찾고 이를 할당 해제한다. 단일 클록 사이클 내에서, 제어 로직은 또한 남아있는 할당된 큐 엔트리들이 연접하도록 제어 큐(220)의 헤드를 향해 남아있는 할당된 큐 엔트리들을 시프트한다. 몇몇 구현예들에서, 제어 큐(220)에서의 제어 로직은 클록 사이클 내에서 및 N개의 2:1 다중화기들을 통한 전파 지연에 비교 가능한 지연을 갖고 접기를 수행한다. 그러므로, 제어 큐(220)를 접기 위한 제어 로직은 확장 가능하다. 구성요소들(210, 220 및 230)이 네트워크 스위치에 대하여 설명되지만, 다른 구현예들에서, 구성요소들(210, 220 및 230) 중 하나 이상이 또한 네트워크 스위치 밖에서 사용된다는 것이 주의된다. 예를 들어, 몇몇 구현예들에서, 하나 이상의 구성요소들은 프로세서 코어, 통신 패브릭, 메모리 제어기, SOC 내에서의 또 다른 클라이언트 등을 포함한다. 그러므로, 도 3 내지 도 9에서 제공된 추가 설명들은 또한 네트워크 스위치 외부에 있는 회로부 및 하드웨어/소프트웨어 제어 로직에 적용한다.
이제 도 3으로 가면, 접이식(collapsible) 큐 업데이트 로직(300)의 일 구현예의 일반화된 블록도가 도시된다. 도시된 예에서, 또한 로직(300)으로 불리우는, 접이식 큐 업데이트 로직(300)은 스케줄러들로부터 수신된 시프트 벡터 상태들(310)을 포함한다. 예를 들어, 구현예에서, 시프트 벡터 상태들(310)은 (도 2의) 스케줄러들(222)과 같은 스케줄러들에서 순차적 요소들의 출력들이다. 예시된 구현예에서, 네트워크 스위치의 기수 N은 3이다. 따라서, 시프트 벡터 상태들(310)은 3개의 시프트 벡터들을 포함한다 - SV0(312), SV1(314) 및 SV2(316). 도시된 바와 같이, 시프트 벡터 상태들(312 내지 316)의 각각은 6-비트 벡터이다. 조합 로직(320)은 시프트 벡터 상태들(310)을 수신하며 시프트 벡터 상태들(332 내지 336)을 포함하는, 수정된 시프트 벡터 상태들(330)을 생성한다. 도시된 바와 같이, 시프트 벡터 상태(332)는 시프트 벡터 상태(312)와 동일하다. 그러나, 시프트 벡터 상태들(334 및 336)은 시프트 벡터 상태들(314 및 316)과 상이하다.
조합 로직(350)은 시프트 벡터 상태들(330)을 수신한다. 부가적으로, 조합 로직(350)은 큐 상태(340)를 수신한다. 큐 상태(340)는 접이식 큐에서 큐 엔트리들의 출력들이다. 예시된 구현예에서, 접이식 큐는 6개 엔트리들을 포함한다. 큐 엔트리 0은 데이터 "A"를 저장하고, 큐 엔트리 1은 데이터 "B"를 저장한다. 큐 엔트리들 0 내지 5는 데이터 A 내지 F를 저장한다. 조합 로직(350)은 수신된 입력들에 기초하여 큐 업데이트된 상태 값들(360)을 생성한다. 구현예에서, 큐 업데이트된 상태 값들(360)은 재순서화 후 저장될 접이식 큐로 전송된다. 다양한 구현예들에서, 외부 스케줄러들로부터 시프트 벡터 상태들(310)을 수신하는 것으로부터 큐 업데이트된 상태 값들(360)을 저장을 위해 접이식 큐로 전송하는 것까지의 전파 지연은 단일 클록 사이클이다.
외부 스케줄러들은 큐에서 할당 해제할 큐 엔트리들을 선택한다. 몇몇 구현예들에서, 이들 외부 스케줄러들은 또한 각각의 비트가 제 1 값을 저장하는, 비트들의 제 1 세그먼트, 및 각각의 비트가 제 2 값을 저장하는, 비트들의 제 2 세그먼트 양쪽 모두를 포함한 비트 벡터를 생성한다. 다양한 구현예들에서, 제 1 세그먼트 및 제 2 세그먼트가 비트 벡터에서 만나는 경우는 할당 해제를 위해 선택된 큐 엔트리를 나타낸다. 예를 들어, 또한 시프트 벡터(SV0)로 불리우는, 시프트 벡터(312)는 6 비트들을 가진 비트 벡터이다.
시프트 벡터(312)의 제 1 세그먼트는 비트 위치들 0과 1에서 2비트들을 포함하며, 각각은 이진 값 0을 저장한다. 시프트 벡터(312)의 제 2 세그먼트는 비트 위치들 2 내지 5에서 4비트들을 포함하며 각각은 이진 값 1을 저장한다. 이 예에서, 시프트 벡터(312)는 큐 엔트리 2가 할당 해제됨을 나타낸다. 그러므로, 데이터 C를 저장한 큐 엔트리 2는 할당 해제될 것이다. 시프트 벡터(314)의 제 1 세그먼트는 비트 위치들 0 내지 3에서 4비트들을 포함하며, 각각은 이진 값 0을 저장한다. 시프트 벡터(314)의 제 2 세그먼트는 비트 위치들 4 내지 5에서 2비트들을 포함하며, 각각은 이진 값 1을 저장한다. 이 예에서, 시프트 벡터(314)는 큐 엔트리 4가 할당 해제됨을 나타낸다. 그러므로, 데이터 E를 저장한 큐 엔트리 4는 할당 해제될 것이다. 시프트 벡터(314)는 또한 시프트 벡터 SV1로서 불리운다. 유사한 방식으로, 시프트 벡터(316)는 큐 엔트리 5가 할당 해제됨을 나타낸다. 그러므로, 데이터 F를 저장한 큐 엔트리 5는 할당 해제될 것이다. 시프트 벡터(316)는 또한 시프트 벡터(SV2)로 불리운다.
도시된 바와 같이, 조합 로직(320)은 시프트 벡터(312)를 수정하지 않는다. 구현예에서, 시프트 벡터(332)는 그것의 6-비트 벡터에서 시프트 벡터(312)와 동일한 값들을 가진다. 조합 로직(320)은 시프트 벡터(314)를 수정한다. 시프트 벡터(314)는 또한 SV1로 불리운다. 시프트 벡터(334)는 또한 {SV1}로 불리운다. 다양한 구현예들에서, 로직(320)으로 또한 불리우는, 조합 로직(320)은 시프트 벡터(312)에 저장된 값들에 기초한 양만큼 최하위 비트 위치를 향해 시프트 벡터(314)에서의 각각의 비트 위치를 시프트 시킴으로써 변환된 시프트 벡터(334)를 생성한다. 예를 들어, 값 SV0[0]은 이진 0이며, 그러므로, {SV1}[0]은 0인, SV1[0]과 동일한 값을 가진다.
상기와 유사한 방식으로, 값 SV0[1]은 이진 0이며, 그러므로 {SV1}[1]은 0인, SV1[1]과 동일한 값을 가진다. 계속해서 더 높은 비트 위치들로 이동하면, 값 SV0[2]는 이진 1이며, 그러므로, {SV1}[2]는 SV1[2]보다는, SV1[3]과 동일한 값을 가진다. SV1[3] 및 {SV1}[2]의 각각의 값은 0이다. 그러므로, {SV1}[2]는, SV1[0] 및 SV1[1]과 상이한 조건들에 대해, 이진 0의 값을 획득한다. 계속해서, 더 높은 비트 위치들로 이동하면, 값 SV0[3]은 이진 1이며, 그러므로, {SV1}[3]은 SV1[3]보다는, SV1[4]와 동일한 값을 가진다. SV1[4]의 값은 1이다. 그러므로, {SV1}[3]은 값 1을 가진다.
계속해서 여전히 더 높은 비트 위치들로 이동하면, 값 SV0[4]는 이진 1이며, 그러므로, {SV1}[4]는 SV1[4]보다는, SV1[5]과 동일한 값을 가진다. SV1[5]의 값은 1이다. 그러므로, {SV1}[4]는 값 1을 가진다. 최종적으로, 값 SV0[5]은 이진 1이며, 그러므로 {SV1}[5]는 제공된 주어진 값을 가진다. 몇몇 구현예들에서, 값은 SV1[5]와 동일하다. SV1[5]의 값은 1이다. 그러므로, {SV1}[5]는 값 1을 가진다. 로직(320)은 또한 {SV2}로 불리우는, 변환된 시프트 벡터 값들(336)을 생성하기 위해 유사한 단계들을 수행한다. 그러나, 로직(320)은 SV0 단독보다는 {SV1} 및 SV0의 각각에 저장된 값들을 사용한다. 그러므로, 로직(320)은 하나의 다른 수신된 비트 벡터(즉, SV0)에 저장된 값들 및 하나의 다른 변환된 비트 벡터(즉, {SV1})에 저장된 값들 양쪽 모두에 기초하여 변환된 시프트 벡터 {SV1}에 대한 값들을 생성한다.
몇몇 구현예들에서, 로직(320)은 변환된 시프트 벡터 {SV2}를 생성하기 위해 다음의 단계들을 사용한다. 값 {SV1}[0]은 이진 0이며, 따라서 SV0[1]보다는, SV0[0]이 검사된다. SV0[0]의 값은 이진 0이며, 그러므로 {SV2}[0]은 0인, SV2[0]과 동일한 값을 가진다. 다음으로, 값 {SV1}[1]은 이진 0이며, 따라서 SV0[2]보다는, SV0[1]이 검사된다. SV0[1]의 값은 이진 0이며, 그러므로, {SV2}[1]은 0인 SV2[1]과 동일한 값을 가진다. 이어서, 값 {SV1}[2]는 이진 0이며, 따라서 SV0[3]보다는 SV0[2]가 검사된다. SV0[2]의 값은 이진 1이며, 그러므로 {SV2}[2]는 SV2[2]의 값보다는, 0인, SV2[3]과 동일한 값을 가진다. 유사한 방식으로, {SV2}[3:5]에 대한 값들이 생성된다.
상기 도시된 바와 같이, {SV1}[0:5]인, 시프트 벡터(314)를 생성할 때, 각각의 비트 위치는 SV1[0:5]와 동일한 비트 위치에서 값을 할당받거나, 또는 그것은 동일한 비트 위치에 저장된 SV0[0:5]의 대응하는 값에 기초하여 하나의 증분된 비트 위치에서 값을 할당받는다. {SV2}[0:5]인, 시프트 벡터(316)를 생성할 때, 각각의 비트 위치는 SV2[0:5]와 동일한 비트 위치에 값을 할당받거나 또는 그것은 {SV1}[0:5] 및 SV0[0:5]의 대응하는 값들에 기초하여 다음 두 개의 증분된 비트 위치들 중 하나에서 값을 할당받는다.
로직(350)은 변환된 비트 벡터 값들(330)을 수신하며 상기 설명된 것과 유사한 방식으로 큐 상태(340)의 값들의 위치들을 변환한다. 결과는 큐 업데이트 상태 값들(360)로서 도시된다. 도시된 바와 같이, 큐 엔트리들 2, 4 및 5는 할당 해제되며 큐 엔트리들은 접힌다. 큐 엔트리들에 도시된 백슬래시 "/"은 할당을 위해 이용 가능한 큐 엔트리들을 나타낸다.
이제 도 4로 가면, 변환 비트 벡터 로직(400)의 일 구현예의 일반화된 블록도가 도시된다. 변환 비트 벡터 로직(400)은 또한 로직(400)으로 불리운다. 구현예에서, 로직(400)은 (도 3의) 로직(320)으로서 사용된다. 도시된 바와 같이, 다중화기들(410A 내지 410F)은 데이터 입력 라인들(402A 내지 402F) 상에서 비트 벡터 SV1[0:5]를 수신한다. 다중화기들(410A 내지 410F)은 선택 입력 라인들(412A 내지 412F) 상에서 상이한 비트 벡터 SV0[0:5]를 수신한다. 다중화기들(410A 내지 410F)은 출력 라인들(420A 내지 420F) 상에서 변환된 비트 벡터 {SV1}[0:5]를 제공한다.
도시된 바와 같이, 다중화기들(440A 내지 440F)은 데이터 입력 라인들(432A 내지 432F) 상에서 비트 벡터 SV2[0:5]를 수신한다. 다중화기들(410A 내지 410F)은 선택 입력 라인들(442A 내지 442F) 상에서 상이한 비트 벡터 SV0[0:5]을 수신한다. 다중화기들(440A 내지 440F)은, 데이터 입력들로서 다중화기들(460A 내지 460F)로 전송되는, 중간 비트 벡터를 출력 라인들(450A 내지 450F) 상에서 제공한다. 다중화기들(460A 내지 460F)은 선택 입력 라인들(462A 내지 462F) 상에서 변환된 비트 벡터 {SV1}[0:5]를 수신한다. 다중화기들(460A 내지 460F)은 출력 라인들(470A 내지 470F) 상에서 변환된 비트 벡터 {SV2}[0:5]를 제공한다.
이제 도 5로 가면, 변환 큐 엔트리 로직(500)의 일 구현예의 일반화된 블록도가 도시된다. 변환 큐 엔트리 로직(500)은 또한 로직(500)으로 불리운다. 구현예에서, 로직(500)은 (도 3의) 로직(350)으로서 사용된다. 도시된 바와 같이, 다중화기들(510A 내지 510F)은, 큐 엔트리들에 저장된 데이터 A 내지 F의 각각으로부터의 비트를 포함하는, 비트 벡터를 수신한다. 데이터 A 내지 F의 데이터 크기는 큐에 저장된 다양한 데이터 크기들 중 하나일 수 있다. 실제 비트 위치는, 구현예에서, 로직(500)이 큐 엔트리들에 저장된 각각의 비트에 대해 중복되므로, 도시되지 않는다. 데이터 A 내지 F의 각각으로부터의 비트는 데이터 입력 라인들(502A 내지 502F) 상에서 수신된다. 다중화기들(510A 내지 510F)은 선택 입력 라인들(512A 내지 512F) 상에서 비트 벡터 SV0[0:5]를 수신한다. 다중화기들(510A 내지 510F)은 출력 라인들(520A 내지 520F) 상에서, 데이터 입력들로서 다중화기들(530A 내지 530F)로 전송되는, 중간 비트 벡터를 제공한다.
다중화기들(530A 내지 530F)은 선택 입력 라인들(532A 내지 532F) 상에서 변환된 비트 벡터 {SV1}[0:5]을 수신한다. 다중화기들(530A 내지 530F)은 출력 라인들(540A 내지 540F) 상에서, 데이터 입력들로서 다중화기들(550A 내지 550F)로 전송되는, 중간 비트 벡터를 제공한다. 다중화기들(550A 내지 550F)은 선택 입력 라인들(552A 내지 552F) 상에서 변환된 비트 벡터 {SV2}[0:5]를 수신한다. 다중화기들(550A 내지 550F)은 출력 라인들(560A 내지 560F) 상에서 변환된 비트 벡터 {A} 내지 {F}를 제공한다.
이제 도 6으로 가면, 네트워크 온 칩 스위치의 스루풋을 관리하기 위한 방법(600)의 일 구현예가 도시된다. 논의의 목적들을 위해, 이 구현예에서(뿐만 아니라 도 7 내지 도 8에서)의 단계들은 순차적으로 도시된다. 그러나, 설명된 방법들의 다양한 구현예들에서, 설명된 요소들 중 하나 이상은 동시에, 도시된 것과 상이한 순서로 수행되거나, 또는 전체적으로 생략된다는 것이 주의된다. 다른 부가적인 요소들이 또한 원하는 대로 수행된다. 본 출원에서 설명된 다양한 시스템들 또는 장치들 중 임의의 것이 방법(600)을 구현하도록 구성된다.
다양한 구현예들에서, 통신 패브릭은 하나 이상의 클라이언트들 및 하나 이상의 메모리 제어기들 사이에서 트래픽을 전달한다. 다양한 구현예들에서, 통신 패브릭은 요청들 및 응답들을 큐잉하고 제어 파라미터들을 저장하기 위해 상태 및 제어 레지스터들 및 다른 저장 요소들을 포함한다. 다양한 구현예들에서, 통신 패브릭은 하나 이상의 통신 및 네트워크 프로토콜들을 따르며, 하나 이상의 버스들 상에서의 소스들과 목적지들 사이에서 트래픽을 효율적으로 라우팅하기 위해 제어 로직을 포함한다. 트래픽을 효율적으로 라우팅하기 위해, 다양한 구현예들에서, 통신 패브릭은 또한 다수의 네트워크 온 칩(NoC) 스위치들을 사용한다.
NoC 스위치는 데이터를 수신한다(블록 602). 다양한 구현예들에서, 수신된 데이터는 네트워크 메시지들이다. 몇몇 구현예들에서, 패브릭은 점-대-점(P2P) 링 토폴로지에서 NoC 스위치들을 사용한다. 다른 구현예들에서, 통신 패브릭은 클러스터 토폴로지에서 프로그램 가능한 라우팅 표들을 갖고 NoC 스위치들을 사용한다. 다른 구현예들에서, 통신 패브릭은 토폴로지들의 조합으로 NoC 스위치들을 사용한다. NoC 스위치는 메모리 어드레스들을 검색하기 위해 액세스되는(블록 604), 버퍼를 포함한다. 몇몇 구현예들에서, 버퍼는 순차 원형 버퍼이다.
패킷 페이로드 데이터와 같은, 수신된 데이터의 부분들은 검색된 메모리 어드레스들에 의해 가리켜진 메모리의 엔트리들에 저장된다(블록 606). 수신된 데이터(즉, 네트워크 메시지들)의 메모리 어드레스들 및 표시들은 큐의 큐 엔트리들에 저장된다(블록 608). 메모리로부터 및 네트워크상에서 전송할 메시지들이 선택된다(블록 610). 몇몇 구현예들에서, 클록 사이클 내에서, 선택된 메시지들의 표시들을 저장한 큐 엔트리들이 할당 해제된다(블록 612). 클록 사이클 내에서, 남아있는 할당된 큐 엔트리들은 남아있는 할당된 큐 엔트리들이 큐에서 연접 방식으로 위치되도록 큐의 끝을 향해 시프트된다(블록 614).
이제 도 7로 가면, 큐를 접기 위한 시프트 양들을 결정하기 위한 방법(700)이 도시된다. 수신된 메시지들의 메모리 어드레스들 및 표시들은 큐의 큐 엔트리들에 저장된다(블록 702). 네트워크상에서 전송할 메시지들이 선택된다(블록 704). 비트 벡터들이 생성된다(블록 706). 다양한 구현예들에서, 생성된 비트 벡터들은 선택된 메시지들의 표시들을 저장한 큐 엔트리들을 식별한다. 제 1 비트 벡터를 제외한 비트 벡터가 선택된다(블록 708). 이전 예들을 참조하면, 비트 벡터 SV0[0:5]은 나중 변환을 위해 선택되지 않았다.
시프트의 양은 하나의 다른 생성된 비트 벡터에 저장된 값들에 기초하여 결정된다(블록 710). 예를 들어, 비트 벡터 SV0[0:5]은 (도 4의) 로직(400)에서 이전에 도시된 바와 같이 다중화기들의 선택 라인들로 전송된다. 시프트의 양은 또한 하나 이상의 다른 변환된 비트 벡터들에 저장된 값들에 기초하여 결정된다(블록 712). 예를 들어, 변환된 비트 벡터 {SV0}[0:5]는 (도 4의) 로직(400)에서 이전에 도시된 바와 같이 다중화기들의 선택 라인들로 전송된다. 변환된 비트 벡터는 선택된 비트 벡터에 대해 생성된다(블록 714).
다양한 구현예들에서, 변환된 비트 벡터는 결정된 양만큼 최하위 비트 위치를 향해 선택된 비트 벡터에서의 각각의 비트 위치를 시프트 시킴으로써 생성된다. 다른 구현예들에서, 값들은 최상위 비트 위치를 향해 각각의 비트 위치에 대해 시프트된다. 마지막 벡터에 도달되지 않았다면(조건부 블록(716)의 "아니오" 브랜치), 방법(700)의 제어 흐름은 제 1 벡터를 제외한 벡터가 선택되는 블록 708으로 돌아간다. 마지막 벡터에 이르면(조건부 (블록716)의 "예" 브랜치), 변환된 비트 벡터들의 생성이 완료된다(블록 718). 몇몇 구현예들에서, 변환된 비트 벡터들의 생성은 단일 클록 사이클 내에서 수행된다.
이제 도 8로 가면, 큐를 접기 위한 방법(800)의 일 구현예가 도시된다. 수신된 네트워크 메시지들의 표시들을 저장한 큐에서의 큐 엔트리가 선택된다(블록 802). 큐에서의 큐 엔트리의 위치와 동일한 비트 위치가 선택된다(블록 804). 시프트의 양은 변환된 비트 벡터들의 각각에서의 선택된 비트 위치에 저장된 값들에 기초하여 결정된다(블록 806). 예를 들어, (도 5의) 로직(500)은 얼마나 많은 비트 위치들이 큐 엔트리들에 저장된 데이터의 비트들을 시프트할지를 결정하기 위해 다중화기들의 선택 라인들 상에서 하나 이상의 변환된 비트 벡터들 및 수정되지 않은 비트 벡터를 수신한다. 사용할 변환된 비트 벡터들의 수는 네트워크 스위치의 기수에 기초하며, 이것은 큐로부터 할당 해제할 큐 엔트리들의 최대 수이다.
선택된 큐 엔트리의 콘텐트들은 결정된 양만큼 큐의 끝을 향해 시프트된다(블록 808). 마지막 큐 엔트리에 도달되면(조건부 블록(810)의 "아니오" 브랜치), 방법(800)의 제어 흐름은 또 다른 큐 엔트리가 선택되는 블록(802)으로 돌아간다. 마지막 큐 엔트리에 도달되면(조건부 블록(810)의 "예" 브랜치), 큐의 접기는 완료된다(블록 812). 몇몇 구현예들에서, 큐의 접기는 단일 클록 사이클 내에서 수행된다.
이제 도 9로 가면, 접이식 큐 업데이트 로직(900)의 또 다른 구현예의 일반화된 블록도가 도시된다. 도시된 바와 같이, 기수는 이전 예들에서처럼 3보다는, 4이다. 비트 벡터들(902 내지 908)은 외부 스케줄러들에서 순차적 요소들로부터 수신된다. 로직(910 내지 914)은 (도 4의) 로직(400)에 대해 이전에 도시된 바와 같이, 그러나 분산형 방식으로, 동일한 유형의 다중화한 선택 로직을 예시한다. 예를 들어, 로직(910)은 비트 벡터(904)를 변환하기 위해 사용된다. 비트 벡터 SV0[0:15]에서 로직 하이 값들로 인한 비트 벡터(904)로부터 그것의 변환된 비트 벡터로의 전환은 비트 벡터(904)에서 화살표 심볼 "->"을 갖고 도시된다. 다중화기들의 선택 라인들 상에서 로직 하이 값들에 의해 야기된 유사한 전환들이 비트 벡터들(906 및 908)에서 도시된다.
외부 제어 큐의 초기 상태가 상태(920)에서 도시된다. 큐를 접게 할, 중간 변환들이 중간 결과들(922 내지 926)에서 도시된다. 중간 결과들(922 내지 926) 사이에서의 다중화기들은 (도 5의) 로직(500)에 대해 이전에 도시된 바와 같이, 그러나 분산형 방식으로 동일한 유형의 다중화한 선택 로직을 예시한다. 제어 큐의 최종 상태는 상태(928)에서 도시된다. 상태(928)에 저장된 값들은 외부 제어 큐에서의 순차적 요소들로 전송된다. 도시된 바와 같이, 중간 결과들(922 내지 926)은 비트 벡터들(904 내지 908)이 변환될 때 동시에 생성된다. 다양한 구현예들에서, 큐의 접기는 클록 사이클 내에서 및 N개의 2:1 다중화기들을 통한 전파 지연에 비교 가능한 지연을 갖고 발생하며, 여기에서 N은 네트워크 스위치의 기수와 동일한 비-제로 정수이다. 그러므로, 큐를 접기 위한 제어 로직은 확장 가능하다.
다양한 구현예들에서, 소프트웨어 애플리케이션을 위한 프로그램 지시들은 이전에 설명된 방법들 및/또는 메커니즘들을 구현하기 위해 사용된다. 프로그램 지시들은 C와 같은, 하이 레벨 프로그래밍 언어로 하드웨어의 거동을 설명한다. 대안적으로, 베릴로그(Verilog)와 같은, 하드웨어 설계 언어(HDL)가 사용된다. 프로그램 지시들은 비-일시적 컴퓨터 판독 가능한 저장 매체상에 저장된다. 다수의 유형들의 저장 미디어가 이용 가능하다. 저장 매체는 프로그램 지시들 및 수반된 데이터를 프로그램 실행을 위해 컴퓨팅 시스템으로 제공하기 위해 사용 동안 컴퓨팅 시스템에 의해 액세스 가능하다. 컴퓨팅 시스템은 프로그램 지시들을 실행하기 위해 하나 이상의 메모리들 및 하나 이상의 프로세서들을 포함한다.
상기 설명된 구현들은 단지 구현예들의 비-제한적인 예들이라는 것이 강조되어야 한다. 다수의 변형들 및 수정들이 상기 개시가 전체적으로 이해된다면 이 기술분야의 숙련자들에게 명백할 것이다. 다음의 청구항들은 모든 이러한 변형들 및 수정들을 포괄하는 것으로 해석된다는 것이 의도된다.

Claims (20)

  1. 네트워크 스위치에서의 큐에 있어서,
    상기 큐의 헤드에 가장 가까운 제 1 이용 가능한 엔트리에서 시작하는 순차 연접 방식(in-order contiguous manner)으로 데이터를 저장하도록 구성된 복수의 큐 엔트리들;
    제어 로직; 및
    복수의 스케줄러들로서, 상기 복수의 스케줄러들의 각각은:
    할당 해제(deallocation)를 위해 상기 복수의 큐 엔트리들의 큐 엔트리를 선택하며; 및
    단일 비트 전환(transition)을 가진 복수의 비트들을 포함한 비트 벡터를 생성하도록 구성되고, 상기 비트 벡터에서 상기 비트 전환의 위치는 할당 해제를 위해 선택된 큐 엔트리를 식별하는, 상기 복수의 스케줄러들을 포함하며, 및
    상기 복수의 큐 엔트리들 중 적어도 두 개의 비-연접(non-contiguous) 엔트리들을 식별하는 복수의 비트 벡터들을 상기 복수의 스케줄러들로부터 수신하는 것에 응답하여,
    상기 제어 로직은:
    상기 적어도 두 개의 비-연접 엔트리들의 각각을 할당 해제하며; 및
    할당된 채로 있는 엔트리들이 상기 큐의 헤드에서 시작하는 연접 엔트리들에 위치되도록 상기 큐의 헤드를 향해 할당된 채로 있는 큐 엔트리들을 시프트시키도록 구성되는, 네트워크 스위치에서의 큐.
  2. 청구항 1에 있어서,
    상기 큐는 정수 N의 판독 포트들 및 N개의 기록 포트들을 더 포함하며, 할당 해제할 선택된 큐 엔트리들의 수는 N과 같은, 네트워크 스위치에서의 큐.
  3. 청구항 2에 있어서,
    상기 선택된 큐 엔트리들은 서비스 품질(QoS) 파라미터에 대하여 비 순차(out-of-order) 방식으로 상기 복수의 스케줄러들에 의해 할당 해제를 위해 선택되는, 네트워크 스위치에서의 큐.
  4. 청구항 3에 있어서,
    상기 데이터는 에이지에 대하여 상기 순차 방식으로 상기 복수의 큐 엔트리들에 저장되는, 네트워크 스위치에서의 큐.
  5. 청구항 1에 있어서,
    상기 제어 로직은 하나의 다른 수신된 비트 벡터에 저장된 값들에 기초한 양만큼 최하위 비트 위치를 향해 수신된 비트 벡터에서의 각각의 비트 위치를 시프트 시킴으로써 상기 수신된 비트 벡터에 대한 변환된 비트 벡터를 생성하도록 추가로 구성되는, 네트워크 스위치에서의 큐.
  6. 청구항 5에 있어서,
    상기 양은 하나의 다른 변환된 비트 벡터에 저장된 값들에 추가로 기초하는, 네트워크 스위치에서의 큐.
  7. 청구항 5에 있어서,
    상기 큐에서의 주어진 위치에서 상기 큐에서의 큐 엔트리는 상기 주어진 위치와 동일한 변환된 비트 벡터의 비트 위치에 저장된 값에 기초하여 상기 큐의 헤드(head)를 향해 시프트되는, 네트워크 스위치에서의 큐.
  8. 청구항 1에 있어서,
    상기 큐는 상기 큐에 저장된 상기 데이터에 대응하는 데이터를 저장하도록 구성된 메모리로의 제 1 인터페이스를 더 포함하며;
    상기 제어 로직은 데이터를 독출하기 위해 상기 선택된 큐 엔트리들에 저장된 메모리 어드레스들을 상기 메모리로 전송하도록 추가로 구성되는, 네트워크 스위치에서의 큐.
  9. 청구항 8에 있어서,
    상기 큐는 메모리에서 엔트리들을 식별하는 메모리 어드레스들을 저장하도록 구성된 순차 원형 버퍼로의 제 2 인터페이스를 더 포함하며;
    상기 제어 로직은 상기 제 2 인터페이스를 통해, 할당할 메모리 엔트리들을 식별하기 위해 사용된 상기 원형 버퍼의 엔트리들을 업데이트하기 위해 선택된 큐 엔트리들에 저장된 메모리 어드레스들을 상기 원형 버퍼로 전송하도록 추가로 구성되는, 네트워크 스위치에서의 큐.
  10. 청구항 9에 있어서,
    상기 제어 로직은,
    상기 제 2 인터페이스를 통해, 할당되는 상기 메모리의 엔트리들을 식별하는 상기 원형 버퍼에 저장된 메모리 어드레스들을 수신하며;
    상기 수신된 메모리 어드레스들을 이용 가능한 큐 엔트리들에 저장하도록 추가로 구성되는, 네트워크 스위치에서의 큐.
  11. 방법에 있어서,
    네트워크 스위치 내에서 큐의 복수의 큐 엔트리들에, 상기 큐의 헤드에 가장 가까운 제 1 이용 가능한 엔트리에서 시작하는 순차 연접 방식으로 데이터를 저장하는 단계;
    복수의 스케줄러들에 의해, 할당 해제를 위해 상기 복수의 큐 엔트리들의 큐 엔트리들을 선택하는 단계;
    상기 복수의 스케줄러들에 의해, 각각의 비트 벡터가 단일 비트 전환을 가진 복수의 비트들을 포함하는, 복수의 비트 벡터들을 생성하는 단계로서, 상기 비트 벡터에서 상기 비트 전환의 위치는 할당 해제를 위해 선택된 상기 큐 엔트리를 식별하는, 상기 복수의 비트 벡터들을 생성하는 단계;
    상기 복수의 큐 엔트리들 중 적어도 두 개의 비-연접 엔트리들을 식별하는 복수의 비트 벡터들을 상기 복수의 스케줄러들로부터 수신한 것에 응답하여:
    상기 큐에서의 제어 로직에 의해, 상기 적어도 두 개의 비-연접 엔트리들의 각각을 할당 해제하는 단계; 및
    상기 제어 로직에 의해, 할당된 채로 있는 엔트리들이 상기 큐의 헤드에서 시작하는 연접 엔트리들에 위치되도록 상기 큐의 헤드를 향해 할당된 채로 있는 큐 엔트리들을 시프트시키는 단계를 포함하는, 방법.
  12. 청구항 11에 있어서,
    하나의 다른 수신된 비트 벡터에 저장된 값들에 기초한 양만큼 최하위 비트 위치를 향해 수신된 비트 벡터에서의 각각의 비트 위치를 시프트 시킴으로써 상기 수신된 비트 벡터에 대한 변환된 비트 벡터를 생성하는 단계를 더 포함하는, 방법.
  13. 청구항 12에 있어서,
    상기 양은 하나의 다른 변환된 비트 벡터에 저장된 값들에 추가로 기초하는, 방법.
  14. 청구항 12에 있어서,
    상기 큐에서의 제어 로직에 의해, 주어진 위치와 동일한 변환된 비트 벡터의 비트 위치에 저장된 값에 기초하여 상기 큐의 헤드를 향해 주어진 엔트리 위치에서의 상기 큐에서 큐 엔트리를 시프트시키는 단계를 더 포함하는, 방법.
  15. 청구항 14에 있어서,
    상기 선택된 큐 엔트리들에 저장된 메모리 어드레스들을 데이터를 독출하기 위해 메모리로 전송하는 단계를 더 포함하는, 방법.
  16. 네트워크 스위치에 있어서,
    큐의 헤드에 가장 가까운 제 1 이용 가능한 엔트리에서 시작하는 순차 연접 방식으로 데이터를 저장하도록 구성된 복수의 큐 엔트리들을 포함한 큐;
    상기 큐에 저장된 데이터에 대응하는 데이터를 저장하도록 구성된 메모리;
    상기 메모리에서의 엔트리들을 식별하는 메모리 어드레스들을 관리하도록 구성된 순차 원형 버퍼를 포함하며;
    상기 큐는:
    할당 해제를 위해 상기 복수의 큐 엔트리들의 큐 엔트리를 선택하며;
    단일 비트 전환을 가진 복수의 비트들을 포함한 비트 벡터를 생성하는 것으로서, 상기 비트 벡터에서 상기 비트 전환의 위치는 할당 해제를 위해 선택된 상기 큐 엔트리를 식별하는, 상기 비트 벡터 생성하기; 및
    상기 복수의 큐 엔트리들 중 적어도 두 개의 비-연접 엔트리들을 식별하는 복수의 비트 벡터들을 상기 복수의 스케줄러들로부터 수신한 것에 응답하여:
    상기 적어도 두 개의 비-연접 엔트리들의 각각을 할당 해제하며;
    할당된 채로 있는 엔트리들이 상기 큐의 헤드에서 시작하는 연접 엔트리들에 위치되도록 상기 큐의 헤드를 향해 할당된 채로 있는 큐 엔트리들을 시프트시키도록 구성되는, 네트워크 스위치.
  17. 청구항 16에 있어서,
    상기 큐는 하나의 다른 수신된 비트 벡터에 저장된 값들에 기초한 양만큼 최하위 비트 위치를 향해 수신된 비트 벡터에서의 각각의 비트 위치를 시프트 시킴으로써 상기 수신된 비트 벡터에 대한 변환된 비트 벡터를 생성하도록 추가로 구성되는, 네트워크 스위치.
  18. 청구항 17에 있어서,
    상기 양은 하나의 다른 변환된 비트 벡터에 저장된 값들에 추가로 기초하는, 네트워크 스위치.
  19. 청구항 17에 있어서,
    상기 큐는 주어진 위치와 동일한 변환된 비트 벡터의 비트 위치에 저장된 값에 기초하여 상기 큐의 헤드를 향해 상기 주어진 위치에서의 상기 큐에서의 큐 엔트리를 시프트시키도록 추가로 구성되는, 네트워크 스위치.
  20. 청구항 17에 있어서,
    상기 큐는 상기 선택된 큐 엔트리들에 저장된 메모리 어드레스들을 데이터를 독출하기 위해 상기 메모리로 전송하도록 추가로 구성되는, 네트워크 스위치.
KR1020207032316A 2018-04-12 2019-04-09 네트워크 스위치에서의 큐 KR102456086B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/951,844 2018-04-12
US15/951,844 US10601723B2 (en) 2018-04-12 2018-04-12 Bandwidth matched scheduler
PCT/US2019/026571 WO2019199817A1 (en) 2018-04-12 2019-04-09 Queue in a network switch

Publications (2)

Publication Number Publication Date
KR20200139812A true KR20200139812A (ko) 2020-12-14
KR102456086B1 KR102456086B1 (ko) 2022-10-18

Family

ID=66248826

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020207032316A KR102456086B1 (ko) 2018-04-12 2019-04-09 네트워크 스위치에서의 큐

Country Status (6)

Country Link
US (1) US10601723B2 (ko)
EP (1) EP3777059B1 (ko)
JP (1) JP7138190B2 (ko)
KR (1) KR102456086B1 (ko)
CN (1) CN112189324B (ko)
WO (1) WO2019199817A1 (ko)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11294678B2 (en) 2018-05-29 2022-04-05 Advanced Micro Devices, Inc. Scheduler queue assignment
KR20200116268A (ko) * 2019-04-01 2020-10-12 에스케이하이닉스 주식회사 버퍼 메모리, 이를 이용하는 연산 장치 및 시스템
US11334384B2 (en) * 2019-12-10 2022-05-17 Advanced Micro Devices, Inc. Scheduler queue assignment burst mode
US11948000B2 (en) 2020-10-27 2024-04-02 Advanced Micro Devices, Inc. Gang scheduling for low-latency task synchronization

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2466476A1 (en) * 2010-12-20 2012-06-20 Solarflare Communications Inc Network interface device with multiple physical ports and unified buffer memory
US20150081941A1 (en) * 2013-09-18 2015-03-19 International Business Machines Corporation Shared receive queue allocation for network on a chip communication

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05108476A (ja) * 1991-10-18 1993-04-30 Fujitsu Ltd 主記憶制御装置
US6246680B1 (en) 1997-06-30 2001-06-12 Sun Microsystems, Inc. Highly integrated multi-layer switch element architecture
US7406554B1 (en) 2000-07-20 2008-07-29 Silicon Graphics, Inc. Queue circuit and method for memory arbitration employing same
US6782461B2 (en) 2002-02-25 2004-08-24 Intel Corporation Dynamically adjustable load-sharing circular queues
US20040151197A1 (en) * 2002-10-21 2004-08-05 Hui Ronald Chi-Chun Priority queue architecture for supporting per flow queuing and multiple ports
US7689793B1 (en) 2003-05-05 2010-03-30 Marvell Israel (M.I.S.L.) Ltd. Buffer management architecture
US20080320274A1 (en) * 2007-06-19 2008-12-25 Raza Microelectronics, Inc. Age matrix for queue dispatch order
JP5108476B2 (ja) 2007-11-22 2012-12-26 アイシン精機株式会社 車両用ドアロック装置
US8090892B2 (en) * 2009-06-12 2012-01-03 Freescale Semiconductor, Inc. Ordered queue and methods therefor
US9286075B2 (en) * 2009-09-30 2016-03-15 Oracle America, Inc. Optimal deallocation of instructions from a unified pick queue
US9397961B1 (en) 2012-09-21 2016-07-19 Microsemi Storage Solutions (U.S.), Inc. Method for remapping of allocated memory in queue based switching elements
US9979668B2 (en) * 2014-12-22 2018-05-22 Intel Corporation Combined guaranteed throughput and best effort network-on-chip
JP6517934B2 (ja) * 2014-12-24 2019-05-22 インテル・コーポレーション スイッチ内のデータをバッファリングするための装置および方法
US10178011B2 (en) 2016-02-10 2019-01-08 Hewlett Packard Enterprise Development Lp Network traffic management via network switch QoS parameters analysis
US10250530B2 (en) * 2016-03-08 2019-04-02 Mellanox Technologies Tlv Ltd. Flexible buffer allocation in a network switch
JP6090492B1 (ja) 2016-03-18 2017-03-08 日本電気株式会社 メモリアクセス制御装置、情報処理システム、メモリアクセス制御方法、及び、プログラム
US10679636B2 (en) * 2018-01-12 2020-06-09 Ribbon Communications Operating Company, Inc. Methods and apparatus for supporting encoding, decoding and/or transcoding of content streams in a communication system

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2466476A1 (en) * 2010-12-20 2012-06-20 Solarflare Communications Inc Network interface device with multiple physical ports and unified buffer memory
US20150081941A1 (en) * 2013-09-18 2015-03-19 International Business Machines Corporation Shared receive queue allocation for network on a chip communication

Also Published As

Publication number Publication date
EP3777059B1 (en) 2022-08-17
US10601723B2 (en) 2020-03-24
CN112189324A (zh) 2021-01-05
EP3777059A1 (en) 2021-02-17
KR102456086B1 (ko) 2022-10-18
WO2019199817A1 (en) 2019-10-17
CN112189324B (zh) 2023-09-26
JP2021521529A (ja) 2021-08-26
JP7138190B2 (ja) 2022-09-15
US20190319891A1 (en) 2019-10-17

Similar Documents

Publication Publication Date Title
KR102456086B1 (ko) 네트워크 스위치에서의 큐
US11677662B2 (en) FPGA-efficient directional two-dimensional router
TWI789687B (zh) 可重組態資料處理器的虛擬化
CN106462524B (zh) 使用混合存储器立方体链路的互连系统及方法
US7406568B2 (en) Buffer allocation for split data messages
JP2016195375A (ja) 複数のリンクされるメモリリストを利用する方法および装置
US9753660B2 (en) System and method for implementing hierarchical distributed-linked lists for network devices
US11994996B2 (en) Transmission of address translation type packets
KR20240024188A (ko) 네트워크 인터페이스 디바이스
US10540304B2 (en) Power-oriented bus encoding for data transmission
US9996468B1 (en) Scalable dynamic memory management in a network device
EP3841484B1 (en) Link layer data packing and packet flow control scheme
US11520718B2 (en) Managing hazards in a memory controller
CN111045965B (zh) 一种多通道无冲突拆分的硬件实现方法及运行该方法的计算机设备与可读存储介质

Legal Events

Date Code Title Description
A201 Request for examination
A302 Request for accelerated examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant