KR102082020B1 - 다수의 링크된 메모리 리스트들을 사용하기 위한 방법 및 장치 - Google Patents

다수의 링크된 메모리 리스트들을 사용하기 위한 방법 및 장치 Download PDF

Info

Publication number
KR102082020B1
KR102082020B1 KR1020150067244A KR20150067244A KR102082020B1 KR 102082020 B1 KR102082020 B1 KR 102082020B1 KR 1020150067244 A KR1020150067244 A KR 1020150067244A KR 20150067244 A KR20150067244 A KR 20150067244A KR 102082020 B1 KR102082020 B1 KR 102082020B1
Authority
KR
South Korea
Prior art keywords
memory
data
addresses
pointers
lists
Prior art date
Application number
KR1020150067244A
Other languages
English (en)
Other versions
KR20160117108A (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 KR20160117108A publication Critical patent/KR20160117108A/ko
Application granted granted Critical
Publication of KR102082020B1 publication Critical patent/KR102082020B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • G06F13/1673Details of memory controller using buffers
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1605Handling requests for interconnection or transfer for access to memory bus based on arbitration
    • G06F13/1642Handling requests for interconnection or transfer for access to memory bus based on arbitration with request queuing
    • 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/6225Fixed service order, e.g. Round Robin
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/90Buffering arrangements
    • 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/9015Buffering arrangements for supporting a linked list

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)

Abstract

메모리 버퍼에 데이터를 큐잉하기 위한 장치 및 방법이 개시된다. 방법은 복수의 큐들로부터 큐를 선택하는 단계; 선택된 큐로부터 데이터의 토큰을 수신하는 단계; 및 상기 데이터의 토큰을 저장하기 위해, 어드레스들 및 버퍼 관리자에 의해 할당된 어드레스들에 대한 상기 버퍼 관리자로부터의 포인터들을, 큐 모듈에 의해, 요청하는 단계를 포함한다. 이어서, 상기 버퍼 관리자에 의해 메모리 리스트가 액세스되고 어드레스들 및 상기 메모리 리스트 내의 할당된 어드레스들로의 포인터들이 생성되고, 액세스된 메모리 리스트는 추가 어드레스 할당을 위해 복수의 링크된 메모리 리스트들을 포함한다. 방법은 상기 액세스된 메모리 리스트 내에 상기 할당된 어드레스들에 대한 상기 포인터들을 기록하는 단계로서, 상기 포인터들은 상기 할당된 어드레스들을 함께 링크하는, 상기 포인터들을 기록하는 단계; 및 상기 큐로부터 데이터의 후속하는 토큰들의 수신 시, 추가 어드레스 할당들을 위해 다른 메모리 리스트들로 마이그레이션시키는 단계; 및 상기 다른 메모리 리스트들 내에서 상기 할당된 어드레스들을 함께 링크하는 추가 포인터들을 생성하는 단계를 더 포함한다.

Description

다수의 링크된 메모리 리스트들을 사용하기 위한 방법 및 장치{METHOD AND APPARATUS FOR USING MULTIPLE LINKED MEMORY LISTS}
본 개시는 일반적으로 네트워크 데이터 송신에 관련되고, 보다 구체적으로, 데이터의 토큰들을 송신할 때 스위칭 네트워크의 쓰루풋을 증가시키기 위해 선택된 큐로부터 데이터의 토큰들을 디큐잉 (dequeuing) 및 인큐잉 (enqueuing) 하는 동안 다수의 메모리 리스트들을 링크하기 위한 시스템들 및 방법들에 관한 것이다.
데이터 스위칭 네트워크에서, 데이터 트래픽은 버퍼 내의 다수의 큐들 (queues) 에 저장된 다양한 플로우들로 카테고리화된다. 라우터 또는 다른 네트워크 엘리먼트 내에서, 저장된 큐들은 통상적으로 공통 유출 통신 링크 (outgoing communications link) 또는 출구 포트 (egress port) (예를 들어, 물리적 통신 링크 또는 의사-회선 (pseudo-wire)) 에 대해 경쟁한다. 따라서, 버퍼링된 큐들은 출구 측에 대해 스케줄링되어야 한다. 따라서, 큐잉된 패킷들 중 어느 것이 유출 송신을 위한 다음 차례가 될 것인지를 선택하기 위해 송신이 수행되기 전에 라우터 내의 출구 측에 대해 토큰 스케줄링 디바이스들에 의해 프로세싱이 요구된다.
통상적으로, 라우팅 프로세스에서, 상이한 소스 포트들로부터 들어오는 데이터의 토큰들은 이들의 소스 포트 및 목적지 포트, 및 트래픽 타입들에 기초하여 분류된다. 이들은 버퍼 내의 상이한 큐들로 후속하여 소팅된다 (sorted). 라우터 네트워크를 통과하는/하거나 라우터 네트워크에 의해 프로세싱된 데이터의 토큰들은 버퍼 메모리 내에 적어도 일시적으로 유지된다. 통상적으로, 링크된 리스트 큐라고 공지된 메모리 데이터 구조는 버퍼 메모리와 연관되어 유지된다. 링크된 리스트 큐는 각각의 토큰과 연관된 데이터가 저장된 버퍼 메모리 내의 각각의 메모리 위치를 각각 포인팅하는 포인터들의 리스트를 포함한다. 종래의 큐 구조는 통상적으로, 일 연속적이고, 순차적인 리스트 내에 버퍼 메모리 내에 현재 저장된 데이터의 토큰 각각과 연관된 각각의 포인터를 저장한다. 큐 각각의 상태는 업데이트되고 관련된 링크-리스트 포인터들은 데이터의 토큰이 큐 내로 들어갈 때 업데이트된다. 출력 포트 가용성에 기초하여, 스케줄러는 큐들로부터 데이터의 토큰들을 디큐잉하기 위한 스케줄링 알고리즘을 선택한다. 그 후 큐 각각의 상태 및 링크된 리스트 포인터들은 데이터의 토큰이 큐 밖으로 이동될 때 다시 업데이트된다.
데이터의 토큰들을 분류하는 단계들이 요구되고 소스 포트 및 목적지 포트들과 트래픽 타입들에 기초하기 때문에 멀티캐스트 트래픽 데이터 패킷들의 프로세싱 시 추가적인 레이턴시 시간이 발생된다. 처음으로, 데이터 패킷들과 연관된 데이터의 토큰들이 상이한 큐들 내로 소팅되고 이어서 큐 내로의 진입 시, 큐의 상태가 업데이트된다. 다음에, 포트 가용성에 기초하여, 스케줄러는 버퍼 메모리 내의 대응하는 큐들로부터의 토큰들을 디큐잉하기 위한 스케줄링 알고리즘을 선택한다. 포트 가용성에 대해 대기하는 이 단계는 전송될 데이터의 토큰들 각각에 대해 반복된다. 또한, 데이터의 토큰들의 사본들이 복제되어야 하고 추가적인 포트들로 전송되면 QoS (Quality of Service) 알고리즘 검사가 요구된다. 또한, 데이터의 토큰들을 송신할 때, 우선적인 서비스의 보장이 예를 들어, 제어 트래픽 또는 음성/비디오 레이턴시 센서티브 트래픽과 같은, 고 우선순위 트래픽에 대해 요구될 때, 때때로 추가적인 검사들은 필수적이다. 이러한 검사들은 송신 동안 부가적인 레이턴시 시간을 생성할 수 있다.
버퍼 관리자의 성능은 인큐잉 프로세싱 동작 및 디큐잉 프로세싱 동작에서 데이터의 토큰들의 파이프라인 플로우에 의해 제한된다. 버퍼가 가득 차면, 버퍼 관리자는 데이터의 추가적인 토큰들을 인큐잉하기 전에 데이터의 토큰이 디큐잉될 때까지 대기해야 한다. 여기서, 레이턴시 시간을 감소시키기 위해, 인큐잉될 데이터의 추가적인 토큰들을 인에이블하기 위해 병렬 버퍼들이 도입되었다. 그러나, 이러한 추가적인 병렬 버퍼들은 추가적인 리소스들 및 프로세싱 전력을 사용한다. 추가적으로, 라우터에 의해 수행된 일부 동작에서 버퍼 메모리가 프로세싱될 때마다, 그 데이터의 토큰과 연관된 포인터가 획득되도록 큐는 반드시 어드레싱되거나 액세스되어야 한다.
라우터들 또는 다른 패킷 스위치들과 연관된 프로세싱 속도가 증가함에 따라 (예를 들어, 초 당 10 기가비트 이상), 입력 및 출력 대역폭 및 큐를 유지하기 위해 사용된 메모리와 연관된 액세스 레이턴시가 중요해진다. 즉, 종래의 큐는 토큰 포인터가 필요한 매 시간마다 반드시 액세스되어야 한다는 사실이 주어지고, 큐 메모리는 상당히 보틀넥 (bottleneck) 이 된다.
따라서, 다수의 인큐잉 및 디큐잉 토큰 버퍼 동작들을 제안하는 링크-리스트들에 기초한 가상 큐 기법들을 사용함으로써 현재 디바이스들 내에서 수행될 수 있는 인큐잉 동작 및 디큐잉 동작의 현재 제한된 수의 증가를 실현하는, 어드레스 링크-리스트들을 사용하는 버퍼 메모리 관리를 제공하는 것이 유리할 것이다.
본 개시의 실시예들은 서브-큐 리스트들의 구현이 송신할 데이터의 다수의 토큰들을 병렬로 스케줄링할 수 있게 하는, 다수의 리스트 타입 서브-큐들을 사용하여 가상 큐들의 링크-리스트를 형성하고 라우터 내에서 스위칭 메커니즘들의 쓰루풋을 상당히 증가시키기 위한 메커니즘을 제공한다.
따라서, 본 개시의 일 실시에는 메모리 버퍼에 데이터를 큐잉하는 방법들을 채용하고, 이 방법은 복수의 큐들로부터 큐를 선택하는 단계 및 선택된 큐로부터 데이터의 토큰을 수신하는 단계를 포함한다. 큐 모듈은 상기 데이터의 토큰을 저장하기 위해, 어드레스들 및 버퍼 관리자에 의해 할당될 어드레스들에 대한 상기 버퍼 관리자로부터의 포인터들을 요청한다. 이어서, 상기 버퍼 관리자에 의해 메모리 리스트가 액세스되고 어드레스들 및 상기 메모리 리스트 내의 할당된 어드레스들로의 포인터들이 생성된다. 액세스된 메모리 리스트는 추가 어드레스 할당을 위해 복수의 링크된 메모리 리스트들을 포함한다. 또한 상기 액세스된 메모리 리스트 내에 상기 할당된 어드레스들에 대한 상기 포인터들이 기록된다. 상기 포인터들은 상기 할당된 어드레스들을 함께 링크한다. 이 방법은 상기 큐로부터 데이터의 후속하는 토큰들의 수신 시, 추가 어드레스 할당들을 위해 다른 메모리 리스트들로 마이그레이션시키는 (migrating) 단계 및 상기 다른 메모리 리스트들 내에서 상기 할당된 어드레스들을 함께 링크하는 추가 포인터들을 생성하는 단계를 더 포함한다.
본 개시의 다른 실시예에 따라, 메모리 버퍼에 데이터를 큐잉하기 위해, 장치는 복수의 큐들로부터 큐를 선택하고 선택된 큐로부터 데이터의 토큰을 수신하기 위한 선택기 모듈을 포함한다. 버퍼 관리자는 상기 데이터의 토큰을 저장하기 위해, 어드레스들 및 상기 버퍼 관리자에 의해 할당되는 어드레스들에 대한 포인터들의 요청들에 대해 상기 선택기 모듈에 응답한다. 할당 모듈은 메모리 리스트에 액세스하고, 어드레스 및 상기 메모리 리스트 내에 할당된 어드레스들에 대한 포인터들을 생성하도록 상기 관리자에 응답한다. 상기 액세스된 메모리 리스트는 추가 어드레스 할당을 위한 복수의 링크된 메모리 리스트들을 포함한다. 상기 할당 모듈은, 상기 할당된 어드레스들에 대한 상기 포인터들을 상기 액세스된 메모리 리스트 내에 기록하고, 상기 포인터들은 할당된 어드레스들을 함께 링크하고, 이어서 상기 할당 모듈은, 상기 큐로부터 데이터의 후속하는 토큰들의 수신 시 추가 어드레스 할당을 위해 다른 메모리 리스트들로 마이그레이션시키고 상기 다른 메모리 리스트들 내에 할당된 어드레스들을 함께 링크하는 추가 포인터들을 생성한다.
본 개시의 또 다른 실시예에 따라, 상기 큐 모듈은 상기 링크된 메모리 리스트들의 상기 할당된 어드레스들 내로 데이터의 토큰들을 인큐잉 (enqueuing) 하기 위한 인큐잉 모듈 및 상기 링크된 메모리 리스트들의 상기 할당된 어드레스들로부터 데이터의 토큰들을 디큐잉 (dequeuing) 하기 위한 디큐잉 모듈을 포함한다. 상기 인큐잉 모듈은 복수의 데이터의 토큰들을 인큐잉하기 위한 상기 버퍼 관리자로의 요청들을 한번에 생성하도록 구성되고, 상기 복수의 데이터의 토큰들은 상기 복수의 메모리 리스트들에 걸쳐 포인터들에 의해 링크된 어드레스들을 갖는다. 상기 디큐잉 모듈은 복수의 데이터의 토큰들을 디큐잉하기 위한 상기 버퍼 관리자로의 요청들을 한번에 생성하도록 구성되고, 상기 복수의 데이터의 토큰들은 상기 복수의 메모리 리스트들에 걸쳐 포인터들에 의해 링크된 어드레스들을 갖는다.
본 섹션은 필요에 의해, 상세의 간소화, 일반화 및 생략을 포함하고, 결과적으로 당업자는 본 섹션이 단지 예시이고 어떠한 방식으로도 제한하도록 의도되지 않는다는 것을 이해할 것이다. 청구항에 의해서만 규정된 바와 같은, 본 개시의 다른 양태들, 독창적인 특징들, 및 장점들은 이하에 언급된 비제한적인 상세한 기술에서 명백해질 것이다.
본 개시의 실시예들은 유사한 참조 번호들이 유사한 엘리먼트들을 지정하는 첨부된 도면들과 함께 취해진, 이하의 상세한 기술을 읽음으로써 보다 잘 이해될 것이다.
도 1은 본 개시의 일 실시예에 따른, 예시적인 라우터에서 버퍼 관리자 모듈들의 구성을 도시하는 블록도이다.
도 2는 본 개시의 일 실시예에 따른 예시적인 라우터 내의 큐 테일 포인터 및 큐 헤드 포인터의 구성을 도시하는 버퍼 관리자의 블록도이다.
도 3은 본 개시의 실시예에 따른 예시적인 가상 큐 링크리스트 구성을 예시한다.
도 4는 본 개시의 실시예에 따른 예시적인 큐 링크리스트 구성을 예시한다.
도 5a 및 도 5b는 본 개시의 일 실시예에 따른 링크-리스트 구조들을 갖는 예시적인 헤드 및 테일 포인터 구성의 블록도를 예시한다.
도 6a 및 도 6b는 본 개시의 일 실시예에 따른 다수의 메모리 리스트 구조들 내의 데이터의 토큰들을 함께 링크하는 블록도를 예시한다.
도 7은 본 개시의 실시예에 따른 링크-리스트 구조들을 사용하여 예시적인 버퍼 관리자 동작을 도시하는 흐름도이다.
도 8은 본 개시의 실시예에 따른 예시적인 라우터 내에서 큐 테일 포인터 및 큐 헤드 포인터의 구성을 도시하는 예시적인 버퍼 관리자의 블록도이다.
도 9는 본 개시에 따른, 예시적인 라우터 내에서 버퍼 관리자 모듈들의 구성을 도시하는 블록도이다.
이제 본 발명의 바람직한 실시예들에 대한 참조가 상세하게 이루어질 것이고, 본 발명의 예들은 첨부된 도면들에 예시된다. 본 발명이 바람직한 실시예들과 관련하여 기술되지만, 이들은 본 발명을 이들 실시예들로 제한하도록 의도되지 않는다는 것이 이해될 것이다. 반대로, 본 발명은 첨부된 청구항들에 의해 규정된 바와 같이 본 발명의 정신 및 범위 내에 포함될 수도 있는, 대안들, 수정들 및 등가물들을 커버하도록 의도된다. 또한, 본 발명의 실시예들의 이하의 상세한 기술에서, 다수의 구체적인 상세들이 본 발명의 전체적인 이해를 제공하기 위해 언급된다. 그러나, 본 발명이 이들 구체적인 상세들 없이 실시될 수도 있다는 것이 당업자에게 인식될 것이다. 다른 예들에서, 공지의 방법들, 절차들, 컴포넌트들, 및 회로들은 본 발명의 실시예들의 양태들을 불필요하게 모호하게 하지 않도록 상세히 기술되지 않았다. 본 발명의 실시예들을 도시하는 도면들은 반-도식적이고 (semi-diagrammatic) 스케일대로 도시되지 않고, 특히 일부 치수들은 표현의 명확성을 위해 도면들에서 과장되게 도시되었다. 유사하게, 기술의 용이성을 위해 도면들 내의 뷰들이 일반적으로 유사한 배향들을 보이지만, 이러한 도면들의 도시는 대개 임의적이다. 일반적으로, 본 발명은 임의의 배향으로 동작될 수 있다.
그러나, 모든 이들 및 유사한 용어들이 적절한 물리량들과 연관되고 이들 양들에 인가된 편리한 라벨들일 뿐이라는 것을 유념해야 한다. 이하의 논의들로부터 명백한 바와 달리 명시적으로 언급되지 않는 한, 본 발명 전체에서 "프로세싱" 또는 "액세싱" 또는 "실행" 또는 "저장" 또는 "렌더링" 등과 같은 용어들을 활용하는 논의들이 컴퓨터 시스템, 또는 컴퓨터 시스템의 레지스터들 및 메모리들 및 다른 컴퓨터 판독가능 매체 내의 물리 (전자) 량들로서 표현된 데이터를 컴퓨터 시스템 메모리들 또는 레지스터들 또는 다른 이러한 정보 저장 디바이스, 송신 디바이스 또는 클라이언트 디바이스 내의 물리량으로서 유사하게 표현된 다른 데이터로 조작하거나 변환하는, 유사한 전자 컴퓨팅 디바이스의 액션 및 프로세스들을 말한다는 것이 이해된다. 몇몇 실시예들에서 컴포넌트들이 나타날 때, 동일한 참조 번호는 이 컴포넌트가 원래의 실시예에 예시된 바와 동일한 컴포넌트라는 것을 의미한다.
인큐잉 및 디큐잉 버퍼 메모리 관리
도 1은 본 개시가 구현될 수도 있는 데이터 프로세싱 시스템 (100) 의 토큰을 도시한다. 데이터 프로세싱 시스템 (100) 은 복제, QOS 및 인큐잉 프로세서들 (120), 버퍼 관리자 (130), 스케줄링 디큐잉 (140) 및 버퍼 메모리 (150) 를 갖는 프로세서 (110) 를 포함한다. 프로세서 (110) 는 데이터의 토큰들 및 데이터의 다른 토큰들이 수신되는 네트워크와 스케줄링 디큐잉 (140) 에 의해 제어된 출력 포트 (160) 사이에 인터페이스를 제공하도록 구성된다. 복제, QOS 및 인큐잉 프로세서들 (120), 버퍼 관리자 (130), 스케줄링 디큐잉 (140) 및 버퍼 메모리 (150) 를 갖는 프로세서 (110) 는 예를 들어, 하나 이상의 집적 회로들이 라우터 또는 스위치의 라인 또는 포트 카드 상에 설치될 때, 구현될 수도 있다. 데이터의 토큰들은 이로 제한되는 것은 아니지만, 송신될 패킷 데이터의 대표적인 부분들로 간주될 수 있다. 예로서, 데이터의 패킷은 페이로드 부분 및 헤더 부분 양자를 가질 수 있다. 데이터의 토큰은 일반적으로 데이터 패킷의 헤더 부분 또는 헤더 부분과 연관되거나 전체 데이터 패킷과 연관된 메타-데이터 또는 양태들의 콜렉션을 포괄한다. 부가적으로, 헤더 부분이 64 내지 128 비트이면, 필요한 데이터의 토큰은 네트워크 요건들에 따라 40 내지 50 비트일 수도 있다. 데이터의 토큰은 포인터들에 의해 데이터 패킷과 연관될 수 있고 데이터 패킷은 데이터의 토큰들에 커플링된 연관된 포인터들에 의해 참조되는 외부 메모리 블록들 내에 저장될 수 있다.
도 1에 도시된 시스템 엘리먼트들의 특정한 배열은 단지 예시적인 예라는 것을 이해해야 한다. 보다 구체적으로, 이전에 언급된 바와 같이, 본 개시는 임의의 타입의 패킷 또는 토큰 프로세서에 따라서 구현될 수 있고, 임의의 특정한 패킷 프로세싱 애플리케이션으로 제한되지 않는다.
도 2는 본 개시의 실시예에 따른 버퍼 메모리 관리자 (200) 및 버퍼 관리자 (210) 동작시 큐 메모리의 큐 테일 포인터 (240) 및 큐 헤드 포인터 (250) 그리고 프리 포인터들 (260) 을 도시한다. 링크된 리스트 포인터들 (240 내지 260) 은 프로세서들 (120 및 140) (도 1) 의 제어 하에서 버퍼 관리자 (130) (도 1) 내에 상주하고 유지될 수도 있다는 것이 이해된다. 모든 큐는 큐 헤드 포인터 (250) 및 큐 테일 포인터 (240) 양자를 갖는다. 큐 테일 포인터 (240) 는 기록 동작의 위치를 명시하고 큐 헤드 포인터 (250) 는 판독 동작의 위치를 명시한다. 판독 동작들을 수행할 때, 큐 헤드 포인터 (250) 는 각각의 새로운 판독 동작을 위해 큐를 따라 시프트할 것이다. 유사하게, 큐 테일 포인터 (240) 는 각각의 새로운 기록 동작을 위해 큐를 따라 시프트할 것이다. 따라서, 마지막 큐 테일 포인터 (240) 는 일 사이클에서 마지막 기록 동작을 식별할 것이고, 마지막 큐 헤드 포인터 (250) 는 일 사이클 동안 마지막 판독 동작을 식별할 것이다.
도 2에 도시된 바와 같이, 일단 특정한 큐가 큐 테일 포인터 요청 (220) 에 따라 액세스되면, 새로운 큐 헤드 포인터 (250) 및 새로운 테일 포인터 (240) 가 판독된다. 큐의 토큰이 수신된다. 토큰이 수신된 후, 다음 헤드 포인터정보가 판독 및 프로세싱되도록 액세스될 수 있다.
도 3은 수신된 토큰들의 후속하는 순서에 따라 순서대로 덧붙여진 (populated) 선택된 Q0에 대한 병렬 링크-리스트 구성을 도시한다. 처음으로 요청된 포인터는 큐 헤드 포인터이거나 큐 테일 포인터일 수 있다. Q0 각각은 Q00 내지 Q03의 4 개의 링크된 리스트들로 분할될 것이다. 따라서, Q00는 도 3에 도시된 Q'000 내지 Q'002의 리스트들인, 4 개의 메모리 위치들 Q00 내지 Q03로 분할될 것이다. Q00 내지 Q03의 단일 링크-리스트는 Q00 내지 Q03의 4 개의 서브-링크-리스트들로 더 세분화된다. 이는 예를 들어, Q0의 일 판독 사이클에서 이제 4 개의 Q00 내지 Q03 메모리 위치 판독 또는 Q00 판독 당 N/4 판독 사이클을 포함할 수 있게 한다. 즉, Q0 각각에 대한 추가 Q00 내지 Q03를 함께 링크하는 것은, 단일 클록 사이클 Q0에서 추가 링크-리스트들을 링크하지 않고 최대 4 사이클에서 통상적으로 판독되는 추가 토큰 데이터 세트들을 수신하는 능력을 실현한다.
도 4는 Q00에 대해 N/4인 Q0 각각에 대한 판독 사이클을 예시한다. 제 1 클록 사이클은 Q00, Q01, Q12, Q00를 포함할 것이다. 다음 클록 사이클은 Q01, Q12, Q00, Q01로 시작되는 N/4 시프트한다. 후속하는 사이클들은 각각 Q12로 시작하는 N/4 시프트한다. 따라서, 후속하는 판독 및 기록 사이클은 각각 N/4 회 시프트에 의해 수행된다. 따라서, 특정한 Q0 클록 시간에서, 레지스터 시프트 각각의 N/4 단축 기간 거리의 대략 최대 4 번의 클록 레지스터 시프트가 있다.
도 5a에서, 큐가 선택된 후, 판독 요청이 실행되고 데이터의 토큰 (505) 이 디큐잉되도록 요청된다. 판독 요청에 응답하는 스케줄러는 선택된 큐에서 상부의 데이터의 토큰을 팝 (pop) 한다. 요청된 데이터의 토큰이 메모리 뱅크들의 세트의 제 1 가용 메모리 위치에 버퍼 관리자에 의해 위치되고, 본 예에서, 메모리 뱅크0는 요청된 데이터의 토큰에 대해 할당된 어드레스로서 지정된다. 헤드 포인터 (520) 는 요청된 토큰 (505) 에 포인팅하는 버퍼 관리자의 링크-리스트 타입 관리자 애플리케이션에 의해 선택된다. 메모리 위치는 버퍼 관리자에 의해 Q000로 라벨이 붙여졌다. 버퍼 관리자의 내부 클록 애플리케이션은 요청되는 데이터의 토큰들에 대해 4 개의 메모리 위치들의 투플들 (tuples) 을 할당한다. 데이터의 제 1 토큰 (505) 을 수신한 후, 제 1 클록 사이클 Q0의 시작점이 확인될 수 있다. 이 시작점은 최초의 헤드 포인터 (510) 가 향하는 지점이고 최초의 토큰 요청 (505) 이 판독되고 프로세싱된 후 다시 인식되는 지점이다.
메모리 위치들 Q00N의 각각의 세트는 선택된 큐로부터 수신될 데이터의 토큰들에 대해 최대 4 개의 메모리 위치들이 할당된다. 다음 메모리 위치는 테일 포인터 (515) 를 통해 Q000에 링크된다. 버퍼 관리자는 다음 판독 요청을 전송하고 큐로부터 제 2 데이터의 토큰을 수신한다. 제 2 데이터의 토큰은 Q001로 지정된 뱅크1 내의 가용 메모리 위치에 동적으로 할당된다. 버퍼 관리자로부터 수신된 다음 포인터 (515) 는 메모리 위치 Q001로의 후속하는 헤드 포인터가 된다. 헤드 포인터 및 테일 포인터의 이러한 데이지 체인 (daisy chain) 커플링은 메모리 뱅크들 건너편으로부터 데이터의 토큰들의 디큐잉 동작을 위한 2-단계 프로세스를 인에이블한다. 예로서, 온셋 (onset) 에서 데이터의 2 개의 토큰들 (515 및 550) 은 큐로부터 요청된 최초 요청 데이터의 토큰 Q000 (515) 및 데이터의 다음 토큰 Q001 (550) 이다. 토큰들 Q000 (515) 및 Q001 (550) 모두는 먼저 Q000 위치로부터 Q0 헤드 포인터 (510) 의 판독 및 데이터의 토큰 프로세싱을 수반하는 2-단계 프로세스에서 디큐잉된다. Q000의 프로세싱 후에 이어서 다음 테일 포인터 (515) 가 버퍼 관리자에 의해 판독되고 식별될 수 있다. 즉, 일단 Q0가 요청되면, Q000가 판독되고; Q000 및 이어서 Q000와 연관된 데이터가 수신되고, 다음 Q001로의 경로가 식별된다. Q001로부터 Q002로의 경로에 대한 다음 테일 포인터 (550) 및 후속하는 다음 포인터 (565) 가 또한 식별된다. 부가적으로, 일단 요청 Q0이 발생하였으면, Q0와 연관된 객체들의 세트 또는 데이터를 전송하기 위한 위치들이 알려진다. 부가적으로, 도 5a는 데이터의 토큰들 (525 및 570) 의 추가 세트들을 위한 링크들에 대한 데이지 체인의 다른 경로를 도시한다. 메모리 할당 Q030은 Q031 및 뱅크2의 어드레스 Q032 (560) 를 포인팅하는 후속하는 테일 포인터 (535) 에 링크된다. 어드레스 Q020의 메모리 리스트 할당 (570) 은 이의 테일 포인터를 통해 Q021 (540) 에 연결된다. 추가 할당 Q01N (545) 은 후속하는 사이클들에서 메모리 리스트들 내에서의 추가 할당을 나타낸다.
버퍼 관리자가 판독 요청들을 계속해서 전송하기 때문에, 4 개의 링크된 메모리 위치들의 투플 또는 세트가 생성된다. 4 개의 링크된 위치들의 제 1 세트가 완성될 때, 버퍼 관리자는 4 개의 링크된 위치들의 다음 세트로 시작하고 모든 데이터의 토큰들이 선택된 큐로부터 팝될 때까지 4 개의 메모리 위치들의 투플들 또는 세트들을 생성하는 이 프로세스를 계속한다. 홀수 또는 채워질 (fill) 마지막 세트에서 발생할 수도 있는 4 개의 링크된 위치들의 세트를 채우기에 충분하지 않은 데이터의 토큰들이 있다면, 리스트 내에 블랭크 (blank) 위치들이 있을 것이다.
다음에, 유사하게 제 3 메모리 위치가 테일 포인터 (550) 에 의해 메모리 위치 Q001에 커플링된다. 테일 포인터 (550) 는 이제 제 3 메모리 위치 Q002로의 헤드 포인터이다. 뱅크2에서의 제 3 메모리 위치는 Q002로 지정되고 메모리 위치들 각각은 다수의 메모리 뱅크들에 걸쳐 마이그레이션하는 라운드 로빈 또는 원형 방식으로 동적으로 지정되고 할당된다. 이러한 라운드 로빈 프로세스는 4 개의 메모리 위치들의 전체 세트가 생성되고 헤드 포인터 및 테일 포인터에 의해 링크될 때까지 계속한다. 이러한 원형 루프는, 소정의 시간에 많은 데이터에 대한 대역폭 출력이 식별된 큐 외부로 포워딩될 수 있는지 또는 소정의 큐로부터의 데이터가 네트워크 스위칭 알고리즘에서 얼마나 자주 디큐잉될 수 있는지를 나타낸다. 도 5a에서, 예를 들어, Q000 (515) -> Q001 (550) -> Q002 (565) 로의 원형 구성은 메모리 뱅크 리스트 1과 2의 세트를 링크하는 것으로 도시되었다. 뱅크 리스트 (510, 530, 555) 각각은 경로들에서 함께 링크된 Q000 내지 Q03N의 토큰들의 리스트를 포함하여 토큰 각각은 Q0의 세트와 연관될 수 있다.
도 5b는 큐 테일 포인터 (585) 및 Q00 내지 Q03의 큐 테일 포인터들 (590) 의 관련된 서브 블록들의 블록도를 예시한다. 또한 큐 헤드 포인터 (586) 및 Q00 내지 Q03의 큐 헤드 포인터들 (595) 의 관련된 서브 블록들의 블록도를 예시한다. 큐 테일 포인터들 (590) 의 스택된 서브 블록들 및 큐 테일 포인터들 (595) 의 스택된 서브 블록들 각각은 도 5a의 뱅크1 및 뱅크2에 나타낸 병렬 링크-리스트들에서 함께 링크된다.
도 6a 및 도 6b는 4 개의 병렬 링크-리스트들로 구성된 단일 큐에 대한 큐 100 병렬 링크-리스트의 예의 블록도를 예시한다. 본 개시의 예시적인 실시예(들) 의 기본적인 개념은 하나 이상의 병렬 링크된 리스트들이 도 6a의 동적 링크된 리스트의 예시적인 실시예로부터 추가되거나 제거되어도 변하지 않는다는 것을 주의해야 한다.
도 6a는 단일 큐 4 개의 병렬 링크-리스트들: Q100-0 제 1 병렬 링크된 리스트 (605); Q100-1 제 2 병렬 링크된 리스트 (610); Q100-2 제 3 병렬 링크된 리스트 (615); 및 Q100-3 제 4 병렬 링크된 리스트 (620) 에 대한 큐 100 병렬 링크-리스트의 예인 블록도 (600) 를 예시한다. 블록들의 서브-리스트들 간의 외부 가상 커플링들 (625, 630) 은 링크된 리스트들 Q100-01 -> Q100-11 -> Q100-21 -> Q100-31 다시 Q100-02로의 루프 구성의 커플링의 제 1 세트 및 Q100-02 -> Q100-12 -> Q100-22 -> Q100-32 다시 Q100-03로의 루프 구성의 커플링의 제 2 세트를 예시한다. 테일 포인터 및 헤드 포인터를 포함하는 커플링들은 세트 내의 데이터의 마지막 토큰의 테일 포인터 및 데이터의 다음 토큰에 대한 헤드 포인터 양자로서 기능하는 마지막 커플링 (625, 630) 을 갖는 4 데이터의 토큰들의 세트와 함께 링크한다. Q100-01 -> Q100-02 -> Q100-03으로의 내부 커플링은 개별 토큰 데이터 세트들에 대한 개별 병렬 리스트들을 순차적으로 나타낸다. 따라서, 데이터 세트 1의 토큰들의 마지막 테일 포인터는 데이터 세트 2의 다음 토큰들에 연결되고 데이터 세트 1의 마지막 테일 포인터는 데이터 세트 2의 토큰들의 제 1 헤드 포인터로서 기능한다. 도 6a의 예에서, 링크된 리스트들의 데이터의 토큰들 Q100-01 -> Q100-11 -> Q100-21 -> Q100-31 및 Q100-12 -> Q100-22 -> Q100-32 다시 Q100-03으로의 2 개의 완성된 세트가 있기 때문에, 테일 포인터들 (625 및 630) 에 의해 생성된, 데이터 세트 2 및 데이터 세트 3의 토큰들로의 2 개의 헤드 포인터들이 있다.
부가적으로, 도 6a에서, 메모리 리스트 할당들을 인큐잉하고 덧붙이는 단계 및 데이터 세트의 4 개의 토큰들의 다수의 메모리 할당들의 세트들을 디큐잉하는 단계의 전체 링크-리스트 라운드 로빈 타입 사이클 또는 루프 프로세스가 도시된다. 서브-리스트들 (615, 610, 615, 620) 사이에서 4 개의 데이터의 토큰들의 제 1 세트의 커플링은 도 6a에서 “1-1-1-1”로 지정되었다. 버퍼 관리자는 4 개의 세트 각각을 추적하기 위한 내부 카운터에 의존하고 가상 테이블은 연관된 헤드 포인터 및 테일 포인터와 함께 모든 카운터 값들을 저장하도록 버퍼 메모리 내에서 생성된다. 부가적으로, 데이터의 토큰들은 외부 위치들에 데이터 저장을 허용하는, 서브-리스트 내에 4 개의 세트 각각에 대한 추가 데이터 세트들과 연관된 추가 포인터들을 가질 수 있다. 최초 4 개의 세트의 완성 시, 버퍼 관리자는 자신의 내부 카운터를 증가시키고 다음 세트 “2-2-2-2”를 지정한다. 이 프로세스는 선택된 큐로부터의 모든 데이터의 토큰들이 인큐잉되거나 디큐잉될 때까지 반복된다. 내부 카운터 애플리케이션들을 사용하는 버퍼 관리자는 4 개의 세트들의 블록들의 FIFO 타입 정렬을 따르고, 각각의 세트는 도 6a에 도시된 바와 같이 1-2-3의 세트의 번호 순서로 또한 커플링된다.
도 6b는 큐 100의 포트 4 및 트래픽 클래스 4에서 특정 목적지 (미도시) 에 대해 생성된 큐 리스트의 예인 블록도를 예시한다. 병렬 메모리 서브-리스트들 (635, 640, 645, 및 650) 이 도시된다. 예를 들어, Q100에 대한 큐 테일 포인터 메모리는 메모리 서브-리스트 (635) 에서 Q100-0이고, 이는 현재 포인터 1000으로 주어진다. 또한, 메모리로부터 판독된 프리 포인터는 1100이고 큐 100-0에 대한 큐 테일 메모리에 기록된다. 따라서, Q100-0에 대한 큐 테일 메모리는 1000의 현재 포인터 및 1100의 다음 포인터를 갖는다. 이는 또한 현재 포인터 및 다음 포인터를 갖는 “Qtail Req” 각각을 열거하는 이하의 표 1.1에 도시된다. 이들 큐 테일 요청들 및 현재 포인터 및 다음 포인터 각각은 내부 병렬 링크-리스트들을 형성한다. Q100-0 내에서의 메모리 할당들은 랜덤이고 가용성에 따라 동적으로 선택된다. 따라서, 메모리 리스트에서의 순서는 메모리 위치들의 가용성에 따라 변경된다. 생성된 동적 리스트가 이하의 표 1.1에 도시되고, 인큐잉 프로세스 동안, 버퍼 관리자는 4 개의 데이터의 토큰들의 제 1 세트에 대해 현재 포인터 1000 및 이어서 4 개의 데이터의 토큰들의 다음 세트에 대해 다음 포인터 1100을 할당한다. 테일 포인터 1000 및 카운터 0의 내부 카운터가 도 6b에 도시된다. 제 1 세트의 데이터의 토큰에 대한 다음 포인터는 1000-0으로부터 2000-1으로의 테일 포인터 커플링에 의해 도시된다. 카운터는 1로 업데이트되고 서브-리스트 Q100-1 내의 현재 포인터는 2000이다. 서브리스트 Q100-2에서, 현재 포인터는 카운터 2를 갖는 3000이고 Q100-3에서, 현재 포인터는 카운터 3을 갖는 4000이다. 서브리스트들 (635 내지 650) 각각은 버퍼 관리자가 리스트 각각으로 마이그레이션하고 4 개의 데이터의 토큰들의 세트 각각에 대해 헤드 포인터 및 테일 포인터의 세트를 생성하는 리스트의 내부 카운터를 업데이트할 때 현재 포인터들을 할당받는다. 서브리스트들 각각을 통해 마이그레이션한 후, 버퍼 관리자는 데이터의 토큰들의 다음 세트에 대한 다음 현재 포인터로서 프리 포인터를 사용하여 리턴한다 (655, 660). 이러한 원형 또는 라운드 로빈 방법을 사용하여, 모든 서브리스트들이 4 개의 세트들에 데이터의 토큰들을 저장하기 위해 활용되고 각각의 세트의 마지막 테일 포인터는 다음 세트의 후속하는 헤드 포인터가 된다. 따라서, 최초의 Q100-0 링크-리스트 (635) 의 카운터 값들은 데이터의 토큰들의 세트 각각에 할당된 포인터들의 세트들에 대응하여, 0, 4, 8, 등의 4 개의 세트들로 지정된다.
표 1.1
인큐잉 및 버퍼 관리자 상호작용
Qtail Req-100-0 -> 현재 포인터-1000, 다음 포인터-1100
Qtail Req-100-1 -> 현재 포인터-2000, 다음 포인터-2100
Qtail Req-100-2 -> 현재 포인터-3000, 다음 포인터-3100
Qtail Req-100-3 -> 현재 포인터-4000, 다음 포인터-4100
Qtail Req-100-4 -> 현재 포인터-1100, 다음 포인터-1200
Qtail Req-100-5 -> 현재 포인터-2100, 다음 포인터-2200
Qtail Req-100-6 -> 현재 포인터-3100, 다음 포인터-3200
Qtail Req-100-7 -> 현재 포인터-4100, 다음 포인터-4200
Qtail Req-100-8 -> 현재 포인터-1200, 다음 포인터-1300
도 7은 도 2의 버퍼 관리자 동작에 의해 수행된 예시적인 프로세스를 도시하는 흐름도이다. 또한, 도 7의 흐름도의 단계들에 따라 큐 100에 대한 연속하는 패킷 트래픽이 표현된다. 단계 705에서, 데이터와 연관된 트래픽의 목적지 포트 및 클래스에 기초하여 큐가 선택된다. 단계 710에서, (도 1의) 인큐잉 모듈 (120) 은 (도 1의) 버퍼 메모리 (150) 내에 데이터를 저장하기 위해 (도 1의) 버퍼 관리자 (130) 에 포인터를 요청한다. 예를 들어, 도 6a 및 도 6b의 식별된 큐 100에 대하여, 인큐잉 모듈은 큐 100에 대한 포인터 위치들을 요청할 것이다. 단계 715에서, 버퍼 관리자는 식별된 큐에 대한 큐 테일 포인터 메모리를 검사하고 관리자의 위치로 현재 포인터를 설정한다. 부가적으로, 버퍼 관리자는 프리 포인터 메모리로부터 추가로 하나의 프리 포인터를 팝업 (pops up) 하고 이를 큐 테일 포인터 메모리 내에 기록하고 또한 이 프리 포인터를 인큐잉 모듈로의 다음 포인터로서 식별한다.
단계 720에서, 인큐잉 모듈은 토큰 및 버퍼 메모리 내의 다음 위치를 기록하기 위해 현재 포인터를 사용한다. 인큐잉 모듈은 표 1.1에 도시된 바와 같이 토큰을 기록하기 위해 위치 1000 및 다음 메모리 위치로서 1100을 사용한다. 부가적으로, 다음 큐 테일 요청 100-1에 대해, 인큐잉 모듈은 메모리 위치 3000에서 현재 포인터를 사용하고 다음 포인터는 메모리 위치 3100에 있다. 표 1.1은 후속하는 큐 테일 요청들 및 현재 포인터 위치 및 다음 포인터 위치를 예시한다.
단계 725에서, 큐가 디큐잉되도록 스케줄링된 후, 디큐잉 모듈은 버퍼 관리자로부터 큐에 대한 큐 헤드 포인터를 요청한다. 예로서, 일단 큐 100이 디큐잉되도록 스케줄링되면, 디큐잉 모듈은 버퍼 관리자로 전송될 큐 100에 대한 헤드 포인터 1000을 요청한다. 표 1.2에 도시된 바와 같이, 단계 730에서, 버퍼 관리자는 요청된 큐에 대한 헤드 포인터 값 1000을 할당한다.
단계 735는 디큐잉 모듈이 패킷 및 버퍼 메모리로부터의 다음 포인터를 판독하고 이어서 헤드 포인터 업데이트로서 다음 포인터를 버퍼 관리자에게 포워딩할 때 디큐잉 모듈 동작을 예시한다. 디큐잉 모듈은 버퍼 내의 위치 1000으로부터 판독되고, 버퍼로부터 토큰 및 다음 포인터 1100을 수신한다. 디큐잉 모듈은 큐 100에 대한 헤드 포인터 업데이트 요청으로서 1100을 전송한다. 포인터 1000은 이제 프리 포인터이고 디큐잉 모듈은 프리 포인터를 버퍼 관리자에게 포워딩한다. (이하의 디큐잉 동작에 대한 표 1.2 참조).
표 1.2
디큐잉 및 버퍼 관리자 상호작용
Head Req-100 -> 헤드 포인터-1000
Head update-1100
Head Req-101 -> 헤드 포인터-2000
Head update-2100
Head Req-102 -> 헤드 포인터-3000
Head update-3100
Head Req-103 -> 헤드 포인터-4000
Head update-4100
Head Req-100 -> 헤드 포인터-1100
Head update-1200
Head Req-101 -> 헤드 포인터-2100
Head update-2200
Head Req-102 -> 헤드 포인터-3100
Head update-3200
Head Req-103 -> 헤드 포인터-4100
Head update-4200
Head Req-100 -> 헤드 포인터-1200
Head update-1300
디큐잉 모듈이 큐 100의 스케줄링된 디큐잉 동작을 시작할 때, 동작은 Q0 각각이 다수의 큐들에 걸쳐 동일하게 분할된 4 개의 클록 사이클들에서 스케줄러에 의해 수행된다. 스케줄러는 스케줄러 요청들에 앞서 디큐잉 동작을 수행하도록, 큐 100, 101, 102, 및 103의 헤드 포인터 정보를 순차적으로 요청한다. 큐를 디큐잉할 때 전체 Q0은 스케줄링된 큐 100 내에서 스케줄러에 의해 수행되고, 4 개의 클록들 마다 Q0이 4 개의 상이한 병렬 링크-리스트들에 걸쳐 함께 링크된 데이터에 액세스하는 것으로 보여질 수 있다. 그 결과, 개별 병렬 링크-리스트마다, 디큐잉 동작은 일 사이클에서 최대 16 클록들의 속도로 발생할 수 있다. 쓰루풋 및 레이턴시 제한 요건에 따라 병렬 링크-리스트 디큐잉은 4에서 8 이상으로 증가할 수 있다.
도 8은 도 2와 유사한 블록도이지만, 인큐잉 동작 및 디큐잉 동작의 단계들을 예시한다. 도 8에서, 인커밍 토큰들 (incoming tokens) (1) 이 수신되어 인큐잉 모듈 (820) 에 의해 분류된다. 다음에, 출력 (3) 이 버퍼 메모리 (830) 로부터 새로운 큐 테일 포인터를 요청한다. 병렬 링크-리스트 (2) 에 대한 큐 테일 메모리는 버퍼 메모리 (850) 로의 기록 동작을 위해 메모리로 전송된다 (4). 토큰 데이터가 버퍼 메모리 (850) 내에 기록된다. 스케줄러 (840) 는 Q(Q0) 를 선택하고 (5) 병렬 링크-리스트에 대해 큐 헤드 포인터를 요청한다 (6). 버퍼 관리자는 큐 헤드 포인터를 판독하고 이 헤드 포인터를 업데이트된 헤드 포인터로서 사용하고 이어서 업데이트된 헤드 포인터를 병렬 링크-리스트에 기록한다.
도 9는 본 개시의 실시예에 따라 인커밍 토큰이 수신되고 Q0로 분류될 때 버퍼 관리자에 의해 수행된 예시적인 프로세스의 예시이다. 새로운 큐 테일 포인터에 대한 요청 (3) 이 큐 테일 포인터 모듈 (920) 로 전송된다. 병렬 링크-리스트에 대한 큐 테일 포인터들은 각각의 요청으로 생성되고 토큰이 수신될 때 버퍼 메모리로의 토큰의 기록 동작이 수행된다. 스케줄러 동작 동안, Q0가 선택될 때, 큐 헤드 포인터 모듈 (930) 로 전송될 큐 헤드 포인터에 대한 요청 (6) 이 이루어진다. 병렬 링크-리스트에 대한 큐 헤드 포인터들은 병렬 링크-리스트들 각각으로부터 전송된다. 요청된 큐 헤드 포인터가 판독되고 헤드 포인터와 연관된 토큰은 큐 업데이트된 헤드 포인터 및 현재 프리 오래된 포인터와 함께 포워딩 아웃 (8) 된다.
이에 따라, 본 개시의 예시적인 실시예들이 도시되었지만, 4 개의 병렬 서브-링크 리스트를 함께 링크함으로써, 인큐잉 및 디큐잉 동작, 판독 기록 동작들이 선택된 Q0에 대해 소정의 N 기간에서 최소화된다. 또한, 본 개시에 따른 라우팅 프로세스는 인큐잉 및 디큐잉 동작들에 대한 제한된 버퍼 공간 할당을 위해 증가된 쓰루풋을 제공하여, 버퍼 관리자에 의한 보틀넥 동작 단계에서 경험되는 레이턴시 시간을 감소시켜 유리하다. 큐 할당들을 인큐잉 및 디큐잉을 위해 다수의 가상 서브-큐 리스트들로 분할함으로써, 데이터의 토큰들은 이러한 인큐잉 및 디큐잉 동작들에서 발생된 전체 레이턴시 시간들을 감소시키면서 물리적인 버퍼 구성들에 상당한 변화 없이 보다 빠르게 검색되고 송신될 수 있다.
라우터 내의 회로는 ASIC (application specific integrated circuits), ASSP들 (application-specific standard parts), SoC (System-on-Chip), FPGA들 (field-programmable gate arrays) 등으로 구현될 수 있다. 또한, 라우터는 당업계에 공지된 다양한 다른 기능들 및 컴포넌트들을 포함할 수도 있다는 것이 이해될 것이다.
특정한 바람직한 실시예들 및 방법들이 본 명세서에 개시되었지만, 이러한 실시예들 및 방법들의 변화들 및 수정들이 본 개시의 정신 및 범위를 벗어나지 않고 이루어질 수 있다는 것이 당업자에게 이해될 것이다. 본 개시는 첨부된 청구항들 및 적용가능한 법의 규칙들 및 원리에 의해 요청된 정도로만 제한되도록 의도된다.

Claims (25)

  1. 데이터를 메모리 버퍼에 큐잉 (queuing) 하는 방법으로서,
    복수의 큐들로부터 큐를 선택하는 단계;
    상기 선택된 큐로부터 데이터의 토큰을 수신하는 단계;
    상기 데이터의 토큰을 저장하기 위해, 어드레스들 및 버퍼 관리자에 의해 할당된 어드레스들에 대한 상기 버퍼 관리자로부터의 포인터들을, 프로세서에 의해, 요청하는 단계;
    상기 버퍼 관리자에 의해 메모리 리스트에 액세스하고, 어드레스들 및 상기 메모리 리스트 내의 상기 할당된 어드레스들로의 포인터들을 생성하는 단계로서, 상기 액세스된 메모리 리스트는 추가 어드레스 할당을 위해 복수의 병렬로 링크된 메모리 리스트들을 포함하는, 상기 메모리 리스트에 액세스하고 어드레스들 및 포인터들을 생성하는 단계;
    상기 액세스된 메모리 리스트 내에 상기 할당된 어드레스들에 대한 상기 포인터들을 기록하는 단계로서, 상기 포인터들은 상기 할당된 어드레스들을 함께 링크하는, 상기 포인터들을 기록하는 단계; 및
    상기 선택된 큐로부터 데이터의 후속하는 토큰들의 수신 시, 추가 어드레스 할당들을 위해 다른 메모리 리스트들로 마이그레이션시키고 (migrating), 상기 다른 메모리 리스트들 내에서 상기 할당된 어드레스들을 함께 링크하는 추가 포인터들을 생성하는 단계를 포함하는, 데이터를 메모리 버퍼에 큐잉하는 방법.
  2. 제 1 항에 있어서,
    상기 복수의 병렬로 링크된 메모리 리스트들은 제 1 메모리 리스트, 제 2 메모리 리스트, 제 3 메모리 리스트, 및 제 4 메모리 리스트를 포함하는, 데이터를 메모리 버퍼에 큐잉하는 방법.
  3. 제 2 항에 있어서,
    상기 데이터의 토큰들의 복수의 할당된 어드레스들은 상기 병렬로 링크된 메모리 리스트들에 걸친 포인터들에 의해 링크되는, 데이터를 메모리 버퍼에 큐잉하는 방법.
  4. 제 3 항에 있어서,
    상기 복수의 할당된 어드레스들은 상기 버퍼 관리자에 의해 생성된 테일 포인터 (tail pointer) 및 헤드 포인터 (head pointer) 에 의해 링크되는, 데이터를 메모리 버퍼에 큐잉하는 방법.
  5. 제 1 항에 있어서,
    상기 프로세서는 상기 병렬로 링크된 메모리 리스트들의 상기 할당된 어드레스들 내로 데이터의 토큰들을 인큐잉 (enqueuing) 하기 위한 인큐잉 프로세서 및 상기 병렬로 링크된 메모리 리스트들의 상기 할당된 어드레스들로부터 상기 데이터의 토큰들을 디큐잉 (dequeuing) 하기 위한 디큐잉 프로세서를 포함하는, 데이터를 메모리 버퍼에 큐잉하는 방법.
  6. 제 5 항에 있어서,
    상기 인큐잉 프로세서는 복수의 데이터의 토큰들을 인큐잉하기 위한 상기 버퍼 관리자로의 요청들을 생성하도록 구성되고,
    상기 복수의 데이터의 토큰들은 상기 복수의 메모리 리스트들에 걸쳐 포인터들에 의해 링크된 어드레스들을 갖는, 데이터를 메모리 버퍼에 큐잉하는 방법.
  7. 제 5 항에 있어서,
    상기 디큐잉 프로세서는 복수의 데이터의 토큰들을 디큐잉하기 위한 상기 버퍼 관리자로의 요청들을 생성하도록 구성되고,
    상기 복수의 데이터의 토큰들은 상기 복수의 메모리 리스트들에 걸쳐 포인터들에 의해 링크된 어드레스들을 갖는, 데이터를 메모리 버퍼에 큐잉하는 방법.
  8. 제 1 항에 있어서,
    상기 추가 어드레스 할당을 위한 상기 복수의 병렬로 링크된 메모리 리스트들은 어드레스 가용성에 따라 동적으로 덧붙여지는 (populated), 데이터를 메모리 버퍼에 큐잉하는 방법.
  9. 제 8 항에 있어서,
    상기 병렬로 링크된 메모리 리스트들을 덧붙이는 것은 모든 요청된 어드레스들이 할당될 때까지 상기 병렬로 링크된 메모리 리스트들 각각에 걸쳐서 라운드 로빈 방식으로 연속적으로 수행되는, 데이터를 메모리 버퍼에 큐잉하는 방법.
  10. 적어도 하나의 프로세서 및 메모리 버퍼를 포함하고, 상기 메모리 버퍼에 데이터를 큐잉하기 위한 장치로서,
    상기 적어도 하나의 프로세서는,
    복수의 큐들로부터 큐를 선택하는 단계;
    상기 선택된 큐로부터 데이터의 토큰을 수신하는 단계;
    상기 적어도 하나의 프로세서 내에 위치되고, 어드레스들 및 버퍼 관리자에 의해 할당되는 어드레스들에 대한 포인터들의 요청들에 대해 응답하는, 상기 버퍼 관리자를 통해 상기 데이터의 토큰을 저장하는 단계;
    메모리 리스트에 액세스하고, 어드레스들 및 상기 메모리 리스트 내의 상기 할당된 어드레스들에 대한 포인터들을 생성하는 단계로서, 상기 액세스된 메모리 리스트는 추가 어드레스 할당을 위한 복수의 병렬로 링크된 메모리 리스트들을 포함하는, 상기 메모리 리스트에 액세스하고, 어드레스들 및 포인터들을 생성하는 단계;
    상기 할당된 어드레스들에 대한 상기 포인터들을 상기 액세스된 메모리 리스트 내에 기록하는 단계로서, 상기 포인터들은 할당된 어드레스들을 함께 링크하는, 상기 기록하는 단계; 및
    상기 선택된 큐로부터 데이터의 후속하는 토큰들의 수신 시 추가 어드레스들 할당을 위해 다른 메모리 리스트들로 마이그레이션시키고 상기 다른 메모리 리스트들 내에 상기 할당된 어드레스들을 함께 링크하는 추가 포인터들을 생성하는 단계를 수행하도록 구성되는, 메모리 버퍼에 데이터를 큐잉하기 위한 장치.
  11. 제 10 항에 있어서,
    상기 복수의 병렬로 링크된 메모리 리스트들은 제 1 메모리 리스트, 제 2 메모리 리스트, 제 3 메모리 리스트, 및 제 4 메모리 리스트를 포함하는, 메모리 버퍼에 데이터를 큐잉하기 위한 장치.
  12. 제 11 항에 있어서,
    상기 데이터의 토큰의 복수의 할당된 어드레스들은 상기 병렬로 링크된 메모리 리스트들에 걸친 포인터들에 의해 링크되는, 메모리 버퍼에 데이터를 큐잉하기 위한 장치.
  13. 제 12 항에 있어서,
    상기 복수의 할당된 어드레스들은 상기 버퍼 관리자에 의해 생성된 테일 포인터 및 헤드 포인터에 의해 링크되는, 메모리 버퍼에 데이터를 큐잉하기 위한 장치.
  14. 제 10 항에 있어서,
    상기 적어도 하나의 프로세서는 상기 병렬로 링크된 메모리 리스트들의 상기 할당된 어드레스들 내로 데이터의 토큰들을 인큐잉하기 위한 인큐잉 프로세서 및 상기 병렬로 링크된 메모리 리스트들의 상기 할당된 어드레스들로부터 상기 데이터의 토큰들을 디큐잉하기 위한 디큐잉 프로세서를 더 포함하는, 메모리 버퍼에 데이터를 큐잉하기 위한 장치.
  15. 제 14 항에 있어서,
    상기 인큐잉 프로세서는 복수의 데이터의 토큰들을 인큐잉하기 위한 상기 버퍼 관리자로의 요청들을 생성하도록 구성되고,
    상기 복수의 데이터의 토큰들은 상기 복수의 메모리 리스트들에 걸쳐 포인터들에 의해 링크된 어드레스들을 갖는, 메모리 버퍼에 데이터를 큐잉하기 위한 장치.
  16. 제 15 항에 있어서,
    상기 디큐잉 프로세서는 복수의 데이터의 토큰들을 디큐잉하기 위한 상기 버퍼 관리자로의 요청들을 생성하도록 구성되고,
    상기 복수의 데이터의 토큰들은 상기 복수의 메모리 리스트들에 걸쳐 포인터들에 의해 링크된 어드레스들을 갖는, 메모리 버퍼에 데이터를 큐잉하기 위한 장치.
  17. 제 10 항에 있어서,
    상기 추가 어드레스 할당을 위한 상기 복수의 병렬로 링크된 메모리 리스트들은 어드레스 가용성에 따라 동적으로 덧붙여지는, 메모리 버퍼에 데이터를 큐잉하기 위한 장치.
  18. 제 10 항에 있어서,
    상기 병렬로 링크된 메모리 리스트들은 모든 요청된 어드레스들이 할당될 때까지 상기 병렬로 링크된 메모리 리스트들 각각에 걸쳐서 라운드 로빈 방식으로 연속적으로 덧붙여지는, 메모리 버퍼에 데이터를 큐잉하기 위한 장치.
  19. 시스템으로서,
    적어도 하나의 프로세서; 및
    실행될 때, 데이터 패킷들을 큐잉하기 위한 방법을 수행하는 인스트럭션들을 포함하는 적어도 하나의 컴퓨터-판독가능 저장 디바이스를 포함하고,
    상기 데이터 패킷들을 큐잉하기 위한 방법은,
    복수의 큐들로부터 큐를 선택하는 단계;
    상기 선택된 큐로부터 데이터의 토큰을 수신하는 단계;
    상기 데이터의 토큰을 저장하기 위해, 어드레스들 및 버퍼 관리자에 의해 할당된 어드레스들에 대한 상기 버퍼 관리자로부터의 포인터들을, 프로세서에 의해, 요청하는 단계;
    상기 버퍼 관리자에 의해 메모리 리스트에 액세스하고, 어드레스들 및 상기 메모리 리스트 내의 상기 할당된 어드레스들로의 포인터들을 생성하는 단계로서, 상기 액세스된 메모리 리스트는 추가 어드레스 할당을 위해 복수의 병렬로 링크된 메모리 리스트들을 포함하는, 상기 메모리 리스트에 액세스하고 어드레스들 및 포인터들을 생성하는 단계;
    상기 액세스된 메모리 리스트 내에 상기 할당된 어드레스들에 대한 상기 포인터들을 기록하는 단계로서, 상기 포인터들은 상기 할당된 어드레스들을 함께 링크하는, 상기 포인터들을 기록하는 단계; 및
    상기 선택된 큐로부터 데이터의 후속하는 토큰들의 수신 시, 추가 어드레스 할당들을 위해 다른 메모리 리스트들로 마이그레이션시키고 상기 다른 메모리 리스트들 내에서 상기 할당된 어드레스들을 함께 링크하는 추가 포인터들을 생성하는 단계를 포함하는, 시스템.
  20. 제 19 항에 있어서,
    상기 복수의 병렬로 링크된 메모리 리스트들은 제 1 메모리 리스트, 제 2 메모리 리스트, 제 3 메모리 리스트, 및 제 4 메모리 리스트를 포함하는, 시스템.
  21. 제 19 항에 있어서,
    상기 데이터의 토큰들의 복수의 할당된 어드레스들은 상기 병렬로 링크된 메모리 리스트들에 걸친 포인터들에 의해 링크되는, 시스템.
  22. 제 20 항에 있어서,
    상기 복수의 할당된 어드레스들은 상기 버퍼 관리자에 의해 생성된 테일 포인터 및 헤드 포인터에 의해 링크되는, 시스템.
  23. 제 19 항에 있어서,
    상기 병렬로 링크된 메모리 리스트들의 상기 할당된 어드레스들 내로 데이터의 토큰들을 인큐잉하기 위한 인큐잉 프로세서; 및
    상기 병렬로 링크된 메모리 리스트들의 상기 할당된 어드레스들로부터 상기 데이터의 토큰들을 디큐잉하기 위한 디큐잉 프로세서를 더 포함하는, 시스템.
  24. 제 23 항에 있어서,
    상기 인큐잉 프로세서는 복수의 데이터의 토큰들을 인큐잉하기 위한 상기 버퍼 관리자로의 요청들을 생성하도록 구성되고,
    상기 복수의 데이터의 토큰들은 상기 복수의 메모리 리스트들에 걸쳐 포인터들에 의해 링크된 어드레스들을 갖는, 시스템.
  25. 제 23 항에 있어서,
    상기 디큐잉 프로세서는 복수의 데이터의 토큰들을 디큐잉하기 위한 상기 버퍼 관리자로의 요청들을 생성하도록 구성되고,
    상기 복수의 데이터의 토큰들은 상기 복수의 메모리 리스트들에 걸쳐 포인터들에 의해 링크된 어드레스들을 갖는, 시스템.
KR1020150067244A 2015-03-31 2015-05-14 다수의 링크된 메모리 리스트들을 사용하기 위한 방법 및 장치 KR102082020B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US14/675,450 2015-03-31
US14/675,450 US10484311B2 (en) 2015-03-31 2015-03-31 Method and apparatus for using multiple linked memory lists

Publications (2)

Publication Number Publication Date
KR20160117108A KR20160117108A (ko) 2016-10-10
KR102082020B1 true KR102082020B1 (ko) 2020-02-26

Family

ID=53496442

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020150067244A KR102082020B1 (ko) 2015-03-31 2015-05-14 다수의 링크된 메모리 리스트들을 사용하기 위한 방법 및 장치

Country Status (6)

Country Link
US (2) US10484311B2 (ko)
EP (1) EP3076621A1 (ko)
JP (1) JP6535253B2 (ko)
KR (1) KR102082020B1 (ko)
CN (2) CN106209679B (ko)
TW (1) TWI684344B (ko)

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102984083B (zh) * 2012-11-19 2018-07-24 南京中兴新软件有限责任公司 队列管理方法及装置
US10484311B2 (en) * 2015-03-31 2019-11-19 Cavium, Llc Method and apparatus for using multiple linked memory lists
CN105162724B (zh) * 2015-07-30 2018-06-26 华为技术有限公司 一种数据入队与出队方法及队列管理单元
US10833843B1 (en) * 2015-12-03 2020-11-10 United Services Automobile Association (USAA0 Managing blockchain access
KR101948988B1 (ko) * 2016-12-12 2019-02-15 주식회사 엘지유플러스 캐시를 이용한 파일 실행 방법 및 그 장치
CN112087394A (zh) * 2017-02-17 2020-12-15 华为技术有限公司 一种报文处理方法及装置
US10402320B1 (en) * 2018-02-27 2019-09-03 Oracle International Corporation Verifying the validity of a transition from a current tail template to a new tail template for a fused object
US10901887B2 (en) 2018-05-17 2021-01-26 International Business Machines Corporation Buffered freepointer management memory system
CN112311696B (zh) * 2019-07-26 2022-06-10 瑞昱半导体股份有限公司 网络封包接收装置及方法
US11240151B2 (en) * 2019-12-10 2022-02-01 Juniper Networks, Inc. Combined input and output queue for packet forwarding in network devices
CN113132449A (zh) * 2020-01-16 2021-07-16 京东方科技集团股份有限公司 一种调度方法、装置及设备
US11043250B1 (en) * 2020-08-12 2021-06-22 Taiwan Semiconductor Manufacturing Company Limited Buffer control of multiple memory banks
US11437081B2 (en) 2020-08-12 2022-09-06 Taiwan Semiconductor Manufacturing Company Limited Buffer control of multiple memory banks
CN112559400A (zh) * 2020-12-03 2021-03-26 南京盛科网络有限公司 多级调度装置、方法、网络芯片及计算机可读存储介质
CN116438787A (zh) * 2020-12-22 2023-07-14 华为技术有限公司 低延迟软件定义广域网架构
KR20220109213A (ko) 2021-01-28 2022-08-04 하준우 발코니 문

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050060509A1 (en) 2003-09-11 2005-03-17 International Business Machines Corporation System and method of squeezing memory slabs empty
US20090300320A1 (en) 2008-05-28 2009-12-03 Jing Zhang Processing system with linked-list based prefetch buffer and methods for use therewith
US20110016284A1 (en) * 2009-07-16 2011-01-20 Shreeharsha Balan Memory Management in Network Processors
US20120127860A1 (en) * 2010-11-18 2012-05-24 Cisco Technology, Inc. Dynamic Flow Redistribution for Head of Line Blocking Avoidance

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3117133B2 (ja) 1999-02-16 2000-12-11 日本電気株式会社 フレーム組み立て回路及びフレーム組み立て方法
US7627870B1 (en) * 2001-04-28 2009-12-01 Cisco Technology, Inc. Method and apparatus for a data structure comprising a hierarchy of queues or linked list data structures
US7003597B2 (en) * 2003-07-09 2006-02-21 International Business Machines Corporation Dynamic reallocation of data stored in buffers based on packet size
US7796627B2 (en) 2004-08-12 2010-09-14 Broadcom Corporation Apparatus and system for coupling and decoupling initiator devices to a network using an arbitrated loop without disrupting the network
JP4952642B2 (ja) 2008-04-15 2012-06-13 富士通株式会社 パケット転送装置およびパケット破棄方法
CN101605100B (zh) * 2009-07-15 2012-04-25 华为技术有限公司 队列存储空间的管理方法和设备
JP2011254149A (ja) 2010-05-31 2011-12-15 Nippon Telegr & Teleph Corp <Ntt> 情報処理装置、情報処理方法およびプログラム
CN102437929B (zh) * 2011-12-16 2014-05-07 华为技术有限公司 队列管理中的数据出队方法及装置
US9438527B2 (en) * 2012-05-24 2016-09-06 Marvell World Trade Ltd. Flexible queues in a network switch
US9674086B2 (en) * 2013-11-05 2017-06-06 Cisco Technology, Inc. Work conserving schedular based on ranking
US10484311B2 (en) * 2015-03-31 2019-11-19 Cavium, Llc Method and apparatus for using multiple linked memory lists

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050060509A1 (en) 2003-09-11 2005-03-17 International Business Machines Corporation System and method of squeezing memory slabs empty
US20090300320A1 (en) 2008-05-28 2009-12-03 Jing Zhang Processing system with linked-list based prefetch buffer and methods for use therewith
US20110016284A1 (en) * 2009-07-16 2011-01-20 Shreeharsha Balan Memory Management in Network Processors
US20120127860A1 (en) * 2010-11-18 2012-05-24 Cisco Technology, Inc. Dynamic Flow Redistribution for Head of Line Blocking Avoidance

Also Published As

Publication number Publication date
US20160294735A1 (en) 2016-10-06
US11082366B2 (en) 2021-08-03
TWI684344B (zh) 2020-02-01
EP3076621A1 (en) 2016-10-05
CN106209679B (zh) 2021-05-11
KR20160117108A (ko) 2016-10-10
TW201703475A (zh) 2017-01-16
US20200044989A1 (en) 2020-02-06
JP2016195375A (ja) 2016-11-17
US10484311B2 (en) 2019-11-19
CN106209679A (zh) 2016-12-07
CN113242186A (zh) 2021-08-10
JP6535253B2 (ja) 2019-06-26

Similar Documents

Publication Publication Date Title
KR102082020B1 (ko) 다수의 링크된 메모리 리스트들을 사용하기 위한 방법 및 장치
US7555579B2 (en) Implementing FIFOs in shared memory using linked lists and interleaved linked lists
US7826469B1 (en) Memory utilization in a priority queuing system of a network device
US7676597B2 (en) Handling multiple network transport service levels with hardware and software arbitration
US6795886B1 (en) Interconnect switch method and apparatus
US8155134B2 (en) System-on-chip communication manager
US8514874B2 (en) Thread synchronization in a multi-thread network communications processor architecture
US7529224B2 (en) Scheduler, network processor, and methods for weighted best effort scheduling
US7483429B2 (en) Method and system for flexible network processor scheduler and data flow
WO2006019529A2 (en) Flow lock gathering of packet data
US8910171B2 (en) Thread synchronization in a multi-thread network communications processor architecture
US7142555B2 (en) Method and apparatus for switching data using parallel switching elements
CA2543246C (en) Using ordered locking mechanisms to maintain sequences of items such as packets
US11677676B1 (en) Shared traffic manager
US7433364B2 (en) Method for optimizing queuing performance
US10846225B1 (en) Buffer read optimizations in a network device
US11310164B1 (en) Method and apparatus for resource allocation
US10742558B1 (en) Traffic manager resource sharing
US7583678B1 (en) Methods and apparatus for scheduling entities using a primary scheduling mechanism such as calendar scheduling filled in with entities from a secondary scheduling mechanism
US20060140203A1 (en) System and method for packet queuing
US7376809B2 (en) Systems and methods for multi-frame control blocks

Legal Events

Date Code Title Description
N231 Notification of change of applicant
N231 Notification of change of applicant
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant