KR20100112154A - 감소된 패킷 손실을 갖는 네트워크 오프로딩 - Google Patents

감소된 패킷 손실을 갖는 네트워크 오프로딩 Download PDF

Info

Publication number
KR20100112154A
KR20100112154A KR1020107017525A KR20107017525A KR20100112154A KR 20100112154 A KR20100112154 A KR 20100112154A KR 1020107017525 A KR1020107017525 A KR 1020107017525A KR 20107017525 A KR20107017525 A KR 20107017525A KR 20100112154 A KR20100112154 A KR 20100112154A
Authority
KR
South Korea
Prior art keywords
data
segment
context
descriptor
transmission
Prior art date
Application number
KR1020107017525A
Other languages
English (en)
Other versions
KR101275047B1 (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 KR20100112154A publication Critical patent/KR20100112154A/ko
Application granted granted Critical
Publication of KR101275047B1 publication Critical patent/KR101275047B1/ko

Links

Images

Classifications

    • 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/19Flow control; Congestion control at layers above the network layer
    • H04L47/193Flow control; Congestion control at layers above the network layer at the transport layer, e.g. TCP related
    • 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/22Traffic shaping
    • 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/36Flow control; Congestion control by determining packet size, e.g. maximum transfer unit [MTU]

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Communication Control (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Small-Scale Networks (AREA)

Abstract

본 발명은 제 1 데이터 전송 레이트를 갖는 전송 유닛에서 제 1 데이터 수신 레이트를 갖는 제 1 목적지에 데이터 네트워크를 통해 데이터의 제 1 세그먼트를 전송하는 방법에 관한 것이다. 제 1 데이터 전송 레이트는 제 1 데이터 수신 레이트보다 크고, 상기 방법은: 전송 유닛에서 제 1 목적지로만의 방향으로 제 1 목적지에 하나 이상의 데이터 패킷들로서 제 1 세그먼트의 적어도 일부를 전송하는 단계와, 전송 유닛에서 하나 이상의 부가적인 목적지들로만의 방향으로 하나 이상의 부가적인 목적지들에 하나 이상의 데이터 패킷들로서 제 2 세그먼트의 적어도 일부를 전송하는 단계 사이에서 스위칭함으로써 전송 유닛에서 제 1 목적지로 제 1 전송 레이트를 효과적으로 감소시키는 단계를 포함하고, 상기 스위칭은 상기 제 1 세그먼트 및/또는 적어도 상기 제 2 세그먼트가 전송될 때까지 반복된다. 이 방식에서, 클라이언트에 관련된 패킷은 감소되고, 반면에 전송 시스템에 대한 총 패킷 레이트는 유지되어, 패킷 손실 및/또는 라우터 버퍼 소모의 감소된 가능성이, 비교적 느린 클라이언트에 대한 데이터가 풀 레이트로 전송되지 않으므로, 달성된다.

Description

감소된 패킷 손실을 갖는 네트워크 오프로딩{NETWORK OFFLOADING WITH REDUCED PACKET LOSS}
본 발명은 일반적으로 네트워크 오프로딩에 관한 것이다.
특히, 본 발명은 전송 유닛에서 제 1 목적지로 데이터 네트워크를 통해 데이터의 제 1 세그먼트를 전송하는 방법 및 전송 유닛에서 제 1 목적지로 데이터 네트워크를 통해 데이터의 제 1 세그먼트를 전송하는 디바이스에 관한 것이다.
또한, 본 발명은 하나 이상의 프로세싱 유닛들로 하여금 본 발명에 따른 방법을 실행하게 하는 명령들을 저장하는 컴퓨터 판독가능 매체에 관한 것이다.
네트워크 인에이블된 디바이스(network enabled device)가 네트워크를 통해 데이터의 비교적 큰 청크(chunk), 예컨대 JPEG 픽쳐 또는 임의의 다른 종류의 데이터를 전송할 때, 세그먼트는 통상적으로, 그것이 물리적인 매체에 전송되기 전에 네트워크 인에이블된 디바이스에 의해 여러 개의 데이터 패킷들로 분리된다. 일 예로서, 이더넷 패킷(Ethernet packet)에서 최대 페이로드 사이즈는 1500 바이트이다. 부가적으로, TCP 및 IP 헤더들과 같은 프로토콜 헤더들은 각각의 데이터 패킷 및 (TCP/IP와 같은) 몇몇 프로토콜 스택들(protocol stacks)에 대해 생성되어야 하고, 하나 또는 수개의 체크섬들(checksums)은 또한, 하나 이상의 체크섬들이 데이터 패킷의 헤더에 저장되는 각각의 데이터 패킷에 대해 연산되어야 한다.
일반적으로, 세그먼트 또는 데이터의 청크(chunk)는 페이로드의 사이즈보다 크다(특히, 세그먼트 사이즈는 예컨대 단일 바이트만큼 작을 수 있음). 종종, 그것은 페이로드 사이즈의 수배이다.
헤더들 및 체크섬들을 포함하는 이들 패킷들을 생성하는 프로세스는 통상적으로 소프트웨어에서 행해진다. 이것은 CPU 성능 및 시스템의 네트워크 속도에 의존하여 상당한 양의 CPU 성능을 사용할 수 있다.
이것을 해소하는 다양한 해결책들은 하드웨어에서 특징들을 구현함으로써 제안된다. 이러한 프로세스들은 또한 종종 (하드웨어) 네트워크 오프로딩으로서 언급된다.
네트워크 오프로딩을 수행하기 위한 여러가지 이용가능한 하드웨어 해결책들이 존재한다. 하드웨어에서 네트워크 오프로딩을 행하는 한 가지 전통적인 방법은 아래와 같은 것으로서 요약될 수 있다:
- 메모리로부터 데이터의 하나의 MTU(Maximum Transmission Unit, 즉 사용된 네트워크 매체 상의 한 패킷의 최대 페이로드 사이즈)를 판독.
- 메모리로부터 판독하는 동안 페이로드를 통해 체크섬을 연산.
- 헤더들을 생성.
- 헤더들 및 페이로드를 포함하는 패킷을 전송.
- 전송하는 동안, 메모리로부터 데이터의 하나의 부가적인 MTU를 판독.
- 세그먼트, 즉 데이터의 청크 내 모든 패킷들이 전송될 때까지 반복.
이 해결책의 단점은, 비교적 느린 접속된 수신 클라이언트들에게 문제들을 야할 수 있는, 매우 빠른 레이트(rate)로 많은 패킷들을 전달할 수 있다는 점이다. 예로서, 비교적 느린 네트워크(예컨대, 10메가비트/초 네트워크)에 접속된 클라이언트에게 큰 세그먼트를 전송하고자 하는 비교적 빠른 네트워크(예컨대, 1기가비트/초 네트워크)에 접속된 디바이스를 고려하자. 이 경우에, 디바이스와 클라이언트 사이의 전송 경로 내 라우터들(routers)은, 클라이언트가 데이터 모두를 판독할 때까지 데이터를 버퍼링해야 한다. 이것은 라우터들에서 버퍼 소모를 야기할 수 있다. 더욱이, 라우터들이 제한된 버퍼 사이즈를 가지며, 또한 다른 전송 경로들에 대해 데이터를 버퍼링하는 것을 필요로 할 수 있으므로, 이것은 데이터 패킷들이 드롭(drop)되게 하고, 그에 의해, 재전송을 요구한다. 패킷 드롭의 가능성은 보다 큰 세그먼트 사이즈들에 따라 증가한다.
통상적으로 소프트웨어에서 구현되는, 이 문제점에 대한 앞에서 공지된 한 가지 해결책은 각각의 목적지에 제한된 수의 패킷들만을 전달하고, 부가적인 데이터 패킷들을 전달하기 전에 승인(ACK)을 대기하는 것을 포함한다. 하지만, 이것은 CPU 사용을 증가시키고, 또한 대기로 인해 데이터 전송 동안 필요한 전체 시간을 지연시킬 수 있다.
예를 들어, US 2006/034176호는 ACK를 사용하는 하드웨어 구현예를 설명한다. 이것의 단점은 ACK의 사용에 의존하는 TCP/IP와 같은 프로토콜들만이 지원될 수 있다는 점이다.
그러므로, 라우터 버퍼 소모 및 드롭되는 데이터 패킷들의 문제점들을 해소할 필요성이 존재한다.
이것은 상이한 목적지들에 패킷들을 인터리빙(interleaving)함으로써 적어도 어느 정도 해소되지만, 패킷들은 동일 또는 유사한 레이트로 인터리빙된다.
특허명세서 US 제7,174,393호는, 가장 큰 다중 패킷 메시지들 및 느린 경로 메시징(slow-path messaging)을 위한 프로토콜 프로세싱을 회피하는 빠른 경로를 제공하는 데이터 통신을 위한 통신 프로세싱 디바이스(CPD)를 개시한다. 네트워크 프로세서는 호스트의 프로토콜 스택(protocol stack)을 포함하는 느린 경로를 따라 또는 호스트의 프로토콜 스택을 바이패스하는 빠른 경로를 따라 프로세싱 메시지들 사이에서 선택한다.
특허명세서 US 제7,167,926호는, 대부분의 메시지들에 대한 프로토콜 프로세싱을 회피하는 빠른 경로를 제공하고, 데이터 전송을 가속하고, 호스트 CPU로부터 시간-집약적 프로세싱 태스크들(time-intensive processing tasks)을 오프로딩하는 데이터 통신을 위한 호스트 컴퓨터와 함께 작동하는 디바이스를 개시한다. 호스트는 빠른 경로 또는 느린 경로 프로세싱을 위한 선택된 메시지를 입증하는(validate) 프로세싱 성능을 갖는다.
특허명세서 US 제6,996,070호는, TCP/IP 프로토콜 프로세싱 동작들을 병렬로 수행하는 상태 머신(state machine)을 포함하는 TCP 오프로드 엔진(TCP Offload Engine: TOE) 디바이스를 개시한다. 3개의 상이한 양태들에서, 그것은 TCP 변수들 및 헤더 값들을 저장하고, 다수의 TCP 상태 변수들을 업데이트하고, DMA 이동(move)을 셋업한다.
본 발명의 목적은 라우터 버퍼 소모 및/또는 데이터 패킷들의 드롭을 회피 또는 최소화하는 방법(및 대응하는 디바이스)을 제공하는 것이다.
또 다른 목적은 세그먼테이션 프로세스(segmentation process)를 위한 CPU 사용을 감소시키는 것이다.
이것은, 전송 유닛에서 제 1 목적지로 데이터 네트워크를 통해 데이터의 제 1 세그먼트를 전송하는 방법에 의해 달성되며, 상기 전송 유닛은 제 1 데이터 전송 레이트를 가지며, 상기 제 1 목적지는 제 1 데이터 수신 레이트를 가지며, 상기 제 1 데이터 전송 레이트는 제 1 데이터 수신 레이트보다 크고, 상기 방법은: 하나 이상의 데이터 패킷들로서 상기 제 1 세그먼트의 적어도 일부를 제 1 목적지에 전송하는 단계로서, 상기 전송 단계는 단지 전송 유닛에서 제 1 목적지로의 방향인, 상기 제 1 목적지에 전송하는 단계와, 적어도 하나 이상의 데이터 패킷들로서 제 2 세그먼트의 적어도 일부를 하나 이상의 부가적인 목적지들에 전송하는 단계로서, 상기 전송 단계는 단지 전송 유닛에서 하나 이상의 부가적인 목적지들로의 방향인, 상기 부가적인 목적지에 전송하는 단계 사이에서 스위칭함으로써 전송 유닛에서 제 1 목적지로 제 1 전송 레이트를 효과적으로 감소시키는 단계를 포함하고, 상기 스위칭은 상기 제 1 세그먼트 및/또는 적어도 상기 제 2 세그먼트가 전송될 때까지 반복된다.
하나 이상의 대기 상태들(wait states)은 제 1 목적지에 전송되는 적어도 상기 제 1 세그먼트의 데이터 패킷들 사이에 삽입될 수 있다.
이 방식에서, 클라언트 또는 목적지로의 패킷 레이트는 감소되고, 반면에, 전송 시스템에 대한 총 패킷 레이트가 유지되며, 그에 의해, 비교적 느린 클라이언트로의 데이터가 풀 레이트(full rate)로 전송되지 않을 것이므로, 패킷 손실 및/또는 라우터 버퍼 소모의 감소된 가능성이 달성된다. 이것은 실질적으로 전체 전송 레이트를 유지하면서 달성된다.
부가적으로, 다중 목적지들에 전달될 때, 모든 목적지들은, 이전 클라이언트에 대해 주어진 세그먼트가 완전히 전송될 때까지 다른 클라이언트들로의 전송이 대기하지 않기 때문에, 초기에 데이터를 얻는다. 이런 식으로 클라이언트들은 수신된 데이터를 초기에 프로세싱하기 시작할 수 있다.
이러한 방법의 장점은, 임의의 프로토콜들에 대한 지원을 가능하게 한다는 점이다. 즉, ACK를 사용하는 프로토콜들뿐만 아니라, ACK를 사용하지 않는 프로토콜들을 지원한다. 예를 들어, UDP를 통한 RTP에 대한 지원이 제공되고, 그것이 상술한 US 제2006/034176호에서 설명되는 ACK 기반의 통신에 비하여 장점이다.
일 실시예에서, 상기 방법은, 스위칭이 행해지기 전에, 상기 제 1 세그먼트가 얼마나 많이 전송되는지를 정의하는 상기 제 1 세그먼트 내의 제 1 위치를 세이브하는 단계 및/또는 상기 제 2 세그먼트가 얼마나 많이 전송되는지를 정의하는 상기 제 2 세그먼트의 위치를 세이브하는 단계, 및 상기 제 1 세그먼트 또는 상기 제 2 세그먼트의 전송이 다시 스위칭될 때, 각각의 세이브된 위치로부터 전송을 재개하는 단계를 추가로 포함한다.
일 실시예에서, 스위칭은 전달 패턴에 따라 행해진다.
일 실시예에서, 전달 패턴은 제 1 목적지의 수신 레이트 및/또는 적어도 하나의 상기 부가적인 목적지들의 수신 레이트에 기초하여 결정된다.
일 실시예에서, 데이터의 적어도 제 1 세그먼트는 상기 전송 유닛의 메모리에 저장되고, 상기 제 1 세그먼트의 데이터는 직접 메모리 액세스 제어기(direct memory access controller)(또는 오프로딩 디바이스)에 의해 상기 메모리로부터 판독되고, 상기 직접 메모리 액세스 제어기와 직접 메모리 액세스 디바이스가 상기 전송 유닛의 중앙 프로세싱 유닛(central processing unit)을 오프로드하는 네트워크 인터페이스를 통해 상기 네트워크에 상기 제 1 세그먼트의 상기 데이터를 또한 공급하는 직접 메모리 액세스 디바이스에 제공된다.
일 실시예에서, 직접 메모리 액세스 디바이스는 상기 직접 메모리 액세스 제어기로부터 상기 직접 메모리 액세스 디바이스에 제공된 데이터에 대한 체크섬을 연산하는 체크섬 연산 유닛(checksum calculation unit)을 포함한다.
일 실시예에서, 2차원 리스트 구조(two-dimensional list structure)는 상기 스위칭을 제어하고, 상기 2차원 리스트 구조는, 메모리 내의 헤더 데이터를 참조하는 적어도 하나의 데이터 디스크립터(data descriptor)에 관련된 제 1 콘텍스트 디스크립터(context descriptor) 및 상기 제 1 세그먼트의 데이터를 참조하는 적어도 하나의 데이터 디스크립터에 관련된 제 2 콘텍스트 디스크립터를 포함하고, 상기 제 2 콘텍스트 디스크립터는 얼마나 많은 바이트들(bytes)의 상기 제 1 세그먼트의 데이터를 스위칭 전에 전달하는지에 대한 표시(representation)를 포함하고, 상기 방법은 상기 헤더 데이터를 얻기 위해 상기 제 1 콘텍스트 디스크립터를 프로세싱하는 단계, 상기 제 1 세그먼트의 데이터를 얻기 위해 상기 제 2 콘텍스트 디스크립터를 프로세싱하는 단계, 및 상기 표시에 따라 많은 데이터 바이트들을 전송하는 단계를 포함한다.
일 실시예에서, 2차원 리스트 구조는 상기 제 1 세그먼트의 전송을 제어하고, 상기 2차원 리스트 구조는, 상기 제 1 세그먼트의 데이터를 참조하는 적어도 하나의 데이터 디스크립터에 관련된 상기 제 1 콘텍스트 디스크립터, 적어도 2개의 데이터 디스크립터들에 관련된 제 2 콘텍스트 디스크립터로서, 각각의 데이터 디스크립터가 두 개의 상이한 목적지들에 대한 헤더 데이터에 관련되는, 상기 제 2 콘텍스트 디스크립터를 포함하고, 상기 방법은, 적어도 상기 제 1 세그먼트의 일부를 얻기 위해 상기 제 1 콘텍스트 디스크립터를 프로세싱하는 단계, 두 개의 상이한 목적지들 중 하나에 대한 헤더 데이터를 얻기 위해 그리고 상기 두 개의 상이한 목적지들 중 나머지 다른 하나에 대한 헤더 데이터를 얻기 위해 상기 제 2 콘텍스트 디스크립터를 프로세싱하는 단계, 상기 제 1 세그먼트의 얻어진 부분을 상기 두 개의 상이한 목적지들 중 하나에 전송하는 단계, 및 상기 제 1 세그먼트의 얻어진 부분을 상기 두 개의 상이한 목적지들 중 나머지 다른 하나에 전송하는 단계를 포함한다.
본 발명은 또한, 전송 유닛에서 제 1 목적지로 데이터 네트워크를 통해 데이터의 제 1 세그먼트를 전송하는 디바이스에 관련되며, 전송 유닛은 제 1 데이터 전송 레이트를 가지며, 제 1 목적지는 제 1 데이터 수신 레이트를 가지며, 제 1 데이터 전송 레이트는 제 1 데이터 수신 레이트보다 크고, 상기 디바이스는: 하나 이상의 데이터 패킷들로서 적어도 상기 제 1 세그먼트의 일부를 제 1 목적지에 전송하는 것으로서, 상기 전송은 전송 유닛에서 제 1 목적지로만의 방향인, 상기 전송하는 것과, 하나 이상의 데이터 패킷들로서 적어도 제 2 세그먼트의 부분을 하나 이상의 부가적인 목적지들에 전송하는 것으로서, 상기 전송은 전송 유닛에서 하나 이상의 부가적인 목적지들로의 방향인, 상기 전송하는 것 사이에서 스위칭함으로써 전송 유닛에서 제 1 목적지로 제 1 전송 레이트를 효과적으로 감소시키도록 적응된 직접 메모리 액세스 디바이스를 포함하고, 상기 스위칭은 상기 제 1 세그먼트 및/또는 적어도 상기 제 2 세그먼트가 전송될 때까지 반복된다.
상기 디바이스의 실시예들은 상기 방법의 실시예들에 대응하고, 동일한 이유들에 대해 동일한 장점들을 갖는다. 상기 디바이스의 이로운 실시예들은 종속청구항들에서 정의되고, 아래의 상세한 설명에서 설명된다.
또한, 본 발명은, 하나 이상의 프로세싱 유닛들로 하여금 본 발명에 따르는 방법을 실행하게 하기 위한 명령들을 저장한 컴퓨터 판독가능 매체에 또한 관련된다.
본 발명의 이들 및 다른 여러 가지 양태들은 도면들에 도시된 예시적인 실시예들을 참조하여 더 명확하고 명백해질 것이다.
본 발명은 라우터 버퍼 소모 및/또는 데이터 패킷들의 드롭을 회피 또는 최소화하는 방법(및 대응하는 디바이스)을 제공하고, 세그먼테이션 프로세스(segmentation process)를 위한 CPU 사용을 감소시킨다.
도 1은 전송 동안 두 개의 세그먼트들을 인터리빙하는 프로세스의 예를 개략적으로 도시하는 도면.
도 2a 내지 도 2c는 본 발명에 따르는 인터리빙 프로세스의 예를 개략적으로 도시하는 도면.
도 3은 일 실시예에 따르는 인터리빙된 다양한 전송들의 트랙을 유지하기 위한 구조의 상면도를 개략적으로 도시하는 도면.
도 4는 인터리빙된 전송의 트랙을 유지하기 위한 구조의 한 가지 특정 예를 개략적으로 도시하는 도면.
도 5는 본 발명에 따르는 인터리빙 프로세스의 일 실시예의 흐름도를 개략적으로 도시하는 도면.
도 6은 메모리로부터 1회만 데이터를 판독하는 동안 여러 명의 클라이언트들에게 동일한 세그먼트를 전달하는 이로운 리스트 구조 예에 대한 실시예를 개략적으로 도시하는 도면.
도 7은 하드웨어 네트워크 오프로딩을 갖춘 전송 유닛 또는 시스템의 개략적인 블록도를 도시하는 도면.
도 8은 DMA 제어기의 일 실시예에 대한 개략적인 블록도를 도시하는 도면.
도 9는 하드웨어 네트워크 오프로딩을 갖춘 전송 유닛 또는 시스템 및 네트워크에 접속된 하나 이상의 클라이언트들을 포함하는 시스템의 개략적인 블록도를 도시하는 도면.
도 10은 전송 유닛에서 수신기들로의 전송의 시그널링 도면.
도 1은 전송 동안 두 개의 세그먼트들(101)을 인터리빙하는 프로세스의 예를 개략적으로 도시한다. 제 1 세그먼트(세그먼트 1)(101) 및 제 2 세그먼트(세그먼트 2)(101), 그리고 각각의 세그먼트들의 패킷들이 시간적으로 네트워크(102)를 통해 어떻게 전송되는지가 도시되어 있다.
예로서, 각각의 세그먼트는 페이로드 데이터의 10킬로바이트를 포함하고, 제 1 세그먼트의 페이로드 데이터는 비교적 느린 제 1 클라이언트(도시되지 않음)에 전달될 것이고, 제 2 세그먼트의 데이터는 비교적 빠른 제 2 클라이언트(도시되지 않음)에 전달될 것이다. MTU는 이 예에서 1킬로바이트이다.
패킷들은 (px = 패킷 대 클라이언트 x): p2 p2 p2 p1 p2 p2 p2 p1 p2 p2 p2 p1 p2 p1 p1 p1 p1 p1 p1 p1로서, 인터리빙된 전송에 의해 전달될 수 있다. 이 방식에서, 클라이언트 1에 대한 패킷 레이트는 전송 시스템에 대한 총 패킷 레이트가 유지되는 동안 감소된다. 전송된 데이터 패킷들의 특정 오더링(ordering)이 적절한 전달 패턴에 따라 행해진다. 클라이언트 1에 대한 패킷 전송 레이트의 감소는, 패킷들이 지속할 수 있는 페이스(pace)로 클라이언트 1에게 전달되기 때문에 데이터 패킷들의 드롭(drop) 및/또는 라우터 버퍼 소모 가능성을 회피하거나 적어도 최소화할 것이다. 또한, 클라이언트 2에 대한 모든 패킷들이 전달될 때, 패킷 전송 레이트를 낮추기 위해 클라이언트 1에 대한 나머지 패킷들 사이에 하나 이상의 대기 상태들을 삽입하는 것이 가능하다(그에 의해, 전송 시스템과 클라이언트 1 사이의 데이터 패킷들의 드롭 및 버퍼 소모를 야기하는 것을 회피하고, 또는 적어도 이것의 감소된 발생 가능성을 제공한다). 대안으로서, 하나 이상의 대기 상태들을 삽입하는 대신에, 하나 이상의 다른 세그먼트들의 데이터 전송은, 예컨대 위의 예에서, 클라이언트에 대한 모든 패킷들이 전달될 때, 시작될 수 있으며, 클라이언트 3(또는 클라이언트 2에 대한 새로운 세그먼트)에 대한 패킷들은 클라이언트 1에 대한 나머지 패킷으로 인터리빙될 수 있다.
패킷들은 (제 1 세그먼트가 우선 전달된다고 가정함) p1 p1 p1 p1 p1 p1 p1 p1 p1 p1 p2 p2 p2 p2 p2 p2 p2 p2 p2 p2로서 전달되는 하드웨어(앞에서 설명된 것과 같음)에서 네트워크 오프로딩을 행하는 하나의 전통적인 방법에 따른다.
프로세스가 하드웨어에서 구현되면, CPU 사용은 하드웨어 오프로드 없는 해결책들에 비하여 극히 감소된다.
부가적인 장점은, 클라이언트 2에 대한 패킷들의 전송이 시작되기 전에 모든 패킷들이 클라이언트 1에 전달될 때까지, 클라이언트 2가 대기해야 하는 경우보다, (제 1 세그먼트가 전통적인 방법에 따라 우선 전달되는 것을 가정함) 클라이언트 2가 초기에 데이터를 얻고, 그에 의해, 보다 초기에 데이터를 프로세스하기 시작할 수 있다는 점이다. 이 장점은 2보다 큰 다수의 클라이언트들에 대해 클 수 있다. 3개의 클라이언트들을 갖는 일 예로서, 클라이언트 3은 통상적으로 클라이언트 1 및 2 둘 모두에 대한 모든 패킷들이 전달될 때까지 대기해야 한다.
도 2a 내지 도 2c는 본 발명에 따른 인터리빙 프로세스의 예를 개략적으로 도시한다. 인터리빙된 전송 동안 시간적으로 3개의 상이한 포인트들에서 3개의 세그먼트들(101)(세그먼트 1, 세그먼트 2, 세그먼트 3)이 도시되어 있다. 3개의 세그먼트들(101)은 3개의 상이한 클라이언트 디바이스들(도시되지 않음)에 전달될 수 있다. 시간적으로 제 1 포인트(도 2a)는 전송이 시작되기 전이다. 시간적으로 제 2 포인트(도 2b)는 전송 동안이고, 시간적으로 제 3 포인트(도 2c)는 전송이 완료된 후이다.
도 2a 내지 도 2c에서, 현재 세그먼트의 표시가 주어지고, 그 세그먼트가 전송된 그것의 데이터를 현재 가지고 있다. 또한, 시간적으로 각각의 포인트에서 각 세그먼트에 대한 검은 화살표는 주어진 세그먼트의 데이터가 지금까지 얼마나 많이 전송되었는지를 나타낸다. 전송된 주어진 세그먼트의 데이터가 얼마나 많이 전송되는지를 나타내는 포인트는 네트워크 활용에 있어서의 감소를 회피하기 위해 완전한 패킷 경계에 위치된다.
DMA(Direct Memory Access) 제어기 및 DMA 디바이스, DMA 클라이언트, 또는 네트워크 오프로딩 유닛(도시되지 않음: 앞으로 DMA 디바이스로만 표기됨)은 아래에서 상세히 설명되는 바와 같이, 메모리 내의 여러 데이터 영역들(예컨대, 각각의 세그먼트에 대한 것)에 액세스를 제공할 것이다. DMA 디바이스는 각각의 데이터 영역 내의 현재 위치에 대한 트랙을 유지한다. 전달 또는 스위칭 패턴(앞으로, 전달 패턴으로만 표기됨)이 얻어지거나 유도되고, 이 점에서의 정보는, 데이터 영역을 스위칭할 때를 그것에 지시하는 DMA 제어기에 주어지고, 그에 의해 (남아 있다면) 또 다른 세그먼트에 대한 데이터를 전송하기 시작한다. 특정한 전달 패턴은, 인터리빙 전송이 아래에 상세히 설명되는 바와 같이 비교적 느린 클라이언트(들)에 대한 전송 레이트를 효과적으로 감소시키므로, 감소된 패킷 손실로 네트워크를 오프로딩할 것이다. 스위칭할 때, DMA 디바이스는 전송될 보다 많은 데이터를 갖는 다음 데이터 영역을 자동으로 선택한다.
도 2a는 어떠한 것이 행해지기 전의 상황을 도시하며, 각각의 세그먼트의 데이터가 얼마나 많이 전송되는지를 지정하는 각각의 표시가 시작하는 각각의 세그먼트에 있고, 즉 데이터는 아직 전송되지 않았다. 세그먼트 1은 이 특정한 예에서, 현재 세그먼트로서 지정된다.
도 2b는 네트워크 오프로딩 및 데이터의 전송이 임의의 시간 양 동안 행해지는 상황을 도시한다. 여기에서, 세그먼트 1의 거의 절반 및 세그먼트 3의 전체 데이터가 네트워크를 통해 그들 각각의 클라이언트 디바이스들 또는 목적지들(앞으로 클라이언트들로서 표기됨)에 전달된다. 현재, 데이터는 현재 세그먼트로서 지정되는 세그먼트 2로부터 전달된다. DMA 제어기가 DMA 디바이스에 의해 스위칭하도록 지시를 받은 후에, 그것은 세그먼트 1(세그먼트 3이 완료되고, 거기에 현재 다른 세그먼트들이 존재하지 않으므로)로부터 전송 데이터로 스위칭할 것이고, 세그먼트 1로부터 데이터의 최종 전송 동안 중단된 것을 픽업(pick up)할 것이다.
스위치는, 특정한 전달 패턴에 의존하여, 세그먼트 2의 데이터 모두가 전송될 때 또는 그 전에 일어날 수 있다. 만약 그 전이면, 세그먼트 2의 현재 위치는, 세그먼트 2로 되돌아 갈 때 전송이 그 포인트로부터 재재될 수 있도록 저장될 것이다.
도 2c는 3개의 세그먼트들의 모든 데이터가 전송되는 상황을 도시한다. 이후, DMA 제어기는 작업이 행해지고, 추가적인 지시들을 대기하는 DMA 디바이스에 시그널링할 것이다.
언급된 바와 같이, 3개의 세그먼트들로부터의 전달 데이터 사이에서 점핑(jumping) 또는 스위칭이 특정한 전달 패턴에 따라 행해진다. 특정한 전달 패턴은 데이터를 수신하는 다양한 클라이언트들의 성능들에 의해 영향을 받을 것이다. 고려할 한 가지 파라미터는 예컨대 상이한 클라이언트들의 네트워크 속도이다. 이것은, 테스트 데이터 패킷을 클라이언트에 전달함으로써 쉽게 결정될 수 있고, 승인을 기다린다. 대안으로, 그것은 또 다른 방식으로 결정된다.
특정 예로서, 클라이언트 1 및 2의 네트워크 (수신) 속도들이 약 2메가바이트/초이고, 클라이언트 3의 (수신) 속도가 약 4메가바이트/초이고, (평균적으로 또는 일반적으로) 세그먼트 3으로부터 (클라이언트 3로) 데이터가 종종 약 2배 전송되고(즉, 세그먼트 3은 현재 세그먼트일 것이다), 전달 패턴은 예컨대: 세그먼트 1로부터 X 데이터를 전송, 세그먼트 3으로부터 X 데이터를 전송, 세그먼트 2로부터 X 데이터를 전송, 세그먼트 3으로부터 X를 전송, 세그먼트 1로부터 X 데이터를 전송 등등일 수 있다.
또 다른 예로서, 두 개의 상이한 클라이언트들에 대해 두 개의 세그먼트들을 취하면, 하나의 클라이언트는 나머지보다 3배 빠르고, 전달 패턴은 예컨대, 세그먼트 1로부터 X 데이터를 전송, 세그먼트 2로부터 3*X 데이터를 전송하고, 이후 모든 데이터가 전송될 때까지 반복한다.
앞에서 언급한 바와 같이, 대기 상태들은 또한, 또 다른 세그먼트가 전송 레이트를 낮추기 위해 완전히 전송될 때 하나 이상의 세그먼트들에 대해 삽입될 수 있고, 그에 의해, 데이터 패킷들의 드롭 및 버퍼 소모를 회피한다. 대안으로, 하나 이상의 부가적인 세그먼트들에 대한 (예컨대 동일 또는 새로운 클라이언트로의) 데이터 전송이 시작될 수 있다.
도 3은 일 실시예에 따르는 인터리빙된 다양한 전송들의 트랙들을 유지하기 위한 구조에 대한 개관(overview)을 개략적으로 도시한다.
데이터 패킷들로서 하나 이상의 클라이언트들에 전달되는 메모리 내에 저장된 데이터로의 액세스를 제어하는 디스크립터들(301,302)을 포함하는 2차원 리스트 구조가 도시되어 있다. 각각의 디스크립터는 그것이 어떤 타입의 데이터인지(즉, 헤더 데이터 또는 페이로드 데이터) 및 그것을 어떻게 처리하는지를 DMA 디바이스에 지시하는 메타데이터를 포함할 수 있다. 디스크립터들은 또한, EOS(end of segment) 및 EOL(end of list)과 같은 다양한 신호 조건들을 시그널링하기 위해 하나 이상의 제어 플래그들(control flags)을 포함할 수 있다. 이러한 리스트 구조들은 일반적으로, SGL들(Scatter-Gather Lists)로서 알려져 있고, 데이터로 하여금 불연속 메모리(discontinuous memory)로부터 페치(fetch)되도록 허용한다.
디스크립터의 한 가지 타입은 예컨대, 실제 데이터 버퍼(303), 즉 메모리 또는 저장 장치 및 여기에서 저장된 데이터가 어떠한 세그먼트에 속하는지에 대한 트랙을 유지하는데 사용되는 데이터 디스크립터(302)이다. 디스크립터의 또 다른 타입은 예컨대, 데이터 디스크립터들(302)을 포함하는 리스트의 상태에 대한 트랙을 유지하도록 사용되는, 본 실시예에 따르는, 콘텍스트 디스크립터(301)이다.
DMA 제어기는 DMA의 제어 하에서, 여러 개의 콘텍스트들 사이에서 스위칭할 수 있다. 각각의 콘텍스트는 단일의 클라이언트에 관련될 수 있으며, 예컨대, 도 3 및 아래의 설명으로부터 이해될 수 있는 바와 같이, 그 단일의 클라이언트에 대한 여러 개의 세그먼트들에 관련될 수 있다. 또한, 여러 개의 콘텍스트들은 동일한 세그먼트에 관련될 수 있으며, 주어진 세그먼트의 헤더 데이터에 관련된 콘텍스트 및 동일한 세그먼트의 페이로드에 관련된 또 다른 콘텍스트에 대해서는 차후에 보자.
각각의 스위칭에서, DMA 디바이스는 리스트의 상태를 세이브하도록(또는 세이브하지 않도록) 지시를 받을 수 있다. EOL이 리스트에 도달할 때, 주어진 콘텍스트는 디스에이블되고(disabled)(또는 선택적으로 제거됨), DMA 디바이스는 그 콘텍스트에 다시 스위칭하지 않을 것이다. DMA 디바이스는 바람직하게는, 하나(또는 그 이상)의 콘텍스트 디스크립터를 기억할 수 있다(통상적으로, 단지 하나만으로 충분하며, 그에 의해 저장 요구사항들을 감소시킴).
도 3에 도시된 특정 예에서, 콘텍스트 1 및 콘텍스트 2가 콘텍스트 디스크립터들(301)이고, 반면에, 데이터 1, 데이터 2, 데이터 3, 및 데이터 4가 데이터 디스크립터들(302)이다.
그러므로, 이 예시적인 리스트 구조는 콘텍스트 디스크립터들(콘텍스트 1 및 콘텍스트 2)에 의해 주어진 바와 같이, 2개의 콘텍스트들을 포함한다.
콘텍스트 1은 버퍼 1 및 버퍼 2(303)를 각각 가리키는 데이터 디스크립터들(데이터 1 및 데이터 3)로써 나타내지는 것으로서 데이터의 한 세그먼트를 식별한다. 세그먼트가 단일의 버퍼에 저장되면, 단지 하나의 데이터 디스크립터가 콘텍스트 1 리스트에 존재한다. 데이터 디스크립터(데이터 3)는 더 이상의 세그먼트들이 콘텍스트 1(EOS)의 일부가 아니고, 데이터 3이 콘텍스트 1(EOL)의 최종 리스트 요소임을 의미하는, 두 개의 세트 플래그들, 즉 EOS 및 EOL을 더 포함한다.
콘텍스트 1만이 단일 데이터 세그먼트에 관련된다는 것은, EOL이 도달되기 전에 리스트(콘텍스트 1)가 단일의 EOS에 관련되거나 그것만을 포함하는 것임을 이해될 수 있다.
유사한 방식으로, 콘텍스트 2는 버퍼 3 및 버퍼 4(303)를 각각 가리키는 데이터 디스크립터들(302)(데이터 2 및 데이터 4)로써 나타내지는 것으로서 두 개의 데이터 세그먼트들을 식별한다. 만약 두 개의 세그먼트들이 단일의 버퍼에 저장되면, 데이터 2 및 데이터 4는 동일한 버퍼(하지만, 두 개의 상이한 위치들에서)를 가리킨다. 데이터 2는 세트 EOS 플래그를 포함하고, 데이터 4는 세트 EOS 및 세트 EOL 플래그를 포함한다.
콘텍스트 2 디스크립터는 더 이상 콘텍스트들이 현재 DMA 디바이스에 의해 프로세스되지 않음을, 즉 현재 전송되는 부가적인 데이터가 존재하지 않음을 의미하는 세트 EOL 플래그를 포함한다.
콘텍스트 2는 2개의 데이터 세그먼트들에 관련된다는 것은, EOL이 도달되기 전에 리스트 콘텍스트 2가 2개의 EOS들을 포함하는 것임이 이해될 수 있다.
가장 간단한 경우에, 풀 스피드(full speed)로 패킷들을 수신할 수 있는(즉, 대기 상태들이 불필요함) 하나의 목적지에 전송되는 하나의 세그먼트만이 존재하고, 리스트 구조는 두 개의 데이터 디스크립터들을 갖는 1차원 리스트를 '붕괴시킨다(collapse)'; 하나가 헤더 데이터를 가리키고, 나머지 하나가 세그먼트의 페이로드 데이터를 가리킨다. 이 상황에서, 인터리브된 전송이 존재하지 않고, 그에 의해, 콘텍스트 디스크립트들이 불필요하다.
도 4는 인터리브된 전송의 트랙을 유지하기 위한 구조의 한 가지 특정 예를 개략적으로 도시한다.
여기에서, 특정한 리스트 구조가 셋업되고, 예로서 콘텍스트들(301)(콘텍스트 1, 콘텍스트 2, 콘텍스트 3, 콘텍스트 4)을 포함한다.
콘텍스트 디스크립터(301)(콘텍스트 1)는 데이터 디스크립터(301)(데이터 1)를 참조하고, 콘텍스트 디스크립터(301)(콘텍스트 2)를 참조한다. 데이터 디스크립터(302)(데이터 1)는 메타데이터로서 EOL 및 EOS 플래그를 포함하고, 주어진 세그먼트(세그먼트 1)에 대해 헤더 데이터(304)를 참조하며, 상기 헤더 데이터는 버퍼 또는 다른 적절한 메모리에 저장된다.
콘텍스트 디스크립터(301)(콘텍스트 2)는 데이터 디스크립터(302)(데이터 2) 및 콘텍스트 디스크립터(301)(콘텍스트 3)를 참조한다. 데이터 디스크립터(302)(데이터 2)는 메타데이터로서 EOL 및 EOS 플래그를 포함하고, 세그먼트(세그먼트 1)에 대해 페이로드 데이터(305)를 참조하며, 상기 페이로드 데이터는 버퍼 또는 다른 적절한 메모리에 저장된다.
콘텍스트 디스크립터(301)(콘텍스트 3)는 데이터 디스크립터(302)(데이터 3) 및 콘텍스트 디스크립터(301)(콘텍스트 4)를 참조한다. 데이터 디스크립터(데이터 3)는 메타데이터로서 EOL 및 EOS 플래그를 포함하고, 세그먼트(세그먼트 2)에 대해 헤더 데이터(304)를 참조하며, 상기 헤더 데이터는 버퍼 또는 다른 적절한 메모리에 저장된다.
콘텍스트 디스크립터(301)(콘텍스트 4)는 데이터 디스크립터(302)(데이터 4)를 참조하고, 콘텍스트 디스크립터(301)(콘텍스트 1)를 다시 참조한다. 데이터 디스크립터(302)(데이터 4)는 메타데이터로서 EOL 및 EOS 플래그를 포함하고, 세그먼트(세그먼트 2)에 대해 페이로드 데이터(305)를 참조하며, 상기 페이로드 데이터는 버퍼 또는 다른 적절한 메모리에 저장된다.
인터리브된 전송을 위한 리스트 구조는 본 발명에 따른 전송 동안 프로세스되고, 어떻게 동작하는지, (DMA 제어기를 통해) 데이터를 어디서 판독하는지, 그것이 어떤 타입의 데이터인지, (필요하다면) 세그먼트를 언제 스위칭하는지 등을 DMA 디바이스에 지시한다.
도시된 예시적인 구조에 대해, 얻어진 프로세스는 예컨대 아래와 같이 요약될 수 있다:
1. 프로세스 콘텍스트 1은 DMA 제어기로 하여금, DMA 디바이스에 대해 세그먼트 1에 속하는 헤더 데이터를 전달하기 시작하게 하며, 네트워크를 통해 그것을 각각의 클라이언트 또는 목적지에 공급할 수 있다.
2. 헤더 데이터가 전송된 후에, DMA 제어기는 콘텍스트 2에 스위칭하도록 DMA 디바이스에 의해 지시를 받는다. 이 스테이지에서, 콘텍스트 1, 즉 헤더 데이터가 다시 필요할지의 여부를 알지 못하는데, 왜냐하면 이것이, 세그먼트 1의 모든 페이로드 데이터가 세그먼트 2에 대한 전송 데이터에 스위칭하기 전에(즉, 콘텍스트 3 및 4에 스위칭), 전송되는지의 여부에 의존하기 때문이다. 그러므로, DMA 제어기는 현재 콘텍스트에 대한 포지션을 저장하는 DMA 디바이스 없이 콘텍스트 2에 스위칭하도록 지시를 받는다. DMA 디바이스는 이 콘텍스트, 즉 콘텍스트 1을 기억하도록 지시를 받는다.
3. 콘텍스트 2에 스위칭한 후에, DMA 제어기는 세그먼트 1의 페이로드 데이터(하나 이상의 MTU들)를 DMA 디바이스에 전달하고, 그것을 네트워크를 통해 각각의 클라이언트 또는 목적지에 공급할 수 있다.
4. 예컨대 특정한 전달 패턴에 의존하여, 임의의 데이터 양을 전달한 후에, DMA 디바이스는 콘텍스트 3에 스위칭하도록 지시를 받는다. 스위칭 시간은 예컨대, 특정한 수의 MTU들이 전송된 후에 결정될 수 있다. 이러한 수는 콘텍스트 디스크립터 메타데이터에 지정될 수 있다. 상기 수는 다양한 콘텍스트들의 전부 또는 일부에 대해 동일한 것일 수 있고, 또는 선호되는 전달 패턴에 의해 특정되는 것으로서 상이할 수 있다. 각각의 전송된 패킷에 대해, 내부 카운터(internal counter)가 증가될 수 있다. 내부 카운터의 값이 콘텍스트 디스크립터에 저장된 값을 매칭할 때, DMA 디바이스는 콘텍스트를 스위칭하고, 내부 카운터를 클리어(clear)하도록 지시를 받을 것이다. 세그먼트 1의 전체 페이로드 데이터가 전송되기 전에 스위칭이 일어나면, DMA 디바이스는, 다시 한번 콘텍스트 2로 되돌아갈 때 그 포인트로부터 전송이 재개될 수 있도록 현재 포지션을 저장한다. DMA 디바이스는 예컨대, 변수들, 필드들 등에서의 포지션 또는 콘텍스트 디스크립터, 즉 콘텍스트 2에서의 포지션을 저장할 수 있다. 예로서, 하나의 필드는 사용된 최종 데이터 디스크립터를 저장하는데 사용될 수 있고, 또 다른 필드는 그 데이터 디스크립터에서 데이터가 얼마나 프로세스되었는지를 저장할 수 있다. 세그먼트의 엔드(end)가 도달되면, 모든 페이로드 데이터가 전송되고, 그러므로 콘텍스트 1 및 콘텍스트 2가 더 이상 불필요하다. 콘텍스트 2에서, EOS 플래그가 세팅된다. 콘텍스트 1을 디스에이블하기 위해, DMA 디바이스는, 앞에서 기억된(위의 스텝 2 참조) 콘텍스트를 재저장하도록 지시를 받고, 그 콘텍스트는 또한 디스에이블된다(세그먼트 1에 대한 헤더 데이터가, 세그먼트 1에 대한 페이로드 데이터가 전송됨에 따라 불필요하게 될 것이기 때문). 콘텍스트 1은 또한, EOS 플래그를 세팅함으로써 디스에이블될 수 있다. 콘텍스트 1 및 콘텍스트 2를 디스에이블한 후에, DMA 디바이스는 이 예에서 콘텍스트 3인 다음 콘텍스트에 스위칭한다.
5. 콘텍스트 3에서, DMA 제어기는 세그먼트 2(세그먼트 1에 대해 위의 스텝 1에 대응함)에 속하는 헤더 데이터를 DMA 디바이스에 전달하고, 이어서 DMA 디바이스는 그것을 네트워크를 통해 각각의 클라이언트 또는 목적지에 공급할 수 있다.
6. 헤더 데이터가 전송된 후에, DMA 디바이스는, 세그먼트 2의 페이로드 데이터가 전송되는 콘텍스트 4에 스위칭한다. 콘텍스트 4에 스위칭하기 전에, 콘텍스트 3의 포지션은 저장되지 않지만, 콘텍스트 3이 기억된다(위의 스텝 2에서와 같음).
7. 콘텍스트 4에 스위칭한 후에, DMA 제어기는 세그먼트 2의 페이로드 데이터(하나 이상의 MTU들)를 DMA 디바이스에 전달하고, 이어서 DMA 디바이스는 그것을 네트워크를 통해 각각의 클라이언트 또는 목적지에 공급할 수 있다.
8. 전달 패턴에 의존하는 임의의 시간에, DMA 디바이스는 다음 콘텍스트에 스위칭하고(이 예에서 콘텍스트 1), 콘텍스트 4에 전송된 데이터의 현재 포지션은, 세그먼트 2의 모든 페이로드 데이터가 전송되기 전에 스위칭이 일어나면, 저장된다. 그렇지 않으면, 콘텍스트 3은 재호출되고, 디스에이블되며, 콘텍스트 4 또한 디스에이블된다(위의 스텝 4에서와 같음).
9. 콘텍스트 1에서, DMA 디바이스는 세그먼트 1에 대한 헤더 데이터를 수신 및 전송하고, 포지션이 세이브되지 않았으므로, 전체 헤더가 다시 전송된다. 헤더 데이터가 전송된 후에, 프로세스는 콘텍스트 2에 스위칭하고, 콘텍스트 1의 포지션은 세이브되지 않는다.
10. 콘텍스트 2에서, 세이브된 포지션(스텝 4에서 세이브된 것)으로부터 전송이 재개되고, 세그먼트 1의 부가적인 페이로드 데이터의 하나 이상의 MTU들이 전송된다.
세그먼트 1 및 세그먼트 2의 모든 페이로드 데이터가 전송될 때까지 프로세스가 지속된다. 언급한 바와 같이, 하나의 세그먼트의 페이로드 데이터가 다른 하나가 완료되기 전에 전송되면, 하나 이상의 대기 상태들이 삽입될 수 있다.
일 실시예에서, 데이터 디스크립터들(302)은 데이터 버퍼의 시작과 끝(즉, 관련된 데이터(헤더 또는 페이로드)가 저장된 주어진 세그먼트의 메모리 위치)을 나타내는 변수를 포함하는 구조를 갖는다. 또한, 데이터 디스크립터들의 구조는 다음 디스크립터에 대한 포인터 및 EOS과 EOL을 나타내기 위해 제어 플래그들을 포함하고, 무엇을 하는지를 DMA 디바이스에 지시하기 위해 메타 데이터 필드 등을 포함할 수 있다.
일 실시예에서, 콘텍스트 디스크립터들의 구조는 데이터 디스크립터 리스트에서 포지션의 트랙을 유지하기 위해 변수를 포함할 수 있다. 콘텍스트가 스위칭될 때, DMA 디바이스(도시되지 않음: 예컨대 도 7 및 도 8 참조)는 콘텍스트 디스크립터에서 포지션을 업데이트하도록 지시를 받을 것이다. 그 다음, 동일한 콘텍스트가 사용되고, DMA 디바이스는 저장된 포지션에서 시작하도록 DMA 제어기에 지시할 것이다.
이 과정은 일반적으로 도 5와 연계하여 도시 및 설명된다.
도 5는 본 발명에 따른 인터리빙 프로세스의 일 실시예에 대한 흐름도를 개략적으로 도시한다. 디바이스 및 방법은 스텝(501)에서 유휴 상태(idle states)에 있다. 데이터가 전송을 위해 이용가능한지에 대한 테스트(502)가 행해진다(중단(interrupt), 요구(request), 타이머(timer) 등에 의해). 아니오(not)이면, 유휴 상태가 재개된다.
데이터가 전송을 위해 이용가능하면, 하나의 MTU의 페이로드를 포함하는 데이터 패킷은 스텝(502)에서 제 1 클라이언트에 전송된다. 즉, 콘텍스트에서 스위칭이 행해져야 하는지의 여부가 스텝(504)에서 체크되고, 즉 또 다른 클라이언트에 대한 또 다른 세그먼트에 스위칭되어야 한다. 스위칭이 행해지는지의 여부는, 각각의 콘텍스트에서 EOL(end-of list)에 도달함으로써 트리거될 수 있거나, (전달 패턴에 따르는) 특정 데이터 양이 전송된다. 앞에서 설명한 바와 같이, 이러한 데이터 양은 예컨대, 콘텍스트 디스크립터 메타데이터에서 특정될 수 있다. 그 수는 다양한 콘텍스트들의 전부 또는 일부에 대해 동일할 수 있고, 또는 바람직한 전송 패턴에 의해 특정된 것에 따라 변할 수 있다.
스위칭이 행해지지 않으면, 동작은 스텝(503)으로 되돌아가고, 계속해서 데이터의 또 다른 MTU를 전송한다.
스위칭이 행해지면, 현재 콘텍스트가 페이로드 데이터 또는 헤더 데이터를 갖는 콘텍스트인지가 스텝(505)에서 체크된다. 그것이 헤더 데이터를 갖는 콘텍스트이면, 모든 관련된 페이로드 데이터가 다음 스텝에서 전달되는지의 여부 또는 세그먼트의 하나 이상의 부가적인 스위치들이 모든 페이로드 데이터가 전송되기 전에 행해질 것인지의 여부에 의존하므로, 다시 필요할지에 대한 정보가 존재하지 않아서, 동작은 차후에 설명되는 바와 같이, 다음 콘텍스트에 스위칭하는 스텝(506)으로 진행한다.
현재 콘텍스트가 페이로드 데이터를 포함하면, 현재 콘텍스트에 대한 EOL이 도달되는지의 여부를 체크하는 스텝(507)에서 또 다른 테스트가 행해진다. 콘텍스트의 EOL에서, 아니오(not) 이면, 현재 콘텍스트는 차후의 사용을 위해 스텝(508)에서 저장되고, 현재 포지션(즉 주어진 세그먼트가 전송될 때까지)은 스텝(509)에서 세이브된다. 스텝(509) 후에, 동작은 차후에 설명될 바와 같이, 다음 콘텍스트에 스위칭하는 스텝(506)으로 진행한다.
EOL이 도달되면, 단지 하나일 수 있는 모든 세그먼트들이 전송되고, 헤더 및 페이로드 데이터는 더 이상 필요하지 않다. 이 경우에, DMA 디바이스는 스텝(510)에서 현재 콘텍스트를 저장하도록 지시를 받고, 콘텍스트는 또한 EOL이 도달되므로 디스에이블된다.
이어서, DMA 디바이스는 초기 시간에 스텝(508) 동안 세이브된 콘텍스트를 재저장하고, 헤더 콘텍스트를 디스에이블하는 스텝(512)에서 그 콘텍스트를 디스에이블하도록 스텝(511)에서 지시를 받는다.
스텝(512) 후에, 동작은 다음 콘텍스트에 스위칭하는 스텝(506)으로 진행한다.
스텝(506) 후에, 다음 콘텍스트가 존재하는지에 대한 테스트(513)가 행해진다. 아니오이면, 즉 모든 콘텍스트들이 적절히 프로세스되어, 모든 세그먼트들이 전송되면, 스텝(501)에서 유휴 상태가 재개된다.
콘텍스트가 존재하면, 그 콘텍스트가 인에이블되는지의 여부가 체크된다(514). 아니오이면, 스텝(506)이 다시 행해져서, 다음 콘텍스트를 선택한다. 새로운 콘텍스트가 인에이블되면, 즉 완전히 처리되지 않으면, 추가적인 데이터를 전송하도록 스텝(503)이 재개된다.
스텝(506) 및 아래 두 개의 테스트들(513,514)은 DMA 디바이스로 하여금, 하나의 인에이블된 것을 찾을 때까지 콘텍스트들을 자동으로 로드(load)하게 하며, 또는 예컨대 디스에이블된 콘텍스트가 임의의 인에이블된 것들을 마주치게(encountering) 하지 않고 디스에이블된 콘텍스트가 재개되는지의 여부를 체크함으로써 모든 콘텍스트들이 디스에이블되는 것이 결정된다. 모든 콘텍스트들이 디스에이블될 때 전송이 완료된다.
도 6은 예컨대 메모리로부터 1번만 데이터를 판독하는 동안, 여러 명의 클라이언트들에게 동일한 세그먼트를 전달하는 이로운 리스트 구조의 실시예를 개략적으로 도시한다. 두 개의 콘텍스트 디스크립터들(301)(콘텍스트 1 및 콘텍스트 2)을 포함하는 2차원 리스트 구조가 도시되어 있으며, 콘텍스트 1은 콘텍스트 2를 참조하고, 콘텍스트 2는 콘텍스트 1을 다시 참조한다.
콘텍스트 1은 주어진 세그먼트(세그먼트 1)의 페이로드 데이터(305)를 포함하는 버퍼를 가리키는 데이터 디스크립터(303)(데이터 1)를 포함한다.
콘텍스트 2는 두 개의 데이터 디스크립터들(303)(데이터2 및 데이터 3)을 포함하고, 여기에서, 데이터 2는 목적지(목적지 1) 또는 제 1 클라이언트의 세그먼트 1에 대한 헤더 데이터(304)를 포함하는 버퍼 또는 다른 적절한 메모리 위치를 가리키며, 데이터 3은 목적지(목적지 2) 또는 제 2 클라이언트의 세그먼트 1에 대한 헤더 데이터(304)를 포함하는 버퍼 또는 다른 적절한 메모리 위치를 가리킨다.
동작 동안, 아래의 시퀀스가 일어날 수 있다:
1. 콘텍스트 1이 액세스되고, DMA 제어기는 버퍼 또는 메모리로부터 세그먼트 1에 대한 페이로드 데이터의 하나 이상의 MTU들(예컨대, 콘텍스트 1의 콘텍스트 디스크립터 메타데이터에서 정의된 것과 같음)을 얻거나 판독한다.
2. DMA 디바이스는 현재 위치를 저장하고, 콘텍스트 2에 스위칭한다.
3. 콘텍스트 2를 프로세싱하여, DMA 제어기는 데이터 디스크립터(데이터 2)를 사용하여 제 1 목적지에 대한 헤더 데이터를 얻는다. 스텝 1에서 얻어진 세그먼트 1에 대한 페이로드 데이터가 목적지 1에 의해 정의되는 바와 같이, DMA 디바이스(도시되지 않음, 예컨대 도 7 및 도 8의 704 참조)에 의해 클라이언트에 전송된다.
4. 데이터 2가 그것의 EOL 플래그 세트를 갖지 않으므로, 제 2 목적지(목적지 2)에 대한 헤더 데이터를 제공하는 데이터 디스크립터(데이터 3)가 프로세스되고, (스텝 1에 제공된 바와 같이) 세그먼트 1에 대해 이미 얻어지고 전송된 페이로드 데이터는 목적지 2에 의해 정의된 바와 같이 DMA 디바이스에 의해 클라이언트에 전송된다. 데이터 3의 EOL 및 EOS 플래그들이 세트되므로, 다음 콘텍스트로의 스위칭이 행해진다. 헤더 정보가 온전히 다시 필요하므로, 포지션의 세이브가 행해지지 않는다. 다음 콘텍스트는 이 예에서, 콘텍스트 1이고, 그 스텝들은 세그먼트 1의 모든 페이로드 데이터가 목적지들 둘 모두에 전송될 때까지 반복된다.
그 프로세스가 2 이상의 목적지들에 데이터를 전달하는 것을 포함할 수 있음을 이해할 것이다. 이것은 각각의 목적지에 적절한 헤더 정보를 가리키는 하나의 데이터 디스크립터만을 요구한다.
도 7은 하드웨어 네트워크 오프로딩(700)을 갖춘 시스템 또는 전송 유닛의 개략적인 블록도를 도시한다. 전송 유닛 또는 시스템은 적어도 하나의 클라이언트가 (예컨대, ad-hoc에)접속되는 네트워크에 접속된다. 네트워크는 예컨대, 로컬, 원격, 배선, 무선 등일 수 있다.
전송될 세그먼트(들)를 포함하는 메모리 및/또는 하나 이상의 버퍼들(701)(단지 메모리로 표기됨)이 도시되어 있으며, 여기에서, 메모리는 전송 유닛 또는 시스템을 동작시키는 CPU(main central processing unit)(702)에 접속된다. 메모리는 또한, 메모리 내의 하나 이상의 데이터 영역들(예컨대, 각각의 세그먼트에 대한 것)에 대한 액세스를 제공하는 DMA 제어기(703)에 접속되고, 각각의 데이터 영역은 앞에서 설명된 바와 같이 인터리빙된 방식으로, 저장된 세그먼트를 포함한다.
DMA 제어기는 DMA 디바이스에 접속되고, DMA 클라이언트 또는 네트워크 오프로더(network offloader)(704)는 본 발명에 따라 DMA 제어기를 제어한다. DMA 디바이스는 그것을 제어하는 CPU에, 및 주어진 네트워크 상에서 데이터의 전송을 인에이블하는 네트워크 인터페이스(705)에 접속된다. 데이터를 전송할 때, 전송 유닛 또는 시스템은 데이터를 전송하기 위해 DMA 디바이스를 셋업하고, DMA 디바이스는 메인 CPU를 오프로드하기 위해 세그먼테이션(segmentation), 스위칭 등을 처리하고, 네트워크 인터페이스에 데이터를 전송하고, 네트워크 인터페이스는 그것을 하나 이상의 클라이언트의 네트워크 인터페이스(들)에 의해 수신되도록 네트워크 상에 전달한다.
메인 CPU는 DMA 디바이스를 구성하기 위해 인터페이스를 가지며, DMA 디바이스는 DMA 제어기를 사용하여 설명되는 바와 같이 전송을 위한 데이터를 판독한다.
DMA 디바이스의 제어 하에 있는 DMA 제어기는 각각의 데이터 영역 내의 현재 위치에 대한 트랙을 유지한다. 전달 패턴이 얻어지거나 유도되고, 이에 대한 정보는 언제 데이터 영역을 스위칭할지를 그것에 지시하고, 그에 의해 또 다른 세그먼트(남아 있다면)에 대한 데이터 전송을 시작하는 DMA 제어기에 제공된다. 특정한 전달 패턴은 인터리빙 전송이 아래에서 상세히 설명되는 바와 같이, 비교적 느린 클라이언트(들)에 대한 전송 레이트를 효과적으로 감소시키므로, 감소된 패킷을 갖는 네트워크를 오프로드할 것이다. 스위칭할 때, DMA 제어기는 앞에서 설명한 바와 같이, DMA 디바이스에 의해 지시를 받기 때문에, 보다 많은 데이터가 전송되는 다음 데이터 영역을 자동으로 선택한다.
DMA 디바이스 및 DMA 제어기는 하드웨어에서 구현될 수 있어, 소프트웨어 기반의 솔루션들에 비하여, 네트워킹 오프로딩 동안 CPU 사용을 극적으로 줄일 수 있다.
도 8은 DMA 디바이스의 일 실시예에 대한 개략적인 블록도를 도시한다.
(TX in) 유닛(803) 및 전송 아웃(transmission out)(TX out) 유닛(804)에서 전송에 접속되는 전송 (TX) 메모리(802)에 접속된 CPU(801)이 도시되어 있다. 체크섬 연산 유닛(805)은 유닛(803)에서 TX에 접속된다. 데이터는 DMA 제어기(도시되지 않음; 예컨대 도 7의 703 참조)로부터 TX in 유닛(803)에 의해 TX 메모리(802)에서 판독되고(동시에, 체크섬 유닛은 판독된 데이터 패킷의 체크섬을 연산함), 이어서, CPU(801)에 의해 프로세스되고, TX out 유닛(804)에 의해 네트워크 인터페이스(도시되지 않음; 예컨대 도 7의 705 참조)에 전달된다.
도 9는 네트워크에 접속된 하나 이상의 클라이언트 및 하드웨어 네트워크 오프로딩을 갖춘 전송 유닛 또는 시스템을 포함하는 시스템에 대한 개략적인 블록도를 도시한다. 주어진 네트워크 상에서의 데이터 전송을 인에이블하는 네트워크 인터페이스(705) 및 DMA 디바이스(704)를 포함하는 하드웨어 네트워크 오프로딩(700)을 갖춘 전송 유닛 또는 시스템, 및 네트워크 인터페이스(705)를 또한 포함하는 하나 이상의 클라이언트들(710)이 도시되어 있다. 클라이언트(들)(710) 및 전송 유닛 또는 시스템은 네트워크(102)를 통해 접속된다.
도 10은 도 7과 연계하여 설명된 전송과 유사한 하드웨어 네트워크 오프로딩을 이용하는 전송 유닛(1000)으로부터의 전송에 대한 시그널링 도면이다. 전송 유닛(100)은 다수의 수신기들(1020, 1022)이 또한 접속된 네트워크에 접속된다. 이들 통신 엔티티들(communicating entities)이 접속되는 네트워크는 예컨대, 로컬, 원격, 배선, 무선 등일 수 있다.
전송 유닛(1000)은 전송될 세그먼트(들)를 저장하는 메모리(1001), 및 DMA 오프로딩 제어기(1004)를 포함한다. 도 10에 개략적으로 도시된, 메모리(1001) 및 DMA 오프로더(1004)는 도 7에서의 상황과 유사하게, 프로세싱 유닛(1002)에 접속된다. 메모리(1001)는 메모리(1001) 내의 하나 이상의 데이터 영역들(예컨대, 각각의 세그먼트에 대한 것)에 액세스를 제공하는 DMA 오프로딩 제어기(1004)에 접속되고, 각각의 데이터 영역은 위에서 설명된 바와 같은, 인터리빙된 방식으로 저장된 세그먼트를 포함한다.
DMA 오프로더는 네트워크 상에서의 데이터 전송을 인에이블하고, 데이터를 전송할 때, 프로세싱 유닛(1002)에서 실행하는 전달자 소프트웨어(sender software)(1010)에 의해 전송 유닛(1000)은 데이터를 전달하도록 DMA 오프로더(1004)를, 그리고 프로세싱 유닛(1002)을 오프로드하도록 세그먼테이션, 스위칭 등을 셋업하며, 하나 이상의 수신기의 1020, 1022 네트워크 인터페이스(들)에 의해 수신되도록 네트워크 상에 데이터를 전송한다.
시그널링 스텝들(signalling steps)에 대한 아래의 시퀀스는 전송 유닛(1000)에서 일어난다:
제 1 시그널링 스텝(1051)에서, 전달자 소프트웨어(1010)는 세그먼트들(S1, S2)에 대해 DMA 오프로더(1004)에 알린다. 실제 데이터가 전송되지 않지만, 세그먼트들에 대한 메타데이터만이 전송된다. 도 10에 도시된 바와 같이, 전달 패턴의 예는 p1p1p2p1로 시작해서, p1로 종료하는 것이다.
제 2 시그널링 스텝(1052)에서, DMA 오프로더(1004)는 세그먼트 1로부터 하나의 MTU를 판독하고, 제 1 수신기(1020)에 데이터를 전달한다. 제 3 시그널링 스텝(1054)에서, DMA 오프로더(1004)는 메모리로부터 세그먼트 1의 제 2 MTU를 판독하고, 제 1 수신기(1020)에 데이터를 전달한다. 제 4 시그널링 스텝(1056)에서, DMA 오프로더는 세그먼트 2에 스위칭하고, 제 1 MTU를 판독한다. 제 1 패킷은 제 2 수신기(1022)에 전달되고, 데이터 전달 동안, DMA 오프로더(1004)는 제 1 세그먼트로 되돌아가고, 제 5 시그널링 스텝(1058)에서 제 3 MTU를 판독 및 전달한다. 이것은, 제 6 시그널링 스텝(1059)에 의해 예시되는 바와 같이, 모든 패킷들이 전달될 때까지 지속되며, ACK 또는 그와 유사한 것의 형태로 수신기들로부터 피드백에 대한 필요성이 존재하지 않는다. 시그널링 스텝들(1052, 1054, 1056, 1058, 1059)에서, MTU의 판독이 수신기들로의 데이터의 전달과 동시에 행해질 수 있음에 유의해야 한다.
특정한 전달 패턴은, 인터리빙 전송이 승인(ACK) 시그널들을 사용함이 없이, 비교적 느린 클라이언트(들)에 대한 전송 레이트를 효과적으로 감소시키므로, 감소된 패킷 손실을 가지며 네트워크를 오프로드할 것이다.
청구범위에서, 괄호들 사이에 위치된 참조 기호들은 청구범위를 제한하는 것으로서 고려되지 않아야 한다. 단어 "포함하는"은 청구범위에 열거된 것들 이외의 요소들 또는 스텝들의 존재를 배제하지 않는다. 요소 앞에 있는 단어 "a" 또는 "an"은 이러한 요소들이 복수개 존재함을 배제하지 않는다.
본 발명은 여러 개의 개별 요소들을 포함하는 하드웨어에 의해, 그리고 적절히 프로그램된 컴퓨터에 의해 구현될 수 있다. 여러 가지 수단을 열거하는 디바이스 청구항에서, 여러 가지 이들 수단들은 그 하드웨어 또는 하드웨어의 동일한 아이템에 의해 구현될 수 있다. 임의의 조치들이 상호 상이한 종속 청구항들에서 언급된다는 사실은, 이들 조치들의 조합이 이롭게 사용될 수 없음을 나타내는 것은 아니다.
701: 메모리 702: CPU
703: DMA 제어기 704: DMA 디바이스
705: 네트워크 인터페이스

Claims (19)

  1. 전송 유닛(700,1000)에서 제 1 목적지(710,1020)로 데이터 네트워크(102)를 통해 데이터의 제 1 세그먼트(101)를 전송하는 방법으로서, 상기 전송 유닛(700,1000)은 제 1 데이터 전송 레이트를 가지며, 상기 제 1 목적지(710,1022)는 제 1 데이터 수신 레이트를 가지며, 상기 제 1 데이터 전송 레이트는 상기 제 1 데이터 수신 레이트보다 큰, 상기 제 1 세그먼트(101)를 전송하는 방법에 있어서,
    상기 제 1 목적지에, 하나 이상의 데이터 패킷들로서 적어도 상기 제 1 세그먼트(101)의 일부를 전송하는 단계로서, 상기 전송은 상기 전송 유닛에서 상기 제 1 목적지로의 방향인, 상기 제 1 세그먼트(101)의 일부를 전송하는 단계와,
    하나 이상의 부가적인 목적지들(710,1022)에, 하나 이상의 데이터 패킷들로서 적어도 제 2 세그먼트(101)의 적어도 일부를 전송하는 단계로서, 상기 전송은 상기 전송 유닛에서 상기 하나 이상의 부가적인 목적지들로의 방향인, 적어도 상기 제 2 세그먼트(101)의 적어도 일부를 전송하는 단계 사이에서,
    스위칭함으로써 상기 전송 유닛(700,1000)에서 상기 제 1 목적지(710,1022)로 상기 제 1 전송 레이트를 효과적으로 감소시키는 단계를 포함하며,
    상기 스위칭은 상기 제 1 세그먼트(101) 및/또는 적어도 상기 제 2 세그먼트(101)가 전송될 때까지 반복되는, 데이터의 제 1 세그먼트 전송 방법.
  2. 제 1 항에 있어서,
    상기 제 1 목적지(710)에 전송되는 적어도 상기 제 1 세그먼트(101)의 상기 데이터 패킷들 사이에 하나 이상의 대기 상태들(wait states)을 삽입하는 단계를 추가로 포함하는, 데이터의 제 1 세그먼트 전송 방법.
  3. 제 1 항 또는 제 2 항에 있어서,
    상기 방법은,
    스위칭이 행해지기 전에, 상기 제 1 세그먼트가 얼마나 많이 전송되는지를 정의하는 상기 제 1 세그먼트(101)에서 제 1 포지션(position)을 세이브하는 단계 및/또는 상기 제 2 세그먼트가 얼마나 많이 전송되는지를 정의하는 상기 제 2 세그먼트의 포지션을 세이브하는 단계, 및 상기 제 1 세그먼트 또는 상기 제 2 세그먼트의 전송이 다시 스위칭될 때, 상기 각각 세이브된 포지션으로부터 전송을 재개하는 단계를 추가로 포함하는, 데이터의 제 1 세그먼트 전송 방법.
  4. 제 1 항 내지 제 3 항 중 어느 한 항에 있어서,
    상기 스위칭은 전달 패턴(sending pattern)에 따라 행해지는, 데이터의 제 1 세그먼트 전송 방법.
  5. 제 4 항에 있어서,
    상기 전달 패턴은 상기 제 1 목적지(710)의 수신 레이트(reception rate) 및/또는 상기 부가적인 목적지들(710) 중 적어도 하나의 수신 레이트에 기초하여 결정되는, 데이터의 제 1 세그먼트 전송 방법.
  6. 제 1 항 내지 제 5 항 중 어느 한 항에 있어서,
    데이터(101)의 상기 적어도 제 1 세그먼트(101)는 상기 전송 유닛(700)의 메모리(701)에 저장되고, 상기 제 1 세그먼트의 데이터는 직접 메모리 액세스 제어기(direct memory access controller: 703)에 의해 상기 메모리(701)로부터 판독되고, 네트워크 인터페이스(705)를 통해 상기 제 1 세그먼트의 상기 데이터를 상기 네트워크(102)에 추가로 공급하는 직접 메모리 액세스 디바이스(704)에 제공되며, 상기 직접 메모리 액세스 제어기(703) 및 상기 직접 메모리 액세스 디바이스(704)는 상기 전송 유닛(700)의 중앙 프로세싱 유닛(central processing unit:702)을 오프로드(offload)하는, 데이터의 제 1 세그먼트 전송 방법.
  7. 제 6 항에 있어서,
    상기 직접 메모리 액세스 디바이스(704)는 상기 직접 메모리 액세스 제어기(703)로부터 상기 직접 메모리 액세스 디바이스(704)에 제공된 데이터에 대한 체크섬(checksum)을 연산하는 체크섬 연산 유닛(805)을 포함하는, 데이터의 제 1 세그먼트 전송 방법.
  8. 제 1 항 내지 제 7 항 중 어느 한 항에 있어서,
    2차원 리스트 구조(two-dimensional list structure)가 상기 스위칭을 제어하고,
    상기 2차원 리스트 구조는:
    메모리(701) 내의 헤더 데이터(304)를 참조하는 적어도 하나의 데이터 디스크립터(302)에 관련되는 제 1 콘텍스트 디스크립터(301), 및
    상기 제 1 세그먼트(101)의 데이터를 참조하는 적어도 하나의 데이터 디스크립터(302)에 관련되는 제 2 콘텍스트 디스크립터(301)로서, 상기 제 2 콘텍스트 디스크립터(301)는 스위칭 전에 상기 제 1 세그먼트(101)의 얼마나 많은 바이트들의 데이터를 전달하는지에 대한 표시(representation)를 포함하는, 상기 제 2 콘텍스트 디스크립터(301)를 포함하고,
    상기 방법은:
    상기 헤더 데이터(304)를 얻기 위해 상기 제 1 콘텍스트 디스크립터(301)를 프로세싱하는 단계, 및
    상기 제 1 세그먼트(101)의 데이터를 얻기 위해 상기 제 2 콘텍스트 디스크립터(301)를 프로세스하고, 상기 표시에 따라 다수 바이트들의 데이터를 전송하는 단계를 포함하는, 데이터의 제 1 세그먼트 전송 방법.
  9. 제 1 항 내지 제 8 항 중 어느 한 항에 있어서,
    2차원 리스트 구조는 상기 제 1 세그먼트(101)의 전송을 제어하고,
    상기 2차원 리스트 구조는:
    상기 제 1 세그먼트의 데이터를 참조하는 적어도 하나의 데이터 디스크립터(302)에 관련되는 제 1 콘텍스트 디스크립터(301), 및
    적어도 2개의 데이터 디스크립터들(302)에 관련되는 제 2 콘텍스트 디스크립터(301)로서, 각각의 데이터 디스크립터(302)는 2개의 상이한 목적지들(710)에 대한 헤더 데이터(304)에 관련되는, 상기 제 2 콘텍스트 디스크립터(301)를 포함하고,
    상기 방법은:
    상기 제 1 세그먼트(101)의 적어도 일부를 얻기 위해 상기 제 1 콘텍스트 디스크립터(301)를 프로세싱하는 단계, 및
    상기 2 개의 상이한 목적지들(710) 중 하나에 대한 헤더 데이터(304)를 얻기 위해 그리고 상기 2 개의 상이한 목적지들 중 나머지 하나에 대한 헤더 데이터(304)를 얻기 위해 상기 제 2 콘텍스트 디스크립터(301)를 프로세스하고, 상기 제 1 세그먼트의 얻어진 일부를 상기 2 개의 상이한 목적지들(710) 중 하나에 전송하고, 상기 제 1 세그먼트의 얻어진 일부를 상기 2 개의 상이한 목적지들(710) 중 나머지 하나에 전송하는 단계를 포함하는, 데이터의 제 1 세그먼트 전송 방법.
  10. 전송 유닛(700,1000)에서 제 1 목적지(710,1020)로 데이터 네트워크(102)를 통해 데이터의 제 1 세그먼트(101)를 전송하는 디바이스(700)로서, 상기 전송 유닛(700,1000)은 제 1 데이터 전송 레이트를 가지며, 상기 제 1 목적지(710,1020)는 제 1 데이터 수신 레이트를 가지며, 상기 제 1 데이터 전송 레이트는 상기 제 1 데이터 수신 레이트보다 큰, 상기 디바이스에 있어서,
    상기 제 1 목적지에, 하나 이상의 데이터 패킷들로서 상기 제 1 세그먼트(101)의 적어도 일부를 전송하는 것으로서, 상기 전송은 상기 전송 유닛에서 상기 제 1 목적지로만의 방향인, 상기 제 1 세그먼트(101)의 적어도 일부를 전송하는 것과,
    하나 이상의 부가적인 목적지들(710,1022)에, 하나 이상의 데이터 패킷들로서 적어도 제 2 세그먼트(101)의 적어도 일부를 전송하는 것으로서, 상기 전송은 상기 전송 유닛에서 상기 하나 이상의 부가적인 목적지들로의 방향인, 적어도 상기 제 2 세그먼트(101)의 적어도 일부를 전송하는 것 사이에서,
    스위칭함으로써, 상기 전송 유닛(700,1000)에서 상기 제 1 목적지(710,1020)로 상기 제 1 전송 레이트를 효과적으로 감소시키도록 적응된 직접 메모리 액세스 디바이스(704,1004)를 포함하는, 디바이스.
  11. 제 10 항에 있어서,
    상기 직접 메모리 액세스 디바이스(704)는 또한, 상기 제 1 목적지(710)에 전송되는 적어도 상기 제 1 세그먼트(101)의 데이터 패킷들 사이에 하나 이상의 대기 상태들을 삽입하도록 적응되는, 디바이스.
  12. 제 10 항 또는 제 11 항에 있어서,
    상기 직접 메모리 액세스 디바이스(704)는 또한, 스위칭이 행해지기 전에, 상기 제 1 세그먼트가 얼마나 많이 전송되는지를 정의하는 상기 제 1 세그먼트(101)에서 제 1 포지션(position)을 세이브하고, 그리고/또는 상기 제 2 세그먼트가 얼마나 많이 전송되는지를 정의하는 상기 제 2 세그먼트의 포지션을 세이브하고, 상기 제 1 세그먼트 또는 상기 제 2 세그먼트의 전송이 다시 스위칭될 때, 상기 각각 세이브된 포지션으로부터 전송을 재개하도록 적응되는, 디바이스.
  13. 제 10 항 내지 제 12 항 중 어느 한 항에 있어서,
    상기 스위칭은 전달 패턴에 따라 행해지는, 디바이스.
  14. 제 13 항에 있어서,
    상기 전달 패턴은 상기 제 1 목적지(710)의 수신 레이트 및/또는 상기 부가적인 목적지들(710) 중 적어도 하나의 수신 레이트에 기초하여 결정되는, 디바이스.
  15. 제 10 항 내지 제 14 항 중 어느 한 항에 있어서,
    상기 디바이스(700)는 데이터의 적어도 제 1 세그먼트(101)를 저장한 메모리(701), 및 상기 메모리(701)로부터 상기 제 1 세그먼트의 데이터를 판독하고, 그것을 상기 직접 메모리 액세스 디바이스(704)에 제공하도록 적응된 직접 메모리 액세스 제어기(703)를 포함하고,
    상기 직접 메모리 액세스 디바이스(704)는 네트워크 인터페이스(705)를 통해 상기 네트워크(102)에 상기 제 1 세그먼트의 상기 데이터를 공급하도록 적응되고, 상기 직접 메모리 액세스 제어기(703) 및 상기 직접 메모리 액세스 디바이스(704)는 상기 전송 유닛(700)의 중앙 프로세싱 유닛(702)을 효과적으로 오프로딩하는, 디바이스.
  16. 제 15 항에 있어서,
    상기 직접 메모리 액세스 디바이스(704)는, 상기 직접 메모리 액세스 제어기(703)로부터 상기 직접 메모리 액세스 디바이스(704)에 제공되는 상기 데이터에 대한 체크섬을 연산하는 체크섬 연산 유닛(805)을 포함하는, 디바이스.
  17. 제 10 항 내지 제 16 항 중 어느 한 항에 있어서,
    상기 디바이스는 상기 스위칭을 제어하기 위한 2차원 리스트 구조를 포함하며,
    상기 2차원 리스트 구조는:
    메모리(701) 내의 헤더 데이터(304)를 참조하는 적어도 하나의 데이터 디스크립터(302)에 관련되는 제 1 콘텍스트 디스크립터(301), 및
    상기 제 1 세그먼트(101)의 데이터를 참조하는 적어도 하나의 데이터 디스크립터(302)에 관련되는 제 2 콘텍스트 디스크립터(301)로서, 상기 제 2 콘텍스트 디스크립터(301)는 스위칭 전에 상기 제 1 세그먼트(101)의 얼마나 많은 바이트들의 데이터를 전달하는지에 대한 표시(representation)를 포함하는, 상기 제 2 콘텍스트 디스크립터(301)를 포함하고,
    상기 직접 메모리 액세스 디바이스(704)는:
    상기 헤더 데이터(304)를 얻기 위해 상기 제 1 콘텍스트 디스크립터(301)를 프로세싱하고,
    상기 제 1 세그먼트(101)의 데이터를 얻기 위해 상기 제 2 콘텍스트 디스크립터(301)를 프로세스하고, 상기 표시에 따라 다수 바이트들의 데이터를 전송하도록 적응되는, 디바이스.
  18. 제 10 항 내지 제 17 항 중 어느 한 항에 있어서,
    상기 디바이스는 상기 제 1 세그먼트(101)의 전송을 제어하기 위한 2차원 리스트 구조를 포함하며,
    상기 2차원 리스트 구조는:
    상기 제 1 세그먼트의 데이터를 참조하는 적어도 하나의 데이터 디스크립터(302)에 관련되는 제 1 콘텍스트 디스크립터(301), 및
    적어도 2개의 데이터 디스크립터들(302)에 관련되는 제 2 콘텍스트 디스크립터(301)로서, 각각의 데이터 디스크립터(302)는 2개의 상이한 목적지들(710)에 대한 헤더 데이터(304)에 관련되는, 상기 제 2 콘텍스트 디스크립터(301)를 포함하고,
    상기 직접 메모리 액세스 디바이스(704)는:
    상기 제 1 세그먼트(101)의 적어도 일부를 얻기 위해 상기 제 1 콘텍스트 디스크립터(301)를 프로세스하고,
    상기 2 개의 상이한 목적지들(710) 중 하나에 대한 헤더 데이터(304)를 얻기 위해 그리고 상기 2 개의 상이한 목적지들 중 나머지 하나에 대한 헤더 데이터(304)를 얻기 위해 상기 제 2 콘텍스트 디스크립터(301)를 프로세스하고, 상기 제 1 세그먼트의 얻어진 일부를 상기 2 개의 상이한 목적지들(710) 중 하나에 전송하고, 상기 제 1 세그먼트의 얻어진 일부를 상기 2 개의 상이한 목적지들(710) 중 나머지 하나에 전송하도록 적응되는, 디바이스.
  19. 하나 이상의 프로세싱 유닛들로 하여금 제 1 항 내지 제 9 항 중 어느 한 항에 따른 상기 방법을 실행하게 하는 명령들(instructions)을 저장한, 컴퓨터 판독가능 매체.
KR1020107017525A 2008-01-08 2008-10-29 감소된 패킷 손실을 갖는 네트워크 오프로딩 KR101275047B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
EP08150092A EP2079203A1 (en) 2008-01-08 2008-01-08 Network offloading with reduced packet loss.
EP08150092.8 2008-01-08
US2511508P 2008-01-31 2008-01-31
US61/025,115 2008-01-31
PCT/SE2008/051228 WO2009088341A1 (en) 2008-01-08 2008-10-29 Network offloading with reduced packet loss

Publications (2)

Publication Number Publication Date
KR20100112154A true KR20100112154A (ko) 2010-10-18
KR101275047B1 KR101275047B1 (ko) 2013-07-30

Family

ID=39431090

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020107017525A KR101275047B1 (ko) 2008-01-08 2008-10-29 감소된 패킷 손실을 갖는 네트워크 오프로딩

Country Status (6)

Country Link
US (1) US8761164B2 (ko)
EP (2) EP2079203A1 (ko)
JP (2) JP5192551B2 (ko)
KR (1) KR101275047B1 (ko)
CN (1) CN101911612B (ko)
WO (1) WO2009088341A1 (ko)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2079203A1 (en) * 2008-01-08 2009-07-15 Axis AB Network offloading with reduced packet loss.
US8481557B2 (en) 2009-04-11 2013-07-09 Array Biopharma Inc. Method of treatment using checkpoint kinase 1 inhibitors
JPWO2010122896A1 (ja) * 2009-04-21 2012-10-25 京セラ株式会社 データ伝送システム、データ伝送方法およびデータ送信装置
CN101932006A (zh) * 2009-06-19 2010-12-29 中兴通讯股份有限公司 数据包发送、接收、传输方法及装置
US8806112B2 (en) * 2011-07-14 2014-08-12 Lsi Corporation Meta data handling within a flash media controller
US9002970B2 (en) * 2012-07-12 2015-04-07 International Business Machines Corporation Remote direct memory access socket aggregation
CN110198203A (zh) * 2019-06-14 2019-09-03 中国人民解放军陆军工程大学 一种控制数据传输速率的方法

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH1168787A (ja) * 1997-08-27 1999-03-09 Chokosoku Network Computer Gijutsu Kenkyusho:Kk パケット・スケジューリング方法
US6434620B1 (en) 1998-08-27 2002-08-13 Alacritech, Inc. TCP/IP offload network interface device
US7174393B2 (en) 2000-12-26 2007-02-06 Alacritech, Inc. TCP/IP offload network interface device
US6788704B1 (en) * 1999-08-05 2004-09-07 Intel Corporation Network adapter with TCP windowing support
US7224671B2 (en) * 2000-09-28 2007-05-29 Force10 Networks, Inc. Method and apparatus for load balancing in network processing device
CA2428325C (en) * 2000-11-29 2011-08-30 Matthew David Walker Transmitting and receiving real-time data
DE10121198A1 (de) * 2001-04-30 2002-11-07 Infineon Technologies Ag Verfahren und Vorrichtung zur Anpassung der Datenrate eines Datenstroms
EP1552408A4 (en) * 2002-08-30 2010-10-06 Broadcom Corp SYSTEM AND METHOD FOR DELAYING TCP / IP INDEPENDENTLY OF A BANDWIDTH DELAY PRODUCT
US7313148B2 (en) * 2002-11-18 2007-12-25 Sun Microsystems, Inc. Method and system for TCP large segment offload with ack-based transmit scheduling
US6996070B2 (en) 2003-12-05 2006-02-07 Alacritech, Inc. TCP/IP offload device with reduced sequential processing
US7383483B2 (en) * 2003-12-11 2008-06-03 International Business Machines Corporation Data transfer error checking
US20050254423A1 (en) * 2004-05-12 2005-11-17 Nokia Corporation Rate shaper algorithm
JP3961000B2 (ja) * 2005-05-26 2007-08-15 株式会社日立コミュニケーションテクノロジー パケット転送装置及びネットワークシステム
JP4347268B2 (ja) * 2005-06-08 2009-10-21 Necアクセステクニカ株式会社 ルータ制御装置、ルータ、ip−vpnシステム、及び、ルータ制御方法
EP2079203A1 (en) * 2008-01-08 2009-07-15 Axis AB Network offloading with reduced packet loss.

Also Published As

Publication number Publication date
JP5192551B2 (ja) 2013-05-08
JP5552522B2 (ja) 2014-07-16
CN101911612A (zh) 2010-12-08
CN101911612B (zh) 2012-12-26
JP2013062854A (ja) 2013-04-04
EP2119148A4 (en) 2010-08-18
US20110007740A1 (en) 2011-01-13
EP2079203A1 (en) 2009-07-15
US8761164B2 (en) 2014-06-24
EP2119148A1 (en) 2009-11-18
JP2011509628A (ja) 2011-03-24
WO2009088341A1 (en) 2009-07-16
KR101275047B1 (ko) 2013-07-30

Similar Documents

Publication Publication Date Title
KR101275047B1 (ko) 감소된 패킷 손실을 갖는 네트워크 오프로딩
US10652147B2 (en) Packet coalescing
US10367922B2 (en) Method and apparatus for sending transmission control protocol TCP data packet and system
KR100973201B1 (ko) 투명 티씨피 오프로드를 위한 방법 및 시스템
US8014287B2 (en) Communications apparatus
KR102061772B1 (ko) 데이터 전송 방법 및 장치
US8953631B2 (en) Interruption, at least in part, of frame transmission
US9930097B2 (en) Transport accelerator systems and methods
US8259728B2 (en) Method and system for a fast drop recovery for a TCP connection
CN102148662B (zh) 一种数据发送速率的调整方法及装置
CN104052684A (zh) 动态适配计算机网络中的最大传输单元大小的方法和系统
CN109218222B (zh) 一种实现发送端调速的方法、装置和系统
JP2015512572A (ja) 肯定応答パケットを処理するための方法、装置、およびシステム
US20220141137A1 (en) Flow rate control method and apparatus
JP5011515B2 (ja) データトラフィックシェーピング方法、装置、および、ワイヤレス機器
CN114615347B (zh) 基于udp gso的数据传输方法、装置、计算机设备和存储介质
CN108737119B (zh) 一种数据传输方法、装置及系统
JP2017139680A (ja) 通信装置及び転送装置の制御方法
US7213074B2 (en) Method using receive and transmit protocol aware logic modules for confirming checksum values stored in network packet
JP6568571B2 (ja) データ転送装置、データ転送方法および通信装置
CN114615348B (zh) 基于udp gso的数据传输方法、装置、计算机设备和存储介质
CN117061071A (zh) 数据传输方法、装置、电子设备及存储介质
JP2015204466A (ja) データ転送装置、データ転送方法および通信装置

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
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: 20160525

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20170526

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20180524

Year of fee payment: 6