KR100992050B1 - 가상화된 네트워크 환경에서 입력/출력 공유를 가지는프로토콜 오프로드 및 다이렉트 입력/출력을 위한 방법 및시스템 - Google Patents

가상화된 네트워크 환경에서 입력/출력 공유를 가지는프로토콜 오프로드 및 다이렉트 입력/출력을 위한 방법 및시스템 Download PDF

Info

Publication number
KR100992050B1
KR100992050B1 KR1020087001938A KR20087001938A KR100992050B1 KR 100992050 B1 KR100992050 B1 KR 100992050B1 KR 1020087001938 A KR1020087001938 A KR 1020087001938A KR 20087001938 A KR20087001938 A KR 20087001938A KR 100992050 B1 KR100992050 B1 KR 100992050B1
Authority
KR
South Korea
Prior art keywords
network
nic
buffer
data
goss
Prior art date
Application number
KR1020087001938A
Other languages
English (en)
Other versions
KR20080092908A (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 KR20080092908A publication Critical patent/KR20080092908A/ko
Application granted granted Critical
Publication of KR100992050B1 publication Critical patent/KR100992050B1/ko

Links

Images

Classifications

    • 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5077Logical partitioning of resources; Management or configuration of virtualized resources
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/10Program control for peripheral devices
    • G06F13/12Program control for peripheral devices using hardware independent of the central processor, e.g. channel or peripheral processor
    • G06F13/124Program control for peripheral devices using hardware independent of the central processor, e.g. channel or peripheral processor where hardware is a sequential transfer control unit, e.g. microprocessor, peripheral processor or state-machine
    • G06F13/128Program control for peripheral devices using hardware independent of the central processor, e.g. channel or peripheral processor where hardware is a sequential transfer control unit, e.g. microprocessor, peripheral processor or state-machine for dedicated transfers to a network
    • 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/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/45595Network integration; Enabling network access in virtual machine instances
    • 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/12Protocol engines

Abstract

가상 네트워크(virtualized network) 환경에서 I/O 공유를 가지는 프로토콜 오프로드 및 다이렉트 I/O를 위한 방법들 및 시스템들이 개시된다. 하나의 방법의 측면들은 네트워크에 대한 접속을 제공하는 단일 네트워크 인터페이스 회로, 또는 네트워크 인터페이스 카드(NIC)를 공유하는 복수의 GOS들을 포함할 수 있다. 상기 네트워크 인터페이스 카드는 상기 GOS들 각각을 위하여 네트워크에 송신될 데이터 및/또는 네트워크로부터 수신된 데이터의 처리를 곧바로 핸들링할 수 있으며, 네트워크에 송신될 데이터 및/또는 네트워크로부터 수신된 데이터를 핸들링하는 GOS들을 위한 TGOS를 구비하지 않는다. 상기 데이터는 상기 단일 NIC에 있는 버퍼로부터 복수의 GOS들중 하나를 위한 어플리케이션 버퍼에 곧바로 및/또는 상기 복수의 GOS들중 하나를 위한 어플리케이션 버퍼로부터 상기 단일 NIC에 있는 상기 버퍼에 곧바로 복사될 수 있다.

Description

가상화된 네트워크 환경에서 입력/출력 공유를 가지는 프로토콜 오프로드 및 다이렉트 입력/출력을 위한 방법 및 시스템{METHOD AND SYSTEM FOR PROTOCOL OFFLOAD AND DIRECT I/O WITH I/O SHARING IN A VIRTUALIZED NETWORK ENVIRONMENT}
본 발명의 몇몇 실시예들은 네트워크 인터페이스에 관한 것이다. 좀더 상세하게는, 본 발명의 몇몇 실시예들은 가상화된 네트워크(virtualized network) 환경에서 I/O 공유를 이용하여 프로토콜 오프로드(protocol offload) 및 다이렉트(direct) I/O를 위한 방법 및 시스템에 관한 것이다.
네트워킹 시스템에서 예를 들어 서버 또는 클라이언트와 같은 단일 기계 장치(machine)는 복수의 서버 동작들 또는 서비스들을 동시에 지원하는데 사용될 수 있다. 예를 들어, 단일 서버(single server)는, 이메일 서버, 데이터베이스 서버, 및/또는 교환 서버로서 동작하는 한편, 비지니스 어플리케이션들에 대한 접속을 제공하기 위해 사용될 수 있다. 상기 서버는 일반적으로 단일 운영 시스템(operating system : OS)을 사용함으로써 다양한 서버 동작들을 지원할 수 있다. 상기 단일 OS를 통해 상기 서버 동작들은 예를 들어 중앙 처리 유닛(CPU), 메모리, 네트워크 인터페이스 카드(network interface card : NIC), 주변 사운드 카드, 및/또는 그래픽 카드와 같은 서버 처리 자원들을 이용할 수 있다. 많은 경우에, 상기 서버 자원들 은, 서버 동작들에 대한 수요가 일반적으로 제공되는 서비스의 형태 및/또는 사용자의 필요에 근거하여 바뀌기 때문에 효과적으로 사용될 수 있다. 서버 서비스들을 단일의 유형적인 기계속에 통합(consolidation)시키는 것은 서버의 효율을 증진시킬 수 있다. 그러나, 통합은 상기 동작들이 분리되어 유지되는 경우에 제공되는 방어의 수준을 없앨 수 있다. 예를 들어, 상기 동작들이 통합되는 경우에, 데이터 베이스 서버에서의 충돌 또는 실패는 이메일 서비스들, 교환 서비스들, 및/또는 어플리케이션 서비스들의 손실을 또한 초래할 수 있다.
예를 들어 각 운영 시스템이 다른 서버 동작들 또는 어플리케이션 또는 서비스를 지원하도록 동시에 동작하는 복수의 운영 시스템들을 사용하기 위해 서버 효율을 증대시키기 위한 다른 접근방식이 있을 수 있다. 상기 복수의 운영 시스템들은 게스트 운영 시스템들(guest operating system : GOS ) 또는 차일드 파티션(child partitions)이라고 불릴 수 있다. 이러한 접근 방식은 서버 동작들이 단일 운영 시스템하에 통합되지 않았을 경우에, 상기 서버에 대하여 가용할 수 있는 처리 자원들의 사용을 최적화를 가능하게 한편, 제공되는 방어의 수준을 유지한다. 복수의 게스트 운영 시스템들의 사용은, 각 GOS가 상기 서버의 하드웨어 자원들에 대하여 완전한 접속을 가졌다고 인식하기 때문에 OS 가상화(virtualization)라고 불릴 수 있다. 이러한 면에서, GOS는 상기 서버상에서 동작하는 다른 어떠한 GOS의 존재도 모르고 있다. OS 가상화를 개선하기 위해서는, 상기 서버의 하드웨어 자원들에 대한 접속을 중재하기 위한 소프트웨어 계층이 필요할 수 있다. 이 소프트웨어 계층은 예를 들어 하이퍼바이저(hypervisor) 또는 가상 머신(virtual machine : VM) 모니터로 불릴 수 있다. 상기 하이퍼바이저는 상기 복수의 GOS들이 시분할 방식으로 상기 하드웨어 자원들에 접속하는 것을 가능하게 할 수 있다. 이 소프트웨어 계층은 이를 테면 페어런트 파티션(parent partition), 즉 가상 머신 커널(Virtual Machine Kernel : VMK)로 불리는 신뢰성있는 GOS(trusted GOS : TGOS)에 의해 보조받을 수 있다.
상기 NIC는 상기 서버 동작들 또는 서비스들 중에서 적어도 하나에 의해 빈번하게 사용될 수 있는 하드웨어 자원일 수 있다. 이러한 면에서, 하이퍼바이저 또는 VM 모니터는 GOS에 의해 사용될 수 있는 NIC의 소프트웨어 표현을 생성하는 것을 가능하게 할 수 있다. 상기 NIC의 이러한 소프트웨어 표현은 "가상 NIC"라고 불릴 수 있다. 그러나, 가상 NIC는 GOS에 하드웨어 NIC의 특징들 또는 기능들의 전부를 제공하지는 못할 수 있다. 예를 들어 가상 NIC는 GOS에 기본 계층 2(L2) 네트워킹 기능성을 단지 제공할 수 있다. 상기 가상 NIC는 TGOS 또는 VMK와 같은 또 다른 SW 엔터티(entity)를 통해 GOS 및 상기 네트워크 사이에 데이터 통신을 제공하는데 한정될 수 있다. 이러한 면에서, 상기 가상 NIC는 예를 들어 상기 GOS를 위하여 RDMA(remote direct memory access) 및/또는 iSCSI(Internet small computers system interface)와 같은 다른 개선된 특징들을 곧바로 지원할 수 는 없을 수 있다. 단일 서버에서 복수의 GOS를 사용하는 것이 증가됨으로 인해, 상기 가상 NIC의 제한성을 줄이기 위한 새로운 해결책이 요청되었다.
나아가, 종래의 전형적인 접근방식들이 가지는 한계점들과 단점들은 종래의 시스템들과 본 출원의 나머지 부분들에서 도면들을 참조하여 전개될 본 발명의 몇 몇 측면들의 비교를 통해 당해 기술분야의 숙련된 자에게 명백해질 것이다.
본 발명에 따른 가상화된 네트워크 환경에서 I/O 공유를 이용하여 프로토콜 오프로드 및 다이렉트 I/O를 위한 시스템 및/또는 방법은 실질적으로 적어도 하나의 도면들과 연관하여 보여지거나 설명되는 것처럼 청구범위에서 좀더 완전하게 전개될 것이다.
본 발명의 이러한 장점들 및 다른 장점들과 신규한 특징들은 본 발명의 도시된 실시예들의 상세한 사항들뿐만 아니라 하기의 상세한 설명 및 도면으로부터 더 잘 이해될 것이다.
도 1a는 본 발명의 일실시예에 연관하여 사용될 수 있는 호스트 시스템에서 GOS들 사이에서의 통신을 위한 레벨 2(L2) 스위칭 및/또는 상위 계층의 스위칭을 지원하는 대표적인 NIC의 블록도이다.
도 1b는 본 발명의 일실시예에 연관하여 사용될 수 있는 호스트 시스템에서 GOS들 사이에서의 통신을 위한 레벨 2(L2) 스위칭 및/또는 상위 계층의 스위칭을 지원하는 대표적인 NIC의 블록도이다.
도 1c는 본 발명의 일실시예 연관하여 사용될 수 있는 NIC를 통해 네트워크에 송신하기 위한 대표적인 단계들을 예시하는 흐름도이다.
도 2a는 본 발명의 일실시예에 따른 GOS 및 NIC 사이에서 중재기로서 TGOS를 사용하는, I/O 공유를 가지는 NIC에 의해 대표적인 GOS 프로토콜 오프로드 기능을 예시하는 블록도이다.
도 2b는 본 발명의 일실시예에 따른, I/O 공유를 가지는 프로토콜 오프로드 기능을 이용하여 네트워크에 데이터를 송신하기 위한 대표적인 단계들을 예시하는 흐름도이다.
도 2c는 본 발명의 일실시예에 따른, I/O 공유를 가지는 프로토콜 오프로드 기능을 이용하여 네트워크로부터 데이터를 수신하기 위한 대표적인 단계들을 예시하는 흐름도이다.
도 3a는 본 발명의 실시예에 따른 I/O 공유를 가지는 대표적인 다이렉트 I/O 기능을 예시하는 블록도이다.
도 3b는 본 발명의 일실시예에 따른 I/O 공유를 가지는 다이렉트 I/O를 이용하여 네트워크에 데이터를 송신하기 위한 대표적인 단계들을 예시하는 흐름도이다.
도 3c는 본 발명의 일실시예에 따른 I/O 공유를 가지는 다이렉트 I/O를 이용하여 네트워크로부터 데이터를 수신하기 위한 대표적인 단계들을 예시하는 흐름도이다.
도 4a는 본 발명의 일실시예에 따른, I/O 공유를 가지는 대표적인 프로토콜 오프로드 기능 및 다이렉트 I/O 기능을 예시하는 블록도이다.
도 4b는 본 발명의 일실시예에 따른, I/O 공유를 가지는 프로토콜 오프로드 기능 및 다이렉트 I/O를 사용하여 네트워크에 데이터를 송신하기 위한 대표적인 단계들을 예시하는 흐름도이다.
도 4c는 본 발명의 일실시예에 따른 I/O 공유를 가지는 프로토콜 오프로드 기능 및 다이렉트 I/O를 사용하여 네트워크로부터 데이터를 수신하기 위한 대표적인 단계들을 예시하는 흐름도이다.
본 발명의 몇몇 실시예들은 가상화된 네트워크 환경에서 I/O 공유를 가지는 프로토콜 오프로드 및 다이렉트 I/O를 위한 방법 및 시스템에 관한 것이다. 상기 방법의 측면들은 네트워크에 대한 접속을 제공하는 단일 네트워크 인터페이스 회로 또는 네트워크 인터페이스 카드(NIC)를 공유하는 복수의 GOS들을 포함할 수 있다. 상기 단일 NIC는 상기 복수의 GOS들의 각각을 위하여 네트워크 접속을 위한 입력/출력 처리를 핸들링할 수 있다. 상기 단일 NIC는 네트워크에 송신되는 데이터 및/또는 상기 네트워크로부터 수신된 데이터의 처리를 곧바로 핸들링할 수 있으며, 예를 들어, 신뢰성있는 GOS(TGOS), 하이퍼바이저, 및/또는 상기 네트워크에 송신되는 데이터 및/또는 상기 네트워크로부터 수신된 데이터의 처리를 핸들링하는 복수의 GOS들을 위한 예를 들어 상기 NIC의 PCI 구성 공간과 인터랙트할 수 있는 관리 장치와 같은 중재기를 구비하지 않는다. 상기 단일 NIC는 상기 복수의 GOS들 중에서 하나를 위한 버퍼로부터 상기 단일 NIC에 있는 버퍼까지 사이에 곧바로 데이터를 복사할 수 있다. 상기 단일 NIC는 또한 상기 단일 NIC에 있는 버퍼로부터 상기 복수의 GOS들 중의 하나를 위한 버퍼에 곧바로 데이터를 복사할 수 있다. 상기 GOS에 있는 상기 소스 또는 목적지 버퍼는 커널 버퍼(kernel buffer) 또는 어플리케이션 버퍼(application buffer)일 수 있다. 몇몇 예들에서, 상기 데이터는 비-가상화된(non-virtualized) I/O를 가지는 시스템들에서 사용할 수 있는 것과 유사한 제로 복사(zero copy)를 생성하는 상기 GOS에 있는 상기 어플리케이션 버퍼에 곧바로 전달될 수 있다. 다른 예들에서, 본 발명은 오버헤드 및 상기 GOS 어플리케이션 버퍼에/로부터 데이터를 이동시키기 위해 요청되는 복사의 수에서의 감소를 가능하게 할 수 있다.
상기 단일 NIC 및 상기 복수의 GOS들 사이에서 통신은 스위칭 될 수 있으며, 여기에서, 상기 NIC는, 예를 들어 OSI 프로토콜 계층(L)2(L2) 또는 3(L3) 또는 상위 계층들에서 이더넷 스위치와 유사하게, 각 GOS에 물리 네트워크에 대한 접속을 제공하는 스위칭 서비스를 제공할 수 있다. 상기 TGOS 및/또는 하이퍼바이저는 상기 복수의 GOS들로부터의 요청들에 대한 처리를 조정할 수 있다. 상기 TGOS는, GOS와 주소들을 확인하기 위해 및/또는 예를 들어 특정된 버퍼들 또는 네트워크 대역폭 또는 우선순위 설정들(이를 테면 IEEE 802.1P 및 802.1Q)과 같은 GOS 항목들별로 할당하거나 제거하기 위해, 상기 NIC에 GOS 별로 자원들을 할당할 것에 대하여 지시할 수 있다. 상기 시스템을 초기화하는 처리에서, 관리(admin) 및/또는 구성 및/또는 관리 장비들은 상기 정보를 TGOS에 전달한다. 상기 TGOS는 NIC(110)(PCI 구성 공간의 사용에 의해 곧바로) 및 메인 드라이버(124)를 구성한다. 상기 정보는 상기 NIC가 예를 들어 일반적인 정책들 및 서비스들, -예를 들어 개별 GOS 자원들 뿐만 아니라 스위칭 온/오프, 예를 들어 연결들의 개수, 및 서비스들, 예를 들어 L2, L4 또는 다른 프로토콜 계층들-을 결정하도록 할 수 있다. 상기 단일 NIC는 상기 GOS들에 의해 통신된 물리 주소(physical address)를 통해 상기 복수의 GOS들 중에서 적어도 하나를 위한 적어도 하나의 버퍼에 접속할 수 있다. 상기 단일 NIC 에 의한 핸들링은 L3 프로토콜 동작들, L4 프로토콜 동작들, 및/또는 L5 프로토콜 동작들을 포함할 수 있다. 상기 단일 NIC에 의한 핸들링은 또한 TCP 동작들 및/또는 IP 동작들을 포함할 수 있다. 상기 단일 NIC는 또한 링크 계층 네트워크 프로토콜 동작들을 실행할 수 있다.
다양한 구조들은 예를 들어 GOS, TGOS, 및 하이퍼바이저로 불릴 수 있다. 다른 구조들은 예를 들어 차일드 파티션(child partition), 페어런트 파티션(parent partition), 및 하이퍼바이저, 또는 VM, VMK, 및 VMM으로 불릴 수 있다. 다른 구조들은 예를 들어 DomU, Dom0, 및 하이퍼바이저로 불릴 수 있다. 특정된 구조가 본 발명에 관련된 인자를 한정하지 않는다는 것이 이해되어야 할 것이다.
도 1a는 본 발명의 일실시예에 연관하여 사용될 수 있는 호스트 시스템에서 GOS들 사이에서의 통신을 위한 레벨 2(L2) 스위칭 및/또는 상위 계층의 스위칭을 지원하는 대표적인 NIC의 블록도이다. 상기 NIC에 의해 지원되는 스위칭은 L2에 한정될 필요가 없으며, 그것은 L2, VLAN, L3, V4, 상위 프로토콜 계층 및/또는 상기 스위칭을 수행하기 위한 방법에 관련된 관리자로부터의 추가 정보의 어떠한 조합일 수 있다. 도 1a를 참조하면, GOS들(102a, 102b, 및 102c), TGOS(102d), 하이퍼바이저(104), 호스트 시스템(106), 이벤트 큐들(108a, 112a, 및 114a), 송신(TX) 큐들(108b, 112b, 및 114b), 수신(RX) 큐들(108c, 112c, 및 114c), 및 NIC(110)이 도시되어 있다. TGOS(102d)는 메인 드라이버(124)를 포함할 수 있다. 호스트 시스템(106)은 호스트 프로세서(122) 및 호스트 메모리(120)를 포함할 수 있다. NIC(110)는 NIC 프로세서(118), NIC 메모리(116), L2 스위칭(130), 및 물리 주소 확인기(132)를 포함할 수 있다.
상기 호스트 시스템(106)은 예를 들어 데이터 처리 및/또는 네트워킹 동작들을 가능하게 하는 적절한 로직, 회로, 및/또는 코드를 포함할 수 있다. 몇몇 경우들에서, 상기 호스트 시스템(106)은 예를 들어 그래픽 카드 및/또는 주변 사운드 카드와 같은 다른 하드웨어 자원들을 또한 포함할 수 있다. 상기 호스트 시스템(106)은 상기 하이퍼바이저(104)를 통해 GOS들(102a, 102b, 및 102c)의 동작을 지원할 수 있다. 상기 GOS들(102a, 102b, 및 102c)은 예를 들어, 어플리케이션들, 이메일 서버 동작들, 데이터베이스 서버 동작들, 및/또는 교환 서버 동작들과 같은 동작들 또는 서비스들의 가동 또는 실행을 가능하게 하는 운영 시스템에 각각 해당할 수 있다. 상기 하이퍼바이저(104)를 사용함에 의해 상기 호스트 시스템(106)에 의해 지원될 수 있는 GOS들의 개수는 어떠한 특정 개수에 한정될 필요가 없다. 예를 들어, 하나 또는 그 이상의 GOS들은 상기 호스트 시스템(106)에 의해 지원될 수 있다. 내부 스위칭(internal switching)은 GOS들 사이에서 또는 GOS와 상기 TGOS 사이에서 발생될 수 있다.
상기 하이퍼바이저(104) 및/또는 상기 TGOS(102d)는 예를 들어 NIC(110)와 같이, 상기 호스트 시스템(106)에 있는 하드웨어 자원들의 OS 가상화 및/또는 호스트 시스템(106)에 통신가능하게 결합되는 하드웨어 자원들의 가상화를 가능하게 할 수 있다. 하이퍼바이저(104) 및/또는 TGOS(102d)는 하드웨어 자원들을 할당할 수 있으며, 상기 GOS들과 상기 호스트 시스템(106)에 있는 하드웨어 자원들 및/또는 상기 호스트 시스템(106)에 통신가능하게 결합된 하드웨어 자원들 사이에서 데이터 통신을 가능하게 할 수 있다. 예를 들어, 상기 하이퍼바이저(104)는 이벤트 큐들(108a, 112a, 및 114a), TX 큐들(108b, 112b, 및 114b), 및/또는 RX 큐들(108c, 112c, 및 114c)을 통해 호스트 시스템(106)에 의해 지원되는 GOS들과 NIC(110) 사이에 통신을 가능하게 할 수 있다. 이러한 면에서, 제1 GOS(102a)와 NIC(110) 사이에서의 통신은 이벤트 큐(108a), TX 큐(108b), RX 큐(108c)를 통해 일어난다. 마찬가지로, 제2 GOS(102b)와 NIC(110) 사이에서의 통신은 이벤트 큐(112a), TX 큐(112b), RX 큐(112c)를 통해 일어난다. 제3 GOS(102c)와 NIC(110) 사이에서의 통신은 이벤트 큐(114a), TX 큐(114b), RX 큐(114c)를 통해 일어난다. 이러한 면에서, 각 세트들의 큐들은 분리되어 다른 것들로부터 독립적으로 동작할 수 있다. 이러한 식으로 해당 GOS가 네트워크 송신 또는 수신에 연관되는 경우, 구성 및 관리(configuration and administrative) 정보를 가지는 데이터는 TGOS(102d)가 상기 큐들, 상기 NIC상에서 필요한 내부 자원들을 할당한 후에, 상기 NIC 에/로부터 곧바로 전달될 수 있다.
상기 TGOS(102d)는 상기 GOS들과 상기 큐들 사이에서 데이터의 전달을 조정할 수 있는 메인 드라이버(124)를 포함할 수 있다. 상기 메인 드라이버(124)는 GOS(102a)에 있는 가상 NIC 드라이버(126a), GOS(102b)에 있는 가상 NIC 드라이버(126b), 및/또는 GOS(102c)에 있는 가상 NIC 드라이버(126c)와 통신할 수 있다. 각 가상 NIC 드라이버는 상기 메인 드라이버(124)를 통해 상기 GOS들 및 상기 적절한 큐들에 의해 수행되는 동작들 또는 서비스들 사이에서 데이터의 전달을 가능하게 하는 GOS의 일부에 해당할 수 있다. 예를 들어, 상기 제1 GOS(102a)에서의 동작 또는 서비스로부터 송신을 위한 패킷들 및/또는 패킷들의 기술자(descriptor)들은 가상 NIC 드라이버(126a)에 의해 상기 TX 큐(108b)에 전달될 수 있다. 또 하나의 예로서, 상기 NIC(110)에 의해 네트워크 상태를 표시하거나 데이터 송신 또는 데이터 수신을 보고하기 위해 상기 이벤트 큐(108a)에 포스팅된 데이터는 가상 NIC 드라이버(126a)에 의해 포스팅된 버퍼에 전달될 수 있다. 또 하나의 예로서, MAC 주소들 또는 다른 주소들 또는 상기 제1 GOS(102a)에 해당하는 항목을 가지는 네트워크로부터 상기 NIC(110)에 의해 수신된 패킷들은 상기 RX 큐(108c)로부터 상기 가상 NIC 드라이버(126a)에 의해 포스팅된 버퍼에 전달될 수 있다.
호스트 프로세서(122)는 호스 시스템(106)과 연관된 데이터 처리 및/또는 네트워킹 동작들의 제어 및/또는 관리를 가능하게 하는 적절한 로직, 회로, 및/또는 코드를 포함할 수 있다. 호스트 메모리(120)는 호스트 시스템(106)에 의해 사용되는 데이터의 저장을 가능하게 하는 적절한 로직, 회로, 및/또는 코드를 포함할 수 있다. 호스트 메모리(120)는 복수의 메모리부들로써 분할될 수 있다. 예를 들어, 호스트 시스템(106)에 의해 지원되는 각 GOS는 호스트 메모리(120)에 있는 해당 메모리부를 가질 수 있다. 더욱이, 하이퍼바이저(104)는 호스트 메모리(120)에 있는 해당 메모리부를 가질 수 있다. 이러한 면에서, 하이퍼바이저(104) 및/또는 TGOS(102d)는 하나의 GOS에 해당하는 메모리(120)의 일부로부터 또 하나(another)의 GOS에 해당하는 메모리(120)의 또 하나의 일부에 데이터의 전달을 제어함으로써 GOS들 사이에서 데이터 통신을 가능하게 할 수 있다.
NIC(110)는 네트워크와 데이터의 통신을 가능하게 하는 적절한 로직, 회로, 및/또는 코드를 포함할 수 있다. NIC(110)는 예를 들어 기본 L2 스위칭, VLAN 기반 스위칭, TCP 오프로드(offload), iSCSI, 및/또는 RDMA 동작들을 가능하게 할 수 있다. NIC(110)는, 독립된 세트들의 큐들에 의해 각 GOS와의 통신이 일어나기 때문에 OS 가상화-인식 NIC라고 불릴 수 있다. NIC(110)는 올바른 타겟 GOS를 선택하기 위해 사용되기 위해 다른 것들 사이에서 예를 들어 VLAN 주소, L3 주소, L4 주소와 같은 올바른 주소 또는 주소 정보의 조합을 결정할 수 있다. 이를 테면, NIC(110)는 수신된 패킷들의 MAC 주소를 결정할 수 있으며, 상기 수신된 패킷들을 적절한 MAC 주소와 함께 상기 GOS에 해당하는 RX 큐에 전달할 수 있다. 마찬가지로, NCI(110)는 상기 TX 큐들에서 송신을 위해 포스팅된 패킷들이 송신될 수 있는 순서를 조정 및/또는 중재함으로써 상기 GOS들로부터 상기 네트워크에 패킷들의 전달을 가능하게 할 수 있다. 이러한 면에서, NIC(110)는 다이렉트 입력/출력(I/O) 또는 하이퍼바이저 바이패스 동작들을 가능하게 한다고 한다.
본 발명의 몇몇 실시예들은 예를 들어 TOS 비트들과 같이 MAC 주소들 또는 VLAN 태그들 또는 IP 주소들 또는 항목들의 유효성, 정정, 및/또는 생성을 허용할 수 있는 NIC(110)를 포함할 수 있다. 예를 들어, NIC(110)는 GOS가 잘못된 소스 MAC 주소로 송신될 패킷을 요청할 수 있다. NIC(110)는 예를 들어 패킷에 대한 소스 MAC 주소를 특정 GOS 또는 버퍼들, 및/또는 패킷 타입들에 관련된 MAC 주소들과 비교함으로써 소스 MAC 주소를 확인할 수 있다.
NIC(110)는 TGOS에 및/또는 GOS에 잘못된 소스 MAC 주소를 오류로써 플래깅(flag)하고, 그 패킷을 버릴 수 있다. 본 발명의 또 하나의 실시예는 NIC(110)가 정확하지 않은 파라메터 또는 항목, 예를 들어 GOS로부터의 패킷들에 대한 소스 MAC 주소를 올바른 소스 MAC 주소로 덮어쓰고, 상기 패킷을 송신하도록 진행할 수 있게 한다. 마찬가지로, 본 발명의 또 하나의 실시예는 소스 MAC 주소를 확인하지 않고 상기 GOS들로부터 각 패킷에 대한 적절한 소스 MAC 주소를 생성할 수 있다. 따라서, GOS에서 가동되는 어플리케이션 프로그램은, NCI(110)가 상기 소스 MAC 주소를 기록하는 것에 따라 소스 MAC 주소를 생성할 필요가 없다. NIC(110)는 또한 GOS별로 대역폭의 사용 및/또는 우선순위를 감시할 수 있다. NIC(110)는 예를 들어 GOS별 대역폭 한계들 또는 프레임들을 할당하고, 및/또는 GOS 또는 GOS와 연관된 어플리케이션들 또는 흐름들이 관리자 및/또는 TGOS에 의해 할당된 것과 다른 우선순위를 요구하지 않는 것을 확실하게 한다.
이벤트 큐들(108a, 112a, 및 114a)은 이벤트의 발생을 표시하기 위해 NIC(110)에 의한 데이터의 포스팅을 가능하게 하는 적절한 로직, 회로, 및/또는 코드를 포함할 수 있다. 예를 들어, NIC(110)는 상기 링크가 하향인 것을 표시하거나 상기 링크가 상향인 것을 표시하기 위해 이벤트 큐들에 데이터를 포스팅할 수 있다. 예를 들어, 상기 링크의 현재 상태, 그것이 상향이든지 하향이든지 여부는 모든 이벤트 큐들에 포스팅될 수 있다.
TX 큐들(108b, 112b, 및 114b)은 GOS들(102a, 102b, 및 102c)로부터 각각 NIC(110)를 통해 송신을 위한 데이터의 포스팅을 가능하게 하는 적절한 로직, 회로, 및/또는 코드를 포함할 수 있다. RX 큐들(108c, 112c, 및 114c)은 GOS들(102a, 102b, 및 102c)에 의해 각각 처리되기 위해 NIC(110)를 통해 수신된 데이터의 포스 팅을 가능하게 하는 적절한 로직, 회로, 및/또는 코드를 포함할 수 있다. TX 큐들(108b, 112b, 및 114b) 및/또는 RX 큐들(108c, 112c, 및 114c)은 예를 들어 NIC(110)에 통합될 수 있다. 상기 큐들은 호스트 메모리(120)에, NIC(110)에 또는 호스트 메모리(120) 및 NIC(110)의 조합에 존재할 수 있다.
NIC 프로세서(118)는 NIC(110)에서 데이터 처리 및/또는 네트워킹 동작들의 제어 및/또는 관리를 가능하게 하는 적절한 로직, 회로, 및/또는 코드를 포함할 수 있다. NIC 메모리(116)는 NIC(110)에 의해 사용되는 데이터의 저장을 가능하게 하는 적절한 로직, 회로, 및/또는 코드를 포함할 수 있다. NIC(110)는 복수의 GOS들(102a, 102b, 및 102c)에 의해 공유될 수 있다. 본 발명의 몇몇 실시예들에서, 네트워크 프로토콜 동작들은 NIC(110)에 오프로드될 수 있으며, NIC(110)에 의해 핸들링될 수 있다. 상기 오프로드 네트워크 프로토콜 동작들은 예를 들어 TCP 및/또는 IP 동작들과 같은 OSI 계층 3, 4, 및/또는 5 프로토콜 동작들을 포함할 수 있다. 상기 NIC는 또한 예를 들어 OSI 계층 2 프로토콜 동작들, 예를 들어 VLAN이 될 수 있는 링크 계층 네트워크 프로토콜 동작들을 실행할 수 있다.
따라서, NIC(110)는 복수의 GOS들을 위한 공유된 자원일 수 있다. GOS들 및 NIC의 동작들은 TGOS 및 하이퍼바이저에 의해 조정될 수 있다. GOS 및 NIC의 동작은 상기 GOS와 상기 NIC 사이에서 데이터를 복사하는 것을 포함할 수 있다. 이것은, 상기 GOS가 그 GOS에서 접속될 버퍼의 주소 또는 버퍼의 주소에 대한 참조를 NIC에 통신하는 경우에, NIC에 의해 달성될 수 있다. 상기 주소는 물리 주소 또는 가상 주소일 수 있다. 가상 주소는 예를 들어 주소 변환 테이블 또는 메모리 관리 유닛을 통해 물리 주소로 변환될 수 있다. 상기 주소 변환의 방법은 설계 및/또는 구현하기에 달려있다.
L2 스위치(130)는 NIC(110)가 예를 들어 GOS와 상기 네트워크 및/또는 GOS들 사이에서 패킷 통신을 지원하는 것을 가능하게 하는 적절한 로직, 회로, 및/또는 코드를 포함할 수 있다. NIC(110)에서 스위칭 기능을 부여하는 것은, 패킷들을 송신하거나 수신할 때 예를 들어 엔드 투 엔드(end-to-end) 레이턴시(latency)을 감소시킬 수 있다. L2 스위치(130)는 유니캐스트, 브로드캐스트, 및/또는 멀티캐스트 동작들을 지원할 수 있다. 유니캐스트 동작들은 단일 MAC 주소에 대한 패킷 송신이라고 할 수 있다. 브로드캐스트 동작들은 모든 MAC 어드레스들에 대한 패킷 송신이라고 할 수 있다. 멀티캐스트 동작들은 MAC 주소들의 특정 그룹에 대한 패킷 송신이라고 할 수 있다.
예를 들어, GOS(102a)는 네트워크에 통신가능하게 연결된 적어도 하나의 장치에 패킷을 보낼 수 있다. 이러한 예로서, 가상 NIC 드라이버(126a)는 GOS(120a)에 상응하는 TX 큐(108b)에 상기 패킷을 전달할 수 있다. 상기 L2 스위치(130)는 TX 큐(108b)로부터 상기 패킷을 수신할 수 있고, 상기 목적지 주소 또는 주소들이 상기 네트워크상에 있는 장치 또는 장치들에 해당하는지를 결정할 수 있다. 이후, NIC(110)는 상기 네트워크를 상기 패킷을 통신할 수 있다.
또 하나의 예로서, GOS(102a)는 GOS(102b) 및/또는 GOS(102c)에 송신할 데이터 패킷을 가질 수 있다. 이러한 예로서, 가상 NIC 드라이버(126a)는 GOS(102a)에 해당하는 TX 큐(108b)상에 데이터 패킷을 넣을 수 있다. L2 스위치(130)는 TX 큐(108b)로부터 데이터 패킷을 수신할 수 있으며, 목적지 MAC 주소가 GOS(102b)에 해당하는지 여부를 결정할 수 있다. 예를 들어 NIC(110)는 GOS(102b)에 상응하는 RX 큐(112c)에 상기 데이터 패킷을 넣을 수 있다. 가상 NIC 드라이버(126b)는 이벤트 큐를 통해 RX 큐(112c)에 있는 상기 데이터 패킷을 통보받을 수 있으며, 가상 NIC 드라이버(126b)는 GOS(102b)상의 어플리케이션 프로그램에 의해 사용하기 위해 데이터 패킷을 복사할 수 있다.
NIC(110)는 또한 물리 주소 확인기(validator)(132)를 포함할 수 있다. 물리 주소 확인기(132)는 수신된 패킷을 저장하기 위해 가상 NIC 드라이버에 의해 포스팅된 버퍼의 상기 주소의 유효성 확인을 가능하게 하는 적절한 로직, 회로, 및/또는 코드를 포함할 수 있다. 예를 들어, RX 큐에 있는 패킷이 포스팅된 버퍼로 전달되기 전에, 상기 물리 주소 확인기(132)는 상기 포스팅된 버퍼가 상기 수신된 패킷에 연관된 상기 GOS에 해당하는 주소 또는 메모리 위치에 있는지를 확인할 수 있다. 상기 주소가 유효한 경우, 상기 수신된 패킷은 RX 큐로부터 상기 포스팅된 버퍼로 전달된다. 만일 상기 물리 주소가 유효하지 않다면, NIC(110)는 예를 들어 TGOS 및/또는 하이퍼바이저 및/또는 메인 드라이버(124) 및/또는 가상 NIC 드라이버(126a)에게 통보할 수 있다. 따라서, 가상 NIC 드라이버(126a)는 새로운 버퍼가 상기 RX 큐로부터의 패킷 또는 TGOS 및/또는 하이퍼바이저에 의해 취해진 상기 가상 드라이브를 내려놓는 것(bring down)과 같은 또 하나의 동작을 수신하도록 포스팅할 수 있다. 송신 버퍼 주소들에 대한 유사한 유효성 확인이 상기 NIC에 의해 수행될 수 있다. GOS 및 하이퍼바이저를 이용하는 본 발명의 다양한 실시예들은 도 2a, 2b, 2c, 3a, 3b, 3c, 4a, 4b, 및 4c에 관련하여 설명될 수 있다.
도 1b는 본 발명의 일실시예에 연관하여 사용될 수 있는 호스트 시스템에서 VM들 사이에서의 통신을 위한 레벨 2(L2) 스위칭 및/또는 상위 계층의 스위칭을 지원하는 대표적인 NIC의 블록도이다. 도 1b는 많은 측면들에서 도 1a와 유사할 수 있다. 예를 들어, VM은 GOS와 유사한 기능을 포함할 수 있다. 그러나, 도 1b는 TGOS(102d)를 가지지 않을 수 있다. 그러나, 도 1b는 메인 드라이버(124) 및 하이퍼바이저(104)를 포함할 수 있는 VM 커널(VM kernel : VMK)(140)을 포함할 수 있다. 따라서, 도 1b에 있는 VMK(140)의 기능성은 도 1a에 도시된 TGOS(102d) 및/또는 하이퍼바이저(104)의 기능과 유사할 수 있다.
도 1c는 본 발명의 일실시예 연관하여 사용될 수 있는 NIC를 통해 네트워크에 송신하기 위한 대표적인 단계들을 예시하는 흐름도이다. 도 1c를 참조하면 흐름도(150)가 도시되어 있다. 시작 단계 152 이후에, 단계 154에서 도 1a에 있는 호스트 시스템(106)에 의해 지원되는 GOS에 의한 송신을 위해 패킷이 생성될 수 있다. 상기 가상 NIC 드라이버는 상기 패킷을 적절한 TX 큐에 전달할 수 있다. 도 1a의 L2 스위치(130)는 상기 TX 큐로부터 상기 패킷을 수신할 수 있으며, 목적지 MAC 주소 또는 주소들을 결정할 수 있다. 단계 156에서, 상기 패킷의 목적지에 상응하는 MAC 주소 또는 주소들에 근거하여, L2 스위치(130)는 상기 패킷 송신이 유니캐스트(unicast), 브로드캐스트(broadcast), 또는 멀티캐스트(multicast)일 수 있는지 여부를 결정할 수 있다. 상기 패킷 송신이 멀티캐스트 또는 브로드캐스트인 경우, 흐름도(150)의 프로세스는 단계 158로 진행할 수 있다.
단계 158에서, L2 스위치(130)는 멀티 캐스트 또는 브로드캐스트 송신의 일부로서 리스팅된(listed) 상기 네트워크상의 적절한 MAC 주소들에 상기 패킷을 전달할 수 있다. 단계 160에서, L2 스위치(130)는 또한 상기 멀티캐스트 또는 브로트캐스트 송신의 일부로서 리스팅된 MAC 주소와 함께 각 GOS의 RX 큐에 상기 패킷을 전달할 수 있다. 상기 리스팅된 GOS들의 각각을 위한 가상 NIC 드라이버는 상기 수신된 패킷을 통보받을 수 있으며, 상기 호스트 메모리(120)의 적절한 부분에 포스팅된 버퍼에 상기 수신된 패킷을 복사할 수 있다. 상기 리스팅된 GOS의 각각 상에서 실행되는 동작 또는 서비스는 예를 들어 상기 포스팅된 버퍼로부터 상기 수신된 패킷을 읽을 수 있다. 단계 160 이후에, 흐름도(150)의 프로세스는 종료 단계 168로 진행한다.
단계 156으로 돌아가면, 상기 패킷이 유니캐스트 주소인 경우, 흐름도(150)의 프로세스는 단계 162로 진행할 수 있다. 단계 162에서 L2 스위치(130)는 사이 MAC 주소가 상기 호스트 시스템(106)에 의해 지원되는 GOS에 해당되는지 또는 회선(wire) 또는 네트워크상의 장치에 해당되는지 여부를 결정할 수 있다. 송신될 상기 패킷의 MAC 주소가 GOS에 해당하는 경우, 흐름도(150)의 프로세스는 단계 164로 진행한다. 단계 164에서 L2 스위치(130)는 상기 GOS에 해당하는 RX 큐에 적절한 MAC 주소와 함께 상기 패킷을 전달할 수 있다. 상기 가상 NIC 드라이버는 상기 수신된 패킷을 통보받을 수 있으며, 상기 호스트 메모리(120)의 적절한 일부에 버퍼를 포스팅할 수 있다. 상기 GOS 상에서 실행되는 상기 동작 또는 서비스는 예를 들어 상기 포스팅된 버퍼로부터 상기 수신된 패킷을 읽을 수 있다. 단계 164 이후에, 흐름도(150)의 프로세스는 종료 단계 168로 진행할 수 있다.
단계 162로 돌아가면, 송신될 패킷의 MAC 주소가 네트워크상의 장치에 해당하는 경우, 흐름도(150)의 프로세스는 단계 166으로 진행할 수 있다. 단계 166에서, NIC(110) 지원을 가지는 L2 스위치(130)는 네트워크상의 적절한 MAC 주소에 상기 패킷을 전달할 수 있다. 단계 166 이후에, 흐름도(150)의 프로세스는 종료 단계 168로 진행할 수 있다.
여기에서 기술된 OS 가상화-인식(virtualization-aware) NIC는 GOS와 네트워크 사이에서 및/또는 GOS들 사이에서 패킷들의 통신을 위한 하이퍼바이저 계층의 오버헤드 요구사항들을 줄이는 OS 가상화를 가능하게 할 수 있다. 상기 OS 가상화-인식 NIC는 복수의 GOS들을 지원할 수 있다. 더욱이, 상기 OS 가상화-인식 NIC는 예를 들어 TCP 오프로드 기능들, RDMA, 및/또는 iSCSI 인터페이스들과 같은 개선된 특징들의 가상화를 가능하게 할 수 있다. 작업 요청들에 대한 지연의 감소를 가능하게 하는 본 발명의 실시예들은 다음의 도면들과 관련하여 설명될 수 있다. 예를 들어 WQE에 따라 TX 큐들 중 하나에 가해질 수 있는 작업 요청은, 어플리케이션 프로그램 버퍼로부터 NIC(110)에 곧바로 및 그곳으로부터 네트워크에 데이터를 전달하기 위해, GOS에 의해 생성될 수 있다.
도 2a는 본 발명의 일실시예에 따른 GOS 및 NIC 사이에서 중재기로서 TGOS를 사용하는, I/O 공유를 가지는 NIC에 의해 대표적인 GOS 프로토콜 오프로드 기능을 예시하는 블록도이다. 도 2a를 참조하면 GOS(210), TGOS(230), NIC(240), 하이퍼바이저(245), 및 메모리 관리 유닛(I/O MMU)(247)이 도시되어 있다. GOS(210)는 어플 리케이션 계층(212), 소켓 계층(214), 및 가상 NIC 드라이버(216)를 포함할 수 있다. 사용자 버퍼(200) 및 GOS 버퍼(222)는 GOS(210)에 의한 사용을 위해, 예를 들어 GOS(210), TGOS(230), 및/또는 하이퍼바이저(245)에 의해 할당될 수 있다. 따라서, 상기 사용자 버퍼(200) 및 GOS 버퍼(222)는 상기 GOS(210)의 논리적인 부분일 수 있다. GOS(210)는 도 1a와 연관하여 설명된 GOS(102a, 102b, 또는 102c)와 유사할 수 있다. 복수의 GOS들은 공통 자원, 예를 들어 NIC(240)를 공유할 수 있다.
어플리케이션 계층(212)은 예를 들어 이메일 서비스를 위한 어플리케이션 프로그램 또는 웹 브라우징 프로그램을 포함할 수 있다. 소켓 계층(214)은 어플리케이션 계층(212)으로부터 하위 계층, 예를 들어 TCP/IP 계층들로(그리고 그 반대의 경우에도)데이터의 전달을 가능하게 하는 적절한 코드를 포함할 수 있다. 가상 NIC 드라이버(216)는 GOS(210)로부터 NIC(240)에(그리고 그 반대의 경우에도) 데이터의 전달을 가능하게 하는 적절한 코드를 포함할 수 있다. 사용자 버퍼(200) 및 GOS 버퍼(222)는, GOS(210)에 의해 사용될 수 있는데, 예를 들어 호스트 메모리(120)의 부분일 수 있다.
TGOS(230)는 상기 네트워크로부터 데이터를 송신 및/또는 수신하는 복수의 GOS들을 지원할 수 있는 적절한 로직, 회로, 및/또는 코드를 포함할 수 있다. TGOS(230)는 소프트웨어 스위치(232), 물리 NIC 드라이버(234), TGOS 코드(230a), 및 주소 테이블(230b)을 포함할 수 있다. 상기 TGOS(230)에 의한 사용을 위해, TGOS(230) 및/또는 하이퍼바이저(245)에 의해 예를 들어 TGOS 버퍼(236) 및 수신 버퍼(238)가 할당될 수 있다. 따라서, TGOS 버퍼(236) 및 수신 버퍼(238)는 TGOS(230)의 논리적인 일부일 수 있다.
소프트웨어 스위치(232)는 상기 L2 스위치(130)와 유사하며, 복수의 GOS들 중 하나로부터 상기 NIC(240)로(그리고 그 반대의 경우에도) 데이터의 라우팅을 허용할 수 있는 적절한 코드를 포함할 수 있다. 따라서, NIC(240)는 다양한 GOS들에 의해 공유될 수 있다. 물리 NIC 드라이버(234)는 데이터가 NIC(240)로부터/에 전달되도록 허용할 수 있는 적절한 코드를 포함할 수 있다.
TGOS 버퍼(236)는 GOS(210)로부터의 데이터 및/또는 NIC(240)로부터의 데이터를 저장하기 위해 사용될 수 있다. TGOS 버퍼(236)는 예를 들어 호스트 메모리(120)의 일부일 수 있다. 수신 버퍼(238)는 NIC(240)로부터의 데이터를 보관하기 위해 사용될 수 있다. 예를 들어, 수신 버퍼(238)는 호스트 메모리(120)의 일부일 수 있으며, 또는 수신 버퍼(238)는 하드웨어 버퍼일 수 있다.
예를 들어, TGOS 코드(230a)는 GOS들에 의한 사용을 위해 버퍼의 할당을 가능하게 할 수 있다. 주소 테이블(230b)은 오프셋 인덱스 또는 버퍼를 위한 가상 주소를 상기 버퍼를 위한 물리 주소로 변환하는 것을 가능하게 할 수 있다. 주소 변환 테이블(230b)은 버퍼들의 풀(pool)을 위한 주소들을 포함할 수 있으며, 여기에서 상기 버퍼들은 예를 들어 호스트 메모리(120)의 일부일 수 있다. 본 발명의 다른 실시예들에서, 상기 주소 변환 테이블은 GOS에는 이용가능하지 않지만, 하이퍼바이저(245) 및 I/O MMU(247)에 대하여 또는 하이퍼바이저 및 I/O MMU만에 대하여 뿐만 아니라 예를 들어 TGOS(230)에 대하여 이용가능할 수 있다. 주소 변환 테이블이 주소 변환을 위해 설명되었지만, 본 발명은 그에 제한될 필요가 없다. 주소 변 환의 특정 방법들은 설계 및/또는 구현하기에 달려있다.
NIC(240)는 네트워크에 대한 송신을 위한 어플리케이션 계층으로부터의 데이터를 처리하거나, 어플리케이션 계층에 대하여 상기 네트워크로부터의 데이터를 수신할 수 있는 적절한 로직, 회로, 및/또는 코드를 포함할 수 있다. NIC(240)는 또한 NIC 버퍼(241), RDMA 또는 iSCSI 또는 다른 세션 계층을 위한 L5, 및/또는 상위 계층 코드, 하드웨어 존재 TCP/IP 계층 블록(242), 및 링크 계층 블록(244)을 포함할 수 있다. NIC 버퍼(241)는 상기 네트워크로부터 수신될 수 있는 데이터 및/또는 상기 네트워크에 송신될 수 있는 데이터를 저장하기 위해 사용될 수 있다. NIC 버퍼(241)는 예를 들어 TX 큐들(108b, 112b, 및 114b) 및 RX 큐들(108c, 112c, 및 114c)과 유사할 수 있다. TCP/IP 계층 블록(242)은 TCP/IP 프로토콜들과 관련하여 상기 네트워크로부터 송신 및/또는 수신되는 데이터를 처리하기 위해 사용될 수 있는 적절한 로직, 회로, 및/또는 코드를 포함할 수 있다. 링크 계층 블록(244)은 예를 들어 상기 네트워크로부터 송신되기 이전 및/또는 수신된 이후에 이더넷 링크 계층 프로토콜을 위한 데이터를 처리하기 위해 사용될 수 있는 적절한 로직, 회로, 및/또는 코드를 포함할 수 있다.
하이퍼바이저(245)는 상기 네트워크로부터 수신되고 송신되는 데이터의 제어를 조절하는 있는, 그리고 자원들의 할당을 위한 적절한 로직, 회로, 및/또는 코드를 포함할 수 있다. 본 발명의 몇몇 실시예들은 예를 들어 TGOS와 조화된 하이퍼바이저(245)를 포함할 수 있다. 할당된 자원들은 예를 들어 복수의 GOS들 및 TGOS, 및 상기 NIC(240)을 위한 다양한 버퍼들을 포함할 수 있다. 예를 들어 상기 버퍼들 은, GOS(210), TGOS(230), 및/또는 하이퍼바이저(245)가 동작하는 동안, 상기 호스트 메모리(120)로부터 전원이 켜진 상태(at power up)에서 및/또는 상기 호스트 메모리(120)로부터 능동적으로 할당될 수 있다. 하이퍼바이저(245)는 예를 들어 소켓 계층(214)을 통해 상기 GOS로부터 버퍼들을 위한 요청들을 수신할 수 있으며, 상기 수신된 요청들을 TGOS(230)에 라우팅할 수 있다. 그 다음 상기 TGOS(230)는 버퍼를 할당할 수 있다. TGOS(230)는 상기 하이퍼바이저(245)에 상기 할당된 버퍼의 주소 또는 상기 주소에 대한 참조(reference)를 보낼 수 있다. 그 다음 상기 하이퍼바이저(245)는 소켓 계층(214)에 상기 할당된 버퍼의 주소를 통신할 수 있다. 하나의 GOS에 대하여 할당된 메모리 자원들을 또 하나의 GOS로부터 격리시키기 위하여, 상기 GOS에 통신된 상기 메모리는 가상 주소 또는 물리 메모리 주소로 변환될 필요가 있는 버스 주소 또는 DMA 주소 또는 장치 주소로서 언급되는 주소일 수 있다. 이와 달리 상기 TGOS(230)는 상기 버퍼에 오프셋 인덱스를 보낼 수 있으며, 상기 오프셋 인덱스는 상기 소켓 계층(214)에 통신될 수 있다.
I/O MMU(247)는, 특정된 가상 주소 범위들을 위해 변환하는 것을 설정할 때, 가상 주소나, 버스 주소 또는 DMA 주소 또는 장치 주소로서 불리는 주소의 물리 주소로의 변환을 가능하게 할 수 있다. 따라서, 장치, 예를 들어 NIC(240)는 가상 메모리 주소나 버스 주소 또는 DMA 주소 또는 장치 주소로서 불리는 주소를 가지고 메모리 위치를 어드레싱하기 위해 시도할 수 있다. 이들 주소들이 상기 GOS에 의해 사용되는 가상 주소와 구별될 수 있지만, 간결하게 하기 위해 이 문서의 남은 부분에서는 이들 주소들을 가상 주소로 부르기로 한다. 상기 가상 메모리 주소는 I/O MMU(247)에 의해 해석될 수 있으며, I/O MMU(247)는 상기 가상 메모리 주소를 물리 메모리 주소로 변환할 수 있다. I/O MMU(247)는 상기 물리 메모리 주소를 예를 들어 상기 호스트 시스템 메모리에 결합된 주소 버스에 출력할 수 있다. 번갈아가면서 상기 메모리는 읽기 동작을 위한 내용을 생성하거나 쓰기 동작을 위해 그것을 저장할 수 있다. 따라서, 읽기 동작을 위해 NIC(240)는 상기 물리 메모리 주소의 위치에서 상기 데이터를 읽을 수 있다. 이와 달리 NIC(240)는 상기 I/O MMU(247)가 상기 변환된 물리 주소를 NIC(240)에 보내도록 요청할 수 있다. 그 다음 NIC(240)는 상기 물리 주소를 사용함으로써 상기 I/O MMU(247)로부터 곧바로 상기 물리 주소 위치에 접속할 수 있다.
동작을 살펴보면, GOS(210)에 있는 어플리케이션 계층(212)은 상기 네트워크에 송신될 데이터를 가질 수 있다. 상기 데이터는 예를 들어 상기 사용자 버퍼(220)에 있을 수 있다. 상기 데이터는 예를 들어 소켓 계층(214)에 의해 상기 사용자 버퍼(220)로부터 상기 GOS 버퍼(222)에 복사될 수 있다. 소켓 계층(214)은 예를 들어 GOS 버퍼(222)로서 사용할 수 있는 버퍼가 없으면, GOS 버퍼(222)로서 사용하기 위해 그것의 OS로부터 버퍼를 요청할 수 있다. 상기 OS가 제한되고 가상화 인식 자원이면, 상기 OS는 상기 TGOS로부터의 지원을 요청할 수 있다. 본 발명의 몇몇 실시예들에서 TGOS에 의한 버퍼들의 맵핑 및 피닝(pinning)은 도 4b와 관련하여 설명될 것이다. 소켓 계층(214)은 상기 가상 NIC 드라이버(216)에 상기 GOS 버퍼(222)의 주소를 표시할 수 있다.
본 발명의 하나의 실시예에서, GOS는 상기 TGOS를 통해 상기 NIC에 통신할 수 있다. 상기 가상 NIC 드라이버(216)는 상기 GOS 버퍼(222)에 있는 데이터를 전달하기 위한 인터페이스를 TGOS(230)에 제공할 수 있다. 이것은 예를 들어 GOS 버퍼(222)의 주소를 포함할 수 있다. 따라서, 하이퍼바이저(245)는 상기 GOS 버퍼(222)에 있는 데이터를 상기 GOS(210)에 해당하는 TGOS 버퍼(236)에 복사할 수 있다. 상기 데이터는 예를 들어 특정 네트워크 연결에 대한 참조를 포함할 수 있다. 그 다음 하이퍼바이저(245)는 TGOS(230)를 발동시킬 수 있다. 소프트웨어 스위치(232)는 상기 TGOS 버퍼(236)에 있는 데이터에 대한 정보를 예를 들어 물리 NIC 드라이버(234)에 포스팅할 수 있다. 상기 정보는 예를 들어 TGOS 버퍼의 주소 및/또는 상기 데이터가 어떠한 네트워크 연결에 해당되는지를 포함할 수 있다. 상기 GOS 식별성과 함께 네트워크 연결 정보는, 몇몇 어플리케이션들이 각각 하나 또는 그 이상의 개방 네트워크 연결을 가지는 경우, 상기 NIC(240)가 상기 데이터를 근사적으로 처리할 수 있게 할 수 있다.
상기 물리 NIC 드라이버(234)는 이 정보를 NIC(240)에 통신할 수 있다. 상기 TGOS 버퍼(236)에 대한 주소가 물리 주소라면, 상기 NIC(240)는 상기 TGOS 버퍼(236)로부터 예를 들어 상기 NIC 버퍼(241)에 전달하기 위해 상기 물리 주소를 사용할 수 있다. 상기 데이터 전달은 예를 들어 NIC 버퍼(241)에 대하여 프로그래밍된 I/O 또는 DMA 전달을 통해 일어날 수 있다. 만일 상기 버퍼 주소가 물리 주소가 아니라면, 상기 NIC(240)는 상응하는 물리 주소를 찾기 위해 예를 들어 상기 주소 변환 테이블(230b)을 찾을 수 있다.
상기 NIC(240)에 있는 상기 TCP/IP 계층 블록(242)은 복수의 패킷들에 대하 여 상기 TGOS(230)로부터의 상기 데이터를 나눌 수 있으며, 상기 나누어진 데이터를 적절한 TCP/IP 정보와 함께 송신되도록 캡슐화할 수 있다. 그 다음 상기 TCP/IP 계층 블록(242)으로부터의 상기 캡슐화된 데이터는 상기 링크 계층 블록(244)에 의해 적절한 링크 계층 정보와 캡슐화될 수 있다. 상기 링크 계층 블록(244)으로부터의 패킷은 상기 NIC(240)에 의해 상기 네트워크상에 송신될 수 있다.
또한, 상기 NIC(240)는 상기 네트워크로부터 패킷을 수신할 수 있다. 상기 수신된 데이터는 예를 들어 NIC 버퍼(241)에서 처리되고 저장될 수 있다. 상기 링크 계층 블록(244)은 상기 수신된 패킷으로부터 링크 계층 정보를 파싱할 수 있다. 만약 상기 링크 계층 블록(244)이 상기 패킷이 올바른 NIC에 도착한 것으로 결정한다면, 상기 링크 계층 정보는 삭제될 수 있다. 그렇지 않으면, 상기 링크 계층 블록(244)은 상기 수신된 패킷을 삭제할 수 있다. 상기 링크 계층 블록(244)은, 복수의 이더넷 패킷들이 IP 패킷을 형성하기 위해 재조합될 수 있는지 여부를 결정하기 위해, 이더넷 헤더에 있는 정보를 파싱할 수 있다. 상기 링크 계층 블록(244)은 복수의 이더넷 패킷들을 수신하고 재조립하여 하나의 IP 패킷을 형성할 수 있으며, 이것은 상기 TCP/IP 계층 블록(242)에 통신될 수 있다.
상기 TCP/IP 계층 블록(242)은 복수의 IP 패킷들이 재조립되어 TCP 패킷을 형성할 수 있는지 여부를 결정할 수 있다. 만약 그렇다면 상기 TCP/IP 계층 블록(242)은 복수의 상기 IP 패킷들을 수신하고 재조립하여 하나의 TCP 패킷을 형성할 수 있다. 상기 결과 TCP 패킷은 상기 TCP/IP 계층 블록(242)에 의해 처리되어 데이터 패킷을 형성할 수 있다. 상기 처리는 TCP 헤더를 제거하는 것을 포함할 수 있다. NIC(240)는 또한, 들어오는 프레임들을 특정 GOS에 연관시키는 것에 있어서 돕기 위해 상기 패킷에 있는 상기 주소 정보를 사용함으로써, 어떤 특정 GOS가 상기 수신된 데이터의 수신인으로 되어야 할지를 결정할 수 있다. 상기 특정 GOS는, 상기 NIC(240)가 예를 들어 이벤트 큐(108a, 112a, 또는 114a)에 이벤트를 위치시킬 때, 상기 NIC(240)에 의해 상기 수신된 데이터를 통보받을 수 있다.
상기 물리 NIC 드라이버(234)는 예를 들어 NIC 버퍼(241)에 있는 데이터를 상기 수신 버퍼(238)에 전달하는 것을 제어하기 위해 상기 NIC(240)와 통신할 수 있다. 예를 들어, 상기 물리 NIC 드라이버(234)는 상기 수신 버퍼(238)의 주소를 통신할 수 있다. 만약 상기 수신 버퍼(238)에 대한 상기 주소가 물리 주소라면, NIC(240)는 NIC 버퍼(241)로부터 수신 버퍼(238)에 데이터를 전달하기 위해 상기 물리 주소를 사용할 수 있다. 그렇지 않으면, NIC(240)는 예를 들어 I/O MMU 또는 상기 주소 변환 테이블(230b)의 서비스를 통해 상기 물리 NIC 드라이버(234)로부터의 상기 버퍼 주소를 물리 주소로 변환할 수 있다. NIC(240)에 의한 상기 데이터 전달은 예를 들어 프로그래밍된 I/O 또는 DMA 전달을 통해 달성될 수 있다.
소프트웨어 스위치(232)는 수신 버퍼(238)에 있는 데이터를, 예를 들어 상기 GOS(210)를 위한 해당 TGOS 버퍼일 수 있는 TGOS 버퍼(236)에 복사할 수 있다. TGOS 버퍼(236)에 있는 데이터는 하이퍼바이저(245)에 의해 GOS 버퍼(222)에 복사될 수 있다. 하이퍼바이저(245)는 GOS(210)에 대하여 컨텍스트 스위치를 발동시킬 수 있다. 그 다음 소켓 계층(214)은 GOS 버퍼(222)로부터의 데이터를 사용자 버퍼(220)에 복사할 수 있으며, 여기에서 어플리케이션 계층(212)은 상기 데이터에 접속할 수 있다. 예를 들어, 어플리케이션 계층(212)이 이메일 프로그램을 포함한다면, 사용자 버퍼(222)에 있는 데이터는 상기 네트워크로부터 수신된 이메일일 수 있다. 따라서, NIC(240)는 복수의 GOS들에 의해 공유될 수 있으며, 예를 들어 TCP/IP 동작들과 같은 상기 네트워크 프로토콜 동작들은 상기 공유된 NIC(240)에 오프로드될 수 있다.
TCP/IP 계층들의 예가 상기 프로토콜 스택에 대하여 사용되었지만, 본 발명은 그에 제한될 필요가 없다. 예를 들어 본 발명의 다양한 실시예들은 예를 들어 OSI(Open System Interconnection) 7 계층 네트워크 모델과 같은 다른 프로토콜 스택들을 사용하는 네트워크들에 대하여 역시 사용될 수 있다. 본 발명의 실시예들은 복수의 GOS들 및 하드웨어에 이식된 복수의 네트워크 계층들과의 가상화를 포함할 수 있다. 예를 들어, 상기 OSI 계층들(5, 4, 3, 및/또는 2)의 하드웨어 구현은 네트워크 인터페이스 카드/회로에 존재할 수 있다.
도 2b는 본 발명의 일실시예에 따른, I/O 공유를 가지는 프로토콜 오프로드 기능을 이용하여 네트워크에 데이터를 송신하기 위한 대표적인 단계들을 예시하는 흐름도이다. 도 2b를 참조하면, 단계들(250 내지 262)이 도시되어 있다. 단계 250에서, 어플리케이션 계층, 예를 들어 GOS(210)에 있는 어플리케이션 계층(212)은 네트워크에 송신할 데이터를 가질 수 있다. 상기 데이터는 상기 어플리케이션 계층(212)에 의해 사용자 버퍼(220)에 위치할 수 있다. 예를 들어, 상기 어플리케이션 계층(212)은 이메일 프로그램을 포함할 수 있으며, 사용자 버퍼(220)에 있는 데이터는 예를 들어 인터넷과 같은 상기 네트워크를 통해 보내질 수 있는 이메일일 수 있다.
단계 252에서, 상기 데이터는 상기 소켓 계층(214)에 의해 사용자 버퍼(220)로부터 GOS 버퍼(222)에 복사될 수 있다. 소켓 계층(214)은 상기 하이퍼바이저(245)에 대하여 상기 네트워크에 송신될 수 있는 상기 GOS 버퍼(222)에 있는 데이터를 표시할 수 있다. 단계 254에서, 가상 NIC 드라이버(216)는 GOS 버퍼(222)에 있는 데이터를 하이퍼바이저(245)에 전달하기 위한 인터페이스를 제공할 수 있다. 단계 256에서, 하이퍼바이저(245)는 상기 데이터를 TGOS 버퍼(236)에 복사할 수 있다. 하이퍼바이저(245)는 컨텍스트 스위치(context switch)를 TGOS(230)로 역시 발동(invoke)시킬 수 있다.
단계 258에서, TGOS 버퍼(236)에 있는 데이터는 소프트웨어 스위치(232) 및 물리 NIC 드라이버(234)를 통해 NIC(240)에 통신될 수 있다. 소프트웨어 스위치(232)는 물리 NIC 드라이버(234)에 TGOS 버퍼(236)의 주소를 표시할 수 있다. 단계 260에서, NIC(240)는 예를 들어 이더넷 케이블과 같은 네트워크 매체를 통해 송신을 위한 데이터를 처리할 수 있다. 예를 들어 NIC(240)에 있는 TCP/IP 계층 블록(242)은 상기 수신된 데이터를 캡슐화하여 TCP 패킷을 형성할 수 있다. 그 다음 IP 계층 블록(242)은 상기 TCP 패킷이 너무 크다면, 상기 TCP 데이터를 복수의 IP 패킷들로 분할할 수 있다. 마찬가지로, NIC(240)에 있는 링크 계층 블록(244)은, 상기 IP 패킷이 너무 크다면, 상기 IP 패킷을 복수의 이더넷 패킷으로 분할할 수 있다. 단계 262에서, NIC(240)는 상기 네트워크 매체상에 상기 데이터를 송신할 수 있다.
도 2c는 본 발명의 일실시예에 따른, I/O 공유를 가지는 프로토콜 오프로드 기능을 이용하여 네트워크로부터 데이터를 수신하기 위한 대표적인 단계들을 예시하는 흐름도이다. 도 2c를 참조하면, 단계들(270 내지 284)이 도시되어 있다. 단계 270에서, NIC(240)는 상기 네트워크로부터 패킷을 수신할 수 있다. 단계 272에서, NIC(240)는 상기 수신된 패킷을 처리할 수 있으며, 이 패킷은 상기 패킷이 NIC(240)에 의해 수신되어야 함을 확인시키는 링크 계층 블록(244)을 포함할 수 있다. 링크 계층 블록(244)은 역시 예를 들어 이더넷 정보를 제거하여 IP 패킷을 형성할 수 있다. NIC(240)에 있는 링크 계층 블록(244)은 역시 복수의 상기 수신된 이더넷 패킷들을 예들에서 하나의 IP 패킷으로 재조립하며, 여기에서 상기 복수의 수신된 이더넷 패킷들은 송신 네트워크 노드에 의한 하나의 IP 패킷의 분할의 결과이다.
결과 IP 패킷은 TCP/IP 계층 블록(242)에 의해 처리될 수 있다. NIC(240)에 있는 TCP/IP 계층 블록(242)은 예를 들어 복수의 IP 패킷들을 하나의 TCP 패킷으로 재조립하기 위하여 파싱할 수 있으며, 여기에서 상기 복수의 수신된 이더넷 패킷들은 상기 송신 네트워크 노드에 의한 하나의 IP 패킷의 분할의 결과이다. NIC(240)는 역시 상기 수신된 데이터가 통신될 수 있는 GOS를 결정할 수 있다.
단계 274에서, NIC(240)는 수신 버퍼(238)에 상기 수신된 데이터를 전달할 수 있으며, 상기 데이터가 수신 버퍼(238)에 존재함을 물리 NIC 드라이버(234)에 표시할 수 있다. 단계 276에서, 물리 NIC 드라이버(234)는 소프트웨어 스위치(232)에 수신 버퍼(238)에 있는 데이터를 표시할 수 있다. 따라서, 소프트웨어 스위 치(232)는 수신 버퍼(238)에 있는 데이터를 예를 들어 GOS(210)를 위한 적절한 TGOS 버퍼일 수 있는 TGOS 버퍼(236)에 복사할 수 있다.
단계 278에서, TGSO 버퍼(236)에 있는 데이터는 하이퍼바이저(245)에 복사될 수 있다. 하이퍼바이저(245)는 역시 컨텍스트 스위치를 상기 네트워크로부터 수신된 데이터를 위한 목적지일 수 있는 GOS(210)로 발동시킬 수 있다. 단계 280에서, 가상 NIC 드라이버(216)는 하이퍼바이저(245)로부터의 데이터 및 GOS 버퍼(222)에 있는 데이터를 복사할 수 있다. 단계 282에서, 소켓 계층(214)은 GOS 버퍼(222)로부터의 데이터를 사용자 버퍼(220)에 복사할 수 있다. 단계 284에서, 어플리케이션 계층(212)은 사용자 버퍼(220)에 있는 데이터에 접속할 수 있다.
도 3a는 본 발명의 실시예에 따른 I/O 공유를 가지는 대표적인 다이렉트 I/O 기능을 예시하는 블록도이다. 도 3a를 참조하면, GOS들(310... 311), TGOS(330), NIC(340), 하이퍼바이저(345), 및/또는 I/O 메모리 관리 유닛(I/O MMU)(347)이 도시되어 있다. 각각의 GOS들(310...311)은 어플리케이션 계층(312), 소켓 계층(314), TCP/IP 계층(316), 및 가상 NIC 드라이버(318)를 포함할 수 있다. 사용자 버퍼(320), GOS 버퍼(322), 및 수신 버퍼(324)는 GOS들(310)에 의한 사용을 위해, 예를 들어 GOS들(310...311), TGOS(330), 및/또는 하이퍼바이저(345)에 의해 할당될 수 있다. 따라서, 각각의 GOS들(310...311)은 논리적 및/또는 물리적으로 사용자 버퍼(320), GOS 버퍼(322), 및 수신 버퍼(324)를 포함할 수 있다. GOS들(310...311)은 도 1a와 관련하여 설명된 GOS(102a, 102b, 또는 102c)와 유사할 수 있다. 복수의 GOS들(310...311)은 공통 자원, 예를 들어 NIC(340)를 공유할 수 있다.
어플리케이션 계층(312)은 적절한 어플리케이션 프로그램들, 예를 들어 이메일 어플리케이션 프로그램 또는 웹 브라우징 프로그램을 포함할 수 있다. 소켓 계층(314)은 사용자 버퍼(320)에 있는 데이터를 GOS 버퍼(322)에( 그리고 그 반대의 경우에도) 복사하는 것을 가능하게 할 수 있는 적절한 코드를 포함할 수 있다. TCP/IP 계층(316)은 네트워크상에 송신될 수 있는 데이터, 또는 상기 네트워크로부터 수신될 수 있는 데이터에 대한 TCP 계층 처리 및/또는 IP 계층 처리를 가능하게 할 수 있는 적절한 코드를 포함할 수 있다. 가상 NIC 드라이버(318)는 NIC(340)과 각각의 GOS들(310...311) 사이에서의 데이터 전달을 가능하게 할 수 있는 적절한 코드를 포함할 수 있다. 사용자 버퍼(320), GOS 버퍼(322), 및 수신 버퍼(324)는 예를 들어 호스트 메모리(120)의 일부일 수 있다. 이와 달리, 수신 버퍼(324)는 예를 들어 하드웨어 버퍼일 수 있다.
TGOS(330)는 네트워크로부터 데이터를 송신 및/또는 수신하는 복수의 GOS들을 지원가능한 적절한 로직, 회로, 및/또는 코드를 포함할 수 있다. TGOS(330)는 예를 들어 GOS들에 의한 사용을 위한 버퍼의 할당을 가능하게 하는 TGOS 코드(330a)를 포함할 수 있다. 상기 버퍼들은 예를 들어 사용자 버퍼(320), GOS 버퍼(322), 및/또는 수신 버퍼(324)일 수 있다. TGOS(330)는 버퍼를 위한 오프셋 인덱스 또는 가상 주소를 상기 버퍼를 위한 물리 주소로 변환하는 것을 가능하게 하는 역시 주소 테이블(330b)을 포함할 수 있다. 주소 변환 테이블(330b)은 버퍼들의 풀(pool)을 위한 주소들을 포함할 수 있으며, 여기에서, 상기 버퍼들은 예를 들어 호스트 메모리(120)의 일부일 수 있다.
NIC(340)는 네트워크에 송신을 위한 어플리케이션 계층으로부터의 데이터를 처리하거나, 상기 네트워크로부터 어플리케이션 계층에 데이터를 수신할 수 있는 적절한 로직, 회로, 및/또는 코드를 포함할 수 있다. NIC(340)는 역시 NIC 버퍼(341) 및 링크 계층 블록(342)을 포함할 수 있다. NIC 버퍼(341)는 상기 네트워크로부터 수신될 수 있는 데이터 및/또는 상기 네트워크에 송신될 수 있는 데이터를 저장하는데 사용될 수 있다. NIC 버퍼(341)는 예를 들어 TX 큐들(108b, 112b, 및 114b) 및 RX 큐들(108c, 112c, 및 114c)과 유사할 수 있다. 링크 계층 블록(342)은 예를 들어 이더넷 네트워크에 송신되기 전에 이더넷 링크 계층 프로토콜을 위한 데이터를 처리하는데 사용될 수 있는 적절한 로직, 회로, 및/또는 코드를 포함할 수 있다. 이더넷 네트워크로부터 수신된 데이터는 역시 링크 계층 블록(342)에 의해 처리될 수 있다.
하이퍼바이저(345)는 상기 네트워크로부터 수신되거나 상기 네트워크로 송신되는, 그리고 자원들의 할당을 위한, 데이터의 제어를 조정할 수 있는 적절한 로직, 회로, 및/또는 코드를 포함할 수 있다. 할당된 자원들은 예를 들어 GOS들(310...311) 및 NIC(340)를 위한 다양한 버퍼들을 포함할 수 있다. 예를 들어, 상기 버퍼들은, GOS들(310...311), TGOS(330), 및/또는 NIC(340)가 동작하는 동안, 호스트 메모리(120)로부터 전원이 켜진 상태에서 및/또는 호스트 메모리(120)로부터 능동적으로 할당될 수 있다.
I/O MMU(347)는 가상 주소를 물리 주소로 변환을 가능하게 할 수 있게 하는 적절한 로직, 회로, 및/또는 코드를 포함할 수 있다. 따라서, 장치, 예를 들어 NIC(340)는 가상 메모리 주소와 함께 메모리 위치를 어드레싱할 수 있다. 상기 가상 메모리 주소는 I/O MMU(347)에 의해 가로채질 수 있으며, I/O MMU(347)는 상기 가상 메모리 주소를 물리 메모리 주소로 변환시킬 수 있다. I/O MMU(347)는 상기 물리 메모리 주소를 예를 들어 호스트 물리 메모리에 결합된 주소 버스에 출력할 수 있다. 그런 다음 NIC(340)는 상기 물리 메모리 주소의 위치에서 데이터를 접속할 수 있다. 또한 NIC(340)는 I/O MMU(347)가 상기 변환된 물리 주소를 NIC(340)에 보내도록 요청할 수 있다.
동작에 있어서, 어플리케이션 계층, 예를 들어 GOS(310)에 있는 어플리케이션 계층(312)은 상기 네트워크에 송신될 데이터를 가질 수 있다. 송신될 데이터는 사용자 버퍼(320)에 저장될 수 있다. 상기 데이터는 예를 들어 소켓 계층(314)에 의해 사용자 버퍼(320)로부터 GOS 버퍼(322)로 복사될 수 있다. 소켓 계층(314)은, 사용가능한 GOS 버퍼(322)가 없다면, TGOS(330)로부터 GOS 버퍼(322)로서 사용하기 위한 버퍼를 요청할 수 있다.
소켓 계층(314)은 GOS 버퍼(322)에 있는 데이터를 처리하기 위해 TCP/IP 프로토콜 계층(316)을 호출할 수 있다. GOS 버퍼(322)에 있는 데이터는 TCP/IP 프로토콜들에 따라 TCP/IP 프로토콜 계층(316)에 의해 처리될 수 있다. 예를 들어, 사용자 버퍼(320)로부터 복사된 데이터는 TCP/IP 프로토콜 계층(316)에 의해 처리되어 TCP 패킷을 형성할 수 있다. 그 다음 그 TCP 패킷은 TCP/IP 프로토콜 계층(316)에 의해 처리되어 IP 패킷을 형성할 수 있다.
소켓 계층(314) 또는 GOS에 있는 다른 OS 엔터티는 GOS 버퍼(322)에 상응하는 값을 가상 NIC 드라이버(318)에 통신할 수 있다. 상기 값은 버퍼의 오프셋 인덱스, 버퍼의 가상 주소, 또는 상기 버퍼의 물리 주소가 되기 위해 변환될 수 있다. 세세한 버퍼 어드레싱 구현 형태는 설계하기에 달려있다. 소켓 계층(314)은 데이터가 GOS 버퍼(322)에 저장되어 있음을 하이퍼바이저(345)에 표시할 수 있으며, 상기 저장된 데이터는 상기 네트워크에 송신될 수 있다. 예를 들어 하이퍼바이저(345)는 NIC(340)과 같은 자원들을 GOS(310)에 할당하여 GOS 버퍼(322)에 있는 데이터의 송신을 가능하게 한다. GOS 버퍼(322)에 있는 데이터는 이후에 가상 NIC 드라이버(318)를 통해 NIC(340)에 통신될 수 있다.
가상 NIC 드라이버(318)는 NIC(340)에 GOS 버퍼(322)의 주소의 표시를 제공할 수 있다. 따라서, 상기 NIC(340)는 GOS 버퍼(322)에 있는 데이터를 예를 들어 NIC 버퍼(341)에 복사할 수 있다. NIC(340)는 예를 들어 프로그래밍된 I/O 또는 DMA 전달을 통해 상기 NIC 버퍼(341)로부터 상기 데이터를 복사할 수 있다. 상기 NIC 버퍼(314)에 저장된 데이터는 링크 계층 블록(342)에 의해 예를 들어 적절한 이더넷 링크 계층 정보와 함께 캡슐화될 수 있다. 그 다음 상기 링크 계층 블록(342)에 의한 상기 결과 패킷 출력은 예를 들어 NIC(340)에 의해 이더넷 네트워크에 송신될 수 있다.
또한, 상기 NIC(340)는 예를 들어 상기 이더넷 네트워크로부터 패킷을 수신할 수 있다. 상기 수신된 패킷은 예를 들어 NIC 버퍼(341)에 저장될 수 있다. 상기 링크 계층 블록(342)은 상기 수신된 패킷으로부터 상기 링크 계층 정보를 파싱할 수 있다. 만약 상기 링크 계층 블록(342)이 상기 이더넷 패킷이 올바른 NIC에 도착했다면, 상기 이더넷 패킷은 IP 패킷을 만들어내도록 처리될 수 있다. 역시 복수의 이더넷 패킷들로부터 IP 패킷이 재조립될 수 있다.
이더넷 패킷을 처리하는 상기 링크 계층(342)이 종료되는 경우, 상기 NIC(340)는 NIC 버퍼(341)에 있는 IP 패킷을 수신 버퍼(324)에 복사할 수 있다. 상기 IP 패킷은 예를 들어 프로그래밍된 I/O 또는 DMA 전달에 의하여 수신 버퍼(428)에 복사될 수 있다. 적절한 GOS가 IP 패킷을 수신할 수 있도록 하기 위하여, 이벤트 상태가 적절한 이벤트 큐(108a, 112a, 또는 114a)에 위치될 수 있다. NIC(340)는, 상기 수신 버퍼(324)에 데이터가 저장되어 있다는 표시를 상기 가상 NIC 드라이버(318)에 제공할 수 있다. 가상 NIC 드라이버(318)는 소켓 계층(314)에 상기 수신 버퍼(324)가 데이터를 포함하고 있음을 알려줄 수 있다. 상기 소켓 계층(314)은 상기 수신 버퍼(324)에 저장되어 있는 데이터를 GOS 버퍼(322)에 복사할 수 있다.
그 다음 소켓 계층(314)은 TCP/IP 계층(316)을 호출할 수 있다. TCP/IP 계층(316)은 상기 데이터-TCP 패킷을 생성하기 위하여 GOS 버퍼(322)에 저장되어 있는 IP 패킷일 수 있음-로부터 IP 및/또는 TCP 정보를 파싱할 수 있다. 예를 들어, TCP/IP 계층(316)은 GOS 버퍼(322)에 저장된 IP 패킷으로부터 IP 정보를 제거하여 TCP 패킷을 남길 수 있다. 그 다음 상기 TCP 패킷은 TCP/IP 계층(316)에 의해 추가 처리될 수 있다. 상기 TCP 패킷으로부터 데이터가 추출될 수 있으며, 그리고 이 데이터는 소켓 계층(314)에 의해 사용자 버퍼(320)에 복사될 수 있다. 따라서, 복수의 GOS들은 NIC(340)를 공유할 수 있으며, 각 GOS는 상기 NIC(340)와 곧바로 통신 할 수 있다.
도 3b는 본 발명의 일실시예에 따른 I/O 공유를 가지는 다이렉트 I/O를 이용하여 네트워크에 데이터를 송신하기 위한 대표적인 단계들을 예시하는 흐름도이다. 도 3b를 참조하면, 단계들(350 내지 360)이 도시되어 있다. 단계 350에서, 어플리케이션 계층, 예를 들어 GOS(310)에 있는 어플리케이션 계층(312)은 네트워크에 송신할 데이터를 가지고 있을 수 있다. 상기 데이터는 어플리케이션 계층(312)에 의해 사용자 버퍼에 위치될 수 있다.
단계 352에서, 상기 데이터는 소켓 계층(314)에 의해 사용자 버퍼(320)로부터 GOS 버퍼(322)에 복사될 수 있다. 소켓 계층(314)은 예를 들어 TGOS(330)로부터 GOS 버퍼(322)를 요청할 수 있다. 또한 소켓 계층(314)은 GOS 버퍼(322)에 송신될 데이터가 존재함의 표시를 하이퍼바이저(345)에 제공할 수 있다. 또한 소켓 계층(314)은 가상 NIC 드라이버(318)에 GOS 버퍼(322)의 주소를 제공할 수 있다. 하이퍼바이저(345)는 GOS(310)에 의한 사용을 위해 예를 들어 NIC(340)와 같은 자원들을 할당할 수 있다. 또한 소켓 계층(314)은 GOS 버퍼(322)에 있는 상기 데이터를 처리하기 위해 상기 TCP/IP 계층을 호출할 수 있다.
단계 354에서, 상기 TCP/IP 계층(316)은 예를 들어 GOS 버퍼(322)에 있는 데이터에 TCP 헤더를 덧붙임으로써 GOS 버퍼에 있는 데이터를 처리하여 TCP 패킷을 생성할 수 있다. TCP/IP 계층(316)은 상기 결과 TCP 패킷을 처리하여 하나 또는 그 이상의 IP 패킷들을 생성할 수 있다. TCP/IP 계층(316)은 TCP 패킷이 너무 크다면, 단계 354에서 상기 TCP 패킷을 분할하여 복수의 IP 패킷들을 생성할 수 있다. 상기 TCP/IP 계층(316)은 TCP 패킷 또는 상기 분할된 TCP 패킷들의 각각에 IP 헤더를 덧붙여서 하나 또는 그 이상의 IP 패킷들을 형성할 수 있다.
단계 356에서, 상기 가상 NIC 드라이버(318)는 인터페이스를 제공하여 NIC(340)가 GOS 버퍼(322)에 있는 IP 패킷들에 접속하게 할 수 있다. 가상 NIC 드라이버(318)는 NIC(340)에 GOS 버퍼(322)의 주소를 포스팅할 수 있다. NIC(340)는 GOS 버퍼(322)에 있는 IP 패킷들을 NIC 버퍼(341)에 복사할 수 있다. 단계 358에서, NIC(340)은 예를 들어 이더넷 케이블과 같은 네트워크 매체를 통해 송신을 위해 NIC 버퍼(341)에 있는 IP 패킷들을 처리할 수 있다. 이것은 예를 들어 이더넷 프로토콜을 위한 데이터 처리를 포함할 수 있다. 예를 들어, NIC(340)에 있는 링크 계층 블록(342)은 IP 패킷이 너무 크다면, 상기 IP 패킷을 복수의 이더넷 패킷들로 분할할 수 있다. 단계 360에서, NIC(340)는 네트워크 매체상에 상기 이더넷 패킷들을 송신할 수 있으며, 상기 네트워크 매체는 예를 들어 하나의 네트워크 노드에서 또 하나의 네트워크 노드로 상기 이더넷 패킷들을 전송하는 케이블일 수 있다.
도 3c는 본 발명의 일실시예에 따른 I/O 공유를 가지는 다이렉트 I/O를 이용하여 네트워크로부터 데이터를 수신하기 위한 대표적인 단계들을 예시하는 흐름도이다. 도 3c를 참조하면 단계들(370 내지 382)이 도시되어 있다. 단계 370에서 NIC(340)는 상기 네트워크로부터 이더넷 패킷을 수신할 수 있다. 상기 수신된 n 이더넷 패킷은 예를 들어 NIC 버퍼(341)에 저장될 수 있다. 단계 372에서, 상기 NIC(340)에 있는 상기 링크 계층 블록(342)은 상기 수신된 이더넷 패킷을 처리할 수 있으며, 상기 이더넷 패킷은 상기 이더넷 패킷이 NIC(340)에 의해 수신되어야 하는 것을 확인시키는 것을 포함할 수 있다. 또한 상기 링크 계층 블록(342)은 예를 들어 상기 수신된 이더넷 패킷으로부터 이더넷 정보를 제거하여 IP 패킷을 형성할 수 있다. 또한 NIC(340)는 어느 GOS가 상기 IP 패킷을 수신해야하는 지를 결정할 수 있다. NIC(340)에 있는 상기 링크 계층 블록(342)은, 송신 동안 상기 송신 네트워크 노드가 IP 패킷을 복수의 이더넷 패킷들로 분할했다면, 복수의 상기 이더넷 패킷들을 하나의 IP 패킷으로 재조립할 수 있다.
단계 374에서, NIC(340)는 NIC 버퍼(341)에 있는 IP 패킷을 수신 버퍼(324)에 전달할 수 있다. 상기 NIC(340)는 IP 패킷의 전달을 종료하는 경우, IP 패킷 전달을 종료하였음을 상기 NIC 드라이버에 표시할 수 있다. 상기 가상 NIC 드라이버(318)는 상기 수신 버퍼(324)가 새로운 IP 패킷을 가지고 있음을 상기 소켓 계층(314)에 표시할 수 있다. 단계 376에서, 소켓 계층(314)은 상기 IP 패킷을 GOS, 버퍼(322)에 복사할 수 있다. 단계 378에서, TCP/IP 계층(316)은 상기 어플리케이션 계층(312)에 의한 사용을 위해 GOS 버퍼(322)에 있는 IP 패킷을 처리하여 상기 TCP 및/또는 IP 정보를 제거하고 데이터를 추출할 수 있다.
단계 380에서, 소켓 계층(314)은 GOS 버퍼(332)로부터 사용자 버퍼(320)에 상기 데이터를 복사할 수 있다. 단계 382에서, 어플리케이션 계층(212)은 사용자 버퍼(220)에 있는 데이터에 접속할 수 있다.
도 4a는 본 발명의 일실시예에 따른, I/O 공유를 가지는 대표적인 프로토콜 오프로드 기능 및 다이렉트 I/O 기능을 예시하는 블록도이다. 도 4a를 참조하면, GOS들(410... 411), TGOS(430), NIC(440), 하이퍼바이저(445), 및 I/O 메모리 관리 유닛(I/O MMU)(447)이 도시되어 있다. 각 GOS들(410...411)은 어플리케이션 계층(412), 소켓 계층(414), 및 가상 NIC 드라이버(416)를 포함할 수 있다. 사용자 버퍼(420), GOS 버퍼(422), 및 수신 버퍼(424)는 상기 GOS(410)에 의한 사용을 위해, 예를 들어 각 GOS(410...411), TGOS(420), 및/또는 하이퍼바이저(445)에 의해 할당될 수 있다. 따라서, 각 GOS들(410...411)은 논리적으로 및/또는 물리적으로 사용자 버퍼(420), GOS 버퍼(42), 및 수신 버퍼(424)를 포함할 수 있다. GOS들(410...411)은 도 1a와 연관하여 설명된 GOS(102a, 102b, 또는 102c)와 유사할 수 있다. 상기 복수의 GOS들(410...411)은 공통 자원, 예를 들어 NIC(440)를 공유할 수 있다.
어플리케이션 계층(412)은 예를 들어 이메일 어플리케이션 프로그램 또는 웹 브라우징 프로그램과 같은 사용자가 사용할 수 있는 적절한 어플리케션들을 포함할 수 있다. 소켓 계층(414)은 상기 어플리케이션 계층(412)으로부터 GOS 버퍼(422)에(그리고 그 반대의 경우에도) 사용자 버퍼에 있는 데이터를 복사하는 것을 가능하게 하는 적절한 코드를 포함할 수 있다. 상기 가상 NIC 드라이버(416)는 NIC(440)와 각 GOS들(410...411) 사이에서 데이터의 전달을 가능하게 할 수 있는 적절한 코드를 포함할 수 있다. 사용자 버퍼(420), GOS 버퍼(422), 및 수신 버퍼(424)는 예를 들어 호스트 메모리(120)의 일부일 수 있다. 이와 달리 수신 버퍼(424)는 예를 들어 하드웨어 버퍼일 수 있다.
TGOS(430)는 네트워크로부터 데이터를 송신 및/또는 수신하는 복수의 GOS들을 지원할 수 있는 적절한 로직, 회로, 및/또는 코드를 포함할 수 있다. TGOS(430) 는 예를 들어 상기 GOS들에 의한 사용을 위해 NIC 자원들 및/또는 서비스들 및/또는 버퍼들의 할당을 가능하게 하는 TGOS 코드(430a)를 포함할 수 있다. 상기 할당된 버퍼들은 예를 들어 사용자 버퍼(420), GOS 버퍼(422), 및/또는 수신 버퍼(424)일 수 있다. 또한 TGOS(430)는 버퍼를 위한 오프셋 인덱스 또는 가상 주소를 물리 주소로 변환하는 것을 가능하게 할 수 있다. 주소 테이블(430b)은 버퍼들의 풀(pool)을 위한 주소들을 포함할 수 있으며, 여기에서 상기 버퍼들은 예를 들어 호스트 메모리의 일부일 수 있다.
NIC(440)는 상기 네트워크에 송신하기 위한 어플리케이션 계층으로부터의 데이터를 처리하거나 상기 네트워크로부터 데이터를 수신할 수 있는 적절한 로직, 회로, 및/또는 코드를 포함할 수 있다. 또한 NIC(440)는 NIC 버퍼(441), TCP/IP 계층 블록(442), 및 링크 계층 블록(444)을 포함할 수 있다. NIC 버퍼(441)는 상기 네트워크로부터 수신될 수 있는 데이터 및/또는 상기 네트워크에 송신될 수 있는 데이터를 저장하는데 사용될 수 있다. NIC 버퍼(441)는 예를 들어, TX 큐들(108b, 112b, 및 114b), 및 RX 큐들(108c, 112c, 및 114c)과 유사할 수 있다.
TCP/IP 계층 블록(442)은 TCP/IP 프로토콜들과 관련하여 상기 네트워크로부터 송신된 및/또는 수신된 데이터를 처리하기 위해 사용될 수 있는 적절한 로직, 회로, 및/또는 코드를 포함할 수 있다. 링크 계층 블록(444)은 예를 들어 이더넷 네트워크에 송신되기 전에 이더넷 링크 계층 프로토콜을 위한 데이터를 처리하기 위해 사용될 수 있는 적절한 로직, 회로, 및/또는 코드를 포함할 수 있다. 상기 이더넷 네트워크로부터 수신된 데이터는 링크 계층 블록(444)에 의해 처리될 수 있 다.
하이퍼바이저(445)는 네트워크로부터 수신된 또는 네트워크에 송신될 데이터의 제어를 조정할 수 있고, 자원들의 할당을 위한 적절한 로직, 회로, 및/또는 코드를 포함할 수 있다. 할당된 자원들은 예를 들어 GOS들(410...411)을 위한 다양한 버퍼들을 포함할 수 있다. 예를 들어, 상기 버퍼들은 호스트 메모리(120)로부터 전원이 켜진 상태에서 및/또는 상기 GOS들(410...411), TGOS(430), 및/또는 NIC(440)가 동작하는 동안 호스트 메모리(120)로부터 능동적으로 할당될 수 있다. 하이퍼바이저(445)는 소켓 계층(414)으로부터 버퍼들에 대한 요청을 수신할 수 있으며, 상기 수신된 요청들을 TGOS(430)에 라우팅할 수 있다. 그러면 TGOS(430)는 버퍼를 할당할 수 있다. 상기 할당된 버퍼의 주소는 하이퍼바이저(445)에 보내질 수 있다. 그러면 하이퍼바이저(445)는 상기 할당된 버퍼의 주소를 소켓 계층(414)에 통신할 수 있다. 이와 달리, 상기 버퍼를 위한 오프셋 인덱스가 상기 하이퍼바이저(445)에 통신될 수 있으며, 그러면 상기 하이퍼바이저(445)는 상기 오프셋 인덱스를 소켓 계층(414)에 통신할 수 있다.
I/O MMU(447)는 가상 주소를 물리 주소로 변환할 수 있는 적절한 로직, 회로, 및/또는 코드를 포함할 수 있다. 따라서, 장치, 예를 들어 NIC(440)는 가상 메모리 주소와 함께 메모리 위치를 어드레싱할 수 있다. 상기 가상 메모리 주소는 상기 I/O MMU(447)에 의해 가로채질 수 있으며, 상기 I/O MMU(447)는 상기 가상 메모리 주소를 물리 메모리 주소로 변환시킬 수 있다. 상기 I/O MMU(447)는 상기 물리 메모리 주소를 예를 들어 주소 버스에 출력할 수 있다. 그러면 NIC(440)는 상기 물 리 메모리 주소의 위치에서 데이터를 접속할 수 있다.
동작에서, 어플리케이션 계층, 예를 들어 GOS(410)에 있는 어플리케이션 계층(412)은 상기 네트워크에 송신될 데이터를 가지고 있을 수 있다. 상기 데이터는 예를 들어 소켓 계층(414)에 의해 상기 사용자 버퍼(420)로부터 상기 GOS 버퍼(422)에 복사될 수 있다. 소켓 계층(414)은, 만약 사용가능한 GOS 버퍼(422)가 없으면, TGOS(430)로부터 GOS 버퍼(422)로서 사용하기 위한 버퍼를 요청할 수 있다.
소켓 계층(414)은 상기 가상 NIC 드라이버(416)에 GOS 버퍼(422)를 위한 오프셋 인덱스, GOS 버퍼(422)를 위한 가상 주소, 또는 GOS 버퍼(422)를 위한 물리 주소를 표시할 수 있다. 세세한 어드레싱 구현예는 설계하기에 달려있다. 또한, 소켓 계층(414)은 상기 하이퍼바이저(445)에게 상기 네트워크에 송신될 상기 GOS 버퍼(422)의 데이터를 표시할 수 있다. 하이퍼바이저(445)는 예를 들어 NIC(440)에 있는 것과 같은 자원들을 GOS(410)에 할당하여 상기 GOS 버퍼(422)에 있는 데이터의 송신을 가능하게 할 수 있다.
상기 가상 NIC 드라이버(416)는 상기 NIC(440)에 GOS 버퍼(422)의 주소를 표시할 수 있다. 상기 주소가 물리 주소라면, 상기 NIC(440)는 상기 GOS 버퍼(422)로부터 예를 들어 NIC 버퍼(441)에 상기 데이터를 복사할 수 있다. 그렇지 않으면, 상기 NIC(440)는 상기 주소를 물리 주소로 변환할 수 있다. 상기 변환은 주소 변환 테이블(430b)을 통해, 또는 I/O MMU(447)를 통해 달성될 수 있다. NIC(440)에 대한 상기 데이터의 복사는 예를 들어 I/O 또는 DMA 전달을 통해 달성될 수 있다.
NIC(440)에 있는 TCP/IP 계층 블록(442)은 NIC 버퍼(441)에 있는 데이터로부터 하나 또는 그 이상의 IP 패킷들을 생성할 수 있다. 그 다음 상기 TCP/IP 계층 블록(442)으로부터 캡슐화된 데이터는 링크 계층 블록(444)에 의해 적절한 링크 계층 정보와 함께 캡슐화될 수 있다. 상기 링크 계층 블록(444)으로부터의 패킷은 상기 NIC(440)에 의해 네트워크, 예를 들어 이더넷 네트워크상에 송신될 수 있다.
또한, NIC(440)는 예를 들어, 이더넷 네트워크로부터 패킷을 수신할 수 있다. 상기 수신된 이더넷 패킷은 예를 들어, NIC 버퍼(441)에 저장될 수 있다. 링크 계층 블록(444)은 상기 수신된 이더넷 패킷으로부터 상기 링크 계층 정보를 파싱할 수 있다. 만약 상기 링크 계층 블록(444)이 상기 이더넷 패킷이 올바른 NIC에 도착한 것으로 결정한다면, 상기 이더넷 패킷은 처리되어 IP 패킷을 만들어 낼 수 있다. 이와 달리, IP 패킷은 복수의 이더넷 패킷들로부터 재조립될 수 있다. 상기 결과 IP 패킷은 TCP/IP 계층 블록(442)에 통신될 수 있다.
상기 TCP/IP 계층 블록(442)은 만약, IP 데이터그램(datagram)이 송신 네트워크 노드에 의한 하나의 TCP 세그멘트(segment)로부터 생성된 복수의 IP 데이터그램들중의 하나인지 여부를 결정할 수 있다. 만약 그렇다면, TCP/IP 계층 블록(442)은 복수의 IP 패킷들을 재조립하여 하나의 TCP 패킷을 형성할 수 있다. 그렇지 않다면, TCP/IP 계층 블록(442)은 하나의 IP 패킷으로부터 TCP 패킷을 생성할 수 있다. 상기 결과 TCP 패킷은 상기 TCP/IP 계층 블록(442)에 의해 처리되어 데이터 패킷을 형성할 수 있으며, 그 데이터 패킷은 NIC 버퍼(441)에 저장될 수 있다. 상기 처리는 상기 TCP 세그멘트로부터 TCP 헤더를 제거하는 것을 포함할 수 있다. 또한 NIC(440)는 상기 데이터 패킷이 어느 GOS에 통신될 수 있는지를 결정할 수 있다. 상기 NIC(440)에 의해 결정되는 상기 GOS는 예를 들어 이벤트 큐(108a, 112a, 또는 114a)에 위치하는 NIC(440)에 의한 데이터 패킷을 통보받을 수 있다.
가상 NIC 드라이버(416)는 NIC(440)와 통신하여 예를 들어 NIC 버퍼(441)에 있는 데이터 패킷을 수신 버퍼(424)로 전달하는 것을 제어할 수 있다. 예를 들어, 가상 NIC 드라이버(416)는 수신 버퍼(424)의 주소를 NIC(440)로 통신할 수 있다. 만약, 상기 수신 버퍼(424)에 대한 상기 주소가 물리 주소라면, 상기 NIC(440)는 NIC 버퍼(441)로부터 수신 버퍼(424)로 데이터 패킷을 전달하기 위해 상기 물리 주소를 사용할 수 있다. 그렇지 않으면, NIC(440)는 주소 변환 테이블(430b) 또는 I/O MMU(447)를 통해 가상 NIC 버퍼(416)로부터의 상기 버퍼 주소를 물리 주소로 변환할 수 있다. NIC(440)에 의한 상기 데이터의 전달은 예를 들어, 프로그래밍된 I/O 또는 DMA 전달을 통해 달성될 수 있다.
NIC(440)는 가상 NIC 드라이버(416)에 NIC 버퍼(441)로부터 전달된 데이터 패킷이 수신 버퍼(424)에 있을 수 있음을 표시할 수 있다. 가상 NIC 드라이버(416)는 소켓 계층(414)에, 수신 버퍼(424)가 NIC 버퍼(441)로부터의 데이터 패킷을 포함할 수 있음을 알릴 수 있다. 소켓 계층(414)은 수신 버퍼(424)에 있는 데이터 패킷을 GOS 버퍼(422)에 복사할 수 있다. GOS 버퍼(422)에 있는 데이터 버퍼는 소켓 계층(414)에 의해 사용자 버퍼(420)에 복사될 수 있다. 그러면 어플리케이션 계층(412)은 사용자 버퍼(420)에 있는 데이터 패킷에 있는 데이터에 접속할 수 있다. 따라서, 복수의 GOS들은 네트워크 프로토콜 동작을 오프로드할 수 있는 단일 NIC를 공유할 수 있다. 상기 네트워크 프로토콜 동작은 예를 들어 TCP/IP 동작들일 수 있다. 또한 각 GOS는 처리 및 네트워크로의 송신을 위해 NIC에 곧바로 데이터를 통신할 수 있으며, 상기 네트워크로부터 수신된 NIC 데이터에 의해 곧바로 통신될 수 있으며, 상기 NIC에 의해 처리될 수 있다.
TCP/IP 계층들의 일예가 프로토콜 스택에 대하여 사용되었지만, 본 발명은 그에 제한될 필요가 없다. 예를 들어, 본 발명의 몇몇 실시예들은 예를 들어, OSI(open system interconnection) 7 계층 네트워크 모델과 같은 다른 프로토콜 스택들을 사용하는 네트워크들에 대하여서도 사용될 수 있다. 본 발명의 다른 실시예들은 복수의 GOS들 및 하드웨어에 이식된 복수의 네트워크 계층들과의 가상화를 포함할 수 있다. 예를 들어, 상기 OSI 계층들(5,4,3, 및/또는 2)의 하드웨어 구현은 네트워크 인터페이스 카드/회로일 수 있다.
도 4b는 본 발명의 일실시예에 따른, I/O 공유를 가지는 프로토콜 오프로드 기능 및 다이렉트 I/O를 사용하여 네트워크에 데이터를 송신하기 위한 대표적인 단계들을 예시하는 흐름도이다. 도 4b를 참조하면, 단계들(450 내지 458)이 도시되어 있다. 단계 450에서, 어플리케이션 계층, 예를 들어, GOS(410)에 있는 어플리케이션 계층(412)은 네트워크에 송신될 데이터를 가지고 있을 수 있다. 송신될 상기 데이터는 어플리케이션 계층(412)에 의해 사용자 버퍼(420)에 위치할 수 있다.
단계 452에서, 상기 데이터는 소켓 계층(414)에 의해 사용자 버퍼(420)로부터 GOS 버퍼(422)로 복사될 수 있다. 소켓 계층(414)은 가상 NIC 드라이버(416)에 GOS 버퍼(422)의 주소를 추가로 통신할 수 있다.
단계 454에서, 가상 NIC 드라이버(416)는 GOS 버퍼(422)의 주소를 NIC(440)에 통신할 수 있다. 만약 상기 주소가 GOS 버퍼(422)의 물리 주소라면, NIC(440)는 상기 물리 주소를 사용하여 GOS 버퍼(422)로부터 예를 들어 NIC 버퍼(441)로 데이터를 전달할 수 있다. 만약 GOS 버퍼(422)의 주소가 물리 주소가 아니라면, NIC(440)는 주소 변환 테이블(430b)을 사용하여 물리 주소를 결정할 수 있다. 그 다음 NIC(440)는 GOS 버퍼(422)로부터 예를 들어 NIC 버퍼(441)에 전달할 수 있다. NIC(440)에 의한 상기 데이터 전달은 예를 들어 프로그래밍된 I/O 또는 DMA 전달을 통해 발생할 수 있다.
단계 456에서, NIC(440)는 예를 들어, 케이블과 같은 네트워크 매체를 통한 전송을 위해 NIC 버퍼(441)에 있는 데이터를 처리할 수 있다. 상기 처리는 TCP/IP 계층 블록(442)에 의한 TCP/IP 계층 처리를 포함할 수 있다. NIC(440)에 있는 TCP/IP 계층 블록(442)은 예를 들어 NIC 버퍼(441)에 있는 데이터를 처리하여 TCP 세그멘트를 형성할 수 있다. TCP/IP 계층 블록(442)은 상기 TCP 패킷이 IP 데이터그램의 데이터 필드에 대하여 허용된 크기보다 크다면, TCP 세그멘트를 복수의 데이터그램들로 분할하는 것을 포함하는 TCP 세크멘트를 추가 처리할 수 있다. 그러면 상기 복수의 패킷들은 처리되어 복수의 IP 패킷들을 형성할 수 있다.
또한 상기 처리는 링크 계층 블록(444)에 의한 링크 계층 처리를 포함할 수 있다. 링크 계층 블록(444)은 예를 들어, 이더넷 매체를 통해 전송을 위해 각 IP 패킷을 처리할 수 있다. 예를 들어, NIC(440)에 있는 링크 계층 블록(444)은, 상기 IP 패킷이 이더넷 패킷의 데이터 필드에 대하여 허용된 크기보다 크다면 상기 IP 패킷을 복수의 이더넷 패킷으로 분할할 수 있다. 단계 458에서, NIC(440)는 예를 들어, 이더넷 케이블과 같은 네트워크 매체 상에 상기 이더넷 패킷을 송신할 수 있다.
도 4c는 본 발명의 일실시예에 따른 I/O 공유를 가지는 프로토콜 오프로드 기능 및 다이렉트 I/O를 사용하여 네트워크로부터 데이터를 수신하기 위한 대표적인 단계들을 예시하는 흐름도이다. 도 4c를 참조하면, 단계들(470 내지 478)이 도시되어 있다. 단계 470에서, NIC(440)는 예를 들어 이더넷 매체를 통한 인터넷으로부터 이더넷 패킷을 수신할 수 있다. 상기 이더넷 패킷은 NIC 버퍼(441)에 저장될 수 있다. 단계 472에서, NIC(440)는 이더넷 패킷을 처리할 수 있으며, 상기 이더넷 패킷이 상기 NIC(440)에 의해 수신되어야 함을 확인하기 위한 링크 계층 블록(444)을 포함할 수 있다.
링크 계층 블록(444)은 예를 들어 상기 수신된 패킷으로부터 이더넷 정보를 제거하여 IP 패킷을 형성할 수 있다. 또한 NIC(440)에 있는 링크 계층 블록(444)은, 상기 송신 네트워크 노드가 송신동안 IP 패킷을 분할했다면, 복수의 이더넷 패킷들을 재조립하여 하나의 IP 데이터그램을 형성할 수 있다. 그러면 그 결과 IP 패킷은 TCP/IP 계층 블록(442)에 의해 처리될 수 있다. NIC(440)에 있는 TCP/IP 계층 블록(442)은, 상기 송신 네트워크 노드가 송신동안 TCP 패킷을 분할하여 복수의 IP 패킷들을 형성하였다면, 복수의 IP 패킷들을 재조립하여 하나의 TCP 패킷을 형성할 수 있다. 그러면 NIC(440)에 있는 TCP/IP 계층 블록(442)은 상기 TCP 패킷으로부터 데이터 패킷을 형성할 수 있으며, 상기 데이터 패킷은 NIC 버퍼(441)에 저장될 수 있다. 또한 NIC(440)는 어느 GOS에게 상기 데이터 패킷이 통신될 수 있는지를 결정할 수 있다. 또한 이벤트 상태는 적절한 이벤트 큐, 예를 들어, 이벤트 큐(108a, 112a, 또는 114a)에 위치할 수 있는데, 이는 그것이 데이터 패킷을 수신할 수 있다는 표시를 적절한 GOS에 제공하기 위한 것이다.
단계 474에서, NIC(440)는 NIC 버퍼(441)에 있는 데이터 패킷을 GOS(410)에 있는 수신 버퍼(424)에 전달할 수 있다. 가상 NIC 드라이버(416)는 수신 버퍼(424)의 주소를 NIC(440)에 통신할 수 있다. 가상 NIC 드라이버(416)는 소켓 계층(414)으로부터 상기 수신 버퍼(424) 주소를 수신할 수 있다. 상기 수신 버퍼(424)를 위한 주소가 물리 주소라면, NIC(440)는 NIC 버퍼(441)로부터 수신 버퍼(424)로 데이터를 전달하기 위하여 상기 물리 주소를 사용할 수 있다. 그렇지 않으면, NIC(440)는 주소 변환 테이블(430b)을 통하여 가상 NIC 드라이버(416)로부터의 버퍼 주소를 물리 주소로 변환할 수 있다. NIC(440)에 의한 데이터 전달은 예를 들어 프로그래밍된 I/O 또는 DMA 전달을 통해 달성될 수 있다.
NIC(440)는 예를 들어 이벤트 포스팅에 의해, 상기 데이터가 수신 버퍼(424)에 있다는 표시를 가상 NIC 드라이버(416)에 제공할 수 있다. 가상 NIC 드라이버(416)는 수신 버퍼(424)에 데이터 패킷이 존재함을 소켓 계층(414)에 알릴 수 있다. 단계 476에서, 소켓 계층(414)은 수신 버퍼(424)로부터 사용자 버퍼(420)에 상기 데이터를 복사할 수 있다. 단계 478에서, 어플리케이션 계층(412)은 사용자 버퍼(420)에 있는 상기 데이터 패킷에 있는 데이터에 대하여 접속할 수 있다.
본 발명의 일실시예에 따른 대표적인 시스템의 측면들은 단일 NIC, 예를 들 어, NIC(440)를 포함할 수 있다. NIC(440)는 네트워크에 접속하기 위하여 복수의 GOS들-예를 들어 GOS들(410...411)-에 의해 공유될 수 있다. 예를 들어, GOS(410)는, NIC(440)가 GOS(410)와 통신하는 경우, NIC(440)를 통해 네트워크에 접속할 수 있다.
NIC(440)는 복수의 GOS들(410...411)의 각각을 위하여 네트워크 접속을 위한 입력/출력 처리를 곧바로 핸들링할 수 있다. NIC(440)는 복수의 GOS들(410...411)의 각각을 위하여 네트워크에 송신될 데이터 및/또는 네트워크로부터 수신된 데이터의 처리를 곧바로 핸들링할 수 있으며, 상기 네트워크에 송신될 상기 데이터 및/또는 상기 네트워크로부터 수신된 상기 데이터를 핸들링하는 TGOS(430)을 구비하지 않는다. NIC(440)는 상기 복수의 GOS들중 하나를 위한 어플리케이션 버퍼, 예를 들어, 사용자 버퍼(420)로부터 단일 NIC에 있는 버퍼, 예를 들어, NIC 버퍼(441)에 곧바로 데이터를 복사할 수 있다. 또한 NIC(440)는 NIC 버퍼(441)로부터 사용자 버퍼(420)에 곧바로 데이터를 복사할 수 있다.
따라서, NIC(440)는 복수의 GOS들(410...411)에 의해 공유될 수 있는 자원일 수 있다. 하이퍼바이저, 예를 들어, 상기 GOS들(410...411)에 자원을 할당할 수 있는 하이퍼바이저(445)가, GOS가 네트워크에 접속할 수 있음을 표시하는 경우, 상기 GOS들(410...411)의 각각은 NIC(440)와 통신할 수 있다. 하이퍼바이저(445)는 TGOS(430)와 결합하여 동작할 수 있다. 이와 달리, TGOS(430)의 기능은 하이퍼바이저(445)에 임베디드될 수 있다. 상기 기능이 하이퍼바이저(445) 및 TGOS(430)에 있는지, 또는 단지 하이퍼바이저(445)에만 있는지는 설계하기에 달려있다.
NIC(440)는 예를 들어, GOS들(410...411)로부터 네트워크 프로토콜 동작들을 오프로드할 수 있다. 예를 들어, NIC(440)는 OSI 계층 3, OSI 계층 4, 및/또는 OSI 계층 5 프로토콜 동작들을 실행할 수 있다. 본 발명의 다른 실시예들에서, NIC(440)는 TCP 동작들 및/또는 IP 동작들을 실행할 수 있다. 또한 NIC(440)는 예를 들어 OSI 계층 2일 수 있는 링크 계층 네트워크 프로토콜 동작들을 실행할 수 있다. 또한, NIC(440)는 NIC(440)에 통신가능하게 결합될 수 있는 예를 들어 호스트 시스템(106)과 같은 호스트 시스템으로부터 네트워크 동작들을 오프로드할 수 있다.
NIC(440)는 예를 들어 TGOS(430)와 같은 TGOS를 통해 복수의 GOS들(410...411)의 각각을 위한 네트워크 데이터 접속을 핸들링할 수 있다. 또한, NIC(440)는 TGOS(430)에 의한 어떠한 처리도 관련시키지 않고 복수의 GOS들(410...411)의 각각을 위한 네트워크 데이터 접속을 위한 입력/출력 처리를 곧바로 할 수 있다. 그러나, TGOS(430) 및/또는 하이퍼바이저(445)는 GOS들(410...411)중 하나로부터 네트워크 데이터 접속을 위한 자원 할당 및/또는 명령들의 처리에 관련될 수 있다. GOS(410)상의 사용자 버퍼(420)는 GOS(410)에 의해 NIC(440)에 통신될 수 있는 주소를 통해 접속될 수 있다. 예를 들어, 가상 NIC 드라이버(416)는 NIC(440)에 GOS 버퍼(422)를 위한 주소를 통신할 수 있다. 따라서, NIC(440)는 GOS 버퍼(422)로부터 NIC 버퍼(441)에 데이터를 전달할 수 있다.
GOS로부터의 버퍼의 주소는 물리 주소 또는 가상 주소일 수 있다. 상기 주소가 물리 주소라면, NIC(440)는 GOS상에 있는 버퍼에 곧바로 접속할 수 있다. 만약 상기 접속이 가상 주소라면, NIC(440)는 가상 주소를 물리 주소로 변환할 수 있다. 예를 들어 NIC(440)는 TGOS(430)에 있는 주소 변환 테이블(430b)을 사용할 수 있다. 이와 달리, NIC(440)는 I/O MMU(447)를 사용할 수 있다. 따라서, NIC(440)는 I/O MMU(447)에 주소를 출력할 수 있으며, 상기 I/O MMU(447)는 주소 버스상에 물리 주소를 출력할 수 있으며, 그에 의해 상기 물리 주소에 의해 어드레싱된 위치에 대한 읽기/쓰기 접속들이 가능하게 된다. 이와 달리 GOS는 버퍼 오프셋 인덱스를 통신할 수 있다. 예를 들어, 버퍼는 버퍼들의 풀(pool)에서 50번째 버퍼일 수 있는 것을 표시하는 49의 오프셋 인덱스를 가질 수 있다. 오프셋 인덱스는 일반적으로 I/O MMU(447)를 통해 변환되지 않는다. 따라서, 오프셋 인덱스는 예를 들어 주소 변환 테이블(430b)과 같은 주소 변환 테이블을 사용하여 변환될 수 있다.
대표적인 TCP/IP 계층들이 프로토콜 스택에 대하여 사용되었지만, 본 발명은 그에 제한될 필요가 없다. 예를 들어 본 발명의 몇몇 실시예들은 다른 프로토콜 스택들-예를 들어 OSI(open system interconnection) 7 계층 네트워크 모델-을 사용하는 네트워크들에 대해서도 사용될 수 있다. 본 발명의 다른 실시예들은 복수의 GOS들 및 하드웨어에 이식된 복수의 네트워크 계층들과의 가상화를 포함할 수 있다. 예를 들어, OSI 계층들(5,4,3, 및/또는 2)의 하드웨어 구현은 네트워크 인터페이스 카드/회로일 수 있다.
또한, 다양한 기능 블록들이 설명되었지만, 본 발명은 그에 제한될 필요가 없다. 예를 들어 TGOS(430) 및 하이퍼바이저(445)의 몇몇 기능들은 하나 또는 그 이상의 기능 블록들에 결합되거나 그렇지 않으면 재분산될 수 있다. 아울러, 상기 소켓 계층(414) 및 가상 NIC 드라이버(416)의 적어도 몇 개의 기능은 하나 또는 그 이상의 기능 블록들에 결합되거나 그렇지 않으면 재분산될 수 있다.
본 발명의 다른 실시예는 기계에 의해 실행가능하며, 적어도 하나의 코드 세션을 포함하는 컴퓨터 프로그램을 가지고, 그에 의해 상기 기계가 가상화된 네트워크 환경에서 프로토콜 오프로드를 위해 상술되었던 바와 같은 단계들을 수행할 수 있게 하는 기계 가독 스토리지를 제공할 수 있다.
따라서, 본 발명은 하드웨어, 또는 소프트웨어, 또는 하드웨어 및 소프트웨어 둘 다의 조합으로 구현될 수 있다. 본 발명은 적어도 하나의 컴퓨터 시스템을 가지는 중앙 방식(centralized fashion)으로 구현될 수 있거나, 다른 구성요소들이 몇몇 서로 연결된 컴퓨터 시스템들에 흩어져 있는 분산 방식(distributed fashion)으로 구현될 수도 있다. 여기에서 기술된 방법들을 실행하기 위해 채택된 어떠한 종류의 컴퓨터 시스템이나 다른 장치도 적절하다. 하드웨어 및 소프트웨어의 전형적인 조합에는 컴퓨터 시스템에서 로딩되어 실행되었을 때, 여기에서 기술된 방법들을 실행하도록 컴퓨터 시스템을 제어하기 위한 컴퓨터 프로그램을 가지는 범용 컴퓨터 시스템이 있을 수 있다.
본 발명은 여기에서 기술된 방법들의 실행을 가능하게 하는 모든 특징들을 포함하고, 컴퓨터 시스템에 로딩되었을 때 이 방법들을 실행할 수 있는 컴퓨터 프로그램 제품에 임베디드(embedded)될 수 있다. 여기에서, 컴퓨터 프로그램은 임의의 언어, 또는 코드(code), 또는 기호(notation)에서, 직접적으로, 또는 a) 다른 언어, 코드, 또는 기호로의 변환(conversion) b) 다른 매체 형태로의 재 생(reproduction)중에서 어느 하나 또는 둘 모두를 수행한 후에 시스템이 특정한 기능을 수행하기 위한 정보 처리 능력을 가지도록 의도된 명령들 집합을 표현하는 어떤 것이라도 의미한다.
본 발명은 몇몇 실시예들을 참조하여 설명되었지만, 본 발명의 범주로부터 벗어나지 않고 다양한 변형이 이루어질 수 있으며, 균등물들이 대신될 수 있음은 당해 기술 분야에 숙련된 자들에게 이해될 것이다. 또한, 본 발명의 범주를 벗어나지 않고 특정한 상황 또는 매체를 본 발명의 기술들에 채택하기 위하여 많은 변형들이 있을 수 있다. 따라서, 본 발명은 개시된 특정 실시예들에 한정되지 않아야 하며, 첨부되는 청구항들의 범위내에 있는 모든 실시예들을 포함할 것이다.

Claims (45)

  1. 네트워크를 통해 통신하기 위한 방법으로서,
    네트워크에 대한 접속을 제공하는 단일 네트워크 인터페이스 회로를 복수의 GOS들에 의해 공유하는 단계;
    상기 복수의 GOS들의 각각을 위하여 상기 단일 네트워크 인터페이스 회로에 의해, 네트워크에 송신되는 데이터 및 네트워크로부터 수신된 데이터 중에서 적어도 하나의 처리를 곧바로 핸들링하는 단계-상기 네트워크에 송신되는 상기 데이터 및 상기 네트워크로부터 수신된 상기 데이터 중에서 상기 적어도 하나의 처리를 핸들링하는, 상기 복수의 GOS들을 위한 중재기를 가지지 않음-를 포함하되,
    상기 복수의 GOS들 중에서 하나를 위한 버퍼로부터 상기 단일 네트워크 인터페이스 회로에 있는 버퍼에 곧바로 데이터를 상기 단일 네트워크 인터페이스 회로에 의해 복사하는 단계를 포함하는 통신 방법.
  2. 청구항 1에 있어서,
    상기 복수의 GOS의 각각을 위하여 상기 네트워크 접속을 위한 입력/출력 처리를 상기 단일 네트워크 인터페이스 회로에 의해 곧바로 핸들링하는 단계를 포함하는 통신 방법.
  3. 삭제
  4. 청구항 1에 있어서,
    상기 복수의 GOS들 중의 하나에 있는 상기 버퍼는 어플리케이션 버퍼인 통신 방법.
  5. 네트워크를 통해 통신을 하기 위한 방법으로서,
    네트워크에 대한 접속을 제공하는 단일 네트워크 인터페이스 회로를 복수의 GOS들에 의해 공유하는 단계;
    상기 복수의 GOS들의 각각을 위하여, 상기 단일 네트워크 인터페이스 회로에 의해, 네트워크에 송신되는 데이터 및 네트워크로부터 수신된 데이터 중에서 적어도 하나의 처리를 핸들링하는 단계- 상기 네트워크에 송신되는 상기 데이터 및 상기 네트워크로부터 수신된 상기 데이터 중에서 적어도 하나의 처리를 핸들링하는, 상기 복수의 GOS들을 위한 TGOS를 통함- 포함하는 통신 방법.
  6. 기계에 의해 실행가능하며 네트워크를 통해 통신하기 위한 적어도 하나의 코드 섹션을 포함하는 컴퓨터 프로그램을 가지며, 그에 의해 상기 기계가,
    네트워크에 대한 접속을 제공하는 단일 네트워크 인터페이스 회로를 복수의 GOS들에 의해 공유하는 단계; 및
    상기 복수의 GOS들의 각각을 위하여, 상기 단일 네트워크 인터페이스 회로에 의해, 네트워크에 송신되는 데이터 및 네트워크로부터 수신된 데이터 중 적어도 하나의 처리를 핸들링하는 단계- 상기 네트워크에 송신되는 상기 데이터 및 상기 네트워크로부터 수신된 상기 데이터 중에서 적어도 하나의 처리를 핸들링하는, 상기 복수의 GOS들을 위한 중재기를 가지지 않음-를 포함하되,
    상기 복수의 GOS들 중에서 하나를 위한 버퍼로부터 상기 단일 네트워크 인터페이스 회로에 있는 버퍼에 곧바로 데이터를 상기 단일 네트워크 인터페이스 회로에 의해 복사하는 단계를 포함하는 단계들을 수행할 수 있게 하는 기계 가독 스토리지.
  7. 기계에 의해 실행가능하며 네트워크를 통해 통신을 하기 위한 적어도 하나의 코드 섹션을 포함하는 컴퓨터 프로그램을 가지며, 그에 의해 상기 기계가,
    네트워크에 대한 접속을 제공하는 단일 네트워크 인터페이스 회로를 복수의 GOS들에 의해 공유하는 단계; 및
    상기 복수의 GOS들의 각각을 위하여, 상기 단일 네트워크 인터페이스 회로에 의해, 네트워크에 송신되는 데이터 및 네트워크로부터 수신된 데이터 중 적어도 하나의 처리를 핸들링하는 단계- 상기 네트워크에 송신되는 상기 데이터 및 상기 네트워크로부터 수신된 상기 데이터 중에서 적어도 하나의 처리를 핸들링하는, 상기 복수의 GOS들을 위한 TGOS를 통함-를 포함하는 단계들을 실행할 수 있게 하는 기계 가독 스토리지.
  8. 네트워크를 통해 통신하기 위한 시스템으로서,
    복수의 GOS들에 의해 공유되는 단일 네트워크 인터페이스 회로를 포함하되, 상기 단일 네트워크 인터페이스 회로는 네트워크에 대한 접속을 제공하고, 상기 단일 네트워크 인터페이스 회로는 상기 복수의 GOS들 중에서 각각을 위하여 네트워크에 송신되는 데이터 및 네트워크로부터 수신된 데이터 중에서 적어도 하나의 처리를 곧바로 핸들링하고- 상기 네트워크에 송신되는 상기 데이터 및 상기 네트워크로부터 수신된 상기 데이터 중에서 적어도 하나의 처리를 핸들링하는, 상기 복수의 GOS들을 위한 중재기를 가지지 않음-, 상기 단일 네트워크 인터페이스 회로는 상기 복수의 GOS들 중에서 하나를 위한 버퍼로부터 상기 단일 네트워크 인터페이스 회로에 있는 버퍼에 곧바로 데이터를 복사하는 통신 시스템.
  9. 청구항 8에 있어서,
    상기 단일 네트워크 인터페이스 회로는 상기 복수의 GOS들을 위하여 상기 네트워크 접속을 위한 입력/출력 처리를 곧바로 핸들링하는 통신 시스템.
  10. 네트워크를 통하여 통신을 하는 시스템으로서,
    복수의 GOS들에 의해 공유되는 단일 네트워크 인터페이스 회로를 포함하되,
    상기 단일 네트워크 인터페이스 회로는 네트워크에 대한 접속을 제공하며, 상기 단일 네트워크 인터페이스 회로에 의해 상기 복수의 GOS들의 각각을 위하여, 네트워크에 송신되는 데이터 및 네트워크로부터 수신된 데이터 중에서 적어도 하나의 처리를 핸들링하는 것을 제공하는-상기 네트워크에 송신되는 상기 데이터 및 상기 네트워크로부터 수신된 상기 데이터 중에서 적어도 하나의 처리를 핸들링하는, 복수의 GOS들을 위한 TGOS를 통함- 통신 시스템.
  11. 삭제
  12. 삭제
  13. 삭제
  14. 삭제
  15. 삭제
  16. 삭제
  17. 삭제
  18. 삭제
  19. 삭제
  20. 삭제
  21. 삭제
  22. 삭제
  23. 삭제
  24. 삭제
  25. 삭제
  26. 삭제
  27. 삭제
  28. 삭제
  29. 삭제
  30. 삭제
  31. 삭제
  32. 삭제
  33. 삭제
  34. 삭제
  35. 삭제
  36. 삭제
  37. 삭제
  38. 삭제
  39. 삭제
  40. 삭제
  41. 삭제
  42. 삭제
  43. 삭제
  44. 삭제
  45. 삭제
KR1020087001938A 2006-01-12 2007-01-12 가상화된 네트워크 환경에서 입력/출력 공유를 가지는프로토콜 오프로드 및 다이렉트 입력/출력을 위한 방법 및시스템 KR100992050B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US75858106P 2006-01-12 2006-01-12
US60/758,581 2006-01-12

Publications (2)

Publication Number Publication Date
KR20080092908A KR20080092908A (ko) 2008-10-16
KR100992050B1 true KR100992050B1 (ko) 2010-11-05

Family

ID=38190746

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020087001938A KR100992050B1 (ko) 2006-01-12 2007-01-12 가상화된 네트워크 환경에서 입력/출력 공유를 가지는프로토콜 오프로드 및 다이렉트 입력/출력을 위한 방법 및시스템

Country Status (6)

Country Link
US (2) US8549098B2 (ko)
EP (1) EP1977571A2 (ko)
KR (1) KR100992050B1 (ko)
CN (1) CN101356783B (ko)
HK (1) HK1129174A1 (ko)
WO (1) WO2007082097A2 (ko)

Families Citing this family (99)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2002084499A1 (en) * 2001-04-11 2002-10-24 Chelsio Communications, Inc. Multi-purpose switching network interface controller
US7724658B1 (en) 2005-08-31 2010-05-25 Chelsio Communications, Inc. Protocol offload transmit traffic management
US7660264B1 (en) 2005-12-19 2010-02-09 Chelsio Communications, Inc. Method for traffic schedulign in intelligent network interface circuitry
US7660306B1 (en) 2006-01-12 2010-02-09 Chelsio Communications, Inc. Virtualizing the operation of intelligent network interface circuitry
US7672299B2 (en) * 2006-06-30 2010-03-02 Sun Microsystems, Inc. Network interface card virtualization based on hardware resources and software rings
US8149709B2 (en) * 2006-06-30 2012-04-03 Oracle America, Inc. Serialization queue framework for transmitting packets
US8935406B1 (en) 2007-04-16 2015-01-13 Chelsio Communications, Inc. Network adaptor configured for connection establishment offload
US8589587B1 (en) * 2007-05-11 2013-11-19 Chelsio Communications, Inc. Protocol offload in intelligent network adaptor, including application level signalling
US8060644B1 (en) 2007-05-11 2011-11-15 Chelsio Communications, Inc. Intelligent network adaptor with end-to-end flow control
US7958145B2 (en) * 2007-11-20 2011-06-07 International Business Machines Corporation Creating multiple MBeans from a factory MBean
US8990799B1 (en) * 2008-01-30 2015-03-24 Emc Corporation Direct memory access through virtual switch in device driver
US8219778B2 (en) * 2008-02-27 2012-07-10 Microchip Technology Incorporated Virtual memory interface
JP4854710B2 (ja) * 2008-06-23 2012-01-18 株式会社東芝 仮想計算機システム及びネットワークデバイス共有方法
US8739179B2 (en) * 2008-06-30 2014-05-27 Oracle America Inc. Method and system for low-overhead data transfer
US20100070642A1 (en) * 2008-09-15 2010-03-18 Microsoft Corporation Offloading network protocol operations to network interface in sleep state
US8458717B1 (en) * 2008-09-23 2013-06-04 Gogrid, LLC System and method for automated criteria based deployment of virtual machines across a grid of hosting resources
US8250267B2 (en) * 2008-10-31 2012-08-21 Netapp, Inc. Control I/O offload in a split-path storage virtualization system
US9152483B2 (en) 2009-01-16 2015-10-06 F5 Networks, Inc. Network devices with multiple fully isolated and independently resettable direct memory access channels and methods thereof
US8112491B1 (en) 2009-01-16 2012-02-07 F5 Networks, Inc. Methods and systems for providing direct DMA
US8880696B1 (en) 2009-01-16 2014-11-04 F5 Networks, Inc. Methods for sharing bandwidth across a packetized bus and systems thereof
US20100223419A1 (en) * 2009-03-02 2010-09-02 International Business Machines Corporation Copy circumvention in a virtual network environment
US8873375B2 (en) 2009-07-22 2014-10-28 Broadcom Corporation Method and system for fault tolerance and resilience for virtualized machines in a network
US8566822B2 (en) * 2009-07-22 2013-10-22 Broadcom Corporation Method and system for distributing hypervisor functionality over multiple physical devices in a network and configuring sub-hypervisor to control the virtual machines
US9313047B2 (en) 2009-11-06 2016-04-12 F5 Networks, Inc. Handling high throughput and low latency network data packets in a traffic management device
US20110153715A1 (en) * 2009-12-17 2011-06-23 Microsoft Corporation Lightweight service migration
US9389895B2 (en) * 2009-12-17 2016-07-12 Microsoft Technology Licensing, Llc Virtual storage target offload techniques
US8607229B2 (en) 2010-02-05 2013-12-10 Riverbed Technology, Inc. Correcting packet timestamps in virtualized environments
US8862178B2 (en) * 2010-02-24 2014-10-14 Qualcomm Incorporated Methods and systems for managing participation in multiple wireless networks
US8086765B2 (en) * 2010-04-29 2011-12-27 Hewlett-Packard Development Company, L.P. Direct I/O device access by a virtual machine with memory managed using memory disaggregation
PL2586137T3 (pl) 2010-06-23 2017-09-29 Telefonaktiebolaget Lm Ericsson (Publ) Zarządzanie interferencjami sygnałów referencyjnych w sieciach heterogenicznych
US8392625B2 (en) 2010-06-25 2013-03-05 Intel Corporation Methods and systems to implement a physical device to differentiate amongst multiple virtual machines of a host computer system
WO2012044700A1 (en) * 2010-10-01 2012-04-05 Huawei Technologies Co., Ltd. System and method for controlling the input/output of a virtualized network
US8462632B1 (en) * 2010-12-28 2013-06-11 Amazon Technologies, Inc. Network traffic control
US10135831B2 (en) 2011-01-28 2018-11-20 F5 Networks, Inc. System and method for combining an access control system with a traffic management system
US9792136B2 (en) * 2011-04-28 2017-10-17 Microsoft Technology Licensing, Llc Hardware assisted inter hypervisor partition data transfers
US8838837B2 (en) 2011-06-23 2014-09-16 Microsoft Corporation Failover mechanism
US8843669B2 (en) 2011-09-09 2014-09-23 Microsoft Corporation Guest partition high CPU usage mitigation when performing data transfers in a guest partition
US9143467B2 (en) * 2011-10-25 2015-09-22 Mellanox Technologies Ltd. Network interface controller with circular receive buffer
US9860175B2 (en) * 2011-12-22 2018-01-02 Intel Corporation Methods, systems, and computer program products for processing a packet
US8868672B2 (en) * 2012-05-14 2014-10-21 Advanced Micro Devices, Inc. Server node interconnect devices and methods
US9137173B2 (en) 2012-06-19 2015-09-15 Advanced Micro Devices, Inc. Devices and methods for interconnecting server nodes
US8930595B2 (en) 2012-06-21 2015-01-06 Advanced Micro Devices, Inc. Memory switch for interconnecting server nodes
CN102801610B (zh) * 2012-07-04 2015-05-13 深圳市京华科讯科技有限公司 一种外设及端口映射的网络端口合并的方法
US9253287B2 (en) 2012-08-20 2016-02-02 Advanced Micro Devices, Inc. Speculation based approach for reliable message communications
US8875256B2 (en) 2012-11-13 2014-10-28 Advanced Micro Devices, Inc. Data flow processing in a network environment
WO2014091277A1 (en) * 2012-12-12 2014-06-19 Pismo Labs Technology Limited Method and system to reduce wireless network packets for centralized layer two network
US9270602B1 (en) * 2012-12-31 2016-02-23 F5 Networks, Inc. Transmit rate pacing of large network traffic bursts to reduce jitter, buffer overrun, wasted bandwidth, and retransmissions
US10375155B1 (en) 2013-02-19 2019-08-06 F5 Networks, Inc. System and method for achieving hardware acceleration for asymmetric flow connections
US10454714B2 (en) 2013-07-10 2019-10-22 Nicira, Inc. Method and system of overlay flow control
US10027605B2 (en) * 2013-08-26 2018-07-17 Vmware, Inc. Traffic and load aware dynamic queue management
US9864606B2 (en) 2013-09-05 2018-01-09 F5 Networks, Inc. Methods for configurable hardware logic device reloading and devices thereof
US10298416B2 (en) 2013-09-05 2019-05-21 Pismo Labs Technology Limited Method and system for converting a broadcast packet to a unicast packet at an access point
CN104580124B (zh) 2013-10-29 2019-04-05 华为技术有限公司 协议栈选择方法、装置及设备
EP3085051A1 (en) 2013-12-16 2016-10-26 F5 Networks, Inc Methods for facilitating improved user authentication using persistent data and devices thereof
US10015143B1 (en) 2014-06-05 2018-07-03 F5 Networks, Inc. Methods for securing one or more license entitlement grants and devices thereof
US10237354B2 (en) * 2014-09-25 2019-03-19 Intel Corporation Technologies for offloading a virtual service endpoint to a network interface card
US10135789B2 (en) 2015-04-13 2018-11-20 Nicira, Inc. Method and system of establishing a virtual private network in a cloud service for branch networking
WO2016171739A1 (en) * 2015-04-23 2016-10-27 Hewlett-Packard Development Company, L.P. Multi-processor computing systems
US9971550B2 (en) 2015-11-12 2018-05-15 International Business Machines Corporation Zero copy support by the virtual memory manager
KR101977726B1 (ko) 2015-11-17 2019-05-14 한국전자통신연구원 가상 데스크탑 서비스 방법 및 장치
US9875132B2 (en) 2015-11-25 2018-01-23 Red Hat Israel, Ltd. Input output memory management unit based zero copy virtual machine to virtual machine communication
CN107852349B (zh) 2016-03-31 2020-12-01 慧与发展有限责任合伙企业 用于多节点集群的事务管理的系统、方法及存储介质
CN108139982B (zh) * 2016-05-31 2022-04-08 安华高科技股份有限公司 多信道输入/输出虚拟化
US10891253B2 (en) * 2016-09-08 2021-01-12 Microsoft Technology Licensing, Llc Multicast apparatuses and methods for distributing data to multiple receivers in high-performance computing and cloud-based networks
US11706127B2 (en) 2017-01-31 2023-07-18 Vmware, Inc. High performance software-defined core network
US10992568B2 (en) 2017-01-31 2021-04-27 Vmware, Inc. High performance software-defined core network
US20180219765A1 (en) 2017-01-31 2018-08-02 Waltz Networks Method and Apparatus for Network Traffic Control Optimization
US20200036624A1 (en) 2017-01-31 2020-01-30 The Mode Group High performance software-defined core network
US10516710B2 (en) 2017-02-12 2019-12-24 Mellanox Technologies, Ltd. Direct packet placement
US11979340B2 (en) 2017-02-12 2024-05-07 Mellanox Technologies, Ltd. Direct data placement
US10210125B2 (en) 2017-03-16 2019-02-19 Mellanox Technologies, Ltd. Receive queue with stride-based data scattering
US10972453B1 (en) 2017-05-03 2021-04-06 F5 Networks, Inc. Methods for token refreshment based on single sign-on (SSO) for federated identity environments and devices thereof
US11252464B2 (en) 2017-06-14 2022-02-15 Mellanox Technologies, Ltd. Regrouping of video data in host memory
US10367750B2 (en) 2017-06-15 2019-07-30 Mellanox Technologies, Ltd. Transmission and reception of raw video using scalable frame rate
US10523539B2 (en) 2017-06-22 2019-12-31 Nicira, Inc. Method and system of resiliency in cloud-delivered SD-WAN
US11115480B2 (en) 2017-10-02 2021-09-07 Vmware, Inc. Layer four optimization for a virtual network defined over public cloud
US10666460B2 (en) 2017-10-02 2020-05-26 Vmware, Inc. Measurement based routing through multiple public clouds
US10999100B2 (en) 2017-10-02 2021-05-04 Vmware, Inc. Identifying multiple nodes in a virtual network defined over a set of public clouds to connect to an external SAAS provider
US11223514B2 (en) 2017-11-09 2022-01-11 Nicira, Inc. Method and system of a dynamic high-availability mode based on current wide area network connectivity
US11416299B2 (en) 2017-12-20 2022-08-16 Telefonaktiebolaget Lm Ericsson (Publ) Method and resource scheduler for enabling a computing unit to map remote memory resources based on optical wavelength
US11855898B1 (en) 2018-03-14 2023-12-26 F5, Inc. Methods for traffic dependent direct memory access optimization and devices thereof
CN110554977A (zh) * 2018-05-30 2019-12-10 阿里巴巴集团控股有限公司 数据缓存方法、数据处理方法、计算机设备、存储介质
CN109547531B (zh) * 2018-10-19 2021-04-09 华为技术有限公司 数据处理的方法、装置和计算设备
US11537716B1 (en) 2018-11-13 2022-12-27 F5, Inc. Methods for detecting changes to a firmware and devices thereof
US11593168B2 (en) * 2019-06-26 2023-02-28 Red Hat, Inc. Zero copy message reception for devices via page tables used to access receiving buffers
US11252105B2 (en) 2019-08-27 2022-02-15 Vmware, Inc. Identifying different SaaS optimal egress nodes for virtual networks of different entities
US11044190B2 (en) 2019-10-28 2021-06-22 Vmware, Inc. Managing forwarding elements at edge nodes connected to a virtual network
US11489783B2 (en) 2019-12-12 2022-11-01 Vmware, Inc. Performing deep packet inspection in a software defined wide area network
US11722925B2 (en) 2020-01-24 2023-08-08 Vmware, Inc. Performing service class aware load balancing to distribute packets of a flow among multiple network links
US11709710B2 (en) 2020-07-30 2023-07-25 Vmware, Inc. Memory allocator for I/O operations
US11575591B2 (en) 2020-11-17 2023-02-07 Vmware, Inc. Autonomous distributed forwarding plane traceability based anomaly detection in application traffic for hyper-scale SD-WAN
US11575600B2 (en) 2020-11-24 2023-02-07 Vmware, Inc. Tunnel-less SD-WAN
US11929903B2 (en) 2020-12-29 2024-03-12 VMware LLC Emulating packet flows to assess network links for SD-WAN
CN116783874A (zh) 2021-01-18 2023-09-19 Vm维尔股份有限公司 网络感知的负载平衡
US11979325B2 (en) 2021-01-28 2024-05-07 VMware LLC Dynamic SD-WAN hub cluster scaling with machine learning
US11388086B1 (en) 2021-05-03 2022-07-12 Vmware, Inc. On demand routing mesh for dynamically adjusting SD-WAN edge forwarding node roles to facilitate routing through an SD-WAN
US11729065B2 (en) 2021-05-06 2023-08-15 Vmware, Inc. Methods for application defined virtual network service among multiple transport in SD-WAN
US11943146B2 (en) 2021-10-01 2024-03-26 VMware LLC Traffic prioritization in SD-WAN
US11909815B2 (en) 2022-06-06 2024-02-20 VMware LLC Routing based on geolocation costs

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5414851A (en) * 1992-06-15 1995-05-09 International Business Machines Corporation Method and means for sharing I/O resources by a plurality of operating systems
US6523113B1 (en) * 1998-06-09 2003-02-18 Apple Computer, Inc. Method and apparatus for copy protection
US7155542B2 (en) * 2001-06-27 2006-12-26 Intel Corporation Dynamic network interface with zero-copy frames
US7424710B1 (en) * 2002-12-18 2008-09-09 Vmware, Inc. TCP/IP offloading for virtual machines
US7478173B1 (en) * 2003-12-18 2009-01-13 Wmware, Inc. Method and system for sharing a network connection in a virtual computer system
GB2411494B (en) * 2004-02-27 2006-04-12 Toshiba Res Europ Ltd Protocol stack with modification facility
CN1674538A (zh) * 2004-03-25 2005-09-28 联想(北京)有限公司 一种基于局域网的网络存储系统及其读写数据方法
US8635612B2 (en) * 2005-04-29 2014-01-21 Microsoft Corporation Systems and methods for hypervisor discovery and utilization
US7496495B2 (en) * 2005-05-12 2009-02-24 Microsoft Corporation Virtual operating system device communication relying on memory access violations
US7721299B2 (en) * 2005-08-05 2010-05-18 Red Hat, Inc. Zero-copy network I/O for virtual hosts
US20070074192A1 (en) * 2005-08-30 2007-03-29 Geisinger Nile J Computing platform having transparent access to resources of a host platform
WO2007053980A1 (en) * 2005-11-12 2007-05-18 Intel Corporation Method and apparatus to support virtualization with code patches
US7702826B2 (en) * 2005-12-28 2010-04-20 Intel Corporation Method and apparatus by utilizing platform support for direct memory access remapping by remote DMA (“RDMA”)-capable devices

Also Published As

Publication number Publication date
EP1977571A2 (en) 2008-10-08
HK1129174A1 (en) 2009-11-20
US20070162619A1 (en) 2007-07-12
CN101356783B (zh) 2014-06-04
US7996569B2 (en) 2011-08-09
US20070162572A1 (en) 2007-07-12
CN101356783A (zh) 2009-01-28
US8549098B2 (en) 2013-10-01
WO2007082097A2 (en) 2007-07-19
KR20080092908A (ko) 2008-10-16
WO2007082097A3 (en) 2007-09-07

Similar Documents

Publication Publication Date Title
KR100992050B1 (ko) 가상화된 네트워크 환경에서 입력/출력 공유를 가지는프로토콜 오프로드 및 다이렉트 입력/출력을 위한 방법 및시스템
US20220214919A1 (en) System and method for facilitating efficient load balancing in a network interface controller (nic)
US11516037B2 (en) Methods to optimize multicast routing in overlay networks
US10880235B2 (en) Remote shared server peripherals over an ethernet network for resource virtualization
US9893977B2 (en) System and method for supporting live migration of virtual machines in a virtualization environment
US9736211B2 (en) Method and system for enabling multi-core processing of VXLAN traffic
JP4898781B2 (ja) オペレーティング・システム・パーティションのためのネットワーク通信
EP2831729B1 (en) System and method for supporting live migration of virtual machines based on an extended host channel adaptor (hca) model
JP6613308B2 (ja) ダイナミッククラウドにサブネット管理(sa)クエリキャッシングを提供するためのシステムおよび方法
US9813283B2 (en) Efficient data transfer between servers and remote peripherals
US7924840B1 (en) Virtualizing the operation of intelligent network interface circuitry
US20090063706A1 (en) Combined Layer 2 Virtual MAC Address with Layer 3 IP Address Routing
US20070050520A1 (en) Systems and methods for multi-host extension of a hierarchical interconnect network
WO2011078861A1 (en) A computer platform providing hardware support for virtual inline appliances and virtual machines
US20140157265A1 (en) Data flow affinity for heterogenous virtual machines
EP3491792B1 (en) Deliver an ingress packet to a queue at a gateway device
WO2014094522A1 (en) Communication protocol placement into switch memory
US11799988B2 (en) User datagram protocol segmentation offload for virtual machines

Legal Events

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

Payment date: 20131018

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20141124

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20151026

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20161014

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20171018

Year of fee payment: 8