KR20180098358A - 다중 경로 전송 설계 - Google Patents

다중 경로 전송 설계 Download PDF

Info

Publication number
KR20180098358A
KR20180098358A KR1020187021415A KR20187021415A KR20180098358A KR 20180098358 A KR20180098358 A KR 20180098358A KR 1020187021415 A KR1020187021415 A KR 1020187021415A KR 20187021415 A KR20187021415 A KR 20187021415A KR 20180098358 A KR20180098358 A KR 20180098358A
Authority
KR
South Korea
Prior art keywords
network
packet
packets
flowlet
data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
KR1020187021415A
Other languages
English (en)
Other versions
KR102072318B1 (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 KR20180098358A publication Critical patent/KR20180098358A/ko
Application granted granted Critical
Publication of KR102072318B1 publication Critical patent/KR102072318B1/ko
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4494Execution paradigms, e.g. implementations of programming paradigms data driven
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L43/00Arrangements for monitoring or testing data switching networks
    • H04L43/08Monitoring or testing based on specific metrics, e.g. QoS, energy consumption or environmental parameters
    • H04L43/0823Errors, e.g. transmission errors
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L43/00Arrangements for monitoring or testing data switching networks
    • H04L43/08Monitoring or testing based on specific metrics, e.g. QoS, energy consumption or environmental parameters
    • H04L43/0852Delays
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/24Multipath
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/72Routing based on the source address
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/74Address processing for routing
    • 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/12Avoiding congestion; Recovering from congestion
    • H04L47/125Avoiding congestion; Recovering from congestion by balancing the load, e.g. traffic engineering
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/25Routing or path finding in a switch fabric
    • H04L61/2007
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L61/00Network arrangements, protocols or services for addressing or naming
    • H04L61/50Address allocation
    • H04L61/5007Internet protocol [IP] addresses
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L65/00Network arrangements, protocols or services for supporting real-time applications in data packet communication
    • H04L65/40Support for services or applications
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/10Streamlined, light-weight or high-speed protocols, e.g. express transfer protocol [XTP] or byte stream
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/16Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/22Parsing or analysis of headers
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/36Software reuse
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • G06F9/4411Configuring for operating with peripheral devices; Loading of device drivers

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Environmental & Geological Engineering (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Small-Scale Networks (AREA)

Abstract

사용자 어플리케이션으로부터 네트워크를 통한 단일 접속을 이용하여 소스 어드레스로부터 목적지 어드레스로 전송될 데이터를 수신하는 단계; 및 통신 프로토콜에 따라 데이터를 복수의 패킷들로 분할하는 단계를 포함하는 방법이 개시된다. 복수의 패킷들의 각각의 패킷에 대해, 복수의 플로우렛들로부터 전송될 상기 패킷에 대한 각각의 플로우렛이 결정되고; 패킷에 대한 상기 결정된 플로우렛에 기초하여, 패킷을 라우팅하기 위해 네트워크의 네트워크 스위치에 의해 사용되는 패킷 내의 필드가 설정되고; 및 네트워크를 통해 전송하기 위해 결정된 플로우렛을 통해 패킷이 송신된다.

Description

다중 경로 전송 설계
데이터 센터와 같은 네트워크 환경에서 한 노드와 다른 노드 간의 데이터 트래픽은 매우 과도할 수 있다. 따라서 'InfiniBand(IB)', 'Gigabit Ethernet' 또는 파이버 채널(fiber channel)과 같은 고속 데이터 연결은 과도한 데이터 트래픽을 처리하도록 설계되었다. 그러나 끊임없이 늘어나는 데이터 양과 연결에 대한 대역폭 및 처리량 요구로 인하여 이러한 고속 데이터 연결에도 과부하(overload)가 걸려 네트워크에 정체(congestion) 현상이 발생할 수 있다. 따라서, 네트워크를 통한 데이터 전송의 처리량을 더 향상시키고, 이용 가능한 네트워크 용량을 더 잘 이용함으로써 네트워크 정체를 회피하는 것이 바람직하다.
본 개시에 따른 다양한 실시 예가 도면을 참조하여 설명 될 것이며, 이하:
도 1은 데이터 센터 환경에 대한 예시적인 네트워크 아키텍처를 도시한다;
도 2는 고성능 계산(high performance computing, HPC) 환경을 도시한다;
도 3은 소스 엔드포인트(source endpoint)와 목적지 엔드포인트(destination endpoint) 간의 'InfiniBand' 네트워크 연결을 도시한다;
도 4는 소스 엔드 포인트와 목적지 엔드 포인트 간의 'InfiniBand' 연결의 큐 쌍(queue pairs, QP)을 도시한다;
도 5는 다-단계 'Clos' 네트워크를 도시한다;
도 6은 데이터 센터 환경에서 'Clos' 네트워크를 도시한다;
도 7은 네트워크 구조(network fabric)의 토폴로지(topology)를 도시한다;
도 8은 소스 엔드포인트와 목적지 엔드포인트 간의 데이터 통신을 위한 다수의 플로우렛(flowlets)을 도시한다;
도 9는 UDP/IP 패킷 헤더를 도시한다;
도 10은 하나의 물리적 포트(physical port)를 통해 네트워크로 다수의 목적지 엔드포인트와 통신하는 소스 엔드포인트의 블록도를 도시한다;
도 11은 다수의 물리적 포트들을 통해 네트워크로 다수의 목적지 엔드포인트와 통신하는 소스 엔드포인트의 블록도를 도시한다;
도 12는 네트워크를 통해 복수의 플로우렛에 의해 두 엔드포인트들 간의 데이터 통신 방법을 나타내는 흐름도이다;
도 13은 네트워크 어댑터(adapter) 장치의 블록도이다;
도 14는 일부 실시 예들에 따라, 하나 이상의 서비스 제공자 컴퓨터들 및/또는 하나 이상의 네트워크들을 통해 연결된 사용자 장치를 포함하는 여기에 기술된 특징들 및 시스템들에 대한 예시적인 아키텍처를 도시한다; 그리고
도 15는 다양한 실시 예들이 구현될 수 있는 환경을 도시한다.
이하의 설명에서, 다양한 실시 예들이 설명 될 것이다. 설명의 목적 상, 실시 예들에 대한 완전한 이해를 제공하기 위해 특정 구성들 및 세부 사항이 설명된다. 그러나, 실시 예가 특정 세부 사항 없이 실시될 수 있음은 또한 당업자에게 명백할 것이다. 또한, 설명된 실시 예를 모호하게 하지 않기 위해 잘 알려진 특징은 생략되거나 단순화 될 수 있다.
본 명세서에서 사용된 바와 같이, 흐름(flow) 또는 데이터 흐름은 일반적으로 관련 데이터 패킷들(packets)의 스트림(stream)을 지칭하고, 경우에 따라 네트워크를 순차적으로 순회한다. 소스 엔드포인트(source endpoint) 상의 사용자 어플리케이션은 사용자 어플리케이션 데이터 스트림을 네트워크를 통해 목적지 엔드포인트(destination endpoint)에 전송하기를 원할 수 있다. 데이터는 하나 이상의 메시지들, 하나 이상의 명령들 또는 하나 이상의 트랜잭션들(transactions) 일 수 있다. 경우에 따라 소스 엔드포인트와 목적지 엔드포인트 각각에 고유한 IP 주소(address)가 있을 수 있다. 이러한 경우, 단일 TCP 또는 UDP 연결에서 소스 IP 주소에서 목적지 IP 주소로 전송되도록 의도된 사용자 어플리케이션 데이터 스트림을 데이터 흐름 또는 흐름이라고 할 수 있다. 일부 다른 경우에는, 여러 개의 엔드포인트들이 IP 주소를 공유할 수 있으며, 그리고 엔드포인트들 사이의 사용자 어플리케이션 데이터 스트림은 한 쌍의 소스 및 목적지 IP 어드레스들 사이의 IP-레벨 데이터 스트림으로 멀티플렉싱(multiplexing) 될 수 있다. 이 경우, 단일 TCP 또는 UDP 연결에서 소스 IP 주소에서 목적지 IP 주소로 전송되도록 의도된 다수의 엔드포인트들로부터의 사용자 응용 프로그램 데이터 스트림을 데이터 흐름 또는 흐름이라고 하며, 소스 IP 주소는 다수의 엔드포인트들에 의해 공유된다. 일부 다른 경우에는, 엔드포인트는 여러 개의 IP 주소들을 가질 수 있고 사용자 어플리케이션 데이터 스트림은 다중 IP 주소들을 사용하여 다중 경로를 통해 전송되도록 의도될 수 있다. 이 경우, 단일 TCP 또는 UDP 연결에서 소스 IP 주소에서 목적지 IP 주소로 전송되도록 의도된 사용자 어플리케이션 데이터 스트림의 각 부분은 데이터 흐름 또는 흐름이라고 지칭될 수 있다.
본 명세서에서 사용된 바와 같이, 경로(path)는 일반적으로 데이터 패킷이 두 개의 IP 주소들 사이에서 네트워크를 통과하는 루트(route)를 지칭한다. 일반적으로 플로우렛은 단일 경로를 통해 전송되는 흐름 또는 데이터 흐름과 관련된 패킷 그룹을 나타낸다.
본 개시의 실시 예들은 데이터 센터 환경과 같은 네트워크 환경에서 다양한 경로들 사이에서 로드(load)를 밸런싱(balancing) 할 수 있고, 데이터 센터, 고-성능 계산(high-performance computing, HPC), 저장 영역 네트워크(storage area network, SAN) 또는 근거리 통신망(local area network, LAN)과 같은 어플리케이션의 네트워크 용량의 보다 효율적으로 활용이 달성될 수 있도록 동일한 비용의 다중 경로(equal cost multipath, ECMP) 라우팅을 지원할 수 있는 고속 데이터 전송을 위한 방법들 및 시스템들을 제공한다.
상기 방법들의 일부 또는 전부는 실행가능 명령들(instructions)로 구성된 하나 이상의 컴퓨터 시스템들의 제어 하에 수행될 수 있으며, 하드웨어 또는 이들의 조합에 의해 하나 이상의 프로세서상에서 집합적으로 실행되는 코드(예를 들어, 실행 가능한 명령들, 하나 이상의 컴퓨터 프로그램들, 또는 하나 이상의 어플리케이션들)로서 구현될 수 있다. 코드는 예를 들어 하나 이상의 프로세서들에 의해 실행 가능한 복수의 명령들을 포함하는 컴퓨터 프로그램의 형태로 컴퓨터-판독가능 저장 매체에 저장될 수 있다. 컴퓨터-판독가능 저장 매체는 비-일시적(non-transitory)일 수 있다.
여기에 개시된 기술들은 데이터 흐름의 일부 패킷에 대해 패킷 헤더 내의 상이한 소스 포트들을 할당하는 것과 같이 데이터 패킷 헤더 내의 필드를 조작(manipulation)함으로써 두 개의 엔드포인트들 또는 두 개의 IP 주소들 사이의 데이터 흐름을 네트워크를 통해 각각 상이한 경로를 취하는 복수의 플로우렛으로 분할(splitting)하는 것을 포함하며, 패킷들이 스위치의 다른 물리적 포트들로 라우팅될 수 있고 다른 IP 주소를 사용하지 않고 스위칭된 네트워크 구조(fabric)을 통해 다른 경로를 사용할 수 있다. 플로우렛들의 수 및 플로우렛 내의 패킷 수는 네트워크의 경로 또는 노드에 과부하(overloading)가 걸리지 않도록 제어 할 수 있습니다. 데이터 흐름 분할은 네트워크 인터페이스 카드 또는 네트워크 어댑터 장치에서 수행될 수 있으므로 사용자 어플리케이션 또는 호스트는 분할을 인식하지 않아도 된다. 패킷은 순서대로 또는 순서를 따르지 않고(out-of-order) 목적지 엔드포인트로 전달될 수 있다. 서로 다른 플로우렛들로부터 목적지 엔드포인트가 수신한 패킷들은 패킷 헤더의 정보를 기반으로 목적지 엔드포인트에서 어플리케이션에 의해 재정렬되거나(reordered) 재구성될(reassembled) 수 있다.
Ⅰ. 고속 네트워크(HIGH SPEED NETWORK)
다음 섹션은 데이터 센터와 같은 예시적인 환경에서 본 개시의 다양한 실시 예들을 설명한다. 여기에 기술된 방법들 및 시스템들은 네트워크 내의 스위치 구조를 통한 데이터 통신을 포함하는 임의의 다른 어플리케이션들에서 사용될 수 있음을 이해할 수 있다.
데이터 센터는 일반적으로 공간(space) 및 다른 자원들(resources)을 효율적으로 사용하기 위해 표준화된 어셈블리들(standardized assemblies)(랙(racks))에 배열된 많은 서버들을 포함한다. 각각의 랙은 참조번호 16, 32, 64 또는 그 이상의 서버들과 같은 복수의 서버들을 포함할 수 있다. 동일한 랙의 서버들과 다른 랙들로부터의 서버들 사이의 상호 연결은 하나 이상의 스위치 구조들을 통해 수행될 수 있다. 스위치 구조는 액세스 계층(access layer), 집합 계층(aggregation layer) 및 코어 계층(core layer)을 포함할 수 있다. 액세스 계층은 동일한 랙(랙 상단 또는 ToR) 또는 행의 단부(end of the row, EoR)에 있는 서버에 직접 연결된 스위치와 같은 장치를 포함할 수 있다. 집합 계층은 액세스 계층 장치들 사이에 연결을 제공하기 위해 액세스 계층 장치들을 집합하는, 스위치들과 같은, 장치들을 포함할 수 있다. 코어 계층은 데이터 센터 내에서 또는 외부 세계와 지리적 위치에서 다수의 집계 계층 장치들을 상호 연결하는 라우터들과 같은 장치들을 포함할 수 있다.
고-성능 계산, 빅 데이터(big data), Web 2.0 및 검색 어플리케이션은 방대한 양의 사용자-생성 데이터를 실시간으로 관리(managing), 이해(understanding) 및 응답(responding)하는 데 의존한다. 더 많은 사용자들이 더 많은 응용 프로그램과 플랫폼을 제공(feeding)함에 따라, 데이터는 더 이상 산술적으로(arithmetically) 증가하지 않으며 기하 급수적으로(exponentially) 증가하고 있습니다. 데이터 증가에 발 맞춰, 데이터 센터들은 데이터 용량과 속도 모두에서 데이터가 액세스되고 분석될 수 있도록 그에 맞춰 성장해야 한다. 오늘날 확장 가능한(scalable) 데이터 센터들은 일반적으로 하드웨어 구성들(컴퓨터 및 저장소의 클러스터)과 소프트웨어 구성들 모두에서 병렬 인프라(infrastructures)를 포함하고, 가장 확장성이 뛰어나고, 에너지-효율적이며, 고성능의 상호 연결 인프라를 채택한다.
도 1은 데이터 센터 환경에 대한 예시적인 네트워크 아키텍처(100)를 도시한다. 네트워크 아키텍처(100)는 복수의 데이터 센터 서버들(102a-102d) 및 다양한 데이터 센터 상호 접속들을 위한 하나 이상의 스위치 구조들을 포함할 수 있다. 예를 들어, 도 1에 도시된 바와 같이, 서버들(102a-102d)은 고성능 계산(high-performance computing, HPC) 클러스터(cluster)(118), 근거리 통신망(LAN)(116) 또는 저장 영역 네트워크(storage area network, SAN)(114)로 또는 이들로부터 데이터를 주고받을 수 있다.
서버들(102a-102d) 각각은 액세스 계층 스위치(104a, 104b, 104c 또는 104d)와 연결될 수 있다. 각각의 액세스 계층 스위치는 데이터가 상이한 입력 포트들에서 들어오고 상이한 출력 포트들로 스위칭될 수 있도록 복수의 물리적 포트들(physical ports)을 가질 수 있다. 액세스 계층 스위치 장애(failure)의 경우 예비 여분(redundancy)을 위해, 데이터 센터 환경의 네트워크 아키텍처에는 예비 여분의 서버들 및 액세스 계층 스위치들(도시 생략)이 포함될 수 있다. 서버들(102a-102d)과 액세스 계층 스위치들(104a-104d) 사이의 통신 경로는 InfiniBand, 데이터 센터 이더넷(Data Center Ethernet, DCE), 기가비트 이더넷(gigabit Ethernet), 피버 채널(fiber channel) 또는 피버 채널 오버 이더넷(fiber channel over Ethernet, FCoE)과 같은 데이터 센터 브리징(data center bridging) 또는 개별 채널들(separate channels)을 지원할 수 있다.
액세스 계층 스위치들(104a-104d)은 집합 계층에서 집합 계층 스위치들과 연결될 수 있다. 다시 말해 스위치 장애가 발생할 경우 예비 여분을 위해 각 네트워크 클라우드에 대해 적어도 두 개의 집합 계층 스위치들을 사용할 수 있다. 예를 들어, 집합 계층 스위치들(106a 및 106b)은, 예를 들어 코어 계층(112)을 통해, 액세스 층 스위치들(104a 및 104b)과 HPC(118) 사이를 라우팅하기 위해 HPC-호환 가능할(HPC-compatible) 수 있다. 액세스 계층 스위치들(104a, 104b)과 집합 계층 스위치들(106a, 106b) 간의 통신 경로는 고속 데이터 전송을 위한 'InfiniBand' 연결들일 수 있다. 집합 계층 스위치(108)는 액세스 계층 스위치(104c)와 SAN(114) 사이에서 데이터를 라우팅하는데 사용될 수 있다. 액세스 계층 스위치(104c)와 집합 계층 스위치(108) 및 SAN(114) 사이의 통신 경로는 피버 채널들(Fiber channels, FCs)일 수 있다. 집합 계층 스위치(110)는 액세스 계층 스위치(104d)와 LAN(116) 사이의 라우팅을 제공할 수 있다. 기가비트 이더넷(GE) 또는 데이터 센터 이더넷은 액세스 계층 스위치(104d)를 집합 계층 스위치(110) 및 LAN(116)과 연결하는데 사용될 수 있다.
HPC 시스템은 기후 연구, 분자 모델링, 물리 시뮬레이션, 암호 해독, 지구 물리학 모델링, 자동차 및 우주 항공 설계, 재무 모델링 및 데이터 마이닝(mining)과 같이 고도로 계산 집약적인 작업을 보다 신속하게 수행할 수 있도록 병렬 처리보다 고급 계산(advanced computation)을 수행한다. 주어진 계산의 실행 시간은 중앙 처리 장치(CPU) 또는 그래픽 처리 장치(GPU) 코어의 수와 그들의 사용 요소, 상호 연결 성능, 효율성 및 확장성 등과 같은 많은 요인에 따라 달라진다. 효율적인 HPC 시스템은 일반적으로 수천 개의 멀티-프로세서 노드들과 고속-저장 시스템 사이에 고-대역폭, 낮은-대기 시간의 연결을 사용한다.
'InfiniBand(IB)'는 고-성능 계산에 사용되는 매우 높은 처리량(throughput)과 매우 낮은 지연 시간(latency)을 갖춘 컴퓨터 네트워킹 통신 표준이다. 이는 컴퓨터들이나 서버들 사이에서 또는 이들 내에서 데이터 상호 연결에 사용될 수 있다. 'InfiniBand'는 서버들과 저장 시스템들 사이의 직접 연결 또는 스위치된 연결로 사용할 수도 있다. 제로-카피(zero-copy) 및 RDMA(Remote Direct Memory Access)와 같은 'InfiniBand'의 기능을 사용하면 호스트 프로세서를 사용하지 않고도 송신자의 메모리에서 수신자의 메모리로 데이터를 직접 전송하여 프로세서 오버헤드(overhead)를 줄일 수 있습니다. IB 인터페이스는 'InfiniBand'와는 다른 저-수준 인프라를 사용하고 'InfiniBand'보다 확장성이 뛰어난 RoCE(RDMA over Ethernet)에서도 사용될 수 있다.
'InfiniBand' 아키텍처는 프로세싱 노드, 저장 노드 및 I/O 노드를 상호 연결하기 위한 스위치된 네트워크 구조를 정의한다. 'InfiniBand' 네트워크는 스위치들, 호스트 채널 어댑터들(Host Channel Adapters, HCAs) 또는 대상 채널 어댑터들(target channel adapters, TCA)과 같은 어댑터들 및 통신 링크들을 포함할 수 있다. 통신을 위해 'InfiniBand'는 여러 가지 클래스의 전송 서비스들(신뢰할 수 있는(reliable) 연결, 신뢰할 수 없는 연결, 신뢰할 수 있는 데이터그램(datagram) 및 신뢰할 수 없는 데이터그램)을 지원한다.
도 2는 'InfiniBand' 구조(210)를 사용하는 고-성능 계산(HPC) 환경(200)을 도시한다. 'InfiniBand' 구조(210)는 직렬 포인트-투-포인트 링크(serial point-to-point links)의 스위치된 구조 아키텍처를 기반으로 하며, 'InfiniBand' 링크들은 주로 서버들 또는 프로세서 노드들에서 사용되는 호스트 채널 어댑터들(HCA) 또는 주로 저장 서브시스템들(subsystems) 또는 I/O 섀시들(chassis)에서 사용되는 목표 채널 어댑터(TCA) 중 하나에 연결될 수 있다. 도 2에 도시된 바와 같이, 'InfiniBand' 구조(210)는 팻-트리 네트워크(fat-tree network) 또는 Clos 네트워크와 같은 계층화된 네트워크에 배치 될 수 있는 복수의 스위치들(204a-204d)을 포함한다. 스위치들(204a-204d)은 복수의 노드들(202a-202h)에 연결될 수 있고 임의의 두 노드들 사이에 다중 경로들을 제공할 수 있다. 경우에 따라, 두 노드들 사이의 경로의 수는 1000개 이상, 10,000개 이상, 100,000개 이상 또는 1,000,000개 이상일 수 있다. 노드들(202a-202h)은 호스트 시스템들, 프로세서 노드들, 저장 서브시스템들, 및 I/O 섀시들의 임의의 조합일 수 있다. 'InfiniBand' 구조(210)는 또한 다른 'InfiniBand' 서브넷(subnet), LAN, 광역 네트워크(WAN) 또는 인터넷과 같은 다른 네트워크(208)와의 연결을 위한 하나 이상의 라우터를 포함할 수 있다.
상호 접속된 스위치들(204a-204d) 및 라우터(206)는, 존재한다면, 스위치 구조, 구조, 네트워크 구조, 또는 단순히 네트워크로 지칭될 수 있다. "구조" 및 "네트워크"라는 용어는 본 명세서에서 서로 바꿔 사용될 수 있다.
'InfiniBand' 또는 RoCE 동작(operation)은 통신 하드웨어에서 실행될 명령을 대기열(queue)에 넣을 수 있는 기능을 기반으로 한다. 송신 동작을 위한 작업 대기열(work queue)과 수신 동작을 위한 작업 대열이 있을 수 있다. 송신 대기열은 요청자의 메모리와 수신자의 메모리 사이에 데이터가 전송되는 방법을 결정하는 명령을 포함할 수 있다. 수신 대기열은 수신된 데이터를 어디에 저장할 지에 관한 명령을 포함할 수 있다. 요청이 제출되면, 해당 명령은 선입 선출(first in first out, FIFO)과 같은 순서로 실행될 수 있는 적절한 작업 대기열에 배치된다.
호스트 채널 어댑터는 로컬 채널 인터페이스를 나타낼 수 있다. 채널 인터페이스는 'InfiniBand' 서비스를 호스트에 제공하는 하드웨어, 펌웨어 및 소프트웨어를 포함할 수 있다. 송신 동작의 경우, 채널 어댑터는 작업 유형을 해석하고, 메시지를 작성하고, (필요한 경우) 이를 여러 패킷들로 분할하고, 라우팅 정보를 추가하고, 포트 논리(port logic)로 패킷들을 보낸다. 포트 논리 구조는 구조를 통해 링크들을 걸쳐 패킷들을 그 목적지까지 전송하는 것을 담당한다. 패킷들이 목적지에 도착하면 수신 포트 논리가 패킷의 유효성을 검사하고, 채널 어댑터가 수신 대기열의 목적지에 수신된 패킷을 넣고 처리한다. 요청된 경우, 채널 어댑터는 확인(ACK)을 생성하고 ACK를 소스 호스트로 되돌려 보낼 수 있다.
송신 작업 대기열(SQ)과 수신 작업 대기열(RQ)을 쌍으로 연결하여 통신-대기열 쌍(QP)에 대한 고유한 엔티티를 생성할 수 있다. QP는 어플리케이션들과 장치들 사이의 직접 메모리-대-메모리 전송을 통해 통신이 이루어지는 메모리 기반 추상화(abstraction)이다. 어플리케이션은 대기열 쌍을 공유하지 않는다. QP는 HCA의 호스트 측에서 구현되고 양방향성인(bi-directional) 메시지 전송 엔진(message transport engine)일 수 있다. 사용자 또는 어플리케이션의 어댑터 자원을 전용하여(dedicate) 데이터 송수신 작업을 위해 커널을 바이패스(bypass)하는데 사용할 수 있다. QP의 송신 대기열 및 수신 대기열은 작업 대기열 요소(WQE)의 메시지를 버퍼링하고 HCA에 전달하는데 사용된다. 각 QP는 채널 어댑터에 의해 할당된 대기열 쌍 번호(QPN)를 포함한다. QPN은 채널 어댑터 내의 QP를 고유하게 식별한다.
도 3은 소스 엔드포인트(source endpoint)(302a)와 목적지 엔드포인트(destination endpoint)(302b) 사이의 'InfiniBand' 네트워크 연결의 블록 다이어그램(300)을 도시한다. 소스 엔드포인트(302a)는 복수의 어플리케이션들(304a), 커널(306a) 및 네트워크 인터페이스 카드(NIC) 또는 어댑터(308a)를 포함할 수 있다. 어플리케이션(304a) 각각은 송수신될 메시지를 저장하기 위해 그와 관련된 버퍼(310a)를 포함할 수 있다. 유사하게, 목적지 엔트포인트(302b)는 복수의 어플리케이션들(304b), 커널(306b), 및 네트워크 인터페이스 카드(NIC) 또는 어댑터(308b)를 포함할 수 있다. 어플리케이션(304b) 각각은 송수신될 메시지를 저장하기 위해 그와 관련된 버퍼(310b)를 포함할 수 있다. QP는 'InfiniBand' 구조(350)를 통해 소스 엔드포인트(302a) 상의 어플리케이션(304a)과 목적지 엔드포인트(302b)상의 어플리케이션(304b) 사이에 생성될 수 있다.
QP가 생성된 후, 원격 데이터 메모리 액세스(RDMA)를 사용하여 소스 엔드포인트(302a)로부터 목적지 엔드포인트(302b)로 메시지가 전송될 수 있다. RDMA를 사용하면 InfiniBand 구조의 상의 서버가 다른 서버의 메모리에 직접 액세스할 수 있다. RDMA의 적용 예는 데이터베이스 서버 클러스터(cluster)이다. 데이터베이스 서버 클러스터는 그의 핵심 기능에 RDMA 에이전트(agent)를 추가 할 수 있으며, 이는 서로 다른 노드들에서 실행되는 두 개의 데이터베이스 인스턴스들이 모든 커널-수준 통신 작업을 바이패싱하여 서로 직접 통신 할 수 있게 하고, 따라서 데이터가 영구 저장소에서 클러스터 노드들의 RAM 메모리로 복사되는 횟수를 줄인다. RDMA 동작은 로컬 버퍼, 피어 버퍼(peer buffer)의 어드레스, 및 원격 피어 버퍼의 조작을 위한 액세스 권한을 지정할 수 있다.
도 4는 소스 엔드포인트 상의 클라이언트 어플리케이션 또는 프로세스(402a)와 목적지 엔드포인트 상의 원격 어플리케이션 또는 프로세스(402b) 사이의 'InfiniBand' 연결 내의 대기열 쌍을 도시한다. 'InfiniBand'는 실행 작업 대기열(execution work queues)을 사용하여 소프트웨어 클라이언트들로부터 트래픽 제어를 오프-로드(off-load)한다. 작업 대기열들은 클라이언트에 의해 시작된 다음 'InfiniBand'가 관리하도록 남겨 둔다. 장치들 사이의 각 통신 채널에 대해, 작업 대기열 쌍(WQP)이 각 엔드(end)에 할당될 수 있다. 예를 들어, 클라이언트 프로세스(402a)는 트랜잭션을 작업 대기열 엔트리 또는 요소(work queue entry or element, WQE) (404a)에 배치할 수 있으며, QP(410a)의 송신 대기열(416a)로부터 소스 채널 어댑터(408a)에 의해 처리되고 목적지 엔드포인트의 원격 프로세스(402b)로 전송된다. 송신 대기열(416a)의 데이터는 전송 엔진(transport engine)(412a)에 의해 처리될 수 있고 소스 채널 어댑터(408a)의 포트(414a)를 통해 'InfiniBand' 구조(450)로 전송될 수 있다. 그 다음에, 데이터는 목적지 채널 어댑터(408b)에 의해 포트(414b)를 통해 수신되고, 전송 엔진(412b)에 의해 처리되고 수신 대기열(418b)에 저장될 수 있다. 목적지 엔드포인트가 응답할 때, 목적지 채널 어댑터(408b)는 완료 대기열 엔트리 또는 이벤트(completion queue entry or event, CQE)(406a)를 통해 상태를 클라이언트 프로세스(402a)로 반환한다. 소스 엔드포인트는 다수의 WQE를 포스팅할 수 있고, 소스 채널 어댑터(408a)는 통신 요청들 각각을 처리할 수 있다. 소스 채널 어댑터(408a)는 각각의 WQE에 대한 상태를 적절하게 우선 순위가 정해진 순서로 제공하기 위해 완료 대기열 엔트리(CQE) (406a)를 생성할 수 있다. 이를 통해 트랜잭션이 처리되는 동안 소스 엔드포인트가 다른 활동을 계속할 수 있다.
유사하게, 원격 프로세스(402b)는 WQE(404b)에 트랜잭션을 배치할 수 있으며, QP(410b)의 전송 대기열(416b)로부터 목적지 채널 어댑터(408b)에 의해 처리되고 소스 엔드포인트의 클라이언트 프로세스(402a)로 전송된다. 송신 대기열 내의 데이터(416b)는 전송 엔진(412b)에 의해 처리될 수 있고 목적지 채널 어댑터(408b)의 포트(414b)를 통해 'InfiniBand' 구조(450)로 전송될 수 있다. 그 후, 데이터는 소스 채널 어댑터(408a)에 의해 포트(414a)를 통해 수신되고, 전송 엔진(412a)에 의해 처리되어 수신 대기열(418a)에 입력될 수 있다. 소스 엔드포인트는 CQE(406b)를 통해 원격 프로세스(402b)로 상태를 반환(return)함으로써 응답할 수 있다.
'InfiniBand' 구조(450)는 도 2에서 설명된 구조(210)와 같은 구조일 수 있다. 스패닝-트리 프로토콜(spanning-tree protocol) 또는 레이어-3로 라우팅된 코어 네트워크(layer-3 routed core networks)를 사용하여 구축된 네트워크에서 일반적으로 단일 "최상의 경로(best path)"는 대체 경로들(alternative paths)의 집합에서 선택된다. 모든 데이터 트래픽은 "최상의 경로"가 정체되어 패킷이 드랍(drop)될 때까지 "최상의 경로"를 취한다. 토폴로지 알고리즘(topology algorithm)은 덜 바람직한 것으로 간주하거나 또는 루프를 형성하지 못하도록 제거될 수 있기 때문에 대체 경로는 활용되지 않는다. 여전히 루프가 없는(loop-free) 토폴로지를 유지하면서 모든 사용 가능한 링크들을 활용하면서 스패닝-트리를 사용하지 않도록 마이그레이션(migrateion)하는 것이 바람직하다.
수년 동안 Clos 또는 "팻-프리(fat-tree)" 네트워크가 널리 사용되었다. Clos 네트워크는 다-단계 스위칭 네트워크이다. 이러한 네트워크의 장점은 작은 크기의 스위치들만을 사용하여 많은 수의 입출력 포트를 연결할 수 있고 네트워크를 쉽게 확장할 수 있다는 것이다. 모든 단계에서 스위치들을 구성하여 포트들 사이의 이분 매칭(bipartite matching)을 만들 수 있습니다.
도 5는 3-단계(3-stage) Clos 네트워크(500)의 예를 도시한다. Clos 네트워크(500)는 r n Х m 진입(ingress) 단계 크로스바(crossbar) 스위치들(502a-502d), m r Х r 중간 단계 크로스바 스위치들(504a-504e), 및 r m Х n 출력(egress) 단계 크로스바 스위치들(506a-506d)을 포함한다. 도 5에서, n은 r 진입 단계 크로스바 스위치들(502a-502d) 각각의 입력 포트들의 수를 나타내며, m은 r 진입 단계 크로스바 스위치들(502a-502d) 각각의 출력 포트들의 수를 나타낸다. 각 진입 단계 스위치와 각 중간 단계 스위치 사이에 하나의 연결이 있고, 각 중간 단계 스위치와 각 출력 단계 스위치 사이에 하나의 연결이 있다. m ≥ n 인 경우, Clos 네트워크는 크로스바 스위치와 같이 비-차단(non-blocking)일 수 있다.
도 6은 데이터 센터에서 사용되는 폴딩(polding)된 Clos 네트워크(600)의 예를 도시한다. Clos 네트워크(600)는 탑-오브-랙(top-of-rack, ToR) 스위치들(604a 및 604b) 및 스파인(spine) 스위치들(606)을 포함한다. ToR 스위치들(604a 및 604b)은 리프(leaf) 스위치들이고, 스파인 스위치들(606)에 연결된다. 리프 스위치들(604a)은 도 5의 크로스바 스위치들(502a-502d)과 같은 진입 스위치들로 지칭될 수 있고, 리프 스위치들(604b)은 도 5의 크로스바 스위치들(506a-506d)와 같이 출력 스위치들로 지칭될 수 있다. 리프 스위치들(604a 및 604b)은 복수의 서버들(602)에 접속될 수 있다. 스파인 스위치들(606)은 리프 스위치들(604a 및 604b)에 연결된다. 리프 스위치들(604a, 604b)은 서로 직접 연결되지 않지만 스파인 스위치들(606)을 통해 간접적으로 연결된다. 이 스파인-리프 아키텍처에서, 리프 스위치로부터의 업 링크들의 수는 스파인 스위치들의 수와 동일하며, 스파인 스위치로부터의 다운 링크의 수는 리프 스위치들의 수와 동일하다. 총 연결 수는 리프 스위치들의 수에 스파인 스위치들의 수를 곱한 값, 예를 들어, 도 6의 8Х6= 48개의 링크들이다.
Clos 네트워크(600)에서 모든 하위-티어(lower-tier) 스위치(리프 스위치)는 풀-메시 토폴로지(full-mesh topology)의 상위-티어 스위치들(등뼈 스위치) 각각에 연결된다. 하위-티어 스위치들과 그들의 업링크들(uplinks) 사이에 초과신청(oversubscription)이 발생하지 않는 경우, 비-차단 아키텍처가 성취될 수 있다. 동일하고 저렴한 스위치들의 집합을 사용하여 트리(tree)를 생성하고 높은 성능과 회복력(resilience)을 얻을 수 있고, 그렇지 않으면 비용이 더 많이들 것이다.
Clos 네트워크(600)는 보다 큰 네트워크를 구축하기 위해 쉽게 확장될 수 있다. 예를 들어, 도 7은 코어 스위치들 또는 라우터들(702)의 부가적인 계층을 사용하여 둘 이상의 Clos 네트워크들(600)을 연결함으로써 데이터 센터 환경에서의 다-단계 Clos 네트워크(700)를 도시한다. Clos 네트워크(700)는 리프 또는 액세스 계층(704), 스파인 또는 집합 계층(706) 및 코어 계층(708)을 포함할 수 있다.
도 6 또는 도 7에 도시된 바와 같이 Clos 네트워크 내의 경로들은 트래픽 로드가 스파인 또는 코어들 스위치 사이에 고르게 분포될 수 있도록 라우팅 기술을 사용하여 스위치들 또는 라우터들의 포트를 선택함으로써 선택될 수 있다. 스파인 또는 코어 스위치들 중 하나에 장애가 발생하면, 데이터 센터의 전반적인 성능이 약간 저하될 수 있다.
Ⅱ. 다중경로 라우팅(Multipath Routing)
라우팅은 네트워크에서 소스 노드에서 목적지 노드로의 데이터 전송을 위한 최상의 경로를 선택하는 프로세스이다. 라우팅 기술의 예는 ECMP (Equal Cost Multipath) 라우팅이다. ECMP는 실질적으로 동등하게 분산된 링크 로드 공유 또는 로드 밸런싱을 달성하기 위해 동일한 비용의 다중 경로들을 따라 패킷을 라우팅하기 위한 포워딩 메커니즘(forwarding mechanism)이다. ECMP는 네트워크에서 소스 노드에서 목적지 노드까지 다수의 동일한 비용 경로들을 사용할 수 있게 한다. 장점은 혼잡을 피하고 대역폭을 늘리기 위해 데이터 트래픽을 전체 네트워크에보다 고르게 분산시킬 수 있다는 것이다. ECMP는 또한 링크 장애 발생 시 트래픽 흐름이 트래픽 손실 없이 다른 동일한 비용 경로로 신속하게 전송될 수 있기 때문에 보호 방법이기도 하다. ECMP를 사용하면 동일한 비용 경로들이 라우터의 포워딩 계층의 로드 밸런싱 테이블에 저장될 수 있다. 링크 장애가 감지되면, 데이터 트래픽은 1초 이내(within a sub-second)에 트래픽의 심각한 손실 없이 나머지 평등 경로 사이에 분산 될 수 있습니다.
ECMP는 특별한 구성을 사용하지 않는다. OSPF(open shortest path first) 기술과 같은 최단 경로 우선(shortest path first, SPF) 기술을 사용하여 동등한 비용의 경로들을 계산할 수 있으며 이러한 경로들을 포워딩 계층에 알릴 수 있다. 라우터는 먼저 데이터 흐름을 식별하는 패킷 헤더 필드에 대해 16 비트 CRC(Cyclic Redundancy Check)와 같은 해시(hash)를 수행하여 키(key)를 선택할 수 있다. 네트워크의 다음-홉(next-hop)은 키 공간(key sapce)에서 고유한 영역을 할당 받을 수 있다. 라우터는 키를 사용하여 어떤 영역이 사용되고 결정하고 다음-홉(및 스위치 또는 라우터의 다음-홉에 연결된 포트)을 사용할 것인지 결정할 수 있다.
ECMP는 나가는(outgoing) 인터페이스의 대역폭의 차이를 고려하지 않는다. 또한, 데이터 센터 환경에서의 현재 ECMP 라우팅의 경우, 해시 기능(hash function)으로 대부분의 또는 모든 데이터 센터 노드들이 동일한 흐름에 대해 동일한 해시 값(hash value)을 얻게 된다. 따라서 동일한 경로가 데이터 센터 환경의 흐름에서 패킷들을 라우팅하는 데 사용될 수 있으며, 다른 대체 경로는 충분히 활용되지 않을 수 있다.
다중 경로 라우팅은 네트워크 성능을 향상시키고 내결함성(fault tolerance)을 제공하기 위한 메커니즘이다. 'InfiniBand'의 'MPTCP(MultiPath TCP)' 및 'Multipathing'과 같이, 네트워크에서 로드 균형 조정을 위한 여러 가지 다중 경로 기술들이 있다.
TCP/IP에서 패킷들은 일반적으로 순서대로 전달된다. 따라서, 서로 다른 경로들의 지연이 다를 수 있으므로, 메시지를 여러 패킷들로 분할하고 순서대로 전달하면서 다른 경로의 TCP/IP를 사용하여 패킷들을 보내는 것은 어렵다. MPTCP는 어플리케이션에 대한 일반 TCP 인터페이스인 것으로 보이는 TCP 수정을 통해 여러 IP-어드레스들/인터페이스들을 동시에 사용하고, 실제로 여러 하위흐름들(subflows)에서 데이터를 분산시킨다. 이점으로는 리소스(resource) 사용률 향상, 처리량 향상 및 실패에 대한 원활한 대응 등이 있다. 다중 경로 TCP는 특히 무선 네트워크 환경에서 유용하다. 스마트폰은 셀룰러 네트워크, Wi-Fi 네트워크 및 블루투스(Bluetooth) 또는 USB 포트를 통한 다른 네트워크에 대한 별도의(separate), 동시의(simultaneous) 인터페이스를 가질 수 있다. 이러한 네트워크들 각각은 원격 호스트에 연결할 수 있는 방법을 제공한다. 처리량의 향상 외에도, 사용자가 네트워크 범위 안팎으로(in or out) 이동할 때, 엔드-투-엔드(end-to-end) TCP 연결을 방해하지 않으면서, 링크들이 추가되거나 드랍(drop)될 수 있다. 그러나 MPTCP의 각 하위 흐름은 다른 소스 또는 목적지 IP 어드레스를 사용할 수 있다.
'InfiniBand'의 다중 경로 지정은 여러 개의 로컬 식별자(local identifier, LID)들을 엔드포인트에 할당하여 수행될 수 있다. MPI(Message Passing Interface)와 같은 상위-레벨 프로토콜들은 여러 경로들에서 데이터를 스트라이핑(striping) (메시지를 여러 덩어리로 나눔)하고 보내는 방식으로 여러 LID들을 활용할 수 있다(MPI 멀티레일링(multirailing)이라고 지칭됨). 'InfiniBand' 표준은 서브넷 관리자(subnet manager)라는 엔티티(entity)를 정의하고, 이 엔티티는 네트워크의 검색, 구성 및 유지 관리를 담당한다. 네트워크의 각 'InfiniBand' 포트는 하나 이상의 LID들로 식별되며, 서브넷 관리자가 할당합니다. 서브넷 내의 각 장치는 서브넷 관리자가 16 비트 LID를 할당할 수 있다. 서브넷 내에서 전송된 패킷들은 어드레스 지정을 위해 LID를 사용한다. 각 포트에는 여러 개의 LID들이 할당되어 네트워크의 여러 경로를 활용할 수 있다. 또한 InfiniBand는 LID 마스크 제어(LID Mask Control, LMC)라는 메커니즘을 제공한다. LMC는 LID의 최하위 바이트(least significant byte)를 마스킹(masking)하여 여러 논리적 LID들을 단일 물리적 포트와 연관시키는 방법을 제공한다. 패킷들이 스위치에서 수신되면, 목적지 LID의 8 개의 최하위 비트는 LMC에 의해 마스크되어 무시될 수 있다. 따라서, 여러 LID들을 서로 다른 최하위 바이트를 사용하여 동일한 포트에 할당하면 노드들의 동일한 쌍 사이에 여러 경로들을 설정할 수 있다.
전술한 바와 같이, 라우팅 알고리즘은 패킷 헤더의 선택된 필드에 대한 해시를 계산할 수 있다. 일반적으로 IP 헤더의 소스 및 목적지 어드레스가 라우팅에 사용된다. IP 헤더의 프로토콜 필드와 서비스 필드의 유형, 다중 액세스 제어 (MAC) 계층의 소스 어드레스와 목적지 계층 또는 소스와 목적지 포트들이 사용될 수도 있다.
포트는 포트 번호로 식별되는 소프트웨어 구조이다. 포트는 일반적으로 호스트의 IP 어드레스 및 통신의 프로토콜 유형과 연관되며, 통신 세션의 대상 목적지 소스 어드레스의 일부를 형성한다. 포트는 일반적으로 각 어드레스 및 프로토콜에 대해 16-비트 포트 번호로 식별된다. 호스트 상의 어플리케이션은 데이터그램(datagram) 소켓(socket)들을 사용하여 호스트 간(host-to-host) 통신을 설정할 수 있다. 어플리케이션은 소켓을 데이터 전송의 엔드포인트에 바인딩할 수 있고, 이 엔드포인트는 IP 주소와 서비스 포트의 조합일 수 있다.
소스 및 목적지 어드레스 및 목적지 포트와 같은, 해시 계산에 사용되는 일부 필드들은 고정되어있을 수 있으며 패킷 배달을 위해 변경할 수 없다. 그러나 일부 다른 필드들은 선택전이며 수정될 수 있고, 이는 패킷이 라우팅되는 경로에 영향을 줄 수 있지만 패킷의 안전한 전달에는 영향을 미치지 않을 수 있다. 따라서, 동일한 소스 IP 어드레스, 목적지 IP 어드레스 및 목적지 포트를 갖는 패킷들이 상이한 경로들 상에서 전달될 수 있도록, 이러한 필드들은 상이한 패킷들에 대해 다르게 수정될 수 있다.
도 8은 소스 엔드포인트(802a)와 목적지 엔드포인트(802b) 사이의 데이터 통신을 위한 다중 경로(810)를 도시한다. 도 8에 도시된 바와 같이, 목적지 어드레스에 대한 소스 컨텍스트 데이터(804a)는 복수의 플로우렛들(806a)로 분할될 수 있으며, 각 플로우렛 내의 패킷들은 동일한 패킷 헤더를 가질 수 있고, 따라서 동일한 경로를 통해 라우팅될 수 있다. 서로 다른 플로우렛들의 패킷들은 동일한 소스 IP 어드레스, 목적지 IP 어드레스 및 목적지 포트를 가질 수 있으며, 그러나 패킷 헤더의 특정 필드에서 다른 값들을 가질 수 있으며, 패킷 헤더의 특정 필드 내의 값은 라우팅을 위해 사용된다. 따라서, 상이한 플로우렛들(806a)의 패킷들은 네트워크(850)를 통해 상이한 경로들(810)를 취함으로써 동일한 소스 IP 어드레스 상의 동일한 물리적 포트(808a)로부터 동일한 물리적 포트(808b) 및 동일한 목적지 IP 어드레스 상의 상이한 플로우렛들(806b)로 갈 수 있다. 전송 계층 프로토콜로서 UDP를 사용하는 소스 노드와 목적지 노드 사이의 다중-플로우렛 통신의 예가 아래에서 설명된다.
UDP는 최소한의 메시지-지향(message-oriented) 전송 계층 프로토콜이다. UDP는 최소한의 프로토콜 메커니즘으로 비연결형(connectionless) 전송 모델을 사용한다. 그것은 핸드쉐이킹 다이얼로그(handshaking dialogues)가 없기 때문에, 기본 네트워크 프로토콜(underlying network protocol)의 신뢰할 수 없는 것을 사용자의 프로그램에 노출시킨다. UDP는 메시지 전달을 위해 상위 계층 프로토콜에 대한 보장을 제공하지 않으며, UDP 계층은 전송된 UDP 메시지의 상태를 유지하지 않는다. 배달, 주문 또는 중복 방지(duplicate protection)에 대한 보장은 없다.
UDP를 사용하면, 컴퓨터 응용 프로그램은 특별한 전송 채널이나 데이터 경로를 설정하기 위한 사전 통신 없이 인터넷 프로토콜(IP) 네트워크 상의 다른 호스트들로 데이터그램이라고 지칭되는 메시지를 보낼 수 있다. UDP는 데이터 그램의 소스와 목적지에서 다른 기능들을 위해 포트 번호들을 사용한다. UDP는 오류 검사 및 수정이 필요 없거나 응용 프로그램에서 수행될 수 있는 응용 프로그램에 적합하므로, 네트워크 인터페이스 레벨에서 이러한 처리의 오버 헤드를 피할 수 있다. 시간에 민감한 응용 프로그램은 실-시간 시스템에서 옵션이 아닐 수 있는 지연된 패킷들을 기다리는 것보다 드랍하는 것이 선호되기 때문에 종종 UDP를 사용한다.
도 9는 UDP/IP 패킷 헤더(900)를 도시한다. 소스 어드레스(902) 및 목적지 어드레스(904)는 IP 헤더에 포함된다. UDP 헤더는 4 개의 필드들을 포함하며, 각각의 필드는 2 바이트(16 비트)이다. 목적지 포트 필드(908)는 수신기의 포트를 식별하고 필요하다. 목적지 포트 필드(908)는 일반적으로 어느 프로토콜이 UDP 프레임 내에 캡슐화되어 있는지를 나타낸다.
소스 포트 필드(906)는 의미가 있는 경우 송신자의 포트를 식별하고, 필요하다면 응답할 포트로 가정된다. 사용되지 않는다면, 소스 포트 필드(906)는 0(zero)으로 설정될 수 있다. 소스 호스트가 클라이언트인 경우, 소스 포트 번호는 일시적인(ephemeral) 포트 번호가 될 수 있다. 소스 호스트가 서버인 경우, 소스 포트 번호는 잘 알려진 포트 번호 또는 잘 정의된 포트 번호가 될 수 있다.
체크섬(Checksum) 필드 및 소스 포트 필드(906)의 사용은 인터넷 프로토콜 버전 4(Internet Protocol version 4, IPv4)에서 선택사항이다. 인터넷 프로토콜 버전 6(IPv6)에서는 소스 포트 필드(906)만 선택 사항이다.
앞서 설명한 바와 같이, UDP는 순차적인 전달(in-order delivery)을 보장하지 않는다. 따라서, 상이한 경로들을 통한 통신에서 다른 패킷들을 라우팅하는 것이 비순차적인 전달(out-of-order delivery)을 야기 할지라도, UDP 프로토콜에서는 그러한 비순차적인 전달이 예상된다. 또한, ECMP를 사용하면 ECMP를 사용하지 않는 UDP와 비교하여 재정렬(reordering)이 증가할 수 있다. 따라서, 본 개시의 실시 예들은 UDP 프로토콜을 사용하는 것과 같이 순서를 필요로 하지 않는 어플리케이션에 더 적합하다. 일부 실시 예에서, UDP 포트는 프로토콜 감지에만 사용되며 엔드포인트 IP 어드레스에 의해 일반적으로 결정되는 최종(end) 사용자 어플리케이션에 패킷들을 전달하는 데 사용되지 않기 때문에 UDP 헤더 내의 소스 포트 필드(906)는 상이한 경로들로의 통신에서 상이한 패킷들을 라우팅하도록 수정될 수 있다. 목적지 노드에서 수신된 패킷은 후술하는 바와 같이, 예를 들어 완화된 신뢰성 있는 데이터그램(relaxed reliable datagram, RRD) 전송 서비스를 사용하여 패킷들 내의 정보에 기초하여 목적지 노드 상의 어플리케이션에 의해 재배열되거나 어셈블링될 수 있다.
일부 실시 예에서, 다수의 플로우렛들을 사용하는 흐름의 다중-경로 데이터 전송은 다른 소스 IP 어드레스(소스 엔드포인트에 다수의 IP 어드레스들이 있는 경우) 또는 다른 목적지 IP 어드레스(목적지 엔드포인트에 다수의 IP 어드레스가 있는 경우)를 사용하여, IPv6 헤더의 FlowID 필드를 사용하여, 또는 MPLS(Multi-Protocol Label Switching) 레이블을 사용하여 터널링(tunneling)을 통해 달성될 수 있다.
Ⅲ. 예
원격 직접 메모리 액세스(emote direct memory access, RDMA) 카드가 제공하는 기본 전송 서비스는 신뢰할 수 없는 데이터 그램(Unreliable Datagram, UD)이다. HPC 데이터경로에 UD를 사용하는 것은 비교적 일반적이지 않다. UD는 일반적으로 패킷이 손상되지 않는 한 패킷을 드랍하지 않는 비손실 구조(lossless fabric)에 의존한다. 또 다른 일반적인 전송 서비스 유형은 신뢰할 수 있는 연결(Reliable Connection, RC)이다. RC는 신뢰할 수 있는 순차적인 전달을 제공하지만, 확장성은 없다. 특히, RC는 통신 스레드들(communication threads)의 쌍마다 별도의 연결을 요구한다.
대-규모 시스템을 위한 "이상적인(ideal)" 솔루션은 신뢰할 수 있는 데이터그램(RD)이고, 이는 각 스레드에 대해 단일 요청 대기열을 사용하고 통신 노드들의 쌍 사이에 단일 연결을 사용한다. 기존 'InfiniBand' RD 표준은 사양()에서 많은 문제로 인해 사용할 수 없다. 기존의 RD와 유사한 또 다른 부분적 솔루션은 확장된 신뢰성 있는 연결(eXtended Reliability Connection, XRC)로, 이는 너무 복잡하고, 패킷 드랍과 관련 없는 패킷의 배달을 지연시킬 수 있으므로 패킷 드랍의 경우 선택적인 지연 시간을 제공하지 않는다.
순차적인 배달은 패킷 드랍의 경우 확장성을 제한하거나 평균 지연 시간을 증가시킬 수 있다. 엔드포인트에서 엔드포인트로의 흐름 레벨(endpoint-to-endpoint flow level)에서 시퀀스(sequence) 번호를 유지하는 것은 사용된 공간 및 연결 관리 오버헤드로 인해 확장 불가능하다. 다중화된 노드 간 연결 레벨의 시퀀스 번호는 손실되거나 중복된 패킷들을 탐지하는데 충분한 정보를 제공할 수 있지만, 집계된 연결에서 비순차적인 도착 패킷이 실제로 엔드포인트에서 엔드포인트로의 흐름에서 비순차적인지 판별하기에 충분한 정보를 제공하지 못할 수도 있다. 호스트에 대한 집계된 연결(aggregated connection) 상에서 비순차적 도착 패킷(arriving packet)의 전달이 연기되면, 누락된 패킷(missing packet)이 재-전송되거나 비순차적 패킷이 도착할 때까지 많은 패킷들이 지연될 수 있기 때문에, 큰 중간 버퍼 공간이 요구될 수 있고, 평균 지연 시간이 크게 증가될 수 있다. 이러한 지연된 패킷들의 대부분 또는 전부는 손실된 패킷 또는 비순차적 패킷과 무관할 수 있으며, 따라서 그러한 지연은 불필요할 수 있다. 비순차적 패킷을 드랍하면 버퍼링 문제가 해결 될 수 있지만, 지연 시간 문제는 해결되지 않을 수 있으며, 네트워크 대역폭 소비가 증가할 수 있다.
완화된 신뢰성 있는 다이어그램(RRD)은 단순한 UD와 같은 인터페이스를 사용하지만 패킷 손실로부터의 투명한 복구(transparent recovery) 기능을 갖춘 전송 서비스 유형이다. 패킷 순서화를 보장하는 것은 쉽게 확장 불가능한 모든 QP-QP 흐름(QP-to-QP flows)에 대한 상태를 유지하거나, 또는 서로 다른 논리 흐름에 속하는 패킷들을 패킷들의 단일 시퀀스로 직렬화(serialization)하면 관련없는 흐름간에 잘못된 종속성이 생겨 평균 및 최대 지연 시간이 증가 할 수 있기 때문에, RRD는 패킷 순서화(ordering)를 보장하지 않는다. RRD가 패킷 순서화를 보장하지는 않지만, RRD 레벨에서 비순차적인 것으로 보이는 패킷들이, 단일 RRD 연결은 다수의 다중화된 흐름을 포함 할 수 있기 때문에, 실제로 그들의 QP-QP 흐름 상에서 순차적일 가능성이 있다. 호스트 소프트웨어는 그것의 메시지 흐름을 추적할 수 있으므로 순서화는 호스트에 의해 수행될 수 있다. 따라서 RRD는 각 패킷이 결국 적절한 대기열로 전달되도록 보장한다. 패킷들이 비순차적인 경우에도 패킷들이 목적지 엔드포인트 대기열에 전달될 수 있으며 시퀀스 번호는 노드들 사이의 연결 레벨에서 추적될 수 있다. 플로우(엔드포인트에서 엔드포인트까지)-당(per-flow) 번호 지정(numbering)은 호스트 드라이버에 의해 수행될 수 있으며 시퀀스 번호는 패킷과 함께 목적지 호스트 상의 드라이버로 전송될 수 있지만, 전송 계층에서는 검사되지는 않는다. RRD는 비순차적 패킷들을 드랍하도록 구성될 수 있으므로, 순차적인 전달을 제공한다.
RRD 전송은 혼잡 또는 결함 경로들에 대한 최신 정보를 유지하면서, 로드 밸런싱을 위해 사용 가능한 모든 경로를 통해 패킷들을 전송할 수 있다. 단일의 연결 컨텍스트가 특정 목적지에 사용되는 경우, RRD 전송은 드랍된 패킷들로 인해 야기된 비순차적인 확인 응답(ACK)들로부터 다중 경로 전달로 인해 야기되는 비순차적 ACK 패킷들을 쉽게 구별하지 못할 수 있다. 따라서 RRD 상태는 경로-별 기준(per-path basis)으로 정렬되고, 여기서 특정 경로의 특정 목적지에 보낸 패킷들은 별도의 컨텍스트와 독립 패킷 번호 지정을 갖는다. 환언하면, 특정 목적지에 대한 RRD 컨텍스트는 다수의 단방향 플로우렛 컨텍스트들을 포함할 수 있으며, 여기서 각 플로우렛은 전술한 바와 같이 상이한 경로를 사용할 수 있다. 예를 들어, 각각의 플로우렛 콘텍스트는 외부 헤더에 사용되는 소스 UDP 포트 필드를 포함할 수 있다. 각 플로우렛은 타임아웃(timeout) 또는 과도한 패킷 손실의 경우에 재-할당될 수 있는 다른 경로와 연관될 수 있다. 패킷 시퀀스 번호들은 각 플로우렛에서 독립적으로 추적될 수 있다.
도 10은, 예를 들어, RRD 전송 서비스 및 UDP/IP 프로토콜을 사용하여 하나의 물리적 포트를 통해 다수의 목적지 엔드포인트들과 통신하는 소스 엔드포인트의 예시적인 블록 다이어그램을 도시한다. 사용자 어플리케이션(1002)은 제공자 라이브러리(provider library)(1004) 및 사용자 공간 드라이버 라이브러리(driver library)(1006)를 사용하여 송신 또는 수신 대기열들을 통해 비동기식으로(asynchronously) 메시지를 송신 또는 수신할 수 있다. 도 10은 메시지 송신 흐름만을 도시한다. 제공자 라이브러리(1004)는 OFI(OpenFabric interface) Libfabric 제공자 라이브러리 또는 OFED(OpenFabrics Enterprise Distribution) 라이브러리를 포함할 수 있다.
사용자 어플리케이션(1002)은 통신 엔드포인트들을 통해 메시지를 송신/수신할 수 있다. 어플리케이션은 여러 통신 엔드포인트들을 사용할 수 있다. 데이터그램 전송의 경우, 각 통신 엔드포인트는 단일 QP에 매핑(mapping)될 수 있다. QP 번호는 어댑터 펌웨어에 의해 할당될 수 있으며, 각 가상 이더넷(virtual Ethernet) 인터페이스에 대해 별도로 유지 관리될 수 있다. QP 번호는 가상 이더넷 인터페이스의 IP 어드레스 이외에 통신 엔드포인트 어드레스의 일부로 사용될 수 있다.
사용자 어플리케이션(1002)은 트랜잭션 또는 메시지를 채널 어댑터에 의해 처리되고 목적지 엔드포인트에 전송될 수 있는 다수의 WQE들(1008a-1008d)에 배치할 수 있다. WQE들(1008a-1008d)은 하나의 WQE가 하나의 로컬 엔드포인트에 대해 사용될 수 있도록 로컬 엔드포인트에 기초하여 배치될 수 있다.
사용자 어플리케이션(1002)은 UDP/IP 패킷 헤더들을 생성하지 않고, 송신 메시지 디스크립터(descriptor)에 목적지 네트워크 어드레스 맵 인덱스(어드레스 핸들(handle))를 전달한다. 이는, 하나 또는 다른 것을 타협하지 않고, 대기 시간을 줄이고 더 나은 보안을 제공한다. 성능 관점에서 볼 때, 어드레스 핸들은 채널 어댑터가 외부 헤더들을 포함하는 헤더들을 미리-생성하고, 검사 없이(어플리케이션에서 생성된 패킷 헤더들의 유효성 검사 대신) 전송하며, 헤더를 가져 와서 라우팅 테이블에서 헤더를 찾는 것을 회피함으로써 전반적인 지연 시간을 최소화한다.
WQE(1008a-1008d) 내의 트랜잭션들 또는 메시지들은, RRD 전송 컨텍스트들과 같은 전송 콘텍스트들(1010a-1010c)을 위치 시키도록 처리될 수 있으며, 전송 컨텍스트들(1010a-1010c)의 각 컨텍스트 내의 메시지들 또는 트랜잭션들이 동일한 목적지 IP 어드레스로 전송되어야 한다.
RRD 전송 콘텍스트와 같은 각각의 전송 콘텍스트들(1010a-1010c) 내의 메시지들 또는 트랜잭션들은 플로우렛 콘텍스트들을 선택하기 위해 채널 어댑터에 의해 추가로 처리될 수 있다. 예를 들어, 전송 컨텍스트(1010a) 내의 메시지는 복수의 플로우렛 컨텍스트들(1012a), 전송 컨텍스트(1010b) 내의 메시지는 복수의 플로우렛 컨텍스트들(1012b)에 배치될 수 있고, 전송 컨텍스트(1010c) 내의 메시지는 복수의 플로우렛 컨텍스트들(1012c)에 배치될 수 있다. WQE들 및 전송 콘텍스트들 각각은 소프트웨어 대기열 또는 하드웨어 대기열, 예를 들어 선입 선출(FIFO) 버퍼와 같은 버퍼로서 구현될 수 있다. 플로우렛 컨텍스트들은 활성 패킷 리스트(active packet list)를 유지할 수 있고, 예를 들어 메모리에 저장될 수 있다. 그 다음, 플로우렛(flowlet) 컨텍스트들(1012a-1012c)은 NX(1014)에 의해 처리될 수 있고 네트워크로 전송되기 위해 채널 어댑터와 네트워크 스위치 사이의 인터페이스에서 하드웨어 대기열(1016)에 놓일 수 있다. 하드웨어 대기열(1016)은 FIFO일 수 있다. 하드웨어 대기열(1016)의 각 패킷은 어플리케이션 메시지 페이로드(payload), 제공자의 보조 정보(auxiliary information), 및 목적지 어드레스를 포함할 수 있다.
본 명세서에서 사용된 바와 같이, 플로우렛은 두 개의 네트워크 인터페이스들 사이의 단방향(반-이중) 연결을 통해 전송되는 흐름 또는 데이터 흐름과 관련된 패킷들의 그룹이다. 플로우렛은 QP들과 관련이 없으며, 사용자 어플리케이션에서 볼 수 없다. 플로우렛 내의 패킷들은 플로우렛 인덱스 및 패킷 시퀀스 번호들을 전달할 수 있다. 패킷 시퀀스 번호들은 플로우렛을 기준으로 한다. 소스 엔드포인트는, 재전송에 필요한 정보를 포함하여, 미해결(outstanding) 미확인된 패킷들(unacknowledged packets)(시퀀스 번호들 및 미확인된 WQE 목록)에 대한 정보를 유지 관리한다. 목적지 엔드포인트는, 예를 들어, 패킷의 헤더에서 수신된 패킷으로부터 플로우렛 인덱스 또는 패킷 시퀀스 번호를 복구(recover)할 수 있고, 패킷 수신의 확인 응답(acknowledgement)을 소스 엔드포인트에 전송할 수 있다. 그런 다음 소스 엔드포인트는 패킷 수신에 대한 확인 응답이 목적지 엔드포인트로부터 수신된 후 패킷의 시퀀스 번호를 제거할 수 있다. 소스 엔드포인트는 패킷이 전송된 후에 패킷의 시퀀스 번호를 제거할 수도 있다.
각 플로우렛은 제한된 개수의 미해결 전송 패킷들을 갖도록 제어될 수 있다. 따라서, 플로우렛을 선택할 때 더 느린 경로들은 더 빠른 경로들보다 덜 자주 사용된다. 플로우렛은 활성 상태(즉, 미해결 미확인 패킷들을 갖는)이거나 유휴 상태(모든 것은 확인된) 일 수 있습니다.
일반적으로, 패킷들은 주어진 활성 플로우렛에 대해 동일한 경로로 전송된다. 일부 실시 예들에서, 송신기는 패킷들이 유휴 플로우렛에 할당될 때 무작위로 경로를 변경할 수 있다. 송신기는 타임아웃 후, 또는 과도한 지연 시간이나 과도한 패킷 드랍을 겪은 경우 다른 경로로 플로우렛을 재할당 할 수도 있다.
목적지 컨텍스트는 최종 순차적인 패킷의 시퀀스 번호 및 비순차인 패킷들의 시퀀스 번호를 유지할 수 있지만, 엔드포인트 버퍼 정보를 유지하지 못할 수 있다. 도착하는 모든 비-중복 패킷들(non-duplicate packets)은 패킷들을 적절한 QP들에 전달할 수 있는 RRD 서비스의 다음 레벨로 전달될 수 있다. 목적지 컨텍스트는 수신된 패킷들 시퀀스의 임의의 홀들(holes)을 보고하기 위해 순차적인 패킷 및 선택적 ACK(SACK) 패킷을 확인 응답하기 위해 정규(regular) ACK를 생성할 수 있다.
특정 RRD 컨텍스트 내의 플로우렛은 짧은 인덱스들을 사용하여 번호 지정될 수 있다. 플로우렛 인덱스는 패킷 헤더에 지정(specified)될 수 있다. 동일한 인덱스가 일 측면 상에서 보내진 플로우렛 컨텍스트 및 다른 측면 상에서 상응하는 수신 플로우렛 컨텍스트를 위해 양방향으로 사용될 수 있다. RRD 컨텍스트 당 최대 수의 플로우렛들은 미리 결정되고 하드 코딩될 수 있거나, 통신 전 또는 도중에 협상 및 조정될 수 있다.
소스 엔드포인트는 특정 어드레스가 처음으로 매핑될 때만 새로운 플로우렛을 초기화(initialize)할 수 있다. 즉, 송신기 또는 수신기가 재설정되지 않는 한, 플로우렛 연결 설정은 평생에 한 번 작동 할 수 있다. 일부 실시 예에서, 수신기가 "시퀀스 시작(start of sequence)" 패킷을 수용하면(accept), 수신기는 "시퀀스 시작" 패킷이 오래되었다(stale)고 판단하지 않는 한, "시퀀스 시작" 패킷을 수용하고 이전의 임의의 플로우렛 상태를 폐기할 수 있다.
특정의 플로우렛 상에서 전송된 패킷은 일반적으로 순서대로 도착하고, 그러나, 예를 들어, 경로의 느린 속도로 인해 플로우렛이 초기화된 직후에 플로우렛의 경로가 스위칭되는 경우 오래된 "시퀀스 시작" 패킷은 비순차적으로 도착할 수 있다. 이 경우, 수신기는 수신된 "시퀀스 시작" 패킷에 초기 시퀀스 번호를 저장하고, 패킷이 동일한 시퀀스 번호를 전달하고, 선택적으로, 명시적 부정 확인 응답(negative acknowledge, NAK)을 생성하는 경우 동일한 플로우렛에서 추가 "시퀀스 시작" 패킷을 거부할 수 있다.
플로우렛들의 히스토리에 대해 전혀 알지 못하는 새로 시작된 송신기는, 수신기로부터 ACK를 얻을 때까지, "시퀀스 시작" 패킷 이후에 추가 패킷들을 보내지 않을 수 있다. 예를 들어, NAK의 비정상적인 이벤트에서, 발신기가 실수로 플로우렛에 대한 이전의 "시퀀스 시작" 패킷의 초기 시퀀스 번호와 동일한 초기 시퀀스 번호를 생성하면 다른 초기 번호를 생성하고 재시도 할 수 있다.
Ⅳ. 플로우렛 할당
두 개의 목표는 일반적으로 패킷들을 플로우렛들에 할당할 때 고려된다. 모든 경로들이 끊임없이 작용되는(exercised) 것이 바람직하다. 또한 플로우렛은 임의의 손실된 패킷이 즉시 탐지되고 보고될 수 있도록 충분한 패킷들을 확보하는 것이 바람직하다. 플로우렛의 마지막 패킷이 드랍된 경우, 드랍을 감지하는 한 가지 방법은 타임아웃이다. 대안으로, 가볍게 로딩된 시스템에서, 추가의 더미 패킷(dummy packet)은 플로우렛의 마지막 패킷 이후에 전송될 수 있다. SACK-기반 탐지는 빠른 복구를 가능하게 하므로, RRD가 모든 활성 플로우렛들에서 패킷들을 계속 전송하는 것이 바람직하다. 보류중인 패킷들(pending packets)의 수가 많고 플로우렛들이 마르지 않는(less likely to dry out) 트래픽이 많은 경우 이 작업을 수행 할 수 있다. 일부 상황에서는, 시스템 전체에 과부하가 걸릴 수 있지만 가볍게 로딩된 많은 수의 플로우렛들이 시스템에 있을 수 있다. 보류중인 패킷들 수가 적은 가볍게 로딩된 시스템의 경우, 사용 가능한 모든 플로우렛들에서 패킷들을 균등하게 분산 시키면 많은 또는 모든 플로우렛들에서 미해결 패킷들의 수가 0 또는 1로 작아서 SACK이 쓸모 없게 되는 상황이 발생할 수 있다. 한 가지 해결책은 사용중인 플로우렛들의 수를 동적으로 조정하고, 플로우렛이 유휴 상태이거나 매우 느릴 때마다 다른 경로로 플로우렛을 재할당하는 것이다. 사용중인 총 플로우렛들의 수는 예를 들어 32 이하로 제한될 수 있으며, 예를 들어 네트워크 지연 시간, 네트워크 대역폭 또는 네트워크 정체에 따라 조정될 수 있다. 일부 실시 예들에서, 빈(empty)것들 보다는 반 정도 채워진(half-full) 플로우렛에 패킷들을 배치하는 것이 바람직하다. 또한, 단일의 플로우렛을 항상 비-유휴 상태(non-idle)로 유지할 수 있는 느리지만-안정적인 흐름(slow-but-steady flow)이 경로를 독점하지 않도록 하기 위해, 추가 유휴 플로우렛을 때때로 할당하여 경로가 결국 변경되도록 할 수 있다.
사용자 어플리케이션으로부터 다수의 플로우렛들로 패킷들을 할당하는 많은 다른 방법이 있을 수 있다. 예를 들어, 패킷들은 사용 가능한 모든 플로우렛들 또는 사용 중인 모든 플로우렛들의 미해결 패킷들의 수에 따라 플로우렛에 할당될 수 있다. 어플리케이션의 정보를 기반으로 패킷을 플로우렛에 할당할 수 있다. 패킷은 어플리케이션으로부터의 명령, 요청 또는 지시에 기초하여 플로우렛에 할당될 수도 있다.
사용자 어플리케이션이 흐름 라벨을 지정하지 않는 일부 실시 예들에서, RRD와 같은, 전송 서비스를 구현하는 전송 계층에서의 네트워크 어댑터 장치는 사용자 어플리케이션으로부터의 패킷들을 각 플로우렛의 활용, 예를 들어 각 플로우렛의 미해결 패킷들의 수에 기초하여 다수의 플로우렛들에 할당할 수 있다. 네트워크 어댑터 장치는 미해결 패킷들의 총 수 및 마지막으로 사용된 플로우렛을 기록할 수 있다. 또한 사용량 별로 별도의 흐름 목록을 유지 관리할 수도 있고, RRD 컨텍스트의 각 플로우렛은: '완전 빈(full empty)', '거의 빈(almost empty)(절반 이하)' 및 '거의 가득 찬(almost full)(절반 이상)'의 세 가지 목록 중 하나에 있을 수 있다. 빈 플로우렛(empty flowlet)은 다른 어플리케이션에서 사용될 수 있도록 공유 풀(shared pool)로 반환될 수 있다.
전송 계층의 네트워크 어댑터 장치는, 가득 차지 않은 경우, 이전에 사용된 것과 동일한 플로우렛을 선택할 수 있다. 그렇지 않으면, 다음의 우선 순위에 따라 사용량 별로 플로우렛 목록에서 다른 플로우렛을 선택할 수 있다: 거의 가득 찬, 거의 빈, 비어 있는(공유 풀에서).
일부 실시 예에서, 플로우렛 내의 허용된 미해결 패킷들의 총 수는 조정 가능한 수로 제한될 수 있으며, 이는, 예를 들어, 네트워크 혼잡(congestions)에 기초하여 조정될 수 있다. 예를 들어, 전체 네트워크가 혼잡하면, 플로우렛에서 허용된 총 미해결 패킷들의 수가 증가될 수 있다. 전체 네트워크의 혼잡이 적으면, 플로우렛에서 허용된 총 미해결 패킷들의 수는 줄어들 수 있다.
데이터 패킷들은 사용 가능한 플로우렛들 또는 사용중인 플로우렛들의 각 플로우렛의 관찰된 지연 시간을 기반으로 플로우렛들에 할당 될 수도 있다. 관찰된 지연 시간이 더 낮은 플로우렛이 일반적으로 선택될 수 있다. 데이터 패킷들은 또한 사용 가능한 플로우렛들 또는 사용 중인 플로우렛들의 각 플로우렛의 드랍 율(drop rate)에 기초하여 플로우렛들에 할당될 수 있다. 드랍 율이 낮은 플로우렛을 일반적으로 선택할 수 있다.
전송 계층은 또한 패킷들을 할당하는 방법과 관련하여 사용자 어플리케이션으로부터의 지시에 기초하여 패킷들을 상이한 플로우렛들에 할당할 수 있다. 예를 들어, 사용자 어플리케이션은 OFED(OpenFabrics Enterprise Distribution)에서 지원되는 흐름 라벨과 같은 흐름 라벨로 전송 요청을 표시(marking)할 수 있습니다. 플로우 라벨은 전송 계층에 특정 경로에서 패킷들을 전송하도록 지시하지 않을 수 있고, 그러나 동일한 라벨을 갖는 다른 메시지들과 동일한 경로 상의 동일한 목적지로 메시지를 전송하도록 전송 계층에 지시할 수 있다. 전송 계층 맵(map)은 흐름 라벨의 맵을 유지하는데, 맵의 각 엔트리는 플로우렛 인덱스와 플로우렛의 미해결 패킷들의 수를 포함한다. 원하는 플로우렛의 미해결 패킷들의 수가 0이면, 패킷을 위한 새로운 플로우렛을 할당할 수 있다. 원하는 플로우렛에, 예를 들어, 다른 어플리케이션들 또는 메시지들로부터의 너무 많은 미해결 패킷들이 있는 경우, 또한 새로운 플로우렛이 할당될 수 있다.
전송 계층은 또한 사용자 어플리케이션의 정보에 기초하여 사용자 어플리케이션으로부터의 패킷들을 상이한 플로우렛들에 할당할 수 있다. 예를 들어, 구조를 통한 NVMe(Non-Volatile Memory Express)의 경우, 전송 계층은 동일한 명령에 대한 모든 패킷들을 동일한 플로우렛에 할당할 수 있다. 메시지 전달 인터페이스(Message Passing Interface, MPI)와 같은 일부 어플리케이션의 경우, 전송 계층은 비순차적 전달을 최소화하기 위해 패킷들을 할당할 수 있다. 전송 계층은 다른 소스들로부터 정보를 수신하거나 정보를 경험적으로(heuristically) 결정함으로써 사용자 어플리케이션에 관한 정보를 얻을 수 있다.
일부 실시 예들에서, 여러 네트워크 어댑터 장치들 또는 다수의 사용자 어플리케이션 사이의 플로우렛들 또는 경로들의 선택은 서로 다른 어플리케이션들 또는 다른 네트워크 어댑터 장치들로부터의 패킷들이 동일한 경로에 할당되어 경로에 과부하가 걸리지 않도록 조율되거나 무작위화될 수 있다. 일부 구현 예들에서, 스위치 또는 라우터의 포트 또는 다른 어플리케이션들에서 사용되는 소스 UDP 포트들은 플로우렛에 사용될 적절한 포트를 결정하기 위한 입력으로 사용될 수 있다.
플로우렛이 할당되면, 일반적으로 플로우렛에 할당된 모든 패킷들이 동일한 경로를 취하도록 이는 경로와 연관된다. 그러나, 플로우렛과 연관된 경로가 임계 값보다 큰 과도한 드랍 율 또는 임계 값보다 긴 지연 시간을 갖는다면, 플로우렛 및 그것의 관련 패킷들은 더 낮은 드랍 율 또는 더 짧은 대기 시간을 갖는 다른 경로로 재할당될 수 있다.
Ⅴ. 다수의 물리적 포트들을 갖는 네트워크 어댑터
네트워크 어댑터 장치는 다수의 물리적 출력 또는 입력 포트들을 포함할 수 있다. 따라서, 네트워크 어댑터 장치는 장치 상의 상이한 물리적 포트들을 통해 패킷들을 송신 또는 수신할 수 있다. 환언하면, 네트워크 어댑터 장치는 스위치 자체로 작동하여 네트워크의 일부 또는 네트워크의 스위치 구조를 형성할 수 있다.
도 11은, 예를 들어, RRD 전송 서비스 및 UDP/IP 프로토콜을 사용하여 다수의 물리적 포트들을 통해 다수의 목적지 엔드포인트들과 통신하는 소스 엔드포인트의 블록 다이어그램을 도시한다. 도 10과 유사하게, 도 11에서, 사용자 어플리케이션(1102)은 제공자 라이브러리(1104) 및 사용자 공간 드라이버 라이브러리(1106)를 사용하여 송신 또는 수신 대기열들을 통해 비동기식으로 메시지를 송신 또는 수신할 수 있다. 제공 라이브러리(1104)는 OFI(OpenFabric interface) Libfabric 제공자 라이브러리 또는 OFED(OpenFabrics Enterprise Distribution) 라이브러리를 포함할 수 있다.
사용자 어플리케이션(1102)은 트랜잭션들 또는 메시지들을 채널 어댑터에 의해 처리되고 목적지 엔드포인트에 전송될 수 있는 다수의 WQE들(1108a-1108d)에 배치할 수 있다. WQE들(1108a-1108d)은 하나의 WQE가 하나의 로컬 엔드포인트에 대해 사용될 수 있도록 로컬 엔드포인트에 기초하여 배치될 수 있다. WQE들(1108a-1108d) 내의 트랜잭션들 또는 메시지들은 RRD 전송 콘텍스트들과 같은 전송 콘텍스트들(1110a-1110c)을 위치 시키도록 처리될 수 있고, 여기서 각각의 전송 컨텍스트들(1110a-1110c) 내의 메시지들 또는 트랜잭션들은 동일한 목적지 IP 어드레스로 전송된다.
RRD 전송 콘텍스트들과 같은, 각각의 전송 콘텍스트들(1110a-1110c) 내의 메시지들 또는 트랜잭션들은 플로우렛 콘텍스트들을 선택하기 위해 채널 어댑터에 의해 추가로 처리될 수 있다. 예를 들어, 전송 컨텍스트 (1110a) 내의 메시지는 플로우렛 컨텍스트들(1112a), 전송 컨텍스트(1110b) 내의 메시지는 플로우렛 컨텍스트들(1112b)에 배치될 수 있고, 전송 컨텍스트(1110c) 내의 메시지는 플로우렛 컨텍스트들(1112c)에 배치될 수 있다. 플로우렛 컨텍스트들(1112a-1112c)은 NX(1114)에 의해 처리되어 하드웨어 대기열(1116)에 입력될 수 있다.
하드웨어 대기열(1116) 내의 패킷들은 네트워크 어댑터 장치와 외부 네트워크 사이의 인터페이스(1118)에서 상이한 물리적 출력 포트들(1120)로 라우팅될 수 있다. 상이한 물리적 출력 포트들을 통해 패킷들을 라우팅함으로써, 네트워크 어댑터 장치의 처리량이 증가될 수 있고, 네트워크 어댑터 장치와 외부 네트워크 사이의 인터페이스에서의 혼잡이 감소될 수 있다.
Ⅵ. 방법
도 12는 본 개시의 일부 실시 예에 따라, 네트워크를 통한 복수의 플로우렛에 의한 두 개의 엔드포인트들 사이의 데이터 통신 방법을 도시하는 흐름도(1200)이다.
블록(1202)에서, 네트워크 어댑터 장치는 소스 엔드포인트 상의 사용자 어플리케이션으로부터 네트워크를 통해 목적지 엔드포인트로 전송될 데이터 스트림을 수신할 수 있다. 데이터 스트림은 하나 이상의 메시지들, 하나 이상의 명령들, 또는 하나 이상의 트랜잭션들일 수 있다. 일부 실시 예들에서, 소스 엔드포인트 및 목적지 엔드포인트는 각각 고유 한 IP 어드레스를 가질 수 있다. 일부 실시 예들에서, 다수의 엔드포인트들은 IP 어드레스를 공유할 수 있으며, IP 어드레스를 공유하는 다수의 소스 엔드포인트들로부터 IP 어드레스를 공유하는 다수의 목적지 엔드포인트로들로의 사용자 어플리케이션 데이터 스트림은 한 쌍의 소스 어드레스와 목적지 어드레스들 사이의 IP-레벨 데이터 스트림으로 멀티플렉싱 될 수 있다. 다른 실시 예들에서, 소스 또는 목적지 엔드포인트에 여러 개의 IP 주소들이 있을 수 있으며, 사용자 어플리케이션 데이터 스트림의 각 부분이, 예를 들어 다중 경로 TCP(MPTCP)와 같은 소스 IP 어드레스 및 목적지 IP 어드레스의 상이한 조합을 사용하여 네트워크 내의 상이한 경로를 통해 송신되는 것이 바람직 할 수도 있다. 단일 TCP 또는 UDP 연결에서 소스 IP 어드레스에서 목적지 IP 어드레스로 전송되도록 의도된 사용자 어플리케이션 데이터 스트림 또는 사용자 어플리케이션 스트림의 일부는 여기서 데이터 흐름 또는 흐름이라고 지칭될 수 있다.
예를 들어, 도 10과 관련하여 전술한 바와 같이, 사용자 어플리케이션(1002)은 트랜잭션들 또는 메시지들을 다수의 WQE들(1008a-1008d)에 위치시킬 수 있고, WQE들(1008a-1008d)은 하나의 WQE가 하나의 로컬 엔드포인트에 대해 사용될 수 있도록 로컬 엔드 포인트에 기초하여 배치될 수 있다. 사용자 어플리케이션(1002)은 또한 송신 메시지 디스크립터에서 목적지 네트워크 어드레스 맵 인덱스(어드레스 핸들)를 전달할 수 있다. 목적지 네트워크 어드레스 맵 인덱스에 기초하여, WQE(1008a-1008d) 내의 트랜잭션들 또는 메시지들은 RRD 전송 콘텍스트들과 같은 전송 콘텍스트들(1010a-1010c)을 위치 시키도록 처리될 수 있고, 여기서 각각의 전송 컨텍스트들(1010a-1010c) 내의 메시지들 또는 트랜잭션들은 동일한 목적지 IP 어드레스로 전송될 것이다. 각 전송 컨텍스트는 흐름 또는 데이터 흐름이라고 지칭될 수 있다.
일부 예들에서, 사용자 어플리케이션은, 단지 메시지 및 송신 메시지 디스크립터를 제공하는 것보다, 소스 IP 어드레스 및 목적지 IP 어드레스를 포함하는 데이터 패킷들로 메시지를 제공할 수 있다.
블록(1204)에서, 도 10의 각각의 전송 콘텍스트와 같은, 각 흐름의 사용자 어플리케이션 데이터는 TCP/IP 또는 UDP/IP와 같은 통신 프로토콜에 따라 복수의 패킷으로 분할될 수 있다. 상기 복수의 패킷들은 헤더 및 페이로드를 포함 할 수있다. 헤더는 빈 헤더이거나 업데이트 해야 하는 빈 필드를 포함할 수 있다. 헤더에는 TCP/IP 또는 UDP/IP 헤더의 일부만 포함될 수 있다.
블록(1206)에서, 복수의 패킷들의 각각의 패킷에 대해, 네트워크 어댑터 장치는, 복수의 플로우렛들로부터, 전송될 패킷에 대한 플로우렛을 결정할 수 있다. 결정은 복수의 플로우렛들의 각 플로우렛에서 패킷들의 수를 결정하거나, 사용자 어플리케이션의 정보를 얻거나, 또는 복수의 패킷들이 복수의 플로우렛들에 어떻게 할당되어야 하는지에 관한 지시를 사용자 어플리케이션으로부터 수신함으로써 이루어질 수 있다. 일부 실시 예들에서, 가볍게 로드되지 않거나 과하게 로드되지 않은 플로우렛을 선택하는 것이 바람직할 수 있다.
블록(1208)에서, 결정된 플로우렛에 기초하여, 복수의 패킷들의 각각의 패킷에 대해, 소스 UDP 포트 번호와 같은 패킷을 라우팅하기 위해 네트워크의 네트워크 스위치에 의해 사용되는 패킷의 필드 값이 결정되고 설정 될 수 있다. 서로 다른 소스 UDP 포트들이 다른 플로우렛들에 사용될 수 있다. 결과적으로, 위에서 설명한대로 라우팅을 위해 소스 UDP 포트 번호를 사용하는 라우터 또는 스위치에 의해 네트워크의 다른 경로들을 통해 다른 플로우렛들이 송신될 수 있다.
블록(1210)에서, 복수의 패킷들의 각각의 패킷은 네트워크로 전송하기 위해 할당된 플로우렛으로 전송될 수 있다. 각각의 패킷은 소스 UDP 포트, 플로우렛 인덱스 또는 식별, 및 패킷 시퀀스 번호와 같은 헤더 내의 플로우렛-특정 필드들을 포함할 수 있다. 미해결 패킷들의 수, 평균 지연 시간, 또는 플로우렛 상의 추정된 패킷 손실율과 같은, 복수의 플로우렛들의 각 플로우렛의 상태는 추가 패킷들에 플로우렛들을 할당하기 위해 모니터되고 사용될 수 있다.
블록(1212)에서, 복수의 플로우렛들의 각 플로우렛 내의 패킷들은 하나 이상의 물리적 포트들을 통해 네트워크 구조로 송신될 수 있다. 패킷들은 네트워크 어댑터 장치와 외부 네트워크 사이의 인터페이스에서 하드웨어 전송 대기열에 놓일 수 있다.
Ⅶ. 장치 및 시스템
본 개시의 실시 예들은 어댑터 카드와 같은 하드웨어 또는 호스트 CPU 상에서 실행될 수 있는 소프트웨어로 구현될 수 있다. 도 13은 네트워크 어댑터 장치(1300)의 예를 도시한다. 이 예에서, 네트워크 어댑터 장치(1300)는 프로세싱 로직(1302), 구성 모듈(1304), 관리 모듈(1306), 버스 인터페이스 모듈(1308), 메모리(1310) 및 네트워크 인터페이스 모듈(1312)을 포함할 수 있다. 이러한 모듈들은 하드웨어 모듈, 소프트웨어 모듈 또는 하드웨어와 소프트웨어의 조합일 수 있다. 네트워크 어댑터 장치(1300)는 여기에 도시되지 않은 추가 모듈들을 포함할 수 있다. 일부 구현 예들에서, 네트워크 어댑터 장치(1300)는 보다 적은 모듈을 포함할 수 있다. 하나 이상의 모듈들은 통신 채널(1314)을 통해 서로 통신할 수 있다. 통신 채널(1314)은 하나 이상의 버스들, 메시들, 매트릭스들, 구조들, 이들 통신 채널들의 조합, 또는 어떤 다른 적절한 통신 채널을 포함할 수 있다.
프로세싱 로직(1302)은 명령들을 실행하도록 구성된 하나 이상의 프로세서들을 포함할 수 있다. 프로세싱 로직(1302)에 포함될 수 있는 프로세서들의 예는 ARM, MIPS, AMD, Intel, Qualcomm 등에 의해 개발된 프로세서를 포함한다. 프로세싱 로직(1302)에 포함된 프로세서들은 또한 ASIC 또는 FPGA로 구현될 수 있다. 일부 구현 예들에서, 프로세싱 로직(1302)의 프로세서들은 예를 들어 버스들(busses), 레벨 1(L1) 캐시들(caches), 및/또는 레벨 2(L2) 캐시들과 같은 특정 리소스들을 공유할 수 있다. 프로세싱 로직(1302)에 의해 실행되는 명령들은 컴퓨터 판독 가능 저장 매체 상에, 예를 들어 컴퓨터 프로그램의 형태로 저장될 수 있다. 컴퓨터 판독 가능 저장 매체는 비-일시적일 수 있다. 몇몇 경우에 있어서, 컴퓨터 판독 가능 매체는 메모리(1310)의 일부일 수 있다.
메모리(1310)는 휘발성 또는 비-휘발성, 또는 휘발성 및 비-휘발성 유형의 메모리 모두를 포함할 수 있다. 메모리(1310)는 예를 들어, 랜덤 액세스 메모리(RAM), 판독 전용 메모리(ROM), 전기적으로 소거 가능한 프로그램 가능 판독 전용 메모리(EEPROM), 플래시 메모리 및/또는 다른 적절한 저장 매체를 포함할 수 있다. 일부 경우에, 메모리(1310)의 일부 또는 전부는 네트워크 어댑터 장치(1300)의 내부에 있을 수 있는 반면, 다른 경우에는 메모리의 일부 또는 전부는 네트워크 어댑터 장치(1300) 외부에 있을 수 있다.
일부 구현 예들에서, 구성 모듈(1304)은 하나 이상의 구성 레지스터들을 포함할 수 있다. 구성 레지스터들은 네트워크 어댑터 장치(1300)의 동작을 제어할 수 있다. 일부 구현 예들에서, 구성 레지스터 내의 하나 이상의 비트들은 네트워크 어댑터 장치(1300)의 특정 성능을 나타낼 수 있다. 구성 레지스터들은 프로세싱 로직(1302)에서 실행되는 명령어들 및/또는 호스트 장치, 호스트 장치에서 실행되는 운영 시스템, 및/또는 원격 서버와 같은 외부 엔티티에 의해 프로그래밍될 수 있다. 구성 모듈(1304)은 네트워크 어댑터 장치(1300)의 동작을 제어하는 하드웨어 및/또는 소프트웨어를 더 포함할 수 있다.
일부 구현 예에서, 관리 모듈(1306)은 네트워크 어댑터 장치(1300)의 상이한 구성 요소들을 관리하도록 구성될 수 있다. 일부 경우에 있어서, 관리 모듈(1306)은 전원을 켤 때 하나 이상의 구성 레지스터에 하나 이상의 비트를 구성하여 네트워크 어댑터 장치(1300)의 특정 기능을 활성화 또는 비활성화할 수 있다.
버스 인터페이스 모듈(1308)은 외부 통신 매체를 통해 호스트 시스템 및/또는 계산 시스템 내의 다른 구성 요소와 같은 외부 엔티티와의 통신을 가능하게 할 수 있다. 버스 인터페이스(1308) 모듈은 케이블, 소켓, 포트, 또는 외부 통신 매체에 대한 다른 접속에 접속하기 위한 물리적 인터페이스를 포함할 수 있다. 버스 인터페이스 모듈(1308)은 수신 및 발신 트랜잭션들을 관리하기 위한 하드웨어 및/또는 소프트웨어를 더 포함할 수 있다. 버스 인터페이스(1308) 모듈은 NVMe, AHCI, SCSI, SAS, SATA, PATA, PCI/PCIe 등과 같은 로컬 버스 프로토콜을 구현할 수 있다. 버스 인터페이스(1308) 모듈은 적어도 커넥터, 전력 관리, 에러 핸들링 등을 포함하는 이들 버스 프로토콜들 중 임의의 것에 대한 물리 계층을 포함할 수 있다. 일부 구현 예들에서, 네트워크 어댑터 장치(1300)는 다수의 외부 엔티티들과 통신하기 위한 다수의 버스 인터페이스 모듈들을 포함할 수 있다. 이러한 다중 버스 인터페이스 모듈들은 동일한 로컬 버스 프로토콜, 상이한 로컬 버스 프로토콜, 또는 동일 및 상이한 버스 프로토콜의 조합을 구현할 수 있다.
네트워크 인터페이스 모듈(1312)은 네트워크와 통신하기 위한 하드웨어 및/또는 소프트웨어를 포함할 수 있다. 이 네트워크 인터페이스 모듈(1312)은 예를 들어, 네트워크로의 유선 접속을 위한 물리적 커넥터 및/또는 네트워크로의 무선 통신을 위한 안테나를 포함할 수 있다. 네트워크 인터페이스 모듈(1312)은 네트워크 프로토콜 스택을 구현하도록 구성된 하드웨어 및/또는 소프트웨어를 더 포함할 수 있다. 네트워크 인터페이스 모듈(1312)은 예를 들어 TCP/IP, InfiniBand, RoCE, IEEE 802.11 무선 프로토콜, UDP(User Datagram Protocol), 비동기식 전송 모드(ATM), 토큰 링, 프레임 릴레이, HDLC(High Level Data Link Control), FDDI(Fiber Distributed Data Interface) 및/또는 PPP(Point-to-Point Protocol) 등과 같은 네트워크 프로토콜을 사용하여 네트워크와 통신할 수 있다. 일부 구현 예에서, 네트워크 어댑터 장치(1300)는 각각 다른 네트워크와 통신하도록 구성된 다중 네트워크 인터페이스 모듈들을 포함할 수 있다. 예를 들어, 이러한 구현에서, 네트워크 어댑터 장치(1300)는 유선 이더넷 네트워크, 무선 802.11 네트워크, 셀룰러 네트워크, InfiniBand 네트워크 등과 통신하기 위한 네트워크 인터페이스 모듈을 포함할 수 있다.
네트워크 어댑터 장치(1300)는 SOC (system-on-chip), 프로세서, 네트워크 인터페이스 카드(NIC), 스위치 ASIC(Application Specific Integrated Circuit) 또는 FPGA (Field Programmable Gate Array) 중 하나로서 구현될 수 있다.
도 14는 하나 이상의 네트워크들을 통해 접속된 하나 이상의 서비스 제공자 컴퓨터 및/또는 사용자 장치를 포함하는 본 명세서에 설명된 특징부들과 시스템들에 대한 아키텍처의 일례를 도시한다. 도 1 내지 도 13에서 설명한 장치들은, 도 14에 설명된 계산 장치들의 하나 이상의 구성요소들을 사용할 수도 있고, 또는 도 14에 설명된 하나 이상의 계산 장치를 나타낼 수도 있다. 도시된 아키텍처(1400)에서, 하나 이상의 사용자(1402)는, 하나 이상의 네트워크(1408)를 통해 어플리케이션(1406)(예를 들어, 웹 브라우저 또는 모바일 장치 어플리케이션)에 액세스하기 위해 사용자 계산 장치들(1404(1)-(N))을 사용할 수도 있다. 일부 양태들에서, 어플리케이션(1406)은 계산 자원 서비스 또는 서비스 제공자에 의해 호스팅, 관리 및/또는 제공될 수도 있다. 하나 이상의 서비스 제공자 컴퓨터(1410)는, 사용자(들)(1402)가 상호작용할 수도 있는 사용자 장치(1404)에서 동작하도록 구성된 네이티브 어플리케이션을 제공할 수도 있다. 일부 예들에서, 서비스 제공자 컴퓨터(들)(1410)는, 저-지연 데이터 저장, 내구성 데이터 저장, 데이터 액세스, 관리, 가상화, 클라우드 기반 소프트웨어 솔루션, 전자 콘텐츠 성능 관리 등의 계산 자원들을 제공할 수도 있지만, 이에 한정되지 않는다. 서비스 제공자 컴퓨터(들)(1410)는, 또한, 웹 호스팅, 컴퓨터 어플리케이션 개발 및/또는 구현 플랫폼, 전술한 것들의 조합 등을 사용자(들)(1402)에게 제공하도록 동작할 수도 있다. 일부 예들에서, 서비스 제공자 컴퓨터(들)(1410)는 하나 이상의 제3자 컴퓨터(1412)와 통신할 수도 있다.
일부 예들에서, 네트워크(들)(1408)는, 케이블 네트워크, 인터넷, 무선 네트워크, 셀룰러 네트워크, 및 다른 개인 및/또는 공용 네트워크들 등의 서로 다른 많은 유형의 네트워크들 중 임의의 하나 또는 조합을 포함할 수도 있다. 도시된 예는 네트워크(들)(1408)를 통해 어플리케이션(1406)에 액세스하는 사용자(들)(1402)를 나타내고 있지만, 설명된 기술들은, 사용자(들)(1402)가 유선 전화선을 거친 사용자 장치(들)(1404)를 통해, 키오스크를 통해, 또는 다른 임의의 방식으로 서비스 제공자 컴퓨터(들)(1410)와 상호작용하는 경우에 적용될 수도 있다. 또한, 설명된 기술들은 또한 넌-클라이언트/서버 장치(예컨대, 국부적으로 저장된 어플리케이션 등)뿐만 아니라 다른 클라이언트/서버 장치(예를 들어, 셋톱 박스 등)에도 적용될 수도 있다.
간략하게 전술한 바와 같이, 어플리케이션(1406)은, 사용자(들)(1402)가 서비스 제공자 컴퓨터(1410)와 상호 작용하게 예를 들어 웹 콘텐츠(예를 들어, 웹 페이지, 음악, 비디오 등)에 액세스하게 할 수도 있다. 서버들의 클러스터에 또는 서버 팜으로서 배치될 수도 있는 서비스 제공자 컴퓨터(들)(1410)는 어플리케이션(1406) 및/또는 클라우드 기반 소프트웨어 서비스를 호스팅할 수도 있다. 다른 서버 아키텍처들은, 또한, 어플리케이션(1406)을 호스팅하는 데 사용될 수도 있다. 어플리케이션(1406)은 많은 사용자들(1402)로부터의 요청을 처리할 수도 있고, 이에 응답하여 다양한 아이템 웹 페이지들을 제공할 수도 있다. 어플리케이션(1406)은, 소셜 네트워킹 사이트, 온라인 소매업체, 정보 사이트, 블로그 사이트, 검색 엔진 사이트, 뉴스 및 엔터테인먼트 사이트 등을 포함하는 사용자 상호작용을 지원하는 임의의 유형의 웹사이트를 제공할 수 있다. 상술한 바와 같이, 설명된 기술들은, 사용자 장치(들)(1404)에서 실행되고 있는 다른 어플리케이션들과 같이 어플리케이션(1406)의 외부에서 유사하게 구현될 수 있다.
사용자 장치(들)(1404)는, 이동 전화, 스마트폰, PDA(개인 정보 단말기), 랩톱 컴퓨터, 데스크톱 컴퓨터, 씬 클라이언트(thin-client) 장치, 태블릿 PC, 전자 서적(e-book) 판독기 등의 임의의 유형의 계산 장치일 수도 있지만, 이러한 예로 한정되지 않는다. 일부 예들에서, 사용자 장치(들)(1404)는, 네트워크(1408)를 통해 또는 다른 네트워크 접속을 통해 서비스 제공자 컴퓨터(들)(1410)와 통신할 수도 있다. 또한, 사용자 장치(들)(1404)는, 서비스 제공자 컴퓨터(들)(1410)(예를 들어, 서비스 제공자 컴퓨터(1410)와 통합된 콘솔 장치)에 의해 관리되고 제어되는 분산형 시스템의 일부일 수도 있고 그 외에는 그 서비스 제공자 컴퓨터(들)의 일부일 수도 있다.
예시적인 한 구성에 있어서, 사용자 장치(들)(1404)는, 적어도 하나의 메모리(1414) 및 하나 이상의 처리 유닛(또는 프로세서(들)(1416))을 포함할 수도 있다. 프로세서(들)(1416)는 하드웨어, 컴퓨터 실행가능 명령어, 펌웨어, 또는 이들의 조합으로 구현될 수도 있다. 프로세서(들)(1416)의 컴퓨터 실행가능 명령어 또는 펌웨어 구현은, 기술된 다양한 기능들을 수행하기 위해 임의의 적절한 프로그래밍 언어로 작성된 컴퓨터 실행가능 또는 기계 실행가능 명령어들을 포함할 수도 있다. 사용자 장치(들)(1404)는, 또한, 사용자 장치(들)(1404)에 연관된 지리적 위치 정보를 제공 및/또는 기록하기 위한 지리적 위치 장치(예를 들어, 글로벌 위치확인 시스템(GPS) 장치 등)를 포함할 수도 있다.
메모리(1414)는, 프로세서(들)(1416) 상에 로딩가능하며 실행가능한 프로그램 명령어 및 이들 프로그램의 실행 동안 생성되는 데이터를 저장할 수도 있다. 사용자 장치(들)(1404)의 구성 및 유형에 따라, 메모리(1414)는 (RAM 등의) 휘발성 및/또는 (ROM, 플래시 메모리 등의) 비휘발성일 수도 있다. 사용자 장치(들)(1404)는, 또한, 자기 저장 장치, 광 디스크, 및/또는 테이프 저장 장치를 포함하지만 이에 제한되지 않는 추가 탈착가능 저장 장치 및/또는 탈착불가 저장 장치를 포함할 수도 있다. 디스크 드라이브 및 이에 연관된 컴퓨터 판독가능 매체는 계산 장치에 대한 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈, 및 기타 데이터의 비휘발성 저장 장치를 제공할 수도 있다. 일부 구현예들에서, 메모리(1414)는, SRAM, DRAM, 또는 ROM 등의 서로 다른 다수의 유형의 메모리를 포함할 수도 있다.
메모리(1414)의 내용을 보다 상세히 설명하면, 메모리(1414)는, 예를 들어 브라우저 어플리케이션(1406) 또는 전용 어플리케이션(예를 들어, 스마트폰 어플리케이션, 태블릿 어플리케이션 등)을 통해 적어도 하나의 사용자 제공 입력 요소 또는 전자 서비스 웹 페이지를 포함하는 본 명세서에 개시된 특징부들을 구현하기 위한 운영 시스템 및 하나 이상의 어플리케이션 또는 서비스를 포함할 수도 있다. 브라우저 어플리케이션(1406)은, 서비스 제공자 컴퓨터(들)(1410)와 상호작용하기 위한 웹사이트 또는 다른 인터페이스를 수신, 저장, 및/또는 표시하도록 구성될 수도 있다. 또한, 메모리(1414)는, 사용자 ID, 패스워드, 및/또는 다른 사용자 정보 등의 액세스 증명서 및/또는 다른 사용자 정보를 저장할 수도 있지만, 이에 한정되는 것은 아니다. 일부 예들에서, 사용자 정보는, 장치 ID, 쿠키, IP 어드레스, 위치 등의 계정 액세스 요청을 인증하기 위한 정보를 포함할 수도 있지만, 이러한 예로 한정되지 않는다. 또한, 사용자 정보는, 보안 질문에 대한 사용자 제공 응답 또는 사용자 장치(1404)에 의해 취득된 지리적 위치를 포함할 수도 있다.
일부 양태들에서, 서비스 제공자 컴퓨터(들)(1410)는, 또한, 이동 전화, 스마트폰, 개인 정보 단말기(PDA), 랩톱 컴퓨터, 데스크톱 컴퓨터, 서버 컴퓨터, 씬 클라이언트 장치, 태블릿 PC 등의 임의의 유형의 계산 장치일 수도 있지만, 이러한 예로 한정되지 않는다. 또한, 일부 실시예에서, 서비스 제공자 컴퓨터(들)(1410)는 호스팅된 계산 환경에서 구현되는 하나 이상의 가상 기계에 의해 실행된다는 점을 주목해야 한다. 호스팅된 계산 환경은 하나 이상의 신속하게 프로비저닝되고 해제된 계산 자원들을 포함할 수도 있으며, 이러한 계산 자원들은 계산 장치, 네트워킹 장치, 및/또는 저장 장치를 포함할 수도 있다. 호스팅된 계산 환경은 또한 클라우드 계산 환경이라고 할 수도 있다. 일부 예들에서, 서비스 제공자 컴퓨터(들)(1410)는, 네트워크(들)(1408)를 통해 또는 다른 네트워크 접속을 통해 사용자 장치(들)(1404) 및/또는 다른 서비스 제공자들과 통신할 수도 있다. 서비스 제공자 컴퓨터(들)(1410)는, 아마도 클러스터 내에, 서버 팜으로서, 또는 서로 연관되지 않은 개별 서버들로서 배열된 하나 이상의 서버를 포함할 수도 있다. 이러한 서버들은, 통합 분산형 계산 환경의 일부로서 구성될 수 있다.
예시적인 한 구성에 있어서, 서비스 제공자 컴퓨터(들)(1410)는, 적어도 하나의 메모리(1418) 및 하나 이상의 처리 유닛(또는 프로세서(1420))을 포함할 수도 있다. 프로세서(들)(1420)는, 하드웨어, 컴퓨터 실행가능 명령어, 펌웨어, 또는 이들의 조합으로 적절하게 구현되는 임의의 프로세싱 로직일 수 있다. 프로세서(들)(1420)의 컴퓨터 실행가능 명령어 또는 펌웨어 구현은, 기술된 다양한 기능들을 수행하기 위해 임의의 적절한 프로그래밍 언어로 작성된 컴퓨터 실행가능 또는 기계 실행가능 명령어들을 포함할 수도 있다.
일부 경우에, 하드웨어 프로세서(들)(1420)는 단일 코어 프로세서 또는 멀티 코어 프로세서일 수도 있다. 멀티 코어 프로세서는 동일한 프로세서 내에 다수의 처리 유닛들을 포함할 수도 있다. 일부 실시예에서, 멀티 코어 프로세서들은, 제2레벨 또는 제3레벨 캐시들과 버스 등의 소정의 자원들을 공유할 수도 있다. 일부 경우에, 단일 코어 또는 멀티 코어 프로세서의 각 코어는, 또한, 다중 실행 논리 프로세서(또는 스레드)를 포함할 수도 있다. (예를 들어, 다중 논리 프로세서들을 갖는) 이러한 코어에서는, 실행 파이프 라인의 여러 단계들과 하위 수준 캐시들도 공유될 수도 있다.
메모리(1418)는, 프로세서(들)(1420) 상에 로딩될 수 있고 실행가능한 프로그램 명령어들 및 이들 프로그램의 실행 동안 생성된 데이터를 저장할 수도 있다. 서비스 제공자 컴퓨터(들)(1410)의 구성 및 유형에 따라, 메모리(1418)는 (RAM 등의) 휘발성 및/또는 (ROM, 플래시 메모리 등의) 비휘발성일 수도 있다. 서비스 제공자 컴퓨터(들)(1410) 또는 서버는, 또한, 탈착가능 저장 장치 및/또는 탈착불가 저장 장치를 포함할 수도 있는 추가 저장 장치(1422)를 포함할 수도 있다. 추가 저장 장치(1422)는 자기 저장 장치, 광학 디스크, 및/또는 테이프 저장 장치를 포함할 수도 있지만, 이에 한정되는 것은 아니다. 디스크 드라이브 및 이에 연관된 컴퓨터 판독가능 매체는 계산 장치에 대한 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈, 및 기타 데이터의 비휘발성 저장 장치를 제공할 수도 있다. 일부 구현예들에서, 메모리(1418)는, SRAM, DRAM, 또는 ROM 등의 서로 다른 다수의 유형의 메모리를 포함할 수도 있다.
탈착가능 및 탈착불가인, 메모리(1418) 및 추가 저장 장치(1422)는 모두 컴퓨터 판독가능 저장 매체의 예들이다. 예를 들어, 컴퓨터 판독가능 저장 매체는, 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈, 또는 다른 데이터와 같은 정보를 저장하기 위한 임의의 방법 또는 기술로 구현된 휘발성 또는 비휘발성, 탈착가능 및 탈착불가 매체를 포함할 수도 있다. 메모리(1418)와 추가 저장 장치(1422)는 모두 컴퓨터 저장 매체의 예들이다. 서비스 제공자 컴퓨터(들)(1410)에 존재할 수도 있는 추가 유형의 컴퓨터 저장 매체는, PRAM, SRAM, DRAM, RAM, ROM, EEPROM, 플래시 메모리, 또는 다른 메모리 기술, CD-ROM, DVD, 또는 다른 광학 저장 장치, 자기 카세트, 자기 테이프, 자기 디스크 저장 장치, 또는 다른 자기 저장 장치, 또는 원하는 정보를 저장하는 데 사용될 수 있고 서비스 제공자 컴퓨터(들)(1410)에 의해 액세스될 수 있는 다른 임의의 매체를 포함할 수도 있지만, 이러한 예들로 한정되지 않는다. 상기한 예들 중 임의의 것의 조합도 컴퓨터 판독가능 매체의 범위 내에 포함되어야 한다.
대안으로, 컴퓨터 판독가능 통신 매체는, 반송파 또는 다른 전송과 같이 데이터 신호 내에서 송신되는 컴퓨터 판독가능 명령어, 프로그램 모듈, 또는 다른 데이터를 포함할 수도 있다. 그러나, 본 명세서에서 사용되는 바와 같이, 컴퓨터 판독가능 저장 매체는 컴퓨터 판독가능 통신 매체를 포함하지 않는다.
서비스 제공자 컴퓨터(들)(1410)는, 또한, 서비스 제공자 컴퓨터(들)(1410)가 저장된 데이터베이스, 다른 계산 장치 또는 서버, 사용자 단말, 및/또는 네트워크(들)(1408) 상의 다른 장치들과 통신할 수 있게 하는 통신 접속부(들)(1424)를 포함할 수도 있다. 서비스 제공자 컴퓨터(들)(1410)는, 또한, 키보드, 마우스, 펜, 음성 입력 장치, 터치 입력 장치, 디스플레이, 스피커, 프린터 등과 같은 I/O 장치(들)(1426)를 포함할 수도 있다. 저장 장치(1422)와 함께, 통신 접속부(들)(1424) 및 I/O 장치(들)(1426)은 주변 장치로 설명될 수 있다.
메모리(1418)는 운영 시스템(1428), 하나 이상의 데이터 저장소들(1430), 및/또는 하나 이상의 어플리케이션 프로그램(1432) 또는 본 개시의 특징을 구현하기 위한 서비스를 포함할 수 있다.
서비스 제공자 컴퓨터(들)(1410)는 또한 하나 이상의 통신 채널들(1434)을 포함할 수 있다. 통신 채널(1434)은 서비스 제공자 컴퓨터(1410)의 다양한 컴포넌트들이 통신할 수 있는 매체를 제공할 수 있다. 통신 채널 또는 채널들(1434)은 버스, 링, 스위칭 구조 또는 네트워크의 형태를 취할 수 있다.
본 명세서에 설명된 모듈들은 소프트웨어 모듈, 하드웨어 모듈, 또는 이들의 적절한 조합일 수도 있다. 모듈이 소프트웨어 모듈인 경우, 모듈은, 비일시적 컴퓨터 판독가능 매체에서 구체화될 수 있고, 본 명세서에 설명된 컴퓨터 시스템의 프로세서에 의해 처리될 수 있다. 설명된 프로세스 및 아키텍처는 임의의 사용자 상호작용 전에 실시간으로 또는 비동기 모드에서 수행될 수 있다는 점에 주목해야 한다. 모듈은 도 14에서 제안된 방식으로 구성될 수도 있고/있거나, 본 명세서에서 설명된 기능들은 개별 모듈들로서 존재하는 하나 이상의 모듈들에 의해 제공될 수 있고 및/또는 본 명세서에서 설명된 모듈 기능들은 다수의 모듈들에 걸쳐 분산될 수 있다.
본 개시의 실시 예들은 다음의 관점에서 설명될 수 있다:
제1항. 네트워크 구조를 통한 데이터 통신 방법에 있어서:
사용자 어플리케이션으로부터 네트워크 구조를 통한 단일 접속을 이용하여 소스 IP 어드레스로부터 목적지 IP 어드레스로 전송될 관련 데이터 스트림을 수신하는 단계;
통신 프로토콜에 따라 상기 관련 데이터 스트림을 복수의 패킷들로 분할하는 단계;
상기 복수의 패킷들의 각각의 패킷에 대해:
관련 데이터 스트림과 관련된 복수의 플로우렛들로부터 상기 전송될 패킷에 대한 각각의 플로우렛을 결정하는 단계;
상기 패킷에 대한 상기 결정된 플로우렛에 기초하여, 상기 패킷을 라우팅하기 위해 상기 네트워크 구조의 네트워크 스위치에 의해 사용되는 패킷의 헤더 내에 필드(field)를 설정하는 단계; 및
상기 결정된 플로우렛을 통해 상기 패킷을 송신하는 단계; 및
상기 네트워크 구조를 통해 상기 복수의 플로우렛들의 각각의 플로우렛에 패킷들을 전송하는 단계를 포함하고,
상기 통신 프로토콜은 사용자 데이터크램 프로토콜(User Datagram Protocol, UDP)이고, 상기 패킷의 상기 헤더 내의 상기 필드는 UDP 헤더의 소스 포트(port) 필드인, 방법.
제2항. 제1항의 방법에 있어서, 상기 전송될 패킷에 대한 상기 플로우렛을 결정하는 단계는:
상기 복수의 플로우렛들의 각각의 플로우렛의 활성 패킷들의 수를 결정하는 단계;
상기 복수의 플로우렛의 각각의 플로우렛의 지연 시간(latency)을 결정하는 단계;
상기 복수의 플로우렛의 각각의 플로우렛의 드랍 율(drop rate)을 얻는 단계;
상기 사용자 어플리케이션의 정보를 얻는 단계; 또는
상기 복수의 패킷들이 상기 복수의 플로우렛들에 어떻게 할당되어야 하는지에 관한 표시(indication)를 상기 사용자 어플리케이션으로부터 수신하는 단계 중 적어도 하나를 포함하는, 방법.
제3항. 제1항 또는 제2항의 방법에 있어서, 복수의 플로우렛들의 각각의 플로우렛의 패킷들을 상기 네트워크 구조로 전송하는 단계는 상기 패킷들을 하나의 물리적 포트 또는 다중 물리적 포트들을 통해 전송하는 단계를 포함하는, 방법.
제4항. 방법에 있어서:
사용자 어플리케이션으로부터 네트워크를 통한 단일 접속을 이용하여 소스 어드레스로부터 목적지 어드레스로 전송될 데이터를 수신하는 단계;
통신 프로토콜에 따라 상기 데이터를 복수의 패킷들로 분할하는 단계; 및
상기 복수의 패킷들의 각각의 패킷에 대해:
복수의 플로우렛들로부터 전송될 상기 패킷에 대한 각각의 플로우렛을 결정하는 단계;
상기 패킷에 대한 상기 결정된 플로우렛에 기초하여, 상기 패킷을 라우팅하기 위해 상기 네트워크의 네트워크 스위치에 의해 사용되는 패킷 내의 필드를 설정하는 단계; 및
상기 네트워크를 통해 전송하기 위해 상기 결정된 플로우렛을 통해 상기 패킷을 송신하는 단계를 포함하는, 방법.
제5항. 제4항의 방법에 있어서, 상기 통신 프로토콜은 사용자 데이터크램 프로토콜(UDP)이고, 상기 패킷의 상기 헤더 내의 상기 필드는 UDP 헤더의 소스 포트 필드인, 방법.
제6항. 제4항 또는 제5항의 방법에 있어서, 상기 패킷의 상기 헤더 내의 상기 상기 필드는 IP 헤더 내의 소스 IP 어드레스, IP 헤더 내의 목적지 IP 어드레스, IPv6 헤더 내의 FlowID, 또는 멀티프로토콜 라벨 스위칭(MPLS) 라벨인, 방법.
제7항. 제4항 내지 제6항 중 어느 하나의 방법에 있어서, 각각의 패킷은 플로우렛 인덱스 또는 패킷 시퀀스 번호 중 적어도 하나를 포함하는, 방법.
제8항. 제7항의 방법에 있어서, 목적지 어드레스를 갖는 목적지 엔트포인트는 상기 수신된 패킷의 헤더로부터 수신된 패킷의 플로우렛 인덱스 또는 패킷 시퀀스 번호를 얻는, 방법.
제9항. 제4항 내지 제8항 중 어느 하나의 방법에 있어서, 각각의 플로우렛에 대한 활성 패킷들의 시퀀스 번호들을 유지하는 단계를 더 포함하는, 방법.
제10항. 제9항의 방법에 있어서, 상기 패킷의 전송 후 또는 상기 목적지 어드레스에서 상기 패킷이 수신되었다는 확인을 수신한 후에 활성 패킷들의 상기 시퀀스 번호들로부터 패킷의 시퀀스 번호를 제거하는 단계를 더 포함하는, 방법.
제11항. 제4항 내지 제10항 중 어느 하나의 방법에 있어서, 상기 전송될 패킷에 대한 상기 플로우렛을 결정하는 단계는:
상기 복수의 플로우렛들의 각각의 플로우렛의 활성 패킷들의 수를 결정하는 단계;
상기 복수의 플로우렛의 각각의 플로우렛의 지연 시간을 결정하는 단계;
상기 복수의 플로우렛의 각각의 플로우렛의 드랍 율을 얻는 단계;
상기 사용자 어플리케이션의 정보를 얻는 단계; 또는
상기 복수의 패킷들이 상기 복수의 플로우렛들에 어떻게 할당되어야 하는지에 관한 표시(indication)를 상기 사용자 어플리케이션으로부터 수신하는 단계 중 적어도 하나를 포함하는, 방법.
제12항. 제4항 내지 제11항 중 어느 하나의 방법에 있어서, 하나 이상의 물리적 포트들을 통해 상기 복수의 플로우렛들의 각각의 플로우렛의 패킷들을 상기 네트워크로 전송하는 단계를 더 포함하는, 방법.
제13항. 제12항의 방법에 있어서, 상기 복수의 플로우렛들의 각각의 플로우렛의 상기 패킷들을 상기 네트워크로 전송하는 단계는 각각의 패킷의 상기 헤더 내의 정보에 기초하여 복수의 물리적 포트들로부터 각각의 패킷들이 송신되는 물리적 포트를 선택하는 단계를 포함하는, 방법.
제14항. 제4항 내지 제13항 중 어느 하나의 방법에 있어서, 상기 전송될 패킷에 대한 상기 플로우렛을 결정하는 단계는 상기 사용자 어플리케이션으로부터의 데이터 이외의 데이터에 대한 패킷들의 상기 헤더의 상기 필드에 설정된 값을 기반으로 하는, 방법.
제15항. 제4항 내지 제14항 중 어느 하나의 방법에 있어서, 상기 전송될 패킷에 대한 플로우렛을 결정하는 단계는 사용중인 플로우렛들의 수를 동적으로 조정하는 단계를 포함하는 방법.
제16항. 제15항의 방법에 있어서, 사용중인 플로우렛들의 총 수는 임계 값 아래이고 상기 임계 값은 네트워크 지연 시간, 네트워크 대역폭, 또는 네트워크 혼장을 기초로 결정되는, 방법.
제17항. 제4항 내지 제16항 중 어느 하나의 방법에 있어서, 각각의 플로우렛 내의 활성 패킷들의 수는 임계 값 아래이고, 상기 임계 값은 네트워크 혼잡을 기초로 조정 가능한, 방법.
제18항. 제4항 내지 제17항 중 어느 하나의 방법에 있어서, 상기 플로우렛의 기존 경로가 임계 값을 초과하는 지연 시간 또는 드랍 율을 갖는다는 결정에 응답하여 상기 네트워크를 통해 다른 경로에 플로우렛 및 그 관련 패킷들을 할당하는 단계를 더 포함하는, 방법.
제19항. 장치에 있어서:
프로세싱 로직;
상기 프로세싱 로직에 결합되고 상기 프로세싱 로직에 의해 판독 가능한 컴퓨터 판독 가능 저장 장치로서, 상기 프로세싱 로직으로 하여금:
사용자 어플리케이션으로부터 네트워크를 통한 단일 접속을 이용하여 소스 어드레스로부터 목적지 어드레스로 전송될 메시지를 수신하고;
통신 프로토콜에 따라 상기 메시지를 복수의 패킷들로 분할하고;
상기 복수의 패킷들의 각각의 패킷에 대해:
복수의 플로우렛들로부터 전송될 상기 패킷에 대한 플로우렛을 할당하고;
상기 할당된 플로우렛에 기초하여, 상기 패킷을 라우팅하기 위해 상기 네트워크의 네트워크 스위치에 의해 사용되는 패킷 내의 필드를 설정하고; 및
상기 네트워크를 통해 전송하기 위해 상기 할당된 플로우렛을 통해 상기 패킷을 송신;하게 하는 지시(instructions)를 포함하는 상기 컴퓨터 판독 가능 저장 장치;
상기 프로세싱 로직에 결합되고 상기 프로세싱 로직에 의해 액세스 가능한 메모리로서, 복수의 패킷들의 대기열들을 저장하도록 구성된 상기 메모리; 및
상기 네트워크와 통신하는 하나 이상의 물리적 포트들을 포함하고, 상기 복수의 패킷들은 상기 하나 이상의 물리적 포트들을 통해 상기 네트워크로 전송되는, 장치.
제20항. 제19항의 장치에 있어서, 상기 통신 프로토콜은 UDP이고, 상기 패킷의 상기 헤더 내의 상기 필드는 UDP 헤더의 소스 포트 필드인, 장치.
제21항. 제19항 또는 제20항의 장치에 있어서, 하나 이상의 물리적 포트들 각각은 고유한 IP 어드레스를 갖고, 상기 패킷의 상기 헤더 내의 상기 필드는 IP 헤더의 상기 소스 IP 어드레스 필드인, 장치.
제22항. 제19항 내지 제21항 중 어느 하나의 장치에 있어서, 상기 전송될 패킷에 대한 상기 플로우렛을 결정하는 것은:
상기 복수의 플로우렛들의 각각의 플로우렛의 활성 패킷들의 수를 결정하는 것;
상기 복수의 플로우렛의 각각의 플로우렛의 지연 시간을 결정하는 것;
상기 복수의 플로우렛의 각각의 플로우렛의 드랍 율을 얻는 것;
상기 사용자 어플리케이션의 정보를 얻는 것; 또는
상기 복수의 패킷들이 상기 복수의 플로우렛들에 어떻게 할당되어야 하는지에 관한 표시를 상기 사용자 어플리케이션으로부터 수신하는 것 중 적어도 하나를 포함하는, 장치.
제23항. 제19항 내지 제22항 중 어느 하나의 장치에 있어서, 상기 컴퓨터 판독 가능 저장 장치는 상기 프로세싱 로직이 상기 하나 이상의 물리적 포트들로부터 패킷들 또는 확인 응답을 수신하는 것을 야기하는 지시를 더 포함하는, 장치.
제24항. 제19항 내지 제23항 중 어느 하나의 장치에 있어서, 상기 장치는 시스템-온-칩(system-on-chip, SOC), 프로세서, 네트워크 인터페이스 카드(network interface card, NIC), 스위치 어플리케이션 특정 집적 회로(application specific integrated circuit, ASIC) 또는 필드 프로그래머블 게이트 어레이(field programmable gate array, FPGA) 중 하나를 포함하는, 장치.
제25항. 제19항 내지 제24항 중 어느 하나의 장치에 있어서, 상기 프로세싱 로직은 SOC, 프로세서, ASIC 또는 FPGA 중 하나를 포함하는, 장치.
도 15는 다양한 실시 예들에 따라 양태들을 구현하기 위한 예시적인 환경(1500)의 양태들을 도시한다. 인식할 수 있는 바와 같이, 웹 기반 환경이 설명을 위해 사용되지만, 다양한 환경들을 구현하도록 상이한 환경들이 적절하게 사용될 수도 있다. 환경은, 적절한 네트워크(1504)를 통해 요청, 메시지, 또는 정보를 송신 및 수신하고 정보를 장치의 사용자에게 다시 반송하도록 동작가능한 임의의 적절한 장치를 포함할 수 있는 전자 클라이언트 장치(1502)를 포함한다. 이러한 클라이언트 장치의 예로는, 퍼스널 컴퓨터, 휴대폰, 핸드헬드 메시징 장치, 랩톱 컴퓨터, 셋톱 박스, 개인 정보 단말기, 전자 북 판독기 등이 있다. 네트워크는, 인트라넷, 인터넷, 셀룰러 네트워크, 로컬 영역 네트워크, 또는 다른 임의의 이러한 네트워크 또는 이들의 조합을 포함하는 임의의 적절한 네트워크를 포함할 수 있다. 이러한 시스템에 사용되는 구성요소들은 선택되는 환경 및/또는 네트워크의 유형에 적어도 부분적으로 의존할 수 있다. 이러한 네트워크를 통해 통신하기 위한 프로토콜과 구성요소는 공지되어 있으며 본 명세서에서 상세히 설명하지 않는다. 네트워크를 통한 통신은 유선 접속 또는 무선 접속 및 이들의 조합에 의해 가능해질 수 있다. 이 예에서, 환경이 요청을 수신하고 이에 응답하여 콘텐츠를 제공하도록 웹 서버(1506)를 포함하므로 네트워크가 인터넷을 포함하지만, 다른 네트워크에 대해서는, 유사한 목적을 제공하는 대체 장치가 통상의 기술자에게 자명하다.
예시적인 환경은 적어도 하나의 어플리케이션 서버(1508) 및 데이터 저장소(1510)를 포함한다. 적절한 데이터 저장소로부터 데이터를 취득하는 것과 같은 작업을 수행하기 위해 상호작용할 수 있는, 여러 어플리케이션 서버들, 계층들, 또는 기타 요소들, 프로세스들 또는 구성요소들이 연결되거나 그 외에는 구성될 수도 있음을 이해해야 한다. 본 명세서에서 사용되는 바와 같이, "데이터 저장소"라는 용어는, 임의의 표준 환경, 분산 환경, 또는 클러스터된 환경에서 다수의 데이터 서버들, 데이터베이스들, 데이터 저장 장치들, 및 데이터 저장 매체들의 임의의 개수와 조합을 포함할 수도 있는, 데이터를 저장, 액세스, 및 검색할 수 있는 임의의 장치 또는 장치들의 조합을 가리킨다. 어플리케이션 서버는, 어플리케이션을 위한 데이터 액세스와 비즈니스 로직의 대부분을 처리하는, 클라이언트 장치를 위한 하나 이상의 어플리케이션의 양태들을 실행하는 데 필요한 바와 같이 데이터 저장소와 통합하기 위한 임의의 적절한 하드웨어 및 소프트웨어를 포함할 수 있다. 어플리케이션 서버는, 데이터 저장소와 협력하여 액세스 제어 서비스를 제공하며, 사용자에게 전송될 텍스트, 그래픽, 오디오, 및/또는 비디오와 같은 콘텐츠를 생성할 수 있으며, 이러한 콘텐츠는, 이 예에서 HTML, XML, 또는 다른 적절한 구조화된 언어의 형태로 웹 서버에 의해 사용자에게 제공될 수도 있다. 클라이언트 장치(1502)와 어플리케이션 서버(1508) 간의 콘텐츠 전달뿐만 아니라 모든 요청과 응답의 처리는 웹 서버에 의해 처리될 수 있다. 본 명세서에서 논의된 구조화된 코드가 본원의 다른 곳에서 논의된 바와 같이 임의의 적절한 장치 또는 호스트 기계 상에서 실행될 수 있으므로, 웹 및 어플리케이션 서버는 요구되지 않으며 단지 예시적인 구성 요소들일 뿐이라는 것을 이해해야 한다.
데이터 저장소(1510)는, 특정 양태에 관한 데이터를 저장하기 위한 몇몇 별도의 데이터 테이블, 데이터베이스, 또는 다른 데이터 저장 기구 및 매체를 포함할 수 있다. 예를 들어, 도시된 데이터 저장소는, 생산측을 위한 콘텐츠를 제공하는 데 사용될 수 있는 생산 데이터(1512) 및 사용자 정보(1516)를 저장하기 위한 기구를 포함한다. 데이터 저장소는, 또한, 보고, 분석, 또는 이러한 다른 목적을 위해 사용될 수 있는 로그 데이터(1514)를 저장하기 위한 기구를 포함하는 것으로 도시된다. 페이지 이미지 정보 및 적절한 정보에 액세스하는 것과 같이 데이터 저장소에 저장될 필요가 있는 많은 다른 양태들이 있을 수 있으며, 이러한 정보는 데이터 저장소(1510)의 추가 기구들에 또는 적절한 경우 위에서 열거된 기구들 중 임의의 것에 저장될 수 있다는 점을 이해해야 한다. 데이터 저장소(1510)는, 어플리케이션 서버(1508)로부터 명령어를 수신하고 이에 응답하여 데이터를 취득, 업데이트, 또는 그 외에는 처리하도록 연관된 로직을 통해 동작 가능하다. 일례로, 사용자는 소정 유형의 항목에 대한 검색 요청을 제출할 수도 있다. 이 경우, 데이터 저장소는, 사용자 정보에 액세스하여 사용자의 아이덴티티를 검증할 수도 있고, 카탈로그 세부 정보에 액세스하여 해당 유형의 항목에 대한 정보를 취득할 수 있다. 이어서, 정보는, 사용자가 사용자 장치(1502) 상의 브라우저를 통해 볼 수 있는 웹 페이지 상의 결과 리스트와 같이 사용자에게 리턴될 수 있다. 관심있는 특정 항목에 대한 정보는 브라우저의 전용 페이지 또는 창에서 볼 수 있다.
각각의 서버는, 통상적으로 해당 서버의 일반적인 관리 및 동작을 위한 실행 가능한 프로그램 명령어들을 제공하는 운영 시스템을 포함하며, 통상적으로, 서버의 프로세서에 의해 실행될 때 서버로 하여금 의도된 기능을 수행하게 하는 명령어를 저장하는 컴퓨터 판독가능 저장 매체(예를 들어, 하드 디스크, 랜덤 액세스 메모리, 판독 전용 메모리 등)를 포함한다. 서버의 운영 시스템 및 일반적인 기능에 대한 적절한 구현예들은, 공지되어 있거나 상업적으로 이용가능하며, 특히 본원의 개시 내용에 비추어 볼 때 통상의 기술자에 의해 용이하게 구현된다.
일 실시 예에서의 환경은, 하나 이상의 컴퓨터 네트워크 또는 직접 접속을 이용하여 통신 링크를 통해 상호 접속되는 여러 컴퓨터 시스템들과 구성요소들을 이용하는 분산형 계산 환경이다. 그러나, 통상의 기술자는, 이러한 시스템이 도 15에 도시된 것보다 적은 또는 많은 구성요소들을 갖는 시스템에서 동등하게 동작할 수 있음을 알 것이다. 따라서, 도 15의 시스템(1500)의 예는 본질적으로 예시적인 것이며 본 개시 내용의 범위를 제한하지 않는 것으로 취급해야 한다.
다양한 실시 예는, 또한, 어떤 경우에는 다수의 어플리케이션들 중 임의의 어플리케이션을 동작시키는 데 사용될 수 있는 하나 이상의 사용자 컴퓨터, 계산 장치 또는 처리 장치를 포함할 수 있는 다양한 운영 환경들에서 구현될 수 있다. 사용자 또는 클라이언트 장치는, 모바일 소프트웨어를 실행하고 다수의 네트워킹 및 메시징 프로토콜들을 지원할 수 있는 셀룰러, 무선, 및 핸드헬드 장치들뿐만 아니라 표준 운영 시스템을 실행하는 데스크톱 또는 랩톱 컴퓨터와 같은 다수의 범용 개인 컴퓨터들 중 임의의 것도 포함할 수 있다. 또한, 이러한 시스템은, 상업적으로 이용 가능한 다양한 운영 시스템들 중 임의의 것을 실행하는 다수의 워크스테이션들, 및 개발 및 데이터베이스 관리와 같은 목적을 위한 다른 공지된 어플리케이션들을 포함할 수 있다. 이러한 장치들은, 또한, 네트워크를 통해 통신할 수 있는, 더미 단말, 씬 클라이언트, 게임 시스템, 및 기타 장치 등의 다른 전자 장치를 포함할 수 있다.
대부분의 실시 예들은, 전송 제어 프로토콜/인터넷 프로토콜("TCP/IP"), 개방 시스템 상호접속("OSI"), 파일 전송 프로토콜("FTP"), 범용 플러그 앤 플레이("UpnP"), 네트워크 파일 시스템(NFS), 공통 인터넷 파일 시스템("CIFS"), 및 AppleTalk 등의 상업적으로 이용가능한 다양한 프로토콜들 중 임의의 것을 사용하는 통신을 지원하도록 통상의 기술자에게 익숙한 적어도 하나의 네트워크를 이용한다. 네트워크는, 예를 들어, 로컬 에리어 네트워크, 광역 네트워크, 가상 사설망, 인터넷, 인트라넷, 엑스트라넷, 공중 교환 전화망, 적외선 네트워크, 무선 네트워크, 및 이들의 임의의 조합일 수 있다.
웹 서버를 이용하는 실시 예들에서, 웹 서버는, "HTTP" 서버, FTP 서버, CGI(공통 게이트웨이 인터페이스) 서버, 데이터 서버, Java 서버, 및 비즈니스 어플리케이션 서버를 포함하는 다양한 서버 또는 미드티어 어플리케이션들 중 임의의 것을 실행할 수 있다. 서버(들)는, 또한, 예를 들어, Java(등록상표), C, C# 혹은 C++, 또는 임의의 스크립팅 언어, 예컨대, Perl, Python 또는 TCL, 및 이들의 조합 등의 임의의 프로그래밍 언어로 기입된 하나 이상의 스크립트 또는 프로그램으로서 구현될 수도 있는 하나 이상의 웹 어플리케이션을 실행함으로써, 사용자 장치로부터의 요청에 응답하여 프로그램 또는 스크립트를 실행할 수도 있다. 서버(들)는, 또한, Oracle(등록상표), Microsoft(등록상표), Sybase(등록상표), 및 IBM(등록상표)에 의해 상업적으로 이용 가능한 것을 포함하는 데이터베이스 서버를 포함할 수도 있지만, 이러한 예로 한정되지는 않는다.
환경은 상술한 바와 같이 다양한 데이터 저장소들 및 다른 메모리 및 저장 매체를 포함할 수 있다. 이들은, 네트워크에 걸쳐 컴퓨터들 중 임의의 컴퓨터 또는 모든 컴퓨터로부터 원격된 또는 컴퓨터들 중 하나 이상에 대하여 로컬인(및/또는 그 하나 이상에 상주하는) 저장 매체 상과 같은 다양한 위치에 상주할 수 있다. 실시 예들의 특정 세트에 있어서, 정보는 통상의 기술자에게 익숙한 SAN(저장장치 영역 네트워크)에 상주할 수도 있다. 유사하게, 컴퓨터, 서버, 또는 다른 네트워크 장치에 기인하는 기능들을 수행하기 위한 임의의 필요한 파일들은 적절하게 로컬 및/또는 원격으로 저장될 수도 있다. 시스템이 컴퓨터화된 장치들을 포함하는 경우, 이러한 각 장치는 버스를 통해 전기적으로 결합될 수 있는 하드웨어 요소들을 포함할 수 있으며, 이 요소들은, 예를 들어, 적어도 하나의 CPU(중앙 처리 유닛), 적어도 하나의 입력 장치(예를 들어, 마우스, 키보드, 제어기, 터치 스크린, 또는 키패드), 및 적어도 하나의 출력 장치(예를 들어, 표시 장치, 프린터, 또는 스피커)를 포함할 수 있다. 또한, 이러한 시스템은, 디스크 드라이브, 광 저장 장치, 및 랜덤 액세스 메모리("RAM") 또는 판독 전용 메모리("ROM") 등의 고체 상태 저장 장치와 같은 하나 이상의 저장 장치 및 탈착가능 미디어 장치, 메모리 카드, 플래시 카드 등을 포함할 수도 있다.
이러한 장치는, 또한, 전술한 바와 같이, 컴퓨터 판독가능 저장매체 판독기, 통신 장치(예를 들어, 모뎀, 네트워크 카드(무선 또는 유선), 적외선 통신 장치 등), 및 작업 메모리를 포함할 수 있다. 컴퓨터 판독가능 저장매체 판독기는, 원격, 로컬, 고정식 및/또는 탈착식 저장 장치를 나타내는 컴퓨터 판독가능 저장 매체 및 컴퓨터 판독가능 정보를 일시적으로 및/또는 더욱 영구적으로 포함, 저장, 송신, 및 검색하기 위한 저장 매체에 접속될 수 있거나 이러한 저장 매체들을 수용하도록 구성될 수 있다. 시스템 및 다양한 장치들은, 또한, 통상적으로, 클라이언트 어플리케이션 또는 웹 브라우저와 같은 운영 시스템과 어플리케이션 프로그램을 포함하는 적어도 하나의 작업 메모리 장치 내에 위치하는 다수의 소프트웨어 어플리케이션, 모듈, 서비스 또는 다른 요소들을 포함한다. 다른 실시 예들은 상술한 바로부터 변형된 많은 예들을 가질 수도 있음을 이해해야 한다. 예를 들어, 맞춤형 하드웨어가 또한 사용될 수 있고/있거나, 특정 요소들이 하드웨어, (애플릿 등의 휴대용 소프트웨어를 포함하는) 소프트웨어, 또는 둘 모두로 구현될 수도 있다. 또한, 네트워크 입력/출력 장치 등의 계산 장치에 대한 접속을 채택할 수도 있다.
코드 또는 코드의 일부를 포함하기 위한 저장 매체 컴퓨터 판독가능 매체는, RAM, ROM, EEPROM, 플래시 메모리 또는 기타 메모리 기술, CD-ROM, DVD, 또는 기타 광학 저장소, 자기 카세트, 자기 테이프, 자기 디스크 저장소, 또는 기타 자기 저장 장치, 또는 원하는 정보를 저장하는 데 사용될 수 있고 시스템 장치에 의해 액세스될 수 있는 다른 임의의 매체를 포함하는, 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈 또는 기타 데이터 등의 정보의 저장 및/또는 송신을 위한 임의의 방법이나 기술로 구현되는 휘발성 및 비휘발성, 탈착가능 또는 비-탈착가능 매체 등의 저장 매체와 통신 매체를 포함하지만 이에 한정되지 않는, 당업계에 알려져 있거나 사용되는 임의의 적절한 매체를 포함할 수 있다. 본 명세서에서 제공된 교시와 개시 내용에 기초하여, 통상의 기술자는 다양한 실시 예를 구현하기 위한 다른 방식 및/또는 방법을 이해할 것이다.
이에 따라, 명세서 및 도면은 제한적인 의미라기보다는 예시적인 것으로 간주되어야 한다. 그러나, 특허청구범위에 기재된 본 개시 내용의 사상 및 범위를 벗어나지 않으면서 다양한 변경 및 수정이 이루어질 수도 있음은 명백할 것이다.
다른 변형도 본 개시 내용의 사상 내에 있다. 따라서, 개시된 기술들은 다양한 변형 및 대안적인 구조의 영향을 받기 쉽지만, 그 기술들의 예시된 실시 예들은 도면에 도시되어 있으며 위에서 상세히 설명하였다. 그러나, 본 개시 내용을 개시된 특정 형태 또는 형태들로 한정하려는 의도는 없지만, 반대로, 첨부된 청구범위에 정의된 바와 같이, 본 개시 내용의 사상 및 범위 내에 있는 모든 변형, 대안적인 구성, 및 등가물을 포함하려는 것임을 이해해야 한다.
(특히, 이하의 청구범위의 문맥에서) 개시된 실시 예들을 기술할 때 "한"(a), "하나"(an), "그"(the) 및 유사한 지시자의 사용은, 본 명세서에서 달리 명시되거나 문맥에 의해 명확하게 모순되지 않는 한, 단수 및 복수를 모두 포함하는 것으로 해석되어야 한다. "포함하는"(comprising), "갖는"(having), "포함하는"(including), 및 "포함하는"(containing)이라는 용어들은, 다른 언급되지 않는 한, 개방형 용어들(즉, "포함하지만 이에 한정되지 않는"을 의미)로서 해석되어야 한다. "접속된"이라는 용어는, 사이에 개재하는 것이 있더라도, 부분적으로 또는 전체적으로 포함되거나, 부착되거나, 함께 연결된 것으로서 해석되어야 한다. 본 명세서에서의 값들의 범위 열거는, 본 명세서에서 달리 지시되지 않는 한, 그 범위 내에 속하는 각각의 개별적인 값을 개별적으로 언급하는 약식 방법으로서 기능하기 위한 것일 뿐이며, 각각의 개별적인 값은 본 명세서에서 개별적으로 인용된 것처럼 본 명세서에 통합된다. 본 명세서에 기술된 모든 방법들은, 본 명세서에서 달리 지시되지 않는 한 또는 문맥에 의해 명백하게 모순되지 않는 한, 임의의 적합한 순서로 수행될 수 있다. 본 명세서에서 제공된 임의의 모든 예들 또는 예시적인 언어(예를 들어, "등의")를 사용하는 것은, 다르게 주장하지 않는 한, 본 개시 내용의 실시 예들을 더욱 잘 나타내기 위한 것이며, 본 개시 내용의 범위를 한정하지 않는다. 명세서에서의 어떠한 언어도, 청구되지 않은 요소를 본 개시 내용의 실시에 필수적인 것으로 나타내는 것으로서 해석되어서는 안 된다.
달리 특정하게 명시되지 않는 한, "X, Y, Z 중 적어도 하나"라는 문구와 같은 분리어는, 일반적으로 항목, 용어 등이 X, Y, 또는, Z, 또는 이들의 임의의 조합(예를 들어, X, Y 및/또는 Z)일 수도 있다는 점을 나타내도록 사용되는 문맥으로 이해된다. 따라서, 이러한 분리어는, 일반적으로, 어떤 실시 예들이 X 중 적어도 하나, Y 중 적어도 하나, 또는 Z 중 적어도 하나가 각각에 대하여 존재해야 한다는 점을 암시하려는 것이 아니며 그러한 암시로 되어서도 안 된다.
본 개시 내용을 수행하기 위해 본 발명자들에게 공지된 최상의 모드를 포함하여 본 개시 내용의 바람직한 실시 예들이 본 명세서에 기술된다. 이들 바람직한 실시 예들의 변형은 전술한 설명을 읽음으로써 통상의 기술자에게 명백해질 수도 있다. 본 발명자는 통상의 기술자가 그러한 변형을 적절하게 사용하고, 본 발명자는 본 개시 내용을 본 명세서에 구체적으로 기술된 것 이외의 방법으로 실시하고자 한다. 이에 따라, 본 개시 내용은 적용 가능한 법률에 의해 허용되는 바와 같이 본 명세서에 첨부된 청구범위에 기재된 청구 대상의 모든 변경 및 등가물을 포함한다. 또한, 본 명세서에서 달리 지시되지 않는 한 또는 문맥에 의해 명확하게 모순되지 않는 한, 모든 가능한 변형에서 상기 언급된 요소들의 임의의 조합이 본 개시 내용에 포함된다.
본원에 인용된 출판물, 특허 출원 및 특허를 포함하는 모든 문헌은 각각의 문헌이 개별적으로 및 참고 문헌으로 인용된 것으로서 본원에 그 전체가 기재되어있는 것과 동일한 정도로 참고로 포함된다.

Claims (15)

  1. 방법에 있어서:
    사용자 어플리케이션(user application)으로부터 네트워크를 통한 단일 접속(single connection)을 이용하여 소스 어드레스(source address)로부터 목적지 어드레스(destination address)로 전송될 데이터(data)를 수신하는 단계;
    통신 프로토콜(communication protocol)에 따라 상기 데이터를 복수의 패킷들(packets)로 분할하는 단계; 및
    상기 복수의 패킷들의 각각의 패킷에 대해:
    복수의 플로우렛(flowlet)들로부터 전송될 상기 패킷에 대한 각각의 플로우렛을 결정하는 단계;
    상기 패킷에 대한 상기 결정된 플로우렛에 기초하여, 상기 패킷을 라우팅(routing)하기 위해 상기 네트워크의 네트워크 스위치(switch)에 의해 사용되는 패킷 내의 필드(field)를 설정하는 단계; 및
    상기 네트워크를 통해 전송하기 위해 상기 결정된 플로우렛을 통해 상기 패킷을 송신(sending)하는 단계를 포함하는, 방법.
  2. 청구항 1에 있어서,
    상기 통신 프로토콜은 사용자 데이터그램 프로토콜(User Datagram Protocol, UDP)이고, 상기 패킷의 헤더(header) 내의 상기 필드는 UDP 헤더의 소스 포트(port) 필드인, 방법.
  3. 청구항 1 또는 청구항 2에 있어서,
    상기 패킷의 헤더 내의 상기 상기 필드는 IP 헤더 내의 소스 IP 어드레스, IP 헤더 내의 목적지 IP 어드레스, IPv6 헤더 내의 FlowID 필드, 또는 멀티프로토콜 라벨 스위칭(multiprotocol label switching, MPLS) 라벨인, 방법.
  4. 청구항 1 내지 청구항 3 중 어느 하나의 항에 있어서,
    각각의 패킷은 플로우렛 인덱스(index) 또는 패킷 시퀀스(sequence) 번호 중 적어도 하나를 포함하는, 방법.
  5. 청구항 1 내지 청구항 4 중 어느 하나의 항에 있어서,
    각각의 플로우렛에 대한 활성(active) 패킷들의 시퀀스 번호들을 유지하는 단계를 더 포함하는, 방법.
  6. 청구항 5에 있어서,
    상기 패킷의 전송 후 또는 상기 목적지 어드레스에서 상기 패킷이 수신되었다는 확인을 수신한 후에 활성 패킷들의 상기 시퀀스 번호들로부터 패킷의 시퀀스 번호를 제거하는 단계를 더 포함하는, 방법.
  7. 청구항 1 내지 청구항 6 중 어느 하나의 항에 있어서,
    상기 전송될 패킷에 대한 상기 플로우렛을 결정하는 단계는:
    상기 복수의 플로우렛들의 각각의 플로우렛의 활성 패킷들의 수를 결정하는 단계;
    상기 복수의 플로우렛의 각각의 플로우렛의 지연 시간(latency)을 결정하는 단계;
    상기 복수의 플로우렛의 각각의 플로우렛의 드랍 율(drop rate)을 얻는 단계;
    상기 사용자 어플리케이션의 정보를 얻는 단계; 또는
    상기 복수의 패킷들이 상기 복수의 플로우렛들에 어떻게 할당되는지에 관한 표시(indication)를 상기 사용자 어플리케이션으로부터 수신하는 단계 중 적어도 하나를 포함하는, 방법.
  8. 청구항 1 내지 7 중 어느 하나의 항에 있어서,
    하나 이상의 물리적 포트들(physical ports)을 통해 상기 복수의 플로우렛들의 각각의 플로우렛의 패킷들을 상기 네트워크로 전송하는 단계를 더 포함하는, 방법.
  9. 청구항 8에 있어서,
    상기 복수의 플로우렛들의 각각의 플로우렛의 상기 패킷들을 상기 네트워크로 전송하는 단계는 각각의 패킷의 헤더 내의 정보에 기초하여 복수의 물리적 포트들로부터 각각의 패킷들이 송신되는 물리적 포트를 선택하는 단계를 포함하는, 방법.
  10. 청구항 1 내지 청구항 9 중 어느 하나의 항에 있어서,
    상기 전송될 패킷에 대한 상기 플로우렛을 결정하는 단계는 상기 사용자 어플리케이션으로부터의 데이터 이외의 데이터에 대한 패킷들의 헤더의 상기 필드에 설정된 값을 기반으로 하는, 방법.
  11. 청구항 1 내지 청구항 10 중 어느 하나의 항에 있어서,
    각각의 플로우렛 내의 활성 패킷들의 수는 임계 값(threshold) 아래이고, 상기 임계 값은 네트워크 혼잡(congestion)을 기초로 조정 가능한, 방법.
  12. 청구항 1 내지 청구항 11 중 어느 하나의 항에 있어서,
    상기 플로우렛의 기존 경로가 임계 값을 초과하는 지연 시간 또는 드랍 율을 갖는다는 결정에 응답하여 상기 네트워크를 통해 다른 경로에 플로우렛 및 그 관련 패킷들을 할당하는 단계를 더 포함하는, 방법.
  13. 장치에 있어서:
    프로세싱 로직(processing logic);
    상기 프로세싱 로직에 결합되고 상기 프로세싱 로직에 의해 판독 가능한 컴퓨터 판독 가능 저장 장치로서, 상기 프로세싱 로직으로 하여금:
    사용자 어플리케이션으로부터 네트워크를 통한 단일 접속을 이용하여 소스 어드레스로부터 목적지 어드레스로 전송될 메시지를 수신하고;
    통신 프로토콜에 따라 상기 메시지를 복수의 패킷들로 분할하고;
    상기 복수의 패킷들의 각각의 패킷에 대해:
    복수의 플로우렛들로부터 전송될 상기 패킷에 대한 플로우렛을 할당하고;
    상기 할당된 플로우렛에 기초하여, 상기 패킷을 라우팅하기 위해 상기 네트워크의 네트워크 스위치에 의해 사용되는 패킷 내의 필드를 설정하고; 및
    상기 네트워크를 통해 전송하기 위해 상기 할당된 플로우렛을 통해 상기 패킷을 송신;하게 하는 지시(instructions)를 포함하는 상기 컴퓨터 판독 가능 저장 장치;
    상기 프로세싱 로직에 결합되고 상기 프로세싱 로직에 의해 액세스 가능한 메모리로서, 복수의 패킷들의 대기열들을 저장하도록 구성된 상기 메모리; 및
    상기 네트워크와 통신하는 하나 이상의 물리적 포트들을 포함하고,
    상기 복수의 패킷들은 상기 하나 이상의 물리적 포트들을 통해 상기 네트워크로 전송되는, 장치.
  14. 청구항 13에 있어서,
    상기 하나 이상의 물리적 포트들 각각은 고유의 IP 어드레스를 갖고, 상기 패킷의 헤더 내의 상기 필드는 IP 헤더의 소스 IP 어드레스 필드인, 장치.
  15. 청구항 13 또는 청구항 14에 있어서,
    상기 장치는 시스템-온-칩(system-on-chip, SOC), 프로세서, 네트워크 인터페이스 카드(network interface card, NIC), 스위치 어플리케이션 특정 집적 회로(application specific integrated circuit, ASIC) 또는 필드 프로그래머블 게이트 어레이(field programmable gate array, FPGA) 중 하나를 포함하는, 장치.
KR1020187021415A 2015-12-28 2016-12-28 다중 경로 전송 설계 Active KR102072318B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/981,485 US10498654B2 (en) 2015-12-28 2015-12-28 Multi-path transport design
US14/981,485 2015-12-28
PCT/US2016/068941 WO2017117252A1 (en) 2015-12-28 2016-12-28 Multi-path transport design

Publications (2)

Publication Number Publication Date
KR20180098358A true KR20180098358A (ko) 2018-09-03
KR102072318B1 KR102072318B1 (ko) 2020-03-02

Family

ID=57799924

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020187021415A Active KR102072318B1 (ko) 2015-12-28 2016-12-28 다중 경로 전송 설계

Country Status (11)

Country Link
US (4) US10498654B2 (ko)
EP (1) EP3398061B1 (ko)
JP (1) JP6697556B2 (ko)
KR (1) KR102072318B1 (ko)
CN (1) CN108476208B (ko)
AU (1) AU2016382945B2 (ko)
BR (1) BR112018013313A2 (ko)
CA (1) CA3008896C (ko)
CL (1) CL2018001768A1 (ko)
SG (1) SG11201804983XA (ko)
WO (1) WO2017117252A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110417675A (zh) * 2019-07-29 2019-11-05 广州竞远安全技术股份有限公司 一种soc下高性能探针的网络分流方法、装置及系统

Families Citing this family (155)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10491973B2 (en) * 2015-04-24 2019-11-26 Rockley Photonics Limited Optoelectronic switch
US11983138B2 (en) 2015-07-26 2024-05-14 Samsung Electronics Co., Ltd. Self-configuring SSD multi-protocol support in host-less environment
US9843530B2 (en) * 2015-12-15 2017-12-12 International Business Machines Corporation System, method, and recording medium for queue management in a forwarder
US10498654B2 (en) 2015-12-28 2019-12-03 Amazon Technologies, Inc. Multi-path transport design
US10020918B2 (en) * 2015-12-28 2018-07-10 Alcatel Lucent Fast coupled retransmission for multipath communications
US9985904B2 (en) 2015-12-29 2018-05-29 Amazon Technolgies, Inc. Reliable, out-of-order transmission of packets
US10972375B2 (en) 2016-01-27 2021-04-06 Oracle International Corporation System and method of reserving a specific queue pair number for proprietary management traffic in a high-performance computing environment
US10594627B2 (en) 2016-01-27 2020-03-17 Oracle International Corporation System and method for supporting scalable representation of switch port status in a high performance computing environment
US11271870B2 (en) 2016-01-27 2022-03-08 Oracle International Corporation System and method for supporting scalable bit map based P_Key table in a high performance computing environment
US11018947B2 (en) 2016-01-27 2021-05-25 Oracle International Corporation System and method for supporting on-demand setup of local host channel adapter port partition membership in a high-performance computing environment
US10440152B2 (en) 2016-01-27 2019-10-08 Oracle International Corporation System and method of initiating virtual machine configuration on a subordinate node from a privileged node in a high-performance computing environment
US10333894B2 (en) 2016-01-28 2019-06-25 Oracle International Corporation System and method for supporting flexible forwarding domain boundaries in a high performance computing environment
US10630816B2 (en) 2016-01-28 2020-04-21 Oracle International Corporation System and method for supporting shared multicast local identifiers (MILD) ranges in a high performance computing environment
US10616118B2 (en) 2016-01-28 2020-04-07 Oracle International Corporation System and method for supporting aggressive credit waiting in a high performance computing environment
US10536334B2 (en) 2016-01-28 2020-01-14 Oracle International Corporation System and method for supporting subnet number aliasing in a high performance computing environment
US10666611B2 (en) 2016-01-28 2020-05-26 Oracle International Corporation System and method for supporting multiple concurrent SL to VL mappings in a high performance computing environment
US10659340B2 (en) 2016-01-28 2020-05-19 Oracle International Corporation System and method for supporting VM migration between subnets in a high performance computing environment
US10355972B2 (en) 2016-01-28 2019-07-16 Oracle International Corporation System and method for supporting flexible P_Key mapping in a high performance computing environment
US10348847B2 (en) 2016-01-28 2019-07-09 Oracle International Corporation System and method for supporting proxy based multicast forwarding in a high performance computing environment
US10348649B2 (en) 2016-01-28 2019-07-09 Oracle International Corporation System and method for supporting partitioned switch forwarding tables in a high performance computing environment
US10374926B2 (en) 2016-01-28 2019-08-06 Oracle International Corporation System and method for monitoring logical network traffic flows using a ternary content addressable memory in a high performance computing environment
US9961138B2 (en) * 2016-02-16 2018-05-01 Justin G. Lelacheur Fiber-based distributed data center architecture
US9985883B2 (en) * 2016-02-26 2018-05-29 128 Technology, Inc. Name-based routing system and method
US10171353B2 (en) * 2016-03-04 2019-01-01 Oracle International Corporation System and method for supporting dual-port virtual router in a high performance computing environment
US9985891B2 (en) * 2016-04-07 2018-05-29 Oracle International Corporation Congestion management in distributed systems using autonomous self-regulation
US10210123B2 (en) 2016-07-26 2019-02-19 Samsung Electronics Co., Ltd. System and method for supporting multi-path and/or multi-mode NMVe over fabrics devices
US10346041B2 (en) 2016-09-14 2019-07-09 Samsung Electronics Co., Ltd. Method for using BMC as proxy NVMeoF discovery controller to provide NVM subsystems to host
US11144496B2 (en) 2016-07-26 2021-10-12 Samsung Electronics Co., Ltd. Self-configuring SSD multi-protocol support in host-less environment
US12541480B2 (en) 2016-07-26 2026-02-03 Samsung Electronics Co., Ltd. Self-configuring SSD multi-protocol support in host-less environment
US10372659B2 (en) 2016-07-26 2019-08-06 Samsung Electronics Co., Ltd. Multi-mode NMVE over fabrics devices
US11461258B2 (en) 2016-09-14 2022-10-04 Samsung Electronics Co., Ltd. Self-configuring baseboard management controller (BMC)
WO2018022083A1 (en) * 2016-07-29 2018-02-01 Hewlett Packard Enterprise Development Lp Deliver an ingress packet to a queue at a gateway device
CN108604199B (zh) 2016-08-23 2022-08-23 甲骨文国际公司 计算环境中支持快速混合重新配置的系统和方法、介质
US10749995B2 (en) 2016-10-07 2020-08-18 Cisco Technology, Inc. System and method to facilitate integration of information-centric networking into internet protocol networks
GB201617409D0 (en) * 2016-10-13 2016-11-30 Asio Ltd A method and system for acoustic communication of data
US12341931B2 (en) 2016-10-13 2025-06-24 Sonos Experience Limited Method and system for acoustic communication of data
US10200305B2 (en) * 2016-10-31 2019-02-05 Ciena Corporation Structured rearranged network for data center and high-performance computing applications
US10834484B2 (en) 2016-10-31 2020-11-10 Ciena Corporation Flat, highly connected optical network for data center switch connectivity
US10033516B2 (en) 2016-11-30 2018-07-24 International Business Machines Corporation Multi-domain connection establishment in computer networking communications
US10558250B2 (en) * 2016-12-23 2020-02-11 Oracle International Corporation System and method for coordinated link up handling following switch reset in a high performance computing network
US10764188B2 (en) 2017-02-22 2020-09-01 Cisco Technology, Inc. System and method to facilitate robust traffic load balancing and remote adaptive active queue management in an information-centric networking environment
US10805825B2 (en) 2017-02-23 2020-10-13 Cisco Technology, Inc. System and method to facilitate cross-layer optimization of video over WiFi in an information-centric networking environment
US10798633B2 (en) * 2017-02-23 2020-10-06 Cisco Technology, Inc. Heterogeneous access gateway for an information-centric networking environment
GB201704636D0 (en) 2017-03-23 2017-05-10 Asio Ltd A method and system for authenticating a device
WO2018183526A1 (en) 2017-03-29 2018-10-04 Fungible, Inc. Non-blocking, full-mesh data center network having optical permutors
WO2018183542A1 (en) 2017-03-29 2018-10-04 Fungible, Inc. Non-blocking any-to-any data center network with packet spraying over multiple alternate data paths
US10637685B2 (en) 2017-03-29 2020-04-28 Fungible, Inc. Non-blocking any-to-any data center network having multiplexed packet spraying within access node groups
CN110741356B (zh) 2017-04-10 2024-03-15 微软技术许可有限责任公司 多处理器系统中的中继一致存储器管理
US10659376B2 (en) * 2017-05-18 2020-05-19 International Business Machines Corporation Throttling backbone computing regarding completion operations
US11153105B2 (en) * 2017-06-29 2021-10-19 Intel Corporation Technologies for densely packaging network components for large scale indirect topologies
CN110892380B (zh) 2017-07-10 2023-08-11 芬基波尔有限责任公司 用于流处理的数据处理单元
CN110915172A (zh) 2017-07-10 2020-03-24 芬基波尔有限责任公司 针对数据中心的接入节点
CN109412964B (zh) * 2017-08-18 2022-04-29 华为技术有限公司 报文控制方法及网络装置
US10992538B2 (en) * 2017-08-31 2021-04-27 Oracle International Corporation System and method for using InfiniBand routing algorithms for ethernet fabrics in a high performance computing environment
US11411860B2 (en) 2017-08-31 2022-08-09 Oracle International Corporation System and method for on-demand unicast forwarding in a high performance computing environment
CN109474518B (zh) * 2017-09-07 2021-08-20 华为技术有限公司 转发报文的方法及装置
US12212495B2 (en) 2017-09-29 2025-01-28 Microsoft Technology Licensing, Llc Reliable fabric control protocol extensions for data center networks with unsolicited packet spraying over multiple alternate data paths
CN111164938A (zh) 2017-09-29 2020-05-15 芬基波尔有限责任公司 使用选择性多路径分组流喷射的弹性网络通信
US12231353B2 (en) 2017-09-29 2025-02-18 Microsoft Technology Licensing, Llc Fabric control protocol for data center networks with packet spraying over multiple alternate data paths
US12294470B2 (en) 2017-09-29 2025-05-06 Microsoft Technology Licensing, Llc Fabric control protocol for large-scale multi-stage data center networks
US12278763B2 (en) 2017-09-29 2025-04-15 Microsoft Technology Licensing, Llc Fabric control protocol with congestion control for data center networks
CN111149329A (zh) 2017-09-29 2020-05-12 芬基波尔有限责任公司 通过多个备用数据路径进行分组喷射的数据中心网络的结构控制协议
US12341687B2 (en) 2017-09-29 2025-06-24 Microsoft Technology Licensing, Llc Reliable fabric control protocol extensions for data center networks with failure resilience
ES2975316T3 (es) * 2017-10-17 2024-07-04 Drivenets Ltd Un sistema de enrutamiento de comunicación
US10567504B2 (en) 2017-11-29 2020-02-18 International Business Machines Corporation Protecting in-flight transaction requests
CN109936510B (zh) * 2017-12-15 2022-11-15 微软技术许可有限责任公司 多路径rdma传输
GB2570634A (en) 2017-12-20 2019-08-07 Asio Ltd A method and system for improved acoustic transmission of data
US10540288B2 (en) 2018-02-02 2020-01-21 Fungible, Inc. Efficient work unit processing in a multicore system
CN111837368B (zh) 2018-02-23 2022-01-14 华为技术有限公司 使用内部网关协议通告和编程优选路径路由
WO2019190699A1 (en) * 2018-03-28 2019-10-03 Futurewei Technologies, Inc. Method and apparatus for preferred path route information distribution and maintenance
US11012367B2 (en) * 2018-03-30 2021-05-18 Intel IP Corporation Technologies for managing TCP/IP packet delivery
US11483225B2 (en) 2018-04-17 2022-10-25 Intel Corporation Technologies for out-of-order network packet management and selective data flow splitting
WO2019209480A1 (en) 2018-04-26 2019-10-31 Futurewei Technologies, Inc. Resource reservation and maintenance for preferred path routes in a network
WO2019212678A1 (en) 2018-05-04 2019-11-07 Futurewei Technologies, Inc. Explicit backups and fast re-route mechanisms for preferred path routes in a network
WO2019236221A1 (en) 2018-06-04 2019-12-12 Futurewei Technologies, Inc. Preferred path route graphs in a network
US11277455B2 (en) 2018-06-07 2022-03-15 Mellanox Technologies, Ltd. Streaming system
CN108924214A (zh) * 2018-06-27 2018-11-30 中国建设银行股份有限公司 一种计算集群的负载均衡方法、装置及系统
US11394649B2 (en) * 2018-06-29 2022-07-19 Intel Corporation Non-random flowlet-based routing
US10938724B2 (en) * 2018-07-23 2021-03-02 Cisco Technology, Inc. Flow rate based network load balancing
US10904342B2 (en) * 2018-07-30 2021-01-26 Cisco Technology, Inc. Container networking using communication tunnels
CN110932879B (zh) * 2018-09-20 2022-12-23 阿里巴巴集团控股有限公司 网络性能测试方法、数据处理设备和存储介质
US11252110B1 (en) 2018-09-21 2022-02-15 Marvell Asia Pte Ltd Negotiation of alignment mode for out of order placement of data in network devices
US20200106828A1 (en) * 2018-10-02 2020-04-02 Mellanox Technologies, Ltd. Parallel Computation Network Device
CN109413169A (zh) * 2018-10-15 2019-03-01 北京东土军悦科技有限公司 设备间通信方法、装置、计算机设备以及存储介质
CN111200558B (zh) * 2018-11-19 2021-05-18 华为技术有限公司 一种flowlet负载分担方法及装置
CN109257620B (zh) * 2018-11-19 2019-12-24 海南大学 基于多路径传输的网络直播方法及其系统
CN109743266A (zh) * 2019-01-22 2019-05-10 上海宽带技术及应用工程研究中心 基于胖树结构的sdn交换网络
US10951544B2 (en) * 2019-01-30 2021-03-16 The Boeing Company Apparatus and method of crosschecking data copies using one or more voter elements
US11625393B2 (en) 2019-02-19 2023-04-11 Mellanox Technologies, Ltd. High performance computing system
EP3699770B1 (en) 2019-02-25 2025-05-21 Mellanox Technologies, Ltd. Collective communication system and methods
US11899596B2 (en) * 2019-05-23 2024-02-13 Hewlett Packard Enterprise Development Lp System and method for facilitating dynamic command management in a network interface controller (NIC)
US10999084B2 (en) 2019-05-31 2021-05-04 Microsoft Technology Licensing, Llc Leveraging remote direct memory access (RDMA) for packet capture
EP3991365B1 (en) 2019-07-31 2025-10-22 Huawei Technologies Co., Ltd. Transporting mtnc-id over srv6-enabled dataplane for 5g transport
CN114128228B (zh) * 2019-07-31 2023-06-06 华为技术有限公司 通过SRv6头传输MTNC-ID以实现5G传输
WO2021061157A1 (en) * 2019-09-27 2021-04-01 Viasat, Inc. Method and apparatus for distributing network traffic over multiple communication networks
US11121984B2 (en) 2019-10-18 2021-09-14 Ciena Corporation Routing tables for forwarding packets between switches in a data center network
US12218841B1 (en) * 2019-12-12 2025-02-04 Amazon Technologies, Inc. Ethernet traffic over scalable reliable datagram protocol
US11438497B2 (en) * 2019-12-13 2022-09-06 Sony Group Corporation Managing multiple image devices
US11750534B2 (en) 2019-12-27 2023-09-05 Texas Instruments Incorporated Packet storage based on packet properties
CN110913025B (zh) 2019-12-31 2022-06-24 中国银联股份有限公司 服务调用方法、装置、设备及介质
US11750699B2 (en) 2020-01-15 2023-09-05 Mellanox Technologies, Ltd. Small message aggregation
US11252027B2 (en) 2020-01-23 2022-02-15 Mellanox Technologies, Ltd. Network element supporting flexible data reduction operations
US11397589B2 (en) * 2020-03-06 2022-07-26 EMC IP Holding Company LLC Snapshot transmission from storage array to cloud using multi-path input-output
US11171882B2 (en) * 2020-03-12 2021-11-09 Mellanox Technologies Tlv Ltd. Flexible Clos topology switch
US11310115B2 (en) * 2020-05-20 2022-04-19 Mellanox Technologies, Ltd. TClos—scalable network topology and system architecture
CN111817973B (zh) * 2020-06-28 2022-03-25 电子科技大学 一种数据中心网络负载的均衡方法
US11876885B2 (en) 2020-07-02 2024-01-16 Mellanox Technologies, Ltd. Clock queue with arming and/or self-arming features
US11729092B2 (en) * 2020-07-02 2023-08-15 Northrop Grumman Systems Corporation System and method for multi-path mesh network communications
US11271868B2 (en) 2020-07-28 2022-03-08 Ciena Corporation Programmatically configured switches and distributed buffering across fabric interconnect
US11736417B2 (en) * 2020-08-17 2023-08-22 Western Digital Technologies, Inc. Devices and methods for network message sequencing
US11658922B2 (en) * 2020-08-31 2023-05-23 Micron Technology, Inc. Optional path ordering in packet-based network
US11392527B2 (en) * 2020-08-31 2022-07-19 Micron Technology, Inc. Ordered delivery of data packets based on type of path information in each packet
CN114189474A (zh) * 2020-09-14 2022-03-15 华为技术有限公司 数据传输方法和装置
TWI757887B (zh) * 2020-09-24 2022-03-11 國立臺北教育大學 用以促進一資料流從一發送端透過多路徑傳輸至一接收端的方法、網路控制器以及電腦程式產品
US10999364B1 (en) * 2020-10-11 2021-05-04 Mellanox Technologies, Ltd. Emulation of memory access transport services
WO2022081025A1 (en) * 2020-10-12 2022-04-21 Goat Software Limited Data transmission system, communications adapter and method
CN112468415A (zh) * 2020-10-21 2021-03-09 浪潮思科网络科技有限公司 一种协议报文处理方法、装置、设备及介质
US20240023180A1 (en) * 2020-11-05 2024-01-18 Qualcomm Incorporated Techniques for recovery from a dual connectivity data stall
CN114640624B (zh) * 2020-12-01 2023-05-19 中国联合网络通信集团有限公司 汇聚边缘云池组化系统
US11556378B2 (en) 2020-12-14 2023-01-17 Mellanox Technologies, Ltd. Offloading execution of a multi-task parameter-dependent operation to a network device
CN112689011B (zh) * 2020-12-24 2023-05-26 北京浪潮数据技术有限公司 一种基于nfs协议的业务传输方法、装置、设备及介质
CN116762323A (zh) * 2021-01-08 2023-09-15 华为技术有限公司 一种交换系统、交换网络和交换节点
JP2024508220A (ja) * 2021-01-19 2024-02-26 デジェロ ラブス インコーポレイテッド プッシュ型データ通信のためのシステム及び方法
US20240121193A1 (en) * 2021-02-02 2024-04-11 Nippon Telegraph And Telephone Corporation Traffic engineering device, traffic engineering method, and traffic engineering program
US11563687B2 (en) 2021-02-04 2023-01-24 Ciena Corporation Controlling distributed buffers in a network to manage data packets
US11934658B2 (en) 2021-03-25 2024-03-19 Mellanox Technologies, Ltd. Enhanced storage protocol emulation in a peripheral device
US11934333B2 (en) 2021-03-25 2024-03-19 Mellanox Technologies, Ltd. Storage protocol emulation in a peripheral device
US11575612B2 (en) 2021-06-07 2023-02-07 Cisco Technology, Inc. Reducing packet misorderings in wireless networks
US20230261973A1 (en) * 2021-06-09 2023-08-17 Rockport Networks Inc. Method for distributing multipath flows in a direct interconnect network
US12309061B2 (en) * 2021-06-25 2025-05-20 Oracle International Corporation Routing policies for graphical processing units
US11726666B2 (en) * 2021-07-11 2023-08-15 Mellanox Technologies, Ltd. Network adapter with efficient storage-protocol emulation
US20220138021A1 (en) * 2021-07-23 2022-05-05 Intel Corporation Communications for workloads
US12063163B2 (en) 2021-12-16 2024-08-13 Microsoft Technology Licensing, Llc Sending and receiving messages including training data using a multi-path packet spraying protocol
US11895012B2 (en) * 2022-01-31 2024-02-06 Nile Global, Inc. Methods and systems for switch management
US12413508B2 (en) 2022-03-04 2025-09-09 Microsoft Technology Licensing, Llc System and method for fault recovery in spray based networks
CN114817082B (zh) * 2022-03-27 2025-02-07 西安电子科技大学 大包数据的乱序重组及精准重传请求方法、系统及终端
US12309070B2 (en) 2022-04-07 2025-05-20 Nvidia Corporation In-network message aggregation for efficient small message transport
CN114513369B (zh) * 2022-04-18 2022-07-08 远江盛邦(北京)网络安全科技股份有限公司 基于深度报文检测的物联网行为分析方法及系统
CN116962301A (zh) * 2022-04-18 2023-10-27 华为技术有限公司 一种数据流保序方法、数据交换装置及网络
US12386765B2 (en) * 2022-05-31 2025-08-12 Dell Products L.P. Method and system for a disaggregated persistent memory system using persistent memory servers
US12531808B2 (en) * 2022-06-29 2026-01-20 Amazon Technologies, Inc. Transport protocol selection based on connection state
US11922237B1 (en) 2022-09-12 2024-03-05 Mellanox Technologies, Ltd. Single-step collective operations
US12468564B1 (en) * 2022-09-29 2025-11-11 Amazon Technologies, Inc. On-premises network interface adapted for cloud-based services
US12301460B1 (en) 2022-09-30 2025-05-13 Amazon Technologies, Inc. Multi-port load balancing using transport protocol
US12117948B2 (en) 2022-10-31 2024-10-15 Mellanox Technologies, Ltd. Data processing unit with transparent root complex
US12007921B2 (en) 2022-11-02 2024-06-11 Mellanox Technologies, Ltd. Programmable user-defined peripheral-bus device implementation using data-plane accelerator (DPA)
US20240333636A1 (en) * 2023-03-28 2024-10-03 International Business Machines Corporation Coordinating selection of a path between a source node and a destination node in a network
CN116582484A (zh) * 2023-04-13 2023-08-11 浪潮电子信息产业股份有限公司 一种交换机的数据传输方法、装置、介质以及系统
CN116346726B (zh) * 2023-05-29 2023-08-15 湘江实验室 一种自适应突发流量的主机端负载均衡方法
US12489657B2 (en) 2023-08-17 2025-12-02 Mellanox Technologies, Ltd. In-network compute operation spreading
CN120045496A (zh) * 2023-11-27 2025-05-27 华为技术有限公司 通信方法和通信装置
CN118869708B (zh) * 2024-05-11 2025-05-27 腾讯云计算(北京)有限责任公司 报文发送与接收方法、相关装置和介质
US20250365234A1 (en) * 2024-05-24 2025-11-27 Cisco Technology, Inc. Flow entropy management using network address translation scheme
CN118802737B (zh) * 2024-09-09 2024-12-31 苏州爱雄斯通信技术有限公司 多协议数据流的路由控制方法及系统
CN119739656B (zh) * 2024-12-31 2025-09-23 浪潮电子信息产业股份有限公司 一种请求处理方法及系统

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20150127797A1 (en) * 2013-11-05 2015-05-07 Cisco Technology, Inc. System and method for multi-path load balancing in network fabrics

Family Cites Families (98)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5699500A (en) 1995-06-01 1997-12-16 Ncr Corporation Reliable datagram service provider for fast messaging in a clustered environment
US6434620B1 (en) 1998-08-27 2002-08-13 Alacritech, Inc. TCP/IP offload network interface device
US7293107B1 (en) 1998-10-09 2007-11-06 Netmotion Wireless, Inc. Method and apparatus for providing mobile and other intermittent connectivity in a computing environment
US6788686B1 (en) 1999-11-30 2004-09-07 Lucent Technologies Inc. Method of maintaining packet order in multipath transmission systems having non-uniform traffic splitting
US7171484B1 (en) 2000-05-24 2007-01-30 Krause Michael R Reliable datagram transport service
US6990528B1 (en) 2000-10-19 2006-01-24 International Business Machines Corporation System area network of end-to-end context via reliable datagram domains
US6898638B2 (en) 2001-01-11 2005-05-24 International Business Machines Corporation Method and apparatus for grouping data for transfer according to recipient buffer size
US20020198927A1 (en) 2001-06-21 2002-12-26 International Business Machines Corporation Apparatus and method for routing internet protocol frames over a system area network
US20030005039A1 (en) 2001-06-29 2003-01-02 International Business Machines Corporation End node partitioning using local identifiers
US7116673B2 (en) 2001-08-09 2006-10-03 International Business Machines Corporation Queue pair resolution in infiniband fabrics
US7095750B2 (en) 2001-08-16 2006-08-22 International Business Machines Corporation Apparatus and method for virtualizing a queue pair space to minimize time-wait impacts
US7039052B2 (en) 2001-09-19 2006-05-02 International Business Machines Corporation Selective routing of multi-recipient communications
US20030065856A1 (en) 2001-10-03 2003-04-03 Mellanox Technologies Ltd. Network adapter with multiple event queues
US7088718B1 (en) 2002-03-19 2006-08-08 Cisco Technology, Inc. Server load balancing using IP option field approach to identify route to selected server
US7245627B2 (en) 2002-04-23 2007-07-17 Mellanox Technologies Ltd. Sharing a network interface card among multiple hosts
US7149220B2 (en) 2002-04-25 2006-12-12 International Business Machines Corporation System, method, and product for managing data transfers in a network
US7487264B2 (en) 2002-06-11 2009-02-03 Pandya Ashish A High performance IP processor
US7346701B2 (en) 2002-08-30 2008-03-18 Broadcom Corporation System and method for TCP offload
US7508837B2 (en) 2002-10-18 2009-03-24 Broadcom Corporation System and method for receive queue provisioning
WO2004021626A2 (en) 2002-08-30 2004-03-11 Broadcom Corporation System and method for handling out-of-order frames
US20040044796A1 (en) 2002-09-03 2004-03-04 Vangal Sriram R. Tracking out-of-order packets
US6735647B2 (en) 2002-09-05 2004-05-11 International Business Machines Corporation Data reordering mechanism for high performance networks
US6721806B2 (en) 2002-09-05 2004-04-13 International Business Machines Corporation Remote direct memory access enabled network interface controller switchover and switchback support
US7012918B2 (en) 2003-03-24 2006-03-14 Emulex Design & Manufacturing Corporation Direct data placement
US7870268B2 (en) 2003-09-15 2011-01-11 Intel Corporation Method, system, and program for managing data transmission through a network
US7716290B2 (en) 2003-11-20 2010-05-11 Microsoft Corporation Send by reference in a customizable, tag-based protocol
US7912979B2 (en) 2003-12-11 2011-03-22 International Business Machines Corporation In-order delivery of plurality of RDMA messages
US7382733B2 (en) 2004-02-12 2008-06-03 International Business Machines Corporation Method for handling reordered data packets
US7826457B2 (en) 2004-05-11 2010-11-02 Broadcom Corp. Method and system for handling out-of-order segments in a wireless system via direct data placement
US7533176B2 (en) 2004-07-14 2009-05-12 International Business Machines Corporation Method for supporting connection establishment in an offload of network protocol processing
US20060075067A1 (en) 2004-08-30 2006-04-06 International Business Machines Corporation Remote direct memory access with striping over an unreliable datagram transport
US20060168274A1 (en) 2004-11-08 2006-07-27 Eliezer Aloni Method and system for high availability when utilizing a multi-stream tunneled marker-based protocol data unit aligned protocol
US20060101090A1 (en) 2004-11-08 2006-05-11 Eliezer Aloni Method and system for reliable datagram tunnels for clusters
US20060101225A1 (en) 2004-11-08 2006-05-11 Eliezer Aloni Method and system for a multi-stream tunneled marker-based protocol data unit aligned protocol
ATE426283T1 (de) 2005-12-15 2009-04-15 Nokia Corp Verfahren, apparat und computerprogrammprodukt zur beibehaltung von abbildungszuordnungen
US7889762B2 (en) 2006-01-19 2011-02-15 Intel-Ne, Inc. Apparatus and method for in-line insertion and removal of markers
GB0602314D0 (en) * 2006-02-06 2006-03-15 Ericsson Telefon Ab L M Transporting packets
US20070208820A1 (en) 2006-02-17 2007-09-06 Neteffect, Inc. Apparatus and method for out-of-order placement and in-order completion reporting of remote direct memory access operations
JP2009538043A (ja) 2006-05-16 2009-10-29 オートネット・モバイル・インコーポレーテッド リンクを監視するモバイル・ルータ
US7913077B2 (en) 2007-02-13 2011-03-22 International Business Machines Corporation Preventing IP spoofing and facilitating parsing of private data areas in system area network connection requests
US8244826B2 (en) 2007-10-23 2012-08-14 International Business Machines Corporation Providing a memory region or memory window access notification on a system area network
US8190960B1 (en) 2007-12-13 2012-05-29 Force10 Networks, Inc. Guaranteed inter-process communication
US8259582B2 (en) 2009-11-13 2012-09-04 Intel Corporation Method and apparatus to manage per flow state
US8363668B2 (en) * 2009-12-17 2013-01-29 Juniper Networks, Inc. Avoiding unfair advantage in weighted round robin (WRR) scheduling
US20110280247A1 (en) 2010-05-17 2011-11-17 Google Inc. System and method for reducing latency via multiple network connections
US8452888B2 (en) 2010-07-22 2013-05-28 International Business Machines Corporation Flow control for reliable message passing
US8433783B2 (en) 2010-09-29 2013-04-30 Citrix Systems, Inc. Systems and methods for providing quality of service via a flow controlled tunnel
EP2628305B1 (en) 2010-10-15 2015-03-18 Cinemo GmbH Distributed playback architecture for media data using beacon packets for synchronisation
US10873613B2 (en) 2010-12-09 2020-12-22 Xilinx, Inc. TCP processing for devices
US8903935B2 (en) 2010-12-17 2014-12-02 Ryan Eric GRANT Remote direct memory access over datagrams
US20120155458A1 (en) 2010-12-20 2012-06-21 Brocade Communications Systems, Inc. Repeated Lost Packet Retransmission in a TCP/IP Network
US20120155468A1 (en) * 2010-12-21 2012-06-21 Microsoft Corporation Multi-path communications in a data center environment
TW201246867A (en) * 2011-05-06 2012-11-16 Ralink Technology Corp Packet processing accelerator and method thereof
US8705572B2 (en) 2011-05-09 2014-04-22 Emulex Corporation RoCE packet sequence acceleration
US8681606B2 (en) 2011-08-30 2014-03-25 International Business Machines Corporation Implementing redundancy on infiniband (IB) networks
US9473596B2 (en) 2011-09-27 2016-10-18 International Business Machines Corporation Using transmission control protocol/internet protocol (TCP/IP) to setup high speed out of band data communication connections
US8824477B2 (en) 2011-11-03 2014-09-02 Qualcomm Incorporated Multiple delivery route packet ordering
WO2013083840A1 (en) 2011-12-09 2013-06-13 Cinemo Gmbh Media playback component comprising playback queue and queue bypass
CN103999068B (zh) 2011-12-23 2016-11-23 英特尔公司 共享的发送队列
KR102095405B1 (ko) 2012-05-10 2020-03-31 삼성전자주식회사 데이터 패킷들의 업링크 및 다운링크 동안 비연결형 전송을 위한 방법 및 시스템
US9871734B2 (en) 2012-05-28 2018-01-16 Mellanox Technologies, Ltd. Prioritized handling of incoming packets by a network interface controller
US9544927B2 (en) 2012-07-02 2017-01-10 Alcatel Lucent System, method and computer readable medium for bearer activation in a core network for wireless devices
US8753141B2 (en) * 2012-07-10 2014-06-17 Tyco Electronics Corporation Adapter for connecting a harness to magnet wires
US9697147B2 (en) 2012-08-06 2017-07-04 Advanced Micro Devices, Inc. Stacked memory device with metadata management
US9253287B2 (en) 2012-08-20 2016-02-02 Advanced Micro Devices, Inc. Speculation based approach for reliable message communications
US9258218B2 (en) * 2012-11-30 2016-02-09 Alcatel Lucent Software-defined network overlay
US9519795B2 (en) 2013-05-28 2016-12-13 Unisys Corporation Interconnect partition binding API, allocation and management of application-specific partitions
JP2015012580A (ja) 2013-07-02 2015-01-19 キヤノン株式会社 受信装置、受信方法及びプログラム
US20150052280A1 (en) 2013-08-19 2015-02-19 Emulex Design & Manufacturing Corporation Method and system for communications-stack offload to a hardware controller
JP6206009B2 (ja) 2013-09-04 2017-10-04 沖電気工業株式会社 パケット通信装置及びシステム
US9502111B2 (en) 2013-11-05 2016-11-22 Cisco Technology, Inc. Weighted equal cost multipath routing
US9686180B2 (en) * 2013-11-05 2017-06-20 Cisco Technology, Inc. Managing routing information for tunnel endpoints in overlay networks
US10193771B2 (en) 2013-12-09 2019-01-29 Nicira, Inc. Detecting and handling elephant flows
US10110518B2 (en) 2013-12-18 2018-10-23 Mellanox Technologies, Ltd. Handling transport layer operations received out of order
CN104796347A (zh) * 2014-01-20 2015-07-22 中兴通讯股份有限公司 一种负载均衡方法、装置和系统
US9647926B2 (en) * 2014-03-17 2017-05-09 Telefonaktiebolaget L M Ericsson (Publ) Procedure to identify multi-homed prefixes for IS-IS LFA
CN103929492B (zh) * 2014-04-28 2017-08-29 华为技术有限公司 业务链负载均衡方法及其装置、系统
CN103986647A (zh) 2014-05-21 2014-08-13 大唐移动通信设备有限公司 报文传输方法及设备
US10616380B2 (en) * 2014-06-19 2020-04-07 Cavium, Llc Method of handling large protocol layers for configurable extraction of layer information and an apparatus thereof
WO2016009505A1 (ja) * 2014-07-16 2016-01-21 かもめエンジニアリング株式会社 通信方法および通信システム
US20160026605A1 (en) 2014-07-28 2016-01-28 Emulex Corporation Registrationless transmit onload rdma
US9806896B2 (en) 2014-09-30 2017-10-31 Nicira, Inc. Optimized message retransmission mechanism for distributed storage virtualization directory system
US9747249B2 (en) 2014-12-29 2017-08-29 Nicira, Inc. Methods and systems to achieve multi-tenancy in RDMA over converged Ethernet
US10075568B2 (en) * 2015-01-02 2018-09-11 Lg Electronics Inc. Apparatus for transmitting broadcast signal, apparatus for receiving broadcast signal, method for transmitting broadcast signal and method for receiving broadcast signal
CN105827472B (zh) * 2015-01-04 2019-08-20 华为技术有限公司 网络数据流类型检测方法及装置
US20160212214A1 (en) 2015-01-16 2016-07-21 Avago Technologies General Ip (Singapore) Pte. Ltd. Tunneled remote direct memory access (rdma) communication
US9667538B2 (en) * 2015-01-30 2017-05-30 Telefonaktiebolget L M Ericsson (Publ) Method and apparatus for connecting a gateway router to a set of scalable virtual IP network appliances in overlay networks
US9674297B2 (en) 2015-02-09 2017-06-06 International Business Machines Corporation Handling packet reordering at a network adapter
US10375167B2 (en) 2015-11-20 2019-08-06 Microsoft Technology Licensing, Llc Low latency RDMA-based distributed storage
US9813338B2 (en) 2015-12-10 2017-11-07 Cisco Technology, Inc. Co-existence of routable and non-routable RDMA solutions on the same network interface
US10498654B2 (en) 2015-12-28 2019-12-03 Amazon Technologies, Inc. Multi-path transport design
US10148570B2 (en) 2015-12-29 2018-12-04 Amazon Technologies, Inc. Connectionless reliable transport
US9985904B2 (en) 2015-12-29 2018-05-29 Amazon Technolgies, Inc. Reliable, out-of-order transmission of packets
US9985903B2 (en) 2015-12-29 2018-05-29 Amazon Technologies, Inc. Reliable, out-of-order receipt of packets
US10148581B2 (en) 2016-05-30 2018-12-04 Mellanox Technologies, Ltd. End-to-end enhanced reliable datagram transport
US10430374B2 (en) 2016-06-29 2019-10-01 Mellanox Technologies, Ltd. Selective acknowledgement of RDMA packets
US10425511B2 (en) 2017-01-30 2019-09-24 128 Technology, Inc. Method and apparatus for managing routing disruptions in a computer network
US12212502B2 (en) 2019-10-31 2025-01-28 Intel Corporation Reliable transport architecture

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20150127797A1 (en) * 2013-11-05 2015-05-07 Cisco Technology, Inc. System and method for multi-path load balancing in network fabrics

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110417675A (zh) * 2019-07-29 2019-11-05 广州竞远安全技术股份有限公司 一种soc下高性能探针的网络分流方法、装置及系统
CN110417675B (zh) * 2019-07-29 2020-12-01 广州竞远安全技术股份有限公司 一种soc下高性能探针的网络分流方法、装置及系统

Also Published As

Publication number Publication date
CL2018001768A1 (es) 2018-08-17
CA3008896A1 (en) 2017-07-06
CN108476208B (zh) 2021-02-05
AU2016382945A1 (en) 2018-06-28
KR102072318B1 (ko) 2020-03-02
US12368790B2 (en) 2025-07-22
US20190363989A1 (en) 2019-11-28
CN108476208A (zh) 2018-08-31
US20250379923A1 (en) 2025-12-11
US20230006934A1 (en) 2023-01-05
EP3398061A1 (en) 2018-11-07
US11451476B2 (en) 2022-09-20
JP6697556B2 (ja) 2020-05-20
US20170187629A1 (en) 2017-06-29
JP2019503123A (ja) 2019-01-31
SG11201804983XA (en) 2018-07-30
WO2017117252A1 (en) 2017-07-06
CA3008896C (en) 2021-11-02
US10498654B2 (en) 2019-12-03
BR112018013313A2 (pt) 2018-12-11
AU2016382945B2 (en) 2019-10-03
EP3398061B1 (en) 2021-06-30

Similar Documents

Publication Publication Date Title
US12368790B2 (en) Multi-path transport design
Lu et al. {Multi-Path} transport for {RDMA} in datacenters
US10880204B1 (en) Low latency access for storage using multiple paths
EP2928136B1 (en) Host network accelerator for data center overlay network
US9606946B2 (en) Methods for sharing bandwidth across a packetized bus and systems thereof
US7502884B1 (en) Resource virtualization switch
US20130138836A1 (en) Remote Shared Server Peripherals Over an Ethernet Network For Resource Virtualization
KR20180089548A (ko) 네트워킹 기술들
US12113879B2 (en) Reliable communications using a point to point protocol
CN113994321A (zh) 使用虚拟输出队列映射结构上nvme分组
US11909628B1 (en) Remote direct memory access (RDMA) multipath
US10616116B1 (en) Network traffic load balancing using rotating hash
US11720413B2 (en) Systems and methods for virtualizing fabric-attached storage devices
US11811685B1 (en) Selective packet processing including a run-to-completion packet processing data plane
US12348410B2 (en) Routing transport flows in a transport layer over multiple paths in a network layer
US20230208913A1 (en) In-order streaming in-network computation
CN119443302A (zh) 网络内计算操作

Legal Events

Date Code Title Description
A201 Request for examination
PA0105 International application

St.27 status event code: A-0-1-A10-A15-nap-PA0105

PA0201 Request for examination

St.27 status event code: A-1-2-D10-D11-exm-PA0201

PG1501 Laying open of application

St.27 status event code: A-1-1-Q10-Q12-nap-PG1501

P11-X000 Amendment of application requested

St.27 status event code: A-2-2-P10-P11-nap-X000

P13-X000 Application amended

St.27 status event code: A-2-2-P10-P13-nap-X000

E902 Notification of reason for refusal
PE0902 Notice of grounds for rejection

St.27 status event code: A-1-2-D10-D21-exm-PE0902

P11-X000 Amendment of application requested

St.27 status event code: A-2-2-P10-P11-nap-X000

P13-X000 Application amended

St.27 status event code: A-2-2-P10-P13-nap-X000

E701 Decision to grant or registration of patent right
PE0701 Decision of registration

St.27 status event code: A-1-2-D10-D22-exm-PE0701

PR0701 Registration of establishment

St.27 status event code: A-2-4-F10-F11-exm-PR0701

PR1002 Payment of registration fee

St.27 status event code: A-2-2-U10-U12-oth-PR1002

Fee payment year number: 1

PG1601 Publication of registration

St.27 status event code: A-4-4-Q10-Q13-nap-PG1601

P22-X000 Classification modified

St.27 status event code: A-4-4-P10-P22-nap-X000

P22-X000 Classification modified

St.27 status event code: A-4-4-P10-P22-nap-X000

PR1001 Payment of annual fee

St.27 status event code: A-4-4-U10-U11-oth-PR1001

Fee payment year number: 4

PR1001 Payment of annual fee

St.27 status event code: A-4-4-U10-U11-oth-PR1001

Fee payment year number: 5

PR1001 Payment of annual fee

St.27 status event code: A-4-4-U10-U11-oth-PR1001

Fee payment year number: 6

PR1001 Payment of annual fee

St.27 status event code: A-4-4-U10-U11-oth-PR1001

Fee payment year number: 7

U11 Full renewal or maintenance fee paid

Free format text: ST27 STATUS EVENT CODE: A-4-4-U10-U11-OTH-PR1001 (AS PROVIDED BY THE NATIONAL OFFICE)

Year of fee payment: 7