KR20150146391A - 소프트웨어 정의 네트워크에서의 가상화된 컨테이너 및 가상 머신을 통한 로컬 서비스 체이닝 - Google Patents

소프트웨어 정의 네트워크에서의 가상화된 컨테이너 및 가상 머신을 통한 로컬 서비스 체이닝 Download PDF

Info

Publication number
KR20150146391A
KR20150146391A KR1020150071740A KR20150071740A KR20150146391A KR 20150146391 A KR20150146391 A KR 20150146391A KR 1020150071740 A KR1020150071740 A KR 1020150071740A KR 20150071740 A KR20150071740 A KR 20150071740A KR 20150146391 A KR20150146391 A KR 20150146391A
Authority
KR
South Korea
Prior art keywords
lsc
packet
container
buffer
virtual
Prior art date
Application number
KR1020150071740A
Other languages
English (en)
Other versions
KR101747518B1 (ko
Inventor
트레버 쿠퍼
브라이언 제이 스케리
Original Assignee
인텔 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 인텔 코포레이션 filed Critical 인텔 코포레이션
Publication of KR20150146391A publication Critical patent/KR20150146391A/ko
Application granted granted Critical
Publication of KR101747518B1 publication Critical patent/KR101747518B1/ko

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/35Switches specially adapted for specific applications
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L65/00Network arrangements, protocols or services for supporting real-time applications in data packet communication
    • H04L65/40Support for services or applications
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/173Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
    • G06F15/17306Intercommunication techniques
    • G06F15/17331Distributed shared memory [DSM], e.g. remote direct memory access [RDMA]
    • 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
    • G06F9/45558Hypervisor-specific management and integration aspects
    • 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
    • H04L49/00Packet switching elements
    • H04L49/90Buffering arrangements
    • 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
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/4557Distribution of virtual machine instances; Migration and load balancing
    • 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
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45595Network integration; Enabling network access in virtual machine instances
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/15Use in a specific computing environment
    • G06F2212/154Networked environment

Abstract

소프트웨어 정의 네트워킹(Software Defined Networking; SDN)에서 가상 머신(virtual machine; VM) 또는 가상화된 컨테이너에 의해 로컬 서비스 체이닝(local service chaining; LSC)을 구현하기 위한 방법, 소프트웨어, 및 장치. 일 양태에서, SDN의 가상 스위치에 통신가능하게 커플링되는 가상 네트워크 인터페이스 컨트롤러(virtual network interface controller; vNIC)를 각각 포함하는 복수의 VM 또는 컨테이너를 포함하는 컴퓨터 플랫폼 상에서 한 방법이 구현된다. LSC는 복수의 VM 또는 컨테이너에 의해 호스팅되는 복수의 가상 네트워크 기기를 통해 구현된다. 각각의 LCS는, LCD에 대해 정의된 가상 네트워크 기기에 의해 수행되는 서비스의 시퀀스(체인)을 포함한다. 서비스의 체인을 수행하는 것과 연계하여, 패킷 데이터는 컷스루 메커니즘을 사용하여 VM 또는 컨테이너 사이에서 포워딩되고, 컷스루 메커니즘 하에서, 패킷 데이터는, 가상 스위치를 우회하는 방식으로, vNIC 상의 수신(Rx) 버퍼에 직접적으로 기록된다. 각각의 가상 네트워크 기기 및/또는 그것의 호스트 VM 또는 컨테이너에게, 패킷 데이터가 기록될 다음 vNIC Rx 버퍼 또는 Rx 포트를 통지하기 위해, (예를 들면, LSC 태그를 통한) LSC 표시 및 플로우 테이블이 사용된다.

Description

소프트웨어 정의 네트워크에서의 가상화된 컨테이너 및 가상 머신을 통한 로컬 서비스 체이닝{LOCAL SERVICE CHAINING WITH VIRTUAL MACHINES AND VIRTUALIZED CONTAINERS IN SOFTWARE DEFINED NETWORKING}
배경 정보
컴퓨터 네트워크에 대한 액세스는 오늘날의 컴퓨터 용도의 일상적인 부분(ubiquitous part)이 되었다. 공유 네트워크 리소스에 액세스하기 위해 엔터프라이즈 환경의 LAN(Local Area Network; 근거리 통신망)에 액세스하든지, 또는 LAN 또는 다른 액세스 포인트를 통해 인터넷에 액세스하든지 간에, 유저는, 컴퓨터 네트워크를 통해 액세스되는 적어도 하나의 서비스에 항상 로그온되어 있는 것으로 보인다. 또한, 클라우드 기반 서비스의 급격한 팽창은 컴퓨터 네트워크의 한층 더 추가적인 사용을 이끌었고, 이들 서비스는 지금까지 이상으로 보급될 것으로 예측된다.
네트워킹은, 라우터, 스위치, 브리지, 게이트웨이, 및 액세스 포인트를 포함하는 다양한 타입의 기기에 의해 가능하게 된다. 대형의 네트워크 인프라는 통상적으로, Cisco Systems, Juniper Networks, Alcatel Lucent, IBM, 및 Hewlett-Packard와 같은 회사들에 의해 만들어진 스위치 및 라우터를 포함하는 원격통신 클래스(telecommunication-class)의 네트워크 엘리먼트를 포함한다. 이러한 원격통신 스위치는 아주 복잡하고, 고대역폭에서 동작하며, 진보된 라우팅 기능성을 제공할 뿐만 아니라 상이한 QoS(Quality of Service; 서비스 품질) 레벨도 지원한다. LAN(근거리 통신망)과 같은 사설 네트워크는 비즈니스 및 홈 유저에 의해 가장 일반적으로 사용된다. 많은 비즈니스 네트워크가 하드웨어 기반 및/또는 소프트웨어 기반 방화벽 등을 활용하는 것도 또한 일반적이다.
최근, 컴퓨터 시스템의 가상화가, 특히 서버 전개(server deployment) 및 데이터 센터에서 급격한 성장세를 보여 왔다. 종래의 접근법 하에서는, 서버는 오퍼레이팅 시스템의 단일의 인스턴스를, CPU, RAM, 저장 디바이스(예를 들면, 하드디스크), 네트워크 컨트롤러, I/O 포트 등과 같은 물리적 하드웨어 리소스 상에서 직접적으로 실행한다. VM(Virtual Machine; 가상 머신)을 사용하는 하나의 가상화된 접근법에서는, 물리적 하드웨어 리소스는 가상 리소스의 대응하는 인스턴스를 지원하도록 활용되어, 그 결과 다수의 VM은 서버의 물리적 하드웨어 리소스 상에서 실행될 수도 있으며, 각각의 가상 머신은 자기 자신의 CPU 할당, 메모리 할당, 저장 디바이스, 네트워크 컨트롤러, I/O 포트 등을 포함한다. 그 다음, 동일한 또는 상이한 오퍼레이팅 시스템의 다수의 인스턴스가 다수의 VM 상에서 실행된다. 또한, VMM(virtual machine manager; 가상 머신 매니저) 또는 "하이퍼바이저(hypervisor)"의 사용을 통해, 가상 리소스는 서버가 실행되는 동안 동적으로 할당되어, 서버가 셧다운될 필요 없이, VM 인스턴스가 추가되거나, 셧다운되거나, 또는 용도전환되는(repurposed) 것을 가능하게 한다. 이것은, 특히 다중 코어 프로세서 및/또는 다중 프로세서 서버에 대해, 서버 프로세싱 리소스의 더 나은 사용 및 서버 활용성에 대한 큰 유연성을 제공한다.
다른 가상화 접근법 하에서는, VMM 또는 하이퍼바이저의 사용 없이, 가상화된 "컨테이너"를 활용하는 컨테이너 기반 OS 가상화가 사용된다. 각각의 VM 상에서 오퍼레이팅 시스템의 별개의 인스턴스를 호스팅하는 대신, 컨테이너 기반 OS 가상화는 다수의 컨테이너에 걸쳐, 각각의 컨테이너에 대한 소프트웨어 라이브러리 및 시스템의 별개의 인스턴스와 함께, 단일의 OS 커널을 공유한다. VM에서와 같이, 각각의 컨테이너에 할당되는 가상 리소스가 또한 존재한다.
지난 몇 년 동안, NFV(Network Function Virtualization; 네트워크 기능 가상화) 및 SDN(Software Defined Networking; 소프트웨어 정의 네트워킹)의 전개에서도 또한 급격한 성장세를 보여 왔다. SDN 하에서, 트래픽이 어디로 전송되는지에 관한 결정을 하는(제어 플레인) 시스템은, 트래픽을 선택된 목적지로 포워딩하는(데이터 플레인) 기저 시스템(underlying system)에 대해 디커플링된다. SDN 개념은, 서비스 공급자가 소프트웨어 애플리케이션 및 API(Application Program Interface; 애플리케이션 프로그램 인터페이스)를 통해 그들의 네트워크 서비스의 다양한 양태를 관리하는 것을 가능하게 하는 네트워크 가상화를 가능하게 하는 데 활용될 수도 있다. NFV 하에서, 네트워크 기능을 소프트웨어 애플리케이션으로서 가상화하는 것에 의해, 네트워크 서비스 공급자는, 가용 대역폭, 비용 절감 및 신규 서비스에 대한 시장으로의 더 빠른 시간의 최적화를 포함하는 상당한 이점을 가능하게 하는, 네트워크 구성에서의 유연성을 얻을 수 있다.
"서비스 체이닝(service chaining)"은, 다양한 물리적 계산 노드에서 구현되는 일련의 네트워크 서비스 엘리먼트에 의해 프로세싱되는 네트워크를 통과하는 패킷의 플로우를 설명하기 위해 SDN의 상황에서 종종 사용된다. 본원에서 사용되는 바와 같이, 용어 "LSC(Local service chaining; 로컬 서비스 체이닝)"는, VM 또는 가상화된 컨테이너에서 구현되는 일련의 네트워크 서비스 엘리먼트에 의해 프로세싱되는, 계산 노드 내부의 네트워크를 통과하는 패킷의 플로우를 설명하기 위해 사용된다. 종래의 접근법 하에서, LCS는 VM 사이에서 패킷을 스위칭하기 위해 VS(Virtual Switch; 가상 스위치) 또는 등가의 메커니즘을 활용한다. 이 스위칭 메커니즘은 계산 리소스를 요구하며 시스템의 스루풋 성능에 부정적 영향을 끼친다. 이 문제점은, 각각의 패킷의 프로세싱이 하나 이상의 VS를 통한 다수의 데이터 전송을 수반하기 때문에, 더 많은 양의 트래픽이 LSC를 통해 프로세싱될 때 악화된다.
본 발명의 상기 양태 및 많은 부수적인 이점은, 첨부의 도면과 연계하여 취해질 때 하기의 상세한 설명을 참조로 본 발명이 더 잘 이해됨에 따라 더 쉽게 식별될 것이며, 도면에서는, 그렇지 않다고 명기되지 않는 한, 동일한 도면 부호는 여러 도면 전체에 걸쳐 동일 부분을 가리키며:
도 1은 LSC의 사용을 통해 패킷 프로세싱 동작을 수행하도록 구성된 계산 플랫폼에 대한 가상 머신을 포함하는 아키텍쳐를 예시하는 개략도이다;
도 1a는, 패킷 데이터가 네트워크 인터페이스로부터 vNIC(가상 네트워크 인터페이스 컨트롤러)의 수신(Rx) 버퍼로 직접적으로 전송되게 되는, 도 1의 계산 플랫폼의 보강 버전(augmented version)을 예시하는 개략도이다;
도 1b는 LSC의 사용을 통해 패킷 프로세싱 동작을 수행하도록 구성된 가상화된 컨테이너를 포함하는 계산 플랫폼에 대한 아키텍쳐를 예시하는 개략도이다;
도 2는 LSC의 구현을 가능하게 하기 위해 계산 플랫폼 상에서 실행하는 소프트웨어에 의해 수행되는 동작 및 로직을 예시하는 플로우차트이다;
도 3은 도 1의 아키텍쳐의 공유 메모리 영역의 Rx FIFO 큐의 추가 상세를 예시하는 개략도이다;
도 4는 LSC ID를 사용하여 LSC 동작을 구현하기 위한 도 1의 아키텍쳐의 플로우 테이블(flow table)에 포함되는 제1 세트의 예시적인 데이터를 예시하는 도면이다;
도 4a는 플로우 ID를 사용하여 LSC 동작을 구현하기 위한 도 1의 아키텍쳐의 플로우 테이블에 포함되는 제2 세트의 예시적인 데이터를 예시하는 도면이다;
도 4b는 사전 정의된 네트워크 포트에서 수신되는 모든 패킷에 대한 사전 정의된 LSC를 구현하기 위한 도 1의 아키텍쳐의 플로우 테이블에 포함되는 제3의 예시적인 데이터를 예시하는 도면이다;
도 5는 가상 머신(이 가상 머신을 통해 본원에서 개시되는 실시형태의 양태가 구현될 수도 있음)을 포함하는 제1 예시적인 호스트 플랫폼의 하드웨어 및 소프트웨어 아키텍쳐의 개략도이다;
도 6은 컨테이너 기반 가상화를 구현하는 컨테이너(이 컨테이너를 통해 본원에서 개시되는 실시형태의 양태가 구현될 수도 있음)를 포함하는 제2 예시적인 호스트 플랫폼의 하드웨어 및 소프트웨어 아키텍쳐의 개략도이다.
상세한 설명
소프트웨어 정의 네트워킹에서 가상 머신 또는 가상화된 컨테이너에 의해 로컬 서비스 체이닝을 구현하기 위한 방법, 소프트웨어, 및 장치의 실시형태가 본원에서 설명된다. 하기의 설명에서, 본원에서 개시되고 인스턴스화되는 실시형태의 완전한 이해를 제공하기 위해, 다양한 특정 상세가 설명된다. 그러나, 관련 기술분야의 당업자는, 특정 상세 중 하나 이상이 없어도, 또는 다른 방법, 컴포넌트, 재료 등과 함께 본 발명이 실시될 수 있음을 인식할 것이다. 다른 경우에서, 널리 공지된 구조, 재료, 또는 동작은, 본 발명의 양태를 모호하게 하지 않기 위해, 도시되지 않거나 또는 상세히 설명되지 않는다.
명확화를 위해, 본원 도면의 개개의 컴포넌트는, 특정 참조부호 대신, 도면에서의 그들의 라벨에 의해 또한 참조될 수도 있다. 추가적으로, (특정 컴포넌트와는 대조적으로) 특정 타입의 컴포넌트를 참조하는 도면 부호는 "통상적인(typical)"을 의미하는 "(typ)"가 후속하는 참조부호로 도시될 수도 있다. 이들 컴포넌트의 구성은, 존재는 하지만 간략화 및 명확화를 위해 도면에 도시되지 않을 수도 있는 통상적인 유사 컴포넌트 또는 다르게는 별개의 참조부호로 라벨링되지 않은 유사 컴포넌트일 수 있음이 이해될 것이다. 역으로, "(typ)"는, 컴포넌트, 엘리먼트 등이 통상적으로 그것의 개시되는 기능, 구현, 목적 등을 위해 사용되는 것을 의미하는 것으로 간주되지 않을 것이다.
본원에서 사용되는 바와 같이, 용어 "가상 기기(appliance)", "가상 네트워크 기기", "네트워크 기기", 또는 단순히 "기기"는 상호교환적으로 사용될 수도 있다. 또한, 특허청구범위를 포함하는 본원에서의 목적을 위해, 소프트웨어 정의 네트워킹에 관련이 있는 또는 네트워크 기능 가상화를 구현하도록 구성되는 임의의 소프트웨어 기반 기기는, 소프트웨어 정의 네트워킹에 관련이 있는 동작 및/또는 네트워크 기능 가상화를 구현하도록 구성되는 임의의 네트워크 기기 또는 가상화된 엔티티를 가상 네트워크 기기가 포함한다는 이해를 통해, "가상 기기"로서 더 일반적으로 칭해질 수도 있다. 따라서, 하기의 설명에서 용어 가상 기기는 모든 NFV 기기도 또한 포함한다.
본원에서 설명되는 실시형태의 양태에 따르면, 가상 스위치의 사용 없이 유사한 SDN 컴포넌트와 가상 네트워크 기기 사이에서 패킷이 전송되는 것을 가능하게 하는 "컷스루(cut-through)" 메커니즘을 생성하는 것에 의해, 패킷 스루풋이 가속화된다. 이것은, 부분적으로, "LSC(로컬 서비스 체이닝)"의 사용을 통해 가능하게 되고, LSC는, 본원에서, 계산 노드 내부의 네트워크를 통과하는 패킷의 플로우를 설명하기 위해 사용되고, 패킷은, 계산 노드 하에서, 다수의 가상 머신 또는 가상화된 컨테이너에서 구현되는 일련의 네트워크 서비스 엘리먼트(예를 들면, 가상 네트워크 기기)에 의해 프로세싱된다.
비제한적인 예로서, 도 1은 LSC의 사용을 통해 패킷 프로세싱 동작을 수행하도록 구성된 계산 노드(예를 들면, 서버와 같은 계산 플랫폼)에 대한 아키텍쳐(100)를 도시한다. 아키텍쳐(100)는, 계산 플랫폼 상에 (예를 들면, NIC(네트워크 인터페이스 컨트롤러)로서) 통합될 수도 있는 네트워크 인터페이스(104)에 커플링되는 또는 다르게는 계산 플랫폼에 (예를 들면, PCIe(Peripheral Component Interconnect Express; 주변기기 컴포넌트 인터커넥트 익스프레스 카드) 확장 슬롯에 설치된 PCIe 카드로서) 동작가능하게 커플링될 수도 있는 계산 플랫폼(102)을 포함한다. 계산 플랫폼(102)은, 애플리케이션 메모리 공간(108)에서 실행하는 다수의 애플리케이션(이들은 호스트 OS(106) 위에 묘사됨)을 호스팅하도록 구성되는 OS(오퍼레이팅 시스템) 메모리(107)에서 실행되는 호스트 OS(106)를 포함한다. 이것은, VM1, VM 2 및 VM N으로 라벨링된 가상 머신에 의해 묘사되는 바와 같이, N개의 가상 머신(112)을 호스팅하도록 구성되는 하이퍼바이저(110) 및 가상 스위치(106)를 포함한다. 소프트웨어 컴포넌트는 SDN 컨트롤러(114)를 더 포함한다.
네트워크 인터페이스(104)는, 포트1, 포트2…포트M으로 라벨링된 M개의 네트워크 포트(116)를 포함하고, MN과 동일하거나 상이할 수도 있다. 각각의 네트워크 포트(116)는 수신(Rx) 버퍼(118) 및 송신(Tx) 버퍼(120)를 포함한다. 본원의 도면에서 사용되는 바와 같이, Rx 및 Tx 버퍼 및 또한 묘사되는 Rx 및 Tx 큐는 동위치의 Rx 및 Tx 포트를 나타낼 수도 있고; 혼란스러움을 감소시키기 위해 Rx 및 Tx 포트는 별개로 도시되지 않지만, 기술분야의 당업자는, 각각의 Rx 및 Tx가 하나 이상의 Rx 및 Tx 버퍼 및/또는 큐를 포함할 것이라는 것을 알 수 있을 것이다.
일반적으로, 네트워크 인터페이스는, Rx 및 Tx 포트에서 구현되는 상대적으로 작은 Rx 및 Tx 버퍼, 및 다수의 Rx 및 Tx 포트에 걸쳐 공유되는 네트워크 인터페이스 상의 IO(입/출력) 메모리에서 구현될 수도 있는 더 큰 Rx 및 Tx 버퍼를 포함할 수도 있다. 예시된 예에서, IO 메모리의 적어도 일부는, 호스트 OS(106)의 OS 메모리(107)의 NIC 드라이버(124)에 의해 구성되는 MMIO(memory-mapped IO; 메모리 매핑된 IO; 122)이다. MMIO(122)는, 하기에 더 상세히 설명되는 바와 같이, MMIO(122)의 메모리 버퍼와 계산 플랫폼(102) 상의 시스템 메모리의 버퍼 사이에서 DMA(direct memory access; 다이렉트 메모리 액세스) 데이터 전송을 지원하도록 구성된다.
가상 스위치(108)는 계산 플랫폼(102) 내부의 SDN 스위칭 동작을 수행하도록 구성되는 소프트웨어 기반 엔티티이다. 예시된 예에서, 가상 스위치(108)는, 네트워크 인터페이스(104) 상의 각각의 물리적 Rx 및 TX 포트에 대한(예를 들면, 포트1~포트M의 각각에 대한) 가상 Rx 및 Tx 포트, 및 가상 머신(VM 1~VM N)의 각각에 대한 가상 Rx 및 Tx 포트를 포함한다. 네트워크 인터페이스측의 가상 포트는 Rx 가상 포트(126) 및 Tx 가상 포트(127)로서 묘사되고, 한편 VM측 가상 포트는 Rx 가상 포트(128) 및 Tx 가상 포트(129)로서 묘사된다. 추가로 도시된 바와 같이, 각각의 Rx 및 Tx 가상 포트(126, 127, 128, 및 129)의 각각은, 시스템 메모리 어드레스 공간의 공유 메모리 영역(134)(공유 어드레스 공간으로도 칭해짐)을 중첩하는 것으로 묘사된다. 또한, Rx 및 Tx 가상 포트(130 및 132)의 쌍은, vNIC1, vNIC2 및 vNICN에 의해 도시된 바와 같이, 각각의 가상 NIC(vNIC)로 확장하는 것으로 더 묘사되며, vNIC는 각각의 가상 머신(VM 1, VM 2 및 VM N)과 관련된다.
가상 머신(VM 1, VM 2 및 VM N)의 각각은, 가상 기기 및 애플리케이션이 실행되는 대응하는 VM을 식별하는 표시와 함께 가상 기기(136) 및 3개의 애플리케이션(138)을 포함하여 도시된다. 예를 들면, VM 1에 대해, 가상 기기는 "기기 1"로 라벨링되고 애플리케이션은 "애플리케이션 1A", "애플리케이션 1B", 및 "애플리케이션 1C"로 라벨링된다. 일반적으로, 각각의 가상 기기(136)는 하나 이상의 애플리케이션(138)을 통해 구현될 수도 있고, 3개의 애플리케이션의 포함은 단지 예시적인 목적을 위한 것이다. 계산 플랫폼(102)의 동작 동안, 가상 기기(136)의 각각은 하나 이상의 패킷 프로세싱 서비스를 수행하도록 구성된다. 또한, 패킷 프로세싱 서비스는 각각의 패킷과 관련된 패킷 플로우에 대한 적용가능한 LSC에 의해 정의된 바와 같은 체인화된 방식(chained manner)으로 구현된다.
로컬 서비스 체이닝을 사용하는 체인화된 패킷 프로세싱 서비스의 개념은, 패킷(140)의 프로세싱과 연계하여, 그리고 도 2에 도시된 플로우차트(200)를 더 참조하여 묘사되는 데이터 전송 및 동작을 통해 도 1에서 더 예시된다. 패킷(140)은 IP(Internet Protocol; 인터넷 프로토콜) 패킷인 것으로 묘사되고, 이 예시적인 IP 패킷의 사용은, 네트워크에서 패킷(140)이 포워딩되고 계산 플랫폼(102)에 의해 내부적으로 핸들링되는 곳을 결정하기 위해 부분적으로 사용되는 IP 어드레싱을, 패킷이 활용한다는 것을 의미한다. 플로우차트(200)의 블록 202에 도시된 바와 같이, 프로세스는, 네트워크 인터페이스(104)에서 네트워크로부터 패킷(140)이 수신되는 것으로 시작한다. 일반적으로, 패킷 데이터는 데이터의 비트스트림으로서 네트워크의 링크를 통해 전송된다. 예를 들면, 이더넷 네트워크의 경우, 패킷 데이터는 이더넷 프레임의 스트림으로서 전송된다. 포트1에서, 적용가능한 물리층(PHY) 동작이 수행되어, 가상 기기(136)에 의해 프로세싱될 패킷 데이터를 캡슐화하는 이더넷 패킷을 추출한다. 추출된 이더넷 패킷은 포트1의 Rx 버퍼(118)에 버퍼링된다.
다음에, 블록 204에서, 이더넷 패킷으로부터 IP 패킷이 추출된다. 옵션적으로, 해당되는 경우, 레이어 4 이상의 레벨의 패킷이 추출될 수도 있다. 일반적으로, 블록 204의 동작은, 네트워크 인터페이스(104), 네트워크 스택(142)으로서 묘사된 OS 소프트웨어 기반 네트워킹 컴포넌트, 또는 분할 프로세싱 방식을 사용하는 2개의 조합 중 어느 하나에 의해 수행될 수도 있다. 예를 들면, 몇몇 더 최근의 NIC는 레이어 3(IP) 패킷 프로세싱 동작을 지원하고, TCP(Transaction Control Protocol; 트랜잭션 제어 프로토콜) 패킷 프로세싱 동작을 또한 지원할 수도 있다. 다른 레이어 4 및 그 이상의 패킷 프로세싱은, 보통, 네트워크 스택(142)의 소프트웨어 컴포넌트를 통해 수행될 것이지만, 이들은 NIC 또는 유사한 네트워크 인터페이스에 의해 또한 구현될 수도 있다.
블록 206에서, 패킷의 플로우 분류가 수행된다. 이것은, 보통, (만약 있다면) 수신되는 패킷이 속하는 패킷 플로우를 식별하기 위해 패킷 헤더 또는 헤더들의 적용가능한 헤더 필드를 검사하는 것을 수반할 것이다. 하기에 더 상세히 설명되는 바와 같이, 몇몇 실시형태에서, 패킷 플로우 정보는 패킷 헤더 필드에 명시적으로 정의된다. 또한, 패킷 플로우 분류는 다수의 필드의 데이터를 사용하여, 예컨대 널리 공지된 N 터플(N-tuple) 패킷 분류 기술의 사용을 통해 수행될 수도 있다.
일반적으로, 패킷 헤더 검사는 다음 방식 중 하나 이상을 사용하여 행해질 수도 있다. 일 실시형태에서, 패킷은 포트(116)의 Rx 버퍼로부터 OS 메모리(107)의 Rx 버퍼(144)로 (예를 들면, DMA 기록 동작을 사용하여) DMA된다. 예를 들면, 일 실시형태에서, NIC 포트 Rx 버퍼에서의 메모리 공간은, 순환(circular) FIFO(First-in, First-out; 선입선출) 포인터를 활용하는 FIFO 큐에 대해 할당되고, FIFO 헤드 포인터는 Rx 버퍼(144)로 DMA되는 패킷을 가리킨다. 일 실시형태에 따른, FIFO 큐가 동작하는 방법의 추가 상세는 도 3에 도시되고 하기에서 설명된다. 대안적으로, 패킷 헤더만이 Rx 버퍼(144)로 DMA된다. 또 다른 옵션에서, 패킷 헤더 데이터는, 패킷 데이터 또는 헤더 중 어느 하나의 Rx 버퍼(144)로의 복사 없이 "제 자리에서(in place)" 판독된다. 이 경우, 적은 수의 패킷에 대한 패킷 헤더 데이터는, 호스트 OS(106)의 플로우 분류기(flow classifier; 146) 또는 네트워크 스택(142)과 관련되는 버퍼로 판독된다. 마찬가지로, 네트워크 인터페이스(104)에 의해 수행되는 플로우 분류의 경우, 패킷 헤더는 제 자리에서 판독될 수도 있지만; 이 경우 버퍼는 MMIO(122)(도시되지 않음)와는 통상적으로 분리될 네트워크 인터페이스(104)의 메모리에 위치된다.
플로우 분류의 결과는 패킷에 대한 플로우 식별자(플로우 ID)를 리턴한다. 일 실시형태에서, 플로우 ID는, 명시적인 플로우 ID 없이 수신되는, 또는 대안적으로, 플로우 ID 태그가 첨부되는(예를 들면, 프리펜딩된) 패킷에 대한 패킷 헤더 필드에 추가되거나, 또는 패킷은 플로우 ID에 대한 필드를 포함하는 "래퍼(wrapper)"에 캡슐화된다.
도 1에 도시된 바와 같이, 예시된 실시형태에서, 패킷 분류는 플로우 분류기(146)에 의해 수행된다. 옵션적으로, 플로우 분류는 유사한 플로우 분류기(146a)를 통해 네트워크 인터페이스(104)에서 수행될 수도 있다. 일 실시형태에서, 분할 분류 방식이 구현되는데, 분할 분류 방식 하에서는 기존 플로우(예를 들면, 이전에 분류된 플로우)가 플로우 분류기(146a)에 의해 네트워크 인터페이스(104)에서 식별되지만, 기존 플로우에 속하지 않는 패킷은 새로운 패킷 플로우에 대응하는 패킷 분류를 위해 플로우 분류기(146)로 포워딩된다. 그 다음, 새로운 패킷 플로우에 대한 정보가 플로우 분류기(146a)로 제공된다. 다른 실시형태에서, 플로우 분류기(146a)에 의해 유지되는 분류된 플로우의 리스트는 플로우 분류기(146)에 의해 유지되는 완전한 리스트보다 더 적고, 보다 최근의 패킷에 관계있는 플로우가 NIC 상의 플로우 분류기(146a)에서 유지되고 덜 최근의 패킷에 대한 플로우가 대체되는 메모리 캐시와 유사하게 동작한다.
블록 206에 추가로 묘사된 바와 같이, 플로우 ID는 플로우 테이블(148)에 대한 룩업으로서 사용되며, 플로우 테이블은 가상 스위치(109)의 일부인 것으로 묘사된다. 일 실시형태에서, 플로우 테이블은 플로우 ID의 칼럼 및 vNIC Rx 포트 ID의 칼럼을 포함하고, 그 결과 입력 플로우 ID가 주어지면, 룩업이 대응하는 vNIC Rx 포트 ID를 리턴할 것이다. 또한, 플로우 테이블(148)는, LSC 태그에 대해 또는 패킷 래퍼의 필드에 대해 사용될 수도 있거나, 또는 다르게는 패킷과 관련될 수도 있는 LSC ID를 포함할 수도 있다. 옵션적으로, LSC 태그는 로컬 서비스 체인의 제1 가상 기기에 의해 추가될 수도 있다.
플로우 테이블(148)이 가상 스위치(109)에서 구현되는 것 외에, 플로우 테이블의 전체 또는 일부는 호스트 OS(106) 또는 네트워크 인터페이스(104)(이들 중 어느 것도 도 1에 도시되지 않음)에서 구현될 수도 있다. 네트워크 인터페이스(104)에서 플로우 테이블의 전체 또는 일부를 활용하는 실시형태에서, 플로우 테이블 엔트리는 호스트 OS(106)의 소프트웨어에 의해 일반적으로 결정될 것이고 NIC 드라이버(124)에 의해 제공되는 인터페이스를 통해 채워질(populated) 것이다.
vNIC Rx 포트 ID가 식별되면, 패킷 데이터는 적용가능한 Rx 버퍼 어드레스에 기록된다. 도 1에 예시된 예에서, 이 Rx 포트는 V1 Rx(가상 머신(VM 1)의 vNIC 1에 대한 Rx 포트)로 라벨링된다. 일 실시형태에서, 패킷 데이터는 메모리 기록 동작을 사용하여 OS 메모리(107)(도시되지 않음)의 Rx 버퍼로부터 복사되고, 메모리 기록 동작 하에서, 데이터는 OS 메모리 Rx 버퍼로부터 적용가능한 Rx 버퍼 어드레스로 복사된다. 다른 실시형태에서, 패킷 데이터는 DMA 기록을 사용하여 MMIO(122)의 포트1의 Rx 버퍼로부터 vNIC Rx 버퍼로 직접적으로 기록된다. 예를 들면, 그들의 헤더가 제 자리에서 검사된 패킷의 경우, 직접 DMA 기록이 수행될 수도 있다.
일 실시형태에서, vNIC Rx 버퍼는 순환 FIFO 포인터를 갖는 FIFO 큐로서 구현된다. 이 구성을 활용하는 일 실시형태의 상세는 도 3에 도시된다. 도 3의 하부를 향해 예시된 바와 같이, 각각의 vNIC Rx 포트(130)는 관련 vNIC Rx FIFO 큐(300)를 포함한다. 각각의 vNIC Rx FIFO 큐(300)는 다수의 FIFO "슬롯"으로 분할되는 어드레스 공간을 포함하고; 예시된 실시형태 하에서는, FIFO 큐마다 256개의 슬롯이 있지만, FIFO 슬롯의 수는 변할 수도 있기 때문에, 이것은 단지 일 실시형태의 예시에 불과하다. 각각의 FIFO 슬롯에 대해 사용되는 사이즈도 또한 변할 수도 있다. 일 실시형태에서, 각각의 FIFO 슬롯의 사이즈는 애플리케이션 메모리 공간(108)에 대해 사용되는 캐시 라인의 사이즈와 동일하다. 각각의 vNIC Rx FIFO 큐(300)는 순환 FIFO 헤드 포인터 및 순환 FIFO 테일 포인터를 더 포함한다. 순환 FIFO 헤드 포인터는, FIFO 큐의 논리적 "최상부"에 현재 있는 FIFO 슬롯을 가리키지만, 테일 포인터는 FIFO 큐의 현재논리적 "최하부"에 대응하는 FIFO 슬롯을 가리킨다. 헤드 및 테일 포인터를 사용하는 FIFO 큐의 동작은 그 종래기술에서 널리 공지되어 있고, 따라서, 이들 동작의 추가 상세는 본원에선 제공되지 않는다.
일 실시형태에서, 각각의 vNIC는 하나 이상의 소프트웨어 모듈의 한 세트를 통해 구현된다. 객체 지향 디자인 하에서, 각각의 Rx FIFO 큐는 대응하는 클래스(예를 들면, Rx_FIFO_queue)의 인스턴스로서 구현될 수도 있다. 널리 공지된 바와 같이, 클래스는, 클래스 오브젝트(예를 들면, 데이터)에 대해 동작하는 기능을 구현하기 위한 방법과 다른 소프트웨어 컴포넌트(예를 들면, 다른 클래스)로/로부터 데이터를 전달/수신하기 위한 인터페이스를 제공한다.
일 실시형태에서, vNIC1 Rx FIFO 큐에 대한 Rx_FIFO_queue(클래스) 인스턴스로 DMA 기록 요청이 전송된다. DMA 기록 요청을 수신하는 것에 응답하여, Rx_FIFO_queue에서의 방법은, 테일 포인터에 의해 현재 가리켜지고 있는 FIFO 슬롯의 메모리 어드레스를 식별하고 그 어드레스를 DMA 기록 요청자(예를 들면, 네트워크 인터페이스(104) 상의 임베딩된 소프트웨어 모듈)로 리턴한다. 그 다음, DMA 엔진 등(도시되지 않음)은 MMIO(122)에서의 자신의 위치로부터 FIFO 슬롯에 대한 메모리 어드레스로 패킷 데이터를 기록한다. 패킷 데이터가 다수의 FIFO 슬롯에 걸치는 경우, 다수의 DMA 기록이 연달아 수행될 수도 있다. 예시적인 목적을 위해, 패킷 데이터는 vNIC Rx 포트의 표시 중 최하부에 기록되는 것으로 도시되지만; 그러나, 종래기술의 당업자는, 패킷 데이터가 기록되는 슬롯의 Rx FIFO 큐에서의 위치가 FIFO 테일 포인터에 의해 가리켜진 FIFO 버퍼의 논리적 "최하부"일 것이라는 것을 알 수 있을 것이다.
다음에, 블록 207에서, 플로우 ID 태그 또는 LSC 태그가 패킷 데이터에 첨부된다. 도 3에 도시된 바와 같이, 일 실시형태에서, (패킷 데이터가 기록되는 하나 이상의 슬롯 중) 제1 FIFO 슬롯에 기록되는 데이터는 패킷 헤더(304) 및 패킷 페이로드 데이터(306)를 포함하는 패킷 데이터에 프리펜딩되는 태그(302)를 포함한다. 일 실시형태에서, 태그(302)가 사용되어 LCS 태그(예를 들면, LSC ID 값)에 저장된다. 옵션적으로, 태그(302)는 플로우 ID를 저장하기 위해 사용될 수도 있다. 널리 공지된 바와 같이, IP 패킷(또는 다른 타입의 패킷)의 사이즈는 변할 수도 있지만, 패킷 프로토콜 헤더의 길이는 일반적으로 동일할 것이다(몇몇 프로토콜은, 사용시 헤더 길이를 변경하는 옵션적인 필드를 갖는 패킷 헤더를 정의함을 주목한다). 가변 길이 패킷 사이즈의 관점에서, 주어진 패킷에 대한 패킷 데이터는 하나 이상의 FIFO 슬롯에 기록될 수도 있다.
시작 및 종료 루프 블록인 208 및 218에 의해 나타내어진 루프에 의해 묘사된 바와 같이, 주어진 패킷 플로우(또는, 대안적으로, LSC 태그의 LSC ID에 의해 명시적으로 식별되는 바와 같이, 패킷 헤더 또는 래퍼)와 관련된 로컬 서비스 체인의 각각의 가상 기기에 대해 다수의 동작이 수행된다. 각각의 LSC는, 파이프라인식 서비스의 세트와 유사한 방식으로 시퀀스에서 함께 체인화되는 가상 네트워크 기기에 의해 수행되는 다수의 서비스를 포함한다. 예시적인 서비스는 NAT(Network Address Translation; 네트워크 어드레스 변환) 서비스, 방화벽 서비스, 패킷 프로세싱 서비스, WAN 최적화, 가상 사설 네트워크 게이트웨이, 비디오 트랜스코딩, 컨텐츠 분배 네트워크 서비스 등을 포함할 수도 있다. 예시적인 목적을 위해, 도 1은 기기 1에서 기기 2 … 기기 N으로의 체인화된 시퀀스를 도시한다. 그러나, LSC가 기기의 임의의 조합을 통과할 수도 있기 때문에 이것은 단지 예시에 불과하다. 또한, LSC는 증가하는 순서로 기기를 통과할 필요는 없다(예를 들면, LSC는 기기 3에서 기기 2로 그리고 기기 5로…될 수 있을 것이다). 다수의 기기가 동일한 서비스 또는 서비스의 세트를 수행하도록 구현되는 것도 또한 가능하다. 대안적으로, 주어진 기기는 상이한 패킷 플로우에 대해 상이한 서비스를 수행하도록 구성될 수도 있다.
플로우차트(200)의 프로세싱 루프로 돌아가면, 블록 210에서, LSC 체인의 현재가상 기기에 대한 LSC 및/또는 플로우에 대한 패킷 프로세싱 동작이 수행된다. 일 실시형태에서, 패킷 프로세싱 동작은, FIFO 헤드 포인터에 의해 가리켜진 vNIC Rx FIFO 큐의 주어진 패킷에 대해 패킷 프로세싱 동작이 수행될 것이다. 몇몇 가상 기기가 패킷 데이터를 판독하고 그 데이터를 사용하여 프로세싱을 수행할 것이지만(예를 들면, 패킷 데이터를 소지자 기기로 포워딩할 것이지만), 다른 가상 기기는 패킷을 수정할 수도 있다(예를 들면, 패킷 헤더의 하나 이상의 필드를 수정할 수도 있다). 패킷 데이터가 수정되는 경우, 패킷 데이터는 제 자리에서 수정될 수 있거나, 또는 패킷 데이터는 가상 기기에 대해 할당된 VM 상의 버퍼(도 1에 도시되지 않음)로 복사된 다음 수정될 수도 있다.
블록 212에서 계속하여, 주어진 가상 기기에 의해 수행되는 동작의 완료시, 패킷 데이터가 포워딩될 곳에 대한 결정이 이루어지고, 따라서, 패킷은 LSC의 다음 가상 기기에 의해, 또는 현재가상 기기가 LSC에서 최종 가상 기기인 경우, Tx 네트워크 포트가 그 패킷을 전송할 대상에 의해 식별될 수 있다. 일 실시형태에서, 이것은 로컬 플로우 테이블(150)에 대한 룩업으로서 LSC 태그 값을 사용하여 수행된다. 옵션적으로, 로컬 플로우 테이블은 LSC 태그 값 대신 또는 외에 플로우 ID를 포함할 수도 있다. 일반적으로, 로컬 플로우 테이블(150)는 플로우 테이블(148)와 유사한 방식으로 구성될 수도 있고, 그러나, LSC의 제1 가상 기기를 호스팅하는 VM에 대한 vNIC Rx 포트(또는 Rx FIFO 큐)를 가리키는 대신, 로컬 플로우 테이블은 LSC의 다음 가상 기기를 호스팅하는 VM에 대한 vNIC Rx 포트(또는 Rx FIFO 큐)를 가리킨다. 또한, 플로우 테이블(148)는 비LSC(non-LSC) 플로우에 관련 있는 정보를 포함할 수도 있음을(또는 다르게는, 이러한 정보는 가상 스위치(109)에 액세스가능한 별개의 표에 유지될 수도 있음을) 유의한다.
종래의 접근법 하에서, VM은 별개의 메모리 공간을 할당받고 데이터는 이들 별개의 메모리 공간 사이에서 가상 스위치의 사용을 통해 전송된다. 이것은 먼저 데이터를 vNIC Tx 포트로 복사하고, 그 데이터를 (메모리 기록을 통해) 가상 스위치의 Rx 포트로 포워딩하고, 가상 스위치를 통해 데이터가 기록될 vNIC Rx 포트를 결정하고, 데이터를 그 vNIC Rx 포트에 연결된 가상 스위치 Tx 포트에 복사 또는 기록하고, 그 다음 데이터를 vNIC Rx 포트에 기록하는 것을 수반한다. 실제, 이들 기록의 각각은 FIFO 큐와 같은 버퍼를 대상으로 하고, 스위칭 프로세스는 상당한 양의 오버헤드를 수반한다. 또한, 다수의 패킷 플로우가 동시에 스위칭되는 경우, 가상 스위치 포트의 하나 이상으로서 혼잡에 대한 잠재성이 존재한다.
종래의 가상 스위치 동작을 더 잘 이해하기 위해, 일련의 가상 네트워크 기기(A, B, C, 및 D) - 그 각각은 자신이 수신하는 패킷에 관한 하나 이상의 동작을 수행함 - 에 의해 수행되는 동작을 수반하는 패킷 프로세싱 시퀀스를 고려한다. 이들 동작은 동작들(a, b, c,d)의 시퀀스가 각각의 가상 네트워크 기기(A, B, C, 및 D)에 의해 수행되도록 체이닝되고, 가상 네트워크 기기의 각각은 가상 스위치(S)에 연결된 별개의 VMA-D에 의해 호스팅된다. 기존 접근법 하에서, 패킷 플로우는 다음과 같이 핸들링될 것이다: VMA -> S -> VMB -> S -> VMC -> S -> VMD의 순서. 가상 스위치(S)로 그리고 가상 스위치(S)로부터의 각각의 전송은 별개의 수신 및 송신 버퍼/큐의 사용을 필요로 하고, 별개의 수신 및 송신 버퍼/큐는, 가상 머신(VMA, VMB, VMC 및 VMD)이 공손히 연결되는 별개의 가상 스위치에 대해 구현된다.
본원의 실시형태의 양태에 따르면, "컷스루" 메커니즘이 구현되는데, 이 메커니즘하에서는 데이터가 LSC에서 현재 서비스를 수행하는 가상 기기를 호스팅하는 VM 상의 제1 vNIC Rx 버퍼(예를 들면, vNIC Rx FIFO 큐) 또는 버퍼로부터, LSC에서 다음 서비스를 수행할 가상 기기를 호스팅하는 VM의 vNIC Rx 버퍼(예를 들면, vNIC Rx FIFO 큐)로 직접적으로 기록된다. 이것은, 부분적으로, 공유 메모리 영역(134)의 사용을 통해 가능하게 된다: vNIC Rx FIFO 큐가 모든 VM에 액세스가능한 공유 메모리 영역 안에 있기 때문에, 임의의 VM은 가상 스위치를 우회하는 방식으로 임의의 다른 VM의 vNIC Rx FIFO 큐에 기록할 수 있다. 이것은 메모리 전송에서 상당한 감소를 제공할뿐만 아니라, 가상 스위칭 동작 동안 초래되는 대응하는 레이턴시를 제거한다.
결정 블록 214에 묘사된 바와 같이, 다음 버퍼가 vNIC Rx FIFO 큐이면, 플로우차트 로직은, 패킷 데이터가 식별된 vNIC Rx FIFO 큐에 직접적으로 기록되는 블록 216으로 진행하여, 가상 스위치(134)를 우회한다. 이전과 같이 그리고 묘사된 바와 같이, 패킷 데이터는 vNIC Rx 포트 표현의 최하부에 기록된다. 또한 이전과 같이, 이것은, FIFO 테일 포인터에 의해 현재 가리켜지고 있는 Rx FIFO 큐의 슬롯의 어드레스로 데이터를 기록하는 것에 의해 영향을 받을 수도 있다.
블록 212에서 플로우 ID 룩업이 다음 버퍼를 네트워크 Tx 포트로서 식별하면, 플로우차트 로직은 블록 220으로 진행하고, 블록 220에서는, 현재vNIC Rx FIFO 슬롯(들)(또는 현재가상 기기와 관련되면 로컬 버퍼)으로부터, MMIO(122)의 어드레스 공간에 위치된 네트워크 Tx 버퍼로의 패킷 데이터의 DMA 기록. 도 1에 예시된 예에서, 이것은 vNICN의 Rx FIFO 큐로부터 네트워크 인터페이스(104) 상의 포트M의 Tx 버퍼로의 데이터 패킷의 직접 전송으로서 묘사된다. 대안적으로, 직접 DMA 데이터 전송 대신, 패킷 데이터는 가상 스위치(109)를 통해 포워딩될 수도 있다. 일 실시형태에서, 패킷 데이터는 vNICN Rx FIFO 큐(또는 VM N 상의 버퍼)로부터 (vNICN의 Tx 포트를 통해 포워딩되는 대신) 가상 스위치 상의 네트워크 Tx 버퍼로 직접적으로 복사된다.
도 1의 우측 코너에 묘사된 바와 같이, 패킷(152)은 포트M의 Tx 포트로부터 네트워크로 송신된다. 일반적으로 패킷(140 및 152)의 헤더는 상이할 수도 있지만, 패킷 페이로드 데이터는 동일하게 유지될 수도 있다. 예를 들면, 주어진 패킷에 대한 패킷 헤더의 하나 이상의 필드는 가상 기기에 의해 수행되는 LSC 프로세싱 동작 동안 변경될 수도 있다. 몇몇 경우, 패킷 페이로드 데이터는 LSC에 의해 수행되는 서비스의 결과로서 또한 변할 수도 있다.
패킷(140)의 상기 프로세싱은 플로우 단위 기반으로(on a per-flow basis) 패킷을 프로세싱하는 한 기술을 예시한다. 일 실시형태에서, SDN 컨트롤러(114)는 플로우 테이블(148) 및 로컬 플로우 테이블(150)에 의해 사용되는 플로우 ID 및/또는 LSC 데이터를 관리하도록 구성된다. 주어진 패킷 플로우에 대한 패킷은, 위에서 논의된 바와 같이, 각각의 가상 기기에 의해 수행되는 서비스의 체인화된 시퀀스를 포함하는 LSC를 사용하여 서비스될 수도 있다. 일 실시형태에서, 플로우 테이블의 플로우 ID 또는 LSC ID에 대한 엔트리 포인트(예를 들면, 진입 Rx 포트, Rx 버퍼 또는 Rx FIFO 큐)는, 서비스 체인에 대한 다음 엔트리 포인트(예를 들면, 다음 Rx 포트, Rx 버퍼, 또는 Rx FIFO 큐)를 룩업하기 위해 사용된다. 따라서, 플로우 테이블은 2개 이상의 칼럼을 일반적으로 포함할 수도 있는데, 하나는 플로우 ID 또는 LSC ID를 포함하고 다른 하나는 다음 엔트리 포인트를 포함한다. 다른 실시형태에서, 네트워크로부터 수신된 패킷을 제1 가상 기기에 포워딩하기 위해 플로우 ID가 사용되며, 그 다음 제1 가상 기기는 플로우 ID에서 LSC ID로의 매핑을 행하고 추가 프로세싱을 위해 LSC 태그를 패킷에 첨부한다.
플로우 단위 구현에서 사용되는 LSC는 SDN 컨트롤러(114)에 의해 사전구성되거나, 또는 플로우가 처음으로 나타날 때 결정될 수도 있다. 예를 들면, 오픈플로우(OpenFlow) 프로토콜에 따르면, 패킷 플로우 및 대응하는 LSC는 런타임 동작 동안 결정될 수도 있다. LSC에 대한 특정 시퀀스 체인은 SDN 컨트롤러의 로직, 중앙 SDN 컨트롤러(또는, 오케스트레이터(orchestrator)) 등과 같은 다른 컴포넌트의 로직, 또는 SDN 컨트롤러 컴포넌트와 관련 컴포넌트의 조합에 의해 결정될 수도 있다.
도 4는 플로우 테이블(148), 테이블1, 테이블2, 및 테이블N에 대한 예시적인 테이블의 세트를 묘사한다. 플로우 테이블(148)은 플로우 ID를 포함하는 플로우 ID 칼럼, 진입 포트ID를 포함하는 진입 포트 칼럼, 및 LSC ID를 포함하는 LSC ID 칼럼을 포함한다. 테이블1, 테이블2 및 테이블N의 각각은 LCD ID 칼럼, 다음 포트 칼럼, 및 서비스 칼럼을 포함한다. 일 실시형태에서, 테이블(148), 테이블1, 테이블2, 및 테이블N의 각각에 대한 테이블 데이터는 SDN 컨트롤러(114)에 의해 관리된다. 일반적으로, 테이블 데이터는 계산 플랫폼의 초기화 동안 및/또는 런타임 동작 동안 채워질 수도 있다.
일 실시형태에서, 테이블 데이터는 다음과 같이 구현된다. 플로우 분류와 연계하여, 패킷에 대한 플로우 ID가 결정된다. 이것은 플로우 테이블(148)에 대한 룩업으로서 사용된다. 플로우 ID로부터, 서비스 체인의 제1 가상 기기를 호스팅하는 VM의 진입 포트가 식별될 수 있다. LSC ID도 또한 결정될 수 있다. 옵션으로서, 플로우 테이블(148)은 LSC ID 칼럼을 포함하지 않을 수도 있고, 플로우 ID에서 LSC ID로의 매핑은 각각의 LSC의 제1 가상 기기에 의해 수행된다.
도시된 바와 같이, 진입 포트는 각각의 플로우에 대해 동일할 필요가 없다. 수행될 서비스에 따라, LSC는 하나 이상의 가상 기기를 스킵할 수도 있다. 또한, 주어진 가상 기기에 의해 수행되는 서비스는, LSC ID에 따라, 또한 상이할 수도 있다. 서비스 칼럼의 'A', 'B', 및 'C'의 사용은, 각각의 플로우 테이블(150)이 대응하는 가상 기기에 의해 수행되는 서비스에 대응한다. 서비스 칼럼의 포함은 옵션적이며, 몇몇 구현예 하에서와 같이, 주어진 가상 기기는 자신이 서비스를 제공하는 모든 LSC(또는 플로우)에 대해 동일한 서비스를 수행할 것이다. 게다가, 네트워크 어댑터/NIC에서의 진입 포트는, 특정 LSC에 따라, 또한 상이할 수도 있다.
도 4a는 플로우 테이블(150)에 대해 LSC ID 대신 플로우 ID를 활용하는 대안적인 플로우 테이블 방식을 예시한다. 플로우 ID에서 LSC로의 매핑은, 플로우 ID가 LSC ID 대신 사용될 수도 있도록 SDN 컨트롤러(114)에 의해 내부적으로 수행된다. 프로세싱 로직의 나머지는 동일하게 유지된다.
플로우 단위 로컬 서비스 체이닝 외에, 계산 플랫폼은, 네트워크 인터페이스에 의해 수신되는 모든 패킷 또는 네트워크 인터페이스의 미리 결정된 포트에서 수신되는 모든 패킷에 대해 동일한 서비스의 세트를 수행하도록(그에 따라 동일한 LSC를 구현하도록) 사전구성될 수도 있다. 도 4b는 단일의 미리 결정된 LSC를 구현하기 위한 플로우 테이블(148a), 플로우 테이블1, 플로우 테이블2, 및 플로우 테이블 N의 예시적인 테이블 데이터를 도시한다. 예시된 바와 같이, 모든 플로우에 대한 진입 포트는 vNIC1 Rx이다. 한편, 각각의 가상 기기에 대한 다음 포트는 LSC의 다음 가상 기기에 대한 vNIC Rx 포트이다. 예시적인 목적을 위해, 미리 결정된 LSC를 구현하기 위한 플로우 테이블 데이터가 도시된다. 실제, 미리 결정된 LSC를 구현하도록 소프트웨어 변수 및/또는 소프트웨어 명령을 구성하는 다른 기술이 사용될 수 있을 것이다. 예를 들면, 플로우 테이블의 사용 없이 LSC를 구현하기 위해, 소프트웨어는 가상 머신의 각각으로 다운로드될 수 있다. 마찬가지로, 네트워크 어댑터 또는 NIC는 모든 패킷을 LSC에 대한 진입 vNIC Rx 포트로 (예를 들면, DMA 기록을 통해) 포워딩하도록 구성될 수 있다.
도 1a는 미리 결정된 LSC를 사용한 패킷(140)의 프로세싱을 예시한다. 예시된 바와 같이, 패킷(140)은 포트1의 Rx 포트로부터 vNIC1의 Rx 포트로 DMA되어, 호스트 OS(106)에 의해 이전에 수행되었을 수도 있는 임의의 동작을 우회하고, 또한 가상 스위치(109)를 우회한다. 다른 실시형태 하에서, 패킷은 네트워크 인터페이스로부터 Rx 버퍼(144)로 그리고 그 다음 vNIC의 Rx 포트로 DMA될 수도 있다.
다른 방법에 따르면, LSC는 패킷 헤더에 추가되는 메타데이터를 사용하여 구현된다. 이 기술 하에서, 외부 플랫폼 상의 한 엔티티(예를 들면, 오케스트레이터 등)는 전체 서비스 체인의 엘리먼트를 결정할 수도 있고, 그 다음 서비스 체인이 LSC를 갖는 플랫폼에 도달하면, 플랫폼 상에서 동작하는 소프트웨어는 이 메타데이터를 사용하여 패킷 플로우를 결정한다. 이렇게 하여, LSC는, 다수의 플랫폼 상에서 동작하는 가상 기기를 통해 구현되는 더 큰 서비스 체인과 상호동작할 수 있다.
일반적으로, VM 배치가 오케스트레이터에 의해 이루어지는 네트워크 기능 가상화 시스템에서, 서비스 체인의 가상 기기를 호스팅하는 VM을 오케스트레이터가 인스턴스화하고, 그 결과 본원의 실시형태에 따라 로컬 서비스 체인을 구현하는 본질적 이익이 이용될 수 있는 것이 유익할 수도 있다. 예를 들면, 주어진 플로우에 대한 각각의 패킷에 대해 파이프라인 방식으로 동일한 서비스가 수행되기 때문에, FIFO 오버플로우(FIFO 큐에 더 이상의 패킷 데이터를 추가할 여유 공간이 없음)의 잠재적 이슈는 적절하게 사이즈가 정해진 FIFO 큐의 사용을 통해 제거될 수 있다. 이 접근법은, 가상 스위치에서의 트래픽 혼잡의 결과로서 발생할 수도 있는 임의의 레이턴시를 또한 제거하고; 이러한 레이턴시는, 단일의 패킷에 대한 레이턴시가 모든 후속 패킷에 대한 프로세싱 레이턴시로 귀결되기 때문에, 전체 서비스 체인의 프로세싱 성능의 감소로 귀결된다.
FIFO 큐가 도면에 예시되고 본원에서 설명되지만, 종래기술에서 공지된 바와 같은 다른 타입의 큐를 사용하는 것이 가능함을 유의한다. 그러나, 체인식 동작을 위해, FIFO 큐는 그들의 단순함 및 오버헤드 없음을 통해 본질적인 이점을 제공한다. 또한, 단일의 FIFO 큐가 각각의 vNIC Rx 포트에 대해 도시되지만, 하나 이상의 FIFO 큐가 활용될 수도 있다. 예를 들면, 각각의 플로우 및/또는 LSC에 대해 별개의 FIFO 큐가 사용될 수도 있다.
또한, 컴퓨터 플랫폼은 LSC 플로우 및 비LSC 플로우 둘 다를 지원하도록 구성될 수도 있다. 예를 들면, 플로우 분류 동안, 패킷은, LSC와 관련되지 않은 플로우에 속하는 것으로 식별될 수도 있다. 따라서, 패킷은 패킷 플로우를 프로세싱하기 위한 종래의 기술을 사용하여 프로세싱될 수 있다.
플로우 테이블(150)의 사용 외에, LSC와 관련되는 각각의 VM이 수신하는 각각의 패킷에 대해 어떤 액션이 취해져야 하는지를 각각의 VM이 결정하는 것을 가능하게 하기 위해 다른 기술이 사용될 수도 있다. 예를 들면, 일 실시형태에서, 패킷에 대해, 만약 있다면, 어떤 서비스가 수행되어야 하는지를 결정하기 위해 그리고 패킷이 포워딩되어야 할 다음 VM을 결정하기 위해, 진입 VM의 LSC 모듈은, 패킷을 수신하는 각각의 후속 VM에 의해 사용되는 적절한 LSC 라벨로 패킷을 태깅한다.
도 5는 플랫폼 하드웨어(502) 및 다양한 소프트웨어 기반 컴포넌트를 포함하는 예시적인 호스트 플랫폼 구성(500)을 도시한다. 플랫폼 하드웨어(502)는, 인터커넥트(510)를 통해 메모리 인터페이스(506) 및 IO(입/출력) 인터페이스(508)에 커플링된 CPU(central processing unit; 중앙 처리 유닛; 504)를 포함한다. 몇몇 실시형태에서, 상기 컴포넌트의 모두 또는 일부는 SoC(System on a Chip; 시스템 온 칩) 상에 통합될 수도 있다. 메모리 인터페이스(506)는, SoC와는 일반적으로 분리될 시스템 메모리(512)에 대한 액세스를 가능하게 하도록 구성된다.
I/O 인터페이스(508)는 플랫폼 하드웨어(502)에 의해 제공되는 다양한 I/O 인터페이스를 예시한다. 일반적으로, I/O 인터페이스(508)는 별개의 컴포넌트(예컨대 ICH(I/O controller hub; I/O 컨트롤러 허브) 등)로서 구현될 수도 있거나, 또는 SoC 상에서 구현될 수도 있다. 또한, I/O 인터페이스(508)는 I/O 계층, 예컨대 PCIe™(Peripheral Component Interconnect Express; 주변기기 컴포넌트 인터커넥트 익스프레스) I/O 계층으로서 또한 구현될 수도 있다. I/O 인터페이스(508)는 다양한 I/O 리소스와 디바이스 및 다른 플랫폼 컴포넌트 사이의 통신을 또한 가능하게 한다. 이들은 불휘발성 스토리지 디바이스, 예컨대 디스크 컨트롤러(516)를 통해 I/O 인터페이스(508)에 통신가능하게 커플링되는 디스크 드라이브(514), 펌웨어 스토어(518), NIC(520), 및 총체적으로 기타 하드웨어(522)로 묘사되는 다양한 다른 I/O 디바이스를 포함한다.
일반적으로, CPU(504)는 단일의 코어 프로세서 또는 예컨대 M개의 코어(505)에 의해 묘사된 다중 코어 프로세서를 포함할 수도 있다. 다수의 코어는, 디스크 드라이브(514)에 의해 묘사된 바와 같은 하나 이상의 불휘발성 스토리지 디바이스에 저장된 다양한 소프트웨어 컴포넌트(424), 예컨대 모듈 및 애플리케이션을 실행하기 위해 활용된다. 더 일반적으로는, 디스크 드라이브(514)는, 자기 기반의 그리고 광학 기반의 스토리지 디바이스 둘 다뿐만 아니라, SSD(solid state drive; 솔리드 스테이트 드라이브) 또는 플래시 메모리와 같은 솔리드 스테이트 스토리지 디바이스를 포함하는 다양한 타입의 불휘발성 스토리지 디바이스를 대표한다. 옵션적으로, 소프트웨어 컴포넌트(524)의 전체 또는 일부는, 네트워크(526)를 통해 액세스되는 하나 이상의 스토리지 디바이스(도시되지 않음) 상에 저장될 수도 있다.
부트업 또는 런타임 동작 동안, 다양한 소프트웨어 컴포넌트(524) 및 펌웨어 컴포넌트(528)는 시스템 메모리(512)(FW 공간에 의해 묘사됨)로 로딩되고 실행 스레드 등을 포함하는 프로세스로서 코어(505) 상에서 실행된다. 특정 프로세서 또는 SoC 아키텍쳐에 따라서, 주어진 "물리적" 코어는 하나 이상의 논리적 코어로서 구현되어, 프로세스들이 다양한 논리적 코어에 할당된다. 예를 들면, Intel® Hyperthreading™ 아키텍쳐 하에서, 각각의 물리적 코어는 2개의 논리적 코어로서 구현된다.
플랫폼 하드웨어(502)에 대한 통상의 시스템 부팅 하에서, 펌웨어(528)는 시스템 메모리(512)에서 로딩되어 구성될 것이고, 후속하여 호스트 OS(530)를 부팅한다. 후속하여, 호스트 OS(530) 상에서 실행되는 애플리케이션을 일반적으로 포함하는 하이퍼바이저(532)가 론칭될 것이다. 그 다음, 하이퍼바이저(532)는 다양한 가상 머신(VM1- N )을 론칭하기 위해 활용될 수도 있는데, 각각의 가상 머신은 시스템 메모리(12)의 다양한 부분(즉, 어드레스 공간)을 사용하도록 구성될 것이다. 그 다음, 각각의 가상 머신(VM1- N )은 각각의 오퍼레이팅 시스템(5341- N )을 호스팅하기 위해 활용될 수도 있다.
런타임 동작 동안, 하이퍼바이저(532)는, 시스템 메모리(512), 코어(505), 및 디스크 드라이브(들)(514)과 같은 다양한 시스템 리소스의 재구성을 가능하게 한다. 일반적으로, 가상 머신은 그들의 오퍼레이팅 시스템과 기저의 플랫폼 하드웨어(502) 사이에서 (하이퍼바이저(532)와 연계한), 하드웨어 리소스가 VM1- N 사이에서 공유되는 것을 가능하게 하는 추상화(abstraction)를 제공한다. 각각의 호스팅되는 오퍼레이팅 시스템의 관점에서, 그 오퍼레이팅 시스템은 전체 플랫폼을 "소유"하며, 가상 머신 상에서 실행되는 다른 오퍼레이팅 시스템의 존재에 대해서는 알지 못한다. 실제, 각각의 오퍼레이팅 시스템은, 하이퍼바이저(532)에 의해 자신에게 할당된 리소스 및/또는 리소스 일부에 대해서만 단지 액세스를 갖는다.
도 5에 더 예시된 바와 같이, 각각의 오퍼레이팅 시스템은 커널 공간과 유저 공간을 포함하며, 이 둘은 시스템 메모리(512)의 메모리 공간으로서 구현된다. 커널 공간은 보호되고, 네트워크 스택을 포함하는 오퍼레이팅 시스템 커널 컴포넌트를 실행시키는 데 사용된다. 한편, 오퍼레이팅 시스템의 유저 공간은, 기기 1, 기기 2, 및 기기 N, 및 애플리케이션 1A~애플리케이션 1C, 애플리케이션 2A~애플리케이션 2C, 애플리케이션 NA~애플리케이션 NC에 의해 묘사된 바와 같은 유저 애플리케이션을 실행하는 데 사용된다.
일반적으로, 기기 1, 기기 2, 및 기기 N은, 플랫폼 하드웨어(502) 상의 가상 머신 상에서 실행될 수도 있는 다양한 SDN 또는 NFV 기기의 예시이다. 간략화를 위해, 각각의 VM1- N 은 소프트웨어 애플리케이션의 유사한 세트를 호스팅하는 것으로 묘사되지만; 주어진 플랫폼에 대한 VM이 유사한 애플리케이션을 호스팅할 수도 있거나, 또는 상이한 애플리케이션을 호스팅할 수도 있기 때문에, 이것은 단지 예시적인 목적을 위한 것이다. 마찬가지로, VM1- N 은 단일의 가상 네트워크 기기(도시되지 않음)를 호스팅할 수도 있거나, 다수의 가상 네트워크 기기를 호스팅할 수도 있거나, 또는 어떠한 가상 네트워크 기기도 호스팅하지 않을 수도 있다.
위에서 논의된 바와 같이, VM을 사용하여 컴퓨터 플랫폼을 가상화하는 것 외에, 가상화된 컨테이너를 활용하는 컨테이너 기반 OS 가상화가 구현될 수도 있다. 컨테이너 기반 가상화를 활용하는 실시형태의 예는 도 1b에 도시된 아키텍쳐(100b) 및 도 6의 플랫폼 구성(600)에서 묘사된다.
플랫폼 구성(600)에서 사용되는 하드웨어 구성은, 도시된 바와 같이, 플랫폼 구성(500)과 동일하다. 플랫폼 구성에서의 차이는 소프트웨어에서 발생한다. 플랫폼 구성(600)에서의 소프트웨어는 호스트 OS(602), OS 가상화층(604), 및 복수의 컨테이너(606)를 포함한다. 옵션적으로, 컨테이너는, 컨테이너 기반 가상화 소프트웨어를 공급하는 벤더 또는 컨테이너 기반 OS 가상화가 어떻게 작동하는지를 설명하는 저자에 따라, 가상 엔진, 가상 머신 또는 다른 용어로도 칭해질 수도 있다.
각각의 컨테이너는, 시스템 컴포넌트 및 애플리케이션 및/또는 유저 컴포넌트로 논리적으로 구획되는 애플리케이션과 소프트웨어 라이브러리의 세트를 포함한다. 시스템 컴포넌트는 시스템 라이브러리와 시스템 소프트웨어 모듈을 포함한다. 예시된 바와 같이, 각각의 컨테이너는 네트워킹 스택 시스템 모듈 등을 포함한다. 가상 기기는 애플리케이션/유저 공간에서 실행된다. 일반적으로, 가상 기기는, 그들이 VM 또는 컨테이너 상에서 동작하고 있는지의 여부를 그들이 알지 못하도록, 또는 다르게는 컨테이너에 의해 호스팅되는 것과는 대조적으로 VM 상에서 실행하도록 구성되는 가상 기기 사이에 마이너한 차이가 존재하도록 구성될 수도 있다.
도 1b의 아키텍쳐(100b)에 도시된 바와 같이, 아키텍쳐 컴포넌트는 아키텍쳐(100 및 100a)에 도시된 것들과 실질적으로 유사하고, 하이퍼바이저가 OS 가상화층(604)으로 대체되고 VM이 컨테이너(606)로 대체된 주요 차이를 갖는다. VM에서와 같이, 각각의 컨테이너는, vNIC, 하나 이상의 가상 기기(136), 및 대응하는 애플리케이션(138)뿐만 아니라 플로우 테이블(150)을 포함하는, 소프트웨어 컴포넌트의 유사한 세트를 포함한다.
IP 패킷 및 이더넷 패킷을 사용하는 것 외에, 내부 및 외부 IP 어드레스를 활용하는 VXLAN (Virtual Extension Local Area Network; 가상 확장 근거리 통신망) NVGRE (Network Virtualization using Generic Routing; 일반적 라우팅을 이용한 네트워크 가상화)와 같은 가상화 오버레이가 사용될 수도 있다. VXLAN 또는 NVGRE를 이용하는 로컬 서비스 체이닝을 구현하기 위해, 오버레이의 존재는, 위의 실시형태에서 설명된 바와 같이 IP의 프로세싱에 단지 추가될 것이다. VXLAN 및 NVGRE를 이용하여 패킷을 프로세싱하기 위한 추가적인 기술은 종래기술의 당업자에게 공지되어 있으며, 따라서 VXLAN 또는 NVGRE를 이용하여 실시형태를 구현하기 위한 추가적인 상세는 본원에서 설명되지 않는다.
본원에서 설명되는 주제의 추가 양태는 하기의 번호가 붙여진 조항(clause)에서 설명된다:
1. 복수의 VM(virtual machine; 가상 머신) 또는 가상화된 컨테이너(컨테이너)가 실행되는 계산 플랫폼 상에서 구현되는 방법으로서, 각각의 VM 또는 컨테이너는 SDN(software defined network; 소프트웨어 정의 네트워크)에서의 가상 스위치에 통신가능하게 커플링되는 vNIC(virtual network interface controller; 가상 네트워크 인터페이스 컨트롤러)를 포함하고, 상기 방법은:
상기 복수의 VM 또는 컨테이너에 의해 호스팅되는 복수의 가상 네트워크 기기를 통해 로컬 서비스 체인(local service chain; LSC)을 구현하는 단계 - 각각의 가상 네트워크 기기는 상기 LSC에 의해 프로세싱될 복수의 패킷의 각각에 대한 하나 이상의 서비스를 수행하도록 구성됨 - 와;
상기 가상 스위치를 사용하지 않고 VM 또는 컨테이너 사이에서 상기 복수의 패킷에 대응하는 패킷 데이터를 전송하는 단계를 포함하는, 방법.
2. 조항 1의 방법으로서, 상기 패킷 데이터는, 제1 수신(Rx) 버퍼를 구비하며 상기 LSC의 현재가상 네트워크 기기를 호스팅하는 제1 vNIC를 포함하는 제1 VM 또는 컨테이너로부터, 제2 Rx 버퍼를 구비하며 상기 LSC의 다음 가상 네트워크 기기를 호스팅하는 제2 VM 또는 컨테이너로, 패킷 데이터를 상기 제2 Rx 버퍼에 직접적으로 기록하는 것에 의해 전송되는, 방법.
3. 조항 2의 방법으로서, 상기 패킷 데이터는 상기 제1 Rx 버퍼로부터 상기 제2 Rx 버퍼로 복사되는, 방법.
4. 조항 3의 방법으로서, 상기 제1 및 제2 Rx 버퍼의 적어도 일부는, 각각의 선입선출(First-in, First-out; FIFO) 큐로서 구성되고, 주어진 패킷에 대한 패킷 데이터는 제1 FIFO 큐의 하나 이상의 슬롯으로부터 제2 FIFO 큐의 하나 이상의 슬롯으로 복사되는, 방법.
5. 조항 1 내지 조항 4 중 임의의 조항의 방법으로서,
복수의 LSC - 각각의 LSC는 그 LSC를 사용하여 프로세싱되는 패킷에 대해 수행될 서비스의 고유 시퀀스를 포함함 - 를 구현하는 단계와;
상기 복수의 LSC의 각각에 대해, 그 LSC에 할당된 패킷에 대한 패킷 데이터의 전송을 가능하게 하기 위한 메커니즘을 구현하는 단계 - 각각의 LSC에 대해, 상기 패킷 데이터는, 그 LSC에 대한 가상 네트워크 기기를 호스팅하는 VM 또는 컨테이너 사이에서 가상 스위치를 통과하지 않는 체인화된 방식으로 전송됨 - 를 더 포함하는, 방법.
6. 조항 5의 방법으로서, 상기 메커니즘은 각각의 VM 또는 컨테이너에 대한 각각의 로컬 플로우 테이블을 포함하고, 주어진 VM 또는 컨테이너에 대한 상기 로컬 플로우 테이블은, LSC의 다음 가상 네트워크 기기를 호스팅하는 VM 또는 컨테이너에 대한 Rx 버퍼 또는 vNIC 수신(Rx) 포트 중 적어도 하나를 식별하는, 방법.
7. 조항 6의 방법으로서, 각각의 VM 또는 컨테이너에 대한 상기 로컬 플로우 테이블을 SDN 컨트롤러를 사용하여 구성하는 단계를 더 포함하는, 방법.
8. 조항 1 내지 조항 7 중 임의의 조항의 방법으로서,
상기 복수의 VM 또는 컨테이너의 각각에 대한 각각의 애플리케이션 메모리 공간을 할당하는 단계 - VM 또는 컨테이너의 애플리케이션 메모리 공간에서 실행되는 애플리케이션은 다른 VM 또는 컨테이너의 상기 애플리케이션 메모리 공간에 액세스할 수 없음 - 와;
상기 VM 또는 컨테이너의 각각에 대한 가상 네트워크 인터페이스 컨트롤러(vNIC)에 의해 활용되는 수신 버퍼에 대해 활용되는 공유 메모리 공간을 할당하는 단계 - 각각의 VM 또는 컨테이너는 상기 공유 메모리 공간으로부터 판독하고 상기 공유 메모리 공간으로 기록하도록 인에이블됨 - 를 더 포함하는, 방법.
9. 조항 1 내지 조항 8 중 임의의 조항의 방법으로서, 상기 계산 플랫폼은, 상기 계산 플랫폼에 통신가능하게 커플링되는 적어도 하나의 네트워크 포트를 포함하는 네트워크 인터페이스를 포함하고, 상기 방법은:
상기 네트워크 인터페이스의 네트워크 포트에서 패킷을 수신하는 단계와;
상기 패킷이 속하는 플로우 또는 상기 패킷을 서비스하기 위해 사용될 LSC 중 적어도 하나를 결정하는 단계와;
상기 패킷을, 상기 네트워크 인터페이스로부터, 상기 LSC에 대해 정의된 제1 가상 네트워크 기기를 호스팅하기 위해 사용되는 VM 또는 컨테이너에 대한 vNIC의 수신 버퍼로 포워딩하는 단계를 더 포함하는, 방법.
10. 조항 9의 방법으로서, 상기 패킷은, 상기 패킷에 대한 패킷 데이터를, 다이렉트 메모리 액세스(Direct Memory Access; DMA) 데이터 전송을 사용하여, 상기 네트워크 인터페이스의 메모리 매핑된 입력-출력(memory-mapped input-output; MMIO) 어드레스 공간의 수신 버퍼로부터, 상기 vNIC의 상기 수신 버퍼로 복사하는 것에 의해 포워딩되는, 방법.
11. 조항 1 내지 조항 10 중 임의의 조항의 방법으로서, 상기 계산 플랫폼은, 상기 계산 플랫폼에 통신가능하게 커플링되는 적어도 하나의 네트워크 포트를 포함하는 네트워크 인터페이스를 포함하고, 상기 방법은:
상기 네트워크 인터페이스의 사전 정의된 네트워크 포트에서 네트워크로부터 수신되는 각각의 패킷에 대해,
상기 패킷에 대한 패킷 데이터를 상기 네트워크 인터페이스의 메모리 매핑된 입력-출력(MMIO) 어드레스 공간의 수신 버퍼에 버퍼링하는 단계와;
상기 패킷에 대한 상기 패킷 데이터를, 다이렉트 메모리 액세스(DMA) 데이터 전송을 사용하여, 상기 수신 버퍼로부터, 상기 LSC에 대해 정의된 제1 가상 네트워크 기기를 호스팅하기 위해 사용되는 VM 또는 컨테이너에 대한 vNIC의 수신 버퍼로 복사하는 단계를 더 포함하는, 방법.
12. 조항 1 내지 조항 11 중 임의의 조항의 방법으로서, 상기 계산 플랫폼은, 상기 계산 플랫폼에 통신가능하게 커플링되는 적어도 하나의 네트워크 포트를 포함하는 네트워크 인터페이스를 포함하고, 사전 정의된 네트워크 포트에서 수신되는 모든 패킷에 대해 동일한 LSC를 활용하는 단계를 더 포함하는, 방법.
13. 조항 1 내지 조항 12 중 임의의 조항의 방법으로서,
가상 기기가, 주어진 패킷에 대해 사용되는 LSC에서 최종 가상 기기임을 결정하는 단계와;
상기 패킷이 포워딩될 물리 네트워크 어댑터 상의 출력 포트를 결정하는 단계와;
상기 최종 가상 기기를 호스팅하는 VM 또는 컨테이너 상의 버퍼로부터, 상기 물리 네트워크 어댑터의 상기 출력 포트와 관련되는 버퍼로, 상기 가상 스위치를 우회하는 방식으로, 패킷 데이터를 포워딩하는 단계를 더 포함하는, 방법.
14. 조항 13의 방법으로서, 상기 계산 플랫폼은, 상기 계산 플랫폼에 통신가능하게 커플링되는 적어도 하나의 네트워크 포트를 포함하는 네트워크 인터페이스를 포함하고, 상기 방법은:
상기 네트워크 인터페이스의 사전 정의된 네트워크 포트에서 네트워크로부터 수신되는 각각의 패킷에 대해,
상기 패킷에 대한 패킷 데이터를 상기 네트워크 인터페이스의 메모리 매핑된 입력-출력(MMIO) 어드레스 공간의 수신 버퍼에 버퍼링하는 단계와;
상기 패킷에 대한 상기 패킷 데이터를, 다이렉트 메모리 액세스(DMA) 데이터 전송을 사용하여, 상기 수신 버퍼로부터, 상기 LSC에 대해 정의된 제1 가상 네트워크 기기를 호스팅하기 위해 사용되는 VM 또는 컨테이너에 대한 vNIC의 수신 버퍼로 복사하는 단계를 더 포함하는, 방법.
15. 복수의 VM 또는 컨테이너가 실행될 계산 플랫폼의 프로세서 상에서 실행되도록 구성된 복수의 명령이 저장된 비일시적 머신 판독가능 매체로서, 상기 복수의 명령의 실행은, 상기 계산 플랫폼으로 하여금 조항 1 내지 조항 14 중 임의의 조항의 방법을 수행하게 하는, 비일시적 머신 판독가능 매체.
16. 조항 1 내지 조항 14 중 임의의 조항의 방법을 구현하기 위한 수단을 포함하는, 계산 플랫폼.
17. 복수의 가상 머신(VM) 또는 가상화된 컨테이너(컨테이너)가 실행될 계산 플랫폼의 프로세서 상에서 실행되도록 구성된 복수의 명령이 저장된 비일시적 머신 판독가능 매체로서,
상기 VM 또는 컨테이너의 적어도 일부는 소프트웨어 정의 네트워크(software defined network; SDN)의 가상 스위치에 통신가능하게 커플링되는 가상 네트워크 인터페이스 컨트롤러(virtual network interface controller; vNIC)를 포함하고 가상 네트워크 기기를 호스팅하며, 상기 복수의 명령의 실행은 상기 계산 플랫폼으로 하여금:
복수의 상기 가상 네트워크 기기를 통해 로컬 서비스 체인(LSC)을 구현하게 하고 - 각각의 가상 네트워크 기기는 상기 LSC에 의해 프로세싱될 복수의 패킷의 각각에 대해 하나 이상의 서비스를 수행하도록 구성됨 - ;
상기 LSC의 현재 서비스를 수행하도록 구성된 제1 가상 네트워크 기기를 호스팅하는 제1 VM 또는 컨테이너에 액세스가능한 버퍼로부터, 상기 LSC의 다음 서비스를 수행하도록 구성된 제2 가상 네트워크 기기를 호스팅하는 제2 VM 또는 컨테이너의 vNIC의 수신(Rx) 버퍼로 패킷 데이터를 기록하는 것에 의해, 상기 복수의 패킷에 대응하는 패킷 데이터를 VM 또는 컨테이너 사이에서 전송하게 하는, 비일시적 머신 판독가능 매체.
18. 조항 17의 비일시적 머신 판독가능 매체로서, 상기 제2 VM 또는 컨테이너의 상기 vNIC의 상기 Rx 버퍼는 제2 Rx 버퍼를 포함하고, 상기 패킷 데이터는, 상기 제1 VM 또는 컨테이너에 대한 vNIC의 제1 Rx 버퍼로부터, 상기 제2 Rx 버퍼로 복사되는, 비일시적 머신 판독가능 매체.
19. 조항 17 또는 조항 18의 비일시적 머신 판독가능 매체로서, 상기 복수의 명령의 실행은 상기 계산 플랫폼으로 하여금 추가로:
상기 제1 및 제2 Rx 버퍼의 적어도 일부를 각각의 제1 및 제2 선입선출(First-in, First-out; FIFO) 큐로서 구성하게 하고;
주어진 패킷에 대한 패킷 데이터를, 상기 제1 FIFO 큐의 하나 이상의 슬롯으로부터, 상기 제2 FIFO 큐의 하나 이상의 슬롯으로 복사하게 하는, 비일시적 머신 판독가능 매체.
20. 조항 17 내지 조항 19 중 임의의 조항의 비일시적 머신 판독가능 매체로서, 상기 복수의 명령의 실행은 상기 계산 플랫폼으로 하여금 추가로:
복수의 LSC - 각각의 LSC는 그 LSC를 사용하여 프로세싱되는 패킷에 대해 수행될 서비스의 고유 시퀀스를 포함함 - 를 구현하게 하고;
가상 네트워크 기기를 호스팅하는 각각의 VM 또는 컨테이너에 대한 로컬 플로우 테이블을 구성하게 하는 - 주어진 VM 또는 컨테이너에 대한 상기 로컬 플로우 테이블은, 그 VM 또는 컨테이너에 의해 호스팅되는 가상 네트워크 기기에 의해 수행될 서비스를 포함하는 상기 LSC의 각각에 대한 엔트리를 포함하고, 각각의 LSC에 대한 상기 엔트리는 상기 LSC의 다음 가상 네트워크 기기를 호스팅하는 VM 또는 컨테이너에 대한 vNIC 수신(Rx) 포트 또는 Rx 버퍼 중 적어도 하나를 식별함 -, 비일시적 머신 판독가능 매체.
21. 조항 20의 비일시적 머신 판독가능 매체로서, 상기 복수의 명령은, 실행시, 각각의 VM 또는 컨테이너에 대한 상기 로컬 플로우 테이블을 구성하는 SDN 컨트롤러를 구현하기 위한 명령을 더 포함하는, 비일시적 머신 판독가능 매체.
22. 조항 17 내지 조항 21 중 임의의 조항의 비일시적 머신 판독가능 매체로서, 상기 복수의 명령의 실행은 상기 계산 플랫폼으로 하여금 추가로, 상기 VM 또는 컨테이너의 각각에 대한 vNIC에 의해 활용되는 수신 버퍼에 대해 활용되는 공유 메모리 공간을 할당하게 하고, 각각의 VM 또는 컨테이너는 상기 공유 메모리 공간으로부터 판독하고 상기 공유 메모리 공간에 기록하도록 인에이블되는, 비일시적 머신 판독가능 매체.
23. 조항 22의 비일시적 머신 판독가능 매체로서, 상기 복수의 명령의 실행은 상기 계산 플랫폼으로 하여금 추가로, 상기 복수의 VM 또는 컨테이너의 각각에 대한 각각의 애플리케이션 메모리 공간을 할당하게 하고, VM 또는 컨테이너의 애플리케이션 메모리 공간에서 실행되는 애플리케이션은 다른 VM 또는 컨테이너의 상기 애플리케이션 메몰 공간에 액세스할 수 없는, 비일시적 머신 판독가능 매체.
24. 조항 17 내지 조항 23 중 임의의 조항의 비일시적 머신 판독가능 매체로서, 상기 계산 플랫폼은, 상기 계산 플랫폼에 통신가능하게 커플링되는 적어도 하나의 네트워크 포트를 포함하는 네트워크 인터페이스를 포함하고, 상기 복수의 명령의 실행은 상기 계산 플랫폼으로 하여금 추가로:
상기 네트워크 인터페이스에서 수신되는 패킷이 속하는 플로우 또는 상기 패킷을 서비스하기 위해 사용될 LSC 중 적어도 하나를 결정하게 하고;
상기 패킷을, 상기 네트워크 인터페이스로부터, 상기 LSC에 대해 정의된 제1 가상 네트워크 기기를 호스팅하기 위해 사용되는 VM 또는 컨테이너에 대한 vNIC의 수신 버퍼로 포워딩하게 하는, 비일시적 머신 판독가능 매체.
25. 조항 24의 비일시적 머신 판독가능 매체로서, 상기 패킷은, 상기 패킷에 대한 패킷 데이터를, 다이렉트 메모리 액세스(DMA) 데이터 전송을 사용하여, 상기 네트워크 인터페이스의 메모리 매핑된 입력-출력(MMIO) 어드레스 공간의 수신 버퍼로부터, 상기 vNIC의 상기 수신 버퍼로 복사하는 것에 의해 포워딩되는, 비일시적 머신 판독가능 매체.
26. 조항 17 내지 조항 25 중 임의의 조항의 비일시적 머신 판독가능 매체로서, 상기 계산 플랫폼은, 상기 계산 플랫폼에 통신가능하게 커플링되는 적어도 하나의 네트워크 포트를 포함하는 네트워크 인터페이스를 포함하고, 상기 복수의 명령의 실행은 상기 계산 플랫폼으로 하여금 추가로:
상기 네트워크 인터페이스 상의 상기 메모리의 적어도 일부를 메모리 매핑된 입력-출력(MMIO) 어드레스 공간으로서 구성하게 하고;
상기 네트워크 인터페이스의 사전 정의된 네트워크 포트에서 네트워크로부터 수신되는 복수의 패킷의 각각에 대한 패킷 데이터를, 상기 MMIO 어드레스 공간의 수신 버퍼에 버퍼링하도록;
각각의 패킷에 대한 패킷 데이터를, 다이렉트 메모리 액세스(DMA) 데이터 전송을 사용하여, 상기 수신 버퍼로부터, 상기 LSC에 대해 정의된 제1 가상 네트워크 기기를 호스팅하기 위해 사용되는 VM 또는 컨테이너에 대한 vNIC의 수신 버퍼로 복사하도록, 상기 네트워크 인터페이스를 구성하게 하는 비일시적 머신 판독가능 매체.
27. 조항 17 내지 조항 26 중 임의의 조항의 비일시적 머신 판독가능 매체로서, 상기 복수의 명령의 실행은 상기 계산 플랫폼으로 하여금 추가로:
패킷이 속하는 플로우를 결정하게 하고;
상기 플로우에 속하는 패킷을 서비스하기 위해 사용될 LSC를 결정하게 하고;
상기 패킷을 서비스하기 위해 사용될 상기 LSC를 식별하는 표시(indicia)를 상기 패킷에 추가하게 하는, 비일시적 머신 판독가능 매체.
28. 계산 플랫폼으로서,
복수의 프로세서 코어를 포함하는 프로세서와;
상기 프로세서에 동작가능하게 커플링되는 시스템 메모리와;
적어도 하나의 네트워크 포트 및 메모리를 포함하며 상기 프로세서에 동작가능하게 커플링되는 네트워크 인터페이스 컨트롤러(network interface controller; NIC)와;
상기 프로세서 코어 중 하나 이상을 통해 실행되도록 구성되는 명령을 포함하는 복수의 명령들이 저장된 스토리지 디바이스를 포함하고, 상기 명령들은 상기 장치로 하여금:
복수의 가상 머신(VM) 또는 가상화된 컨테이너(컨테이너)를 인스턴스화하게 하고 - 각각의 VM 또는 컨테이너는 가상 네트워크 인터페이스 컨트롤러(vNIC)를 포함하고, 상기 VM 또는 컨테이너의 적어도 일부는 가상 네트워크 기기를 호스팅함 - ;
상기 NIC 상의 적어도 하나의 네트워크 포트 및 각각의 vNIC에 커플링되는 가상 네트워크 포트를 구비하는 가상 스위치를 포함하는 소프트웨어 정의 네트워크(SDN)를 상기 플랫폼 상에 구성하게 하고;
복수의 상기 가상 네트워크 기기를 통해 로컬 서비스 체인(LSC)을 구현하게 하고 - 각각의 가상 네트워크 기기는 상기 LSC에 의해 프로세싱될 복수의 패킷의 각각에 대해 하나 이상의 서비스를 수행하도록 구성됨 - ;
상기 LSC의 현재 서비스를 수행하도록 구성된 제1 가상 네트워크 기기를 호스팅하는 제1 VM 또는 컨테이너에 액세스가능한 버퍼로부터, 상기 LSC의 다음 서비스를 수행하도록 구성된 제2 가상 네트워크 기기를 호스팅하는 제2 VM 또는 컨테이너의 vNIC의 수신(Rx) 버퍼로 패킷 데이터를 기록하는 것에 의해, 상기 복수의 패킷에 대응하는 패킷 데이터를 VM 또는 컨테이너 사이에서 전송하게 하는, 계산 플랫폼.
29. 조항 28의 계산 플랫폼으로서, 상기 복수의 명령의 실행은 상기 계산 플랫폼으로 하여금 추가로:
복수의 LSC - 각각의 LSC는 그 LSC를 사용하여 프로세싱되는 패킷에 대해 수행될 서비스의 고유 시퀀스를 포함함 - 를 구현하게 하고;
가상 네트워크 기기를 호스팅하는 각각의 VM 또는 컨테이너에 대한 로컬 플로우 테이블을 구성하게 하는 - 주어진 VM 또는 컨테이너에 대한 상기 로컬 플로우 테이블은, 그 VM 또는 컨테이너에 의해 호스팅되는 가상 네트워크 기기에 의해 수행될 서비스를 포함하는 상기 LSC의 각각에 대한 엔트리를 포함하고, 각각의 LSC에 대한 상기 엔트리는 상기 LSC의 다음 가상 네트워크 기기를 호스팅하는 VM 또는 컨테이너에 대한 Rx 버퍼 또는 vNIC 수신(Rx) 포트 중 적어도 하나를 식별함 -, 계산 플랫폼.
30. 조항 28 또는 조항 29의 계산 플랫폼으로서, 상기 복수의 명령의 실행은 상기 계산 플랫폼으로 하여금 추가로, 상기 VM 또는 컨테이너의 각각에 대한 vNIC에 의해 활용되는 수신 버퍼에 대해 활용되는 공유 메모리 공간을 할당하게 하고, 각각의 VM 또는 컨테이너는 상기 공유 메모리 공간으로부터 판독하고 상기 공유 메모리 공간에 기록하도록 인에이블되는, 계산 플랫폼.
31. 조항 28 내지 조항 30 중 임의의 조항의 계산 플랫폼으로서, 상기 복수의 명령의 실행은 상기 계산 플랫폼으로 하여금 추가로:
상기 NIC에서 수신되는 패킷이 속하는 플로우 또는 상기 패킷을 서비스하기 위해 사용될 LSC 중 적어도 하나를 결정하게 하고;
상기 패킷을, 상기 NIC로부터, 상기 LSC에 대해 정의된 제1 가상 네트워크 기기를 호스팅하기 위해 사용되는 VM 또는 컨테이너에 대한 vNIC의 수신 버퍼로 포워딩하게 하는, 계산 플랫폼.
32. 조항 28 내지 조항 31 중 임의의 조항의 계산 플랫폼으로서, 상기 복수의 명령의 실행은 상기 계산 플랫폼으로 하여금 추가로:
상기 NIC 상의 상기 메모리의 적어도 일부를 메모리 매핑된 입력-출력(MMIO) 어드레스 공간으로서 구성하게 하고;
상기 네트워크 인터페이스의 사전 정의된 네트워크 포트에서 네트워크로부터 수신되는 복수의 패킷의 각각에 대한 패킷 데이터를, 상기 MMIO 어드레스 공간의 수신 버퍼에 버퍼링하도록;
각각의 패킷에 대한 패킷 데이터를, 다이렉트 메모리 액세스(DMA) 데이터 전송을 사용하여, 상기 수신 버퍼로부터, 상기 LSC에 대해 정의된 제1 가상 네트워크 기기를 호스팅하기 위해 사용되는 VM 또는 컨테이너에 대한 vNIC의 수신 버퍼로 복사하도록, 상기 NIC를 구성하게 하는, 계산 플랫폼.
33. 계산 플랫폼으로서,
적어도 하나의 네트워크 포트 및 메모리를 포함하는 네트워크 인터페이스 컨트롤러(NIC)와,
복수의 가상 머신(VM) 또는 가상화된 컨테이너(컨테이너)를 인스턴스화하고 - 각각의 VM 또는 컨테이너는 가상 네트워크 인터페이스 컨트롤러(vNIC)를 포함하고, 상기 VM 또는 컨테이너의 적어도 일부는 가상 네트워크 기기를 호스팅함 - 과;
상기 NIC 상의 적어도 하나의 네트워크 포트 및 각각의 vNIC에 커플링되는 가상 네트워크 포트를 구비하는 가상 스위치를 포함하는 소프트웨어 정의 네트워크(SDN)를 상기 플랫폼 상에 구성하고;
복수의 상기 가상 네트워크 기기를 통해 로컬 서비스 체인(LSC)을 구현하고 - 각각의 가상 네트워크 기기는 상기 LSC에 의해 프로세싱될 복수의 패킷의 각각에 대해 하나 이상의 서비스를 수행하도록 구성됨 - ;
상기 LSC의 현재 서비스를 수행하도록 구성된 제1 가상 네트워크 기기를 호스팅하는 제1 VM 또는 컨테이너에 액세스가능한 버퍼로부터, 상기 LSC의 다음 서비스를 수행하도록 구성된 제2 가상 네트워크 기기를 호스팅하는 제2 VM 또는 컨테이너의 vNIC의 수신(Rx) 버퍼로 패킷 데이터를 기록하는 것에 의해, 상기 복수의 패킷에 대응하는 패킷 데이터를 VM 또는 컨테이너 사이에서 전송하기 위한
수단을 포함하는, 계산 플랫폼.
34. 조항 33의 계산 플랫폼으로서,
복수의 LSC - 각각의 LSC는 그 LSC를 사용하여 프로세싱되는 패킷에 대해 수행될 서비스의 고유 시퀀스를 포함함 - 를 구현하고;
가상 네트워크 기기를 호스팅하는 각각의 VM 또는 컨테이너에 대한 로컬 플로우 테이블을 구성하기 위한 - 주어진 VM 또는 컨테이너에 대한 상기 로컬 플로우 테이블은, 그 VM 또는 컨테이너에 의해 호스팅되는 가상 네트워크 기기에 의해 수행될 서비스를 포함하는 상기 LSC의 각각에 대한 엔트리를 포함하고, 각각의 LSC에 대한 상기 엔트리는 상기 LSC의 다음 가상 네트워크 기기를 호스팅하는 VM 또는 컨테이너에 대한 Rx 버퍼 또는 vNIC 수신(Rx) 포트 중 적어도 하나를 식별함 -
수단을 더 포함하는, 계산 플랫폼.
35. 조항 33 또는 조항 34의 계산 플랫폼으로서, 상기 VM 또는 컨테이너의 각각에 대한 vNIC에 의해 활용되는 수신 버퍼에 대해 활용되는 공유 메모리 공간을 할당하기 위한 수단 - 각각의 VM 또는 컨테이너는 상기 공유 메모리 공간으로부터 판독하고 상기 공유 메모리 공간으로 기록하도록 인에이블됨 - 을 포함하는, 계산 플랫폼.
36. 조항 33 내지 조항 35 중 임의의 조항의 계산 플랫폼으로서,
상기 NIC에서 수신되는 패킷이 속하는 플로우 또는 상기 패킷을 서비스하기 위해 사용될 LSC 중 적어도 하나를 결정하기 위한 수단과;
상기 패킷을, 상기 NIC로부터, 상기 LSC에 대해 정의된 제1 가상 네트워크 기기를 호스팅하기 위해 사용되는 VM 또는 컨테이너에 대한 vNIC의 수신 버퍼로 포워딩하기 위한 수단을 더 포함하는, 계산 플랫폼.
37. 조항 33 내지 조항 36 중 임의의 조항의 계산 플랫폼으로서,
상기 NIC 상의 상기 메모리의 적어도 일부를 메모리 매핑된 입력-출력(MMIO) 어드레스 공간으로서 구성하고;
상기 네트워크 인터페이스의 사전 정의된 네트워크 포트에서 네트워크로부터 수신되는 복수의 패킷의 각각에 대한 패킷 데이터를, 상기 MMIO 어드레스 공간의 수신 버퍼에 버퍼링하도록;
각각의 패킷에 대한 패킷 데이터를, 다이렉트 메모리 액세스(DMA) 데이터 전송을 사용하여, 상기 수신 버퍼로부터, 상기 LSC에 대해 정의된 제1 가상 네트워크 기기를 호스팅하기 위해 사용되는 VM 또는 컨테이너에 대한 vNIC의 수신 버퍼로 복사하도록,
상기 NIC를 구성하기 위한
수단을 더 포함하는, 계산 플랫폼.
몇몇 실시형태가 특정 구현예를 참조로 설명되었지만, 몇몇 실시형태에 따른 다른 구현예도 가능하다. 추가적으로, 도면에서 예시되는 및/또는 본원에서 설명되는 엘리먼트 또는 다른 피처의 배치 및/또는 순서는 예시되고 설명된 그 특정 방식으로 정렬될 필요는 없다. 몇몇 실시형태에 따라 많은 다른 배치예가 가능하다.
도면에서 도시된 각각의 시스템에서, 몇몇 경우의 엘리먼트 각각은, 표현되는 엘리먼트가 상이할 수도 있을 것이고/이거나 유사할 수도 있을 것이라는 것을 나타내기 위해, 동일한 참조부호 또는 상이한 참조부호를 가질 수도 있다. 그러나, 엘리먼트는, 상이한 구현예를 가지도록 그리고 본원에서 도시되거나 설명되는 시스템의 일부 또는 전체와 함께 작동하도록 충분히 유연할 수도 있다. 도면에서 도시되는 다양한 엘리먼트는 동일하거나 또는 상이할 수도 있다. 어떤 것이 제1 엘리먼트로 칭해지고 어떤 것이 제2 엘리먼트로 칭해지는 지는 임의적이다.
하기의 설명 및 특허청구범위에서, 용어 "커플링되는" 및 "연결되는"이 그들의 파생어와 함께 사용될 수도 있다. 이들 용어는 서로 동의어로서 의도된 것은 아님이 이해되어야 한다. 대신, 특정 실시형태에서, "연결되는"은, 2개 이상의 엘리먼트가 서로 물리적으로 또는 전기적으로 직접 접촉하고 있는 것을 나타내기 위해 사용될 수도 있다. "커플링되는"은, 2개 이상의 엘리먼트가 물리적으로 또는 전기적으로 직접 접촉하고 있는 것을 의미할 수도 있다. 그러나, "커플링되는"은, 2개 이상의 엘리먼트가 서로 직접적으로 접촉되지 않지만, 여전히 서로 함께 동작하거나 또는 상호작용하는 것을 또한 의미할 수도 있다.
실시형태는 본 발명의 구현 또는 예이다. "한 실시형태", "일 실시형태", "몇몇 실시형태", 또는 다른 실시형태" 에 대한 명세서에서의 언급은, 그 실시형태와 연계하여 설명되는 특정 피처, 구조, 또는 특성이, 본 발명의 적어도 몇몇 실시형태에 포함되지만, 반드시 모든 실시형태에 포함되는 것은 아님을 의미한다. "한 실시형태", "일 실시형태", 또는 "일부 실시형태들"의 다양한 출현은 반드시 모두 동일한 실시형태들을 가리키는 것은 아니다.
본원에서 설명되고 예시되는 모든 컴포넌트, 피처, 구조, 특성 등이 특정 실시형태 또는 실시형태들에 포함될 필요는 없다. 예를 들면, 명세서에서 컴포넌트, 피처, 구조, 또는 특성이 포함될"수도 있다", 포함될"수도 있을 것이다", 포함될"수 있다" 또는 포함될"수 있을 것이다"라고 언급하면, 그 특정 컴포넌트, 피처, 구조, 또는 특성이 포함되도록 규정되는 것은 아니다. 명세서 또는 특허청구범위에서 "한(a)" 또는 "한(an)" 엘리먼트를 언급하면, 그것은 단지 하나의 엘리먼트만이 존재한다는 것을 의미하는 것은 아니다. 명세서 또는 특허청구범위에서 "한 추가적인" 엘리먼트를 언급하면, 그것은 그 추가적인 엘리먼트가 하나보다 많이 존재하는 것을 배제하는 것은 아니다.
상기 상세한 설명에서의 'M' 및 'N'과 같은 이탤릭체는 정수를 표현하기 위해 사용되며, 특정 문자의 사용은 특정 실시형태에 제한되지 않는다. 또한, 별개의 정수를 표현하기 위해 동일한 문자가 사용될 수도 있거나, 또는 상이한 문자가 사용될 수도 있다. 또한, 상세한 설명에서의 특정 문자의 사용은, 상세한 설명의 동일한 주제에 관련되는 특허청구범위에서 사용되는 문자와 일치할 수도 또는 일치하지 않을 수도 있다.
위에서 논의된 바와 같이, 본원의 실시형태의 다양한 양태는 대응하는 소프트웨어 및/또는 펌웨어 컴포넌트 및 애플리케이션, 예컨대 서버 또는 디바이스 프로세서 상에서 실행되는 소프트웨어 또는 임베딩된 프로세서 등에 의해 실행되는 소프트웨어 및/또는 펌웨어에 의해 가능하게 될 수도 있다. 따라서, 본 발명의 실시형태는, 몇몇 형태의 프로세싱 코어(예컨대 컴퓨터의 CPU, 다중 코어 프로세서 중 하나 이상의 코어), 프로세서 또는 코어 상에서 실행되는 가상 머신 상에서 실행되는 또는 다르게는 컴퓨터 판독가능 또는 머신 판독가능 비일시적 스토리지 매체 상에서 또는 그 매체 내에서 구현되거나 또는 실현되는 소프트웨어 프로그램, 소프트웨어 모듈, 펌웨어, 및/또는 분산형 소프트웨어로서 또는 그들을 지원하도록 사용될 수도 있다. 컴퓨터 판독가능 또는 머신 판독가능 비일시적 스토리지 매체는 머신(예를 들면, 컴퓨터)에 의해 판독가능한 형태로 정보를 저장하고 송신하기 위한 임의의 메커니즘을 포함한다. 예를 들면, 컴퓨터 판독가능 또는 머신 판독가능 비일시적 스토리지 매체는, 컴퓨터 또는 컴퓨팅 머신(예를 들면, 컴퓨팅 디바이스, 전자 시스템 등)에 의해 액세스가능한 형태로 정보를 제공하는(즉, 저장하고 및/또는 송신하는) 임의의 메커니즘, 예컨대 기록가능/기록불가능 매체(예를 들면, ROM(read only memory; 판독 전용 메모리), RAM(random access memory; 랜덤 액세스 메모리), 자기 디스크 스토리지 매체, 광학 스토리지 매체, 플래시 메모리 디바이스 등)를 포함할 수도 있다. 컨텐츠는 직접적으로 실행가능할 수도 있고("오브젝트" 또는 "실행가능한" 형태), 소스 코드, 또는 차이 코드("델타" 또는 "패치" 코드)일 수도 있다. 또한, 컴퓨터 판독가능 또는 머신 판독가능 비일시적 스토리지 매체는, 컨텐츠가 다운로드될 수 있는 스토리지 또는 데이터베이스일 수도 있다. 또한, 컴퓨터 판독가능 또는 머신 판독가능 비일시적 스토리지 매체는, 판매시 또는 전달시 컨텐츠가 저장되는 디바이스 또는 제품을 포함할 수도 있다. 따라서, 저장된 컨텐츠와 함께 디바이스를 전달하거나, 또는 통신 매체를 통한 다운로드용 컨텐츠를 제공하는 것은, 본원에서 설명되는 이러한 컨텐츠를 갖는 컴퓨터 판독가능 또는 머신 판독가능 비일시적 스토리지 매체를 포함하는 제조 물품을 제공하는 것으로서 이해될 수도 있다.
본원에서 설명된 프로세스, 서버, 또는 툴로서 위에서 언급된 다양한 컴포넌트는 설명되는 기능을 수행하기 위한 수단일 수도 있다. 본원에서 설명되는 다양한 컴포넌트에 의해 수행되는 동작 및 기능은 프로세싱 엘리먼트 상에서 실행되는 소프트웨어에 의해, 임베딩된 하드웨어 등을 통해, 또는 하드웨어와 소프트웨어의 임의의 조합에 의해 구현될 수도 있다. 이러한 컴포넌트는, 소프트웨어 모듈, 하드웨어 모듈, 특수 목적의 하드웨어(예를 들면, 애플리케이션 전용 하드웨어, ASIC, DSP 등), 임베딩된 컨트롤러, 하드웨어에 내장된(hardwired) 회로부, 하드웨어 로직 등으로서 구현될 수도 있다. 소프트웨어 컨텐츠(예를 들면, 데이터, 명령, 구성 정보 등)는, 실행될 수 있는 명령을 나타내는 컨텐츠를 제공하는, 컴퓨터 판독가능 또는 머신 판독가능 비일시적 스토리지 매체를 포함하는 제조 물품을 통해 제공될 수도 있다. 컨텐츠는 본원에서 설명되는 다양한 기능/동작을 수행하는 컴퓨터로 귀결될 수도 있다.
요약서에서 설명되는 것을 포함해서, 본원의 예시된 실시형태의 상기 설명은 총망라하는 것으로, 또는 본 발명을 개시된 정확한 형태로 제한하도록 의도된 것은 아니다. 본 발명의 특정 실시형태, 및 그 예가 예시적인 목적으로 본원에서 설명되지만, 본 발명의 범위 내에서 다양한 등가적인 수정예들이 가능하며, 이러한 사항은 당업자들이 알 수 있을 것이다.
이들 수정예는 상기 상세한 설명의 측면에서 본 발명에 대해 행해질 수 있다. 하기의 특허청구범위에서 사용되는 용어는 본 발명을, 명세서 및 도면에서 개시되는 특정 실시형태로 제한하는 것으로 간주되어선 안된다. 대신, 본 발명의 범위는, 특허청구범위 해석의 확립된 원칙에 따라 해석되어야 하는 하기의 특허청구범위에 의해 전적으로 결정된다.

Claims (25)

  1. 복수의 가상 머신(virtual machine; VM) 또는 가상화된 컨테이너(containers)가 실행되는 계산 플랫폼 상에서 구현되는 방법으로서,
    각각의 VM 또는 컨테이너는 소프트웨어 정의 네트워크(software defined network; SDN)에서의 가상 스위치에 통신가능하게 커플링되는 가상 네트워크 인터페이스 컨트롤러(virtual network interface controller; vNIC)를 포함하고,
    상기 방법은,
    상기 복수의 VM 또는 컨테이너들에 의해 호스팅되는 복수의 가상 네트워크 기기를 통해 로컬 서비스 체인(local service chain; LSC)을 구현하는 단계 - 각각의 가상 네트워크 기기는 상기 LSC에 의해 프로세싱될 복수의 패킷의 각각에 대한 하나 이상의 서비스를 수행하도록 구성됨 - 와,
    상기 가상 스위치를 사용하지 않고 VM들 또는 컨테이너들 사이에서 상기 복수의 패킷에 대응하는 패킷 데이터를 전송하는 단계를 포함하는
    방법.
  2. 제1항에 있어서,
    상기 패킷 데이터는, 제1 수신(Rx) 버퍼를 구비하며 상기 LSC의 현재가상 네트워크 기기를 호스팅하는 제1 vNIC를 포함하는 제1 VM 또는 컨테이너로부터, 제2 Rx 버퍼를 구비하며 상기 LSC의 후속 가상 네트워크 기기를 호스팅하는 제2 vNIC를 포함하는 제2 VM 또는 컨테이너로, 패킷 데이터를 상기 제2 Rx 버퍼에 직접적으로 기록하는 것에 의해 전송되는
    방법.
  3. 제2항에 있어서,
    상기 패킷 데이터는 상기 제1 Rx 버퍼로부터 상기 제2 Rx 버퍼로 복사되는
    방법.
  4. 제3항에 있어서,
    상기 제1 Rx 버퍼 및 상기 제2 Rx 버퍼의 적어도 일부는, 개별적인 선입선출(First-in, First-out; FIFO) 큐로서 구성되고, 주어진 패킷에 대한 패킷 데이터는 제1 FIFO 큐의 하나 이상의 슬롯으로부터 제2 FIFO 큐의 하나 이상의 슬롯으로 복사되는
    방법.
  5. 제 1항에 있어서,
    복수의 LSC - 각각의 LSC는 그 LSC를 사용하여 프로세싱되는 패킷에 대해 수행될 서비스의 고유 시퀀스를 포함함 - 를 구현하는 단계와,
    상기 복수의 LSC의 각각에 대해, 그 LSC에 할당된 패킷에 대한 패킷 데이터의 전송을 가능하게 하기 위한 메커니즘을 구현하는 단계 - 각각의 LSC에 대해, 상기 패킷 데이터는, 그 LSC에 대한 가상 네트워크 기기를 호스팅하는 VM들 또는 컨테이너들 사이에서 상기 가상 스위치를 통과(traverse)하지 않는 체인화된 방식으로 전송됨 - 를 더 포함하는
    방법.
  6. 제5항에 있어서,
    상기 메커니즘은 각각의 VM 또는 컨테이너에 대한 개별적인 로컬 플로우 테이블을 포함하고, 주어진 VM 또는 컨테이너에 대한 상기 로컬 플로우 테이블은, 상기 LSC의 다음 가상 네트워크 기기를 호스팅하는 VM 또는 컨테이너에 대한 Rx 버퍼 또는 vNIC 수신(Rx) 포트 중 적어도 하나를 식별하는
    방법.
  7. 제6항에 있어서,
    각각의 VM 또는 컨테이너에 대한 상기 로컬 플로우 테이블을 SDN 컨트롤러를 사용하여 구성하는 단계를 더 포함하는
    방법.
  8. 제 1항에 있어서,
    상기 복수의 VM 또는 컨테이너의 각각에 대한 개별적인 애플리케이션 메모리 공간을 할당하는 단계 - VM 또는 컨테이너의 애플리케이션 메모리 공간에서 실행되는 애플리케이션은 다른 VM 또는 컨테이너의 애플리케이션 메모리 공간에 액세스할 수 없음 - 와,
    상기 VM들 또는 컨테이너들의 각각에 대한 vNIC에 의해 활용되는 수신 버퍼에 대해 활용되는 공유 메모리 공간을 할당하는 단계 - 각각의 VM 또는 컨테이너는 상기 공유 메모리 공간으로부터 판독하고 상기 공유 메모리 공간으로 기록하도록 인에이블됨 - 를 더 포함하는
    방법.
  9. 제1항에 있어서,
    상기 계산 플랫폼은, 상기 계산 플랫폼에 통신가능하게 커플링되는 적어도 하나의 네트워크 포트를 포함하는 네트워크 인터페이스를 포함하고,
    상기 방법은,
    상기 네트워크 인터페이스의 네트워크 포트에서 패킷을 수신하는 단계와,
    상기 패킷이 속하는 플로우 또는 상기 패킷을 서비스하기 위해 사용될 LSC 중 적어도 하나를 결정하는 단계와,
    상기 패킷을, 상기 네트워크 인터페이스로부터, 상기 LSC에 대해 정의된 제1 가상 네트워크 기기를 호스팅하기 위해 사용되는 VM 또는 컨테이너에 대한 vNIC의 수신 버퍼로 포워딩하는 단계를 더 포함하는
    방법.
  10. 제9항에 있어서,
    상기 패킷은, 상기 패킷에 대한 패킷 데이터를, 다이렉트 메모리 액세스(Direct Memory Access; DMA) 데이터 전송을 사용하여, 상기 네트워크 인터페이스의 메모리 매핑된 입력-출력(memory-mapped input-output; MMIO) 어드레스 공간의 수신 버퍼로부터, 상기 vNIC의 상기 수신 버퍼로 복사하는 것에 의해 포워딩되는
    방법.
  11. 제1항에 있어서,
    상기 계산 플랫폼은, 상기 계산 플랫폼에 통신가능하게 커플링되는 적어도 하나의 네트워크 포트를 포함하는 네트워크 인터페이스를 포함하고,
    상기 방법은:
    상기 네트워크 인터페이스의 사전 정의된 네트워크 포트에서 네트워크로부터 수신되는 각각의 패킷에 대해,
    상기 패킷에 대한 패킷 데이터를 상기 네트워크 인터페이스의 메모리 매핑된 입력-출력(MMIO) 어드레스 공간의 수신 버퍼에 버퍼링하는 단계와;
    상기 패킷에 대한 상기 패킷 데이터를, 다이렉트 메모리 액세스(DMA) 데이터 전송을 사용하여, 상기 수신 버퍼로부터, 상기 LSC에 대해 정의된 제1 가상 네트워크 기기를 호스팅하기 위해 사용되는 VM 또는 컨테이너에 대한 vNIC의 수신 버퍼로 복사하는 단계를 더 포함하는
    방법.
  12. 복수의 가상 머신(VM) 또는 가상화된 컨테이너들이 실행될 계산 플랫폼의 프로세서 상에서 실행되도록 구성된 복수의 명령이 저장된 비일시적 머신 판독가능 매체로서,
    상기 VM 또는 컨테이너들의 적어도 일부는 소프트웨어 정의 네트워크(software defined network; SDN)의 가상 스위치에 통신가능하게 커플링되는 가상 네트워크 인터페이스 컨트롤러(virtual network interface controller; vNIC)를 포함하고 가상 네트워크 기기를 호스팅하며, 상기 복수의 명령의 실행은 상기 계산 플랫폼으로 하여금,
    복수의 상기 가상 네트워크 기기를 통해 로컬 서비스 체인(LSC)을 구현하게 하고 - 각각의 가상 네트워크 기기는 상기 LSC에 의해 프로세싱될 복수의 패킷의 각각에 대해 하나 이상의 서비스를 수행하도록 구성됨 - ,
    상기 LSC의 현재 서비스를 수행하도록 구성된 제1 가상 네트워크 기기를 호스팅하는 제1 VM 또는 컨테이너에 액세스가능한 버퍼로부터, 상기 LSC의 다음 서비스를 수행하도록 구성된 제2 가상 네트워크 기기를 호스팅하는 제2 VM 또는 컨테이너의 vNIC의 수신(Rx) 버퍼로 패킷 데이터를 기록하는 것에 의해, 상기 복수의 패킷에 대응하는 패킷 데이터를 VM들 또는 컨테이너들 사이에서 전송하게 하는
    비일시적 머신 판독가능 매체.
  13. 제12항에 있어서,
    상기 제2 VM 또는 컨테이너의 vNIC의 Rx 버퍼는 제2 Rx 버퍼를 포함하고, 상기 패킷 데이터는, 상기 제1 VM 또는 컨테이너에 대한 vNIC의 제1 Rx 버퍼로부터, 상기 제2 Rx 버퍼로 복사되는
    비일시적 머신 판독가능 매체.
  14. 제12항에 있어서,
    상기 복수의 명령의 실행은 상기 계산 플랫폼으로 하여금 또한,
    상기 제1 Rx 버퍼 및 상기 제2 Rx 버퍼의 적어도 일부를 개별적인 제1 선입 선출 큐 및 제2 선입선출(First-in, First-out; FIFO) 큐로서 구성하게 하고,
    주어진 패킷에 대한 패킷 데이터를, 상기 제1 FIFO 큐의 하나 이상의 슬롯으로부터, 상기 제2 FIFO 큐의 하나 이상의 슬롯으로 복사하게 하는
    비일시적 머신 판독가능 매체.
  15. 제12항에 있어서,
    상기 복수의 명령의 실행은 상기 계산 플랫폼으로 하여금 또한,
    복수의 LSC - 각각의 LSC는 그 LSC를 사용하여 프로세싱되는 패킷에 대해 수행될 서비스의 고유 시퀀스를 포함함 - 를 구현하게 하고,
    가상 네트워크 기기를 호스팅하는 각각의 VM 또는 컨테이너에 대한 로컬 플로우 테이블을 구성 - 주어진 VM 또는 컨테이너에 대한 상기 로컬 플로우 테이블은, 그 VM 또는 컨테이너에 의해 호스팅되는 가상 네트워크 기기에 의해 수행될 서비스를 포함하는 상기 LSC의 각각에 대한 엔트리를 포함하고, 각각의 LSC에 대한 상기 엔트리는 상기 LSC의 다음 가상 네트워크 기기를 호스팅하는 VM 또는 컨테이너에 대한 Rx 버퍼 또는 vNIC 수신(Rx) 포트 중 적어도 하나를 식별함 - 하게 하는
    비일시적 머신 판독가능 매체.
  16. 제12항에 있어서,
    상기 복수의 명령의 실행은 상기 계산 플랫폼으로 하여금 또한, 상기 VM 또는 컨테이너들의 각각에 대한 vNIC에 의해 활용되는 수신 버퍼에 대해 활용되는 공유 메모리 공간을 할당하게 하고,
    각각의 VM 또는 컨테이너는 상기 공유 메모리 공간으로부터 판독하고 상기 공유 메모리 공간에 기록하도록 인에이블되는
    비일시적 머신 판독가능 매체.
  17. 제12항에 있어서,
    상기 계산 플랫폼은, 상기 계산 플랫폼에 통신가능하게 커플링되는 적어도 하나의 네트워크 포트를 포함하는 네트워크 인터페이스를 포함하고, 상기 복수의 명령의 실행은 상기 계산 플랫폼으로 하여금 또한,
    상기 네트워크 인터페이스에서 수신되는 패킷이 속하는 플로우 또는 상기 패킷을 서비스하기 위해 사용될 LSC 중 적어도 하나를 결정하게 하고,
    상기 패킷을, 상기 네트워크 인터페이스로부터, 상기 LSC에 대해 정의된 제1 가상 네트워크 기기를 호스팅하기 위해 사용되는 VM 또는 컨테이너에 대한 vNIC의 수신 버퍼로 포워딩하게 하는
    비일시적 머신 판독가능 매체.
  18. 제17항에 있어서,
    상기 패킷은, 상기 패킷에 대한 패킷 데이터를, 다이렉트 메모리 액세스(DMA) 데이터 전송을 사용하여, 상기 네트워크 인터페이스의 메모리 매핑된 입력-출력(MMIO) 어드레스 공간의 수신 버퍼로부터, 상기 vNIC의 상기 수신 버퍼로 복사하는 것에 의해 포워딩되는
    비일시적 머신 판독가능 매체.
  19. 제12항에 있어서,
    상기 계산 플랫폼은, 상기 계산 플랫폼에 통신가능하게 커플링되는 적어도 하나의 네트워크 포트를 포함하는 네트워크 인터페이스를 포함하고, 상기 복수의 명령의 실행은 상기 계산 플랫폼으로 하여금 또한,
    상기 네트워크 인터페이스 상의 상기 메모리의 적어도 일부를 메모리 매핑된 입력-출력(MMIO) 어드레스 공간으로서 구성하게 하고,
    상기 네트워크 인터페이스의 사전 정의된 네트워크 포트에서 네트워크로부터 수신되는 복수의 패킷의 각각에 대한 패킷 데이터를, 상기 MMIO 어드레스 공간의 수신 버퍼에 버퍼링하고,
    각각의 패킷에 대한 패킷 데이터를, 다이렉트 메모리 액세스(DMA) 데이터 전송을 사용하여, 상기 수신 버퍼로부터, 상기 LSC에 대해 정의된 제1 가상 네트워크 기기를 호스팅하기 위해 사용되는 VM 또는 컨테이너에 대한 vNIC의 수신 버퍼로 복사하도록,
    상기 네트워크 인터페이스를 구성하게 하는
    비일시적 머신 판독가능 매체.
  20. 제12항에 있어서,
    상기 복수의 명령의 실행은 상기 계산 플랫폼으로 하여금 또한,
    패킷이 속하는 플로우를 결정하게 하고,
    상기 플로우에 속하는 패킷을 서비스하기 위해 사용될 LSC를 결정하게 하고,
    상기 패킷을 서비스하기 위해 사용될 상기 LSC를 식별하는 표시(indicia)를 상기 패킷에 추가하게 하는
    비일시적 머신 판독가능 매체.
  21. 계산 플랫폼으로서,
    복수의 프로세서 코어를 포함하는 프로세서와,
    상기 프로세서에 동작가능하게 커플링되는 시스템 메모리와,
    적어도 하나의 네트워크 포트 및 메모리를 포함하며 상기 프로세서에 동작가능하게 커플링되는 네트워크 인터페이스 컨트롤러(network interface controller; NIC)와;
    상기 프로세서 코어 중 하나 이상을 통해 실행되도록 구성된 명령을 포함하는 복수의 명령들이 저장된 스토리지 디바이스를 포함하고,
    상기 명령들은 상기 장치로 하여금,
    복수의 가상 머신(VM) 또는 가상화된 컨테이너들(containers)을 인스턴스화하게 하고 - 각각의 VM 또는 컨테이너는 가상 네트워크 인터페이스 컨트롤러(vNIC)를 포함하고, 상기 VM 또는 컨테이너들의 적어도 일부는 가상 네트워크 기기를 호스팅함 - ;
    상기 NIC 상의 적어도 하나의 네트워크 포트 및 개별적인 vNIC에 커플링되는 가상 네트워크 포트를 구비하는 가상 스위치를 포함하는 소프트웨어 정의 네트워크(SDN)를 상기 플랫폼 상에 구성하게 하고,
    복수의 상기 가상 네트워크 기기를 통해 로컬 서비스 체인(LSC)을 구현하게 하고 - 각각의 가상 네트워크 기기는 상기 LSC에 의해 프로세싱될 복수의 패킷의 각각에 대해 하나 이상의 서비스를 수행하도록 구성됨 - ,
    상기 LSC의 현재 서비스를 수행하도록 구성된 제1 가상 네트워크 기기를 호스팅하는 제1 VM 또는 컨테이너에 액세스가능한 버퍼로부터, 상기 LSC의 다음 서비스를 수행하도록 구성된 제2 가상 네트워크 기기를 호스팅하는 제2 VM 또는 컨테이너의 vNIC의 수신(Rx) 버퍼로 패킷 데이터를 기록하는 것에 의해, 상기 복수의 패킷에 대응하는 패킷 데이터를 VM들 또는 컨테이너들 사이에서 전송하게 하는
    계산 플랫폼.
  22. 제21항에 있어서,
    상기 복수의 명령의 실행은 상기 계산 플랫폼으로 하여금 또한,
    복수의 LSC - 각각의 LSC는 그 LSC를 사용하여 프로세싱되는 패킷에 대해 수행될 서비스의 고유 시퀀스를 포함함 - 를 구현하게 하고,
    가상 네트워크 기기를 호스팅하는 각각의 VM 또는 컨테이너에 대한 로컬 플로우 테이블을 구성 - 주어진 VM 또는 컨테이너에 대한 상기 로컬 플로우 테이블은, 그 VM 또는 컨테이너에 의해 호스팅되는 가상 네트워크 기기에 의해 수행될 서비스를 포함하는 상기 LSC의 각각에 대한 엔트리를 포함하고, 각각의 LSC에 대한 상기 엔트리는 상기 LSC의 다음 가상 네트워크 기기를 호스팅하는 VM 또는 컨테이너에 대한 Rx 버퍼 또는 vNIC 수신(Rx) 포트 중 적어도 하나를 식별함 - 하게 하는
    계산 플랫폼.
  23. 제21항에 있어서,
    상기 복수의 명령의 실행은 상기 계산 플랫폼으로 하여금 또한,
    상기 VM 또는 컨테이너의 각각에 대한 vNIC에 의해 활용되는 수신 버퍼에 대해 활용되는 공유 메모리 공간을 할당하게 하고,
    각각의 VM 또는 컨테이너는 상기 공유 메모리 공간으로부터 판독하고 상기 공유 메모리 공간에 기록하도록 인에이블되는
    계산 플랫폼.
  24. 제21항에 있어서,
    상기 복수의 명령의 실행은 상기 계산 플랫폼으로 하여금 또한,
    상기 NIC에서 수신되는 패킷이 속하는 플로우 또는 상기 패킷을 서비스하기 위해 사용될 LSC 중 적어도 하나를 결정하게 하고,
    상기 패킷을, 상기 NIC로부터, 상기 LSC에 대해 정의된 제1 가상 네트워크 기기를 호스팅하기 위해 사용되는 VM 또는 컨테이너에 대한 vNIC의 수신 버퍼로 포워딩하게 하는
    계산 플랫폼.
  25. 제21항에 있어서,
    상기 복수의 명령의 실행은 상기 계산 플랫폼으로 하여금 또한,
    상기 NIC 상의 상기 메모리의 적어도 일부를 메모리 매핑된 입력-출력(MMIO) 어드레스 공간으로서 구성하게 하고,
    상기 네트워크 인터페이스의 사전 정의된 네트워크 포트에서 네트워크로부터 수신되는 복수의 패킷의 각각에 대한 패킷 데이터를, 상기 MMIO 어드레스 공간의 수신 버퍼에 버퍼링하고,
    각각의 패킷에 대한 패킷 데이터를, 다이렉트 메모리 액세스(DMA) 데이터 전송을 사용하여, 상기 수신 버퍼로부터, 상기 LSC에 대해 정의된 제1 가상 네트워크 기기를 호스팅하기 위해 사용되는 VM 또는 컨테이너에 대한 vNIC의 수신 버퍼로 복사하도록,
    상기 NIC를 구성하게 하는
    계산 플랫폼.
KR1020150071740A 2014-06-23 2015-05-22 소프트웨어 정의 네트워크에서의 가상화된 컨테이너 및 가상 머신을 통한 로컬 서비스 체이닝 KR101747518B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US14/311,818 2014-06-23
US14/311,818 US10261814B2 (en) 2014-06-23 2014-06-23 Local service chaining with virtual machines and virtualized containers in software defined networking

Publications (2)

Publication Number Publication Date
KR20150146391A true KR20150146391A (ko) 2015-12-31
KR101747518B1 KR101747518B1 (ko) 2017-06-14

Family

ID=54768037

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020150071740A KR101747518B1 (ko) 2014-06-23 2015-05-22 소프트웨어 정의 네트워크에서의 가상화된 컨테이너 및 가상 머신을 통한 로컬 서비스 체이닝

Country Status (5)

Country Link
US (1) US10261814B2 (ko)
JP (2) JP6016984B2 (ko)
KR (1) KR101747518B1 (ko)
CN (1) CN105282135B (ko)
DE (1) DE102015108145B4 (ko)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2017122847A1 (ko) * 2016-01-12 2017-07-20 쿨클라우드(주) Sdn 기반의 네트워크 시스템의 멀티 테넌트 지원 방법 및 그 시스템
KR20180072891A (ko) * 2016-12-21 2018-07-02 주식회사 나임네트웍스 컨테이너 관리 컴포넌트를 가지는 머신 관리 디바이스 및 사물 인터넷 관리 디바이스
KR102025435B1 (ko) * 2019-06-05 2019-09-25 주식회사 오픈케어랩 컨테이너를 이용하여 iot 서비스를 제공하는 방법, 장치 및 그를 이용한 시스템
KR20230058974A (ko) * 2021-10-25 2023-05-03 에스케이텔레콤 주식회사 네트워크데이터체이닝장치 및 네트워크데이터체이닝장치의 동작 방법
KR20230058952A (ko) * 2021-10-25 2023-05-03 에스케이텔레콤 주식회사 네트워크데이터체이닝장치 및 네트워크데이터체이닝장치의 동작 방법

Families Citing this family (100)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9225638B2 (en) 2013-05-09 2015-12-29 Vmware, Inc. Method and system for service switching using service tags
US9832168B2 (en) * 2014-07-01 2017-11-28 Cable Television Laboratories, Inc. Service discovery within multi-link networks
US9647894B2 (en) 2014-07-30 2017-05-09 International Business Machines Corporation Mapping relationships among virtual elements across a system
US9558041B2 (en) * 2014-09-05 2017-01-31 Telefonaktiebolaget L M Ericsson (Publ) Transparent non-uniform memory access (NUMA) awareness
US9459903B2 (en) * 2014-09-24 2016-10-04 Intel Corporation Techniques for routing service chain flow packets between virtual machines
US10225137B2 (en) 2014-09-30 2019-03-05 Nicira, Inc. Service node selection by an inline service switch
US9755898B2 (en) 2014-09-30 2017-09-05 Nicira, Inc. Elastically managing a service node group
US9817602B2 (en) * 2014-11-13 2017-11-14 Violin Systems Llc Non-volatile buffering for deduplication
CN107209692A (zh) * 2014-12-04 2017-09-26 诺基亚通信管理国际两合公司 虚拟化资源的操纵
US9445279B2 (en) 2014-12-05 2016-09-13 Huawei Technologies Co., Ltd. Systems and methods for placing virtual serving gateways for mobility management
US9699060B2 (en) * 2014-12-17 2017-07-04 Vmware, Inc. Specializing virtual network device processing to avoid interrupt processing for high packet rate applications
US10320921B2 (en) * 2014-12-17 2019-06-11 Vmware, Inc. Specializing virtual network device processing to bypass forwarding elements for high packet rate applications
US9979704B2 (en) * 2014-12-17 2018-05-22 Cisco Technology, Inc. End-to-end security for virtual private service chains
US9462427B2 (en) * 2015-01-14 2016-10-04 Kodiak Networks, Inc. System and method for elastic scaling using a container-based platform
US10599458B2 (en) * 2015-01-23 2020-03-24 Unisys Corporation Fabric computing system having an embedded software defined network
US9584415B2 (en) * 2015-01-30 2017-02-28 Huawei Technologies Co., Ltd. Devices, systems and methods for service chains
US10812632B2 (en) * 2015-02-09 2020-10-20 Avago Technologies International Sales Pte. Limited Network interface controller with integrated network flow processing
US9571395B2 (en) * 2015-02-09 2017-02-14 Cavium, Inc. Reconfigurable interconnect element with local lookup tables shared by multiple packet processing engines
US9729442B1 (en) * 2015-03-01 2017-08-08 Netronome Systems, Inc. Method of detecting large flows within a switch fabric of an SDN switch
US10009270B1 (en) * 2015-03-01 2018-06-26 Netronome Systems, Inc. Modular and partitioned SDN switch
US9998374B1 (en) * 2015-03-01 2018-06-12 Netronome Systems, Inc. Method of handling SDN protocol messages in a modular and partitioned SDN switch
US10609091B2 (en) 2015-04-03 2020-03-31 Nicira, Inc. Method, apparatus, and system for implementing a content switch
US9860189B2 (en) * 2015-04-30 2018-01-02 Dell Products Lp Systems and methods to enable network communications for management controllers
US9558029B2 (en) 2015-05-17 2017-01-31 Nicira, Inc. Logical processing for containers
US9942131B2 (en) * 2015-07-29 2018-04-10 International Business Machines Corporation Multipathing using flow tunneling through bound overlay virtual machines
US20170031704A1 (en) * 2015-07-31 2017-02-02 Hewlett-Packard Development Company, L.P. Network port profile for virtual machines using network controller
US9667725B1 (en) * 2015-08-06 2017-05-30 EMC IP Holding Company LLC Provisioning isolated storage resource portions for respective containers in multi-tenant environments
US9781209B2 (en) * 2015-08-20 2017-10-03 Intel Corporation Techniques for routing packets between virtual machines
US10078527B2 (en) 2015-11-01 2018-09-18 Nicira, Inc. Securing a managed forwarding element that operates within a data compute node
US10027604B2 (en) * 2015-11-24 2018-07-17 Red Hat Israel, Ltd. Implicit dynamic receive queue steering for unidirectional flows in virtualized systems
US10063469B2 (en) 2015-12-16 2018-08-28 Nicira, Inc. Forwarding element implementation for containers
US10230633B2 (en) * 2016-01-21 2019-03-12 Red Hat, Inc. Shared memory communication in software defined networking
US10892942B2 (en) * 2016-01-22 2021-01-12 Equinix, Inc. Container-based cloud exchange disaster recovery
WO2017131285A1 (ko) * 2016-01-25 2017-08-03 쿨클라우드(주) 컨테이너 네트워크 관리 시스템 및 컨테이너 네트워킹 방법
KR101797115B1 (ko) 2016-01-25 2017-11-15 쿨클라우드(주) 컨테이너 네트워크의 컨테이너 네트워킹 방법
KR101797112B1 (ko) 2016-01-25 2017-11-15 쿨클라우드(주) 컨테이너 네트워크 관리 시스템
US10083055B2 (en) * 2016-02-12 2018-09-25 At&T Intellectual Property I, L.P. Management of IoT devices in a virtualized network
US10182019B2 (en) * 2016-02-25 2019-01-15 Telefonaktiebolaget Lm Ericsson (Publ) Interconnected hardware infrastructure resource control
JP2017167763A (ja) * 2016-03-15 2017-09-21 富士通株式会社 情報処理装置、試験実行方法および試験実行プログラム
US20170272400A1 (en) * 2016-03-17 2017-09-21 Microsoft Technology Licensing, Llc Network virtualization of containers in computing systems
CN108701047B (zh) * 2016-03-31 2023-08-01 英特尔公司 具有dma写时复制的高密度虚拟机容器
US10178054B2 (en) * 2016-04-01 2019-01-08 Intel Corporation Method and apparatus for accelerating VM-to-VM network traffic using CPU cache
CN109154887A (zh) * 2016-05-23 2019-01-04 W·特纳 包括用户接口、服务层和配备有操作系统内核的核心层的超融合系统
US20170366605A1 (en) * 2016-06-16 2017-12-21 Alcatel-Lucent Usa Inc. Providing data plane services for applications
CN105975330B (zh) * 2016-06-27 2019-06-18 华为技术有限公司 一种网络边缘计算的虚拟网络功能部署方法、装置和系统
WO2018003020A1 (ja) * 2016-06-28 2018-01-04 日本電気株式会社 制御装置、コンテナの起動方法及びプログラム
US10237176B2 (en) * 2016-06-30 2019-03-19 Juniper Networks, Inc. Auto discovery and auto scaling of services in software-defined network environment
US11824863B2 (en) * 2016-11-03 2023-11-21 Nicira, Inc. Performing services on a host
US10148561B2 (en) * 2016-12-06 2018-12-04 At&T Intellectual Property I, L.P. Enhanced quality of service in software-defined networking-based connectionless mobility architecture
US10021033B2 (en) * 2016-12-07 2018-07-10 Nicira, Inc. Context driven policy based packet capture
JP6888295B2 (ja) * 2016-12-26 2021-06-16 富士通株式会社 プログラム、情報処理装置、および情報処理方法
US20180181421A1 (en) * 2016-12-27 2018-06-28 Intel Corporation Transferring packets between virtual machines via a direct memory access device
KR101716715B1 (ko) 2016-12-27 2017-03-15 주식회사 티맥스클라우드 가상 머신 환경의 네트워크 입출력 장치 가상화 방법 및 장치
US10169023B2 (en) * 2017-02-06 2019-01-01 International Business Machines Corporation Virtual container deployment
CN107071932B (zh) * 2017-03-09 2020-10-23 南京耀泽电子科技有限公司 用于数据处理的无线网关虚拟化多通道构建及控制方法
US10594829B2 (en) 2017-05-24 2020-03-17 At&T Intellectual Property I, L.P. Cloud workload proxy as link-local service configured to access a service proxy gateway via a link-local IP address to communicate with an external target service via a private network
US20180357086A1 (en) * 2017-06-13 2018-12-13 Intel Corporation Container virtual switching
US20190028409A1 (en) * 2017-07-19 2019-01-24 Alibaba Group Holding Limited Virtual switch device and method
RU181857U1 (ru) * 2017-09-13 2018-07-26 Общество с ограниченной ответственностью "Интегратор" Программно-аппаратное устройство на базе операционной системы облачной гиперконвергенции
US11018981B2 (en) * 2017-10-13 2021-05-25 Cisco Technology, Inc. System and method for replication container performance and policy validation using real time network traffic
US10797966B2 (en) 2017-10-29 2020-10-06 Nicira, Inc. Service operation chaining
US11169845B2 (en) * 2017-12-21 2021-11-09 Ciena Corporation Flow and application based processor scheduling for network functions virtualization applications using flow identification based on logical calculations on frame based fields
US10805192B2 (en) 2018-03-27 2020-10-13 Nicira, Inc. Detecting failure of layer 2 service using broadcast messages
CN110554977A (zh) * 2018-05-30 2019-12-10 阿里巴巴集团控股有限公司 数据缓存方法、数据处理方法、计算机设备、存储介质
US10897392B2 (en) 2018-06-11 2021-01-19 Nicira, Inc. Configuring a compute node to perform services on a host
US11283676B2 (en) 2018-06-11 2022-03-22 Nicira, Inc. Providing shared memory for access by multiple network service containers executing on single service machine
CN110704155B (zh) * 2018-07-09 2023-03-17 阿里巴巴集团控股有限公司 容器网络构建方法及装置、物理主机、数据传输方法
US10581730B2 (en) * 2018-07-12 2020-03-03 Vmware, Inc. Packet processing using service chains
CN110769075B (zh) * 2018-07-25 2022-07-05 中国电信股份有限公司 容器的通信方法、系统、控制器和计算机可读存储介质
US10645201B2 (en) 2018-07-31 2020-05-05 Vmware, Inc. Packet handling during service virtualized computing instance migration
CN110851371B (zh) * 2018-08-20 2023-09-26 华为技术有限公司 报文处理方法及相关设备
US11595250B2 (en) 2018-09-02 2023-02-28 Vmware, Inc. Service insertion at logical network gateway
US10887251B2 (en) 2018-09-13 2021-01-05 International Business Machines Corporation Fault-tolerant architecture for packet capture
US11494212B2 (en) * 2018-09-27 2022-11-08 Intel Corporation Technologies for adaptive platform resource assignment
US11159366B1 (en) * 2018-09-28 2021-10-26 Juniper Networks, Inc. Service chaining for virtual execution elements
US11316822B1 (en) 2018-09-28 2022-04-26 Juniper Networks, Inc. Allocating external IP addresses from isolated pools
CN111124254B (zh) * 2018-10-30 2023-09-29 伊姆西Ip控股有限责任公司 调度存储空间回收请求的方法、电子设备和程序产品
US11016793B2 (en) * 2018-11-26 2021-05-25 Red Hat, Inc. Filtering based containerized virtual machine networking
US11604666B2 (en) 2019-02-22 2023-03-14 Vmware, Inc. Service path generation in load balanced manner
US11283732B2 (en) * 2019-03-29 2022-03-22 Juniper Networks, Inc. Network functions virtualization (NFV) backplane on forwarding microchip
KR102101602B1 (ko) * 2019-04-04 2020-04-17 한국전자통신연구원 트래픽 관리 장치 및 방법
KR102099118B1 (ko) 2019-04-29 2020-04-09 래블업(주) 사용자가 요청한 다수개의 라이브러리를 탑재한 세션 컨테이너 제공방법
WO2020236275A1 (en) 2019-05-23 2020-11-26 Cray Inc. System and method for facilitating dynamic command management in a network interface controller (nic)
JP7226123B2 (ja) * 2019-06-19 2023-02-21 富士通株式会社 情報処理システム、情報処理装置、及び情報処理プログラム
US11277382B2 (en) * 2019-07-22 2022-03-15 Vmware, Inc. Filter-based packet handling at virtual network adapters
LU101360B1 (en) * 2019-08-26 2021-03-11 Microsoft Technology Licensing Llc Pinned physical memory supporting direct memory access for virtual memory backed containers
CN110580157A (zh) * 2019-09-12 2019-12-17 广东鑫光智能系统有限公司 基于软件定义的数据采集接口
CN110597633A (zh) * 2019-09-12 2019-12-20 北京交通大学 一种智慧协同网络族群弹性伸缩的方法和系统
US11140218B2 (en) 2019-10-30 2021-10-05 Vmware, Inc. Distributed service chain across multiple clouds
US11283717B2 (en) 2019-10-30 2022-03-22 Vmware, Inc. Distributed fault tolerant service chain
US11659061B2 (en) 2020-01-20 2023-05-23 Vmware, Inc. Method of adjusting service function chains to improve network performance
US11438257B2 (en) 2020-04-06 2022-09-06 Vmware, Inc. Generating forward and reverse direction connection-tracking records for service paths at a network edge
JP2022022059A (ja) 2020-07-22 2022-02-03 富士通株式会社 情報処理装置、情報処理プログラム、及び情報処理方法
CN112398688B (zh) * 2020-11-13 2022-06-03 广东省华南技术转移中心有限公司 容器网络配置方法、容器网络系统以及存储介质
WO2022132308A1 (en) * 2020-12-15 2022-06-23 Vmware, Inc. Providing stateful services a scalable manner for machines executing on host computers
US11611625B2 (en) 2020-12-15 2023-03-21 Vmware, Inc. Providing stateful services in a scalable manner for machines executing on host computers
US11734043B2 (en) 2020-12-15 2023-08-22 Vmware, Inc. Providing stateful services in a scalable manner for machines executing on host computers
CN113472848A (zh) * 2021-05-31 2021-10-01 济南浪潮数据技术有限公司 一种虚拟机和容器的网络融合方法、装置及相关设备
JP2023003987A (ja) * 2021-06-25 2023-01-17 富士通株式会社 情報処理装置、情報処理プログラム、及び情報処理方法
CN115378822B (zh) * 2022-08-19 2023-06-06 武汉烽火技术服务有限公司 一种dds分布式应用仿真的方法和系统

Family Cites Families (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4439100B2 (ja) 2000-09-22 2010-03-24 株式会社東芝 ネットワーク間中継装置
US7685281B1 (en) * 2004-02-13 2010-03-23 Habanero Holdings, Inc. Programmatic instantiation, provisioning and management of fabric-backplane enterprise servers
JP4622835B2 (ja) 2005-12-07 2011-02-02 株式会社日立製作所 仮想計算機システム及びそのネットワーク通信方法
US7634608B2 (en) * 2006-06-30 2009-12-15 Sun Microsystems, Inc. Bridging network components
WO2008082483A1 (en) 2006-12-21 2008-07-10 Simtone Corporation Service chaining methods and apparatus
US8219778B2 (en) 2008-02-27 2012-07-10 Microchip Technology Incorporated Virtual memory interface
JP5125659B2 (ja) 2008-03-24 2013-01-23 富士通株式会社 情報処理装置、情報処理方法及びコンピュータプログラム
JP2009230479A (ja) 2008-03-24 2009-10-08 Toshiba Microelectronics Corp マイクロプロセッサ
US8031731B2 (en) * 2008-06-09 2011-10-04 Oracle America, Inc. System for sharing a network port of a network interface including a link for connection to another shared network interface
JP5352132B2 (ja) 2008-06-19 2013-11-27 株式会社日立製作所 計算機システム及びそのi/o構成変更方法
JP5532793B2 (ja) 2009-09-28 2014-06-25 富士通株式会社 プログラム及び通信制御方法
US8254261B2 (en) * 2009-10-16 2012-08-28 Oracle America, Inc. Method and system for intra-host communication
CN102648455B (zh) 2009-12-04 2015-11-25 日本电气株式会社 服务器和流控制程序
US20110153909A1 (en) 2009-12-22 2011-06-23 Yao Zu Dong Efficient Nested Virtualization
US8739177B2 (en) 2010-06-21 2014-05-27 Intel Corporation Method for network interface sharing among multiple virtual machines
US9923826B2 (en) * 2011-10-14 2018-03-20 Citrix Systems, Inc. Systems and methods for dynamic adaptation of network accelerators
US8521905B2 (en) 2011-12-22 2013-08-27 Telefonaktiebolaget L M Ericsson (Publ) System for flexible and extensible flow processing in software-defined networks
US20130279378A1 (en) * 2012-04-19 2013-10-24 Delphax Technologies Canada, Ltd. Cascaded Streaming of Data Through Virtual Chain of Nodes in Hub Topology
US9106508B2 (en) * 2012-04-30 2015-08-11 International Business Machines Corporation Providing services to virtual overlay network traffic
US9769061B2 (en) 2012-05-23 2017-09-19 Brocade Communications Systems, Inc. Integrated heterogeneous software-defined network
US8806025B2 (en) 2012-06-25 2014-08-12 Advanced Micro Devices, Inc. Systems and methods for input/output virtualization
US9661522B2 (en) 2012-07-09 2017-05-23 Cisco Technology, Inc. System and method associated with a service flow router
US9571507B2 (en) 2012-10-21 2017-02-14 Mcafee, Inc. Providing a virtual security appliance architecture to a virtual cloud infrastructure
JP2014096675A (ja) * 2012-11-08 2014-05-22 Hitachi Ltd 通信装置、及び、設定方法
US9356871B2 (en) * 2013-03-15 2016-05-31 Cisco Technology, Inc. Programmable management engine for networks
WO2015106249A1 (en) * 2014-01-13 2015-07-16 Futurewei Technologies, Inc. Packet labeling in a virtual network

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2017122847A1 (ko) * 2016-01-12 2017-07-20 쿨클라우드(주) Sdn 기반의 네트워크 시스템의 멀티 테넌트 지원 방법 및 그 시스템
KR20180072891A (ko) * 2016-12-21 2018-07-02 주식회사 나임네트웍스 컨테이너 관리 컴포넌트를 가지는 머신 관리 디바이스 및 사물 인터넷 관리 디바이스
KR102025435B1 (ko) * 2019-06-05 2019-09-25 주식회사 오픈케어랩 컨테이너를 이용하여 iot 서비스를 제공하는 방법, 장치 및 그를 이용한 시스템
KR20230058974A (ko) * 2021-10-25 2023-05-03 에스케이텔레콤 주식회사 네트워크데이터체이닝장치 및 네트워크데이터체이닝장치의 동작 방법
KR20230058952A (ko) * 2021-10-25 2023-05-03 에스케이텔레콤 주식회사 네트워크데이터체이닝장치 및 네트워크데이터체이닝장치의 동작 방법

Also Published As

Publication number Publication date
DE102015108145A1 (de) 2015-12-24
DE102015108145B4 (de) 2023-04-27
US20150370586A1 (en) 2015-12-24
JP2017022767A (ja) 2017-01-26
US10261814B2 (en) 2019-04-16
JP2016009486A (ja) 2016-01-18
CN105282135B (zh) 2019-07-26
KR101747518B1 (ko) 2017-06-14
CN105282135A (zh) 2016-01-27
JP6016984B2 (ja) 2016-10-26

Similar Documents

Publication Publication Date Title
KR101747518B1 (ko) 소프트웨어 정의 네트워크에서의 가상화된 컨테이너 및 가상 머신을 통한 로컬 서비스 체이닝
US11102117B2 (en) In NIC flow switching
US10178054B2 (en) Method and apparatus for accelerating VM-to-VM network traffic using CPU cache
US20200322287A1 (en) Switch-managed resource allocation and software execution
US11683242B2 (en) Data plane interface network quality of service in multi-tenant data centers
US10237171B2 (en) Efficient QoS support for software packet processing on general purpose servers
US20200133909A1 (en) Writes to multiple memory destinations
US10911358B1 (en) Packet processing cache
US10872056B2 (en) Remote memory access using memory mapped addressing among multiple compute nodes
US11487567B2 (en) Techniques for network packet classification, transmission and receipt
EP4004751B1 (en) Pinned physical memory supporting direct memory access for virtual memory backed containers
US9483290B1 (en) Method and system for virtual machine communication
US8250252B1 (en) System and methods for using a DMA module for a plurality of virtual machines
US11283723B2 (en) Technologies for managing single-producer and single consumer rings
US10616116B1 (en) Network traffic load balancing using rotating hash
US11575620B2 (en) Queue-to-port allocation
US20180091447A1 (en) Technologies for dynamically transitioning network traffic host buffer queues
US20230109396A1 (en) Load balancing and networking policy performance by a packet processing pipeline
US11412059B2 (en) Technologies for paravirtual network device queue and memory management
US11899969B1 (en) Re-order buffer for in-order execution of dependent write transactions
US20230043461A1 (en) Packet processing configurations
US20240028381A1 (en) Virtual i/o device management
Meth et al. Zero-Copy Receive for Virtualized Network Devices
US9378036B1 (en) Method and system for communication in a virtual machine environment

Legal Events

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