KR20110094102A - 자원 단위가 크레디트 단위보다 클 때의 크레디트 관리 - Google Patents

자원 단위가 크레디트 단위보다 클 때의 크레디트 관리 Download PDF

Info

Publication number
KR20110094102A
KR20110094102A KR1020117015050A KR20117015050A KR20110094102A KR 20110094102 A KR20110094102 A KR 20110094102A KR 1020117015050 A KR1020117015050 A KR 1020117015050A KR 20117015050 A KR20117015050 A KR 20117015050A KR 20110094102 A KR20110094102 A KR 20110094102A
Authority
KR
South Korea
Prior art keywords
data
credits
packet
credit
header
Prior art date
Application number
KR1020117015050A
Other languages
English (en)
Other versions
KR101110384B1 (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 KR20110094102A publication Critical patent/KR20110094102A/ko
Application granted granted Critical
Publication of KR101110384B1 publication Critical patent/KR101110384B1/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/38Information transfer, e.g. on bus
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/382Information transfer, e.g. on bus using universal interface adapter
    • G06F13/385Information transfer, e.g. on bus using universal interface adapter for adaptation of a particular data processing system to different peripheral devices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • 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
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/10Flow control; Congestion control
    • 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/39Credit based
    • 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
    • H04L49/00Packet switching elements
    • H04L49/90Buffering arrangements

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Magnetic Resonance Imaging Apparatus (AREA)
  • Oscillators With Electromechanical Resonators (AREA)
  • Two-Way Televisions, Distribution Of Moving Picture Or The Like (AREA)
  • Communication Control (AREA)

Abstract

일 실시예에서, 크레디트 기반 흐름 제어 인터페이스 상에서 수신기는 데이터 크레디트들보다 낮은 단위로 할당되는 버퍼 메모리 내의 더 적은 미사용 데이터 크레디트들을 유발하는 데이터 페이로드가 수신될 때 하나 이상의 데이터 크레디트를 조기에 자유화하도록 구성된다. 다른 실시예에서, 헤더 크레디트들 및 데이터 크레디트들은 실제의 패킷 데이터 페이로드 크기에 기초하여 동적으로 조정된다.

Description

자원 단위가 크레디트 단위보다 클 때의 크레디트 관리{CREDIT MANAGEMENT WHEN RESOURCE GRANULARITY IS LARGER THAN CREDIT GRANULARITY}
본 발명은 디지털 시스템에 관한 것으로서, 구체적으로는 디지털 시스템에서의 인터페이스에 대한 크레디트 기반 흐름 제어 메커니즘(credit-based flow control mechanism)을 위한 크레디트 관리에 관한 것이다.
디지털 시스템들은 종종 시스템 내의 집적 회로들(ICs) 사이에, 시스템들 사이에 그리고 때로는 심지어 IC 내에 흐름 제어형 인터페이스들을 포함한다. 흐름 제어 메커니즘은 일반적으로 수신기에서 버퍼 오버런 또는 기타 데이터 상황들의 손실이 발생하는 것을 방지하기 위해 존재한다. 예를 들어, 일반적인 흐름 제어 메커니즘은 크레디트에 기반이다. 인터페이스상에서 수신기는 다양한 타입의 송신들을 위해 이용할 수 있는, 자기가 가진 크레디트들의 수를 방송할 수 있으며, 송신기는 크레디트들을 기록할 수 있다. 이어서, 송신기는 인터페이스상에서 송신할 수 있으며, 각각의 송신에 대해 크레디트들을 차감할 수 있다. 크레디트들이 소진되면, 송신기는 송신을 멈춰야만 한다. 수신기는 수신된 송신들의 처리를 완료함에 따라 각각의 송신에 의해 소비된 크레디트들을 자유화(free)하고, 자유화된 크레디트들을 다시 송신기에게 되돌려 송신한다.
수신기에 의해 광고(advertising)되는 크레디트들은 일반적으로 송신들을 취급하기 위해 수신기에서 이용 가능한 자원들에 의해 제약될 수 있다. 예를 들어, 수신된 송신들을 저장하기 위해, 일반적으로 버퍼들이 제공된다. 이용 가능한 버퍼들은 각각의 송신 타입에 대해 얼마나 많은 크레디트들이 광고될 수 있는지를 지시한다. 일부 예들에서, 버퍼들은 메모리로서 구현된다. 메모리가 크레디트들과 동일한 단위(granularity)로(또는 더 미세한 단위로) 할당될 수 없는 경우, 메모리 사용이 비효율적이게 된다. 일반적으로, 풀 메모리 그래뉼(full memory granule)까지 임의 양의 데이터를 저장하기 위해서는 상기 풀 메모리 그래뉼이 할당되어야만 한다. 데이터는 메모리 그래뉼보다 적게[또는 메모리 그래뉼의 소정의 비정수배(non-integer multiple)로] 송신될 수 있으므로, 광고될 수 있는 크레디트들의 수는 메모리의 크기에 대한 지식에 기초하여 추측할 수 있는 것보다 적다. 따라서, 인터페이스상에서 얻을 수 있는 대역폭은 메모리가 더 큰 단위로 할당될 수 있는 경우에 가능한 것보다 작다.
일 실시예에서, 장치는 버퍼 메모리에 결합된 수신기를 포함한다. 수신기는 수신기가 사용중에 결합되는 인터페이스에 대한 흐름 제어 크레디트들을 관리하도록 구성된 크레디트 관리 유닛을 포함한다. 인터페이스 상에서 수신된 각각의 패킷은 패킷 헤더 및 옵션으로서 패킷 데이터를 포함한다. 패킷 데이터는 패킷 데이터의 크기에 의존하는 흐름 제어 크레디트들 내의 데이터 크레디트들에 관하여 측정되며, 각각의 데이터 크레디트는 일정한 데이터 바이트 수를 나타낸다. 버퍼 메모리는 수신기에 의해 인터페이스 상에서 수신되는 패킷들에 대응하는 패킷 헤더들 및 패킷 데이터를 저장하도록 구성되며, 버퍼 메모리는 데이터 크레디트의 크기의 N배인 버퍼 유닛들로 수신기에 의해 할당될 수 있고, 여기서 N은 1보다 큰 정수이다. 데이터 크레디트들의 총 수는 패킷 데이터를 저장하는 데 이용 가능한 버퍼 메모리 내의 버퍼 유닛들의 수의 N배와 동일하며, 크레디트 관리 유닛은 패킷 데이터가 버퍼 유닛을 채우지 않는 경우에 사용하지 못하는 데이터 크레디트들의 최대 수에 기초하여 그리고 동시에 비행하는 것이 허가되는 패킷들의 수에 더 기초하여 복수의 전체 데이터 크레디트를 보류하도록 구성된다. 크레디트 관리 유닛은 사용 가능하지 않은 데이터 크레디트들의 최대 수보다 적게 유발하는 주어진 패킷의 패킷 데이터의 수신에 응답하여 하나 이상의 데이터 크레디트를 자유화하도록 구성된다. 크레디트 관리 유닛은 주어진 패킷이 소비되기 전에 하나 이상의 데이터 크레디트를 자유화하도록 구성된다. 대응하는 방법도 고려된다.
일 실시예에서, 장치는 버퍼 메모리에 결합된 수신기를 포함한다. 수신기는 수신기가 사용중에 결합되는 인터페이스에 대한 흐름 제어 크레디트들을 관리하도록 구성된 크레디트 관리 유닛을 포함한다. 인터페이스 상에서 수신된 각각의 패킷은 헤더 및 옵션으로서 데이터를 포함한다. 헤더는 인터페이스 상의 흐름 제어를 위해 하나 이상의 헤더 크레디트들에 관하여 측정되며, 데이터는 인터페이스 상의 흐름 제어를 위해 하나 이상의 데이터 크레디트들에 관하여 측정된다. 각각의 데이터 크레디트는 일정한 데이터 바이트 수를 나타낸다. 버퍼 메모리는 수신기에 의해 인터페이스 상에서 수신되는 패킷들에 대응하는 패킷 헤더들 및 패킷 데이터를 저장하도록 구성된다. 크레디트 관리 유닛은 하나 이상의 수신된 패킷 내의 패킷 데이터의 크기에 응답하여 패킷 헤더들을 저장하는 데 사용되는 버퍼 메모리의 제1 양 및 패킷 데이터를 저장하는 데 사용되는 버퍼 메모리의 제2 양을 동적으로 조정하도록 구성되며, 크레디트 관리 유닛은 동적 조정에 응답하여 인터페이스 상에서 송신기에 대한 데이터 크레디트들 및 헤더 크레디트들을 자유화하도록 구성된다.
아래의 상세한 설명은 첨부 도면들을 참조하며, 이제 도면들이 간단히 설명된다.
도 1은 디지털 시스템의 일 실시예의 블록도.
도 2는 메모리 버퍼 할당의 일 실시예의 블록도.
도 3은 도 1에 도시된 수신기의 일 실시예의 블록도.
도 4는 도 1에 도시된 시스템의 초기화 동안에 도 3에 도시된 수신기의 일 실시예의 동작을 나타내는 흐름도.
도 5는 도 1에 도시된 시스템에서 패킷의 수신에 응답하여 도 3에 도시된 수신기의 일 실시예의 동작을 나타내는 흐름도.
도 6은 도 1에 도시된 시스템에서 타깃에 의한 패킷의 소비에 응답하여 도 3에 도시된 수신기의 일 실시예의 동작을 나타내는 흐름도.
도 7은 도 1에 도시된 수신기의 다른 실시예의 블록도.
도 8은 도 1에 도시된 시스템의 초기화 동안에 도 7에 도시된 수신기의 일 실시예의 추가적인 동작을 나타내는 흐름도.
도 9는 도 1에 도시된 시스템에서 패킷의 수신에 응답하여 도 7에 도시된 수신기의 일 실시예의 추가 동작을 나타내는 흐름도.
도 10 및 11은 도 7에 도시된 수신기의 일 실시예의 추가 상세를 나타내는 의사 코드의 도면.
본 발명은 다양한 개량들 및 대안 형태들이 가능하지만, 본 발명의 특정 실시예들이 도면들에 예시적으로 도시되고, 본 명세서에서 상세히 설명된다. 그러나, 도면들 및 그에 대한 상세한 설명은 본 발명을 개시되는 특정 형태로 한정하는 것을 의도하는 것이 아니라, 첨부된 청구항들에 의해 정의되는 바와 같은 본 발명의 사상 및 범위 내에 속하는 모든 개량들, 균등물들 및 대안들을 커버하는 것을 의도한다는 것을 이해해야 한다. 본 명세서에서 사용되는 표제들은 체계화를 위한 것일 뿐, 설명의 범위를 한정하는 데 사용하고자 하는 의도는 없다. 본 출원 전반에서 사용될 때, "~일 수 있다(may)"라는 단어는 필수의 의미(즉, 해야 한다(must)라는 의미)가 아니라 허가의 의미(즉, 가능성이 있다는 의미)로 사용된다. 마찬가지로, "포함한다", "포함하는"이라는 단어들은 포함하지만 그에 한정되지 않는다는 것을 의미한다.
이제, 도 1을 참조하면, 시스템(10)의 일 실시예의 블록도가 도시되어 있다. 도시된 실시예에서, 시스템(10)은 송신기(12), 수신기(14), 버퍼 메모리(16) 및 옵션으로서 패킷 타깃(18)을 포함한다. 송신기는 인터페이스(20)에 결합되며, 수신기(14)도 인터페이스에 결합된다. 버퍼 메모리(16)는 수신기(14) 및 타깃(18)에 결합된다.
송신기(12)는 수신기(14)가 현재 얼마나 많은 패킷 헤더 및 패킷 데이터 트래픽을 수신할 수 있는지를 나타내는 헤더 크레디트들 및 데이터 크레디트들을 유지하도록 구성된다. 예를 들어, 도 1에서, 송신기(12)는 헤더 크레디트 레지스터(22) 및 데이터 크레디트 레지스터(24)를 포함할 수 있다. 시스템(10)의 초기화 동안에, 그리고 아마도 인터페이스(20)가 리셋되는 동작중의 다른 시점들에, 수신기(14)는 송신기(12)로 광고할 헤더 크레디트들 및 데이터 크레디트들의 수를 결정할 수 있다. 송신기(12)는 광고된 크레디트들을 갖도록 레지스터들(22, 24)을 초기화할 수 있다. 송신기(12)가 패킷 헤더들 및 패킷 데이터를 전송함에 따라, 송신기(12)는 전송된 헤더들 및 데이터에 의해 소비된 크레디트들을 차감할 수 있다. 수신기(14)는 자유화된 크레디트들을 다시 송신기(12)로 전송할 수 있으며, 송신기는 자유화된 크레디트들을 레지스터들(22, 24)에 추가할 수 있다. 따라서, 임의의 주어진 시점에서, 송신기(12)는 레지스터들(22, 24) 내의 크레디트들에 응답하여 인터페이스(20)를 통해 얼마나 많은 정보가 전송되는지를 제어할 수 있다. 예를 들어, 충분한 크레디트들이 주어진 송신에 이용될 수 없는 경우, 송신기(12)는 필요한 수의 크레디트들이 이용가능해질 때까지 송신을 지연시킬 수 있다.
일반적으로, 크레디트들의 광고는 수신기(14)가 이용가능한 크레디트들의 수를 송신기(12)에 알리기 위한 임의의 메커니즘을 지칭한다. 마찬가지로, 크레디트들의 자유화는 인터페이스(20) 상에서의 송신을 통해 소비된 크레디트들이 송신기(12)로 반환될 수 있음을 결정하기 위한 임의의 메커니즘 및 이들을 반환하기 위한 메커니즘을 지칭할 수 있다. 광고 및 자유화를 수행하기 위한 메커니즘들은 인터페이스(20)의 정의에 기초하여 구현에 고유하지만, 일반적으로 수신기(14)에서 송신기(12)로의 인터페이스(20)상에서의 송신을 포함할 수 있다. 예를 들어, 자유화된 크레디트들을 전송하는 패킷이 정의될 수 있거나, 모든 패킷들에 사용되는 헤더들 내의 필드들이 자유화된 크레디트들을 포함할 수 있다. 자유화된 크레디트들을 전송하는 패킷들은 원하는 크레디트들의 수를 광고하기 위해 초기화 동안에 전송될 수 있다. 패킷들의 필드들에서 전송될 수 있는 것보다 많은 크레디트들이 광고되는 경우, 다수의 패킷들이 전송될 수 있다.
일반적으로, 인터페이스(20) 상에서 전송되는 패킷들은 (패킷의 타입을 정의하고, 다른 제어 정보를 제공할 수 있는) 헤더를 포함할 수 있으며, 옵션으로서 데이터(또는 "페이로드")를 포함할 수 있다. 헤더는 크기가 일정할 수 있으며, 따라서 각각의 헤더는 송신기(12)에 의해 전송될 때 하나의 헤더 크레디트를 소비할 수 있다. 다른 실시예들은 다양한 크기의 헤더들을 구현할 수 있으며, 주어진 패킷에 필요한 헤더 크레디트들의 수는 그의 헤더의 크기에 의존할 수 있다. 데이터 페이로드는 크기가 가변적일 수 있다. 따라서, 데이터 크레디트는 ("데이터 유닛"으로 지칭되는) 일정한 데이터 바이트 수를 나타내도록 정의될 수 있으며, 주어진 패킷에 필요한 데이터 크레디트들의 수는 페이로드의 크기를 데이터 크레디트의 크기로 나눈 값일 수 있다. 데이터 크레디트의 크기는 인터페이스(20) 정의의 일부일 수 있다. 예를 들어, 일 실시예에서, 인터페이스(20)는 주변 컴포넌트 상호접속 익스프레스(PCIe) 인터페이스일 수 있으며, 데이터 크레디트는 16 바이트를 나타낼 수 있다.
수신기(14)는 크레디트 관리 유닛(26)을 포함하며, 송신기(12)에 대한 크레디트들을 관리하기 위해 크레디트 관리 유닛(26)에 의해 사용되는 값들을 저장하기 위한 하나 이상의 크레디트 레지스터(28)를 포함할 수 있다. 다양한 실시예들의 추가 상세들이 아래에 제공된다. 수신기(14)는 인터페이스(20) 상에서 통신하기 위한, 버퍼 메모리(16)와 통신하기 위한, 기타 등등을 위한 다양한 다른 회로도 포함할 수 있다. 게다가, 도 1은 송신기(12)가 수신기(14)로 전송하는 것을 도시하지만, 통신은 인터페이스(20) 상에서 양방향일 수 있다. 즉, 송신기 기능이 인터페이스(20)의 양쪽에 존재할 수 있으며, 수신기 기능 또한 양쪽에 존재할 수 있다. 설명의 간소화를 위해, 본 설명은 송신기(12)가 수신기(14)로 전송하는 것을 언급하지만, 패킷들은 도 1의 수신기(14) 측에서 송신기(12) 측으로 전송될 수 있다는 것을 이해한다.
도시된 실시예에서, 인터페이스(20)는 한 쌍의 단방향 점대점 링크들을 포함할 수 있다. 패킷들은 링크들상에서 전송될 수 있다. 다른 실시예들에서, 인터페이스(20)는 다른 정의들을 가질 수 있다. 예를 들어, 인터페이스(20)는 어드레스 및 데이터 송신들을 갖는 버스일 수 있다. 어드레스 송신들은 (헤더 크레디트들과 유사한) 어드레스 크레디트들에 의해 흐름이 제어될 수 있으며, 데이터 송신들은 데이터 크레디트들에 의해 흐름이 제어될 수 있다. 인터페이스(20)의 정의에 기초하여, 임의 세트의 크레디트들이 사용될 수 있다. 일반적으로, 크레디트들의 세트들은 흐름 제어 크레디트들로서 지칭될 수 있다.
타깃(18)은 일반적으로 버퍼 메모리(16)로부터 패킷들을 소비하는 임의의 회로를 지칭할 수 있다. 타깃(18)은 수신기(14)를 포함하는 장치(예를 들어, IC)의 일부이거나, 독립적일 수 있다. 예를 들어, 수신기(14)는 패킷들을 수신하고 이들을 다른 인터페이스 상에서 전송하는 스위치일 수 있으며, 이 경우에 버퍼 메모리(16)로부터의 패킷의 소비는 다른 인터페이스상에서의 패킷의 전송일 수 있다.
버퍼 메모리(16)는 수신기(14)가 액세스할 수 있는 임의 타입의 메모리를 포함할 수 있다. 예를 들어, 버퍼 메모리(16)는 동적 랜덤 액세스 메모리(DRAM)에 인터페이스하도록 구성된 메모리 제어기에 결합된 DRAM과 같은 시스템 메모리를 포함할 수 있다. 예를 들어, 단일 인라인 메모리 모듈들(SIMMs), 듀얼 인라인 메모리 모듈들(DIMMs) 등과 같은 다양한 DRAM 메모리 모듈들이 지원될 수 있다. 임의의 DRAM 기술(예를 들어, 동기 DRAM(SDRAM), 듀얼 데이터 레이트(DDR) SDRAM, DDR2 SDRAM, DDR3 SDRAM, 램버스 DRAM(RDRAM) 등)이 이용될 수 있다. 이러한 실시예들에서, 수신기(14)는 메모리(16)에 패킷 헤더들 및 패킷 데이터를 기입하기 위해 메모리 제어기에 대한 기입 명령들을 생성할 수 있다. 타깃(18)은 패킷 헤더들 및 패킷 데이터를 판독하기 위해 메모리 제어기에 대한 판독 명령들을 생성할 수 있다. 다른 실시예들에서, 버퍼 메모리(16)는 수신기(14)에 전용이거나, 수신기(14)와 시스템(10) 내의 하나 이상의 다른 수신기 및/또는 송신기에 의해 공유되는 메모리를 포함할 수 있다. 버퍼 메모리(16)는 예를 들어 캐시 메모리 또는 다른 전용 버퍼 메모리를 포함할 수 있다. 버퍼 메모리(16)는 일부 실시예들에서 정적 RAM(SRAM)을 포함할 수 있다.
버퍼 메모리(16)는 패킷 헤더들 및 패킷 데이터를 저장하도록 할당될 수 있다. 구체적으로, 버퍼 메모리(16)는 데이터 크레디트들(및/또는 일부 실시예들에서 헤더 크레디트들)보다 낮은 단위로 할당될 수 있다. 버퍼 메모리(16)는 본 명세서에서 버퍼 유닛들(BU들)로서 지칭되는 그래뉼들로 할당될 수 있다. 따라서, 도 1에는, 헤더 BU들(30) 및 데이터 BU들(32)이 도시되어 있다. 본 설명의 나머지는 헤더 크레디트들이 BU들과 동일한 단위를 갖고, 데이터 크레디트들이 단위가 더 미세한 실시예를 이용할 수 있다. 그러나, 헤더 크레디트들이 BU들보다 단위가 미세한 실시예들도 고려되며, 데이터 크레디트 메커니즘과 유사한 메커니즘이 헤더 크레디트들에 대해 이용될 수 있다.
BU 단위가 DU 단위보다 낮으므로, 버퍼 메모리(16)는 데이터를 저장하기 위해 충분히 이용되지 못할 수 있다. 도 2는 BU가 DU의 크기의 4배인 경우에 충분히 이용되지 못하는 예의 블록도이다. 다른 실시예들은 일반적으로 DU의 크기의 N배인 BU를 포함할 수 있으며, 여기서 N은 1보다 큰 정수이다. 일부 실시예들에서, N은 2의 거듭제곱일 수 있다.
일반적으로, 다양한 패킷들의 데이터 페이로드는 0개 내지 M개의 DU 사이일 수 있으며, 여기서 M은 0보다 큰 정수이다. M의 크기는 구현에 의존할 수 있으며, 인터페이스(20)의 정의에 의존할 수 있다(예를 들어, 인터페이스(20)는 패킷당 최대 데이터 페이로드 크기를 정의할 수 있다. 그러나, M은 N에 대한 임의의 특정 관계를 가질 필요는 없다. 즉, M/N은 주어진 패킷에 대해 정수일 필요는 없다.
도 2는 우측에 BU들을 도시하며, 점선들은 이 예에서 저장된 데이터 페이로드들로 안으로 연장한다. 좌측의 실선들은 DU들을 나타낸다. 전술한 바와 같이, 이 예에서는 BU당 4개의 DU가 존재한다. 도 2에는 5개의 DU 페이로드(40)가 도시되어 있다. 처음 4개의 DU는 BU0에 저장되며, 전체 BU를 점유한다. 다섯 번째 DU는 BU1에 저장된다. 버퍼 메모리(16)가 BU 단위로 페이로드 데이터를 저장하도록 할당되므로, BU1의 전체가 페이로드(40)에 할당되고, BU1에 사용되지 않은 3개의 DU가 남게 된다. 다른 관점에서 볼 때, 버퍼 메모리의 3개의 DU는 페이로드(40)에 대응하는 패킷이 소비될 때까지 사용될 수 없으며, 페이로드(40)를 전송하기 위해 송신기(12)에 의해 소비되는 DU들(따라서, 데이터 크레디트들)의 수에 관하여 본질적으로 어카운팅 에러를 구성할 수 있다. 즉, 송신기(12)가 페이로드(40)를 전송하기 위해 5개의 크레디트를 소비했지만, 페이로드(40)는 실제로는 버퍼 메모리(16)의 8개의 크레디트를 점유한다.
또 하나의 페이로드(42)가 도 2에 도시되어 있으며, 이 예에서는 4개의 DU이다. 따라서, 페이로드(42)는 BU2에 저장되며, 미사용 DU는 존재하지 않는다. 세 번째 페이로드(44)도 도시되어 있으며, 도 2에서 BU3 및 BU4의 2개 DU를 점유하는 6개 DU이다. 따라서, 버퍼 메모리(16) 내의 2개 더 많은 DU가 사용되지 않는다. 일반적으로, 패킷은 최대 P개의 BU를 점유할 수 있으며, 페이로드가 N개의 DU의 짝수 배가 아닌 경우, 최종 점유된 BU 내의 하나 이상의 DU가 사용되지 않을 수 있다. 다른 예들에서, 미사용 DU들은 (예를 들어, 페이로드가 BU의 시작에 정렬하는 것이 필요하지 않은 경우에) 페이로드에 의해 점유된 BU들의 시작에 또는 시작과 끝 양쪽에 존재할 수 있다. 어느 경우에나, 데이터 페이로드에 대한 최대 가능 에러는 BU에 대응하는 DU들의 수(N)에 기초하여 정의될 수 있다. 최대 에러는 하나의 DU가 BU를 점유하는 경우에 발생하며, 따라서 주어진 페이로드에 대한 최대 에러는 N-1개의 DU(또는 N-1개의 데이터 크레디트)이다.
따라서, 패킷 데이터를 저장하기 위해 할당될 수 있는 BU들의 주어진 수(Y)에 대해, Y*N개보다 적은 데이터 크레디트들이 송신기(12)로 광고된다. 크레디트 관리 유닛(26)은 버퍼 메모리(16)에서 오버플로우가 발생하지 않는 것을 보증하기 위해, 광고될 수 있는 데이터 크레디트들을 보류할 수 있다. 구체적으로, 각각의 데이터 페이로드가 최대 에러(N-1)를 유발할 때 최악의 전체 에러가 발생할 수 있다. 최대 C개의 패킷이 전송될 수 있는 경우(예를 들어, 헤더 크레디트들의 수가 C인 경우), 최악의 전체 에러는 N-1의 C-1배일 수 있다. 헤더 크레디트들이 고갈된 때 송신기(12)가 다른 패킷을 전송할 수 없기 때문에 최종 데이터 페이로드의 에러가 검출되지 못하므로, C-1이 사용된다.
데이터 페이로드를 갖는 주어진 패킷이 수신될 때, 페이로드가 최대보다 적은 에러를 유발하는 경우, 일부 데이터 크레디트들은 (패킷이 소비되기 전에) 즉시 자유화될 수 있다. 즉, 데이터 페이로드에 대한 버퍼 메모리(16) 내의 미사용 DU들은 크레디트 관리 유닛(26)이 송신기(12)로 방송하지 않은 보류 크레디트들에 의해 설명되는 양보다 작다. 예를 들어, 도 2에서, 페이로드(42)는 0개의 에러를 발생시키며, 따라서 페이로드(42)의 수신에 응답하여 3개(N-1-0)의 데이터 크레디트가 자유화될 수 있다. 페이로드(44)는 2개의 에러를 발생시키며, 따라서 페이로드(44)의 수신에 응답하여 1개(N-1-2)의 데이터 크레디트가 자유화될 수 있다.
패킷이 소비되면, (수신되는 다음 패킷이 최대 수의 미사용 DU들을 발생시키는 페이로드를 가질 수 있으므로) 보류된 크레디트들이 다시 필요해질 수 있다. 따라서, 패킷이 소비된 때, 송신기에 의해 실제로 소비된 잔여 크레디트들이 자유화될 수 있다. 즉, 패킷이 소비될 때 자유화되는 크레디트들의 수는 페이로드에 대응하는 실제 크레디트들의 수에서 패킷이 수신될 때 자유화된 크레디트들의 수를 뺀 값과 동일하다.
발생하지 않은 에러들에 대응하는 크레디트들을 자유화함으로써, 이용 가능한 데이터 크레디트들의 부족으로 인해 지연될 추가 패킷들을 전송하는 것이 가능할 수 있다. 즉, 인터페이스(20) 상의 대역폭이 더 효율적으로 이용될 수 있다.
도 3은 미사용 DU들의 최대 수보다 적은 수의 미사용 DU들을 유발하는 데이터 페이로드들에 대한 데이터 크레디트들의 조기 자유화를 구현하기 위한 수신기(14)의 일 실시예의 더 상세한 블록도이다. 도시된 실시예에서, 크레디트 관리 유닛(26)이 도시되며, 최대 DU 에러 레지스터(28A) 및 자유 데이터 크레디트(DCrs) 레지스터(28B)에 결합된다. 레지스터들(28A-28B)은 도 1에 도시된 Cr 레지스터들(28)의 일부일 수 있다. 도 3에는, 하나 이상의 Cr 레지스터(28)로서 또는 FIFO 메모리 또는 다른 메모리로서 구현될 수 있는 DCr FIFO(28C)도 도시되어 있다. 대안으로서, DCr FIFO(28C)는 구현되지 않을 수 있고, 그 대신에 그 안에 저장된 데이터가 수신된 패킷들과 더불어 (예를 들어, 버퍼 메모리(16) 내에) 대기열(queue)화될 수 있다.
크레디트 관리 유닛(26)은 다양한 시점에서 자유화할 크레디트들을 계산하기 위해 미사용 DU들의 최대 수를 참조할 수 있다. 최대 DU 에러 레지스터(28A)는 이 값을 저장할 수 있다. 크레디트 관리 유닛(26)은 이 값을 생성할 수 있거나, 이 값은 소프트웨어에 의해 레지스터(28A) 내에 프로그래밍될 수 있다. 일부 실시예들에서, DU 및 BU 양자는 일정할 수 있고, 크레디트 관리 유닛(26) 내에 하드 코딩될 수 있으며, 레지스터(28A)는 제거될 수 있다.
일 실시예에서, 크레디트 관리 유닛(26)은 송신기(12)로 전송될 자유화된 크레디트들을 자유 데이터 크레디트 레지스터(28B)에 축적할 수 있다. 크레디트 관리 유닛(26)은 임의의 메커니즘을 이용하여, 자유화된 크레디트들을 언제 전송할지를 결정할 수 있다. 예를 들어, 자유화된 크레디트들은 (예를 들어, 프로그래밍 가능한 임계치 이상의) 소정 수의 크레디트들이 축적된 때, 자유화된 크레디트들의 최종 전송 이후로 소정 기간이 경과한 후에, 경과 시간 및 자유화된 크레디트들의 수의 조합 등에 따라 전송될 수 있다. 유사한 레지스터를 이용하여 자유화된 헤더 크레디트들을 축적할 수 있거나, 동일 레지스터 내의 필드들이 사용될 수 있다.
DCr FIFO(28C)는 버퍼 메모리(16)에 저장된 각각의 패킷에 대한 데이터 크레디트들의 수(#DCrs)를 저장할 수 있다. 버퍼 메모리로부터 패킷들이 소비될 때, 대응하는 수의 데이터 크레디트들이 DCr FIFO(28C)로부터 판독되어 자유화될 수 있다. 크레디트 관리 유닛(26)은 패킷을 전송하기 위해 소비된 데이터 크레디트들의 총 수 및 패킷의 수신에 응답하여 자유화된 데이터 크레디트들의 수에 기초하여 각각의 수신된 패킷에 대한 데이터 크레디트들의 수를 계산할 수 있다.
도 4는 시스템(10)의 초기화 동안의 수신기(14)의 일 실시예의 동작을 나타내는 흐름도이다. 블록들은 이해의 편의를 위해 특정 순서로 도시되지만, 다른 순서들이 이용될 수 있다. 블록들은 수신기(14) 내의 조합 논리에서 병렬로 수행될 수 있다. 블록들, 블록들의 조합들 및/또는 흐름도 전체는 다수의 클럭 사이클을 통해 파이프라인화될 수 있다.
크레디트 관리 유닛(26)은 송신기(12)로 광고될 헤더 크레디트들의 수(header_credits) 및 BU당 DU들의 수(N)에 기초하여 총 잠재 DU 에러(DU_Err)를 결정할 수 있다. 구체적으로, DU_Err은 (N-1)*(header_credits-1)로 주어진다(블록 50). 크레디트 관리 유닛(26)은 송신기(12)로 광고할 DU들(데이터 크레디트들)의 수(DU_Adv)를 결정할 수 있다. 구체적으로, DU_Adv는 버퍼 메모리(16) 내의 DU들의 총 수(N*패킷 데이터를 저장하기 위해 할당된 BU들의 수)로부터 블록 50에서 결정된 DU_Err을 뺀 값으로서 계산될 수 있다(블록 52). 실제로, DU_Err은 버퍼 메모리(16) 내의 BU들에서 발생할 수 있는 미사용 DU들을 처리하기 위해 보류된 데이터 크레디트들의 수일 수 있다. 크레디트 관리 유닛(26)은 헤더 크레디트들 및 데이터 크레디트들에 대한 DU_Adv를 광고할 수 있다(블록 54). 게다가, 크레디트 관리 유닛(26)은 레지스터(28A) 내의 Max_DU_Err을 N-1로 설정할 수 있으며, 또한 레지스터(28B) 내의 자유 데이터 크레디트들을 0으로 초기화할 수 있다(블록 56).
도 5는 인터페이스(20) 상에서의 패킷의 수신에 응답하는 수신기(14)의 일 실시예의 동작을 나타내는 흐름도이다. 블록들은 이해의 편의를 위해 특정 순서로 도시되지만, 다른 순서들이 이용될 수 있다. 블록들은 수신기(14) 내의 조합 논리에서 병렬로 수행될 수 있다. 블록들, 블록들의 조합들 및/또는 흐름도 전체는 다수의 클럭 사이클을 통해 파이프라인화될 수 있다.
크레디트 관리 유닛(26)은 페이로드에서 발생한 데이터 에러(즉, 페이로드 데이터를 저장하는 BU(들)에서 사용되지 않은 DU들의 수)를 결정할 수 있다(블록 60). 크레디트 관리 유닛(26)은 발생하지 않은 데이터 에러 = Max_DU_Err - 발생한 데이터 에러를 결정할 수 있다(블록 62). 발생하지 않은 데이터 에러는 패킷의 수신시에 자유화될 수 있는 데이터 크레디트들의 수이다. 크레디트 관리 유닛(26)은 자유 DCr 레지스터(28B) 내의 자유 데이터 크레디트들에 발생하지 않은 데이터 에러를 더할 수 있다(블록 64). 또한, 크레디트 관리 유닛(26)은 버퍼 메모리(16)로부터 패킷이 소비될 때 자유화될 데이터 크레디트들의 수를 DCr FIFO(28C)에 저장할 수 있다(블록 66). 구체적으로, FIFO에 기록된 수는 페이로드에 대응하는 데이터 크레디트들의 실제 수에서 발생하지 않은 데이터 에러를 뺀 값이다.
도 6은 버퍼 메모리(16)로부터의 패킷의 소비에 응답하는 수신기(14)의 일 실시예의 동작을 나타내는 흐름도이다. 일반적으로, 타깃(18)에 의해 버퍼 메모리(16)로부터 패킷이 판독되었거나, 패킷이 더 이상 버퍼 메모리(16) 내에 저장될 필요가 없을 때(예를 들어, 패킷이 제거된 때), 패킷이 소비된다. 블록들은 이해의 편의를 위해 특정 순서로 도시되지만, 다른 순서들이 이용될 수 있다. 블록들은 수신기(14) 내의 조합 논리에서 병렬로 수행될 수 있다. 블록들, 블록들의 조합들 및/또는 흐름도 전체는 다수의 클럭 사이클을 통해 파이프라인화될 수 있다.
크레디트 관리 유닛(26)은 DCr FIFO(28C) 내의 엔트리로부터 데이터 크레디트들의 수를 판독할 수 있으며, 이 데이터 크레디트들의 수를 레지스터(28B) 내의 자유 데이터 크레디트들에 더하여, 데이터 크레디트들을 자유화할 수 있다(블록 70, 72). 일 실시예에서, 패킷들은 수신되는 순서로 소비될 수 있으며, FIFO의 헤드로부터 데이터 크레디트들의 수가 판독될 수 있다. 패킷들이 상이한 순서로 소비되는 경우, 원하는 엔트리에 대한 FIFO 내의 오프셋이 제공될 수 있다.
도 4-6은 각각의 페이로드에 대해 수신되는 최대 수에 대비되는 BU 내의 미사용 DU들의 실제 수에 기초하는 데이터 크레디트들의 조기 자유화와 관련된 동작들을 도시한다는 점에 유의한다. 수신기(14) 및/또는 크레디트 관리 유닛(26)은 전술한 각각의 시점에서 추가 동작도 포함할 수 있다.
수신기(14)의 다른 실시예는 전술한 데이터 크레디트들의 조기 자유화에 더하여 또는 그 대신에 적응성 크레디트 관리를 구현할 수 있다. 적응성 크레디트 관리를 통해, 수신기(14)는 헤더들에 할당되는 버퍼 메모리(16)와 데이터에 할당되는 버퍼 메모리(16)를 인터페이스(20) 상에서 실제로 수신되고 있는 트래픽에 매칭시키려고 시도한다. 즉, 데이터 페이로드들의 크기가 증가할 때, (각각의 패킷은 페이로드에 대해 여전히 하나의 헤더 크레디트만을, 그러나 다수의 데이터 크레디트를 필요로 하므로) 더 많은 데이터 크레디트들 및 더 적은 헤더 크레디트들을 갖는 것이 인터페이스 대역폭의 더 효율적인 사용을 가능하게 할 수 있다. 데이터 페이로드들의 크기가 감소할 때, (각각의 패킷에 대해 필요한 데이터 크레디트들 대 필요한 헤더 크레디트들의 비율이 증가하므로) 더 적은 데이터 크레디트들 및 더 많은 헤더 크레디트들을 갖는 것이 인터페이스 대역폭의 더 효율적인 사용을 가능하게 할 수 있다.
따라서, 크레디트 관리 유닛(26)은 수신기(14)에 의해 수신되는 데이터 페이로드들의 크기를 모니터링할 수 있으며, 헤더들에 할당되는 버퍼 메모리의 양(예를 들어, 헤더 BU들(30)의 크기) 및 데이터 페이로드에 할당되는 버퍼 메모리의 양(예를 들어, 데이터 BU들(32)의 크기)을 동적으로 변경할 수 있다. 대안으로서, 헤더들에 할당되는 메모리의 양은 원하는 헤더들의 최대 수를 수용하도록 충분히 클 수 있지만, 크레디트들은 송신기에 대해 이용 가능한 헤더 크레디트들의 수 및 데이터 크레디트들의 수를 증가 또는 감소시키도록 관리될 수 있다. 이러한 동적 크레디트 관리는 여전히 버퍼 메모리(16)의 더 효율적인 이용을 가능하게 할 수 있는데, 그 이유는 헤더 크레디트들의 수가 전술한 바와 같이 BU들 내의 미사용 DU들에 기초하여 보류될 데이터 크레디트들의 수에 영향을 미치기 때문이다.
일 실시예에서, 헤더 및 데이터 크레디트들(및 대응하는 버퍼 메모리 할당들)은 페이로드들의 예상 크기의 대략 중간 크기의 데이터 페이로드들을 갖는 패킷들에 대해 초기화될 수 있다. 예를 들어, 일 실시예에서, 인터페이스(20)는 PCIe 인터페이스일 수 있으며, 데이터 페이로드들의 크기는 0 내지 256 바이트일 수 있고, 크레디트들은 128 바이트 페이로드들에 대해 초기화될 수 있다. 이어서, 동작중에 경험한 페이로드들의 실제 크기에 응답하여 동적 조정이 수행될 수 있다.
도 7은 전술한 데이터 크레디트들의 조기 자유화와 더불어 동적 크레디트 관리의 일 실시예를 구현하기 위한 수신기(14)의 일 실시예의 더 상세한 블록도이다. 도 7의 실시예는 전술한 바와 같은 레지스터들(28A, 28B) 및 FIFO(28C)를 포함할 수 있다. 또한, 자유(released) 헤더 크레디트(HCrs) 레지스터(28D), 최대 여분 헤더 크레디트(MaxExHead) 레지스터(28E), 최대 회수 헤더 크레디트(MaxRecHead) 레지스터(28F), 미정 헤더 크레디트(PendHeadCr) 레지스터(28G), 미정 데이터 크레디트(PendDataCr) 레지스터(28H), 발생 데이터 크레디트(RlzdDataCr) 레지스터(28I) 및 발생 헤더 크레디트(RlzdHeadCr) 레지스터(28J)가 포함되고, 이들 모두는 도 7에 도시된 바와 같이 크레디트 관리 유닛(26)에 결합된다.
자유 헤더 크레디트 레지스터(28D)는 레지스터(28B)와 유사할 수 있지만, 자유화된 헤더 크레디트들을 축적할 수 있다. 대안으로서, 전술한 바와 같이, 자유 헤더 크레디트들 및 자유 데이터 크레디트들은 원할 경우에 동일 레지스터의 2개의 필드에 축적될 수 있다. MaxExHead 및 MaxRecHead 레지스터들(28E-28F)은 동적 크레디트 관리에 대한 경계를 설정할 수 있다. 이들 레지스터는 후술하는 바와 같이 크레디트 관리 유닛(26)에 의해 자동으로 설정되거나, 원할 경우에 소프트웨어에 의해 프로그래밍될 수 있다. 구체적으로, 데이터 크레디트들을 보류함으로써 할당될 수 있는 추가적인 헤더 크레디트들의 최대 수는 MaxExHead 레지스터(28E)에 의해 지시된다. 추가적인 데이터 크레디트들을 자유화하기 위해 보류될 수 있는 헤더 크레디트들의 최대 수는 MaxRecHead 레지스터(28F)에 의해 지시된다.
미정 헤더 크레디트(pending header credit) 및 미정 데이터 크레디트 레지스터들(28G-28H)은 계획된 헤더 및 데이터 크레디트 조정들은 물론, 계획된 조정들을 충족시키도록 요청된 자유 헤더 또는 데이터 크레디트들도 축적할 수 있다. 이러한 축적들은 동적 조정들이 발생할 때 수행되어, 동적 조정에서 처리되지 않은 크레디트들을 취득할 수 있다. 예를 들어, 일 실시예에서, 하나의 헤더 크레디트의 증가는 3개의 데이터 크레디트의 감소를 필요로 한다. 3개의 데이터 크레디트가 아직 이용 가능하지 않은 경우, 이용 가능한 데이터 크레디트들이 레지스터(28H)에 축적될 수 있다. 미정 헤더 및 데이터 크레디트들은 후속적으로 자유화되는 크레디트들을 통해 취득될 수 있는 필요한 크레디트들의 취득을 허가하기 위한 서명된 값들일 수 있다. 발생 데이터 크레디트 및 헤더 크레디트 레지스터들(28I-28J)은 서명된 발생 헤더 크레디트 조정들 및 데이터 크레디트 조정들을 저장한다.
이제, 도 8을 참조하면, 적응성 크레디트 관리를 수행하기 위한 시스템(10)의 초기화 동안의 수신기(14)의 일 실시예의 동작을 나타내는 고레벨 흐름도가 도시되어 있다. 도 8의 동작은 도 4의 동작에 더하여 데이터 크레디트들의 조기 자유화를 또한 구현하는 실시예들에 대한 것일 수 있다. 블록들은 이해의 편의를 위해 특정 순서로 도시되지만, 다른 순서들이 이용될 수 있다. 블록들은 수신기(14) 내의 조합 논리에서 병렬로 수행될 수 있다. 블록들, 블록들의 조합들 및/또는 흐름도 전체는 다수의 클럭 사이클을 통해 파이프라인화될 수 있다.
크레디트 관리 유닛(26)은 허락된 헤더들의 최대 수(#CMD)에서 중간 크기의 패킷에 할당된 헤더 크레디트들의 수(header_credits)를 뺀 값이 되도록 MaxExHead 레지스터(28A)를 초기화할 수 있다. #CMD는 하드웨어 최대치이거나, 헤더 BU들(30)의 할당에 기초하여 소프트웨어에 의해 프로그래밍될 수 있다. 헤더 크레디트들의 수는 예를 들어 중간 크기의 패킷에 대해 데이터 BU들의 수를 2로 나눈 값과 동일할 수 있다. 따라서, 추가적인 헤더 크레디트들의 최대 수는 헤더 BU들(30) 내의 할당되지 않은 나머지 공간일 수 있다(블록 80). 회수된 헤더 크레디트들(추가적인 데이터 크레디트들을 허가하기 위해 동적으로 제거된 헤더 크레디트들)의 최대 수(MaxRecHead)는 현재의 헤더 크레디트들의 절반 또는 헤더 신호들에서 버퍼 메모리(16) 내의 데이터 BU들의 총 수를 4로 나눈 값의 정수 부분을 뺀 값의 최소치로서 초기화될 수 있다(블록 82). 헤더 크레디트들의 수의 절반은 최대 패킷들에 대한 적당한 수로서 선택될 수 있다. 데이터 BU들의 수를 4로 나눈 값은 이 실시예에 대한 최소치일 수 있는데, 그 이유는 최대 데이터 페이로드가 4개의 BU이기 때문이다. 일 실시예에서, 헤더 크레디트들의 최초 수가 2 이하인 경우에, 최대 회수 헤더 크레디트들은 0으로 설정될 수 있다는 점에 유의한다. 2개 또는 1개의 헤더 크레디트가 존재할 때에는, 헤더 크레디트들의 부족이 추가적인 데이터 크레디트들의 사용을 방해할 수 있으므로, 헤더 크레디트들을 줄임으로써 어떠한 이익도 얻지 못할 수 있다. 크레디트 관리 유닛(26)은 헤더 크레디트들의 수 및 DU_Adv 데이터 크레디트들을 광고할 수 있다(블록 84).
이제, 도 9를 참조하면, 패킷의 수신에 응답하는 수신기(14)의 일 실시예의 동작을 나타내는 고레벨 흐름도가 도시되어 있다. 도 9의 동작은 도 5의 동작에 더하여 데이터 크레디트들의 조기 자유화를 또한 구현하는 실시예들에 대한 것일 수 있다. 블록들은 이해의 편의를 위해 특정 순서로 도시되지만, 다른 순서들이 이용될 수 있다. 블록들은 수신기(14) 내의 조합 논리에서 병렬로 수행될 수 있다. 블록들, 블록들의 조합들 및/또는 흐름도 전체는 다수의 클럭 사이클을 통해 파이프라인화될 수 있다.
일반적으로, 크레디트 관리 유닛(26)은 패킷을 그의 데이터 페이로드의 크기에 기초하여 4개의 카테고리 중 하나로 분류할 수 있으며, 카테고리에 따라 크레디트들을 조정할 수 있다. 따라서, 본 실시예는 각각의 수신된 패킷에 기초하여 조정들을 행할 수 있다. 다른 실시예들은 원할 경우에 둘 이상의 패킷에 대해 패킷 크기를 모니터링하여 조정들을 행할 수 있다.
패킷이 데이터 페이로드를 포함하지 않는 경우(판정 블록 90의 "예" 구간), 패킷은 Cat0 패킷이고, 조정은 수행되지 않는다. 패킷이 중간 크기 패킷 데이터 페이로드의 1/2(예를 들어, 전술한 PCIe 실시예에서의 64 바이트) 이하인 데이터 페이로드를 포함하는 경우(판정 블록 92의 "예" 구간), 패킷은 Cat1 패킷이다. 데이터 페이로드는 Cat1 패킷들에 대해 비교적 작고, 따라서 데이터 크레디트들을 줄이고 헤더 크레디트들을 늘리는 것은 보다 양호한 인터페이스 대역폭 이용으로 이어질 수 있다(블록 94). 패킷이 중간 크기 패킷의 1/2과 중간 크기 패킷의 1과 1/2 사이에 있는 데이터 페이로드를 포함하는 경우(판정 블록 96의 "예" 구간), 패킷은 Cat2 패킷이다. Cat2에서, 패킷 데이터 페이로드는 대략 중간 크기를 갖는다. Cat2 크기 범위에서, 초기 헤더 및 데이터 크레디트들은 대략 정확하다. 미정 및 발생된 크레디트들이 0이 아닌 경우, 크레디트 관리 유닛은 가장 최근의 조정의 반대 방향으로 크레디트들을 조정할 수 있다(블록 98). 즉, 가장 최근의 조정이 헤더 크레디트들을 늘리고 데이터 크레디트들을 줄이는 것이었다면, 크레디트 관리 유닛은 데이터 크레디트들을 늘리고 헤더 크레디트들을 줄일 수 있다. 가장 최근의 조정이 헤더 크레디트들을 줄이고 데이터 크레디트들을 늘리는 것이었다면, 크레디트 관리 유닛은 데이터 크레디트들을 줄이고 헤더 크레디트들을 늘릴 수 있다. 마지막으로, 데이터 페이로드가 큰 경우(중간 크기 패킷의 1.5배보다 큰 경우, 판정 블록 96의 "아니오" 구간), 패킷은 Cat3 패킷이다. 큰 페이로드(Cat3) 패킷들은 더 많은 데이터 크레디트 및 더 적은 헤더 크레디트으로부터 이익을 얻을 수 있으며, 따라서 크레디트 관리 유닛(26)은 헤더 크레디트들을 줄이고, 데이터 크레디트들을 늘릴 수 있다(블록 100).
MaxHeadCr 및 MaxRecHead 레지스터들(28F-28G)이 동적 크레디트 조정들에 대한 경계를 설정하는 데 사용되는 경우, 도 9의 동작은 제한될 수 있다(즉, 조정들이 MaxHeadCr 및 MaxRecHead 레지스터들(28F-28G)에 의해 설정된 경계를 위반하는 경우에는 크레디트들이 도시된 바와 같이 조정되지 못할 수 있다).
도 10 및 11은 일 실시예에 대한 도 9의 동작을 더 상세히 나타내는 의사 코드를 도시한다. 도 7에 도시된 레지스터 이름들이 의사 코드 내에 나타난다. 또한, 의사 코드에서는 편의를 위해 헤더 및 데이터 크레디트들에 대해 벡터 표기를 사용한다. 구체적으로, adaptive_credits는 {adaptive_header_credits, adaptive_data_credits}로 정의되고, pending_credits는 {PendHeadCr, PendDataCr}로 정의된다. adaptive_credits는 (잠재적으로 조정된) 헤더 및 데이터 크레디트들이다. releasing_header_credits 및 releasing_data_credits는 현재 자유화되고 있는 크레디트들이다. releasing_data_credits는 발생한 데이터 에러가 전술한 바와 같이 주어진 패킷에 대한 최대 에러보다 작을 때 조기에 자유화된 데이터 크레디트들을 포함할 수 있다. 자유 크레디트 변수들 양자는 버퍼 메모리(16)로부터의 패킷 소비로 인해 자유화된 크레디트들도 포함한다.
도 10은 adaptive_credits의 생성을 나타낸다. 일반적으로, 경계에 도달한 경우, adaptive_credits는 pending_credits와 동일하다. 그렇지 않은 경우, adaptive_credits는 pending_credits + 또는 - 수신 패킷의 카테고리에 의존하는(그리고 Cat2 패킷들의 경우에는 가장 최근의 조정들에 의존하는) 크레디트들을 포함할 수 있다. 본 실시예에서, 가장 최근의 조정은 미정 헤더 크레디트들과 발생한 헤더 크레디트들을 합산하고 이를 0과 비교함으로써 검출된다.
도 10에서 알 수 있듯이, 본 실시예에서 1개의 헤더 크레디트는 3개의 데이터 크레디트와 동일하다. 따라서, 헤더 크레디트들의 1개 증가는 데이터 크레디트들을 3개 줄이며, 그 반대도 마찬가지다. 다른 실시예들은 N-1에 기초하는 데이터 크레디트들 대 헤더 크레디트들의 상이한 비율들을 가질 수 있다.
마지막으로, 도 10에서, 중간 값 remaining_pending_d가 계산된다. remaining_pending_d는 0 이하이고 3보다 작아야 한다. 일 실시예에서, PendHeadCr이 음인 경우, remaining_pending_d는 0이다.
도 11은 도 10에서 결정된 적응성 크레디트들 및 자유 크레디트들에 기초하는 발생 가능한 크레디트들의 계산을 도시한다. 다시, 도 11의 예는 3개의 데이터 크레디트가 하나의 헤더 크레디트와 동일한 것에 기초하며, 이는 1개 또는 2개의 데이터 크레디트가 임의의 주어진 시점에서 미정인 것을 가능하게 한다. 마지막으로, 레지스터들(28B, 28D, 28G-28J)의 갱신이 도 11에 도시되며, 여기서 "+="는 레지스터의 현재 값을 등가 부호의 우측만큼 증가시키는 것을 나타내며, "-="은 레지스터의 현재 값을 등가 부호의 우측만큼 감소시키는 것을 나타낸다.
위의 명세서가 충분히 이해된다면, 이 분야의 기술자들에게는 다양한 변경들 및 개량들이 명백해질 것이다. 아래의 청구항들은 그러한 모든 변경들 및 개량들을 포함하는 것으로 해석되는 것을 의도한다.

Claims (21)

  1. 장치로서,
    크레디트 관리 유닛을 포함하는 수신기 - 상기 크레디트 관리 유닛은 상기 수신기가 사용 중에 결합되는 인터페이스에 대한 흐름 제어 크레디트들(flow control credits)을 관리하도록 구성되고, 상기 인터페이스상에서 수신되는 각각의 패킷은 패킷 헤더 및 옵션으로서 패킷 데이터를 포함하고, 상기 패킷 데이터는 상기 패킷 데이터의 크기에 의존하는 상기 흐름 제어 크레디트들 내의 데이터 크레디트들에 관하여 측정되고, 각각의 데이터 크레디트는 데이터 바이트들의 고정된 수를 나타냄 -; 및
    상기 수신기에 결합되고, 상기 수신기에 의해 상기 인터페이스상에서 수신되는 패킷들에 대응하는 패킷 헤더들 및 패킷 데이터를 저장하도록 구성되는 버퍼 메모리 - 상기 버퍼 메모리는 상기 수신기에 의해 상기 데이터 크레디트의 크기의 N배인 버퍼 유닛들로 할당할 수 있고, 여기서 N은 1보다 큰 정수임 -
    를 포함하고,
    데이터 크레디트들의 총 수는 패킷 데이터를 저장하는 데 이용 가능한 상기 버퍼 메모리 내의 버퍼 유닛들의 수의 N배와 동일하고, 상기 크레디트 관리 유닛은 패킷 데이터가 버퍼 유닛을 채우지 못하는 경우에 사용되지 못하는 데이터 크레디트들의 최대 수에 기초하여 그리고 동시에 비행(flight)하는 것이 허락되는 패킷들의 수에 추가로 기초하여 복수의 총 데이터 크레디트를 보류(reserve)하도록 구성되고, 상기 크레디트 관리 유닛은 사용되지 못하는 데이터 크레디트들의 최대 수보다 적게 유발(incur)하는 주어진 패킷에 대한 패킷 데이터의 수신에 응답하여 하나 이상의 데이터 크레디트를 자유화하도록 구성되고, 상기 크레디트 관리 유닛은 상기 주어진 패킷이 소비되기 전에 상기 하나 이상의 데이터 크레디트를 자유화하도록 구성되는 장치.
  2. 제1항에 있어서, 상기 크레디트 관리 유닛은 상기 주어진 패킷의 소비에 응답하여 추가적인 데이터 크레디트들을 자유화하도록 구성되고, 상기 추가적인 데이터 크레디트들의 수는 상기 주어진 패킷의 패킷 데이터에 대응하는 데이터 크레디트들의 수에서 상기 주어진 패킷의 수신에 응답하여 자유화된 상기 하나 이상의 데이터 크레디트를 뺀 값과 동일한 장치.
  3. 제1항에 있어서, 상기 수신기는 상기 장치의 초기화 동안에 상기 인터페이스상에서 다수의 데이터 크레디트를 송신기에게 광고하도록 구성되고, 광고되는 데이터 크레디트들의 수는 데이터 크레디트들의 총 수에서 상기 보류된 데이터 크레디트들을 뺀 값보다 크지 않은 장치.
  4. 제1항에 있어서, 주어진 패킷에 대해 사용되지 못하는 데이터 크레디트들의 최대 수는 N-1과 동일한 장치.
  5. 제1항에 있어서, 상기 크레디트 관리 유닛은 수신된 패킷들에 포함된 상기 패킷 데이터의 크기의 모니터링에 응답하여 패킷 헤더들을 저장하는 데 사용되는 상기 버퍼 메모리의 제1 양 및 패킷 데이터를 저장하는 데 사용되는 상기 버퍼 메모리의 제2 양을 동적으로 조정하도록 구성되는 장치.
  6. 인터페이스로부터 패킷을 수신하는 단계 - 상기 패킷은 패킷 데이터를 포함하고, 상기 패킷 데이터는 상기 패킷 데이터의 크기에 기초하여 상기 인터페이스 상의 송신기에서 하나 이상의 데이터 크레디트를 소비하고, 각각의 데이터 크레디트는 데이터 바이트들의 고정된 수를 나타냄 -;
    상기 패킷 데이터를 버퍼 메모리에 저장하는 단계 - 상기 버퍼 메모리는 상기 데이터 크레디트의 크기의 N배인 버퍼 유닛들에 패킷 데이터를 저장하도록 할당할 수 있고, 여기서 N은 1보다 큰 정수이고, 상기 패킷 데이터가 상기 패킷 데이터를 저장하도록 할당된 버퍼 유닛을 채우지 못하는 것에 응답하여 최대 N-1개까지의 데이터 크레디트들이 사용되지 못함 -; 및
    상기 패킷의 수신에 응답하여 그리고 상기 패킷이 소비되기 전에, 상기 패킷 데이터가 N-1개보다 적은 사용되지 못한 데이터 크레디트들을 유발하는 것으로 결정하고, 상기 결정에 응답하여 사용 가능한 하나 이상의 데이터 크레디트를 자유화하는 단계
    를 포함하는 방법.
  7. 제6항에 있어서, 데이터 크레디트들의 총 수로부터 복수의 데이터 크레디트를 보류하는 단계를 더 포함하고, 상기 데이터 크레디트들의 총 수는 패킷 데이터를 저장하는 데 이용될 수 있는 상기 버퍼 메모리 내의 버퍼 유닛들의 수의 N배와 동일하고, 상기 복수의 데이터 크레디트의 수는, 패킷 데이터가 버퍼 유닛을 채우지 못하는 경우에 사용되지 못하는 N-1개의 데이터 크레디트에 기초하고 또한 동시에 비행하는 것이 허락되는 패킷들의 수에 추가로 기초하는 방법.
  8. 제7항에 있어서, 초기화 동안에 상기 인터페이스상의 송신기에게 데이터 크레디트들의 수를 광고하는 단계를 더 포함하고, 광고되는 상기 데이터 크레디트들의 수는 데이터 크레디트들의 총 수에서 상기 보류된 데이터 크레디트들을 뺀 값보다 크지 않은 방법.
  9. 제6항에 있어서, 상기 패킷의 소비에 응답하여 추가적인 데이터 크레디트들을 자유화하는 단계를 더 포함하고, 상기 추가적인 데이터 크레디트들의 수는 상기 주어진 패킷의 패킷 데이터에 대응하는 데이터 크레디트들의 수에서 상기 주어진 패킷의 수신에 응답하여 자유화된 하나 이상의 데이터 크레디트를 뺀 값과 동일한 방법.
  10. 제6항에 있어서, 상기 자유화된 데이터 크레디트들의 표시를 송신기에게 전송하는 단계를 더 포함하는 방법.
  11. 장치로서,
    크레디트 관리 유닛을 포함하는 수신기 - 상기 크레디트 관리 유닛은 상기 수신기가 사용 중에 결합되는 인터페이스에 대한 흐름 제어 크레디트들을 관리하도록 구성되고, 상기 인터페이스상에서 수신되는 각각의 패킷은 헤더 및 옵션으로서 데이터를 포함하고, 상기 헤더는 상기 인터페이스상의 제어 흐름에 대한 하나 이상의 헤더 크레디트에 관하여 측정되고, 상기 데이터는 상기 인터페이스상의 제어 흐름에 대한 하나 이상의 데이터 크레디트에 관하여 측정되고, 각각의 데이터 크레디트는 데이터 바이트들의 고정된 수를 나타냄 -; 및
    상기 수신기에 결합되고, 상기 수신기에 의해 상기 인터페이스상에서 수신되는 패킷들에 대응하는 패킷 헤더들 및 패킷 데이터를 저장하도록 구성되는 버퍼 메모리
    를 포함하고,
    상기 크레디트 관리 유닛은 하나 이상의 수신된 패킷 내의 패킷 데이터의 크기에 응답하여 패킷 헤더들을 저장하는 데 사용되는 상기 버퍼 메모리의 제1 양 및 패킷 데이터를 저장하는 데 사용되는 상기 버퍼 메모리의 제2 양을 동적으로 조정하도록 구성되고, 상기 크레디트 관리 유닛은 상기 동적 조정들에 응답하여 상기 인터페이스상의 송신기에 대해 데이터 크레디트들 및 헤더 크레디트들을 자유화하도록 구성되는 장치.
  12. 제11항에 있어서, 상기 크레디트 관리 유닛은 상기 제1 양을 증가시키고 상기 제2 양을 감소시키며, 상기 크레디트 관리 유닛은 소비된 패킷에 대응하는 하나 이상의 데이터 크레디트를 보류(withhold)하도록 그리고 대신에 변경을 이루기 위해 하나 이상의 헤더 크레디트를 자유화하도록 구성되는 장치.
  13. 제12항에 있어서, 헤더 크레디트는 데이터 크레디트에 의해 표현되는 데이터 바이트들의 고정된 수의 N-1배를 나타내고, 상기 크레디트 관리 유닛은 하나의 헤더 크레디트를 자유화하기 위해 N-1개의 데이터 크레디트를 보류(withhold)하도록 구성되는 장치.
  14. 제12항에 있어서, 상기 크레디트 관리 유닛은 제1 임계치보다 작은 크기의 패킷 데이터를 갖는 하나 이상의 패킷의 수신에 응답하여 상기 제1 양을 증가시키고 상기 제2 양을 감소시키도록 구성되는 장치.
  15. 제11항에 있어서, 상기 크레디트 관리 유닛은 상기 제1 양을 감소시키고 상기 제2 양을 증가시키며, 상기 크레디트 관리 유닛은 소비된 패킷에 대응하는 하나 이상의 헤더 크레디트를 보류(withhold)하도록 그리고 대신에 상기 송신기에서 상기 조정을 이루기 위해 하나 이상의 데이터 크레디트를 자유화하도록 구성되는 장치.
  16. 제15항에 있어서, 상기 크레디트 관리 유닛은 제2 임계치보다 큰 크기의 패킷 데이터를 갖는 하나 이상의 패킷의 수신에 응답하여 상기 제1 양을 감소시키고 상기 제2 양을 증가시키도록 구성되는 장치.
  17. 제11항에 있어서, 상기 크레디트 관리 유닛은 크기가 제1 임계치보다 크고 제2 임계치보다 작은 패킷 데이터를 갖는 하나 이상의 패킷의 수신에 응답하여 가장 최근에 수행된 조정과 반대인 조정을 수행하도록 구성되는 장치.
  18. 제11항에 있어서, 상기 크레디트 관리 유닛은 상기 제1 양의 최소 크기 및 상기 제1 양의 최대 크기를 결정하도록 구성되고, 상기 크레디트 관리 유닛은 상기 최소 크기 및 상기 최대 크기에 기초하여 상기 제1 양 및 상기 제2 양의 동적 변경을 제한하도록 구성되는 장치.
  19. 수신기에서의 방법으로서,
    상기 수신기는 상기 수신기가 사용 중에 결합되는 인터페이스에 대한 흐름 제어 크레디트들을 관리하도록 구성되고, 상기 인터페이스상에서 수신되는 각각의 패킷은 헤더 및 옵션으로서 데이터를 포함하고, 상기 헤더는 상기 인터페이스상의 제어 흐름에 대한 헤더 크레디트에 관하여 측정되고, 상기 데이터는 상기 인터페이스상의 제어 흐름에 대한 하나 이상의 데이터 크레디트에 관하여 측정되고, 각각의 데이터 크레디트는 데이터 바이트들의 고정된 수를 나타내며,
    상기 방법은,
    하나 이상의 수신된 패킷 내의 패킷 데이터의 크기에 응답하여, 상기 헤더 크레디트들의 제1 양 및 상기 데이터 크레디트들의 제2 양을 동적으로 조정하는 단계; 및
    상기 동적 조정들에 응답하여 상기 인터페이스상의 송신기에 대해 데이터 크레디트들 및 헤더 크레디트들을 자유화하는 단계
    를 포함하는 수신기에서의 방법.
  20. 제19항에 있어서, 상기 동적으로 조정하는 단계는 상기 제1 양을 증가시키고 상기 제2 양을 감소시키는 단계를 포함하고, 상기 자유화하는 단계는 소비된 패킷에 대응하는 하나 이상의 데이터 크레디트를 보류(withhold)하는 단계와 대신에 상기 송신기에서 상기 조정을 이루기 위해 하나 이상의 헤더 크레디트를 자유화하는 단계를 포함하는 수신기에서의 방법.
  21. 제19항에 있어서, 상기 동적으로 조정하는 단계는 상기 제1 양을 감소시키고 상기 제2 양을 증가시키는 단계를 포함하고, 상기 자유화하는 단계는 소비된 패킷에 대응하는 하나 이상의 헤더 크레디트를 보류(withhold)하는 단계와 대신에 상기 송신기에서 상기 조정을 이루기 위해 하나 이상의 데이터 크레디트를 자유화하는 단계를 포함하는 수신기에서의 방법.
KR1020117015050A 2008-12-29 2009-12-09 자원 단위가 크레디트 단위보다 클 때의 크레디트 관리 KR101110384B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/344,949 2008-12-29
US12/344,949 US8045472B2 (en) 2008-12-29 2008-12-29 Credit management when resource granularity is larger than credit granularity
PCT/US2009/067360 WO2010077747A1 (en) 2008-12-29 2009-12-09 Credit management when resource granularity is larger than credit granularity

Related Child Applications (1)

Application Number Title Priority Date Filing Date
KR1020117019397A Division KR101242775B1 (ko) 2008-12-29 2009-12-09 자원 단위가 크레디트 단위보다 클 때의 크레디트 관리

Publications (2)

Publication Number Publication Date
KR20110094102A true KR20110094102A (ko) 2011-08-19
KR101110384B1 KR101110384B1 (ko) 2012-02-24

Family

ID=41666515

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020117015050A KR101110384B1 (ko) 2008-12-29 2009-12-09 자원 단위가 크레디트 단위보다 클 때의 크레디트 관리
KR1020117019397A KR101242775B1 (ko) 2008-12-29 2009-12-09 자원 단위가 크레디트 단위보다 클 때의 크레디트 관리

Family Applications After (1)

Application Number Title Priority Date Filing Date
KR1020117019397A KR101242775B1 (ko) 2008-12-29 2009-12-09 자원 단위가 크레디트 단위보다 클 때의 크레디트 관리

Country Status (9)

Country Link
US (2) US8045472B2 (ko)
EP (2) EP2271994B1 (ko)
JP (2) JP5166609B2 (ko)
KR (2) KR101110384B1 (ko)
CN (2) CN102037455B (ko)
AT (1) ATE534083T1 (ko)
ES (2) ES2414936T3 (ko)
HK (2) HK1164486A1 (ko)
WO (1) WO2010077747A1 (ko)

Families Citing this family (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8045472B2 (en) * 2008-12-29 2011-10-25 Apple Inc. Credit management when resource granularity is larger than credit granularity
US20100296520A1 (en) * 2009-05-19 2010-11-25 Matthews David L Dynamic quality of service adjustment across a switching fabric
JP5349515B2 (ja) * 2011-03-14 2013-11-20 株式会社東芝 バッファ管理装置、バッファ管理方法及び記憶装置
JP5987560B2 (ja) * 2012-08-31 2016-09-07 富士通株式会社 データ転送装置、データ転送方法およびデータ転送プログラム
US9524261B2 (en) 2012-12-21 2016-12-20 Apple Inc. Credit lookahead mechanism
JP2014230072A (ja) * 2013-05-22 2014-12-08 株式会社リコー データ通信デバイス、データ通信装置及びデータ通信方法
US9178832B2 (en) * 2013-07-11 2015-11-03 International Business Machines Corporation Queue credit management
US9082118B2 (en) 2013-07-17 2015-07-14 Apple Inc. Transaction flow control using credit and token management
EP3051870B1 (en) * 2013-09-29 2019-07-03 Huawei Technologies Co., Ltd. Data transmission method and device
US9584429B2 (en) * 2014-07-21 2017-02-28 Mellanox Technologies Ltd. Credit based flow control for long-haul links
KR102429904B1 (ko) * 2017-09-08 2022-08-05 삼성전자주식회사 PCIe P2P 접속의 밴드위스를 최대화할 수 있는 방법 및 시스템
US10432536B1 (en) * 2017-12-11 2019-10-01 Xilinx, Inc. Systems and methods for policing streams in a network
US10824369B2 (en) * 2018-07-31 2020-11-03 Nutanix, Inc. Elastic method of remote direct memory access memory advertisement
US10630602B1 (en) 2018-10-08 2020-04-21 EMC IP Holding Company LLC Resource allocation using restore credits
US11005775B2 (en) 2018-10-08 2021-05-11 EMC IP Holding Company LLC Resource allocation using distributed segment processing credits
US11201828B2 (en) 2018-10-08 2021-12-14 EMC IP Holding Company LLC Stream allocation using stream credits
US10951549B2 (en) 2019-03-07 2021-03-16 Mellanox Technologies Tlv Ltd. Reusing switch ports for external buffer network
US11558316B2 (en) 2021-02-15 2023-01-17 Mellanox Technologies, Ltd. Zero-copy buffering of traffic of long-haul links
US11973696B2 (en) 2022-01-31 2024-04-30 Mellanox Technologies, Ltd. Allocation of shared reserve memory to queues in a network device

Family Cites Families (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5781457A (en) 1994-03-08 1998-07-14 Exponential Technology, Inc. Merge/mask, rotate/shift, and boolean operations from two instruction sets executed in a vectored mux on a dual-ALU
US6643765B1 (en) 1995-08-16 2003-11-04 Microunity Systems Engineering, Inc. Programmable processor with group floating point operations
US5832245A (en) * 1996-10-21 1998-11-03 Advanced Micro Devices, Inc. Method for isochronous flow control across an inter-chip bus
US6356551B1 (en) * 1997-02-14 2002-03-12 Advanced Micro Devices, Inc. Method and network switch having dual forwarding models with a virtual lan overlay
EP0946053A1 (en) * 1998-03-27 1999-09-29 CANAL+ Société Anonyme Memory management in a receiver/decoder
US6636523B1 (en) * 1999-01-27 2003-10-21 Advanced Micro Devices, Inc. Flow control using rules queue monitoring in a network switching system
JP2001094613A (ja) 1999-09-21 2001-04-06 Canon Inc 通信制御装置、方法および記録媒体
US6430684B1 (en) 1999-10-29 2002-08-06 Texas Instruments Incorporated Processor circuits, systems, and methods with efficient granularity shift and/or merge instruction(s)
US7190667B2 (en) * 2001-04-26 2007-03-13 Intel Corporation Link level packet flow control mechanism
US7340495B2 (en) 2001-10-29 2008-03-04 Intel Corporation Superior misaligned memory load and copy using merge hardware
US7818356B2 (en) 2001-10-29 2010-10-19 Intel Corporation Bitstream buffer manipulation with a SIMD merge instruction
US7269752B2 (en) * 2002-06-04 2007-09-11 Lucent Technologies Inc. Dynamically controlling power consumption within a network node
US6760793B2 (en) 2002-07-29 2004-07-06 Isys Technologies, Inc. Transaction credit control for serial I/O systems
US7725568B2 (en) * 2002-09-09 2010-05-25 Netapp, Inc. Method and apparatus for network storage flow control
US7661130B2 (en) * 2003-04-12 2010-02-09 Cavium Networks, Inc. Apparatus and method for allocating resources within a security processing architecture using multiple queuing mechanisms
JP4366200B2 (ja) * 2004-01-29 2009-11-18 キヤノン株式会社 記録装置及び受信バッファ管理方法
US7752355B2 (en) 2004-04-27 2010-07-06 International Business Machines Corporation Asynchronous packet based dual port link list header and data credit management structure
JP2005332250A (ja) 2004-05-20 2005-12-02 Toshiba Corp データ処理装置およびフロー制御方法
JP2006189937A (ja) 2004-12-28 2006-07-20 Toshiba Corp 受信装置、送受信装置、受信方法及び送受信方法
US7464174B1 (en) * 2005-03-07 2008-12-09 Pericom Semiconductor Corp. Shared network-interface controller (NIC) using advanced switching (AS) turn-pool routing field to select from among multiple contexts for multiple processors
WO2006109207A1 (en) 2005-04-13 2006-10-19 Koninklijke Philips Electronics N.V. Electronic device and method for flow control
US7698477B2 (en) * 2005-11-30 2010-04-13 Lsi Corporation Method and apparatus for managing flow control in PCI express transaction layer
US7698478B2 (en) * 2006-09-19 2010-04-13 Apple Inc. Managed credit update
US8139575B2 (en) 2007-06-29 2012-03-20 International Business Machines Corporation Device, system and method of modification of PCI express packet digest
US7869356B2 (en) * 2007-12-18 2011-01-11 Plx Technology, Inc. Dynamic buffer pool in PCIExpress switches
US8151145B2 (en) * 2008-04-03 2012-04-03 Oracle America, Inc. Flow control timeout mechanism to detect PCI-express forward progress blockage
US8045472B2 (en) * 2008-12-29 2011-10-25 Apple Inc. Credit management when resource granularity is larger than credit granularity

Also Published As

Publication number Publication date
KR101110384B1 (ko) 2012-02-24
EP2390791A1 (en) 2011-11-30
KR101242775B1 (ko) 2013-03-12
CN102037455A (zh) 2011-04-27
EP2271994B1 (en) 2011-11-16
CN102298563B (zh) 2014-04-09
ES2414936T3 (es) 2013-07-23
EP2271994A1 (en) 2011-01-12
US20100165842A1 (en) 2010-07-01
CN102037455B (zh) 2013-11-20
US8045472B2 (en) 2011-10-25
JP5166609B2 (ja) 2013-03-21
KR20110110340A (ko) 2011-10-06
HK1164486A1 (en) 2012-09-21
HK1153024A1 (en) 2012-03-16
JP2012514384A (ja) 2012-06-21
JP2012039661A (ja) 2012-02-23
CN102298563A (zh) 2011-12-28
WO2010077747A1 (en) 2010-07-08
ATE534083T1 (de) 2011-12-15
ES2378211T3 (es) 2012-04-10
EP2390791B1 (en) 2013-03-20
US8400924B2 (en) 2013-03-19
US20120008500A1 (en) 2012-01-12
JP5221736B2 (ja) 2013-06-26

Similar Documents

Publication Publication Date Title
KR101110384B1 (ko) 자원 단위가 크레디트 단위보다 클 때의 크레디트 관리
US7698478B2 (en) Managed credit update
JP4800224B2 (ja) 構成可能な相互接続トポロジを用いたi/o帯域幅の適応割当て
US20070047443A1 (en) Channelized flow control
CN112154630A (zh) 在plca支持的10spe网络上对流量进行整形
US7412555B2 (en) Ordering rule and fairness implementation
US9258256B2 (en) Inverse PCP flow remapping for PFC pause frame generation
TW201543848A (zh) 網路處理器中的封包調度
US20060187826A1 (en) Dynamic sharing of a transaction queue
US8027256B1 (en) Multi-port network device using lookup cost backpressure
US20200076742A1 (en) Sending data using a plurality of credit pools at the receivers
TWI717373B (zh) 用於通用序列匯流排2.0頻寬保留之方法及系統
WO2009042257A2 (en) Buffer minimization in interface controller
US8103788B1 (en) Method and apparatus for dynamically reallocating buffers for use in a packet transmission
US9906468B2 (en) Packet traffic control in a network processor
US8819325B2 (en) Interface device and system including the same
CN112486871A (zh) 一种用于片上总线的路由方法以及系统
US20080247316A1 (en) Method Circuit and System for Data Flow Control
CN103559147A (zh) 访存调度方法、装置和系统

Legal Events

Date Code Title Description
A201 Request for examination
A107 Divisional application of patent
A302 Request for accelerated examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20150106

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20151217

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20161220

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20171219

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20181226

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20191217

Year of fee payment: 9