KR20220157322A - 원본 데이터 패킷을 사용하는 서비스 상태 복제를 위한 방법 및 시스템 - Google Patents

원본 데이터 패킷을 사용하는 서비스 상태 복제를 위한 방법 및 시스템 Download PDF

Info

Publication number
KR20220157322A
KR20220157322A KR1020220061627A KR20220061627A KR20220157322A KR 20220157322 A KR20220157322 A KR 20220157322A KR 1020220061627 A KR1020220061627 A KR 1020220061627A KR 20220061627 A KR20220061627 A KR 20220061627A KR 20220157322 A KR20220157322 A KR 20220157322A
Authority
KR
South Korea
Prior art keywords
packet
session
service node
flow
packets
Prior art date
Application number
KR1020220061627A
Other languages
English (en)
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 KR20220157322A publication Critical patent/KR20220157322A/ko

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L5/00Arrangements affording multiple use of the transmission path
    • H04L5/003Arrangements for allocating sub-channels of the transmission path
    • H04L5/0053Allocation of signaling, i.e. of overhead other than pilot signals
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/38Flow based 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
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/02Topology update or discovery
    • 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
    • H04L45/245Link aggregation, e.g. trunking
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/26Route discovery packet
    • 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
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/76Routing in software-defined topologies, e.g. routing between virtual machines
    • 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/32Flow control; Congestion control by discarding or delaying data units, e.g. packets or frames
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/70Virtual switches
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L61/00Network arrangements, protocols or services for addressing or naming
    • H04L61/09Mapping addresses
    • H04L61/25Mapping addresses of the same type
    • H04L61/2503Translation of Internet protocol [IP] addresses
    • H04L61/256NAT traversal
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/14Session management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR 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/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L12/00Data switching networks
    • H04L12/28Data switching networks characterised by path configuration, e.g. LAN [Local Area Networks] or WAN [Wide Area Networks]
    • H04L12/46Interconnection of networks
    • H04L12/4641Virtual LANs, VLANs, e.g. virtual private networks [VPN]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L2101/00Indexing scheme associated with group H04L61/00
    • H04L2101/60Types of network addresses
    • H04L2101/618Details of network addresses
    • H04L2101/663Transport layer addresses, e.g. aspects of transmission control protocol [TCP] or user datagram protocol [UDP] ports
    • 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
    • H04L45/745Address table lookup; Address filtering
    • 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]

Landscapes

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

Abstract

네트워크 트래픽 흐름은 라우터, 스위치, 또는 서비스 노드에 의해 처리될 수 있다. 서비스 노드는 스위치 또는 라우터의 기능성을 제공할 수 있는 ASIC일 수 있다. 서비스 노드는 순환 복제 체인으로 구성될 수 있으며, 그것에 의해 고가용성과 같은 이점을 제공한다. 서비스 노드는 소스 어드레스 필드에 소스 어드레스를 포함하고 목적지 어드레스 필드에 목적지 어드레스를 포함하는 제1 패킷을 수신하는 단계; 제1 패킷을 로컬 흐름 테이블을 갖고 로컬 흐름 테이블의 체인 복제를 위해 구성되는 복수의 서비스 노드를 포함하는 순환 복제 체인에 있는 선택된 서비스 노드로 라우팅하는 단계; 제1 패킷을 처리하기 위한 제1 패킷의 매칭 흐름 테이블 엔트리를 사용함으로써 제2 패킷을 생성하는 단계; 및 제2 패킷을 목적지 어드레스에 의해 지시되는 목적지를 향하여 송신하는 단계를 포함하는 방법을 구현할 수 있다.

Description

원본 데이터 패킷을 사용하는 서비스 상태 복제를 위한 방법 및 시스템{METHODS AND SYSTEMS FOR SERVICE STATE REPLICATION USING ORIGINAL DATA PACKETS}
실시예는 네트워킹 장비, 고가용성 네트워킹 장비, 스위치, 라우터, 네트워크 인터페이스 카드, PCIe 물리 기능, PCIe 가상 기능, 스토리지 영역 네트워크, NVMe 컨트롤러, 및 NVMe-oF 하드웨어에 관한 것이다.
데이터 센터는 현재 장비 랙에 설치되는 서버, 스위치, 및 라우터에 의해 채워진다. 스위치는, 역사적으로, 그들이 종종 서버가 아래에 있는 장비 랙의 상단에 위치되었기 때문에 TOR(top-of rack)로 종종 칭해진다. 고가용성 스위칭은 액티브-액티브 또는 액티브-패시브 구성의 2개의 TOR 스위치로 획득될 수 있다. 랙 내부의, 사설 네트워크로서 또한 칭해지는, 로컬 네트워크는 서버를 TOR 스위치에 연결한다. TOR 스위치는 사설 네트워크를 공용 네트워크에 연결한다. 공용 네트워크는 랙의 TOR 스위치를 서로 및 데이터 센터 외부의 세계에 연결할 수 있다. 스토리지 영역 네트워크는 다른 랙에 설치되는 서버에 대해 영구 스토리지를 제공하기 위해 랙 중 일부에 전개될 수 있다.
다음은, 그러한 양태의 기본적인 이해를 제공하기 위해, 본 개시의 하나 이상의 양태의 요약을 제시한다. 본 요약은 본 개시의 모든 고려된 특징의 광범위한 개요가 아니고 본 개시의 모든 양태의 핵심 또는 중요한 요소를 식별하거나 본 개시의 임의의 또는 모든 양태의 범위를 기술하도록 의도되지 않는다. 그것의 유일한 목적은 나중에 제시되는 보다 상세화된 설명에 대한 서두(prelude)로서의 형태로 본 개시의 하나 이상의 양태의 일부 개념을 제시하는 것이다.
본 개시에 설명되는 발명 대상의 일 양태는 방법으로 구현될 수 있다. 방법은 소스 어드레스 필드에 소스 어드레스를 포함하고 목적지 어드레스 필드에 목적지 어드레스를 포함하는 제1 패킷을 수신하는 단계; 제1 패킷을 로컬 흐름 테이블(local flow table)을 갖고 로컬 흐름 테이블의 체인 복제를 위해 구성되는 복수의 서비스 노드를 포함하는 순환 복제 체인(circular replication chain)에 있는 선택된 서비스 노드로 라우팅하는 단계; 제1 패킷을 처리하기 위한 제1 패킷의 매칭 흐름 테이블 엔트리를 사용함으로써 제2 패킷을 생성하는 단계; 및 제2 패킷을 목적지 어드레스에 의해 지시되는 목적지를 향하여 송신하는 단계를 포함할 수 있다.
본 개시에 설명되는 발명 대상의 다른 양태는 방법으로 구현될 수 있다. 방법은 소스 어드레스 필드에 소스 어드레스를 포함하고 목적지 어드레스 필드에 목적지 어드레스를 포함하는 제1 패킷을 수신하는 단계; 제1 패킷을 로컬 세션 테이블(local session table)을 갖고 로컬 세션 테이블의 체인 복제를 위해 구성되는 복수의 서비스 노드를 포함하는 순환 복제 체인에 있는 선택된 서비스 노드로 라우팅하는 단계; 제1 패킷을 처리함으로써 제2 패킷을 생성하는 단계; 및 제2 패킷을 목적지 어드레스에 의해 지시되는 목적지를 향하여 송신하는 단계를 포함하며, 여기서 서비스 노드 각각은 업스트림 피어 및 다운스트림 피어를 갖는다.
본 개시에 설명되는 발명 대상의 다른 양태는 시스템으로 구현될 수 있다. 시스템은 소스 어드레스 필드에 소스 어드레스를 포함하고 목적지 어드레스 필드에 목적지 어드레스를 포함하는 제1 패킷을 수신하고, 제1 패킷을 서비스 노드 중 하나인 선택된 서비스 노드로 라우팅하고, 제1 패킷을 처리하기 위한 제1 패킷의 매칭 흐름 테이블 엔트리를 사용함으로써 제2 패킷을 생성하고, 제2 패킷을 목적지 어드레스에 의해 지시되는 목적지를 향하여 송신하도록 구성되는 복수의 서비스 노드를 포함할 수 있으며, 여기서 서비스 노드는 로컬 흐름 테이블을 갖고, 로컬 세션 테이블을 갖고, 로컬 흐름 테이블 및 로컬 세션 테이블의 체인 복제를 위해 구성된다.
방법 및 디바이스의 일부 구현예에서, 서비스 노드 각각은 업스트림 피어, 다운스트림 피어를 갖고, 패킷에 의해 야기되는 흐름 미스를 검출하고; 패킷에 기초한 흐름 테이블 엔트리를 흐름 테이블에 생성함으로써 흐름 미스(flow miss)를 처리하고; 패킷에 기초하여 흐름 동기(sync) 패킷을 생성하고; 흐름 동기 패킷을 다운스트림 피어로 송신하도록 구성된다. 방법 및 디바이스의 일부 구현예에서, 서비스 노드 각각은 복수의 자체-발생된 흐름 동기 패킷을 포함하고 복수의 피어-발생된 흐름 동기 패킷을 포함하는 복수의 흐름 동기 패킷을 수신하고, 자체-발생된 흐름 동기 패킷을 드롭하고; 피어-발생된 흐름 동기 패킷에 기초한 복수의 흐름 테이블 엔트리를 로컬 흐름 테이블에 생성하고; 피어-발생된 흐름 동기 패킷을 다운스트림 피어로 포워딩하도록 구성된다. 방법 및 디바이스의 일부 구현예에서, 서비스 노드 각각은 복수의 흐름 동기 패킷을 수신하고; 이미 매칭 흐름 테이블 엔트리를 갖는 흐름 동기 패킷을 드롭하고; 매칭 흐름 테이블 엔트리를 갖지 않는 흐름 동기 패킷에 기초하여 복수의 흐름 테이블 엔트리를 생성하고; 매칭 흐름 테이블 엔트리를 갖지 않는 흐름 동기 패킷을 다운스트림 피어로 포워딩하도록 구성된다. 방법 및 디바이스의 일부 구현예에서, 흐름 동기 패킷은 패킷을 포함한다.
방법 및 디바이스의 일부 구현예에서, 서비스 노드 각각은 복수의 세션을 위한 복수의 세션 테이블 엔트리를 저장하는 로컬 세션 테이블을 갖고; 서비스 노드 각각은 업스트림 피어 및 다운스트림 피어를 갖고; 서비스 노드는 체인 복제를 사용하여 로컬 세션 테이블을 복제하도록 구성된다. 방법 및 디바이스의 일부 구현예에서, 서비스 노드 각각은 세션을 위한 패킷을 수신하고; 세션이 미공지된 세션인 경우 로컬 세션 테이블 엔트리를 생성함으로써 세션을 위한 로컬 세션 테이블 엔트리가 존재한다는 것을 보장하고; 세션의 세션 상태를 로컬 세션 테이블 엔트리에 저장하고; 세션이 상태를 변경할 때 세션 상태 변경 지시자를 포함하는 세션 동기 패킷을 생성하고; 세션 동기 패킷을 다운스트림 피어로 송신하도록 구성된다. 방법 및 서비스의 일부 구현예에서, 세션은 전송 제어 프로토콜(transmission control protocol; TCP) 세션 또는 사용자 데이터그램 프로토콜(user datagram protocol; UDP) 세션이다. 방법 및 디바이스의 일부 구현예에서, 서비스 노드 각각은 복수의 자체-발생된 세션 동기 패킷 및 복수의 피어-발생된 세션 동기 패킷을 포함하는 복수의 세션 동기 패킷을 수신하고; 자체-발생된 세션 동기 패킷을 드롭하고; 피어-발생된 세션 동기 패킷에 기초하여 로컬 세션 테이블을 갱신하고; 피어-발생된 세션 동기 패킷을 다운스트림 피어로 포워딩하도록 구성된다.
방법 및 디바이스의 일부 구현예에서, 서비스 노드 각각은 세션을 위한 세션 테이블 엔트리를 사용하여 세션이 적어도 하나의 에이징 기준(aging criterion)에 기초하여 비활성인지를 결정하고; 세션이 비활성이라는 것을 나타내는 세션 동기 패킷을 다운스트림 피어로 송신하고; 업스트림 피어로부터 세션 동기 패킷을 수신한 후 세션 테이블 엔트리를 삭제하도록 구성된다. 방법 및 디바이스의 일부 구현예에서, 서비스 노드 각각은 세션을 위한 세션 통계를 세션 테이블 엔트리에 저장하고; 세션 통계를 집계된 세션 통계를 포함하는 집계된 세션 테이블로 송신하도록 구성된다. 방법 및 디바이스의 일부 구현예에서, 세션 통계는 패킷 카운트(count)이다. 방법 및 디바이스의 일부 구현예에서, 순환 복제 체인 내의 서비스 노드는 가상 IP 어드레스를 공유하고; 복수의 패킷은 가상 IP 어드레스로 송신되고; 로드 밸런서(load balancer)는 서비스 노드 사이에 패킷을 분배한다.
방법 및 디바이스의 일부 구현예에서, 서비스 노드 각각은 세션을 위한 패킷을 수신하고; 세션이 미공지된 세션인 경우 로컬 세션 테이블 엔트리를 생성함으로써 세션을 위한 로컬 세션 테이블 엔트리가 존재한다는 것을 보장하고; 세션 상태를 로컬 세션 테이블 엔트리에 저장하고; 세션이 상태를 변경할 때 세션 상태 변경 지시자를 포함하는 세션 동기 패킷을 생성하고; 세션 동기 패킷을 상기 다운스트림 피어로 송신하도록 구성된다. 방법 및 디바이스의 일부 구현예에서, 서비스 노드 각각은 복수의 자체-발생된 세션 동기 패킷 및 복수의 피어-발생된 세션 동기 패킷을 포함하는 복수의 세션 동기 패킷을 수신하고; 자체-발생된 세션 동기 패킷을 드롭하고; 피어-발생된 세션 동기 패킷에 기초하여 로컬 세션 테이블을 갱신하고; 피어-발생된 세션 동기 패킷을 다운스트림 피어로 포워딩하도록 구성된다. 방법 및 디바이스의 일부 구현예에서, 서비스 노드 각각은 세션을 위한 로컬 세션 테이블 엔트리를 사용하여 세션이 적어도 하나의 에이징 기준에 기초하여 비활성인지를 결정하고; 세션이 비활성이라는 것을 나타내는 세션 동기 패킷을 상기 다운스트림 피어로 송신하고; 업스트림 피어로부터 세션 동기 패킷을 수신한 후 로컬 세션 테이블 엔트리를 삭제하도록 구성된다. 방법 및 디바이스의 일부 구현예에서, 서비스 노드는 흐름 테이블 엔트리를 갖는 로컬 흐름 테이블을 갖고; 서비스 노드는 체인 복제를 사용하여 상기 로컬 흐름 테이블을 복제하도록 구성된다.
방법 및 디바이스의 일부 구현예에서, 시스템은 복수의 네트워크 패킷을 복수의 호스트 머신과 상기 서비스 노드 사이에 전송하도록 구성되는 사설 네트워크 및 적어도 하나의 스마트 스위치(smart switch)를 포함할 수 있으며, 여기서 서비스 노드는 적어도 하나의 스마트 스위치 내부에 있고, 적어도 하나의 스마트 스위치는 사설 네트워크를 상기 공용 네트워크에 연결하도록 구성된다.
이러한 양태 및 다른 양태는 이어지는 상세 설명의 검토 시 보다 완전히 이해될 것이다. 다른 양태, 특징, 및 실시예는 첨부 도면과 함께 특정의, 예시적 실시예의 이어지는 설명을 검토할 시 당업자에게 명백하게 될 것이다. 특징은 아래의 특정의 실시예 및 도면에 관하여 논의될 수 있지만, 모든 실시예는 본원에 논의되는 유리한 특징 중 하나 이상을 포함할 수 있다. 환원하면, 하나 이상의 실시예가 특정의 유리한 특징을 갖는 것으로서 논의될 수 있지만, 그러한 특징 중 하나 이상은 또한 본원에 논의되는 다양한 실시예에 따라 사용될 수 있다. 유사한 방식으로, 예시적 실시예가 디바이스, 시스템, 또는 방법 실시예로서 아래에 논의될 수 있지만 그러한 예시적 실시예는 다양한 디바이스, 시스템, 및 방법으로 구현될 수 있다.
도 1은 일부 양태에 따라 로컬 전송 프로토콜(local transport protocol; LTP) 네트워크 트래픽을 운반하는 로컬 네트워크를 갖는 장비 랙을 예시하는 하이-레벨 다이어그램이다.
도 2는 일부 양태에 따라 서버 내의 주변 구성요소 상호연결 익스프레스(peripheral component interconnect express; PCIe) 디바이스를 예시하는 하이-레벨 다이어그램이다.
도 3은 일부 양태에 따라 스마트 스위치 내의 서비스 노드를 예시하는 하이-레벨 다이어그램이다.
도 4는 일부 양태에 따라 주문형 집적 회로(application specific integrated circuit; ASIC)를 갖는 서비스 노드의 기능 블록도이다.
도 5는 일부 양태에 따라 네트워크 패킷을 예시하는 다이어그램이다.
도 6은 일부 양태에 따라 PCIe 디바이스를 사용하여 서비스 노드에 의해 제공되는 서비스 및 가상화된 기능에 액세스하는 것을 예시한다.
도 7은 일부 양태에 따라 PCIe 디바이스를 통해 서비스 및 가상화된 기능을 제공하는 서비스 노드를 예시한다.
도 8은 일부 양태에 따라 순환 복제 체인 내의 서비스 노드를 예시하는 하이-레벨 흐름도이다.
도 9는 일부 양태에 따라 서비스 상태 정보의 체인 복제를 위해 구성되는 서비스 노드를 예시하는 하이-레벨 흐름도이다.
도 10은 일부 양태에 따라 서비스를 제공하는 서비스 노드를 예시하는 하이-레벨 다이어그램이다.
도 11은 일부 양태에 따라 네트워크 어드레스 변환(network address translation; NAT) 테이블 엔트리를 NAT 테이블에 추가하는 하이-레벨 다이어그램이다.
도 12는 일부 양태에 따라 체인 복제를 사용하여 서비스 상태 정보를 복제하는 하이-레벨 흐름도이다.
도 13은 일부 양태에 따라 랙 내의 서비스 노드 호스트의 하이-레벨 다이어그램이다.
도 14는 일부 양태에 따라 다수의 스마트 스위치에 서비스 노드를 포함하는 복제 체인의 하이-레벨 다이어그램이다.
도 15는 일부 양태에 따라 서비스를 제공하는 서비스 노드의 하이-레벨 다이어그램이다.
도 16은 일부 양태에 따라 아웃바운드(outbound) 패킷에 대한 NAT를 수행하는 서비스 노드의 하이-레벨 흐름도이다.
도 17은 일부 양태에 따라 인바운드(inbound) 패킷에 대한 NAT를 수행하는 서비스 노드의 하이-레벨 흐름도이다.
도 18은 일부 양태에 따라 NAT 패킷을 처리하는 하이-레벨 흐름도이다.
도 19는 일부 양태에 따라 가상화된 기능을 갖는 호스트 개시 요청을 서비스하는 하이-레벨 다이어그램이다.
도 20은 일부 양태에 따라 가상화된 기능에 의해 개시되는 요청을 서비스하는 하이-레벨 다이어그램이다.
도 21은 일부 양태에 따라 하드웨어 구현 및 소프트웨어 구현 가상화된 기능을 제공하는 하이-레벨 다이어그램이다.
도 22는 일부 양태에 따라 예시적인 가상화된 PCIe 기능 맵의 다이어그램이다.
도 23은 일부 양태에 따라 서비스 노드 상의 하드웨어를 통해, 또는 스마트 스위치에 설치되는 하드(hard)를 통해 실행가능한 코드로서 구현되는 가상화된 PCIe 기능을 제공하기 위해 서비스 노드에 의해 사용될 수 있는 프로세스의 하이-레벨 흐름도이다.
도 24는 일부 양태에 따라 가상화된 NVMe 서비스를 사용하는 호스트 개시 비활성 메모리 익스프레스(host initiated nonvolatile memory express; NVMe) 트랜잭션을 예시하는 하이-레벨 다이어그램이다.
도 25는 일부 양태에 따라 가상화된 NVMe 서비스를 제공하는 서비스 노드의 하이-레벨 다이어그램이다.
도 26은 일부 양태에 따라 가상화된 NVMe 서비스를 제공하는 순환 복제 체인 내의 서비스 노드의 하이-레벨 다이어그램이다.
도 27은 일부 양태에 따라 PCIe 디바이스에 의해 저장되는 예시적인 서비스 노드 데이터를 예시하는 다이어그램이다.
도 28은 일부 양태에 따라 식별자 맵을 요청하는 예시적인 커맨드 식별자를 예시하는 다이어그램이다.
도 29a, 도 29b, 및 도 29c는 일부 양태에 따라 고가용성 액세스를 스토리지 영역 네트워크(storage area network; SAN)에 제공하는 하이-레벨 다이어그램이다.
도 30은 일부 양태에 따라 패킷 처리 서비스를 제공하는 순환 복제 체인 내의 서비스 노드의 하이-레벨 다이어그램이다.
도 31은 일부 양태에 따라 흐름 테이블 엔트리 및 세션 테이블 엔트리를 추가하는 하이-레벨 다이어그램이다.
도 32는 일부 양태에 따라 세션 테이블 정보를 집계하는 하이-레벨 다이어그램이다.
도 33은 일부 양태에 따라 네트워크 트래픽을 처리하기 위해 그리고 흐름 테이블 및 세션 테이블의 체인 복제를 위해 서비스 노드에 의해 사용될 수 있는 프로세스의 하이-레벨 흐름도이다.
도 34는 일부 양태에 따라 흐름 동기(sync) 패킷을 처리하기 위해 그리고 흐름 테이블의 체인 복제를 위해 서비스 노드에 의해 사용될 수 있는 프로세스의 하이-레벨 흐름도이다.
도 35는 일부 양태에 따라 세션 동기 패킷을 처리하기 위해 그리고 세션 테이블의 복제를 위해 서비스 노드에 의해 사용될 수 있는 프로세스의 하이-레벨 흐름도이다.
도 36은 일부 양태에 따라 세션 테이블 엔트리를 에이징 아웃(aging out)하는 하이-레벨 흐름도이다.
도 37a, 도 37b, 도 37c, 및 도 37d는 일부 양태에 따라 TCP 세션을 종료하는 프로세스의 하이 레벨 흐름도이다.
도 38은 일부 양태에 따라 데이터 경로 상태 복제 및 중간 디바이스 매핑을 사용하는 서비스 분배를 위한 방법의 하이-레벨 흐름도이다.
도 39는 일부 양태에 따라 IP 네트워크에 걸쳐 느슨하게 결합된 PCIe 서비스 프록시를 위한 방법의 하이-레벨 흐름도이다.
도 40은 일부 양태에 따라 가상화된 NVMe 오버 패브릭(NVMe over fabric; NVMe-oF) 서비스를 제공하기 위한 방법의 하이-레벨 흐름도이다.
도 41은 일부 양태에 따라 원본 데이터 패킷을 사용하는 서비스 상태 복제를 위한 방법의 하이-레벨 흐름도이다.
설명 전체에 걸쳐, 유사한 참조 번호는 유사한 요소를 식별하기 위해 사용될 수 있다.
본원에 일반적으로 설명되고 첨부 도면에 예시되는 바와 같은 실시예의 구성요소는 매우 다양한 상이한 구성으로 배열되고 설계될 수 있다는 것이 용이하게 이해될 것이다. 따라서, 도면에 표현된 바와 같은 다양한 실시예의 다음의 보다 상세화된 설명은 본 개시의 범위를 제한하기 위해 의도된 것이 아니라, 단지 다양한 실시예를 나타낸다. 실시예의 다양한 양태가 도면에 제시되지만, 도면은 구체적으로 지시되지 않은 한 반드시 축적에 따라서 도시되는 것은 아니다.
본 발명은 그 사상 또는 본질적인 특징으로부터 벗어나는 것 없이 다른 특정 형태로 구현될 수 있다. 설명된 실시예는 모든 면에서 단지 예시적이고 비 제한적인 것으로서 간주되어야 한다. 따라서, 본 발명의 범위는 이러한 상세화된 설명에 의해서 보다는 첨부된 청구항에 의해 지시된다. 청구항의 등가성의 의미와 범위 내에 있는 모드 변경은 그들의 범위 내에서 포괄될 수 있다.
본 명세서 전반에 걸친 특징, 장점, 또는 유사한 언어에 대한 참조는 본 발명으로 실현될 수 있는 특징 및 장점 모두가 본 발명의 임의의 단일 실시예에 있어야 하거나 있다는 것을 암시하지 않는다. 오히려, 특징 및 장점을 지칭하는 언어는 실시예와 함께 설명되는 특정의 특징, 장점, 또는 특성이 본 발명의 적어도 하나의 실시예에 포함된다는 것을 의미하는 것으로 이해된다. 따라서, 특징 및 장점, 및 유사한 언어의 논의는, 본 명세서 전반에 걸쳐, 동일한 실시예를 지칭할 수 있지만, 반드시 그러한 것은 아니다.
더욱이, 본 발명의 설명된 특징, 장점, 및 특성은 하나 이상의 실시예에서 임의의 적절한 방식으로 조합될 수 있다. 당업자는, 본원의 설명을 고려하여, 본 발명이 특정 실시예의 특정 특징 또는 장점 중 하나 이상 없이 실행될 수 있다는 것을 인식할 것이다. 다른 경우에서, 추가적인 특징 및 장점은 본 발명의 모들 실시예에 존재하지 않을 수 있는 특정 실시예에서 인식될 수 있다.
본 명세서 전반에 걸친 "하나의 실시예", "일 실시예", 또는 유사한 언어에 대한 참조는 지시된 실시예와 관련하여 설명되는 특정의 특징, 구조, 또는 특성이 본 발명의 적어도 하나의 실시예에 포함된다는 것을 의미한다. 따라서, 어구(phrase) "하나의 실시예에서", "일 실시예에서", 및 유사한 언어는 본 명세서 전반에 걸쳐 동일한 실시예를 지칭할 수 있지만, 반드시 그러한 것은 아니다.
데이터 센터의 하드웨어 인프라(infrastructure)는 종종 하나 또는 두 개의 스위치에 연결되는 다수의 서버를 갖는다. 스위치는 서버의 로컬 또는 사설 네트워크를 데이터 센터의 외부 또는 공용 네트워크에 연결한다. 스위치는 네트워크 어드레스 변환(NAT) 및 또는 방화벽(firewalling)과 같은 서비스를 제공할 수 있다. 최근 데이터 센터 발전은 종종 smartNIC로 칭해지는 강력한 네트워크 인터페이스 카드(powerful network interface card; NIC)로 서버를 구성하는 것을 수반한다. smartNIC는 이전에 서버의 중앙 처리 유닛(central processing unit; CPU)에 부담을 주는 기능을 오프로드할 수 있다. 예를 들어, smartNIC는 전체 네트워크 프로토콜 스택, 스토리지 어댑터, 보안 기능 등을 구현할 수 있다. 이와 같이, 호스트 컴퓨터(서버)는 더 많은 처리 능력(processing power)을 워크로드에 전용할 수 있다. 워크로드는 웹 서버, 데이터베이스 서버, 및 데이터 센터의 테넌트(tenant)가 서버 상에서 실행하는 다른 프로그래밍을 포함한다. 최종 결과는 보다 효율적이고 비용 효율적인 데이터 센터가 되었다.
그러나, SmartNIC는 비싸고 전력 소모가 많을 수 있고 전형적인 데이터 센터는 수 백 내지 수 천의 smartNIC를 필요로 할 수 있다. 따라서, smartNIC에 의해 제공되는 고급(advanced) 서비스의 상당한 부분이 분해될 수 있어서 서버는 더 적은 전력을 소비하는 덜 비싼 특별한 목적을 위해 구축된 NIC를 장착할 수 있고 전기능(full featured) smartNIC에 의해 이전에 제공되는 서비스는 특별한 목적을 위해 구축된 NIC 및 스마트 스위치, 또는 스마트 스위치들의 조합에 의해 집합적으로 제공될 수 있는 것이 실현되었다. 일 실시예에서, 그러한 구현을 위한 NIC는 스마트 스위치에 의해 제공되는 가상화된 서비스에 액세스 포인트를 제공하는 PCIe 디바이스이다. PCIe 디바이스 및 스마트 스위치는 통신하기 위해 로컬 전송 프로토콜(local transport protocol; LTP)로서 지칭되는 단순화되고 경량화된 네트워크 프로토콜을 사용하여 협력해서 작동한다. LTP는 그것이 전형적으로 단지 수 미터의 케이블 또는 광섬유에 걸쳐 서버의 랙 내에서 통신하는 스마트 스위치와 PCIe 디바이스 사이에서 동작하도록 설계되기 때문에 낮은 오버헤드(overhead)를 갖는 매우 신뢰가능한 프로토콜일 수 있다. UDP는 최소량의 오버헤드를 추가하면서 양호한 결과로 서비스 노드와 PCIe 디바이스 사이에 LTP를 운반하기 위해 사용되어왔다. 대조적으로, 전송 제어 프로토콜은 훨씬 더 높은 오버헤드의 비용을 지불하고 큰 거리에서 신뢰가능한 전송을 제공한다.
추가적인 발전(advance)은 스마트 스위치에 서비스 노드를 장착함으로써 실현될 수 있다. 단일 서비스 노드는 스마트 스위치의 역할을 할 수 있지만, 가용성 및 확장성의 이점은 스마트 스위치에 통합되는 다수의 서비스 노드로 실현될 수 있다. 서비스 노드는 순환 복제 체인(circular replication chain)으로서 구성될 수 있다. 순환 복제 체인은 데이터베이스 애플리케이션을 위해 현재 연구되는 복제 체인에 비해 발전적이다. 비-순환 복제 체인은 헤드 노드, 하나 이상의 중간 노드, 및 테일 노드를 갖는다. 특정 동작은 비-순환 복제 체인의 헤드 노드로 지향되어야만 한다. 순환 복제 체인은 헤드 및 테일을 갖지 않는다. 서비스 노드에 의해 유지되는 서비스 상태 정보의 특성은 복제에서 강한 일관성을 초래한다.
많은 장점은 네트워크 연결된 PCIe 디바이스를 통해 가상화된 오프로드(offload)를 제공하기 위해 서비스 노드를 사용함으로써 획득될 수 있다. 서버 당 가격은 PCIe 디바이스가 전형적인 smartNIC의 보다 단순화된 버전이기 때문에 실질적으로 감소될 수 있다. 더욱이, PCIe 디바이스는 그들이 보다 단순화된 디바이스이기 때문에 유지, 교체, 또는 업그레이드(upgrading)에 대한 더 적은 필요성을 가질 수 있다. 추가적으로, PCIe 디바이스는 처리된 데이터의 비트 당 더 적은 전력, 예를 들어, 초 당 나노와트/패킷(pps) 또는 나노줄/패킷을 소비할 것이다. PCIe 디바이스가 보다 단순화된 세트의 능력을 가질 수 있지만, 보다 고급 능력은 서비스 노드에 의해 제공된다. 서비스 노드는 적어도 서비스 노드가 그 복제 체인에서 반출되고, 오프 라인되고, 업그레이드되고, 서비스 중단 없이 복제 체인으로 재삽입될 수 있기 때문에 유지하기에 상대적으로 용이할 수 있다. 히트리스 업그레이드(hitless upgrade)는 그것에 의해 달성될 수 있다. 추가적인 스위칭 용량(switching capacity)은 서비스 노드를 체인에 추가함으로써 추가될 수 있으며, 이는 보다 강력한 스위치를 설치하는 것 보다 더 쉬울 수 있다. 가상화된 서비스 및 CPU 오프로드를 제공하는 것과 결합하여 복제 체인은 데이터 센터 동작에서의 패러다임 전환을 초래할 것으로 예상된다.
특별한 목적을 위해 구축된 NIC 및 서비스 노드를 갖는 스마트 스위치의 조합을 사용하는, 네트워크 서비스는 고급 서비스가 비용 효율적이고 에너지 효율적인 방식으로 한 세트의 호스트 서버에 대해 제공될 수 있게 하는 방식으로 NIC와 서비스 노드 사이에서 조정될 수 있다. 하나의 예에서, 48개의 서버를 포함하는 랙은 48개의 전기능 smartNIC 대신에 48개의 특별한 목적을 위해 구축된 NIC 및 8개의 서비스 노드를 장착할 수 있다. 그러한 네트워크 아키텍처(architecture)는 각각의 서버가 전기능 smartNIC를 갖는 네트워크 아키텍처와 비교하여 자본 비용(capital expense; capex) 및 운영 비용(operating expense; opex) 둘 다의 관점에서 상당한 절약을 제공할 수 있다. 추가적으로, NIC 및 서비스 노드의 그러한 조합을 사용하는 것은 처리된 데이터의 단위 당 전반적인 전력 소비를 감소시킬 수 있으며, 이는 그러한 컴퓨팅 시스템의 환경 영향을 감소시킬 것이다. 그러한 접근법에 대한 분명한 비용적 및 환경적 이점이 있지만, NIC와 서비스 노드 사이에서 분해되는 서비스를 갖는 네트워크를 설계 및 운영하는 것은 사소한 작업(trivial task)이 아니다. 지금까지 실현되지 않았던 방식으로 NIC와 서비스 노드 사이에서 분해되는 서비스를 갖는 네트워크의 구현을 가능하게 하는 다양한 방법 및 시스템이 본원에 설명된다.
도 1은 일부 양태에 따라 로컬 전송 프로토콜(local transport protocol; LTP) 네트워크 트래픽을 운반하는 로컬 네트워크(108)를 갖는 장비 랙(101)을 예시하는 하이-레벨 다이어그램이다. 2개의 스마트 스위치(102)는 랙(101)에 설치되고 고 대역폭 스파인(spine)(107)에 의해 서로 연결된다. 스마트 스위치(102)는 로컬 네트워크(108)를 통해 가상화된 기능을 제공할 수 있는 서비스 노드(103)를 포함한다. 다수의 서버(104)는 또한 랙(101)에 설치되고 PCIe 디바이스(105)는 서버(104)에 설치된다. PCIe 디바이스는 증강된 NIC인 것으로 간주될 수 있다. 증강(augmentation)은, 네트워크 연결에 더하여, NIC가 또한 서비스 노드에 의해 제공되는 가상화된 기능에 대한 액세스를 제공하는 것이다. 스마트 스위치는 로컬 네트워크(108)를 공용 네트워크(109)에 연결한다. 공용 네트워크는 데이터 센터 내부에서 그리고 랙(101) 외부에서 엄격하게 제어되고 보안된 네트워크일 수 있다. 로컬 네트워크는 PCIe 디바이스(105)와 서비스 노드(103) 사이에서 로컬 전송 프로토콜(LTP) 패킷을 운반할 수 있다. 스마트 스위치(102) 및 서비스 노드(103)는 로컬 네트워크(108) 내에 LTP 패킷을 유지시키도록 구성될 수 있다.
도 2는 일부 양태에 따라 서버(104) 내의 주변 구성요소 상호연결 익스프레스(peripheral component interconnect express; PCIe) 디바이스(105)를 예시하는 하이-레벨 다이어그램이다. PCIe 디바이스는 PCIe 버스를 사용하여 서로 통신할 수 있다. PCI-SIG에 의해 2015년 1월 7일에 발행된 "PCI Express Base Specification Revision 3.1a"(이하 "PCIe 사양")은 PCIe 버스 및 PCIe 버스를 사용하는 디바이스 통신에 대한 사양을 제공한다. 호스트 컴퓨터(104)는 워크로드 1(202) 및 워크로드 2(206)와 같은 워크로드를 실행할 수 있다. 워크로드 1(202)은 호스트(104) 상에서 직접 실행되고 있고 호스트 디바이스 드라이버(203)를 사용하여 호스트(104)에 설치되는 하드웨어에 액세스한다. 워크로드 2(206)는 호스트(104) 상에서 실행되는 가상 머신(virtual machine; VM)이다. 일부 구현예에서, 호스트(104)에 설치되는 하드웨어는 PCIe 단일 루트 입출력 가상화(single root input output virtualization; SR-IOV) 또는 PCIe 다중 루트 입출력 가상화(multiple root input output virtualization; MR-IOV) 디바이스이다. 단순화를 위해, SR-IOV는 MR-IOV가 또한 기능을 제공한다는 것을 이해하면서 여기서 논의될 것이다. 2010년 1월 20일에 PCI-SIG에 의해 발행된 "Single Root I/O Virtualization and Sharing Specification Revision 1.1"은 PCIe SR-IOV에 대한 사양을 제공한다. SR-IOV가 생성되기 전에, PCIe 디바이스는 물리 기능을 제공하였고 VM을 포함하는 호스트 상에서 실행되는 모든 프로세스는 그러한 물리 기능을 공유하였다. SR-IOV는 PCIe 디바이스에 대한 VM의 액세스를 간소화하기 위해 생성되었다. SR-IOV 가능 PCIe 디바이스는 물리 기능을 제공할 수 있고 또한 가상 기능을 제공할 수 있다. 이와 같이, VM(206)은 그 자신의 디바이스 드라이버(207)를 사용하여 SR-IOV 가능 PCIe 디바이스에 의해 제공되는 VF에 액세스할 수 있다.
호스트(104)의 PCIe 인터페이스(204)는 PCIe 디바이스(105)의 PCIe 인터페이스(211)에 연결된다. PCIe 버스는 그것에 의해 워크로드에게 PCIe 디바이스에 의해 제공되는 PCIe 기능에 대한 액세스를 제공한다. 그러한 PCIe 기능은 가상화된 비휘발성 메모리 익스프레스(nonvolatile memory express; NVMe) 액세스 물리 기능(physical function; PF)(212), 가상화된 NVMe 액세스 가상 기능(virtual function; VF)(213), 가상화된 PCIe 기능 액세스 PF(214), 가상화된 PCIe 기능 액세스 VF(215), 네트워크 인터페이스 카드(network interface card; NIC) PF(216), 및 NIC VF(217)를 포함할 수 있다. 여기서, 용어 "NIC"는 심지어 NIC가 호스트의 메인 회로 보드에 직접 부착되는 주문형 집적 회로(ASIC)일 수 일지라도 네트워크 액세스를 제공하는 디바이스를 지칭하기 위해 사용된다. PCIe 디바이스(105)는 네트워크 패킷을 이더넷 포트(218)를 통해 송신 및 수신할 수 있다. 로컬 네트워크 상에서 PCIe 디바이스(105)에 의해 송신 및 수신되는 패킷은 이더넷 패킷(221), 외부 트래픽(랙 외부)을 위한 인터넷 프로토콜(internet protocol; IP) 패킷(222), 로컬 트래픽(랙 내부)을 위한 IP 패킷(223), 및 LTP 패킷(224)을 포함할 수 있다.
도 3은 일부 양태에 따라 스마트 스위치(301) 내의 서비스 노드(103)를 예시하는 하이-레벨 다이어그램이다. 스마트 스위치(301)는 로드 밸런서로서 구성될 수 있는 스위치 패브릭(302)을 포함한다. 스위칭 패브릭(302)을 구현할 수 있는 ASIC는 현재 상업적으로 이용가능한다. 서비스 노드는 각각 노드 동적 랜덤-액세스 메모리(dynamic random-access 메모리; DRAM)를 갖는다. 서비스 노드(103)는 스위치 패브릭(302)을 통해 서로, PCIe 디바이스, 및 공용 네트워크와 통신할 수 있다. 스위치 CPU(304)는 스마트 스위치(301)를 제어 및 모니터링할 수 있다. 스위치 CPU(304)는 스위치 DRAM을 갖는다. 스위치 PCIe 버스(303)는 서비스 노드(103), 스위치 CPU(304), 노드 DRAM, 및 스위치 DRAM 사이에 통신을 제공한다.
도 4는 일부 양태에 따라 주문형 집적 회로(application specific integrated circuit; ASIC)(401)를 갖는 서비스 노드(103)의 기능 블록도이다. 서비스 노드는 PCIe 인터페이스(450)를 포함할 수 있고 스마트 스위치에 설치될 수 있다. 서비스 노드(103)는 ASIC가 많은 기가바이트의 메모리에 액세스하도록 2배속(double data rate; DDR) 4 동기식 DRAM(Synchronous DRAM; SDRAM) 모듈 또는 DDR5 SDRAM 모듈과 같은 널리 이용가능한 메모리 모듈 또는 칩 중 하나 일 수 있는 오프-ASIC 메모리(432)를 포함한다.
ASIC(401)는 온-칩 통신 패브릭에 의해 상호연결되는 많은 코어 회로를 갖는 반도체 칩이며, 때때로 칩 상의 네트워크(network on a chip; NOC)(402)로 칭해진다. NOC는 종종 널리 사용된 고급 확장가능 인터페이스(advanced extensible interface; AXI) 버스와 같은 표준화된 통신 패브릭의 구현예이다. ASIC의 코어 회로는 PCIe 인터페이스(450), 중앙 처리 유닛(CPU) 코어(403), P4 패킷 처리 파이프라인(408) 요소, 메모리 인터페이스(415), 온 ASIC 메모리(예를 들어, 정적 랜덤-액세스 메모리(static random-access memory; SRAM))(416), 서비스 처리 오프로드(417), 패킷 버퍼(423), 및 패킷 입구/출구(ingress/egress) 회로(414)를 포함할 수 있다. PCIe 인터페이스(450)는 PCIe 버스(451)를 통해 외부 디바이스와 그리고 ASIC으로 통신하기 위해 사용될 수 있다. CPU 코어(403)는 CPU 1(405), CPU 2(406), 및 CPU 3(407)과 같은 다수의 CPU 코어를 포함할 수 있다. P4 패킷 처리 파이프라인(408)은 파이프라인 입구 회로(413), 파서(parser) 회로(412), 매치-액션 유닛(411), 디파서 회로(410), 및 파이프라인 출구 회로(409)를 포함할 수 있다. 서비스 처리 오프로드(417)는 설계자가 CPU로부터 그러한 기능을 오프로드하기 위한 하드웨어를 제공하기 위해 선택한 ASIC가 그렇게 종종 사용하는 기능을 구현하는 회로이다. 서비스 처리 오프로드는 압축 회로(418), 압축 해제 회로(419), 암호/PKA 회로(420), 및 CRC 계산 회로(421)를 포함할 수 있다. ASIC(401)의 비-제한적이 예 내에서 구현되는 특정 코어 회로는 ASIC가 InfiniBand 채널 어댑터, 비-휘발성 메모리 익스프레스(non-volatile memory express; NVMe) 카드, 및 IP(인터넷 프로토콜) 패킷에 의해 운반되는 네트워크 트래픽 흐름을 처리하는 네트워크 어플라이언스의 기능의 많은, 아마도 모두를 구현하도록 선택되었다.
P4 패킷 처리 파이프라인(408)은 IP 패킷, NVMe 프로토콜 데이터 유닛(protocol data unit; PDU), 및 InfiniBand PDU와 같은 네트워크 패킷을 처리하기 위한 특수화된 세트의 요소이다. P4 파이프라인은 도메인-특정 언어를 사용하여 구성될 수 있다. "P4"로서 단순히 공지된 프로토콜-독립 패킷 프로세서를 프로그래밍하기 위한 도메인-특정 언어의 개념은 네트워크 어플라이언스의 데이터 평면에 일부 유연성을 제공하는 방식으로서 개발되었다. 네트워크 어플라이언스의 데이터 평면을 프로그래밍하기 위한 P4 도메인-특정 언어는 2019년 10월 23일에 P4 언어 컨소시엄에 의해 발행된 바와 같은 "P416 Language Specification", 버전 1.2.0에 정의된다. P4(또한 "P4 사양", "P4 언어", 및 "P4 프로그램"으로서 본원에 언급됨)는 네트워크 스위치, 네트워크 라우터, 프로그램가능 NIC, 소프트웨어 스위치, FPGA, 및 ASIC를 포함하는 다양한 타겟 상에서 구현가능하도록 설계된다. P4 사양에서 설명되는 바와 같이, P4 언어에 의해 제공되는 주된 관념(primary abstraction)은 헤더 타입, 파서, 테이블, 액션, 매치-액션 유닛, 제어 흐름, 외부 객체, 사용자-정의 메타데이터, 및 고유 메타데이터에 관한 것이다.
메모리 인터페이스(415)는 메모리 I/O 동작을 오프-ASIC 메모리(432)로/로부터 조정한다. 오프-ASIC 메모리가 DRAM일 때, 메모리 컨트롤러는 DRAM 컨트롤러로 칭해질 수 있다. 오프-ASIC 메모리는 ASIC(401) 및 서비스 노드(103)에 의해 사용되는 데이터를 저장할 수 있다. 그러한 데이터는 서비스 상태 정보(440)를 포함할 수 있다. 서비스 상태 정보는 흐름 테이블(441), 세션 테이블(442), NAT 매핑 테이블(443), 및 가상화된 서비스 상태 정보(444)를 포함할 수 있다. 가상화된 서비스 상태 정보(444)는 가상화된 PCIe 기능 맵(445) 및 NVMe 스플라이싱 데이터(447)를 포함할 수 있다. NVMe 스플라이싱 데이터는 네임스페이스(namespace) 맵(446)을 포함할 수 있다.
CPU 코어(403)는 범용 프로세스 코어, 예컨대 축소 명령 집합 컴퓨팅(reduced instruction set computing; RISC) 프로세서 코어, 고급 RISC 머신(advanced RISC machine; ARM) 프로세서 코어, 인터로킹된 파이프라인 스테이지를 갖지 않는 마이크로프로세서(microprocessor without interlocked pipeline stages; MIPS) 프로세서 코어, 및/또는 x86 프로세서 코어일 수 있다. 각각의 CPU 코어는 메모리 인터페이스, ALU, 레지스터 뱅크, 명령어 페치 유닛, 및 명령어 디코더를 포함할 수 있으며, 이는 다른 CPU 코어와 독립적으로 명령어를 실행하도록 구성된다. CPU 코어는 범용 프로그래밍 언어 예컨대 C를사용하여 프로그램가능할 수 있다.
CPU 코어(403)는 또한 버스 인터페이스, 내부 메모리, 및 메모리 관리 유닛(memory management unit; MMU) 및/또는 메모리 보호 유닛을 포함할 수 있다. 예를 들어, CPU 코어는 내부 캐시, 예를 들어, L1 캐시 및/또는 L2 캐시를 포함할 수 있고/있거나, 근처의 L2 및/또는 L3 캐시에 액세스할 수 있다. 각각의 CPU 코어는 명령어-캐시 및 데이터-캐시를 포함하는 코어-특정 L1 캐시 및 각각의 CPU 코어에 특정되거나 소수의 CPU 코어 사이에 공유되는 L2 캐시를 포함할 수 있다. L3 캐시는 또한 CPU 코어에 이용가능할 수 있다.
제어 평면 기능을 위해 그리고 소프트웨어 구현 패킷 처리 기능을 포함하는 느린 데이터 경로의 양태를 구현하기 위해 이용가능한 다수의 CPU 코어(403)가 있을 수 있다. CPU 코어는 이산 패킷 처리 동작 예컨대 L7 애플리케이션(예를 들어, HTTP 로드 밸런싱, L7 방화벽, 및/또는 L7 텔레메트리), 특정 InfiniBand 채널 어댑터 기능, 흐름 테이블 삽입 또는 테이블 관리 이벤트, 연결 설정/관리, 멀티캐스트 그룹 조인, 심층 패킷 검사(deep packet inspection; DPI)(예를 들어, URL 검사), 스토리지 볼륨 관리(예를 들어, NVMe 볼륨 설정 및/또는 관리), 암호화, 복호화, 압축, 및 압축 해제를 구현하기 위해 사용될 수 있으며, 이는, 데이터 평면 처리에서 예상되는 바와 같이 빠른 경로 성능을 제공하는 방식으로, P4와 같은 도메인-특정 언어를 통해 쉽게 구현가능하지 않을 수 있다
패킷 버퍼(423)는 패킷을 스위치 패브릭(302)으로부터 데이터 평면의 패킷 처리 요소로 그리고 그 반대로 전달하는 중앙 온-칩 패킷 스위치로서의 역할을 할 수 있다. 패킷 처리 요소는 소프트웨어로 구현되는 느린 데이터 경로 및 패킷 처리 회로(408)에 의해 구현되는 빠른 데이터 경로를 포함할 수 있다.
P4 패킷 처리 파이프라인(408)은 프로그램가능 패킷 처리 파이프라인을 구현하는 특화된 회로 또는 특화된 회로의 일부일 수 있다. 일부 실시예는 네트워크 어플라이언스 내에 빠른 데이터 경로로서 P4 파이프라인을 포함한다. 빠른 데이터 경로는 그것이 네트워크 어플라이언스 내에 또한 구현될 수 있는 느린 데이터 경로보다 더 빠르게 패킷을 처리할 수 있기 때문에 빠른 데이터 경로로 칭해진다. 느린 데이터 경로의 예는 소프트웨어 구현 데이터 경로이며 여기서 CPU 코어(403) 및 메모리(432)는 느린 데이터 경로를 구현하기 위해 소프트웨어를 통해 구성된다.
도 5는 일부 양태에 따라 네트워크 패킷을 예시하는 다이어그램이다. 네트워크 트래픽 흐름(500)은 다수의 패킷 예컨대 제1 패킷(550), 제2 패킷(551), 제3 패킷(552), 제4 패킷(553), 및 최종 패킷(554)을 가질 수 있으며 제4 패킷(553)과 최종 패킷(554) 사이에 더욱 많은 패킷을 갖는다. 용어 "패킷(the packet)" 또는 "패킷(a packet)"은 네트워크 트래픽 흐름 내의 임의의 패킷을 지칭할 수 있다. 패킷은 인터넷 프로토콜 슈트(suite)에 따라 구성되고 해석될 수 있다. 인터넷 프로토콜 슈트는 개념적 모델이고 인터넷 및 유사한 컴퓨터 네트워크에서 사용되는 통신 프로토콜의 세트이다. 패킷은 때때로 계층 1로 칭해지는 물리 계층(physical layer)에서 물리 매체를 통해 원시 비트 스트림으로 송신 및 수신될 수 있다. 패킷은 원시 비트 스트림으로서 수신되거나 원시 비트 스트림으로서 송신될 수 있다.
링크 계층은 종종 계층 2로 칭해진다. 링크 계층의 프로토콜은 디바이스가 부착되고 라우터를 통과하는 것 없이 액세스가능한 모든 디바이스를 포함하는 로컬 네트워크 연결의 범위 내에서 동작한다. 링크 계층은 동일한 링크 상의 2개의 상이한 디바이스의 인터페이스 사이에서 패킷을 이동시키기 위해 사용된다. 패킷은 계층 2 헤더(501), 계층 2 페이로드(502), 및 계층 2 프레임 체크 시퀀스(frame check sequence; FCS)(503)를 갖는다. 계층 2 헤더는 소스 미디어 액세스 제어(media access control; MAC) 어드레스(504), 목적지 MAC 어드레스(505), 및 다른 계층 2 헤더 데이터(506)를 포함할 수 있다. 네트워크 연결 디바이스의 입력 포트 및 출력 포트는 MAC 어드레스를 가질 수 있다. IEEE(Institute of Electrical 및 Electronics Engineers) 802.3으로서 또한 공지된 이더넷은 계층 2 프로토콜이다. EEE 802.11(WiFi)는 다른 널리 사용된 계층 2 프로토콜이다. 계층 2 페이로드(502)는 계층 3 패킷을 포함할 수 있다. 계층 2 FCS(503)는 계층 2 헤더 및 계층 2 페이로드로부터 계산되는 순환 중복 체크(cyclic redundancy check; CRC)를 포함할 수 있다. 계층 2 FCS는 패킷이 에러없이 수신되었다는 것을 검증하기 위해 사용될 수 있다.
종종 계층 3으로 칭해지는 인터넷 계층은 네트워크 계층이며 여기서 계층 3 패킷은 다수의 중간 노드를 걸쳐 제1 노드로부터 제2 노드로 라우팅될 수 있다. 노드는 스위치, 서버, 및 디바이스 예컨대 서비스 노드(103) 및 PCIe 디바이스(105)일 수 있다. 인터넷 프로토콜(Internet protocol; IP)은 통상적으로 사용된 계층 3 프로토콜이다. 계층 3 패킷은 계층 3 헤더(507) 및 계층 3 페이로드(508)를 가질 수 있다. 계층 3 헤더(507)는 소스 IP 어드레스(509), 목적지 IP 어드레스(510), 프로토콜 지시자(511), 및 다른 계층 3 헤더 데이터(512)를 가질 수 있다. 일 예로서, 제1 노드는 중간 노드를 통해 IP 패킷을 제2 노드로 송신할 수 있다. 따라서, IP 패킷은 제1 노드를 나타내는 소스 IP 어드레스 및 제2 노드를 나타내는 목적지 IP 어드레스를 갖는다. 제1 노드는 IP 패킷이 중간 노드로 송신되어야 한다는 라우팅 결정을 한다. 따라서, 제1 노드는 제1 계층 2 패킷에서 IP 패킷을 중간 노드로 송신한다. 제1 계층 2 패킷은 제1 노드를 나타내는 소스 MAC 어드레스(504), 중간 노드를 나타내는 목적지 MAC 어드레스(505)를 갖고, 페이로드로서 IP 패킷을 갖는다. 중간 노드는 제1 계층 2 패킷을 수신한다. 목적지 IP 어드레스에 기초하여, 중간 노드는 IP 패킷이 제2 노드로 송신될 것으로 결정한다. 중간 노드는 IP 패킷을 중간 노드를 나타내는 소스 MAC 어드레스(504), 제2 노드를 나타내는 목적지 MAC 어드레스(505), 및 페이로드로서 IP 패킷을 갖는 제2 계층 2 패킷에서 제2 노드로 송신한다. 계층 3 페이로드(508)는 전송 계층 프로토콜과 같은 상위 계층(higher layer) 프로토콜에 따라 상위 계층에 대한 헤더 및 페이로드를 포함할 수 있다.
종종 계층 4로 칭해지는 전송 계층은 애플리케이션이 작업-특정 데이터 교환을 위해 사용하는 기본 데이터 채널을 설정할 수 있고 호스트 대 호스트 연결을 설정할 수 있다. 계층 4 프로토콜은 프로토콜 지시자(511)를 사용하여 계층 3 헤더(507)에 표시될 수 있다. 전송 제어 프로토콜(Transmission control protocol; TCP), 사용자 데이터그램 프로토콜(user datagram protocol; UDP), 및 인터넷 제어 메시지 프로토콜(internet control message protocol; ICMP)은 공통 계층 4 프로토콜이다. TCP는 종종 TCP/IP로서 지칭된다. TCP는 연결 지향적이고 IP 네트워크를 통해 통신하는 호스트 상에서 실행되는 애플리케이션 사이에서 바이트의 스트림의 신뢰가능한, 정렬된, 및 에러-체크된 전달을 제공할 수 있다. TCP 데이터를 운반할 때, 계층 3 페이로드(508)는 TCP 헤더 및 TCP 페이로드를 포함한다. UDP는 비연결 모델을 사용하여 IP 네트워크 상의 다른 호스트로, 이 경우 데이터그램으로서 지칭되는, 메시지를 전송하기 위해 컴퓨터 애플리케이션을 제공할 수 있다. UDP 데이터를 운반할 때, 계층 3 페이로드(508)는 UDP 헤더 및 UDP 페이로드를 포함한다. ICMP는 다른 IP 어드레스와 통신할 때 성공 또는 실패를 나타내는 에러 메시지 및 동작 정보를 송신하기 위해 라우터를 포함하는 네트워크 디바이스에 의해 사용된다. ICMP는 비연결 모델을 사용한다.
계층 4 패킷은 계층 4 헤더(513) 및 계층 4 페이로드(514)를 가질 수 있다. 계층 4 헤더(513)는 소스 포트(515), 목적지 포트(516), 계층 4 플래그(517), 및 다른 계층 4 헤더 데이터(518)를 포함할 수 있다. 소스 포트 및 목적지 포트는 그러한 포트 상에서 수신 및 송신하도록 구성되는 애플리케이션 프로그램으로 패킷을 전달하기 위해 호스트 컴퓨터에 의해 사용되는 정수 값일 수 있다. 계층 4 플래그(517)는 네트워크 트래픽 흐름의 상태 또는 이에 대한 액션을 나타낼 수 있다. 예를 들어, TCP는 RST, FIN, 및 ACK 플래그를 갖는다. RST는 TCP 연결이 즉시 종료될 것이고 모든 패킷이 폐기될 것이라는 것을 나타낸다. TCP FIN 플래그는 FIN 패킷이 처리될 수 있기 전에 전송된 패킷인, TCP 연결에 대한 최종 전송을 나타낼 수 있다. ACK는 수신된 패킷을 확인한다. FIN 패킷의 수신자(recipient)는 TCP 연결의 그 측면을 종료하기 전에 FIN 패킷을 확인할 수 있다. 트래픽 흐름은 흐름 종료 다이얼로그에 의해 종료될 수 있다. 흐름 종료 다이얼로그의 예는 다음을 포함한다: TCP RST 패킷(ACK를 갖거나 갖지 않음); 및 TCP FIN 패킷에 응답하여 TCP ACK 패킷에 의해 플로잉되는 TCP FIN 패킷. 다른 프로토콜은 또한 잘 알려진 흐름 종료 다이얼로그를 갖는다. 계층 4 페이로드(514)는 계층 7 패킷을 포함할 수 있다.
종종 계층 7로 칭해지는 애플리케이션 계층은 하위 레벨 프로토콜에 의해 설정되는 네트워크 연결을 통해 사용자 서비스를 제공하거나 애플리케이션 데이터를 교환하기 위해 대부분의 애플리케이션에 의해 사용되는 프로토콜을 포함한다. 애플리케이션 계층 프로토콜의 예는 통합 이더넷을 통한 RDMA 버전 2(RDMA over Converged Ethernet version; RoCE v2), 하이퍼텍스트 전송 프로토콜(Hypertext Transfer Protocol; HTTP), 파일 전송 프로토콜(File Transfer Protocol; FTP), 단순 메일 전송 프로토콜(Simple Mail Transfer Protocol; SMTP), 및 동적 호스트 구성(Dynamic Host Configuration; DHCP)을 포함한다. 애플리케이션 계층 프로토콜에 따라 코딩되는 데이터는 전송 계층 프로토콜 유닛(예컨대 TCP 또는 UDP 메시지)으로 캡슐화될 수 있으며, 이는 차례로 하위 계층 프로토콜을 사용하여 실제 데이터 전달을 수행한다.
계층 4 페이로드(514)는 계층 7 패킷(520)을 포함할 수 있다. 계층 7 패킷(520)은 HTTP 패킷, InfiniBand PDU, 또는 일부 다른 L7 패킷일 수 있다. 계층 7 패킷(520)은 계층 7 헤더(521) 및 계층 7 페이로드(522)를 포함할 수 있다. 예시된 계층 7 패킷은 LTP 헤더(521) 및 LTP 페이로드(522)를 갖는 로컬 전송 프로토콜(local transport protocol; LTP) 패킷(520)이다. LTP 헤더는 PCIe 디바이스 식별자(530), 기능 식별자(531), 및 시퀀스 번호(532)를 포함할 수 있다. LTP 페이로드(522)는 워크로드 캡슐일 수 있다. 워크로드 캡슐은 기능 타입(533) 및 워크로드 데이터(534)를 포함할 수 있다. PCIe 디바이스 식별자(530) 및 기능 식별자(531)는 특정 PCIe 디바이스 및 그러한 PCIe 디바이스에 의해 구현되는 기능을 식별하기 위해 사용될 수 있다. 기능 타입(533)은 가상화된 PCIe 기능, 가상화된 NVMe 기능 등과 같은 기능의 타입을 나타낼 수 있다. 시퀀스 번호(532)는 LTP 패킷이 손실되어 그것이 재전송될 수 있다는 것을 결정하기 위해 사용될 수 있다. LTP 패킷은 UDP 패킷에서 운반되는 것으로 예시되지만 그들은 다른 L3 패킷의 페이로드로서 운반될 수 있고 이더넷 패킷과 같은 L2 패킷의 페이로드로서 운반될 수 있다.
도 6은 일부 양태에 따라 PCIe 디바이스(620)를 사용하여 서비스 노드(103)에 의해 제공되는 서비스 및 가상화된 기능에 액세스하는 것을 예시한다. PCIe 버스는 데이터 링크 계층 패킷(data link layer packet; DLLP)(601)을 사용하여 트랜잭션 계층 패킷(transaction layer packet; TLP)을 한 디바이스로부터 다른 디바이스로 운반할 수 있다. DLLP 및 TLP의 콘텐츠는 PCIe 사양에 의해 명시된다. DLLP(601)는 시퀀스 번호(602), TLP(603), 및 링크 사이클 중복 코드(link cycle redundancy code; LCRC)(604)를 포함한다. TLP(603)는 TLP 포맷(605), TLP 타입(606), 길이(607), 요청 식별자(608), 어드레스(609)를 포함하고, 데이터(610)를 포함할 수 있다.
PCIe 디바이스(620)는 TLP(603)를 수신할 수 있다. TLP(603)는 판독 요청 또는 기록 요청과 같은 요청일 수 있다. PCIe 디바이스는 TLP가 TLP 포맷(605) 및 TLP 타입(606)을 검사함으로써 판독 또는 기록 요청인지를 결정할 수 있다. TLP(603)는 길이(607) 및 어드레스(609)를 나타낼 수 있다. 길이(607)는 판독 또는 기록될 데이터 워드(data word; dword)의 수를 나타낸다. PCIe의 경우, dword는 32 비트이다. 어드레스(609)는 데이터가 기록되거나 데이터가 판독될 물리 어드레스이다. 기록 요청의 경우, TLP(603)는 물리 어드레스에 기록될 데이터(610)를 포함한다. PCIe 버스에 연결되는 많은 디바이스가 있을 수 있으며, 그 각각은 TLP를 생성할 수 있다. 요청자 식별자(608)는 응답이 나중에 그러한 디바이스로 리턴될 수 있도록 TLP를 송신한 디바이스를 나타낸다.
PCIe 디바이스(620)는, 예를 들어, 요청에 의해 지시된 바와 같이 정확하게 데이터를 기록 또는 판독함으로써 TLP를 해석할 수 있다. 따라서, 비-가상화된 디바이스에 송신되는 판독 요청은 그러한 비-가상화된 디바이스 상의 레지스터 또는 메모리 위치를 판독할 수 있다. 유사하게, 비-가상화된 디바이스에 대한 기록 동작은 디바이스의 레지스터 또는 메모리 위치로 기록될 수 있고 디바이스를 트리거하여 동작을 수행할 수 있다.
가상화된 기능의 경우, TLP는 워크로드 패킷을 생성하기 위해 사용된다. LTP 패킷은 워크로드 캡슐일 수 있다. 예를 들어, LTP 패킷은 TLP를 사용하여 생성된 워크로드 캡슐을 운반할 수 있다. LTP 패킷은 단순히 TLP를 캡슐화하지 않는다. PCIe 디바이스는 PCIe 워크로드 패킷(625)을 TLP(603)에 기초하여 서비스 노드(103)에 의해 구현되는 가상화된 PCIe 기능(630)으로 송신하는 가상화된 PCIe 액세스 기능(621)을 구현할 수 있다. PCIe 디바이스는 NVMe 워크로드 패킷(626)을 서비스 노드(103)에 의해 구현되는 가상화된 NVMe 기능(631)으로 송신하는 가상화된 NVMe 액세스 기능(622)을 구현할 수 있다. PCIe 디바이스는 또한 네트워크 인터페이스 기능(623)을 구현할 수 있다. PCIe 디바이스는 네트워크 인터페이스 기능(623)을 사용하여 네트워크 패킷을 서비스 노드 및 다른 목적지로 송신할 수 있다. 예를 들어, 네트워크 인터페이스 기능(623)은 PCIe LTP 패킷(625) 및 NVMe 워크로드 패킷(626)을 서비스 노드로 송신하기 위해 사용될 수 있다. UDP/IP 패킷(627) 및 TCP/IP 패킷(628)은 서비스 노드에 송신되는 LTP 패킷 이외의 패킷일 수 있다. 이러한 패킷의 경우, 서비스 노드는 패킷 처리 및 라우팅 기능(632)을 제공할 수 있다. 이와 같이, 서비스 노드는 스위치, 라우터, 또는 방화벽의 서비스를 제공할 수 있다.
도 7은 일부 양태에 따라 PCIe 디바이스(620)를 통해 서비스 및 가상화된 기능을 제공하는 서비스 노드(103)를 예시한다. 도 6에서, 요청 TLP가 PCIe 디바이스(620)에 송신된다. 도 7에서, 응답 TLP가 리턴된다. 보다 구체적으로, TLP(603)는 판독 요청 TLP일 수 있고 TLP(703)는 판독 응답 TLP일 수 있다. 그러한 응답 TLP는 완료 TLP로서 지칭될 수 있다. 단순화를 위해, 가상화된 PCI 기능(630)에 송신되는 단순한 레지스터 판독 동작이 고려된다. TLP(603)는 레지스터로부터 판독(read)을 요청할 수 있다. 서비스 노드에 송신되는 LTP 패킷(625)은 판독이 서비스 노드(103)에 의해 구현되는 기능으로부터 요청되었음을 나타낼 수 있다. 서비스 노드는 요청된 데이터를 포함하는 응답 LTP 패킷(725)을 송신하고 PCIe 디바이스(620)는 응답 LTP 패킷(725)을 사용하여 판독 응답 TLP(703)를 생성한다. 완료 TLP는 완료 TLP(703)가 판독 응답이라는 것을 나타내는 TLP 포맷(705) 및 TLP 타입(706)을 포함할 수 있다. 길이(707)는 데이터 필드(710) 내의 dword의 수를 나타낸다. 완료자 식별자(708)는 완료 TLP(703)의 소스를 나타낸다. 요청자 식별자(608)는 완료 TLP(703)를 수신할 디바이스를 나타낼 수 있다. 예를 들어, 호스트 컴퓨터(104)가 요청 TLP(603)를 PCIe 디바이스(620)에 송신하는 경우, 그 다음, 요청자 식별자(608)는 호스트 컴퓨터(104)를 나타낼 수 있고 완료자(completer) 식별자(708)는 PCIe 디바이스(620)를 나타낼 수 있다.
서비스 노드(103)는 PCIe 워크로드 패킷(725) 및 NVMe 워크로드 패킷(726)을 PCIe 디바이스(620)로 송신할 수 있다. PCIe 디바이스는 워크로드 요청을 해석할 수 있고 워크로드 요청에 기초한 TLP를 호스트 컴퓨터 및 PCIe 버스 상의 다른 디바이스에 송신할 수 있다. 그러한 TLP 패킷은 PCIe 사양에 의해 정의되는 TLP의 요청, 완료, 또는 임의의 다른 타입일 수 있다. 서비스 노드(103)는 또한 다른 네트워크 패킷, 예컨대 IP/UDP 패킷(727) 및 TCP/IP 패킷(728)을 PCIe 디바이스(620)로 송신할 수 있다.
위에 논의된 바와 같이, 호스트 컴퓨터 및 호스트 컴퓨터 상에서 실행되는 워크로드는 디바이스 드라이버를 사용하여 PCIe 기능에 액세스할 수 있다. 본원에 논의되는 가상화된 기능은 그러한 디바이스 드라이버에 대한 변경을 요구하지 않는다. PCIe 디바이스(620) 상의 액세스 기능 및 서비스 노드(103) 상의 가상화된 기능은, 호스트의 관점으로부터, PCIe 디바이스가 그러한 서비스 및 기능의 그 자신의 구현을 통해 기능 및 서비스를 제공하도록 협력할 수 있다.
도 8은 일부 양태에 따라 순환 복제 체인(800) 내의 서비스 노드를 예시하는 하이-레벨 흐름도이다. 가상화된 기능은 단일 서비스 노드에 의해 제공될 수 있다. 그러한 가상화는 고가용성, 및 서비스 스케일링(scaling)과 같은 추가 이점을 허용한다. 순환 복제 체인(800)은 다수의 서비스 노드가 서비스 상태 정보의 호환가능한 버전을 갖도록 서비스 상태 정보를 복제하기 위해 사용될 수 있다. 이와 같이, 순환 복제 체인 내의 임의의 서비스 노드는 서비스 상태 정보를 변경하지 않는 패킷을 즉시 처리할 수 있다. 패킷을 처리하는 것이 서비스 상태 정보를 변경하는 일부 경우에서, 변경은 패킷을 처리하는 것이 완료될 수 있기 전에 확인되어야만 한다. 따라서, 서비스 노드에 의해 제공되는 많은 서비스는 순환 복제 체인(800) 내의 서비스 노드의 수에 따라 선형적으로 스케일링될 수 있다. 서비스 노드가 실패하거나 오프라인으로 취해지는 경우, 그 다음, 그러한 서비스 노드 나머지 서비스 노드가 서비스를 계속 제공하는 동안 순환 복제 체인으로부터 제거될 수 있다. 이러한 방식으로, 서비스는 서비스 노드를 추가 또는 제거함으로써 스케일링될 수 있고 서비스는 그것이 서비스 노드 장애에 탄력적이기 때문에 고가용성을 갖는다.
순환 복제 체인(800)은 현재 4개의 서비스 노드를 갖는다. 서비스 노드는 서비스 노드 1(801), 서비스 노드 2(802), 서비스 노드 3(803), 및 서비스 노드 4(804)이다. 동기 패킷은 한 노드로부터 다른 노드로 서비스 상태 정보를 복제하기 위해 사용될 수 있다. 순환 복제 체인 내의 서비스 노드는 피어(peer)이다. 각각의 서비스 노드는 업스트림 피어 및 다운스트림 피어를 갖는다. 서비스 노드는 그들의 업스트림 피어로부터 동기 패킷을 수신하고 동기 패킷을 그들의 다운스트림 피어로 송신한다. 서비스 노드 1(801)은 서비스 노드 2(802)의 업스트림 피어이고 동기 패킷(805)을 서비스 노드 2(802)로 송신한다. 서비스 노드 2(802)는 서비스 노드 1(801)의 다운스트림 피어이다. 서비스 노드 2(802)는 서비스 노드 3(803)의 업스트림 피어이고 동기 패킷(805)을 서비스 노드 3(803)으로 송신한다. 서비스 노드 3(803)은 서비스 노드 2(802)의 다운스트림 피어이다. 서비스 노드 3(803)은 서비스 노드 4(804)의 업스트림 피어이고 동기 패킷(805)을 서비스 노드 4(804)로 송신한다. 서비스 노드 4(804)는 서비스 노드 3(803)의 다운스트림 피어이다. 서비스 노드 4(804)는 서비스 노드 1(801)의 업스트림 피어이고 동기 패킷(805)을 서비스 노드 1(801)로 송신한다. 서비스 노드 1(801)은 서비스 노드 4(804)의 다운스트림 피어이다. 일부 서비스 및 기능의 경우, 서비스 상태 정보 복제는 정보의 정확한 사본을 갖는 서비스 노드를 야기한다. 다른 경우, 예컨대 흐름 테이블에서, 복제는 호환가능하지만 정확하게 동일하지 않은 서비스 노드 정보를 야기한다.
일부 실시예는 순환 복제 체인이 아닌 복제 체인을 사용할 수 있다. 비-순환 복제 체인은 헤드 노드, 테일 노드, 및 하나 이상의 중간 노드를 갖는다. 데이터를 변경하는 동작, 예컨대 데이터베이스로의 기록 또는 본원에서 고려되는 바와 같은 서비스 상태 변경은 헤드 노드에 제출된다. 흐름 동기 패킷은 헤드 노드로부터 테일 노드로 이동한다. 테일 노드는 다운스트림 피어를 갖지 않고 따라서 동기 패킷을 드롭한다. 테일 노드는 동기 패킷이 체인의 테일에 도달하였다는 것을 나타내는 확인(acknowledgement)을 헤드 노드로 송신할 수 있다. 비-순환 복제 체인을 사용하기 위해, 헤드 노드는 세션 상태를 변경하는 패킷에 대해 항상 선택된 노드이다. 체인 내의 임의의 노드는 세션 상태 정보를 변경하지 않은 패킷을 처리할 수 있다.
도 9는 일부 양태에 따라 서비스 상태 정보(911)의 체인 복제를 위해 구성되는 서비스 노드를 예시하는 하이-레벨 흐름도이다. NAT는 서비스 노드에 의해 제공될 수 있는 서비스 중 하나이다. 컴퓨터 네트워크에서 실행되는 것들은 NAT에 익숙하다. NAT 세션은 서버(104)와 로컬 네트워크 외부의 머신 사이의 통신을 위한 것일 수 있다. NAT 세션의 제1 패킷(901)은 새로운 NAT 세션이 생성되기 때문에 서비스 상태 정보를 변경하는 IP 패킷이다. 제1 NAT 패킷(901)은 소스 IP 어드레스(902), 목적지 IP 어드레스(903), 소스 포트(904), 목적지 포트(905), 및 다른 데이터(906)를 갖는다. 소스 IP 어드레스(902) 및 소스 포트(904)는 패킷의 소스 및 그러한 소스에서의 포트를 나타낸다. 로드 밸런서(907)는 제1 NAT 패킷(901)을 수신한다. 로드 밸런서는 NAT 패킷을 선택된 서비스 노드(910)로 송신한다. 선택된 서비스 노드(910)는 라운드 로빈 또는 가중 라운드 로빈과 같은 로드 밸런싱 정책에 기초하여 선택될 수 있다. 로드 밸런서는 우선적으로 특정 트래픽을 특정 서비스 노드로 송신할 수 있다. 예를 들어, 로드 밸런서는 NAT 패킷에 대해 라운드 로빈을 사용할 수 있고 NVMe LTP 패킷을 특정 PCIe 디바이스(620)로부터 특정 서비스 노드로 송신할 수 있다.
선택된 서비스 노드(910)는 NAT 매핑 테이블을 포함하는 서비스 상태 정보(911)를 갖는다. 선택된 서비스 노드(910)는 제1 NAT 패킷(901)을 수신하고 새로운 NAT 세션이 요구되는지를 결정한다. 선택된 서비스 노드는 새로운 세션(913)에 대한 NAT 매핑을 생성하고 NAT 매핑 테이블(912)에 NAT 엔트리로서 새로운 NAT 매핑을 저장한다. 선택된 서비스 노드는 또한 새로운 세션(913)에 대한 NAT 매핑을 동기 패킷(920) 내의 그것의 다운스트림 피어로 송신한다. 순환 복제 체인 내의 서비스 노드는 NAT 매핑이 업스트림 피어(921)로부터 동기 패킷 내의 선택된 서비스 노드에 의해 수신될 때까지 새로운 세션(913)에 대한 NAT 매핑을 포워딩한다. 업스트림 피어(921)로부터의 동기 패킷은 서비스 노드의 전체 체인이 새로운 세션(913)에 대한 NAT 매핑을 수신하였다는 것을 확인하는 ACK 패킷인 것으로 간주될 수 있다. 선택된 서비스 노드는 변환된 패킷(914)을 송신하기 전에 ACK를 대기할 수 있다. NAT는 다른 패킷으로부터 변환된 패킷을 생성한다. 변환된 패킷(914)은 소스 IP 어드레스(915) 및 소스 포트(916)를 갖는다. 변환된 패킷의 소스 IP 어드레스(915)는 복제 체인을 나타내는 가상 IP 어드레스일 수 있다. 변환된 패킷의 소스 포트(916)는 복제 체인의 포트를 나타낼 수 있다. 가상 IP(virtual IP; vIP) 어드레스는 그러한 서비스 노드 중 특정 노드 대신에 복제 체인 내의 서비스 노드의 그룹을 나타내기 위해 사용될 수 있는 가상 식별자이다. 명확성을 위해, vIP는 상이한 가상 식별자가 대신 사용될 수 있다는 이해와 함께 본원에 참조된다. 로드 밸런서(907)는 vIP로 송신되는 패킷을 수신하고 패킷을 특정 서비스 노드로 포워딩할 수 있다.
도 10은 일부 양태에 따라 서비스를 제공하는 서비스 노드를 예시하는 하이-레벨 다이어그램이다. 서비스 상태 정보(1001)를 변경하지 않는 IP 패킷은 순환 복제 체인 내의 임의의 서비스 노드에 의해 즉시 처리될 수 있다. 공지된 NAT 세션을 위한 패킷은 서비스 상태 정보(1001)를 변경하지 않는 IP 패킷의 예이다. 로드 밸런서(907)는 변환된 패킷(1002)을 그것의 목적지로 송신하는 선택된 서비스 노드(910)로 패킷(1001)을 지향시킬 수 있다. 서비스 상태 정보에 대한 변경이 없었기 때문에 동기 패킷이 없을 수 있다.
도 11은 일부 양태에 따라 네트워크 어드레스 변환(network address translation; NAT) 테이블 엔트리를 NAT 테이블에 추가하는 하이-레벨 다이어그램이다. 선택된 서비스 노드는 새로운 NAT 테이블 엔트리(1108)를 위한 새로운 NAT 매핑을 생성할 수 있고 NAT 매핑 테이블(912)에 NAT 테이블 엔트리(1120)로서 새로운 NAT 테이블 엔트리를 저장할 수 있다. NAT 매핑 테이블 내의 엔트리는 로컬 IP 어드레스(1111), 로컬 포트(1112), 원격 IP 어드레스(1113), 원격 포트(1114), 공용 포트(1115), 및 공용 IP 어드레스(1116)를 포함할 수 있다. 로컬 IP 어드레스(1111)는 로컬 네트워크 상의, PCIe 디바이스와 같은, 로컬 디바이스의 IP 어드레스일 수 있다. 로컬 포트(1112)는 그러한 로컬 디바이스의 포트를 나타낼 수 있다. 원격 IP 어드레스(1113)는 원격 디바이스의 IP 어드레스일 수 있다. 로컬 포트는 그러한 원격 디바이스의 포트를 나타낼 수 있다. 공용 포트(1115)는 변환된 패킷에서 사용하기 위한 소스 포트(916)를 나타낼 수 있다. 공용 IP(1116)는 변환된 패킷에서 사용하기 위한 소스 IP 어드레스(915)를 나타낼 수 있다. 공용 IP 엔트리는 다수의 vIP가 사용될 때 그리고 다른 경우에서 유용할 수 있다.
발생할 수 있는 문제는 2개의 서비스 노드가 새로운 NAT 테이블 엔트리를 동시에 생성할 수 있다는 것이다. 2개의 서비스 노드가 동일한 공용 포트를 2개의 새로운 NAT 세션에 할당하는 것이 가능한다. 해결책은 포트의 상이한 풀을 각각의 서비스 노드가 그 자신의 풀로부터만 공용 IP를 할당하는 상이한 서비스 노드에 할당하는 것이다. 서비스 노드 NAT 풀(1101)은 서비스 노드에 대해 이용가능한(1102) 및 이용불가능한(1105) NAT 자원을 나타낼 수 있다. 이용가능 NAT 자원은 이용가능한 공용 포트(1103) 및 이용가능한 공용 IP 어드레스(1104)를 포함할 수 있다. 이용불가능한 NAT 자원은 이용불가능한 공용 포트(1106) 및 이용불가능한 공용 IP 어드레스(1107)를 포함할 수 있다.
도 12는 일부 양태에 따라 체인 복제를 사용하여 서비스 상태 정보를 복제하는 하이-레벨 흐름도이다. 시작 후, 프로세스는 패킷(1201)을 대기할 수 있다. 프로세스는 패킷이 수신될 때 결정 포인트(1202)로 진행할 수 있다. 결정 포인트(1202)에서, 프로세스는 패킷이 동기 패킷인지 여부를 결정한다. 그렇지 않은 경우, 결정 포인트(1208)에서 프로세스는 패킷을 처리하는 것이 서비스 상태 정보를 변경하는지 여부를 결정한다. 서비스 상태 정보가 변경되지 않는 경우, 그 다음, 블록(1209)에서 서비스 노드는 다음 패킷(1201)을 대기하기 전에 패킷을 완전히 처리한다. 서비스 상태 정보가 변경되는 경우, 그 다음, 블록(1210)에서 서비스 노드는 패킷을 완전히 처리하는 것을 지연시킬 수 있다. 패킷은 체인이 갱신되었다는 것을 나타내는 ACK를 기다리는 동안 완전히 처리될 수 있다. 블록(1211)에서, 프로세스는 동기 패킷을 그것의 다운스트림 피어로 송신한다. 동기 패킷은 피어가 패킷에 의해 야기되는 변경에 기초하여 그들의 서비스 상태 정보를 갱신하기 위해 사용할 수 있는 정보를 포함한다. 동기 패킷을 송신한 후, 프로세스는 다른 패킷(1201)을 대기는 것으로 복귀할 수 있다.
패킷이 결정 포인트(1202)에서 동기 패킷인 것으로 결정되는 경우, 그 다음, 결정 포인트(1203)에서 프로세스는 패킷이 자체 발생되었는지 여부를 결정할 수 있다. 도 12의 방법을 구현하는 서비스 노드는 블록(1211)에서 동기 패킷을 송신할 수 있다. 그러한 서비스 노드의 관점으로부터, 블록(1211)에서 송신되는 동기 패킷은 자체 발생된다. 패킷이 자체 발생되는 경우, 그 다음, 블록(1206)에서 서비스 노드는 체인 갱신을 기다리는 동안 지연된 동작을 수행할 수 있다. 그러한 동작은 블록(1210)에서 지연된 상이한 패킷에 대한 처리를 포함할 수 있다. 블록(1206) 후, 패킷은 프로세스가 다른 패킷(1201)을 수신하기 위해 대기하기 전에 블록(1207)에서 드롭될 수 있다. 패킷이 자체 발생된 동기 패킷이 아닌 경우, 그 다음, 블록(1204)에서 서비스 노드의 서비스 정보는 갱신될 수 있다. 블록(1205)에서 동기 패킷은 프로세스가 다른 패킷(1201)을 대기하는 것으로 복귀하기 전에 노드 다운스트림 피어로 포워딩될 수 있다.
도 13은 일부 양태에 따라 랙 내의 서비스 노드 호스트의 하이-레벨 다이어그램이다. 서비스 노드(103)는 로컬 네트워크(1307) 상에 전개될 수 있다. 제1 서비스 노드 호스트(1302)는 2개의 서비스 노드를 포함하고 제2 서비스 노드 호스트(1303)는 또한 2개의 서비스 노드를 포함한다. 제1 복제 체인(1304)은 두 서비스 노드 호스트로부터 서비스 노드를 포함한다. 제2 복제 체인(1305)은 두 서비스 노드 호스트로부터 상이한 서비스 노드를 포함한다. 예시된 배열은 복제 체인이 서비스 노드 호스트 중 하나가 실패하는 경우 완전히 실패하지 않기 때문에 고가용성을 제공한다. 도 13의 예에서, 스마트 스위치가 아닐 수 있는 스위치(1301)는 서비스 노드 호스트(1302, 1303)를 공용 네트워크(1306)에 연결한다.
도 14는 일부 양태에 따라 다수의 스마트 스위치에 서비스 노드(103)를 포함하는 복제 체인의 하이-레벨 다이어그램이다. 제1 스마트 스위치(1402)는 2개의 서비스 노드를 포함하고 제2 스마트 스위치(1403)는 또한 2개의 서비스 노드를 포함한다. 제1 복제 체인(1404)은 두 스마트 스위치로부터 서비스 노드를 포함한다. 제2 복제 체인(1405)은 두 스마트 스위치로부터 상이한 서비스 노드를 포함한다. 예시된 배열은 복제 체인이 스마트 스위치 중 하나가 실패하는 경우 완전히 실패하지 않기 때문에 고가용성을 제공한다. 도 14의 예는 도 14가 서비스 노드를 포함하는 스마트 스위치(1402, 1403)를 사용한다는 점에서 도 13의 예와 다르다. 도 13의 스위치(1301)는 스마트 스위치가 아닐 수 있다. 이와 같이, 서버의 기존 랙은 서비스 노드 호스트를 추가함으로써 서비스 노드로 업그레이드될 수 있다. 도 14는 스마트 스위치가 사용되는 시스템을 예시한다. 두 시스템 모두에서, 고급 네트워킹 기능 및 오프로드는 레거시(legacy) NIC를 이용하면서 획득될 수 있다. 예시된 바와 같이 PCIe 디바이스(620)를 사용하는 것은 또한 가상화된 PCIe 기능 및 서비스를 제공하는 것, 가상화된 NVMe 기능 및 서비스를 제공하는 것 등을 허용한다.
도 15는 일부 양태에 따라 서비스(1502)를 제공하는 서비스 노드(103)의 하이-레벨 다이어그램이다. PCIe 디바이스(620) 및 서비스 노드(103)는 PCIe/LTP 패킷(625), NVMe/LTP 패킷(626), 및 IP 패킷(1501) 예컨대 TCP 패킷, UDP 패킷 등을 교환할 수 있다. 서비스 노드(103)에 의해 제공되는 서비스(1502)는 가상화된 서비스(1503)를 포함할 수 있다. 가상화된 서비스는 가상화된 PCIe 디바이스 기능(630), 가상화된 NVMe 기능(631), 및 다른 가상화된 서비스 또는 기능(1504)을 포함할 수 있다. 서비스(1502)는 패킷 처리 및 라우팅 서비스(632)를 포함할 수 있다. 패킷 처리 및 라우팅 서비스(632)는 암호화/복호화(1505), NAT(1506), 방화벽(1507), 심층 패킷 검사(deep packet inspection; DPI)(1508), 및 다른 네트워크 서비스(1509)를 포함할 수 있다. 서비스는 NVMe-원격 직접 메모리 액세스(remote direct memory access; RDMA) 브리지(1510) 및 다른 서비스(1511)를 포함할 수 있다. 서비스 노드는 PCIe 디바이스(620)와 공용 네트워크(1541) 사이에서 교환되는 네트워크 트래픽에 대해 IP 패킷(1501, 1540)을 처리할 수 있다. 서비스 노드(103)는 NVMe/TCP(1530), 광섬유 채널(1532), 및 ROCEv2(RDMA over converged ethernet version 2)(1531)를 통해 스토리지 영역 네트워크(1533)에 연결할 수 있다. 스토리지 영역 네트워크에서 실행되는 것은 NVMe/TCP, 광섬유 채널, 및 ROCEv2와 익숙하며, 이 모두는 데이터 센터내에서 널리 전개되고 이용된다. 서비스 노드(103)는 서비스 상태 정보(1520)를 저장할 수 있다. 서비스 상태 정보(1520)는 흐름 테이블(441), 세션 테이블(442), NAT 매핑 테이블(443), 가상화된 PCIe 기능 맵(445), NVMe 스플라이싱 데이터(447), DPI 규칙 및 기준(1523), 보안 인증서(security certificate)(1521), 방화벽 규칙(1522), 라우팅 규칙(1525), 암호화/복호화 키(1524), 및 다른 서비스(1526)를 위한 데이터를 포함할 수 있다.
도 16은 일부 양태에 따라 아웃바운드 패킷 상에서 NAT를 수행하는 서비스 노드의 하이-레벨 흐름도이다. 아웃바운드 패킷은 제1 NAT 세션 패킷(1601) 및 외부 위치로 PCIe 디바이스(620)에 의해 송신되는 다른 NAT 세션 패킷(1602)을 포함한다. PCIe 디바이스(620)는 제1 NAT 세션 패킷(1601)을 외부 위치로 송신한다. 로드 밸런서는 제1 NAT 세션 패킷을 복제 체인(1603) 내의 서비스 노드(103)로 지향시킨다. 서비스 노드(103)는 제1 NAT 세션 패킷(1601)을 수신하고, 패킷에 대한 NAT 매핑(913)을 생성하고, NAT 매핑(913) 다운스트림을 다른 서비스 노드로 송신한다. 다른 서비스 노드는 NAT 매핑(913)에 기초하여 그들의 NAT 매핑 테이블을 갱신한다. 제1 NAT 세션 패킷(1601)을 송신한 후, PCIe 디바이스는 다른 NAT 세션 패킷(1602)을 복제 체인(1603)으로 송신할 수 있다. 로드 밸런서는 서비스 노드 사이에 패킷을 분배할 수 있다. 서비스 노드는 아웃바운드 패킷으로부터 변환된 패킷(1604)을 생성하고 변환된 패킷(1604)을 아웃바운드 패킷(1601, 1602) 내의 목적지 어드레스에 의해 지시되는 외부 위치로 송신한다.
도 17은 일부 양태에 따라 인바운드 패킷 상에서 NAT를 수행하는 서비스 노드의 하이-레벨 흐름도이다. 인바운드 패킷(1702)은 외부 위치로부터 PCI 디바이스(620)로 송신된다. 로드 밸런서는 서비스 노드(103) 사이에 인바운드 패킷(1702)을 분배한다. 서비스 노드는 인바운드 패킷(1702)으로부터 변환된 패킷(1701)을 생성하고변환된 패킷을 PCIe 디바이스(620)로 송신한다. 여기서, NAT 서비스는 NAT 매핑 테이블에 엔트를 갖지 않는 인바운드 패킷을 드롭한다. 일부 NAT 구현예는 새로운 NAT 세션의 인바운드 패킷에 대해 새로운 NAT 매핑을 생성할 것이다. 그러한 구현예는 복제 체인을 통해 새로운 NAT 매핑을 복제할 것이다.
도 18은 일부 양태에 따라 NAT 패킷을 처리하는 하이-레벨 흐름도이다. 시작 후, 프로세스는 패킷(1801)을 대기한다. 블록(1802)에서, 패킷이 수신된 후, 프로세스는 패킷을 처리할 선택된 서비스 노드를 선택한다. 블록(1803)에서, 패킷은 선택된 노드로 송신된다. 로드 밸런서는 블록(1802 및 1803)에 의해 지시되는 동작을 수행할 수 있다. 서비스 노드는 프로세스에서 나머지 단계를 수행할 수 있다. 결정 포인트(1804)에서, 프로세스는 패킷이 NAT 매핑 테이블에 이미 있는 세션을 위한 것인지를 결정한다. 그렇다면, 블록(1805)에서 프로세스는 세션의 NAT 매핑 테이블 엔트리에 기초하여 변환된 패킷을 생성한다. 블록(1806)에서, 변환된 패킷은 그것의 목적지로 송신된다. NAT 매핑 테이블이 패킷에 대한 엔트리를 갖지 않는 경우, 프로세스는 결정 포인트(1807)로 이동하고 여기서 프로세스는 패킷이 내부 소스로부터인지 여부를 체크한다. 패킷이 내부 소스로부터가 아닌 경우, 패킷은 프로세스가 패킷(1801)을 대기하는 것으로 복귀하기 전에 블록(1808)에서 드롭된다. 패킷이 내부 소스로부터인 경우, 그 다음, 블록(1809)에서, NAT 매핑이 패킷에 대해 생성된다. 블록(1810)에서 NAT 매핑은 서비스 노드의 로컬 매핑 테이블에 저장된다. 블록(1811)에서, NAT 매핑은 서비스 노드의 다운스트림 피어로 송신된다. 블록(1812)에서, 프로세스는 블록(1805)으로 진행하기 전에 업스트림 피어가 NAT 매핑을 확인하도록 대기한다. 실시예에서, 내부 소스는 로컬 네트워크 상의 소스이다. 외부 디바이스가 NAT 매핑을 개시하는 것을 허용하는 구현예는 결정 포인트(1807)를 스킵하고 블록(1809)으로 진행할 수 있다.
도 8 내지 도 18을 참조하여 상술한 바와 같이, 호스트 컴퓨터 또는 호스트 컴퓨터에 설치되는 smartNIC에 의해 과거에 수행된, 네트워크 어드레스 변환과 같은, 네트워크 트래픽 처리의 많은 양태는 스마트 스위치 내에 위치될 수 있는 서비스 노드에 의해 처리될 수 있다. 고가용성 네트워크 트래픽 처리는 NAT 매핑 테이블과 같은 서비스 노드의 서비스 상태 정보의 체인 복제를 사용하여 제공될 수 있다. 체인 복제의 본질(nature)로 인해, 네트워크 트래픽 처리, 예컨대 NAT는 사용되는 서비스 노드의 수에 따라 거의 선형적으로 스케일링될 수 있다. 게다가, 서비스 노드는 동적으로 복제 체인에 추가되거나 이로부터 제거될 수 있어서, 그것에 의해 유지 및 업그레이드(upgrading)에 대해 추가적인 이점을 제공한다. 이러한 고가용성 서비스 노드 구현 및 전개는 전기능 smartNIC에 의해서만 제공되었을 수 있는 서비스가 특별한 목적을 위해 구축된 NIC 및 서비스 노드의 조합에 의해 구현될 수 있게 한다. 따라서, 고급(advanced) 기능은 여전히 각각의 서버에 대해 지원되지만 보다 자본 비용(capex) 및 운영 비용(opex) 효율적인 특별한 목적을 위해 구축된 NIC와 함께 그리고 보다 에너지 효율적인 방식으로 지원되며, 이는 그러한 컴퓨팅 시스템의 환경 영향을 감소시킬 수 있다.
도 19는 일부 양태에 따라 가상화된 기능을 갖는 호스트 개시 요청을 서비스하는 하이-레벨 다이어그램이다. 호스트는 디바이스 드라이버를 사용하여 PCIe 디바이스에 대한 요청을 개시할 수 있다. 요청은 TLP에서 호스트로부터 PCIe 디바이스로 운반될 수 있다. 위에 논의된 바와 같이, DLLP는 PCIe 버스 상에서 TLP를 운반한다. TLP를 수신할 시, PCIe 디바이스는 DLLP ACK를 호스트로 송신하며, 그것에 의해 PCIe 트랜잭션을 종료한다. DLLP ACK을 송신하는 것은 DLLP ACK을 송신할 시의 임의의 지연이 호스트 컴퓨터의 PCIe 구현 내에 에러 또는 성능 손실을 야기할 수 있기 때문에 중요한 동작이다. 이러한 이유로 인하여, PCIe 디바이스는 DLLP ACK를 신속하게 송신하고 단순히 TLP를 캡슐화하고 그것을 네트워크 패킷으로 포워딩하지 않는다. PCIe 디바이스(620)는 TLP의 수신을 확인하는 DLLP ACK를 송신할 수 있고 TLP를 사용하여 워크로드 요청 캡슐(1901)을 생성할 수 있다. 워크로드 요청 캡슐(1901)은 워크로드 요청 패킷 내의 서비스 노드로 송신된다. 서비스 노드는 워크로드 요청 패킷을 처리하고 워크로드 응답 캡슐(1902)을 포함하는 워크로드 응답 패킷(1904)으로 응답할 수 있다. PCIe 디바이스는 PCIe 버스를 통해 호스트로 송신되는 TLP를 생성하기 위해 워크로드 응답 캡슐(1902)을 처리할 수 있다. DLLP ACK는 서비스 노드로부터 워크로드 패킷(1903) 또는 워크로드 캡슐(1901)이 수신되었다는 지시를 먼저 수신하는 것 없이 PCIe 디바이스로부터 호스트로 송신될 수 있다. 호스트에 설치되는 smartNIC는 호스트에 제공되는 서비스 및 기능을 집계할 수 있다. 그러한 서비스 및 기능은 호스트의 smartNIC 내에서 집계될 수 있다. 가상화된 PCIe 기능을 구현하는 PCIe 디바이스(620) 및 서비스 노드는 호스트 내로부터 그러한 서비스 및 기능을 분해하는 것을 제공한다.
도 20은 일부 양태에 따라 가상화된 기능에 의해 개시되는 요청을 서비스하는 하이-레벨 다이어그램이다. 서비스 노드에서 실행되는 가상화된 기능은 호스트에 의해 처리될 요청을 생성할 수 있다. 요청은 워크로드 요청 캡슐(2001)에 배치되고 워크로드 요청 패킷(2003)에서 PCIe 디바이스(620)로 송신될 수 있다. PCIe 디바이스(620)는 워크로드 요청 캡슐을 처리하여 PCIe 버스를 통해 호스트로 송신되는 TLP를 생성할 수 있다. 호스트는 PCIe 버스를 통해 TLP에서 PCIe 디바이스로 송신되는 응답을 생성할 수 있다. PCIe 디바이스는 TLP의 성공적인 수신 시 호스트로 DLLP ACK를 즉시 송신할 수 있다. PCIe 디바이스는 TLP를 사용하여 워크로드 응답 캡슐(202)을 생성할 수 있고 워크로드 응답 캡슐(202)을 워크로드 응답 패킷(2004)에서 서비스 노드로 송신할 수 있다. DLLP ACK는 서비스 노드로부터 워크로드 패킷(2004) 또는 워크로드 캡슐(2002)이 수신되었다는 지시를 먼저 수신하는 것 없이 PCIe 디바이스로부터 호스트로 송신될 수 있다.
도 21은 일부 양태에 따라 하드웨어 구현 및 소프트웨어 구현 가상화된 기능을 제공하는 하이-레벨 다이어그램이다. PCIe 디바이스(620)는 워크로드로부터 제1 TLP(2101)를 수신할 수 있다. 제1 TLP는 어드레스(2102), TLP 타입(2103), 및 TLP 요청자 식별자(2104)를 포함할 수 있다. PCIe 디바이스는 제1 TLP를 사용하여 제1 워크로드 캡슐(2105)을 생성할 수 있다. 워크로드 캡슐(2105)은 어드레스 오프셋, 요청 타입 지시자(2107), 및 요청 식별자를 포함할 수 있다. 어드레스 오프셋은 어드레스(2102) 및 가상화된 PF 및 VF의 로컬 베이스 어드레스(2109)로부터 계산될 수 있다. PCIe 기능은 호스트의 IO 공간 내에 베이스 어드레스를 가질 수 있다. 이와 같이, 베이스 어드레스는 메모리 기록 및 판독을 사용하여 액세스될 수 있는 PCIe 기능 레지스터의 시작 위치를 나타낼 수 있다. 어드레스(2102)는 호스트의 IO 공간 내의 위치를 나타낼 수 있다. 어드레스(2102)는 그것에 의해 어떤 PCIe 기능이 액세스되고 있고 PCIe 기능 내의 어떤 메모리 위치가 액세스되고 있는지를 나타낼 수 있다. PCIe 기능의 베이스 어드레스는 시작에서 호스트에 의해 설정될 수 있고 시작에서 시작으로 변경될 수 있다. 이와 같이, 어드레스(2102)는 서비스 노드에 대해 거의 또는 전혀 의미를 갖지 않을 수 있다. 대신, 서비스 노드는 어드레스 오프셋 및 PCIe 기능 식별자를 사용할 수 있다. PCIe 기능 식별자 및 요청 타입 지시자 또는 PCIe 기능 지시자는 어떤 PCIe 기능이 액세스되고 있고 PCIe 기능 내의 어떤 메모리 위치가 액세스되고 있는지를 나타낼 수 있다. 많은 경우에서, 어드레스 오프셋은 어드레스(2102) 마이너스 PCIe 디바이스에서 액세스되고 있는 PCIe 기능의 베이스 어드레스이다. TLP 타입(2103)은 요청 타입 지시자(2107)를 결정하기 위해 사용될 수 있다. 요청 식별자는 워크로드 캡슐 또는 워크로드 패킷과 고유하게 연관되는 값일 수 있다. 워크로드 캡슐 또는 패킷은 또한 제1 TLP가 그러한 데이터를 포함하는 경우 TLP 데이터(710)(도 7 참조)를 포함할 수 있다.
서비스 노드(103)는 제1 워크로드 캡슐을 수신하고 액세스되고 있는 가상화된 PCIe 기능을 식별할 수 있다. 가상화된 PCIe 기능은 다양한 방식으로 서비스 노드(103) 또는 스마트 스위치(301)에서 구현될 수 있다. 가상화된 PCIe 기능은 소프트웨어에 의해 구현될 수 있다. 소프트웨어 구현 가상화된 기능(2114)은 요청 타입 지시자, 어드레스 오프셋, 및 TLP 데이터(710)를 사용하여 실행될 실행가능한 코드 및 그러한 실행가능한 코드에 제공할 입력을 식별할 수 있다. PCIe 기능은 서비스 노드가 디바이스 드라이버(2113)를 통해 상호작용하는 서비스 노드 내의 하드웨어 디바이스(2115)에 의해 구현될 수 있다. 요청 타입 지시자, 어드레스 오프셋, 및 TLP 데이터(710)(도 7 참조)는 디바이스 드라이버를 식별하고 입력을 디바이스 드라이버(2113)에 제공하기 위해 사용될 수 있다. 서비스 노드(103)는 하드웨어 디바이스(2112) 베이스 어드레스를 기록할 수 있다. 로컬 어드레스 매핑에 대한 어드레스 오프셋은 어드레스 오프셋(2106) 및 로컬 베이스 어드레스(2112)를 사용하여 로컬 디바이스에 액세스하는 로컬 어드레스 값을 계산할 수 있다.
더 다른 선택은 가상화된 PCIe 디바이스가 하드웨어 PCIe 디바이스(2115, 2125)에 의해 구현되는 것이다. 예를 들어, 하드웨어 디바이스는 스마트 스위치 내에 설치되는 하드웨어 디바이스(2125)일 수 있다. 서비스 노드 디바이스 드라이버(2113)는 서비스 노드 PCIe 버스(2116) 및 스마트 스위치 PCIe 버스(2124)를 통해 하드웨어 디바이스(2125)에 액세스할 수 있다. 서비스 노드는 제3 TLP를 하드웨어 디바이스(2125)로 송신할 수 있다. 제3 TLP는 어드레스 오프셋(2106) 및 로컬 하드웨어 베이스 어드레스(2112)를 사용하여 결정되는 어드레스(2121)를 포함할 수 있다. TLP 타입(2122)은 제1 TLP(2101)의 TLP 타입(2103)과 동일하거나 이에 기초할 수 있다. TLP 요청자 ID(2123)는 서비스 노드(103)를 나타낼 수 있다.
서비스 노드(103)는 워크로드 패킷을 PCIe 디바이스(620)로 송신할 수 있다. 워크로드 패킷은 서비스 노드에서 발생되는 워크로드 요청일 수 있거나 워크로드 요청에 응답하여 송신되는 워크로드 응답일 수 있다. 서비스 노드에서의 가상화된 기능은 워크로드 응답을 송신할 수 있다. 서비스 노드로부터 발생되는 요청은 호스트로부터 발생되는 요청과 유사하다. 응답은 그것이 응답되는 요청을 나타낸다는 점에서 약간 상이하다. 서비스 노드는 워크로드 응답 패킷(2130)을 디바이스(620)로 송신할 수 있다. 제2 워크로드 캡슐(2132)은 워크로드 응답 패킷(2130)의 워크로드 응답 페이로드(2131)에 포함될 수 있다. 워크로드 응답 캡슐(2132)은 요청 식별자(2108) 및 응답 타입 지시자(2147)를 포함할 수 있다. 응답 타입 지시자는 성공, 실패, 기록 확인, 제2 워크로드 캡슐(2132)에 데이터를 포함하는 판독 응답 등을 나타낼 수 있다. 요청 식별자(2108)는 서비스 노드에 송신되는 요청의 식별자와 동일할 수 있다. 제2 워크로드 캡슐은 워크로드로 송신될 수 있는 제2 TLP(2141)를 생성하기 위해 사용될 수 있다. 요청 식별자(2108)는 제2 TLP에 포함하기 위해 TLP 요청자 ID(2104)를 결정하기 위해 사용될 수 있다. 응답 타입 지시자(2147)는 제2 TLP에 포함하기 위해 TLP 타입(2143)을 결정하기 위해 사용될 수 있다. TLP 완료자 ID(2144)는 가상화된 PCIe 기능, PCIe 디바이스(620), 또는 서비스 노드(103)를 나타낼 수 있다.
서비스 노드는 어떤 가상화된 기능이 액세스되고 있는지를 결정하기 위해 어드레스 오프셋(2106), 요청 타입 지시자(2107), 및 LTP 패킷 헤더 데이터를 사용할 수 있는 기능 해석 및 매핑(2110)을 구현할 수 있다. 기능 해석 및 매핑(2110)은 가상화된 PCIe 기능 맵을 사용할 수 있다.
도 22는 일부 양태에 따라 예시적 가상화된 PCIe 기능 맵(2201)의 다이어그램이다. 가상화된 PCIe 기능 맵의 목적은 PCIe 디바이스 상의 가상화된 PCIe 액세스 기능과 서비스 노드에 의해 제공되는 가상화된 PCIe 기능을 연관시키는 것이다. 매핑을 수행하기 위한 특정 기술은 구현 의존적이다. 상이한 구현은 PCIe 디바이스, 서비스 노드, 또는 둘 상에 더 많은, 더 적은, 또는 상이한 데이터를 저장할 수 있다. 특정 구현에 관계없이, PCIe 디바이스 상의 가상화된 PCIe 액세스 기능과 서비스 노드에 의해 제공되는 가상화된 PCIe 기능 사이의 연관은 워크로드 패킷을 적절하게 지향시키기 위해 형성되고 사용된다.
가상화된 PCIe 기능 맵(2201)은 PCIe 디바이스 상의 가상화된 PCIe 액세스 기능과 서비스 노드에 의해 제공되는 가상화된 PCIe 기능 사이의 매핑을 위해 사용될 수 있는 가상화된 PCIe 기능 맵 엔트리를 갖는다. 호스트 컴퓨터는 디바이스에 의해 구현되는 PCIe PF 및 VF를 통해 가상화된 PCIe 액세스 기능에 액세스할 수 있다. 서비스 노드 및 PCIe 디바이스는 워크로드 패킷을 교환하여 그것에 의해 가상화된 PCIe 기능을 호스트 컴퓨터에 제공할 수 있다. 워크로드 패킷은 UDP/LTP 패킷일 수 있다. 가상화된 PCIe 기능 맵 엔트리는 PCIe 디바이스 식별자(2202), PCIe 기능 식별자(2203), 요청 타입 지시자(2204), 오프셋 어드레스(2205), 트랜잭션 엔드포인트 노드 식별자(2206), 및 트랜잭션 엔드포인트 타입(2207)을 포함할 수 있다. PCIe 디바이스 식별자(2202)는 PCIe 디바이스를 식별할 수 있고 라벨(label), MAC 어드레스, IP 어드레스, 또는 일부 다른 지시자일 수 있다. PCIe 기능 식별자(2203)는 PCIe PF 또는 VF를 식별할 수 있다. PCIe 기능 식별자(2203)는 전세계적으로 고유한 숫자/라벨일 수 있거나 기능을 구현하는 PCIe 디바이스 내에서만 고유한 숫자/라벨일 수 있다. 요청 타입 지시자(2204)는 TLP 요청 타입을 사용하거나 일부 다른 기술을 통해 결정될 수 있다. 오프셋 어드레스(2205)는 가상화된 PCIe 기능 중 어떤 양태가 액세스되고 있는지를 결정하기 위해 사용될 수 있다. 예를 들어, 하나의 오프셋은 클럭 값을 판독하기 위한 것일 수 있는 반면 상이한 오프셋은 시간대(time zone)와 같은 클럭 파라미터를 판독하기 위한 것일 수 있다. 트랜잭션 엔드포인트 노드 식별자(2206)는 서비스 노드 또는 순환 복제 체인을 나타낼 수 있다. 예를 들어, 트랜잭션 엔드포인트 노드 식별자(2206)는 서비스 노드의 IP 어드레스 또는 순환 복제 체인의 vIP일 수 있다. 트랜잭션 엔드포인트 타입(2207)은 가상화된 PCIe 기능이 실행가능한 코드로서 서비스 노드에서 구현되는지, 스마트 스위치에 설치되는 그래픽 처리 유닛(graphics processing unit; GPU)과 같은 스위치 PCIe 디바이스인지, 또는 서비스 노드 내에 구현되는 압축 회로(418)(도 4 참조)와 같은 로컬 디바이스인지를 나타낼 수 있다.
도 23은 일부 양태에 따라 서비스 노드 상의 하드웨어를 통해, 또는 스마트 스위치에 설치되는 하드웨어를 통해 실행가능한 코드로서 구현되는 가상화된 PCIe 기능을 제공하기 위해 서비스 노드에 의해 사용될 수 있는 프로세스의 하이-레벨 흐름도이다. 시작 후, 블록(2301)에서 프로세스는 워크로드 패킷을 수신할 수 있다. 블록(2302)에서, 프로세스는 워크로드 패킷에 포함되는 워크로드 캡슐을 판독할 수 있다. 일부 구현예는 단일 워크로드 캡슐에 다수의 워크로드 캡슐을 포함할 수 있다. 명확성을 위해, 예시된 프로세스는 기술 분야에 실행되는 것이 추가 워크로드 캡슐을 처리하기 위한 루프를 용이하게 구현할 수 있다는 이해와 함께 하나의 워크로드 캡슐을 처리한다. 블록(2303)에서, 프로세스는 워크로드 캡슐에 대한 트랜잭션 엔드포인트를 결정한다. 블록(2304)에서, 프로세스는 트랜잭션 엔드포인트를 위해 트랜잭션 엔드포인트 핸들러로 분기할 수 있다. 실행가능한 코드 분기는 소프트웨어 구현 가상화된 PCIe 기능을 위해 취해질 수 있다. 블록(2305)에서, 프로세스는 코드를 실행함으로써 결과를 획득할 수 있다. 실행할 특정 코드는 가상화된 PCIe 기능 맵을 사용하여 결정될 수 있다. 실행가능한 코드에 대한 입력 값은 워크로드 캡슐로부터 획득될 수 있다. 온-노드(on-node) 하드웨어 디바이스 분기는 가상화된 PCIe 기능이 서비스 노드 내의 하드웨어에 의해 구현될 때 취해질 수 있다. 블록(2306)에서, 프로세스는 온-노드 하드웨어에 액세스하는 온-노드 디바이스 드라이버를 통해 결과를 획득할 수 있다. 디바이스 드라이버 또는 하드웨어 디바이스에 대한 입력 값은 워크로드 캡슐로부터 획득될 수 있다. 온-스위치 PCIe 디바이스 분기는 가상화된 PCIe 기능이 스위치에서 PCIe 버스에 부착되는 하드웨어에 의해 구현될 때 취해질 수 있다. 블록(2307)에서, 프로세스는 새로운 TLP를 형성할 수 있다. 원본 TLP(예를 들어, 도 21의 제1 TLP(2101))로부터의 값은 워크로드 캡슐에 포함될 수 있고 워크로드 캡슐로부터 복사될 수 있다. 워크로드 캡슐로부터의 다른 값은 새로운 TLP를 생성하는 것을 돕기 위해 사용될 수 있다. 어드레스 오프셋 및 로컬 저장된 세트의 베이스 어드레스 레지스터는 새로운 TLP에서 사용할 정확한(correct) 어드레스를 결정하기 위해 사용될 수 있다. 블록(2308)에서, 새로운 TLP는 스위치의 PCIe 버스를 통해 하드웨어로 송신될 수 있다. 블록(2309)에서, 프로세스는 하드웨어로부터 응답 TLP를 수신할 수 있다. 블록(2310)에서, 프로세스는 응답 TLP로부터 결과를 획득할 수 있다.
도 19 내지 도 23은 서비스 노드(103) 및 PCIe 디바이스(620)를 사용하여 가상화된 PCIe 기능을 제공하는 양태를 예시한다. PCIe 디바이스(620)는 가상화된 PCIe 기능 액세스 포인트를 제공할 수 있는 반면 서비스 노드(103)는 가상화된 PCIe 기능을 제공한다. 그러한 구현예는 호스트 내로부터 서비스 노드로 특정의 복잡하고 비싼 동작을 분해할 수 있다. 기능을 서비스 노드로 가상화하는 것은 그러한 기능을 제공하는 비용을 낮출 수 있고 유지, 업그레이드, 및 스케일링의 증가를 제공할 수 있다.
도 19 내지 도 23을 참조하여 상술한 바와 같이, PCIe 기능은 TLP를 수신하고, TLP를 확인하고, LTP 패킷을 TLP에 기초하여 스마트 스위치 내에 위치될 수 있는 서비스 노드로 송신하는 PCIe 디바이스(620)를 사용하여 가상화될 수 있다. 가상화된 PCIe 기능의 기능성(functionality)은 서비스 노드를 통해 제공될 수 있다. 따라서, 고가용성 PCIe 기능은 서비스 노드의 서비스 상태 정보의 체인 복제를 사용하여 제공될 수 있다. 이러한 PCIe 기능 가상화는 호스트에 설치되는 전기능 smartNIC 또는 다른 하드웨어에 의해서만 제공되었을 수 있는 서비스를 특별한 목적을 위해 구축된 NIC, 서비스 노드, 및 스마트 스위치의 조합에 의해 구현되게 할 수 있다. 따라서, 고급(advanced) 기능은 여전히 각각의 서버에 대해 지원되지만 보다 자본 비용(capex) 및 운영 비용(opex) 효율적인 특별한 목적을 위해 구축된 NIC와 함께 그리고 보다 에너지 효율적인 방식으로 지원되며, 이는 그러한 컴퓨팅 시스템의 환경 영향을 감소시킬 수 있다.
도 24는 일부 양태에 따라 가상화된 NVMe 서비스를 사용하는 호스트 개시 비활성 메모리 익스프레스(nonvolatile memory express; NVMe) 트랜잭션을 예시하는 하이-레벨 다이어그램이다. PCIe 디바이스(620)는 가상화된 NVMe 액세스 기능(622)을 구현할 수 있다. 가상화된 NVMe 액세스 기능(622)은 PCIe PF 또는 VF일 수 있다. 호스트(201)에게, 가상화된 NVMe 액세스 기능(622)은 NVMe 컨트롤러인 것으로 출현할 수 있다. 이와 같이, 워크로드는 가상화된 기능을 위한 특별한 디바이스 드라이버가 필요하지 않기 때문에 디폴트 또는 사전설치된 NVMe 드라이버를 사용할 수 있다.
NVMe 컨트롤러 동작(behavior), 및 PCIe 컨트롤러에 대한 PCIe 레지스터 레이아웃의 많은 상세는 NVM Express에 의해 2021년 2월 2일에 발행된 문서 "NVM Express Management Interface, Revision 1.1c"(이하 NVMe 사양)에 명시되어 있다. NVM Express는 NVMe 하드웨어, NVMe 통신, 및 NVMe 프로토콜에 대한 표준 결정 기관(standards making body)이다. 이와 같이, NVMe 스토리지에서 실행되는 것은 NVMe 컨트롤러를 구현하고 사용하는 양태 및 NVMe의 다른 양태에 익숙하다.
가상화된 NVMe 액세스 기능(622)은 가상화된 NVMe 기능을 구현하는 서비스 노드(103)와 워크로드 패킷을 교환할 수 있다. 서비스 노드에 의해 구현되는 가상화된 NVMe 기능은 NVMe-oF(NVMe over fabric) 프로토콜을 사용하여 스토리지 영역 네트워크(storage area network; SAN)에 액세스할 수 있다. NVMe Express는 2019년 10월 22일에 "NVM Express over Fabrics, Revision 1.1"(이하 NVMe-oF 사양)을 발행하였다. NVMe-oF 사양은 NVMe/TCP, NVMe/FC(NVMe over fiber channel), 및 NVMe/RDMA와 같은 NVMe-oF 인터페이스를 구현하는 스토리지 영역 네트워크(SAN)를 처리하고 사용하는 프로토콜 및 요건을 상세화하고 명시한다. 이와 같이, 스토리지 영역 네트워크에서 실행되는 것은 NVMe 컨트롤러를 구현 및 사용하는 양태, NVMe-oF를 구현 및 사용하는 양태, 및 NVMe의 다른 양태와 익숙하다.
워크로드(2401)는 제출 큐 엔트리 SQE를 제출 큐(submission queue; SQ)(2403) 상에 배치함으로써 NVMe 트랜잭션을 개시할 수 있다. PCIe 디바이스(620)는 가상화된 NVMe 액세스 기능을 구현할 수 있고, 예를 들어, 값을 PCIe 디바이스(620)의 도어벨(doorbell) 레지스터로 기록함으로써 SQE를 통지받을 수 있다. 가상화된 NVMe 액세스 기능(622)은 SQ로부터 SQE를 획득하고 그들을 처리하여 제1 LTP 패킷(2411)과 같은 워크로드 패킷을 생성할 수 있다. SQE의 포맷은 NVMe 사양에 의해 정의된다. SQE는 커맨드 식별자, 동작 코드(operation code; opcode), 가상 네임스페이스 식별자(virtual namespace identifier; vNSID), 커맨드 파라미터, 및 버퍼 어드레스를 포함할 수 있다. NVMe 컨트롤러는 네임스페이스 식별자(NSID)를 기대한다. NSID는 물리 디바이스 상의 블록 스토리지를 식별한다. 가상화된 NVMe 액세스 기능은 vNSID를 NSID로서 사용할 수 있다. vNSID는 블록 스토리지를 식별하기 위해 PCIe 디바이스에 의해 사용되는 값일 수 있지만 그것은 SAN에 의해 사용되는 NSID에 매핑되어야만 한다. 서비스 노드는 vNSID를 사용하여 SAN 상의 블록 스토리지를 식별하는 NSID를 식별할 수 있다. 따라서, 서비스 노드는 vNSID와 NSID 사이의 매핑을 사용하여 워크로드(2401)와 SAN 사이의 연결(NVMe 스플라이스)을 함께 스플라이싱할 수 있다. 이와 같이, vNSID는 NVMe 스플라이스를 나타낼 수 있다.
가상화된 NVMe 액세스 기능(622)은 SQE(2405)를 사용하여 워크로드 패킷 예컨대 제1 LTP 패킷(2411)을 생성할 수 있다. 제1 LTP 패킷(2411)은 PCIe 디바이스 식별자, PCIe 기능 식별자, PCIe 디바이스 시퀀스 번호, PCIe 디바이스 요청 식별자, 기능 타입, 커맨드 식별자, opcode, vNSID, 커맨드 파라미터를 포함할 수 있고, 데이터를 포함할 수 있다. 제1 LTP 패킷(2411), 도 5에 도시된 LTP 패킷(520) 및 SQE(2405)와 비교할 때, 제1 LTP 패킷은 워크로드 캡슐이 NVMe 캡슐인 LTP 패킷일 수 있다는 것이 관찰될 수 있다. PCIe 디바이스 식별자 및 기능 식별자는 특정 PCIe 디바이스 및 그러한 PCIe 디바이스에 의해 구현되는 기능을 식별하기 위해 사용될 수 있다. 기능 타입은 워크로드 캡슐이 NVMe 캡슐이라는 것을 나타낸다. PCIe 디바이스 시퀀스 번호는 LTP 패킷이 손실되어서 그것이 재전송될 수 있다는 것을 결정하기 위해 사용될 수 있다. PCIe 요청 식별자는 응답이 PCIe 디바이스 요청 식별자를 통해 요청과 연관될 수 있도록 서비스 노드로 송신되는 요청을 식별하기 위해 사용될 수 있다. 커맨드 식별자, opcode, vNSID, 및 커맨드 파라미터는 SQE(2405)에서의 그것과 동일할 수 있다. SQE(2405)는 스토리지로 전달될 데이터를 지칭할 수 있는 버퍼 어드레스를 포함한다. 데이터는, 존재하는 경우, 호스트로부터 그리고 제1 LTP 패킷(2411)으로 복사될 수 있다.
서비스 노드(103)는 제1 LTP 패킷(2411)을 처리할 수 있다. 서비스 노드는 NVMe-oF 프로토콜 중 하나를 통해 SAN과의 연결을 설정할 수 있다. 이와 같이, 서비스 노드는 데이터를 LTP 패킷으로부터 SAN에 의해 제공되는 네임스페이스로 기록할 수 있고 SAN에 의해 제공되는 네임스페이스로부터 데이터를 판독할 수 있다. LTP가 NVMe 기록 요청 및 데이터를 포함하는 경우, 그 다음, 서비스 노드는 데이터를 NVMe-oF를 통해 SAN에 기록할 수 있다. LTP 요청이 NVMe 판독 요청을 포함하는 경우, 그 다음, 서비스 노드는 요청된 데이터를 NVMe-oF를 통해 페치하고 그것을 판독 응답으로서 또는 기록 요청으로서 가상화된 NVMe 액세스 기능으로 송신할 수 있다.
서비스 노드(103)는 제2 LTP 패킷(2412)을 PCIe 디바이스(620)에 송신할 수 있다. 제2 LTP 패킷은 PCIe 기능 식별자, PCIe 디바이스 시퀀스 번호, PCIe 디바이스 요청 식별자, 기능 타입, 커맨드 식별자, opcode, vNSID, 커맨드 파라미터를 포함할 수 있고, 데이터를 포함할 수 있다. 제2 LTP 패킷(2412)은 패킷이 특정 PCIe 디바이스에 송신될 수 있고 따라서 PCIe 디바이스 식별자가 필요하지 않을 수 있기 때문에 PCIe 디바이스 식별자 없이 도시된다. 제2 LTP 패킷(2412)은 서비스 노드로부터 PCIe 디바이스로 LTP 패킷의 신뢰가능한 전달을 보장하는 것을 돕기 위해 사용될 수 있는 서비스 노드 시퀀스 식별자를 포함할 수 있다. 통신 네트워크에서 실행되는 것은 시퀀스 번호를 사용하여 신뢰가능한 전달을 보장하는 것과 익숙하다. 제2 LTP 패킷(2412)을 완료 큐 요소(CQE)(2406)에 비교하여, 제2 LTP 패킷(2412)이 CQE를 포함하는 NVMe 캡슐을 운반하는 LTP 패킷이라는 점을 알 수 있다. CQE의 콘텐츠 및 포맷은 NVMe 사양에서 주어진다. 제2 LTP 패킷(2412)은 PCIe 디바이스 요청 식별자를 포함하는 것으로 도시되며, 이와 같이, 제2 LTP 패킷은 그러한 PCIe 디바이스 요청 식별자를 갖는 요청에 응답한다. LTP 패킷 내의 커맨드 식별자 및 다른 데이터는 또한 2 LTP 패킷(2412)이 응답이라는 것을 나타낼 수 있다. PCIe 디바이스(620)는 제2 LTP 패킷(2412)을 수신하고 그것을 사용하여 CQE(2406)를 생성할 수 있다. 그 다음, CQE(2406)는 SQ와 연관되는 NVMe 완료 큐(completion queue; CQ) 상에 배치될 수 있다. NVMe 드라이버는 CQE를 사용하여 SQE의 결과를 결정할 수 있다.
도 25는 일부 양태에 따라 가상화된 NVMe 서비스를 제공하는 서비스 노드의 하이-레벨 다이어그램이다. 도 24는 PCIe 디바이스을 중심으로 한 뷰를 제공한 반면 도 25는 서비스 노드를 중심으로 한 뷰를 제공한다. 서비스 노드(103)는 제1 LTP 패킷(2411)을 수신할 수 있다. 기능 타입은 LTP가 NVMe 캡슐을 운반한다는 것을 나타낸다. 서비스 노드(103)는 LTP 패킷 콘텐츠 내의 PCIe 디바이스 식별자 및 vNSID 그리고 네임스페이스 맵(2501)을 사용하여 특정 SAN, SAN의 타입, 및 그러한 SAN에 의해 제공되는 스토리지의 블록에 대한 식별자를 식별할 수 있다. 네임스페이스 맵 엔트리는 네임스페이스 매핑을 나타내고 PCIe 디바이스 식별자, vNSID, SAN 타입(2502), SAN 식별자(2503), 및 SAN 특정 스토리지 식별자(2504)를 포함할 수 있다. 서비스 노드(103)는 다양한 전송 및 전송 프로토콜을 사용하여 SAN에 액세스하기 위해 서비스 노드 스토리지 인터페이스(2505)를 사용할 수 있으며, 이 중 다수가 예시된다. 예시된 전송 프로토콜은 NVMe/FC, 광섬유 채널(fiber channel; FC), FCoE(fiber channel over ethernet), NVMe/TCP, NVMe/RDMA, RDMA, 및 ROCEv2를 포함한다. 이러한 전송 프로토콜 각각은 기술 분야에 잘 알려져 있고 오픈 소스 소프트웨어를 포함하는 소프트웨어는 이러한 전송 프로토콜을 구현하기 위해 이용가능하다. 예시된 전송은 광섬유 채널, 이더넷, 및 InfiniBand이다. 광섬유 채널 또는 이더넷은 광섬유 채널/FCoE 인에이블된 SAN(2506)에 액세스하기 위해 사용될 수 있다. 이더넷 또는 InfiniBand는 RDMA/ROCEv2 인에이블된 SAN(2510)에 액세스하기 위해 사용될 수 있다. 이더넷은 NVMe/TCP 인에이블된 SAN에 액세스하기 위해 사용될 수 있다. 이러한 전송 각각은 기술 분야에 잘 알려져 있고 널리 이용가능하다. 서비스 노드(103)는 또한 다른 전송 및 전송 프로토콜을 사용할 수 있다. SAN 타입(2502)은 SAN 식별자(2503)에 의해 식별되는 SAN을 액세스하기 위해 사용할 전송 및 전송 프로토콜을 포함할 수 있다. SAN은 스토리지의 상이한 블록에 대한 액세스를 제공할 수 있고 SAN 특정 스토리지 식별자를 사용하여 스토리지의 블록을 식별할 수 있다. 예를 들어, NVMe는 스토리지의 그러한 블록을 네임스페이스로 지칭하고 네임스페이스 식별자(namespace identifier; NSID)를 사용하여 스토리지의 블록을 식별한다.
SAN, SAN 타입, 및 SAN의 스토리지 블록을 식별하기 위해 PCIe 디바이스 식별자 및 vNSID를 사용한, 서비스 노드는 SAN에 액세스하여 스토리지 블록으로부터의 데이터를 판독하거나 데이터를 스토리지 블록에 기록할 수 있다. 네임스페이스 맵(2501) 내의 제1 네임스페이스 매핑을 사용하는, 식별된 SAN은 NVMe/TCP 인에이블된 SAN(2509)일 수 있고 스토리지 블록은 NSID "NSID 1"을 가질 수 있다. ("NSID 1"은 명확성을 위해 여기에 사용되며, 실제 NSID는 NVMe 사양 및 NVMe-oF 사양에 따라 상이한 포맷을 갖는다). 서비스 노드는 제1 NVMe/TCP 패킷(2507)을 IP 어드레스 "컨트롤러 IP"를 갖는 NVMe/TCP 인에이블된 SAN(2509)으로 송신할 수 있다. 제1 NVMe/TCP 패킷(2507)은 NVMe 요청 캡슐(2508)을 포함할 수 있다. NVMe/TCP 요청 캡슐 및 응답 캡슐의 포맷 및 콘텐츠는 NVMe 사양 및 NVMe-oF 사양에 명시된다. NVMe 요청 캡슐(2508)은 SQE(2520)를 포함한다. SAN으로 송신되는 SQE(2520)는 워크로드에 제출되는 SQE(2405)와 동일하지 않다. SAN(2509)으로 송신되는 SQE(2520)는 SAN(2509)이 스토리지 블록을 식별하기 위해 사용할 수 있는 NSID, "NSID 1"을 갖는다. SAN(2509)으로 송신되는 SQE(2520) 내의 커맨드 식별자는 서비스 노드와 SAN 사이의 트랜잭션을 식별하는 커맨드 식별자를 갖는다. 호스트(201)에 의해 제출되는 SQE(2405)는 호스트(201)와 PCIe 디바이스(620) 사이의 트랜잭션을 식별한다. PCIe 디바이스(620)는 호스트(201)와 PCIe 디바이스 사이의 트랜잭션에 대한 커맨드 식별자와 연관하여 PCIe 디바이스 요청 식별자를 저장할 수 있다. 서비스 노드(103)는 서비스 노드(103)와 SAN(2509) 사이의 트랜잭션에 대한 커맨드 식별자와 연관하여 PCIe 디바이스 요청 식별자를 저장할 수 있다. 이와 같이, 2개의 트랜잭션은 LTP 패킷(2411, 2412) 및 PCIe 디바이스 요청 식별자를 통해 함께 스플라이싱될 수 있다.
SAN(2509)은 제2 NVMe/TCP 패킷(2511)을 서비스 노드로 송신할 수 있다. 제2 NVMe/TCP 패킷(2511)은 제1 NVMe/TCP 패킷(2507)에 대한 응답할 수 있다. 제2 NVMe/TCP 패킷(2511)은 CQE(2521)를 포함할 수 있는 NVMe 응답 캡슐(2512)을 포함할 수 있다. CQE(2521) 내의 커맨드 식별자는 CQE가 SQE에 응답할 때 SQE(2520) 내의 커맨드 식별자와 동일하다. SQE(2520)가 판독 요청인 경우, NVMe 응답 캡슐(2512)은 요청된 데이터를 포함할 수 있다. SQE(2520)가 기록 요청인 경우, NVMe 응답 캡슐(2512)은 기록 요청의 성공 또는 실패를 나타낼 수 있다. NVMe-oF 사양은 NVMe 캡슐, 예컨대 NVMe 요청 캡슐 및 NVMe 응답 캡슐의 콘텐츠 및 포맷을 명시한다. 서비스 노드는 NVMe 응답 캡슐(2512)을 사용하여 제2 LTP 패킷(2412)을 생성할 수 있다.
도 26은 일부 양태에 따라 가상화된 NVMe 서비스를 제공하는 순환 복제 체인(908)(도 9 참조) 내의 서비스 노드의 하이-레벨 다이어그램이다. 제1 UDP/LTP 패킷(2601)은 순환 복제 체인의 vIP인 목적지 IP를 가질 수 있다. 로드 밸런서(907)는 제1 LTP/UDP 패킷(2602)을 수신하고 그것을 선택된 서비스 노드(910)로 송신할 수 있다. 선택된 서비스 노드의 서비스 상태 정보(911)는 NVMe 스플라이싱 데이터(2605) 예컨대 네임스페이스 맵(2501)을 포함할 수 있다. 제1 LTP/UDP 패킷(2601)을 수신 시, 선택된 서비스 노드는 네임스페이스 맵(2501)에 새로운 네임스페이스 맵 엔트리(2604)를 생성할 수 있거나 일부 다른 방식으로 서비스 상태 정보(911)를 변경할 수 있다. 이와 같이, 서비스 상태 정보(911)는 변경되었고 선택 서비스 노드(910)는 동기 패킷(2606)을 그것의 다운스트림 피어로 송신한다. 결국, 서비스 노드의 업스트림 피어는 새로운 네임스페이스 맵 엔트리(2604)를 선택된 서비스 노드로 송신할 수 있다.
도 27은 일부 양태에 따라 PCIe 디바이스에 의해 저장될 수 있는 예시적 서비스 노드 데이터(2407)를 예시하는 다이어그램이다. 서비스 노드 데이터(2407)는 서비스 어드레스(2408)를 포함할 수 있고 네임스페이스 맵(2409)을 포함할 수 있다. 서비스 어드레스는 가상화된 NVMe 서비스를 제공할 수 있는 서비스 노드 또는 순환 복제 체인을 나타낼 수 있다. 네임스페이스 맵(2409)은 서비스 노드에 의해 제공될 수 있다. 서비스 노드 데이터는 요청 식별자 맵(2410)에 대한 커맨드 식별자를 포함할 수 있다. 요청 식별자 맵(2410)에 대한 커맨드 식별자 내의 엔트리는 커맨드 식별자, 요청 식별자, 송신 큐 헤드 포인트, 및 버퍼 어드레스를 연관시킬 수 있다. 커맨드 식별자, 송신 큐 헤드 포인트, 및 버퍼 어드레스는 호스트에 의해 제출되는 SQE로부터 획득될 수 있다. 요청 식별자(예를 들어, LTP 패킷(2411, 2412) 내의 PCIe 디바이스 요청 식별자)는 PCIe 디바이스(620)와 서비스 노드(103) 사이의 트랜잭션을 식별할 수 있다.
도 28은 일부 양태에 따라 요청 식별자 맵(2801)에 대한 예시적 커맨드 식별자를 예시하는 다이어그램이다. 요청 식별자 맵(2801)에 대한 커맨드 식별자는 PCIe 디바이스 식별자, PCIe 기능 식별자, (호스트 SQE로부터의)커맨드 식별자, 요청 식별자, 다른 커맨드 식별자(SQE-SAN), (호스트 SQE로부터의)송신 큐 헤드 포인트, 및 (호스트 SQE로부터의)버퍼 어드레스를 연관시키는 엔트리를 가질 수 있다. "호스트 SQE로부터"로 주석이 달린 엔트리 필드는 그러한 값이 LTP 패킷에 포함되고 서비스 노드에 저장되는 구현예에 포함될 수 있다. 그러한 구현예에서, 서비스 노드로부터 PCIe 디바이스로 송신되는 LTP 패킷은 CQE를 생성하기 위해 PCIe 디바이스에 의해 요구되는 모든 정보를 포함할 수 있다.
도 29a, 도 29b, 및 도 29c는 일부 양태에 따라 고가용성 액세스를 스토리지 영역 네트워크(storage area network; SAN)에 제공하는 하이-레벨 다이어그램이다.
도 29a는 일부 양태에 따라 영구 스토리지에 고가용성을 제공하기 위해 스토리지 복제 체인(2904) 및 2개의 스마트 스위치를 사용하는 하이-레벨 다이어그램이다. 영구 스토리지는 SAN A(2902)를 통해 액세스될 수 있다. PCIe 디바이스(620)는 2개의 포트를 가질 수 있고 포트 중 하나를 사용하여 스토리지 복제 체인(2904)을 통해 SAN A(2902)에 액세스할 수 있다. 스토리지 복제 체인(2904)은 제1 스마트 스위치(1402) 및 제2 스마트 스위치(1403)에 있는 서비스 노드(103)를 포함할 수 있다. 이와 같이, 서버(104)는 스마트 스위치 중 하나가 고장, 유지, 업그레이드 등으로 인해 기능하고 있지 않을 때 SAN A(2902)에 액세스할 수 있다. 소프트웨어 정의 네트워킹(software defined networking; SDN) 복제 체인(2905)은 또한 제1 스마트 스위치(1402) 및 제2 스마트 스위치(1403)에 있는 서비스 노드(103)를 포함할 수 있다. SDN 복제 체인 내의 서비스 노드는 NAT, 방화벽, 처리 TCP 및 UDP 패킷 등과 같은 SDN 서비스를 제공할 수 있다. 단일 서비스 노드는 스토리지 복제 체인, SDN 복제 체인, 가상화된 PCI 서비스 및 기능을 제공하는 복제 체인 등과 같은 다양한 복제 체인 내에서 구성될 수 있다.
도 29b는 일부 양태에 따라 영구 스토리지에 고가용성을 제공하기 위해 서비스 노드(103) 및 2개의 스마트 스위치를 사용하는 하이-레벨 다이어그램이다. 다수의 SAN 또는 SAN 액세스 노드는 데이터에 대한 고가용성 액세스를 제공하도록 구성될 수 있다. 예를 들어, SAN A 및 SAN B는 영구 스토리지의 네임스페이스에 대한 액세스를 제공할 수 있다. 네임스페이스 자체는 네임스페이스 내의 데이터가 SAN A(2902) 또는 SAN B(2903)을 통해 액세스될 때 일관되는 일부 방식으로 미러링되거나 복제될 수 있다. SAN에서 실행되는 것은 네임스페이스에 대한 일관된 액세스를 제공하는 것에 익숙하다. PCIe 디바이스(620)는 2개의 포트를 갖는다. 서버(104)는 PCIe 디바이스 포트 중 하나를 사용하여 제1 스마트 스위치(1402) 내의 서비스 노드(103)를 통해 SAN A(2902)에 액세스할 수 있다. 서버(104)는 PCIe 디바이스 포트의 다른 것을 사용하여 제2 스마트 스위치(1403) 내의 서비스 노드(103)를 통해 SAN B(2903)에 액세스할 수 있다. 이와 같이, 서버는 스마트 스위치가 기능하고 있지 않을 때 네임스페이스에 여전히 액세스한다. PCIe 디바이스(620)는 NVMe 밸런싱 정책(2901)을 가질 수 있다. 예를 들어, PCIe 디바이스는 액티브-패시브 밸런싱 정책을 사용할 수 있을 것이며 여기서 LTP 패킷은 액티브 스마트 스위치, 예컨대 제1 스마트 스위치(1402)로 송신된다. 다른 스마트 스위치, 대기 또는 백업 스마트 스위치는 유휴(idle)일 수 있거나 다른 디바이스에 대한 다른 트래픽을 처리할 수 있다. 액티브 스마트 스위치가 고장이거나 서비스에서 반출되는 경우, 그 다음, 패시브 스마트 스위치는 액티브 스마트 스위치가 될 수 있다. 고가용성 네트워킹에서 실행되는 것은 액티브-패시브 밸런싱 정책 뿐만 아니라 많은 다른 밸런싱 정책 예컨대 액티브-액티브 등과 익숙하다.
도 29c는 일부 양태에 따라 영구 스토리지에 고가용성 액세스를 제공하기 위해 다수의 복제 체인을 사용하는 하이-레벨 다이어그램이다. 제1 스마트 스위치(1402) 및 제2 스마트 스위치(1403)는 서비스 노드(103)를 포함한다. 제1 복제 체인(1404)은 두 스마트 스위치의 서비스 노드를 포함한다. 제2 복제 체인(1405)은 또한 두 스마트 스위치의 서비스 노드를 포함한다. PCIe 디바이스(620)는 NVMe 밸런싱 정책(2901)을 가질 수 있다. 예를 들어, PCIe 디바이스는 액티브-패시브 밸런싱 정책을 사용할 수 있을 것이며 여기서 LTP 패킷은 액티브 복제 체인으로 칭해지는 복제 체인 중 하나로 송신된다. 다른 복제 체인, 대기 또는 백업 복제 체인은 유휴(idle)일 수 있거나 다른 디바이스에 대한 다른 트래픽을 처리할 수 있다. 액티브 체인이 고장인 경우, 패시브 복제 체인은 액티브 복제 체인이 될 수 있다. 고가용성 네트워킹에서 실행되는 것은 액티브-패시브 밸런싱 정책 뿐만 아니라 많은 다른 밸런싱 정책과 익숙하다. SAN이 다수의 액세스 노드를 갖는 것은 공통적이다. 제1 복제 체인(1404)은 SAN A(2902)에 연결된다. 제2 복제 체인(1405)은 SAN B(2903)에 연결된다.
도 24 내지 도 29c는 가상화된 NVMe 서비스 및 기능을 제공하기 위해 서비스 노드(103) 및 PCIe 디바이스(620)를 사용하는 양태를 예시한다. PCIe 디바이스(620)는 가상화된 NVMe 서비스 및 기능 액세스 포인트를 제공할 수 있는 반면 서비스 노드(103)는 가상화된 NVMe 서비스 및 기능을 제공한다. 그러한 구현예는 호스트 내로부터 서비스 노드로 특정의 복잡하고 비싼 동작을 분해할 수 있다. 예를 들어, NVMe/TCP는 smartNIC에서 상당한 자원을 소비한다. NVMe/TCP의 자원 소비 양태를 서비스 노드로 이동시키는 것은 NVMe/TCP 능력을 여전히 제공하면서 단순화된 PCIe 디바이스(620)를 허용한다. 기능을 서비스 노드에 가상화하는 것은 그러한 기능을 제공하는 비용을 낮출 수 있고 유지, 업그레이드, 및 스케일링에서의 증가를 제공할 수 있다.
도 24 내지 도 29c를 참조하여 상술한 바와 같이, NVMe 서비스 및 기능은 호스트 상의 SQ로부터 SQE를 판독하고, LTP 요청 패킷을 SQE에 기초하여 스마트 스위치 내에 위치될 수 있는 서비스 노드로 송신하는 PCIe 디바이스(620)를 사용하여 가상화될 수 있다. 서비스 노드는 호스트 대신에 SAN과 트랜잭션을 수행하고 트랜잭션 결과를 LTP 응답 패킷으로 PCIe 디바이스로 송신할 수 있다. PCIe 디바이스는 LTP 응답 패킷에 기초하여 CQE를 생성하고 SQ와 연관되는 호스트 상의 CQ 상으로 CQE를 인큐(enqueue)할 수 있다. SAN에 의해 발생되는 트랜잭션은 호스트로부터 판독하거나 이에 기록하기 위한 유사한 프로토콜을 따를 수 있다. 고가용성 NVMe 서비스 및 기능은 서비스 노드의 서비스 상태 정보의 체인 복제를 사용하여 제공될 수 있다. 고가용성은 또한 복제된 또는 미러링된 SAN에 각각 연결되는 다수의 스마트 스위치를 사용하여 제공될 수 있다. 이러한 NVMe 기능 가상화는 전기능 smartNIC에 의해서만 제공되었을 수 있었던 서비스를 특별한 목적을 위해 구축된 NIC 및 서비스 노드의 조합에 의해 구현될 수 있게 한다. 따라서, 고급(advanced) 기능은 여전히 각각의 서버에 대해 지원되지만 보다 자본 비용(capex) 및 운영 비용(opex) 효율적인 특별한 목적을 위해 구축된 NIC와 함께 그리고 보다 에너지 효율적인 방식으로 지원되며, 이는 그러한 컴퓨팅 시스템의 환경 영향을 감소시킬 수 있다.
도 30은 일부 양태에 따라 패킷 처리 서비스를 제공하는 순환 복제 체인 내의 서비스 노드의 하이-레벨 다이어그램이다. 서비스 노드는 네트워크 트래픽 흐름을 위한 라우팅, 스위칭, 방화벽 등과 같은 네트워크 서비스를 제공할 수 있다. 이와 같이, 서비스 노드는 로컬 흐름 테이블(3020) 및 로컬 세션 테이블(3021)을 가질 수 있다. 컴퓨터 스위칭 및 라우팅 하드웨어에서 실행되는 것은 흐름 테이블 및 세션 테이블에 익숙하다. 흐름 테이블은 패킷에 적용될 특정 처리를 식별하기 위해 사용될 수 있다. 패킷을 수신 시, 서비스 노드는 패킷의 헤더 정보(소스 IP, 소스 포트, 목적지 IP, 목적지 포트, 및 프로토콜의 패킷 5-투플(tuple))을 사용하여 흐름 식별자를 계산할 수 있다. 그 다음, 서비스 노드는 그러한 흐름 식별자를 갖는 엔트리에 대한 흐름 테이블을 체크할 수 있다. "흐름 미스(flow miss)"는 흐름 테이블이 그러한 엔트리를 갖지 않을 때 발생한다. "흐름 히트(flow hit)"는 흐름 테이블이 흐름 식별자에 대한 엔트리를 가질 때 발생한다. 흐름 히트의 경우, 서비스 노드는 흐름 테이블 엔트리에 의해 지향된 바와 같이 패킷을 처리한다. 흐름 미스의 경우, 서비스 노드는 패킷이 처리될 방법을 결정하고 패킷에 대해 흐름 테이블에 새로운 엔트리를 생성할 수 있다. 세션은 전형적으로 2개의 흐름, 순방향 흐름 및 역방향 흐름으로 구성된다. 두 흐름은 흐름 테이블 엔트리를 가질 수 있다. 세션 테이블은 서비스 노드에 의해 처리되는 액티브 세션에 대한 엔트리를 가질 수 있다. 세션 테이블은 세션의 상태를 추적하기 위해 사용될 수 있다.
서비스 노드의 서비스 상태 정보(911)는 로컬 흐름 테이블(3020) 및 로컬 세션 테이블(3021)을 포함할 수 있다. 흐름 미스가 발생할 때, 새로운 흐름 테이블 엔트리가 생성될 수 있고 흐름 동기 패킷(3007)은 순환 복제 체인(908) 내의 다운스트림 피어로 송신될 수 있다. 흐름 동기 패킷은 흐름 미스를 야기한 전체 패킷을 포함할 수 있거나 새로운 흐름에 대한 흐름 테이블 엔트리를 생성하기 위해 사용될 수 있는 패킷 헤더 정보(3004)만을 포함할 수 있다. 상이한 서비스 노드 내의 흐름 테이블은 흐름 테이블의 구현 상세로 인해 동일할 것 같지 않다. 이와 같이, 각각의 피어는 흐름 테이블 복제를 위해 패킷 헤더 정보(3004)를 사용할 수 있다. 흐름 동기 패킷을 생성하는 서비스 노드는 흐름 동기 패킷을 그것의 다운스트림 피어로 송신할 수 있고 나중에 그것의 업스트림 피어로부터 흐름 동기 패킷(3003) 내의 패킷 헤더 정보를 수신할 수 있다.
세션 테이블은 세션의 상태를 추적할 수 있다. 예를 들어, 유명하게 잘-알려진 TCP 프로토콜은 다수의 상태(예를 들어, LISTEN, SYN-SENT, SYN- RECEIVED, ESTABLISHED, FIN-WAIT-1, FIN-WAIT-2, CLOSE-WAIT, CLOSING, LAST-ACK, 및 TIME-WAIT)에 있을 수 있는 세션을 갖는다. 서비스 노드는 세션이 상태를 변경하거나 세션이 변경될 때 세션 동기 패킷(3009)을 그것의 다운스트림 피어로 송신할 수 있다. 세션 동기 패킷(3009)은 세션의 새로운 상태를 나타내는 세션 상태 지시자(3006)를 포함할 수 있다. 이와 같이, 각각의 피어는 세션 상태 지시자(3006)를 사용하여 세션 테이블을 복제할 수 있다. 세션 동기 패킷을 생성하는 서비스 노드는 세션 동기 패킷을 그것의 다운스트림 피어로 송신할 수 있고 나중에 그것의 업스트림 피어로부터 세션 동기 패킷(3005) 내의 동일한 세션 상태 지시자(3006)를 수신할 수 있다.
내부 디바이스(3001)(로컬 네트워크 상의 호스트 및 PCIe 디바이스)로부터의 TCP 및 UDP 패킷은 로드 밸런서(907)에 의해 수신될 수 있다. 외부 디바이스(3002)(공용 네트워크 상의 호스트 및 PCIe 디바이스)로부터의 TCP 및 UDP 패킷은 또한 로드 밸런서(907)에 의해 수신될 수 있다. 로드 밸런서(907)는 각각의 패킷에 대한 선택된 서비스 노드(910)를 선택한다. 패킷이 선택된 서비스 노드의 선택된 상태 정보(911)에 대한 변경을 야기한 경우, 그 다음, 선택된 서비스 노드는 흐름 동기 패킷 또는 세션 동기 패킷을 그것의 다운스트림 피어로 송신할 수 있다. 선택된 서비스 노드는 패킷을 처리하고 그 다음, 패킷을 그것의 목적지로 송신할 수 있다. 이와 같이, 서비스 노드는 TCP 및 UDP 패킷을 내부 디바이스(3011)로 송신할 수 있고 TCP 및 UDP 패킷을 외부 디바이스(3012)로 송신할 수 있다.
네트워크 트래픽 흐름의 본성으로 인해, 서비스 노드는 모든 피어가 관련된 흐름 동기 패킷(3003) 또는 관련된 세션 동기 패킷(3005)을 순환 복제 체인을 통해 포워딩하도록 대기하는 것 없이 패킷을 처리할 수 있다. 2개의 피어는 새로운 흐름에 대한 패킷을 수신하고, 흐름 동기 패킷을 생성하고, 새로운 흐름에 대한 패킷을 처리할 수 있다. 공지된 흐름에 대한 흐름 동기 패킷을 수신 시, 피어는 흐름 동기 패킷을 드롭할 수 있거나 그것을 복제 체인 아래로 포워딩할 수 있다. 네트워크 트래픽은 여전히 적절하게 처리된다. 동일한 관찰은 세션 동기 패킷 및 세션 테이블 엔트리에 적용된다.
도 31은 일부 양태에 따라 흐름 테이블 엔트리 및 세션 테이블 엔트리를 추가하는 하이-레벨 다이어그램이다. TCP 또는 UDP 패킷의 패킷 헤더 정보(3101)는 흐름 식별자를 계산하기 위해 사용될 수 있다. 흐름 미스는 새로운 흐름 테이블 엔트리가 생성되고 로컬 흐름 테이블(3020)에 저장되는 것을 약기하고, 패킷 헤더 정보(3101)가 흐름 동기 패킷(3104)에서 다운스트림 피어로 송신되는 것을 야기하고, 새로운 세션 테이블 엔트리(3105)의 생성을 야기한다. 세션 테이블 갱신기(updater)(3106)는 새로운 세션 테이블 엔트리를 로컬 세션 테이블(3021)에 저장할 수 있고 세션 동기 패킷을 다운스트림 피어로 송신할 수 있다. 세션 동기 패킷은 피어 서비스 노드가 적절한 세션 테이블 엔트리를 추가할 수 있도록 전체 패킷 또는 패킷 헤더 정보(3101)를 포함할 수 있다. 새로운 세션에 대한 세션 상태 변경 지시자는 그것이 새로운 세션이라는 것을 나타낼 수 있다. 흐름 히트는 로컬 흐름 테이블(3020)에 대한 변경을 야기하지 않지만, 연관된 패킷을 처리하는 것은 세션 상태에 변경을 야기할 수 있다. 세션 상태가 변경되는 경우, 로컬 세션 테이블은 갱신될 수 있고 세션 동기 패킷은 피어 노드로 송신될 수 있다.
도 32는 일부 양태에 따라 세션 테이블 정보를 집계하는 하이-레벨 다이어그램이다. 세션 상태 테이블은 종종 역방향 흐름에서의 패킷의 수 및 순방향 흐름에서의 패킷의 수와 같은 흐름에 대한 통계를 유지하기 위해 사용된다. 세션 상태는 통계가 갱신될 때 변경되지 않을 수 있다. 이와 같이, 각각의 서비스 노드는 서비스 노드가 처리한 그러한 패킷에 대한 통계만을 갖는다. 따라서, 통계는 집계된 세션 테이블(3202)을 갖는 집계자(3201)가 순환 복제 체인에 의해 처리되는 모든 패킷에 기초한 통계를 갖도록 집계될 수 있다. 수집될 수 있는 통계는 패킷 카운트, 바이트 카운트, 무효 패킷의 수 등을 포함한다. 집계된 통계는 네트워크(로컬 및 공용 둘다), 워크로드, 서비스 노드, PCIe 디바이스, SAN, 및 다른 디바이스의 성능을 모니터링하기 위해 사용될 수 있다.
도 33은 일부 양태에 따라 네트워크 트래픽을 처리하고 흐름 테이블 및 세션 테이블(3300)의 체인 복제를 위해 서비스 노드에 의해 사용될 수 있는 프로세스의 하이-레벨 흐름도이다. 시작 후, 블록(3301)에서 패킷이 수신된다. 블록(3302)에서, 흐름 식별자는 패킷의 헤더 정보로부터 계산될 수 있다. 블록(3303)에서, 흐름 테이블은 흐름 식별자를 갖는 엔트리에 대해 체크될 수 있다. 결정 포인트(3304)에서, 프로세스는 매칭 흐름 테이블 엔트리(흐름 히트 또는 흐름 미스)이 있는지를 체크한다. 흐름 미스가 없으면, 그 다음, 블록(3305)에서 패킷은 처리될 수 있다. 블록(3305)에서, 패킷은 그것의 목적지로 즉시 포워딩될 수 있거나 그것은 복제를 기다리는 동안 지연될 수 있다. 예를 들어, 세션은 종종 순방향 흐름 및 역방향 흐름을 갖는다. 서비스 노드는 순방향 흐름이 새로운 세션을 개시하는 것을 허용하도록 구성될 수 있는 반면 역방향 흐름은 새로운 세션을 개시하도록 허용되지 않는다. 순방향 흐름은 내부 네트워크로부터 외부 네트워크로 흐르는 패킷일 수 있다. 역방향 흐름은 외부 네트워크로부터 내부 네트워크로 흐르는 패킷일 수 있다. 이와 같이, 모든 서비스 노드는 역방향 흐름 패킷이 수신되기 전에 새로운 세션에 대한 흐름 테이블 엔트리를 가져야만 하며 그렇지 않으면 서비스 노드가 새로운 세션에 대한 흐름 테이블 엔트리를 드롭할 수 있기 때문이다. 역방향 흐름이 새로운 세션을 설정하도록 허용되는 경우, 그 다음, 패킷은 즉시 포워딩될 수 있다.
블록(3306)에서, 세션 테이블은 갱신될 수 있다. 결정 포인트(3307)에서, 프로세스는 세션 상태 변경이 있는지 여부를 결정한다. 그렇지 않으면, 프로세스는 완료된다. 그렇지 않으면, 블록(3308)에서 세션 동기 패킷이 생성된다. 블록(3309)에서 세션 동기 패킷은 프로세스가 완료되기 전에 다운스트림 피어로 송신된다. 결정 포인트(3304)에서 흐름 미스가 있는 경우, 프로세스는 블록(3310)으로 이동한다. 블록(3310)에서, 흐름 테이블은 새로운 흐름 엔트리를 포함하기 위해 갱신된다. 블록(3311)에서, 흐름 동기 패킷이 생성된다. 블록(3312)에서, 흐름 동기 패킷은 프로세스가 블록(3305)으로 이동하기 전에 다운스트림 피어로 송신된다. 프로세스가 완료된 후, 패킷은 처리되었고 서비스 노드의 다운스트림 피어는 패킷을 처리함으로써 야기되는 임의의 서비스 상태 변경을 통보받았다. 도 34 및 도 35는 다운스트림 피어 및 다른 피어 노드가 그러한 변경된 서비스 상태 정보의 체인 복제를 위해 사용할 수 있는 예시적 프로세스를 제공한다.
도 34는 일부 양태에 따라 흐름 동기 패킷을 처리하고 흐름 테이블(3400)의 체인 복제를 위해 서비스 노드에 의해 사용될 수 있는 프로세스의 하이-레벨 흐름도이다. 시작 후, 블록(3401)에서 흐름 동기 패킷이 수신된다. 결정 블록(3402)에서, 프로세스는 흐름 동기 패킷이 자체 발생되었는지 여부를 결정한다. 서비스 노드가 그것의 다운스트림 피어로 송신한 동기 패킷은 자체 발생된 패킷이다. 순환 복제 체인에서, 서비스 노드는 자체 발생된 패킷이 복제 체인을 통과한 후 그것의 업스트림 피어로부터 자체 발생된 패킷을 수신한다. 도 33의 블록(3305)에서, 패킷은 복제를 기다리는 동안 지연되었다. 블록(3409)에서, 그러한 지연된 패킷은 그것의 목적지로 포워딩될 수 있다. 흐름 동기 패킷이 자체 발생되지 않은 경우, 그 다음, 블록(3403)에서 흐름 식별자는 패킷 헤더 정보로부터 계산될 수 있다. 블록(3404)에서, 흐름 테이블은 흐름 식별자에 대해 체크된다. 블록(3405)에서, 프로세스는 흐름 미스가 발생하였는지 여부를 결정한다. 흐름 미스가 없는 경우, 그 다음, 블록(3408)에서 흐름 동기 패킷은 프로세스가 완료되기 전에 다운스트림 피어로 포워딩될 수 있다. 일부 구현예는 블록(3408)에서 포워딩하는 대신에 패킷을 드롭할 수 있다. 흐름 미스가 있는 경우, 그 다음, 블록(3406)에서 프로세스는 프로세스가 블록(3408)으로 계속되기 전에 새로운 흐름 테이블 엔트리로 흐름 테이블을 갱신할 수 있다.
흐름 미스는 서비스 노드가 패킷을 수신하고 그러한 패킷에 대한 흐름 테이블 엔트리를 갖지 않을 때 발생한다. 도 33에서, 흐름 미스는 서비스 노드가 흐름 동기 패킷을 그것의 다운스트림 피어로 송신하게 한다. 도 34에서, 흐름 동기 패킷은 복제 체인을 통과하였고 이것을 발생시킨 서비스 노드에 의해 수신된다. 자체 발생된 흐름 동기 팩(pack)을 수신하는 것은 서비스 노드에게 전체 복제 체인이 흐름 동기 패킷을 수신하였다는 것을 나타낸다. 흐름 동기 패킷은 흐름 미스를 야기한 패킷으로부터 헤더 정보(예를 들어, L2, L3, 및 L4 헤더 필드)만을 포함할 수 있다. 대안적으로, 흐름 동기 패킷은 흐름 미스를 야기한 전체 패킷일 수 있다. 그러한 경우에서, 블록(3409)에서, (흐름 미스를 야기한 패킷과 동일한) 흐름 동기 패킷은 그것의 목적지로 포워딩될 수 있다. 더 다른 대안에서, 여기서 제1 서비스 노드로 칭해지는 서비스 노드는 흐름 미스를 야기하는 전체 패킷을 흐름 동기 패킷으로서 그것의 다운스트림 피어로 송신할 수 있다. 흐름 동기 패킷을 그것의 업스트림 피어로부터 수신한 후, 제1 서비스 노드는 흐름 동기 패킷을 처리하고(도 33은 블록(3305)에서 패킷을 더 빨리 처리함) 즉시 그것을 그 목적지로 송신할 수 있다. 더 다른 대안에서, 업스트림 피어는 흐름 동기 패킷을 흐름 동기 패킷을 발생시킨 서비스 노드로 송신하는 대신에 (흐름 미스를 야기한 패킷과 동일한) 흐름 동기 패킷을 처리하고 포워딩할 수 있다.
도 35는 일부 양태에 따라 세션 동기 패킷을 처리하고 세션 테이블(3500)의 체인 복제를 위해 서비스 노드에 의해 사용될 수 있는 프로세스의 하이-레벨 흐름도이다. 시작 후, 블록(3501)에서 세션 동기 패킷이 수신된다. 블록(3502)에서, 프로세스는 세션 동기 패킷이 자체 발생된 패킷인지 여부를 결정한다. 블록(3506)에서, 자체 발생된 패킷은 프로세스가 완료되기 전에 드롭된다. 패킷이 자체 발생되지 않은 경우, 그 다음, 블록(3503)에서 프로세스는 세션 동기 패킷에 의해 지시되는 바와 같이 세션 테이블을 갱신할 수 있다(예를 들어, 세션 상태 변경, 세션 테이블 엔트리 추가, 세션 테이블 엔트리 삭제 등). 블록(3504)에서, 세션 동기 패킷은 프로세스가 완료되기 전에 다운스트림 피어로 포워딩될 수 있다.
도 36은 일부 양태에 따라 세션 테이블 엔트리를 에이징 아웃(aging out)하는 하이-레벨 흐름도이다. 세션 테이블은 서비스 노드(103)가 한정된 메모리를 갖기 때문에 그리고 큰 테이블이 처리하기에 더 느리기 때문에 한정된 크기를 갖는다. 이와 같이, 엔트리는 세션이 비활성화된 또는 완료된 것으로 출현할 때 세션 테이블에서 "에지징 아웃(aged out)"될 수 있다. 시작 후, 블록(3601에서, 현재 엔트리는 제1 세션 테이블 엔트리로 설정된다. 블록(3602)에서, 경과 시간은 현재 시간 마이너스 현재 엔트리의 최종 확인(last seen) 타임스탬프로 설정된다. 블록(3603)에서, 프로세스는 경과 시간이 에이징 임계값 미만인지 여부를 판단한다. 그러한 경우, 블록(3604)에서 프로세스는 현재 엔트리가 최종 세션 테이블 엔트리인지 여부를 판단한다. 그것이 최종 세션 테이블 엔트리인 경우, 프로세스는 완료된다. 그렇지 않으면, 블록(3605)에서 현재 엔트리는 다음 세션 테이블 엔트리로 설정되고 프로세스는 블록(3602)으로 되돌아간다. 경과 시간이 에이징 임계값 미만인 경우, 그 다음, 블록(3606)에서 세션 테이블 엔트리는 삭제된다. 블록(3607)에서 세션 동기 패킷이 생성되며 이는 세션 테이블 엔트리가 삭제되었다는 것을 나타낸다. 블록(3608)에서, 프로세스는 블록(3604)으로 계속되기 전에 세션 동기 패킷을 다운스트림 피어로 송신한다. 흐름 테이블 엔트리는 유사한 메커니즘을 사용하거나 세션을 에이징하는 부작용으로서 에이징 아웃될 수 있다. 세션은 업스트림 흐름 및 다운스트림 흐름을 가질 수 있다는 것을 상기한다. 세션을 에이징 아웃하는 것은 업스트림 흐름 및 다운스트림 흐름을 에이징 아웃하는 것을 포함할 수 있다. 에이징 아웃된 흐름에 대한 흐름 동기 패킷은 다운스트림 피어로 송신될 수 있다.
도 37a, 도 37b, 도 37c, 및 도 37d는 일부 양태에 따라 TCP 세션을 종료하는 프로세스의 하이 레벨 흐름도이다. 제1 컴퓨터 및 제2 컴퓨터는 TCP 연결을 개방함으로써 TCP 세션을 설정할 수 있고, TCP 프로토콜을 사용하여 데이터를 전달할 수 있고, TCP 연결을 폐쇄함으로써 TCP 세션을 종료할 수 있다. 컴퓨터 네트워킹에서 잘 알려진 바와 같이, 4개의 패킷이 종종 TCP 연결을 폐쇄하기 위해 사용된다. 제1 컴퓨터는 제1 TCP FIN 패킷을 제2 컴퓨터로 송신한다. 둘째, 제2 컴퓨터는 제1 컴퓨터에게 제1 TCP FIN 패킷에 대한 ACK를 송신한다. (ACK는 또한 TCP 패킷이다). 셋째, 제2 컴퓨터는 제2 TCP FIN 패킷을 제1 컴퓨터로 송신한다. 넷째 및 마지막으로, 제1 컴퓨터는 제2 컴퓨터에게 제2 TCP FIN 패킷에 대한 ACK를 송신한다. TCP 세션에 대한 패킷은 종종 TCP 세션의 상태를 추적하는, 스위치 및 라우터와 같은, 네트워크 장비를 통과한다. 도 37a, 도 37b, 도 37c, 및 도 37d는 순환 복제 체인 내의 서비스 노드를 사용하여 TCP 세션 상태를 추적하는 양태를 예시한다. 복제 체인 내의 모든 서비스 노드는 그것이 개방되고 상태를 변경하고 있지 않는 동안 TCP 세션에 대한 패킷을 처리할 수 있다. 이와 같이, TCP 패킷을 처리하는 것은 복제 체인 내의 서비스 노드의 수와 거의 선형적으로 스케일링될 수 있다. TCP 세션은 TCP 연결이 폐쇄되고 있을 때 많은 상태 변경을 갖는다. 이와 같이, 복제 체인은 종료 동안 TCP 세션 상태를 동기화할 수 있다.
도 37a는 일부 양태에 따라 제1 TCP FIN 패킷을 처리하기 위한 프로세스(3700)의 하이-레벨 흐름도이다. 제1 컴퓨터로부터 제2 컴퓨터로 송신되는 패킷은 "제1 방향"으로 이동하고 있다. 제2 컴퓨터로부터 제1 컴퓨터로 송신되는 패킷은 "제2 방향"으로 이동하고 있다. 시작 후, 블록(3701)에서 서비스 노드는 세션을 위한 제1 TCP FIN 패킷을 수신한다. 제1 TCP FIN 패킷은 제1 방향으로 흐른다. 블록(3702)에서, 서비스 노드는 제1 컴퓨터가 "fin-wait" 상태에 있고 제2 컴퓨터가 "established" 상태에 있다는 것을 나타내기 위해 세션 상태를 "{source: fin-wait-1, dest: established}"로 설정할 수 있다. 블록(3703)에서, 서비스 노드는 제1 세션 동기 패킷을 그것의 다운스트림 피어로 송신한다. 제1 세션 동기 패킷은 피어 노드에게 세션 상태 변경을 통지한다. 블록(3704)에서, 서비스 노드는 세션 상태 복제를 대기한다. 서비스 상태 복제는 서비스 노드가 그것의 업스트림 노드로부터 제1 세션 동기 패킷을 수신할 때 지시될 수 있다. 블록(3705)에서, 서비스 노드는 제1 TCP FIN 패킷을 그것의 목적지로 포워딩한다.
도 37b는 일부 양태에 따라 제1 TCP FIN 패킷에 대한 ACK를 처리하기 위한 프로세스(3710)의 하이-레벨 흐름도이다. 시작 후, 블록(3711)에서 서비스 노드는 세션을 위한 제1 TCP FIN 패킷에 대한 ACK를 수신한다. 제1 TCP FIN 패킷에 대한 ACK는 제2 방향으로 흐른다. 결정 블록(3712)에서, 서비스 노드는 TCP 세션이 "{source: fin-wait-1, dest: established}"와 같은 적절한 상태에 있다는 것을 확인한다. TCP 세션이 적절한 상태에 있지 않은 경우, 그 다음, 블록(3713)에서 에러는 프로세스가 완료되기 전에 로그되거나 달리 처리될 수 있다. TCP 세션이 적절한 상태에 있는 경우, 그 다음, 블록(3714)에서, 서비스 노드는 제1 컴퓨터가 "fin-wait" 상태에 있고 제2 컴퓨터가 "close-wait" 상태에 있다는 것을 나타내기 위해 세션 상태를 "{source: fin-wait-1, dest: close-wait}"로 설정할 수 있다. 블록(3715)에서, 서비스 노드는 제2 세션 동기 패킷을 그것의 다운스트림 피어로 송신한다. 제2 세션 동기 패킷은 피어 노드에게 세션 상태 변경을 통지한다. 블록(3716)에서, 서비스 노드는 세션 상태 복제를 대기한다. 서비스 상태 복제는 서비스 노드가 그것의 업스트림 노드로부터 제2 세션 동기 패킷을 수신할 때 지시될 수 있다. 블록(3717)에서, 서비스 노드는 제1 TCP FIN 패킷에 대한 ACK를 그것의 목적지로 포워딩한다.
도 37c는 일부 양태에 따라 제2 TCP FIN 패킷을 처리하기 위한 프로세스(3720)의 하이-레벨 흐름도이다. 시작 후, 블록(3721)에서 서비스 노드는 세션을 위한 제2 TCP FIN 패킷을 수신한다. 제2 TCP FIN 패킷은 제2 방향으로 흐른다. 결정 블록(3722)에서, 서비스 노드는 TCP 세션이 "{source: fin-wait-1, dest: close-wait}"와 같은 적절한 상태에 있다는 것을 확인한다. TCP 세션이 적절한 상태에 있지 않은 경우, 그 다음, 블록(3723)에서 에러는 프로세스가 완료되기 전에 로그되거나 달리 처리될 수 있다. TCP 세션이 적절한 상태에 있는 경우, 그 다음, 블록(3724)에서, 서비스 노드는 제1 컴퓨터가 "fin-wait-2" 상태에 있고 제2 컴퓨터가 "last-ack" 상태에 있다는 것을 나타내기 위해 세션 상태를 "{source: fin-wait-2, dest: last-ack}"로 설정할 수 있다. 블록(3725)에서, 서비스 노드는 제3 세션 동기 패킷을 그것의 다운스트림 피어로 송신한다. 제3 세션 동기 패킷은 피어 노드에게 세션 상태 변경을 통지한다. 블록(3726)에서, 서비스 노드는 세션 상태 복제를 대기한다. 서비스 상태 복제는 서비스 노드가 그것의 업스트림 노드로부터 제3 세션 동기 패킷을 수신할 때 지시될 수 있다. 블록(3727)에서, 서비스 노드는 제2 TCP FIN 패킷을 그것의 목적지로 포워딩한다.
도 37d는 일부 양태에 따라 제2 TCP FIN 패킷에 대한 ACK를 처리하기 위한 프로세스(3730)의 하이-레벨 흐름도이다. 시작 후, 블록(3731)에서 서비스 노드는 세션을 위한 제2 TCP FIN 패킷에 대한 ACK를 수신한다. 제2 TCP FIN 패킷은 제1 방향으로 흐른다. 결정 블록(3732)에서, 서비스 노드는 TCP 세션이 "{source: fin-wait-2, dest: last-ack}"와 같은 적절한 상태에 있다는 것을 확인한다. TCP 세션이 적절한 상태에 있지 않은 경우, 그 다음, 블록(3733)에서 에러는 프로세스가 완료되기 전에 로그되거나 달리 처리될 수 있다. TCP 세션이 적절한 상태에 있는 경우, 그 다음, 블록(3734)에서, 서비스 노드는 세션을 삭제할 수 있다. 블록(3735)에서, 서비스 노드는 제4 세션 동기 패킷을 그것의 다운스트림 피어로 송신한다. 제4 세션 동기 패킷은 피어 노드에게 세션 종료를 통지한다. 블록(3736)에서, 서비스 노드는 제2 TCP FIN 패킷에 대한 ACK를 그것의 목적지로 포워딩한다. 제2 TCP FIN 패킷에 대한 ACK는 세션 상태 복제를 대기하는 것 없이 그것의 목적지로 송신된다는 점을 주목한다.
도 30 내지 도 37d를 참조하여 상술한 바와 같이, 호스트 컴퓨터 또는 호스트 컴퓨터에 설치되는 smartNIC에 의해 과거에 수행되었던 네트워크 트래픽 처리의 많은 양태는 스마트 스위치 내에 위치될 수 있는 서비스 노드에 의해 처리될 수 있다. 고가용성 네트워크 트래픽 처리는 흐름 테이블 및 세션 테이블과 같은 서비스 노드의 서비스 상태 정보의 체인 복제를 사용하여 제공될 수 있다. 체인 복제의 본성으로 인해, 네트워크 트래픽 처리는 사용되는 서비스 노드의 수와 거의 선형적으로 스케일링될 수 있다. 게다가, 서비스 노드는 동적으로 복제 체인에 추가되거나 이로부터 제거될 수 있으며, 그것에 의해 유지 및 업그레이드에 대한 추가적인 이점을 제공한다. 이러한 고도의 이용가능한 서비스 노드 구현 및 개발은 전기능 smartNIC에 의해서만 제공되었을 수 있는 서비스를 특별한 목적을 위해 구축된 NIC 및 서비스 노드의 조합에 의해 구현될 수 있게 한다. 따라서, 고급(advanced) 기능은 여전히 각각의 서버에 대해 지원되지만 보다 자본 비용(capex) 및 운영 비용(opex) 효율적인 특별한 목적을 위해 구축된 NIC와 함께 그리고 보다 에너지 효율적인 방식으로 지원되며, 이는 그러한 컴퓨팅 시스템의 환경 영향을 감소시킬 수 있다.
도 38은 일부 양태에 따라 데이터 경로 상태 복제 및 중간 디바이스 매핑(3800)을 사용하는 서비스 분배를 위한 방법의 하이-레벨 흐름도이다. 시작 후, 블록(3801)에서 방법은 소스 어드레스 필드에 소스 어드레스를 포함하고 목적지 어드레스 필드에 목적지 어드레스를 포함하는 제1 패킷을 수신할 수 있다. 블록(3802)에서, 프로세스는 서비스 상태 정보의 체인 복제를 위해 구성되는 복수의 서비스 노드를 포함하는 복제 체인에 있는 선택된 서비스 노드로 제1 패킷을 라우팅할 수 있다. 블록(3803)에서, 프로세스는 변환된 패킷을 목적지 어드레스에 의해 지시되는 목적지를 향하여 전송할 수 있으며, 여기서 선택된 서비스 노드는 제1 패킷을 사용하여 변환된 패킷을 생성한다.
도 39는 일부 양태에 따라 IP 네트워크(3900)를 통해 느슨하게 결합된 PCIe 서비스 프록시에 대한 방법의 하이-레벨 흐름도이다. 시작 후, 블록(3901)에서 프로세스는 PCIe 버스를 통해 호스트 컴퓨터로부터 데이터 링크 계층 패킷(data link layer packet; DLLP)을 수신할 수 있다. 블록(3902)에서, 프로세스는 DLLP를 분석하여 TLP 어드레스 값, TLP 요청자 식별자, 및 TLP 타입을 포함하는 전송 계층 패킷(transport layer packet; TLP)을 획득할 수 있다. 블록(3903)에서, 프로세스는 TLP를 수신하는 것에 응답하여 DLLP ACK 메시지를 호스트 컴퓨터로 송신할 수 있다. 블록(3904)에서, 프로세스는 TLP를 사용하여 요청 타입 지시자, 어드레스 오프셋, 및 워크로드 요청 식별자를 포함하는 워크로드 요청 캡슐을 생성할 수 있다. 블록(3905)에서, 프로세스는 워크로드 요청 캡슐을 포함하는 워크로드 요청 패킷을 가상화된 서비스 엔드포인트로 송신할 수 있다. 블록(3906)에서, 프로세스는 워크로드 요청 식별자 및 워크로드 응답 페이로드를 포함하는 워크로드 응답 패킷을 수신할 수 있다.
도 40은 일부 양태에 따라 가상화된 NVMe-oF(NVMe over fabric) 서비스(4000)를 제공하기 위한 방법의 하이-레벨 흐름도이다. 시작 후, 블록(4001)에서, 프로세스는 서비스 어드레스를 포함하는 서비스 노드 데이터를 저장할 수 있다. 블록(4002)에서, 프로세스는 제출 큐 요소(submission queue element; SQE)를 제출 큐(submission queue; SQ)로부터 판독하여 커맨드 식별자, OpCode, 및 가상 네임스페이스 식별자(namespace identifier; NSID)를 획득할 수 있다. 블록(4003)에서, 프로세스는 opcode, NSID, 및 요청 식별자를 포함하는 제1 로컬 전송 프로토콜(local transport protocol; LTP) 패킷을 생성할 수 있다. 블록(4004)에서, 프로세스는 서비스 어드레스를 사용하여 LTP 패킷을 서비스 노드로 송신할 수 있다. 블록(4005)에서, 프로세스는 요청 식별자 및 상태 지시자를 포함하는 제2 LTP 패킷을 수신할 수 있다. 블록(4006)에서, 프로세스는 상태 지시자 및 요청 식별자를 사용하여 완료 큐 엔트리(completion queue entry; CQE)를 생성할 수 있다. 블록(4007)에서, 프로세스는 SQ와 연관되는 완료 큐(completion queue; CQ) 상에 CQE를 배치할 수 있으며, 여기서 SQ는 NVMe SQ이고, CQ는 NVMe CQ이다.
도 41은 일부 양태에 따라 원본 데이터 패킷(4100)을 사용하는 서비스 상태 복제를 위한 방법의 하이-레벨 흐름도이다. 블록(4101)에서, 프로세스는 소스 어드레스 필드에 소스 어드레스를 포함하고 목적지 어드레스 필드에 목적지 어드레스를 포함하는 제1 패킷을 수신할 수 있다. 블록(4102)에서, 프로세스는 로컬 흐름 테이블을 갖고 로컬 흐름 테이블의 체인 동기화를 위해 구성되는 복수의 서비스 노드를 포함하는 순환 복제 체인에 있는 선택된 서비스 노드로 제1 패킷을 라우팅할 수 있다. 블록(4103)에서, 프로세스는 제1 패킷을 처리하기 위해 제1 패킷의 매칭 흐름 테이블 엔트리를 사용함으로써 제2 패킷을 생성할 수 있다. 블록(4104)에서, 프로세스는 목적지 어드레스에 의해 지시되는 목적지를 향하여 제2 패킷을 송신할 수 있다.
본원에 설명되는 기술은 서비스 및 스위치 패브릭과 함께 랙에 통합되는 NIC 및 서비스 노드에 의해 적어도 부분적으로 구현될 수 있다. 본 발명의 실시예에 따르면, 장비 랙은 각각의 서버가 NIC를 갖는 복수의 서버, 서비스 노드, 및 다수의 서버를 NIC를 통해 서비스 노드에 연결하는 스위치 패브릭을 가지며, 여기서 NIC 및 서비스 노드는 본원에 설명되는 바와 같은 네트워크 인터페이스 서비스를 구현하도록 구성된다. 본 발명의 다른 실시예에 따르면, 장비 랙은 각각의 서버가 NIC를 갖는 다수의 서버, 및 다수의 서비스 노드 및 다수의 서버를 서비스 노드에 연결하는 스위치 패브릭를 포함하는 적어도 하나의 스마트 스위치를 포함하며, 여기서 다수의 서버는 NIC를 통해 스마트 스위치에 연결되고, 여기서 NIC 및 서비스 노드는 본원에 설명되는 바와 같은 네트워크 인터페이스 서비스를 구현하도록 구성된다. 본 발명의 다른 실시예에 따르면, 장비 랙은 다수의 서버 및 적어도 하나의 스마트 스위치를 포함하는 다수의 랙 유닛(Rack Unit; RU)을 포함하며, 서버는 호스트 컴퓨터 및 NIC를 포함하고, 적어도 하나의 스마트 스위치는 다수의 서비스 노드 및 다수의 서버를 서비스 노드에 연결하는 스위치 패브릭을 포함하며, 여기서 다수의 서버는 NIC를 통해 스마트 스위치에 연결되고, 여기서 NIC 및 서비스 노드는 본원에 설명되는 바와 같은 네트워크 인터페이스 서비스를 구현하도록 구성된다.
상술한 양태는 궁극적으로 디지털 데이터 처리, 스토리지, 및 통신을 구현하는 물리 회로를 포함하는 네트워크 어플라이언스에서 구현될 수 있다. 네트워크 어플라이언스는 처리 회로, ROM, RAM, CAM, 및 적어도 하나의 인터페이스(인터페이스(들))을 포함할 수 있다. 상술한 CPU 코어는 프로그램가능 패킷 처리 파이프라인을 구현하기 위해 사용되는 ASIC 회로 및 메모리와 동일한 IC(integrated circuit) 디바이스로 통합되는 처리 회로 및 메모리에 구현된다. 예를 들어, CPU 코어 및 ASIC 회로는 시스템-온-칩(System-on-Chip; SoC)을 형성하기 위해 동일한 반도체 기판 상에 제조된다. 네트워크 어플라이언스는 (예를 들어, 단일 기판 상에 제조되는) 단일 IC 디바이스로서 구현될 수 있거나 네트워크 어플라이언스는, 예를 들어, 인쇄 회로 보드(printed circuit board; PCB)에 의해 연결되는 다수의 IC 디바이스를 포함하는 시스템으로서 구현될 수 있다. 인터페이스는 네트워크 인터페이스(예를 들어, 이더넷 인페이스 및/또는 InfiniBand 인터페이스) 및/또는 PCI Express(PCIe) 인터페이스를 포함할 수 있다. 인터페이스는 또한 다른 관리 및 제어 인터페이스 예컨대 I2C, 범용 프로세스 IO, USB, UART, SPI, 및 eMMC를 포함할 수 있다.
본원의 방법(들)의 동작은 특정 순서로 도시되고 설명되지만, 각각의 방법의 동작의 순서는 특정 동작이 역순으로 수행될 수 있도록 또는 특정 동작이 적어도 부분적으로 다른 동작과 동시에 수행될 수 있도록 변경될 수 있다. 별개의 동작의 명령 또는 서브-동작은 간헐적인 및/또는 교호하는 방식으로 구현될 수 있다.
또한, 본원에 설명되는 방법에 대한 동작 중 적어도 일부는 컴퓨터에 의한 실행을 위해 컴퓨터 사용가능 스토리지 매체 상에 저장되는 소프트웨어 명령어를 사용하여 구현될 수 있다는 점이 주목되어야 한다. 예로서, 컴퓨터 프로그램 제품의 실시예는 컴퓨터 판독가능 프로그램을 저장하기 위해 컴퓨터 사용가능 스토리지 매체를 포함한다.
컴퓨터-사용가능 또는 컴퓨터-판독가능 스토리지 매체는 전자, 자기, 광학, 전자기, 적외선, 또는 반도체 시스템(또는 장치 또는 디바이스)일 수 있다. 비-일시적 컴퓨터-사용가능 및 컴퓨터-판독가능 스토리지 미디어의 예는 반도체 또는 고체-상태 메모리, 자기 테이프, 리무버블 컴퓨터 디스켓, 랜덤-액세스 메모리(RAM), 판독-전용 메모리(ROM), 리지드 자기 디스크, 및 광학 디스크를 포함한다. 광학 디스크의 현재 예는 판독 전용 메모리를 갖는 콤팩트 디스크(CD-ROM), 판독/기록을 갖는 콤팩트 디스크(CD-R/W), 및 디지털 비디오 디스크(DVD)를 포함한다.
본 발명의 특정 실시예가 설명되고 예시되었지만, 본 발명은 그렇게 설명되고 예시되는 부분의 특정 형태 또는 배열에 제한되지 않는다. 본 발명의 범위는 여기에 첨부되는 청구항 및 그 등가물에 의해 정의되어야 한다.

Claims (20)

  1. 방법으로서,
    소스 어드레스 필드에 소스 어드레스를 포함하고 목적지 어드레스 필드에 목적지 어드레스를 포함하는 제1 패킷을 수신하는 단계;
    상기 제1 패킷을 로컬 흐름 테이블을 갖고 상기 로컬 흐름 테이블의 체인 복제를 위해 구성되는 복수의 서비스 노드를 포함하는 순환 복제 체인에 있는 선택된 서비스 노드로 라우팅하는 단계;
    상기 제1 패킷을 처리하기 위한 상기 제1 패킷의 매칭 흐름 테이블 엔트리를 사용함으로써 제2 패킷을 생성하는 단계; 및
    상기 제2 패킷을 상기 목적지 어드레스에 의해 지시되는 목적지를 향하여 송신하는 단계를 포함하는, 방법.
  2. 제1항에 있어서,
    상기 서비스 노드 각각은 업스트림 피어, 다운스트림 피어를 갖고, 다음: 즉,
    패킷에 의해 야기되는 흐름 미스를 검출하고;
    상기 패킷에 기초한 로컬 흐름 테이블 엔트리를 로컬 흐름 테이블에 생성함으로써 상기 흐름 미스를 처리하고;
    상기 패킷에 기초하여 흐름 동기(sync) 패킷을 생성하고;
    상기 흐름 동기 패킷을 상기 다운스트림 피어로 송신하도록 구성되는, 방법.
  3. 제2항에 있어서,
    상기 서비스 노드 각각은:
    복수의 자체-발생된 흐름 동기 패킷을 포함하고 복수의 피어-발생된 흐름 동기 패킷을 포함하는 복수의 흐름 동기 패킷을 수신하고;
    상기 자체-발생된 흐름 동기 패킷을 드롭하고;
    상기 피어-발생된 흐름 동기 패킷에 기초한 복수의 흐름 테이블 엔트리를 상기 로컬 흐름 테이블에 생성하고;
    상기 피어-발생된 흐름 동기 패킷을 상기 다운스트림 피어로 포워딩하도록 구성되는, 방법.
  4. 제2항에 있어서,
    상기 서비스 노드 각각은:
    복수의 흐름 동기 패킷을 수신하고;
    이미 매칭 흐름 테이블 엔트리를 갖는 흐름 동기 패킷을 드롭하고;
    매칭 흐름 테이블 엔트리를 갖지 않는 흐름 동기 패킷에 기초하여 복수의 흐름 테이블 엔트리를 생성하고;
    매칭 흐름 테이블 엔트리를 갖지 않는 상기 흐름 동기 패킷을 상기 다운스트림 피어로 포워딩하도록 구성되는, 방법.
  5. 제2항에 있어서,
    상기 흐름 동기 패킷은 상기 패킷을 포함하는, 방법.
  6. 제1항에 있어서,
    상기 서비스 노드 각각은 복수의 세션을 위한 복수의 세션 테이블 엔트리를 저장하는 로컬 세션 테이블을 갖고;
    상기 서비스 노드 각각은 업스트림 피어 및 다운스트림 피어를 갖고;
    상기 서비스 노드는 체인 복제를 사용하여 상기 로컬 세션 테이블을 복제하도록 구성되는, 방법.
  7. 제6항에 있어서,
    상기 서비스 노드 각각은:
    세션을 위한 패킷을 수신하고;
    상기 세션이 미공지된 세션인 경우 상기 로컬 세션 테이블 엔트리를 생성함으로써 상기 세션을 위한 로컬 세션 테이블 엔트리가 존재한다는 것을 보장하고;
    상기 세션의 세션 상태를 상기 로컬 세션 테이블 엔트리에 저장하고;
    상기 세션이 상태를 변경할 때 세션 상태 변경 지시자를 포함하는 세션 동기 패킷을 생성하고;
    상기 세션 동기 패킷을 상기 다운스트림 피어로 송신하도록 구성되는, 방법.
  8. 제7항에 있어서,
    상기 세션은 전송 제어 프로토콜(transmission control protocol; TCP) 세션이거나 사용자 데이터그램 프로토콜(user datagram protocol; UDP) 세션인, 방법.
  9. 제6항에 있어서,
    상기 서비스 노드 각각은:
    복수의 자체-발생된 세션 동기 패킷 및 복수의 피어-발생된 세션 동기 패킷을 포함하는 복수의 세션 동기 패킷을 수신하고;
    상기 자체-발생된 세션 동기 패킷을 드롭하고;
    상기 피어-발생된 세션 동기 패킷에 기초하여 상기 로컬 세션 테이블을 갱신하고;
    상기 피어-발생된 세션 동기 패킷을 상기 다운스트림 피어로 포워딩하도록 구성되는, 방법.
  10. 제6항에 있어서,
    상기 서비스 노드 각각은:
    세션을 위한 세션 테이블 엔트리를 사용하여 상기 세션이 적어도 하나의 에이징 기준(aging criterion)에 기초하여 비활성인지를 결정하고;
    상기 세션이 비활성이라는 것을 나타내는 세션 동기 패킷을 상기 다운스트림 피어로 송신하고;
    상기 업스트림 피어로부터 상기 세션 동기 패킷을 수신한 후 상기 세션 테이블 엔트리를 삭제하도록 구성되는, 방법.
  11. 제6항에 있어서,
    상기 서비스 노드 각각은:
    상기 세션을 위한 세션 통계를 상기 세션 테이블 엔트리에 저장하고;
    상기 세션 통계를 집계된 세션 통계를 포함하는 집계된 세션 테이블로 송신하도록 구성되는, 방법.
  12. 제11항에 있어서,
    상기 세션 통계는 패킷 카운트(count)인, 방법.
  13. 제10항에 있어서,
    상기 순환 복제 체인 내의 상기 서비스 노드는 가상 IP 어드레스를 공유하고;
    복수의 패킷은 상기 가상 IP 어드레스로 송신되고;
    상기 로드 밸런서는 상기 서비스 노드 사이에 상기 패킷을 분배하는, 방법.
  14. 방법으로서,
    소스 어드레스 필드에 소스 어드레스를 포함하고 목적지 어드레스 필드에 목적지 어드레스를 포함하는 제1 패킷을 수신하는 단계;
    상기 제1 패킷을 로컬 세션 테이블을 갖고 상기 로컬 세션 테이블의 체인 복제를 위해 구성되는 복수의 서비스 노드를 포함하는 순환 복제 체인에 있는 선택된 서비스 노드로 라우팅하는 단계;
    상기 제1 패킷을 처리함으로써 제2 패킷을 생성하는 단계; 및
    상기 제2 패킷을 상기 목적지 어드레스에 의해 지시되는 목적지를 향하여 송신하는 단계를 포함하며,
    상기 서비스 노드 각각은 업스트림 피어 및 다운스트림 피어를 갖는, 방법.
  15. 제14항에 있어서,
    상기 서비스 노드 각각은:
    세션을 위한 패킷을 수신하고;
    상기 세션이 미공지된 세션인 경우 상기 로컬 세션 테이블 엔트리를 생성함으로써 상기 세션을 위한 로컬 세션 테이블 엔트리가 존재한다는 것을 보장하고;
    상기 세션 상태를 상기 로컬 세션 테이블 엔트리에 저장하고;
    상기 세션이 상태를 변경할 때 세션 상태 변경 지시자를 포함하는 세션 동기 패킷을 생성하고;
    상기 세션 동기 패킷을 상기 다운스트림 피어로 송신하도록 구성되는, 방법.
  16. 제14항에 있어서,
    상기 서비스 노드 각각은:
    복수의 자체-발생된 세션 동기 패킷 및 복수의 피어-발생된 세션 동기 패킷을 포함하는 복수의 세션 동기 패킷을 수신하고;
    상기 자체-발생된 세션 동기 패킷을 드롭하고;
    상기 피어-발생된 세션 동기 패킷에 기초하여 로컬 세션 테이블을 갱신하고;
    상기 피어-발생된 세션 동기 패킷을 상기 다운스트림 피어로 포워딩하도록 구성되는, 방법.
  17. 제14항에 있어서,
    상기 서비스 노드 각각은:
    세션을 위한 로컬 세션 테이블 엔트리를 사용하여 상기 세션이 적어도 하나의 에이징 기준에 기초하여 비활성인지를 결정하고;
    상기 세션이 비활성이라는 것을 나타내는 세션 동기 패킷을 상기 다운스트림 피어로 송신하고;
    상기 업스트림 피어로부터 상기 세션 동기 패킷을 수신한 후 상기 로컬 세션 테이블 엔트리를 삭제하도록 구성되는, 방법.
  18. 제17항에 있어서,
    상기 서비스 노드는 흐름 테이블 엔트리를 갖는 로컬 흐름 테이블을 갖고;
    상기 서비스 노드는 체인 복제를 사용하여 상기 로컬 흐름 테이블을 복제하도록 구성되는, 방법.
  19. 시스템으로서,
    복수의 서비스 노드를 포함하며, 상기 복수의 서비스 노드는,
    소스 어드레스 필드에 소스 어드레스를 포함하고 목적지 어드레스 필드에 목적지 어드레스를 포함하는 제1 패킷을 수신하고,
    상기 제1 패킷을 상기 서비스 노드 중 하나인 선택된 서비스 노드로 라우팅하고,
    상기 제1 패킷을 처리하기 위한 상기 제1 패킷의 매칭 흐름 테이블 엔트리를 사용함으로써 제2 패킷을 생성하고,
    상기 제2 패킷을 상기 목적지 어드레스에 의해 지시되는 목적지를 향하여 송신하도록 구성되며,
    상기 서비스 노드는 로컬 흐름 테이블을 갖고, 로컬 세션 테이블을 갖고, 상기 로컬 흐름 테이블 및 상기 로컬 세션 테이블의 체인 복제를 위해 구성되는, 시스템.
  20. 제19항에 있어서,
    복수의 네트워크 패킷을 복수의 호스트 머신과 상기 서비스 노드 사이에 전송하도록 구성되는 사설 네트워크; 및
    적어도 하나의 스마트 스위치를 더 포함하며,
    상기 서비스 노드는 상기 적어도 하나의 스마트 스위치 내부에 있고,
    상기 적어도 하나의 스마트 스위치는 상기 사설 네트워크를 상기 공용 네트워크에 연결하도록 구성되는, 시스템.
KR1020220061627A 2021-05-20 2022-05-19 원본 데이터 패킷을 사용하는 서비스 상태 복제를 위한 방법 및 시스템 KR20220157322A (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US202163191312P 2021-05-20 2021-05-20
US63/191,312 2021-05-20
US17/364,750 2021-06-30
US17/364,750 US11949589B2 (en) 2021-05-20 2021-06-30 Methods and systems for service state replication using original data packets

Publications (1)

Publication Number Publication Date
KR20220157322A true KR20220157322A (ko) 2022-11-29

Family

ID=81850171

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020220061627A KR20220157322A (ko) 2021-05-20 2022-05-19 원본 데이터 패킷을 사용하는 서비스 상태 복제를 위한 방법 및 시스템

Country Status (7)

Country Link
US (1) US11949589B2 (ko)
EP (1) EP4092533A1 (ko)
JP (1) JP2022179413A (ko)
KR (1) KR20220157322A (ko)
CN (1) CN115379017A (ko)
CA (1) CA3159812A1 (ko)
IL (1) IL292988A (ko)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20230096451A1 (en) * 2021-09-24 2023-03-30 Intel Corporation Remote disaggregated infrastructure processing units (ipus)
US20240223492A1 (en) * 2023-01-03 2024-07-04 Nvidia Corporation Offloading connection management for network resources
WO2024201802A1 (ja) * 2023-03-29 2024-10-03 日本電信電話株式会社 ネットワークスイッチ及びシステム
US12052092B1 (en) 2023-06-26 2024-07-30 Pensando Systems Inc. Systems and methods for high availability node pairing without incurring connection drops
CN118400415A (zh) * 2024-04-17 2024-07-26 中国电子信息产业集团有限公司第六研究所 一种pcie节点反向管理处理系统及方法

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7720815B1 (en) 2007-08-27 2010-05-18 Amazon Technologies, Inc. Circular replication of data
US8805990B2 (en) 2012-07-12 2014-08-12 Microsoft Corporation Load balancing for single-address tenants
EP2741456B1 (en) 2012-10-27 2016-01-13 Huawei Technologies Co., Ltd. Method, device and system for achieving message transmission of pcie switch network
US10684973B2 (en) 2013-08-30 2020-06-16 Intel Corporation NUMA node peripheral switch
US9755960B2 (en) * 2013-09-30 2017-09-05 Juniper Networks, Inc. Session-aware service chaining within computer networks
CN105337881B (zh) * 2014-06-27 2019-10-01 华为技术有限公司 一种数据报文的处理方法、业务节点以及引流点
CN104158755B (zh) * 2014-07-30 2017-12-05 华为技术有限公司 传输报文的方法、装置和系统
TWI558149B (zh) 2015-06-23 2016-11-11 晶睿通訊股份有限公司 用於多層網路位址轉譯器結構之網路傳輸方法及網路傳輸系統
EP3273643B1 (en) 2015-12-31 2019-08-21 Huawei Technologies Co., Ltd. Method for sending virtual extensible local area network packet, computer device, and readable medium
US10382392B2 (en) 2016-08-01 2019-08-13 Big Switch Networks, Inc. Systems and methods for network address translation
US10530815B2 (en) 2016-10-24 2020-01-07 Nubeva, Inc. Seamless service updates for cloud-based security services
US10868742B2 (en) 2017-03-29 2020-12-15 Juniper Networks, Inc. Multi-cluster dashboard for distributed virtualization infrastructure element monitoring and policy control
US11570092B2 (en) 2017-07-31 2023-01-31 Nicira, Inc. Methods for active-active stateful network service cluster
US11386339B2 (en) 2019-02-26 2022-07-12 Global Elmeast Inc. Artificial intelligence delivery edge network
US10999084B2 (en) 2019-05-31 2021-05-04 Microsoft Technology Licensing, Llc Leveraging remote direct memory access (RDMA) for packet capture
TWI701920B (zh) 2019-08-07 2020-08-11 許富皓 封包傳送方法以及系統
US11336573B2 (en) * 2020-02-26 2022-05-17 Cisco Technology, Inc. Service chaining in multi-fabric cloud networks
JP2023535149A (ja) * 2020-07-14 2023-08-16 オラクル・インターナショナル・コーポレイション Vlanスイッチングおよびルーティングサービスのためのシステムおよび方法
US11677614B2 (en) * 2020-08-20 2023-06-13 Huawei Technologies Co., Ltd. Method and apparatus for protecting stateful service function paths

Also Published As

Publication number Publication date
US11949589B2 (en) 2024-04-02
EP4092533A1 (en) 2022-11-23
IL292988A (en) 2022-12-01
JP2022179413A (ja) 2022-12-02
US20220377013A1 (en) 2022-11-24
CA3159812A1 (en) 2022-11-20
CN115379017A (zh) 2022-11-22

Similar Documents

Publication Publication Date Title
US11902184B2 (en) Methods and systems for providing a virtualized NVMe over fabric service
US10997106B1 (en) Inter-smartNIC virtual-link for control and datapath connectivity
US11895027B2 (en) Methods and systems for service distribution using data path state replication and intermediate device mapping
US11949589B2 (en) Methods and systems for service state replication using original data packets
US10044616B2 (en) Co-existence of routable and non-routable RDMA solutions on the same network interface
US11184295B2 (en) Port mirroring based on remote direct memory access (RDMA) in software-defined networking (SDN) environments
US11593294B2 (en) Methods and systems for loosely coupled PCIe service proxy over an IP network
EP3854038A1 (en) Segment routing with fast reroute for container networking
US9473596B2 (en) Using transmission control protocol/internet protocol (TCP/IP) to setup high speed out of band data communication connections
US20130332767A1 (en) Redundancy and load balancing in remote direct memory access communications
US9910687B2 (en) Data flow affinity for heterogenous virtual machines
US8756270B2 (en) Collective acceleration unit tree structure
WO2004051489A2 (en) Embedded transport acceleration architecture
WO2021207231A1 (en) Application aware tcp performance tuning on hardware accelerated tcp proxy services
US11740920B2 (en) Methods and systems for migrating virtual functions in association with virtual machines
Zhao et al. SpliceNP: a TCP splicer using a network processor
US20230043461A1 (en) Packet processing configurations
Cerović Resilient and highly performant network architecture for virtualized data centers
Kundel Design of QoS-Aware Network Functions