KR20220035242A - 호스트 컴퓨팅 디바이스와 네트워크 인터페이스 디바이스를 포함하는 프로그래머블 네트워크 인터페이스 디바이스 - Google Patents

호스트 컴퓨팅 디바이스와 네트워크 인터페이스 디바이스를 포함하는 프로그래머블 네트워크 인터페이스 디바이스 Download PDF

Info

Publication number
KR20220035242A
KR20220035242A KR1020227005596A KR20227005596A KR20220035242A KR 20220035242 A KR20220035242 A KR 20220035242A KR 1020227005596 A KR1020227005596 A KR 1020227005596A KR 20227005596 A KR20227005596 A KR 20227005596A KR 20220035242 A KR20220035242 A KR 20220035242A
Authority
KR
South Korea
Prior art keywords
interface
programmable
network interface
different
network
Prior art date
Application number
KR1020227005596A
Other languages
English (en)
Inventor
스티븐 엘. 포프
데이비드 제이. 리독
데렉 로버츠
드미트리 키타리브
닐 터튼
Original Assignee
자일링크스 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 자일링크스 인코포레이티드 filed Critical 자일링크스 인코포레이티드
Publication of KR20220035242A publication Critical patent/KR20220035242A/ko

Links

Images

Classifications

    • 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/38Information transfer, e.g. on bus
    • G06F13/382Information transfer, e.g. on bus using universal interface adapter
    • G06F13/385Information transfer, e.g. on bus using universal interface adapter for adaptation of a particular data processing system to different peripheral devices
    • 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/14Handling requests for interconnection or transfer
    • G06F13/36Handling requests for interconnection or transfer for access to common bus or bus system
    • 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/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0831Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means
    • G06F12/0835Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means for main memory peripheral accesses (e.g. I/O or DMA)
    • 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/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0888Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using selective caching, e.g. bypass
    • 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
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/28Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
    • 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/38Information transfer, e.g. on bus
    • G06F13/382Information transfer, e.g. on bus using universal interface adapter
    • 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/38Information transfer, e.g. on bus
    • G06F13/42Bus transfer protocol, e.g. handshake; Synchronisation
    • G06F13/4282Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Microelectronics & Electronic Packaging (AREA)
  • Bus Control (AREA)
  • Stored Programmes (AREA)

Abstract

네트워크 인터페이스 디바이스(102)는 네트워크 인터페이스 디바이스(102)와 호스트 디바이스(101) 사이의 적어도 하나의 버스와의 디바이스 인터페이스를 제공하도록 구성된 프로그래머블 인터페이스(119)를 포함한다. 프로그래머블 인터페이스(119)는 복수의 상이한 타입의 디바이스 인터페이스를 지원하도록 프로그래밍 가능하다.

Description

호스트 컴퓨팅 디바이스와 네트워크 인터페이스 디바이스를 포함하는 프로그래머블 네트워크 인터페이스 디바이스
본 출원은 2019년 7월 29일에 출원된 미국 정규 출원 번호 제16/525,313호의 우선권을 주장한다.
본 출원은 네트워크 인터페이스 디바이스, 호스트 컴퓨팅 디바이스와 네트워크 인터페이스 디바이스를 포함하는 시스템, 방법 및 컴퓨터 프로그램에 관한 것이다.
네트워크 인터페이스 디바이스는 알려져 있고, 일반적으로 컴퓨팅 디바이스와 네트워크 사이에 인터페이스를 제공하는 데 사용된다. 네트워크 인터페이스 디바이스는 네트워크로부터 수신되는 데이터 및/또는 네트워크 상에 입력될 데이터를 처리하도록 구성될 수 있다.
일 양태에 따르면, 네트워크 인터페이스 디바이스가 제공되며, 이 네트워크 인터페이스 디바이스는 네트워크 인터페이스 디바이스와 호스트 디바이스 사이의 적어도 하나의 버스와의 디바이스 인터페이스를 제공하도록 구성되는 프로그래머블 인터페이스를 포함하고, 프로그래머블 인터페이스는 복수의 상이한 타입의 디바이스 인터페이스를 지원하도록 프로그래밍 가능하다.
프로그래머블 인터페이스는 적어도 2개의 디바이스 인터페이스 인스턴스를 동시에 지원하도록 구성될 수 있다.
프로그래머블 인터페이스는 공통 디스크립터 캐시를 포함할 수 있고, 공통 디스크립터 캐시는 복수의 디바이스 인터페이스 인스턴스에 대한 트랜잭션에 대한 개별 엔트리를 저장하도록 구성된다.
공통 디스크립터 캐시 내의 엔트리는: 포인터 정보(pointer information); 어댑터 인스턴스(adapter instance) 및/또는 불투명한 엔드포인트 인덱스(opaque endpoint index); 또는 메타데이터(metadata) 중 하나 이상을 포함할 수 있다.
포인터 정보는: 포인터(pointer); 포인터들의 블록(a block of pointers); 링크된 포인터들의 리스트(a linked list of pointers); 또는 트라이(trie)를 포함할 수 있다.
메타데이터는: 포인터가 포인터인지, 데이터 위치에 대한 포인터인지, 또는 추가 포인터에 대한 포인터인지의 표시; 상기 엔트리의 적어도 일부와 연관된 사이즈; 상기 엔트리와 연관된 어댑터에 대한 표시; 하나 이상의 큐(queue)에 대한 표시; 및 하나 이상의 큐 내의 위치에 대한 표시 중 하나 이상을 포함할 수 있다.
공통 디스크립터 캐시는, 상이한 디바이스 인터페이스 인스턴스와 연관되는 상이한 파티션으로 적어도 부분적으로 분할될 수 있다.
공통 디스크립터 캐시는 상이한 디바이스 인터페이스 인스턴스들 간에 공유될 수 있다.
공통 디스크립터 캐시는 각 디바이스 인터페이스 인스턴스마다 보장된 캐시 예약(guaranteed cache reservation)을 제공할 수 있다.
공통 디스크립터 캐시는 디바이스 인터페이스의 엔드포인트 인스턴스에 대해 보장된 개수의 디스크립터를 제공할 수 있다. 엔드포인트 인스턴스는 큐(queue)일 수 있다.
공통 디스크립터 캐시는 하나 이상의 디바이스 인터페이스 인스턴스에 대한 하나 이상의 디스크립터를 프리페치(prefetch)하도록 구성될 수 있다.
공통 디스크립터 캐시는, 개별 디바이스 인터페이스와 연관된 도어벨의 도어벨 처리 또는 개별 디바이스 인터페이스와 연관된 데이터의 도착 중 하나 이상에 응답하여, 하나 이상의 디바이스 인터페이스에 대한 하나 이상의 디스크립터를 프리페치하도록 구성될 수 있다.
프로그래머블 인터페이스는 복수의 상이한 디바이스 인터페이스 인스턴스를 위해 상기 적어도 버스에 대한 액세스를 스케줄링하도록 구성된 스케줄러를 포함할 수 있다.
프로그래머블 인터페이스는 각 디바이스 인터페이스 인스턴스마다 개별 디바이스 인터페이스 어댑터를 제공하도록 구성될 수 있다.
개별 디바이스 인터페이스 어댑터는 DMA 엔진을 포함할 수 있다.
프로그래머블 인터페이스는 상기 적어도 2개의 디바이스 인터페이스 인스턴스에 의해 공유되는 DMA 엔진을 제공하도록 구성될 수 있다.
프로그래머블 인터페이스는 상기 적어도 2개의 디바이스 인터페이스 인스턴스에 의해 공유되는 도어벨 기능부(doorbell function)를 제공하도록 구성될 수 있다.
프로그래머블 인터페이스는 상기 적어도 2개의 디바이스 인터페이스 인스턴스에 의해 공유되는 어드레스 변환 서비스를 제공하도록 구성될 수 있다.
상기 복수의 타입의 디바이스 인터페이스 중 적어도 2개는 상이한 큐 구조 타입과 연관될 수 있다.
상기 복수의 타입의 디바이스 인터페이스 중 적어도 2개는 하나 이상의 상이한 시맨틱 또는 커맨드와 연관될 수 있다.
복수의 타입의 디바이스 인터페이스는 하나 이상의 RDMA 또는 Virtio 또는 NVMe 디바이스 인터페이스를 포함할 수 있다.
프로그래머블 인터페이스는 상기 적어도 하나의 버스에 대한 하나 이상의 상이한 버스 프로토콜을 지원하도록 구성될 수 있다.
하나 이상의 상이한 버스 프로토콜은 PCIe 버스; AXI 버스; CCIX 버스; CAPI 버스; 또는 OPEN CAPI 버스 중 하나 이상을 포함할 수 있다.
프로그래머블 인터페이스는 상기 상이한 타입의 디바이스 인터페이스 중 하나 이상을 지원하도록 프로그래밍 가능한 하나 이상의 템플릿 기능부를 포함할 수 있다.
상기 네트워크 인터페이스 디바이스가 동작하는 동안, 상기 프로그래머블 인터페이스는 적어도 하나의 디바이스 인터페이스 인스턴스를 제거하도록 구성될 수 있다.
상기 네트워크 인터페이스 디바이스가 동작하는 동안, 상기 프로그래머블 인터페이스는 적어도 하나의 디바이스 인터페이스 인스턴스를 추가하도록 구성될 수 있다.
상기 네트워크 인터페이스 디바이스가 동작하는 동안, 상기 프로그래머블 인터페이스는 적어도 하나의 디바이스 인터페이스 인스턴스로부터 적어도 하나의 다른 디바이스 인터페이스 인스턴스로 스위칭하도록 구성될 수 있다.
네트워크 인터페이스 디바이스는 상기 네트워크 인터페이스 디바이스의 프로그래밍을 제어하도록 구성된 프로그램 정보를 수신하도록 구성될 수 있다.
프로그램 정보는 상기 호스트 디바이스 또는 네트워크 중 하나로부터 수신될 수 있다.
프로그램 정보는 펌웨어, RTL 코드, HLS 코드, 또는 인스트럭션 시퀀스 중 하나 이상을 포함할 수 있다.
다른 양태에 따르면, 네트워크 인터페이스 디바이스는 네트워크 인터페이스 디바이스와 호스트 디바이스 사이의 적어도 하나의 버스와의 디바이스 인터페이스를 제공하도록 구성되는 프로그래머블 인터페이스를 포함하고, 프로그래머블 인터페이스는 복수의 상이한 인스턴스의 디바이스 인터페이스를 지원하도록 프로그래밍 가능하다.
임의의 다른 양태의 임의의 특징이 개별적으로 또는 이 양태의 네트워크 인터페이스 디바이스와 조합하여 사용될 수 있다는 것을 이해해야 한다.
다른 양태에 따르면, 호스트 디바이스와 네트워크 인터페이스 디바이스를 포함하는 데이터 처리 시스템이 제공되고, 이 네트워크 인터페이스 디바이스는 네트워크 인터페이스 디바이스와 호스트 디바이스 사이의 적어도 하나의 버스와의 디바이스 인터페이스를 제공하도록 구성되는 프로그래머블 인터페이스를 포함하고, 프로그래머블 인터페이스는 복수의 상이한 타입의 디바이스 인터페이스를 지원하도록 프로그래밍 가능하다.
프로그래머블 인터페이스는 적어도 2개의 디바이스 인터페이스 인스턴스를 동시에 지원하도록 구성될 수 있다.
프로그래머블 인터페이스는 공통 디스크립터 캐시를 포함할 수 있고, 공통 디스크립터 캐시는 복수의 디바이스 인터페이스 인스턴스에 대한 트랜잭션에 대한 개별 엔트리를 저장하도록 구성된다.
공통 디스크립터 캐시 내의 엔트리는: 포인터 정보; 어댑터 인스턴스 및/또는 불투명한 엔드포인트 인덱스; 또는 메타데이터 중 하나 이상을 포함할 수 있다.
포인터 정보는: 포인터; 포인터들의 블록; 링크된 포인터들의 리스트; 또는 트라이를 포함할 수 있다.
메타데이터는: 상기 포인터가 포인터인지, 데이터 위치에 대한 포인터인지, 또는 추가 포인터에 대한 포인터인지의 표시; 상기 엔트리의 적어도 일부와 연관된 사이즈; 상기 엔트리와 연관된 어댑터에 대한 표시; 하나 이상의 큐에 대한 표시; 및 하나 이상의 큐 내의 위치에 대한 표시 중 하나 이상을 포함할 수 있다.
공통 디스크립터 캐시는, 상이한 디바이스 인터페이스 인스턴스와 연관되는 상이한 파티션으로 적어도 부분적으로 분할될 수 있다.
공통 디스크립터 캐시는 상이한 디바이스 인터페이스 인스턴스들 간에 공유될 수 있다.
공통 디스크립터 캐시는 각 디바이스 인터페이스 인스턴스마다 보장된 캐시 예약을 제공할 수 있다.
공통 디스크립터 캐시는 디바이스 인터페이스의 엔드포인트 인스턴스에 대해 보장된 개수의 디스크립터를 제공할 수 있다. 엔드포인트 인스턴스는 큐일 수 있다.
공통 디스크립터 캐시는 하나 이상의 디바이스 인터페이스에 대한 하나 이상의 디스크립터를 프리페치하도록 구성될 수 있다.
공통 디스크립터 캐시는, 개별 디바이스 인터페이스와 연관된 도어벨의 도어벨 처리 또는 개별 디바이스 인터페이스와 연관된 데이터의 도착 중 하나 이상에 응답하여, 하나 이상의 디바이스 인터페이스에 대한 하나 이상의 디스크립터를 프리페치하도록 구성될 수 있다.
프로그래머블 인터페이스는 복수의 상이한 디바이스 인터페이스 인스턴스를 위해 상기 적어도 버스에 대한 액세스를 스케줄링하도록 구성된 스케줄러를 포함할 수 있다.
프로그래머블 인터페이스는 각 디바이스 인터페이스 인스턴스마다 개별 디바이스 인터페이스 어댑터를 제공하도록 구성될 수 있다.
개별 디바이스 인터페이스 어댑터는 DMA 엔진을 포함할 수 있다.
프로그래머블 인터페이스는 상기 적어도 2개의 디바이스 인터페이스 인스턴스에 의해 공유되는 DMA 엔진을 제공하도록 구성될 수 있다.
프로그래머블 인터페이스는 상기 적어도 2개의 디바이스 인터페이스 인스턴스에 의해 공유되는 도어벨 기능부를 제공하도록 구성될 수 있다.
호스트 디바이스는 적어도 하나의 프로세서 및 적어도 하나의 메모리를 포함할 수 있으며, 상기 메모리는 하나 이상의 프로그램에 대한 컴퓨터 코드를 포함한다.
적어도 하나의 메모리 및 컴퓨터 코드는, 적어도 하나의 프로세서를 이용하여, 호스트 컴퓨팅 디바이스가 상기 도어벨 기능부에 적어도 하나의 도어벨을 적어도 기입하게 하도록 구성될 수 있다.
프로그래머블 인터페이스는 상기 적어도 2개의 디바이스 인터페이스 인스턴스에 의해 공유되는 어드레스 변환 서비스를 제공하도록 구성될 수 있다.
상기 복수의 타입의 디바이스 인터페이스 중 적어도 2개는 상이한 큐 구조 타입과 연관될 수 있다.
적어도 하나의 메모리 및 컴퓨터 코드는, 적어도 하나의 프로세서를 이용하여, 호스트 컴퓨팅 디바이스가 하나 이상의 디바이스 인터페이스 인스턴스에 대한 하나 이상의 큐를 제공하게 하도록 구성될 수 있다.
상기 복수의 타입의 디바이스 인터페이스 중 적어도 2개는 하나 이상의 상이한 시맨틱 또는 커맨드와 연관될 수 있다.
복수의 타입의 디바이스 인터페이스는 하나 이상의 RDMA 또는 Virtio 또는 NVMe 디바이스 인터페이스를 포함할 수 있다.
프로그래머블 인터페이스는 상기 적어도 하나의 버스에 대한 하나 이상의 상이한 버스 프로토콜을 지원하도록 구성될 수 있다.
하나 이상의 상이한 버스 프로토콜은 PCIe 버스; AXI 버스; CCIX 버스; CAPI 버스; 또는 OPEN CAPI 버스 중 하나 이상을 포함할 수 있다.
프로그래머블 인터페이스는 상기 상이한 타입의 디바이스 인터페이스 중 하나 이상을 지원하도록 프로그래밍 가능한 하나 이상의 템플릿 기능부를 포함할 수 있다.
상기 네트워크 인터페이스 디바이스가 동작하는 동안, 상기 프로그래머블 인터페이스는 적어도 하나의 디바이스 인터페이스 인스턴스를 제거하도록 구성될 수 있다.
상기 네트워크 인터페이스 디바이스가 동작하는 동안, 상기 프로그래머블 인터페이스는 적어도 하나의 디바이스 인터페이스 인스턴스를 추가하도록 구성될 수 있다.
상기 네트워크 인터페이스 디바이스가 동작하는 동안, 상기 프로그래머블 인터페이스는 적어도 하나의 디바이스 인터페이스 인스턴스로부터 적어도 하나의 다른 디바이스 인터페이스 인스턴스로 스위칭하도록 구성될 수 있다.
네트워크 인터페이스 디바이스는 상기 네트워크 인터페이스 디바이스의 프로그래밍을 제어하도록 구성된 프로그램 정보를 수신하도록 구성될 수 있다.
프로그램 정보는 상기 호스트 디바이스 또는 네트워크 중 하나로부터 수신될 수 있다.
프로그램 정보는 펌웨어, RTL 코드, HLS 코드, 또는 인스트럭션 시퀀스 중 하나 이상을 포함할 수 있다.
다른 양태에 따르면, 호스트 디바이스와 네트워크 인터페이스 디바이스를 포함하는 데이터 처리 시스템이 제공되고, 이 네트워크 인터페이스 디바이스는 네트워크 인터페이스 디바이스와 호스트 디바이스 사이의 적어도 하나의 버스와의 디바이스 인터페이스를 제공하도록 구성되는 프로그래머블 인터페이스를 포함하고, 프로그래머블 인터페이스는 복수의 상이한 인스턴스의 디바이스 인터페이스를 지원하도록 프로그래밍 가능하다.
임의의 다른 양태의 임의의 특징이 개별적으로 또는 이 양태의 데이터 처리 시스템과 조합하여 사용될 수 있다는 것을 이해해야 한다.
일 양태에 따르면, 방법이 제공되며, 이 방법은: 네트워크 인터페이스 디바이스와 호스트 디바이스 사이의 적어도 하나의 버스와의 디바이스 인터페이스를 제공하도록 네트워크 인터페이스 디바이스의 프로그래머블 인터페이스를 프로그래밍하는 단계를 포함하고, 프로그래머블 인터페이스는 복수의 상이한 타입의 디바이스 인터페이스를 지원하도록 프로그래밍 가능하다.
방법은 적어도 2개의 디바이스 인터페이스 인스턴스를 동시에 지원하도록 상기 프로그래머블 인터페이스를 프로그래밍하는 단계를 포함할 수 있다.
프로그래머블 인터페이스는 공통 디스크립터 캐시를 포함할 수 있고, 공통 디스크립터 캐시는 복수의 디바이스 인터페이스 인스턴스에 대한 트랜잭션에 대한 개별 엔트리를 저장하도록 구성된다.
공통 디스크립터 캐시 내의 엔트리는: 포인터 정보; 어댑터 인스턴스 및/또는 불투명한 엔드포인트 인덱스; 또는 메타데이터 중 하나 이상을 포함할 수 있다.
포인터 정보는: 포인터; 포인터들의 블록; 링크된 포인터들의 리스트; 또는 트라이를 포함할 수 있다.
메타데이터는: 상기 포인터가 포인터인지, 데이터 위치에 대한 포인터인지, 또는 추가 포인터에 대한 포인터인지의 표시; 상기 엔트리의 적어도 일부와 연관된 사이즈; 상기 엔트리와 연관된 어댑터에 대한 표시; 하나 이상의 큐에 대한 표시; 및 하나 이상의 큐 내의 위치에 대한 표시 중 하나 이상을 포함할 수 있다.
방법은 상기 공통 디스크립터 캐시가 상이한 디바이스 인터페이스 인스턴스와 연관되는 상이한 파티션으로 적어도 부분적으로 분할되게 하는 단계를 포함할 수 있다.
방법은 상기 공통 디스크립터 캐시가 상이한 디바이스 인터페이스 인스턴스들 사이에서 공유되게 하는 단계를 포함할 수 있다.
방법은 상기 공통 디스크립터 캐시가 각 디바이스 인터페이스 인스턴스마다 보장된 캐시 예약을 제공하게 하는 단계를 포함할 수 있다.
방법은 상기 공통 디스크립터 캐시가 디바이스 인터페이스의 엔드포인트 인스턴스에 대해 보장된 개수의 디스크립터를 제공하게 하는 단계를 포함할 수 있다. 엔드포인트 인스턴스는 큐일 수 있다.
방법은 상기 공통 디스크립터 캐시가 하나 이상의 디바이스 인터페이스에 대한 하나 이상의 디스크립터를 프리페치하게 하는 단계를 포함할 수 있다.
방법은 상기 공통 디스크립터 캐시가 개별 디바이스 인터페이스와 연관된 도어벨의 도어벨 처리 또는 개별 디바이스 인터페이스와 연관된 데이터의 도착 중 하나 이상에 응답하여, 하나 이상의 디바이스 인터페이스에 대한 하나 이상의 디스크립터를 프리페치하게 하는 단계를 포함할 수 있다.
프로그래머블 인터페이스는 복수의 상이한 디바이스 인터페이스 인스턴스를 위해 상기 적어도 버스에 대한 액세스를 스케줄링하도록 구성된 스케줄러를 포함할 수 있다.
방법은 프로그래머블 인터페이스가 각 디바이스 인터페이스 인스턴스마다 개별 디바이스 인터페이스 어댑터를 제공하게 하는 단계를 포함할 수 있다.
개별 디바이스 인터페이스 어댑터는 DMA 엔진을 포함할 수 있다.
프로그래머블 인터페이스는 상기 적어도 2개의 디바이스 인터페이스 인스턴스에 의해 공유되는 DMA 엔진을 포함할 수 있다.
프로그래머블 인터페이스는 상기 적어도 2개의 디바이스 인터페이스 인스턴스에 의해 공유되는 도어벨 기능부를 포함할 수 있다.
프로그래머블 인터페이스는 상기 적어도 2개의 디바이스 인터페이스 인스턴스에 의해 공유되는 어드레스 변환 서비스를 제공하도록 구성될 수 있다.
방법은 프로그래머블 인터페이스가 각각의 상이한 디바이스 인터페이스와 연관된 복수의 상이한 큐 구조 타입을 지원하게 하는 단계를 포함할 수 있다.
방법은 프로그래머블 인터페이스가 각각의 상이한 디바이스 인터페이스와 연관된 복수의 상이한 시맨틱 또는 커맨드를 지원하게 하는 단계를 포함할 수 있다.
복수의 타입의 디바이스 인터페이스는 하나 이상의 RDMA 또는 Virtio 또는 NVMe 디바이스 인터페이스를 포함할 수 있다.
방법은 프로그래머블 인터페이스가 상기 적어도 하나의 버스에 대한 복수의 상이한 버스 프로토콜을 지원하게 하는 단계를 포함할 수 있다.
하나 이상의 상이한 버스 프로토콜은 PCIe 버스; AXI 버스; CCIX 버스; CAPI 버스; 또는 OPEN CAPI 버스 중 하나 이상을 포함할 수 있다.
방법은 프로그래머블 인터페이스의 하나 이상의 템플릿 기능부가 상기 상이한 타입의 디바이스 인터페이스 중 하나 이상을 지원하도록 프로그래밍되게 하는 단계를 포함할 수 있다.
방법은 상기 네트워크 인터페이스 디바이스가 동작하는 동안 적어도 하나의 디바이스 인터페이스 인스턴스가 제거되게 하는 단계를 포함할 수 있다.
방법은 상기 네트워크 인터페이스 디바이스가 동작하는 동안 적어도 하나의 디바이스 인터페이스 인스턴스가 추가되게 하는 단계를 포함할 수 있다.
방법은 상기 네트워크 인터페이스 디바이스가 동작하는 동안 적어도 하나의 디바이스 인터페이스 인스턴스가 적어도 하나의 다른 디바이스 인터페이스 인스턴스로 스위칭되게 하는 단계를 포함할 수 있다.
방법은 상기 네트워크 인터페이스 디바이스의 프로그래밍을 제어하도록 구성된 프로그램 정보를 수신하는 단계를 포함할 수 있다.
방법은 상기 호스트 디바이스 또는 네트워크 중 하나로부터 프로그램 정보를 수신하는 단계를 포함할 수 있다.
프로그램 정보는 펌웨어, RTL 코드, HLS 코드, 또는 인스트럭션 시퀀스 중 하나 이상을 포함할 수 있다.
다른 양태에 따르면, 데이터 처리 시스템이 제공되고, 이 데이터 처리 시스템은: 네트워크 인터페이스 디바이스; 및 적어도 하나의 프로세서 및 적어도 하나의 메모리를 포함하는 호스트 컴퓨팅 디바이스를 포함하며, 상기 메모리는 하나 이상의 프로그램을 위한 컴퓨터 코드를 포함하고, 상기 적어도 하나의 메모리 및 컴퓨터 코드는, 상기 적어도 하나의 프로세서를 이용하여, 상기 호스트 컴퓨팅 디바이스가 상기 네트워크 인터페이스 디바이스에 대한 디바이스 인터페이스를 정의하는 프로그램을 적어도 컴파일링하게 하도록 구성되고, 상기 컴파일링된 프로그램은 상기 호스트 컴퓨팅 디바이스에 설치되어 상기 디바이스 인터페이스에 대한 호스트 인터페이스를 정의하고, 상기 네트워크 인터페이스 디바이스에 설치되어 해당 디바이스 인터페이스를 정의한다.
프로그램은 하이 레벨 프로그램(high level program)을 포함할 수 있다.
컴파일링된 프로그램은 상기 해당 디바이스 인터페이스를 정의하기 위해 펌웨어, HLS 코드 또는 RTL 코드를 제공할 수 있다.
컴파일링된 프로그램은 디바이스 드라이버의 적어도 일부를 정의하는 중간 레벨 프로그램을 제공할 수 있고, 상기 호스트 컴퓨팅 디바이스는 상기 중간 레벨 프로그램의 적어도 일부가 호스트 컴퓨팅 디바이스의 커널에 삽입될 수 있다는 것을 결정하도록 구성된다.
호스트 인터페이스는 디바이스 드라이버를 포함할 수 있다.
호스트 인터페이스는 동적으로 로딩된 프로그램을 포함할 수 있다.
호스트 인터페이스는 실행을 위해 검증되거나, 샌드박스 코드로서 제공되거나, 또는 바이트 코드로서 제공되는 것 중 적어도 하나일 수 있다.
네트워크 인터페이스 디바이스는 앞서 언급한 것과 같을 수 있다.
네트워크 인터페이스 디바이스는 네트워크 인터페이스 디바이스와 호스트 디바이스 사이의 적어도 하나의 버스와의 디바이스 인터페이스를 제공하도록 구성되는 프로그래머블 인터페이스를 포함할 수 있고, 프로그래머블 인터페이스는 복수의 상이한 타입의 디바이스 인터페이스를 지원하도록 프로그래밍 가능하다. 컴파일링된 프로그램은 프로그래머블 인터페이스에 설치될 수 있다.
프로그래머블 인터페이스는 적어도 2개의 디바이스 인터페이스 인스턴스를 동시에 지원하도록 구성될 수 있다.
프로그래머블 인터페이스는 공통 디스크립터 캐시를 포함할 수 있고, 공통 디스크립터 캐시는 복수의 디바이스 인터페이스 인스턴스에 대한 트랜잭션에 대한 개별 엔트리를 저장하도록 구성된다.
공통 디스크립터 캐시 내의 엔트리는: 포인터 정보; 어댑터 인스턴스 및/또는 불투명한 엔드포인트 인덱스; 또는 메타데이터 중 하나 이상을 포함할 수 있다.
포인터 정보는: 포인터; 포인터들의 블록; 링크된 포인터들의 리스트; 또는 트라이를 포함할 수 있다.
메타데이터는: 상기 포인터가 포인터인지, 데이터 위치에 대한 포인터인지, 또는 추가 포인터에 대한 포인터인지의 표시; 상기 엔트리의 적어도 일부와 연관된 사이즈; 상기 엔트리와 연관된 어댑터에 대한 표시; 하나 이상의 큐에 대한 표시; 및 하나 이상의 큐 내의 위치에 대한 표시 중 하나 이상을 포함할 수 있다.
공통 디스크립터 캐시는, 상이한 디바이스 인터페이스 인스턴스와 연관되는 상이한 파티션으로 적어도 부분적으로 분할될 수 있다.
공통 디스크립터 캐시는 상이한 디바이스 인터페이스 인스턴스들 간에 공유될 수 있다.
공통 디스크립터 캐시는 각 디바이스 인터페이스 인스턴스마다 보장된 캐시 예약을 제공할 수 있다.
공통 디스크립터 캐시는 디바이스 인터페이스의 엔드포인트 인스턴스에 대해 보장된 개수의 디스크립터를 제공할 수 있다. 엔드포인트 인스턴스는 큐일 수 있다.
공통 디스크립터 캐시는 하나 이상의 디바이스 인터페이스에 대한 하나 이상의 디스크립터를 프리페치하도록 구성될 수 있다.
공통 디스크립터 캐시는, 개별 디바이스 인터페이스와 연관된 도어벨의 도어벨 처리 또는 개별 디바이스 인터페이스와 연관된 데이터의 도착 중 하나 이상에 응답하여, 하나 이상의 디바이스 인터페이스에 대한 하나 이상의 디스크립터를 프리페치하도록 구성될 수 있다.
프로그래머블 인터페이스는 복수의 상이한 디바이스 인터페이스 인스턴스를 위해 상기 적어도 버스에 대한 액세스를 스케줄링하도록 구성된 스케줄러를 포함할 수 있다.
프로그래머블 인터페이스는 각 디바이스 인터페이스 인스턴스마다 개별 디바이스 인터페이스 어댑터를 제공하도록 구성될 수 있다.
개별 디바이스 인터페이스 어댑터는 DMA 엔진을 포함할 수 있다.
프로그래머블 인터페이스는 상기 적어도 2개의 디바이스 인터페이스 인스턴스에 의해 공유되는 DMA 엔진을 제공하도록 구성될 수 있다.
프로그래머블 인터페이스는 상기 적어도 2개의 디바이스 인터페이스 인스턴스에 의해 공유되는 도어벨 기능부를 제공하도록 구성될 수 있다.
호스트 디바이스는 적어도 하나의 프로세서 및 적어도 하나의 메모리를 포함할 수 있으며, 상기 메모리는 하나 이상의 프로그램에 대한 컴퓨터 코드를 포함한다.
적어도 하나의 메모리 및 컴퓨터 코드는, 적어도 하나의 프로세서를 이용하여, 호스트 컴퓨팅 디바이스가 상기 도어벨 기능부에 적어도 하나의 도어벨을 적어도 기입하게 하도록 구성될 수 있다.
프로그래머블 인터페이스는 상기 적어도 2개의 디바이스 인터페이스 인스턴스에 의해 공유되는 어드레스 변환 서비스를 제공하도록 구성될 수 있다.
상기 복수의 타입의 디바이스 인터페이스 중 적어도 2개는 상이한 큐 구조 타입과 연관될 수 있다.
적어도 하나의 메모리 및 컴퓨터 코드는, 적어도 하나의 프로세서를 이용하여, 호스트 컴퓨팅 디바이스가 하나 이상의 디바이스 인터페이스 인스턴스에 대한 하나 이상의 큐를 제공하게 하도록 구성될 수 있다.
상기 복수의 타입의 디바이스 인터페이스 중 적어도 2개는 하나 이상의 상이한 시맨틱 또는 커맨드와 연관될 수 있다.
복수의 타입의 디바이스 인터페이스는 하나 이상의 RDMA 또는 Virtio 또는 NVMe 디바이스 인터페이스를 포함할 수 있다.
프로그래머블 인터페이스는 상기 적어도 하나의 버스에 대한 하나 이상의 상이한 버스 프로토콜을 지원하도록 구성될 수 있다.
하나 이상의 상이한 버스 프로토콜은 PCIe 버스; AXI 버스; CCIX 버스; CAPI 버스; 또는 OPEN CAPI 버스 중 하나 이상을 포함할 수 있다.
프로그래머블 인터페이스는 상기 상이한 타입의 디바이스 인터페이스 중 하나 이상을 지원하도록 프로그래밍 가능한 하나 이상의 템플릿 기능부를 포함할 수 있다.
상기 네트워크 인터페이스 디바이스가 동작하는 동안, 상기 프로그래머블 인터페이스는 적어도 하나의 디바이스 인터페이스 인스턴스를 제거하도록 구성될 수 있다.
상기 네트워크 인터페이스 디바이스가 동작하는 동안, 상기 프로그래머블 인터페이스는 적어도 하나의 디바이스 인터페이스 인스턴스를 추가하도록 구성될 수 있다.
상기 네트워크 인터페이스 디바이스가 동작하는 동안, 상기 프로그래머블 인터페이스는 적어도 하나의 디바이스 인터페이스 인스턴스로부터 적어도 하나의 다른 디바이스 인터페이스 인스턴스로 스위칭하도록 구성될 수 있다.
다른 양태에 따르면, 방법이 제공되고, 이 방법은 호스트 컴퓨팅 디바이스가 네트워크 인터페이스 디바이스에 대한 디바이스 인터페이스를 정의하는 프로그램을 컴파일하게 하는 단계를 포함하고, 상기 컴파일링된 프로그램은 상기 호스트 컴퓨팅 디바이스에 설치되어 상기 호스트 컴퓨팅 디바이스에 대한 호스트 인터페이스를 정의하고, 상기 네트워크 인터페이스 디바이스에 설치되어 해당 디바이스 인터페이스를 정의한다.
프로그램은 하이 레벨 프로그램을 포함할 수 있다.
컴파일링된 프로그램은 상기 해당 디바이스 인터페이스를 정의하기 위해 펌웨어, HLS 코드 또는 RTL 코드를 제공할 수 있다.
컴파일링된 프로그램은 디바이스 드라이버의 적어도 일부를 정의하는 중간 레벨 프로그램을 제공할 수 있고, 방법은 상기 중간 레벨 프로그램의 적어도 일부가 호스트 컴퓨팅 디바이스의 커널에 삽입될 수 있다는 것을 결정하는 단계를 포함한다.
호스트 인터페이스는 디바이스 드라이버를 포함할 수 있다.
호스트 인터페이스는 동적으로 로딩된 프로그램을 포함할 수 있다.
호스트 인터페이스는 실행을 위해 검증되거나, 샌드박스 코드로서 제공되거나, 또는 바이트 코드로서 제공되는 것 중 적어도 하나일 수 있다.
네트워크 인터페이스 디바이스는 앞서 언급한 것과 같을 수 있다.
방법은 상기 네트워크 인터페이스 디바이스의 프로그래머블 인터페이스에 상기 컴파일링된 프로그램을 설치하는 단계를 포함할 수 있고, 상기 프로그래머블 인터페이스는 복수의 상이한 타입의 디바이스 인터페이스를 지원하도록 프로그래밍 가능하다.
방법은 적어도 2개의 디바이스 인터페이스 인스턴스를 동시에 지원하도록 상기 프로그래머블 인터페이스를 프로그래밍하는 단계를 포함할 수 있다.
프로그래머블 인터페이스는 공통 디스크립터 캐시를 포함할 수 있고, 공통 디스크립터 캐시는 복수의 디바이스 인터페이스 인스턴스에 대한 트랜잭션에 대한 개별 엔트리를 저장하도록 구성된다.
공통 디스크립터 캐시 내의 엔트리는: 포인터 정보; 어댑터 인스턴스 및/또는 불투명한 엔드포인트 인덱스; 또는 메타데이터 중 하나 이상을 포함할 수 있다.
포인터 정보는: 포인터; 포인터들의 블록; 링크된 포인터들의 리스트; 또는 트라이를 포함할 수 있다.
메타데이터는: 상기 포인터가 포인터인지, 데이터 위치에 대한 포인터인지, 또는 추가 포인터에 대한 포인터인지의 표시; 상기 엔트리의 적어도 일부와 연관된 사이즈; 상기 엔트리와 연관된 어댑터에 대한 표시; 하나 이상의 큐에 대한 표시; 및 하나 이상의 큐 내의 위치에 대한 표시 중 하나 이상을 포함할 수 있다.
방법은 상기 공통 디스크립터 캐시가 상이한 디바이스 인터페이스 인스턴스와 연관되는 상이한 파티션으로 적어도 부분적으로 분할되게 하는 단계를 포함할 수 있다.
방법은 상기 공통 디스크립터 캐시가 상이한 디바이스 인터페이스 인스턴스들 사이에서 공유되게 하는 단계를 포함할 수 있다.
방법은 상기 공통 디스크립터 캐시가 각 디바이스 인터페이스 인스턴스마다 보장된 캐시 예약을 제공하게 하는 단계를 포함할 수 있다.
방법은 상기 공통 디스크립터 캐시가 디바이스 인터페이스의 엔드포인트 인스턴스에 대해 보장된 개수의 디스크립터를 제공하게 하는 단계를 포함할 수 있다. 엔드포인트 인스턴스는 큐일 수 있다.
방법은 상기 공통 디스크립터 캐시가 하나 이상의 디바이스 인터페이스에 대한 하나 이상의 디스크립터를 프리페치하게 하는 단계를 포함할 수 있다.
방법은 상기 공통 디스크립터 캐시가 개별 디바이스 인터페이스와 연관된 도어벨의 도어벨 처리 또는 개별 디바이스 인터페이스와 연관된 데이터의 도착 중 하나 이상에 응답하여, 하나 이상의 디바이스 인터페이스에 대한 하나 이상의 디스크립터를 프리페치하게 하는 단계를 포함할 수 있다.
프로그래머블 인터페이스는 복수의 상이한 디바이스 인터페이스 인스턴스를 위해 상기 적어도 버스에 대한 액세스를 스케줄링하도록 구성된 스케줄러를 포함할 수 있다.
방법은 프로그래머블 인터페이스가 각 디바이스 인터페이스 인스턴스마다 개별 디바이스 인터페이스 어댑터를 제공하게 하는 단계를 포함할 수 있다.
개별 디바이스 인터페이스 어댑터는 DMA 엔진을 포함할 수 있다.
프로그래머블 인터페이스는 상기 적어도 2개의 디바이스 인터페이스 인스턴스에 의해 공유되는 DMA 엔진을 제공하도록 구성될 수 있다.
프로그래머블 인터페이스는 상기 적어도 2개의 디바이스 인터페이스 인스턴스에 의해 공유되는 도어벨 기능부를 제공하도록 구성될 수 있다.
호스트 디바이스는 적어도 하나의 프로세서 및 적어도 하나의 메모리를 포함할 수 있으며, 상기 메모리는 하나 이상의 프로그램에 대한 컴퓨터 코드를 포함한다.
적어도 하나의 메모리 및 컴퓨터 코드는, 적어도 하나의 프로세서를 이용하여, 호스트 컴퓨팅 디바이스가 상기 도어벨 기능부에 적어도 하나의 도어벨을 적어도 기입하게 하도록 구성될 수 있다.
프로그래머블 인터페이스는 상기 적어도 2개의 디바이스 인터페이스 인스턴스에 의해 공유되는 어드레스 변환 서비스를 제공하도록 구성될 수 있다.
방법은 프로그래머블 인터페이스가 각각의 상이한 디바이스 인터페이스와 연관된 복수의 상이한 큐 구조 타입을 지원하게 하는 단계를 포함할 수 있다.
방법은 호스트 인터페이스가 하나 이상의 디바이스 인터페이스 인스턴스에 대한 하나 이상의 큐를 제공하게 하는 단계를 포함할 수 있다.
방법은 프로그래머블 인터페이스가 각각의 상이한 디바이스 인터페이스와 연관된 복수의 상이한 시맨틱 또는 커맨드를 지원하게 하는 단계를 포함할 수 있다.
복수의 타입의 디바이스 인터페이스는 하나 이상의 RDMA 또는 Virtio 또는 NVMe 디바이스 인터페이스를 포함할 수 있다.
방법은 프로그래머블 인터페이스가 상기 적어도 하나의 버스에 대한 복수의 상이한 버스 프로토콜을 지원하게 하는 단계를 포함할 수 있다.
하나 이상의 상이한 버스 프로토콜은 PCIe 버스; AXI 버스; CCIX 버스; CAPI 버스; 또는 OPEN CAPI 버스 중 하나 이상을 포함할 수 있다.
방법은 컴파일링된 프로그램을 사용하여 프로그래머블 인터페이스에 대한 하나 이상의 템플릿 기능부를 프로그래밍하여 개별 디바이스 인터페이스를 지원하는 단계를 포함할 수 있다.
방법은 상기 네트워크 인터페이스 디바이스가 동작하는 동안 적어도 하나의 디바이스 인터페이스 인스턴스가 제거되게 하는 단계를 포함할 수 있다.
방법은 상기 네트워크 인터페이스 디바이스가 동작하는 동안 적어도 하나의 디바이스 인터페이스 인스턴스가 추가되게 하는 단계를 포함할 수 있다.
방법은 상기 네트워크 인터페이스 디바이스가 동작하는 동안 적어도 하나의 디바이스 인터페이스 인스턴스가 적어도 하나의 다른 디바이스 인터페이스 인스턴스로 스위칭되게 하는 단계를 포함할 수 있다.
다른 양태에 따르면, 인스트럭션으로 인코딩된 비일시적 컴퓨터 판독 가능 매체가 제공되고, 상기 인스트럭션은 적어도 하나의 프로세서 상에서 실행될 때 적어도 하나의 프로세서가 임의의 이전 방법의 단계를 실행할 수 있게 한다.
다른 양태에서, 컴퓨터 프로그램 제품은, 실행될 때 위의 방법 중 임의의 방법을 제공하도록 구성된 컴퓨터 실행가능 코드를 포함한다.
방법(들)을 수행하도록 구성된 프로그램 코드 수단을 포함하는 컴퓨터 프로그램이 또한 제공될 수 있다. 컴퓨터 프로그램은 반송파 매체에 의해 저장 및/또는 구현될 수 있다.
위에서, 많은 상이한 실시예가 설명되었다. 전술한 실시예 중 임의의 둘 이상의 실시예의 조합에 의해 추가 실시예가 제공될 수 있음을 이해해야 한다.
일부 실시예는 이제 첨부된 도면을 참조하여 예로서만 설명될 것이다.
도 1은 네트워크에 연결된 데이터 처리 시스템의 개략도를 도시한 것이다.
도 2는 제1 네트워크 인터페이스 디바이스의 개략도를 도시한 것이다.
도 3은 제2 네트워크 인터페이스 디바이스의 개략도를 도시한 것이다.
도 4는 네트워크 인터페이스 디바이스의 프로그래머블 인터페이스에 제공된 어댑터의 제1 예를 도시한 것이다.
도 5는 네트워크 인터페이스 디바이스의 프로그래머블 인터페이스에 제공된 어댑터의 제2 예를 도시한 것이다.
도 6은 다른 네트워크 인터페이스 디바이스의 개략도를 도시한 것이다.
도 7은 메모리 매핑 관점에서 데이터 처리 시스템의 개략적인 개요를 도시한 것이다.
도 8은 버퍼의 위치를 결정하는 데 사용되는 버퍼 테이블을 도시한 것이다.
도 9는 일 실시예의 방법을 도시한 것이다.
도 10은 다른 실시예의 방법을 도시한 것이다.
이하의 설명은 본 기술 분야의 기술자가 본 발명을 실시하고 사용할 수 있도록 제시되며, 특정 적용례의 맥락에서 제공된다. 개시된 실시예에 대한 다양한 수정은 본 기술 분야의 기술자에게는 쉽게 이해될 것이다.
본원에 정의된 일반적인 원리는 본 발명의 사상과 범위를 벗어나지 않고 다른 실시예 및 적용례에 적용될 수 있다. 따라서, 본 발명은 도시된 실시예로 제한되지 않도록 의도되지만, 본원에 개시된 원리 및 특징과 일관되는 가장 넓은 범위를 부여받아야 한다.
데이터가 네트워크와 같은 데이터 채널을 통해 2개의 데이터 처리 시스템 간에 전송되는 경우, 각 데이터 처리 시스템에는 채널을 통해 통신을 가능하게 하는 적합한 네트워크 인터페이스가 장착된다. 종종 네트워크는 이더넷 기술을 기반으로 한다. 다른 실시예는 다른 기술을 기반으로 할 수 있다.
네트워크를 통해 통신하는 데이터 처리 시스템에는 네트워크 프로토콜의 물리적 및 논리적 요건을 지원할 수 있는 네트워크 인터페이스가 장착되어 있다. 네트워크 인터페이스의 물리적 하드웨어 컴포넌트는 네트워크 인터페이스 디바이스 또는 네트워크 인터페이스 카드(network interface card)(NIC)라고 지칭된다.
네트워크를 통해 전송 및/또는 수신하기 위한 전형적인 데이터 처리 시스템(100)이 도 1에 도시되어 있다. 데이터 처리 시스템(100)은 네트워크 인터페이스 디바이스(102)에 연결된 호스트 컴퓨팅 디바이스(101)를 포함하고, 네트워크 인터페이스 디바이스(102)는 이러한 호스트 컴퓨팅 디바이스를 네트워크(103)에 인터페이싱하도록 구성된다. 호스트 컴퓨팅 디바이스(101)에는 네트워크 인터페이스 디바이스(102)를 위한 디바이스 드라이버(115)가 제공된다. 호스트 컴퓨팅 디바이스(101)는 하나 이상의 사용자 레벨 애플리케이션(105)을 지원하는 운영 체제(104)를 포함한다. 호스트 컴퓨팅 디바이스(101)는 또한 네트워크 프로토콜 스택(도시되지 않음)을 포함할 수 있다. 예를 들어, 이러한 프로토콜 스택은 애플리케이션의 컴포넌트일 수 있고/있거나, 애플리케이션이 링크된 라이브러리일 수 있고/있거나, 운영 체제에 의해 제공될 수 있다. 일부 실시예에서, 하나를 초과하는 프로토콜 스택이 제공될 수 있다.
네트워크 프로토콜 스택은 전송 제어 프로토콜(Transmission Control Protocol)(TCP) 스택일 수 있다. 애플리케이션(105)은 소켓을 열고 소켓에 대해 데이터를 판독 및 기입함으로써 TCP/IP 메시지를 전송 및 수신할 수 있다. 운영 체제(104)는 메시지가 네트워크를 통해 전송되게 할 수 있다. 예를 들어, 애플리케이션은 소켓을 통해 데이터 전송을 위한 시스템 호출(syscall)을 호출한 다음 운영 체제(104)를 이용하여 네트워크(103)로 데이터를 전송할 수 있다.
호스트 컴퓨팅 디바이스(101)에 스택을 구현하는 대신에, 일부 시스템은 프로토콜 처리의 적어도 일부를 네트워크 인터페이스 디바이스(102)로 오프로딩할 수 있다. 예를 들어, 네트워크 인터페이스 디바이스(102)는 TCP 프로토콜 처리를 수행하기 위한 TCP 오프로드 엔진(TCP Offload Engine)(TOE)를 포함할 수 있다. 네트워크를 통해 전송될 데이터는 애플리케이션(105)에 의해, 호스트 컴퓨팅 디바이스의 TCP/IP 스택을 부분적으로 또는 전체적으로 바이패싱하고 TOE 지원 가상 인터페이스 드라이버를 이용함으로써 전송될 수 있다. 따라서, 이 빠른 경로를 따라 전송되는 데이터는 TOE 드라이버의 요건을 충족하도록 포맷화만되면 된다.
TOE 기능부는 네트워크 인터페이스 디바이스에 오프로딩될 수 있는 기능부의 일 예라는 것을 이해해야 한다. 대안적으로 또는 추가적으로, 하나 이상의 다른 기능부가 네트워크 인터페이스 디바이스로 오프로딩될 수 있다. 예를 들어, 프로토콜 처리의 일부가 네트워크 인터페이스 디바이스로 오프로딩될 수 있고, 애플리케이션이 네트워크 인터페이스 디바이스 등에 적어도 부분적으로 제공될 수 있다.
네트워크 인터페이스 디바이스는 하나 이상의 버퍼(106)를 포함할 수 있다. 버퍼(106)는 임의의 적합한 메모리, 즉, FIFO, 또는 레지스터 세트일 수 있다. 버퍼는 프레임의 해당 부분이 매체 액세스 제어(media access control)(MAC)로 전송되기 전에 프레임에 대한 수정을 필요로 하는 임의의 동작(예를 들어, 헤더에 체크섬 삽입)이 완료되도록 구성될 수 있다.
호스트 컴퓨팅 디바이스(101)는 하나 이상의 프로세서(113) 및 하나 이상의 메모리(109)를 포함할 수 있다. (하나 이상의 프로세서는 실제로 하나 이상의 메모리와 함께 운영 체제의 적어도 일부 및 사용자 레벨 애플리케이션을 제공할 수 있다).
시스템의 메모리 공간은 호스트 컴퓨팅 디바이스 상의 하나 이상의 메모리, 네트워크 인터페이스 디바이스 상의 하나 이상의 메모리, 및 호스트 컴퓨팅 디바이스와 네트워크 인터페이스 디바이스의 외부에 위치한 하나 이상의 메모리 중 하나 이상에 의해 제공될 수 있음을 이해해야 한다.
일부 실시예에서, 호스트 컴퓨팅 디바이스(101)와 네트워크 인터페이스 디바이스(102)는 하나 이상의 버스(119)를 통해 통신할 수 있다. 단지 예로서, 버스는 PCIe(peripheral component interconnect express) 버스, AXI(advanced eXtensible interface) 버스, CCIX(Cache Coherent Interconnect for Accelerators) 버스, CAPI(Coherent Accelerator Processor Interface) 버스, OPEN CAPI 버스, 또는 임의의 다른 적합한 버스일 수 있다. 2개 이상의 버스가 제공되는 경우, 적어도 하나의 버스는 적어도 하나의 다른 버스와는 다른 버스 프로토콜을 사용하거나 모든 버스가 동일한 버스 프로토콜을 사용할 수 있다.
데이터 처리 시스템의 동작 동안, 네트워크로 전송될 데이터는 전송을 위해 호스트 컴퓨팅 디바이스(101)로부터 네트워크 인터페이스 디바이스(102)로 전송될 수 있다. 데이터 네트워크로부터 수신된 데이터는 네트워크 인터페이스 디바이스를 통해 호스트 디바이스로 전달될 수 있다.
일부 실시예에서, 데이터 전송은 디바이스 큐(device queue) 기법을 사용하여 관리된다. 디바이스 큐 기법은 직접 메모리 액세스(direct memory access)(DMA)를 지원할 수 있다. DMA를 사용하면, 네트워크 인터페이스 디바이스는 호스트 디바이스의 CPU를 바이패싱하여 메모리로 데이터를 전송하거나 메모리로부터 데이터를 수신할 수 있다. 네트워크로부터 수신되는 데이터는 (예를 들어, 수신 큐 내의) 하나 이상의 디스크립터에 의해 표시되는 위치의 호스트 메모리에 직접 기입된다. 네트워크로 전송될 데이터의 경우, 네트워크 인터페이스는 (예를 들어, 전송 큐 내의) 하나 이상의 디스크립터에 의해 표시되는 메모리 위치에 데이터를 전송한다.
호스트 디바이스와 네트워크 인터페이스 디바이스는 디바이스 인터페이스를 통해 통신한다. 호스트 디바이스와 네트워크 인터페이스 디바이스 간의 인터페이스가 구현될 수 있는 다양한 상이한 방식이 있다. 호스트 디바이스와 네트워크 인터페이스 디바이스 간의 인터페이스는 이하에서 디바이스 인터페이스로 지칭될 것이다.
디바이스 인터페이스는 산업 사양 및/또는 독점 사양에서와 같이 지정될 수 있다. 이러한 사양은 호스트와 디바이스가 함께 동작할 수 있도록 호스트 컴퓨팅 디바이스 및/또는 네트워크 인터페이스 디바이스가 구성되는 방법을 정의할 수 있다.
디바이스 인터페이스의 일 양태는 큐(때로는 링이라고 지칭되기도 함)가 정의되고 관리되는 방식에 있다. 일부 디바이스 인터페이스에는 큐 타입 구조(queue type structure)가 필요하지 않을 수도 있다.
도 2를 참조하면, 도 2는 네트워크 인터페이스 디바이스의 프로그래머블 인터페이스(510)를 보다 상세히 도시하고 있다. 프로그래머블 인터페이스는 복수의 상이한 디바이스 인터페이스 및/또는 복수의 상이한 버스 프로토콜을 지원하도록 구성될 수 있다. 프로그래머블 인터페이스는 하나 이상의 디바이스 인터페이스 인스턴스를 동시에 지원할 수 있고/있거나 하나 이상의 버스를 동시에 지원할 수 있다.
2개 이상의 디바이스 인터페이스 인스턴스가 지원되는 경우, 이들 인스턴스는 동일하거나 상이한 디바이스 인터페이스 사양을 지원할 수 있다. 디바이스 인터페이스 인스턴스의 개수는 네트워크 인터페이스 디바이스의 동작 중에 변경될 수 있다. 지원되는 디바이스 인터페이스의 타입은 네트워크 인터페이스 디바이스의 동작 중에 변경될 수 있다.
2개 이상의 버스가 지원되는 경우, 이들 버스는 동일하거나 상이한 버스 프로토콜을 지원할 수 있다. 버스의 개수는 네트워크 인터페이스 디바이스의 동작 중에 변경될 수 있다. 하나 이상의 버스의 버스 프로토콜은 네트워크 인터페이스 디바이스의 동작 중에 변경될 수 있다.
프로그래머블 인터페이스는 디바이스 인터페이스 요건에 따라 상이한 디바이스 인터페이스를 지원할 수 있다. 예를 들어, 디바이스 인터페이스는 큐 또는 링 페어 구조(queue or ring pair structure): 즉 TX/RX 및 선택적으로 이벤트 통지 채널(또는 완료 큐)을 사용할 수 있거나 또는 디바이스 인터페이스는 비교적 큰 메모리 윈도우를 사용할 수 있다. 이 후자의 예에서, 데이터의 프레임은 증분 방식의 기입에 의해 관리되고, 큐 타입 구조는 불필요하다.
상이한 디바이스 인터페이스는 호스트 컴퓨팅 디바이스와 네트워크 인터페이스 디바이스 사이의 상호작용을 상이한 방식으로 구현할 수 있다.
상이한 디바이스 인터페이스는 상이한 시맨틱과 연관될 수 있다.
일부의 디바이스 인터페이스 사양에서, 프로세스를 제어하는 데 사용되는 커맨드는 디스크립터를 참조할 수 있다. 디스크립터는 시작 어드레스를 식별할 수 있고, 때때로 포인터라고 지칭되기도 한다.
디바이스 인터페이스에 따라, 호스트 컴퓨팅 디바이스는 메모리 내에 작업 큐 또는 디스크립터 링을 생성할 수 있다. 이 작업 큐에는 하나 이상의 커맨드가 있을 수 있다. 호스트는 통신 채널을 통해 큐로부터 네트워크 인터페이스 디바이스 상의 로컬 메모리로 하나 이상의 커맨드를 전송할 수 있다. 이들 커맨드는 디스크립터 캐시에 저장될 수 있다(이러한 디스크립터 캐시는 나중에 프로그래머블 인터페이스에서 보다 상세히 기술될 것이다).
네트워크 인터페이스 디바이스는 네트워크로부터 데이터를 송수신할 수 있다. 예시적인 디바이스 인터페이스 사양에서, 2개의 작업 큐가 메모리 내에 설정될 수 있으며, 그 중 하나는 메모리에서 네트워크 상으로 전송할 준비가 된 데이터 버퍼를 식별하는 전송(TX) 작업 큐이고, 다른 하나는 메모리에서 네트워크로부터 유입되는 데이터를 수신하는 데 이용 가능한 데이터 버퍼를 식별하는 수신(Rx) 작업 큐이다.
앞서 언급했듯이, 디바이스 인터페이스에 따라 디스크립터를 관리하는 다양한 방식이 존재할 수 있다. 일부 실시예에서, 네트워크 인터페이스 디바이스의 프로그래머블 인터페이스는 동일한 네트워크 인터페이스 디바이스가 복수의 상이한 디바이스 인터페이스 사양 중 임의의 하나 이상의 디바이스 인터페이스 사양을 지원할 수 있도록 구성된다. 예를 들어, 디스크립터를 구현하는 복수의 상이한 방식은 프로그래머블 인터페이스에 의해 지원될 수 있다.
상이한 디바이스 인터페이스 사양 및/또는 큐 관리 및/또는 큐 구조의 시맨틱들은 다를 수 있다. 예를 들어, 상이한 사양은 상이한 커맨드, 및/또는 특정 커맨드에 대해 상이한 시맨틱, 및/또는 상이한 커맨드에 대해 상이한 액션을 가질 수 있다. 일부의 사양에서는 별도의 완료 큐가 제공될 수 있지만, 다른 사양에서는 완료 큐가 제공되지 않는다. 상이한 디바이스 인터페이스마다 상이한 메타데이터가 필요할 수 있다. 상이한 디바이스 인터페이스는 (예를 들어, 상이한 계산 기법을 사용하고/하거나 상이한 데이터 세트에 대해 계산하는) 상이한 체크섬 메커니즘을 사용할 수 있다. 상이한 디바이스 인터페이스마다 검증된 체크섬 정보를 제공하는 방식이 다를 수 있다. 단지 예로서, 정보는 패킷 데이터에 대한 접두부로서 또는 완료의 일부로서 제공될 수 있다.
사양은 버퍼와 관련하여 데이터의 프레임이 처리되는 방식에 따라 다를 수 있다. 예를 들어, 버퍼는 단 하나의 데이터 프레임만을 수신할 수 있거나, 버퍼는 복수의 데이터 프레임을 수신하거나, 단일 프레임이 2개 이상의 버퍼에 걸쳐 있을 수 있다. 이것은 디바이스 인터페이스 사양에 의해 정의될 수 있거나 또는 호스트 사양의 특정 구현예에 의해 정의될 수 있다.
디바이스 인터페이스는, 링 내의 한 디스크립터가 데이터 버퍼가 아닌, 더 많은 디스크립터들의 테이블을 가리키는 간접 디스크립터를 지원할 수 있다. 이것은, 예를 들어, 링을 "확장"하는 데 사용될 수 있다. 이러한 타입의 구성은, 예를 들어, 나중에 더 논의되는 Virtio에 의해 지원될 수 있다.
하나 이상의 디바이스 인터페이스 사양은 트랜잭션을 버스 상으로 입력하는 방법 및/또는 시기를 정의할 수 있다. 이들 트랜잭션은, 예를 들어, DMA 관련 트랜잭션일 수 있다. 예를 들어, 일부 사양은 일부 또는 모든 상황에서 트랜잭션을 집계할 수 있다. 일부 사양은 단일 트랜잭션을 버스 상으로 별도로 입력하도록 지정할 수 있다. 일부 사양은 버스 상으로 입력되는 트랜잭션의 속성, 예를 들어, 정렬 및/또는 패딩을 정의할 수 있다.
디바이스 인터페이스는 "표준화된" 인터페이스 또는 독점 인터페이스일 수 있거나 또는 심지어는 특정 인터페이스의 구현예일 수 있다. 단지 예로서, 원격 직접 메모리 액세스(remote direct memory access)(RDMA), Virtio, 및 비휘발성 메모리 호스트 컨트롤러 인터페이스 익스프레스(Non-Volatile Memory Host Controller Interface Express)(NVMe)에 의해 디바이스 인터페이스를 구현하는 일부 접근 방식이 제공된다. NVMe는 PCI Express (PCIe) 버스를 통해 연결된 비휘발성 저장 매체에 액세스하기 위한 개방형 논리 디바이스 인터페이스 사양이다.
Virtio 디바이스는 가상 환경에서 찾을 수 있다. 설계상 Virtio 디바이스는 가상 머신 내의 게스트에게는 물리적 디바이스처럼 보인다. Virtio 사양은 Virtio 디바이스를 물리적 디바이스처럼 취급한다. 이러한 유사성을 통해, 게스트는 표준 드라이버 및 탐색 메커니즘(discovery mechanism)을 사용할 수 있다. Virtio 사양의 목적은 가상 환경과 게스트가 가상 디바이스를 위한 표준적이고 확장 가능한 메커니즘을 가져야 한다는 것이다. Virtio 디바이스는 물리적 인터페이스로서 하드웨어로 구현될 수 있다. 이를 통해 하이퍼바이저가 없는 환경에서 게스트 운영 체제 이미지를 실행할 수 있다.
본 출원인이 제공하는 EF100은 이른바 독점 사양의 일 예이다.
이러한 예의 상이한 디바이스 인터페이스는 단지 예시에 불과하고, 다른 실시예가 대안적으로 또는 추가적으로 임의의 적합한 디바이스 인터페이스와 함께 사용될 수 있음을 이해해야 한다.
사양은 가상화된 동작 및/또는 하드웨어 동작 및/또는 소프트웨어 동작 및/또는 펌웨어 동작을 정의할 수 있다.
프로그래머블 인터페이스는 적어도 2개의 상이한 디바이스 인터페이스의 요건을 지원할 수 있도록 구성된다.
언급한 바와 같이, 상이한 디바이스 인터페이스는, 예를 들어, 큐 타입 구조를 구현하기 위해, 상이한 요건을 가질 수 있다. 예를 들어, 적어도 일부 큐의 레이아웃과 기능은 대체로 유사할 수 있지만 그럼에도 불구하고 몇 가지 차이점이 있다. 예를 들어, 디스크립터의 포맷과 레이아웃, 포인터의 인덱스, 커맨드, 및 통지 완료 중 하나 이상이 다를 수 있다.
예를 들어, EF100은 수신 큐, 전송 큐, 및 이벤트 큐를 갖는다.
일부의 디바이스 인터페이스 사양에는 호스트에 대한 네트워크 인터페이스 디바이스 세트, 네트워크 디바이스에 대한 호스트, 및 완료 링이 있을 수 있다. 예로서, 트랜잭션 큐는 다음의 요소: 즉, 디스크립터 링, 완료 링, 데이터 버퍼, 도어벨, 및 인터럽트 대상으로 구성될 수 있다.
디바이스 인터페이스 사양의 일 예는 다수의 사용자 구성 가능한 호스트 프로파일을 정의할 수 있고, 각 프로파일은 2개의 메모리 영역 중 어느 것이 특정 큐 요소를 보유하는지를 지정한다. 일부 실시예에서, 사용자 구성 가능한 호스트 프로파일의 개수는 16이다. 이것은 단지 예시일 뿐이고 다른 구현예가 상이한 개수의 사용자 구성 가능한 호스트 프로파일을 가질 수 있음을 이해해야 한다.
예를 들어, PCI 물리적 기능부 또는 가상 기능부는 다수의 Virtio 큐(VRING)를 지원하고 Virtio-net 특성을 갖도록 지정될 수 있다. 다른 기능부는 NVMe 큐 페어(queue pair)를 지원하고 NVMe 특성을 가질 수 있다.
각각의 큐에는 미리 구성된 호스트 프로파일 중 하나가 할당될 수 있다.
프로파일은 큐 데이터, 링, 및 인터럽트가 제1 호스트 메모리 공간에 있다는 것을 지정할 수 있다. 마찬가지로, 큐는 제2 호스트 메모리 공간 내에 수용될 수 있다. 큐의 요소들은 상이한 공간에 있을 수 있다. 예를 들어, 데이터는 제1 호스트 메모리로부터 나올 수 있지만, 디스크립터, 완료, 및 인터럽트는 제2 호스트 메모리에 속하거나, 또는 그 반대의 경우도 마찬가지이다.
디바이스 인터페이스 어댑터(308)(이는 나중에 보다 상세히 설명될 것임)를 통해, 호스트 대 네트워크 인터페이스 큐 디스크립터는 큐의 호스트 프로파일에 지정된 데이터 위치에 우선하는 데이터 위치를 선택할 수 있다.
디바이스 인터페이스 어댑터는, 큐의 할당된 프로파일 ID를 로컬 큐 상태 테이블에 저장하고, 해당 ID를 필요에 따라 어댑터 DMA 트랜잭션의 일부로서 제공함으로써, DMA 호스트 프로파일 특징을 지원할 수 있다.
RDMA는 큐 페어의 세트를 갖는다. 이러한 세트는 일부 실시예에서 32k-128k 큐 페어를 포함할 수 있다. 각 큐 페어는 전송 큐(send queue)(SQ), 수신 큐(receive queue)(RQ), 및 완료 큐(complete queue)(CQ)를 지원할 수 있다.
Virtio는 하나 이상의 VIRT 큐 페어와 선택적으로 제어 VIRT 큐를 가질 수 있다. 일부 실시예에서, Virtio 블록 디바이스는 단일 VIRT 큐를 통해 블록 저장 인터페이스를 제공한다. 드라이버는 저장소로부터 드라이버로 데이터 블록을 전송하는 판독 요청과 드라이버로부터 디바이스로 데이터 블록을 전송하는 기입 요청을 제출한다. Virtio 디바이스는 디스크립터 테이블, 이용 가능한 링, 및 사용된 링을 필요로 할 수 있다.
디바이스 인터페이스의 인스턴스는 호스트 소프트웨어 엔티티와 하드웨어 데이터 경로 간의 통신 채널을 제공한다.
프로그래머블 인터페이스(510)는 구성 가능한 하드웨어에 의해 적어도 부분적으로 제공될 수 있다. 구성 가능한 하드웨어는 임의의 적합한 구성 가능한 하드웨어일 수 있다. 단지 예로서, 프로그래머블 인터페이스(510)는 FPGA 마이크로 엔진과 ASIC 마이크로 엔진 중 하나 이상에 의해 제공될 수 있다. 프로그래머블 인터페이스에 의해 수행될 동작은 하이 레벨 언어로 지정될 수 있다. 그런 다음 이것은 게이트 레벨(gate level) 또는 레지스터 전송 언어(register transfer language)(RTL)로 컴파일링될 수 있다. 대안적으로, 이들 동작은 ASIC 등의 마이크로프로세서에 프로그래밍된 펌웨어로서 제공될 수 있다. 하이 레벨 합성(high level synthesis)(HLS)과 같은 프로그램이 사용될 수도 있다.
동일한 프로그래머블 인터페이스(510)는 일부 실시예에서 임의의 하나 이상의 적합한 버스 프로토콜 및/또는 임의의 하나 이상의 적합한 디바이스 인터페이스 사양을 지원하도록 프로그래밍될 수 있다. 이것은 네트워크 인터페이스 디바이스가 처음 사용되는 때 및/또는 해당 디바이스가 사용 중인 동안일 수 있다.
프로그래머블 인터페이스(510)는 하나 이상의 공유 버스(119)와의 인터페이스(304)를 갖는다. (예로서만, 도 2는 2개의 버스를 나타낸다) 버스(119)는 호스트 디바이스와 네트워크 인터페이스 디바이스 사이에 제공된다. 네트워크 인터페이스 디바이스가 어떻게 구축되는지에 따라, 인터페이스(304)는 하나 이상의 버스(119)와 인터페이싱하도록 구성될 수 있다. 하나 초과의 버스가 있는 경우, 이들 버스는 이전에 설명한 것과 같이 동일하거나 상이한 프로토콜에 따라 동작할 수 있다. 일부 실시예에서, 인터페이스는 대안적으로 더 작은 단위(예컨대, 이분기(bi-furcation) 또는 쿼드 분기(quad-furcation))로 분할될 수 있는 하나 이상의 버스를 지원하도록 구성될 수 있다.
도 2는 또한 하나 이상의 데이터 슬라이스(512)를 갖는 스트리밍 서브시스템(310)을 도시한 것이다. 슬라이스는, 예를 들어, 데이터가 전송되기 전이나 수신된 후에 데이터에 대한 데이터 처리를 수행할 수 있다.
프로그래머블 인터페이스(510)는 하나 이상의 어댑터(308)를 구현하도록 구성된다. 어댑터는 디바이스 인터페이스의 인스턴스를 지원할 수 있다. 일부 실시예에서, 어댑터는 하나 초과의 디바이스 인터페이스 인스턴스를 지원할 수 있다. 하나 초과의 어댑터가 구현되는 경우, 상이한 디바이스 인터페이스를 지원하도록 상이한 어댑터가 구성될 수 있다. 일부 실시예에서, 하나 초과의 어댑터가 동일한 디바이스 인터페이스 사양을 사용할 수 있다.
어댑터는 호스트 컴퓨팅 디바이스로의 및/또는 호스트 컴퓨팅 디바이스로부터의 개별 동작을 실행하고 제어하도록 구성될 수 있다. 이것은 하드웨어 가상화 이후일 수 있다.
어댑터는 호스트 디바이스로의 통신 및 호스트 디바이스로부터의 통신 중 하나 이상을 위한 것일 수 있다. 어댑터는 (예를 들어, 네트워크로부터 수신된 데이터, 네트워크로 전송될 데이터, 및/또는 디스크립터 페치 등과 같은 가상 디바이스 인터페이스의 일부로서 DMA를 통해 전송되는 정보를 위해) 호스트로의 그리고 호스트로부터의 DMA 트랜잭션 중 하나 이상을 지원할 수 있다.
하나 이상의 어댑터는 하나 이상의 슬라이스(512)로부터 입력을 수신할 수 있고/있거나 하나 이상의 슬라이스(512)에 출력을 제공할 수 있다. 슬라이스는 스트리밍 서브시스템(310)의 일부일 수 있다. 일부 실시예에서, 주어진 슬라이스는 단일 어댑터 또는 하나 초과의 어댑터와 통신할 수 있다.
프로그래머블 인터페이스(510)는 하나 이상의 버스에 대한 액세스를 제어하는 공통 스케줄러 기능부(306)를 갖는다. 스케줄러 기능부는, 예를 들어, 네트워크 인터페이스 디바이스와 호스트 간의 공유 버스에 대한 액세스를 제어할 수 있다. 버스는, 예를 들어, 상이한 디바이스 인터페이스 인스턴스들 간에 공유될 필요가 있는 유한 대역폭을 갖는다. 예를 들어, 스케줄러는 상이한 디바이스 인터페이스 인스턴스의 각 트랜잭션이 지원되는 것을 보장하도록 구성된다. 스케줄러는 모든 트랜잭션들 간에 버스 리소스(예컨대, DMA 대역폭)를 스케줄링할 필요가 있다. 디바이스 인터페이스 인스턴스와 마찬가지로, 프로그래머블 인터페이스는 (사용자 정의 외부 커널과 같은) 다른 DMA 클라이언트를 지원할 수 있다. 스케줄러는 또한 이들 기능부를 스케줄링하도록 구성될 수 있다.
일부 실시예에서, 단일 스케줄러 기능부는 이들 스케줄링을 관리하도록 구성된다.
스케줄러는 또한 데이터 경로 슬라이스 내의 버퍼와 같은 디바이스 리소스를 스케줄링할 수도 있다. 스케줄러는 가상 디바이스 인터페이스들 간의 서비스 품질 정책을 시행하는 데 사용될 수 있다. 서비스 품질 정책은, 예를 들어, 큐당 하나 이상의 우선순위 또는 대역폭과 관련될 수 있다. 스케줄러는 네트워크 인터페이스 디바이스의 상이한 서브시스템들 간의 공정성(fairness)을 관리할 수 있다.
어댑터의 트랜잭션은 스케줄러(306)에 의해 스케줄링된다. 스케줄러는, 일부 실시예에서, 임의의 다른 필요한 액세스도 관리할 수 있다.
프로그래머블 인터페이스는 도어벨 기능부(322)를 포함한다. 호스트로부터 네트워크 인터페이스 디바이스로의 상이한 디바이스 인터페이스 인스턴스와 연관된 모든 도어벨은 이 공통 도어벨 기능부에 기입된다. 도어벨의 사용 및/또는 구현 방법 및/또는 사용 방법은 개별 디바이스 인터페이스에 따라 달라질 수 있다. 예를 들어, 호스트가 기입될 데이터를 가질 경우 호스트는 도어벨을 제공할 수 있다. 호스트는 수신 큐를 나타내기 위해 도어벨을 제공할 수 있다. 보다 일반적으로, 호스트는 프로그래머블 인터페이스(510)에 의해 무언가가 수행되기를 원할 경우 도어벨 기능부에 도어벨을 제공할 수 있다.
도어벨 기능부는 도어벨 기입의 기본 어드레스에 의해 도어벨이 의도되는 어댑터를 결정하도록 구성될 수 있다.
도어벨 자체는 상대적으로 큰 데이터 프레임일 수 있거나, 또는 상대적으로 짧아, 예를 들어, 특정 큐 또는 큐 내의 인덱스 등을 나타낼 수 있다. 예를 들어, 상대적으로 큰 도어벨은 전송될 데이터를 프레임의 제1 부분이나 전체 프레임에 포함할 수 있다. 도어벨이 도어벨 기능부에 기입될 때, 이는 해당 도어벨이 의도된 디바이스 인터페이스의 인스턴스를 지원하는 어댑터(308)가 해당 도어벨에 적절하게 응답하게 할 것이다.
도어벨은 일반적으로 로드/저장과 같은 인스트럭션을 실행하는 호스트 CPU에 의해, 대상 버스 기입이 실행되도록 매핑된 목적지 어드레스에 생성될 수 있다. 버스 매핑 속성(예컨대, 기입 결합)과 사용된 특정 인스트럭션(예컨대, 기입 메모리 장벽)은 생성된 버스 트랜잭션에 영향을 미친다.
도어벨 기능부는 도어벨의 액션을 시행할 수 있다. 여기에는 비정상적인 도어벨에 플래그를 지정하거나 결함이 있는 도어벨을 거부하는 것이 포함될 수 있다. 도어벨 기능부는, 예를 들어, 주어진 어댑터와 연관된 두 개 이상의 도어벨을 통합할 수 있다.
프로그래머블 인터페이스는 나중에 보다 상세히 논의될 어드레스 변환 서비스(address translation service)(ATS)(320)를 포함한다. ATS는 상이한 디바이스 인터페이스 인스턴스에 의해 공유될 수 있다. 프로그래머블 인터페이스는 IOMMU 및/또는 ATS가 사용되도록 구성된다. 이것은 디바이스 인터페이스 사양 및/또는 DMA 액세스의 특정 타입에 따라 달라질 수 있다. 프로그래머블 인터페이스는 IOMMU와 ATS 중 하나 또는 둘 모두를 지원하도록 구성될 수 있다.
일부 실시예에서, 공통 DMA 디스크립터 캐시(314)는 프로그래머블 인터페이스에 의해 제공될 수 있다. 이 디스크립터 캐시는, 예를 들어, 모든 디바이스 인터페이스 인스턴스에 대해 캐시된 모든 디스크립터를 포함할 수 있다. 디스크립터 캐시에는 버스 물리적 어드레스로 결정되는 포인터가 있을 수 있다. 캐시가 개별 큐에 대한 디스크립터를 소진하기 시작하면, 캐시가 개별 큐에 대한 하나 이상의 디스크립터를 페치할 수 있음을 이해해야 한다. 이것은 디스크립터 캐시에 의해 및/또는 개별 어댑터에 의해 제어될 수 있다.
디스크립터 캐시는, 예를 들어, 디스크립터가 오래되었거나 다른 디스크립터를 위한 공간을 확보하기 위해 하나 이상의 디스크립터를 제거할 수 있다. 이러한 제거는 무작위(random), 최소 최근 사용(least recently used), 어댑터와 연관된 우선순위, 각 어댑터와 연관된 디스크립터의 개수, 및/또는 임의의 다른 적합한 기준 중 하나 이상에 기반할 수 있다.
디스크립터 캐시의 동작은, 큐가 페치되는 디스크립터를 결정할 때 및/또는 디스크립터 캐시가 가득 찼거나 가득 차 가고 있을 때 디스크립터 캐시로부터 삭제되어야 하는 디스크립터를 결정할 때, 서비스 보장 및 사용 패턴 중 하나 이상을 고려할 수 있다. 디스크립터 캐시는 헤드 오브 라인 블로킹(head of line blocking)을 피하기 위해 사전에 디스크립터를 프리페치하려고 시도할 수 있다.
디스크립터 캐시는 상이한 어댑터들 간에 분할될 수 있다. 파티션은 각 어댑터마다 고정 할당이 있도록 구성될 수 있다. 각 어댑터마다의 할당은 동일하거나 다를 수 있다. 대안적으로, 파티션의 사이즈는 달라질 수 있다. 이것은 하나 이상의 어댑터의 활동 및/또는 어댑터가 지원하는 활동의 타입 및/또는 디바이스 인터페이스의 타입과 같은 요인에 따라 달라질 수 있다.
디스크립터 캐시는 대안적으로 어댑터의 필요에 따라 상이한 어댑터들 간에 공유될 수 있다.
일부 실시예에서, 디스크립터 캐시는 각각의 어댑터와 연관된 고정 할당 및 필요에 따라 임의의 하나 이상의 어댑터에 의해 사용가능한 공유 할당을 가질 수 있다.
디스크립터 캐시는 각 어댑터 인스턴스마다 보장된 캐시 예약을 제공할 수 있다.
디스크립터 캐시는 어댑터의 엔드포인트 인스턴스에 대해 보장된 개수의 디스크립터를 제공할 수 있다. 엔드포인트 인스턴스는 큐일 수 있다.
디스크립터 캐시는, 개별 어댑터와 연관된 도어벨의 도어벨 처리 및/또는 개별 어댑터와 연관된 데이터의 도착 중 하나 이상에 응답하여, 하나 이상의 디스크립터를 프리페치하도록 구성될 수 있다.
도 3을 참조하면, 도 3은 도 2의 프로그래머블 인터페이스(510)에 대한 수정을 보다 상세히 도시하고 있다.
이 예에서, 프로그래머블 인터페이스는 복수의 인터페이스와 함께 제공된다. 이 예에서는 2개가 도시된다. 그러나, 일부 실시예에서, 2개를 초과하는 인터페이스가 제공될 수 있다. 도 2의 구성은 2개의 인터페이스를 갖도록 수정될 수 있음을 이해해야 한다.
도 3에 도시된 예에서는 공유 DMA 엔진(330)이 제공된다. 이 DMA 엔진은 상이한 어댑터(308)에 의해 공유된다. 공유 DMA 엔진은 도 2에 도시된 바와 같은 단일 인터페이스와 함께 사용될 수 있다.
나중에 논의되는 바와 같이, 도 2의 구성의 각 어댑터에는 DMA 엔진이 제공되는 반면, 도 3의 예에서 DMA 엔진은 2개 이상의 어댑터에 의해 공유된다. 공유 DMA 엔진은 리소스를 효율적으로 사용할 수 있다는 점에서 유리할 수 있다. 특정 어댑터에 대해 제공되는 DMA 엔진은 해당 어댑터의 동작에 최적화될 수 있다.
DMA 엔진은 디스크립터 캐시로부터 DMA 커맨드를 판독하고 그 DMA 커맨드를 정의된 순서로 실행할 것이다. DMA 엔진은 메모리로부터 데이터를 판독하고 그 데이터를 메모리에 기입할 것이다. DMA 엔진은 버스 인터페이스와 인터페이싱하고, 크레딧, 비순차적 완료, 및 병렬 트랜잭션(예를 들어, 다중 미해결 트랜잭션)과 같은 버스 흐름 제어 프로토콜 메커니즘을 핸들링할 수 있다. DMA 엔진이 갖는 대역폭의 할당량은 스케줄러에 의해 제어된다.
도 4를 참조하면, 도 4는 도 2의 어댑터(308)의 일 예를 보다 상세히 도시한 것이다.
어댑터(308)는 도어벨 핸들러(350), 디스크립터 로더(354), DMA 엔진(356), 및 RX/TX 처리 기능부(360)를 갖는다.
도어벨 기능부(322)에 의해 도어벨이 수신되면, 도어벨은 특정 어댑터에 대한 동적 어드레스 맵에 기반하여 분석된다. 특정 어댑터의 도어벨 핸들러(350)는 도어벨을 파싱할 것이다. 도어벨 핸들러는 도어벨 기능부를 폴링하여 해당 특정 어댑터용으로 의도된 도어벨을 획득하도록 구성될 수 있다. 파싱은 도어벨과 연관된 커맨드, 디스크립터, 데이터, 및 디바이스 인덱스 중 하나 이상을 결정할 것이다. 커맨드는 데이터 판독, 데이터 기입, 및/또는 더 복잡한 커맨드와 같은 임의의 적합한 커맨드일 수 있다.
도어벨 핸들러는 파싱된 도어벨의 하나 이상의 부분을 포함하는 출력을 디스크립터 로더에 제공한다. 디스크립터 로더는 디스크립터 캐시로부터의 디스크립터를 어셈블링하도록 구성된다. 디스크립터 로더는 또한 큐 포인터와 같은 캐시 컨텍스트 정보를 페치하도록 구성된다. 큐 포인터와 같은 캐시 컨텍스트 정보는 디스크립터 인덱스에 대한 상태를 제공할 수 있다.
디스크립터 캐시는 디스크립터 로더에 요청된 디스크립터 캐시 라인을 제공할 것이다. 디스크립터 캐시는 하나 이상의 호스트 또는 디바이스 메모리로부터의 DMA 디스크립터 캐시 라인일 수 있다. 디스크립터 캐시는 하나 이상의 간접 디스크립터 및 다른 디스크립터를 프리페치할 수 있다. 디스크립터 캐시는 오래된 디스크립터를 제거할 수 있다.
커맨드 및 연관된 디스크립터(들)는 디스크립터 로더에 의해 디스크립터 핸들러에 제공된다. 디스크립터 핸들러는 커맨드(들)를 DMA 요청 체인으로 변환한다. 따라서, 처리의 체인은 DMA 엔진에 대한 DMA 요청 리스트로 마무리된다. DMA 엔진은 DMA 요청을 수행할 것이다. DMA 요청은 스케줄러(306)에 의해 스케줄링된다.
DMA 엔진은 특정 디바이스 인터페이스에 대한 시맨틱과 함께 프로그래밍된다. 디스크립터의 핸들링에는 일부 DMA 응답이 필요할 수 있다. 디스크립터 핸들러는 DMA 엔진에 의해 디스크립터 핸들러에 제공되는 하나 이상의 완료를 통해 DMA 엔진 진행 상황을 인식할 것이다.
다른 DMA 응답은 RX/TX 처리 기능부에 전달될 수 있다. RX/TX 처리 기능부는 오프로드 처리, 리어셈블링 로직 등과 같은 기능을 수행하도록 구성된다.
도 4는 하나의 어댑터를 나타낸다는 것을 이해해야 한다. 프로그래머블 인터페이스는 하나 또는 복수의 어댑터를 지원할 수 있음을 이해해야 한다.
도 5를 참조하면, 도 5는 도 3의 어댑터(308)의 일 예를 보다 상세히 도시한 것이다. 도 5의 어댑터는 일반적으로 도 4의 어댑터와 동일한 방식으로 동작된다. 그러나, 이 경우 DMA 엔진은 어댑터 외부에 있으며, 2개 이상의 상이한 어댑터에 의해 공유될 수 있다. 그러나, 디스크립터 핸들러 및 Rx/TX 기능부에 의한 DMA 엔진과의 상호 작용은 도 4와 관련하여 설명된 것과 동일하다. 이들 실시예에서, 스케줄러는 상이한 어댑터(308)에 의한 DMA 액세스를 공통 DMA 엔진을 통해 스케줄링하도록 구성된다.
도 7을 참조하면, 도 7은 일부 실시예의 메모리 어드레스 관리의 양태를 도시한 것이다. 호스트 컴퓨팅 디바이스(101)에는 네트워크 인터페이스 디바이스(106)를 위한 디바이스 드라이버(115)가 제공된다. 디바이스 드라이버(115)는 호스트 내의 메모리(109)의 일부가 DMA 판독 및 기입을 위해 네트워크 인터페이스 디바이스에 효과적으로 액세스할 수 있게 한다.
디바이스 드라이버(115)는 운영 체제 디바이스 인터페이스 API를 따르는 590으로 참조되는 "상단 에지"를 갖는다. 운영 체제 디바이스 인터페이스 API는 NDIS 또는 Linux 네트워크 드라이버 API일 수 있다. 디바이스 드라이버(115)는, 네트워크 인터페이스 디바이스 하드웨어에 적응되고, API 동작, 전송 동작, 수신 동작, 인터럽트 동작, 및 리필 버퍼 링 동작(refill buffer ring operation)과 같은 동작을 수립하기 위해 레지스터 레벨 동작을 수행하는 591로 참조되는 "하부 에지"를 갖는다.
하부 에지는 공급업체 또는 디바이스 특정 동작을 지원할 수 있다. 일부 실시예에서, 가상 디바이스 인터페이스는 디바이스 드라이버를 일반 디바이스 타입(예를 들어, 네트워크 디바이스 드라이버)으로 만드는 표준화된 인터페이스이다. Virtio와 NVME가 그러한 예이다.
호스트는 입력/출력 메모리 관리 유닛(input/output memory management unit)(IOMMU)(514)를 포함할 수 있다. IOMMU는 호스트 측에서 메모리 매핑을 제공하도록 구성될 수 있다. 일부 실시예에서, 메모리 매핑은 버스(119)의 호스트 측에서 행해진다. 이러한 IOMMU가 제공되는지 여부 및/또는 IOMMU가 동작하는 방법은 호스트 CPU 및/또는 칩셋 아키텍처의 일부일 수 있다.
어드레스 변환은 IOMMU에 의해 수행될 수 있다. 네트워크 인터페이스 디바이스는 디스크립터 큐 내의 어드레스에 데이터를 "기입"할 수 있다. 해당 기입 트랜잭션은 IOMMU에 의해 수신된 다음 디스크립터 큐 내의 어드레스와 연관된 물리적 위치에 기입된다. IOMMU 기법은 네트워크 인터페이스에 의해 일부 DMA 액세스에 사용될 수 있다.
프로그래머블 인터페이스는 어드레스 변환 서비스(address translation service)(ATS) 또는 버퍼 테이블을 지원할 수 있다. ATS는 디바이스가 DMA 트랜잭션에 사용할 수 있는 어드레스를 변환할 것이고, 디스크립터 큐의 일부를 형성할 수 있다. 어드레스는 버스 또는 물리적 어드레스로 변환될 수 있다. 어드레스가 버스 물리적 어드레스로 변환되는 경우, IOMMU는 버스 물리적 어드레스를 변환할 수 있다. ATS는 IOMMU에 대한 캐시 역할을 할 수 있거나, 버퍼 가상 어드레스를 버스 물리적 어드레스에 매핑할 수 있거나, 버퍼 가상 어드레스를 IOMMU가 없는 경우의 물리적 어드레스에 매핑할 수 있다. 이것은 필요한 디바이스 인터페이스 거동에 의해 적어도 부분적으로 정의될 수 있다.
하나 이상의 디바이스 인터페이스 타입에서는 ATS가 제공되지 않을 수 있다.
어드레스 변환이 관리되는 방법은 디바이스 인터페이스에 의해 정의될 수 있음을 이해해야 한다. 따라서, 물리적 위치에 대한 디스크립터 내의 어드레스의 매핑은 디바이스 인터페이스에 따라 IOMMU 및/또는 ATS에서 수행될 수 있다.
일부 실시예에서, 각 애플리케이션마다 어드레스 공간이 제공될 수 있다. 특정 애플리케이션과 연관된 디스크립터 큐는 특정 어드레스를 가질 수 있다. 일부 실시예에서, ATS는 해당 어드레스를 변환하도록 구성될 수 있다. 주어진 큐는 일반적으로 다른 큐와 연관된 메모리 공간을 참조할 수 없다는 것을 주목해야 한다. 호스트의 OS는 버퍼 테이블을 업데이트할 수 있다. 애플리케이션 스레드는, 예를 들어, 애플리케이션이 데이터를 주입하려는 메모리 또는 전송될 데이터를 페치할 메모리를 정의할 수신 디스크립터를 게시할 수 있다. 네트워크 인터페이스 디바이스는, 예를 들어, 표시된 메모리 위치와 연관된 물리적 메모리 위치를 결정하기 위해, ATS 또는 버퍼 테이블을 사용하는 매핑을 사용할 것이다.
DMA를 통해, 데이터는 네트워크 인터페이스 디바이스에 할당된 어드레스 공간 영역으로/으로부터 전송될 수 있다. 이를 통해, 네트워크 인터페이스 디바이스의 수신 슬라이스(512)를 통해 수신된 데이터는 DMA 프로세스를 통해 호스트 메모리에 기입될 수 있다. 이를 통해, 호스트 메모리 내의 데이터는 네트워크 인터페이스 디바이스의 전송 슬라이스(512)를 경유하여, 다시 DMA 프로세스를 통해 전송될 수 있다.
매핑은 디스크립터 큐의 컨텍스트에 대한 개인 어드레스 매핑으로서 구현되거나, 또는 시스템 페이지 테이블과 같은 공유 데이터 구조로서 또는 어드레스 변환 캐시로서 구현될 수 있다.
네트워크 인터페이스 디바이스가 물리적 위치에 데이터를 주입한 경우, 연관된 소켓의 이벤트 큐가 업데이트될 수 있을 뿐만 아니라 네트워크 인터페이스 디바이스에 의해 사용되는 수신 큐 내의 기입 포인터가 업데이트될 수 있다. 네트워크 인터페이스 디바이스는 수신 큐에서 업데이트 기입 포인터에 의해 표시되는 다음 위치에 다음 수신된 데이터를 기입하거나 주입할 수 있다. 포인터는 디스크립터 캐시에 저장된다.
버퍼 테이블의 일 예가 도 8에 도시되며, 버퍼의 물리적 위치(또는 전술한 버스 물리적 어드레스)를 결정하는 데 사용된다. IOMMU 또는 ATS는 버퍼 테이블로서 구현될 수 있다. 일부 실시예에서, 버퍼 테이블은 스레드 또는 애플리케이션 중 어느 것이 각 버퍼에 할당되는지를 매핑하고, 각 버퍼마다 다음의 정보를 보유한다.
1. 버퍼 인덱스. 이것은 호스트에 대해 고유한 버퍼의 식별 번호이다. 버퍼는 버퍼 테이블 인덱스 필드에서 이 번호로 식별된다.
2. 소유권. 이것은 어떤 애플리케이션이나 스레드가 버퍼를 소유하는지를 나타낸다.
3. 물리적 메모리 어드레스. 버퍼는 물리적 메모리의 연속 블록을 차지하며, 이 숫자는 해당 블록이 시작되는 위치(또는 전술한 것과 같은 버스 물리적 어드레스)를 나타낸다.
4. 길이. 이것은 메모리 내의 버퍼의 길이를 나타낸다.
각 버퍼 테이블 엔트리의 사이즈는 호스트 시스템의 페이지 사이즈: 일반적으로 4KBytes와 매칭되도록 선택될 수 있다. 이러한 방식에서 물리적 메모리의 비연속 영역에 매핑되는 애플리케이션의 가상 어드레스 공간의 연속 영역은 버퍼 테이블 엔트리의 시퀀스로 표현될 수 있다. 다른 실시예에서, 최대 GByte의 거대 페이지 사이즈까지의 다수의 사이즈가 지원될 수 있다.
물리적 메모리 위치에 대한 표시된 메모리의 매핑은 버퍼 테이블을 사용하여 수행될 수 있다.
디스크립터 캐시는 디스크립터가 어떤 어댑터와 연관되는지에 대한 직접 또는 간접 표시를 포함할 수 있다. 이는 개별 디스크립터에 올바른 시맨틱을 적용할 수 있도록 하기 위한 것이다.
일부 실시예에서, 디스크립터 캐시 내의 주어진 엔트리는 다음 중 하나 이상을 포함할 수 있다:
데이터가 기입되고/판독될 위치에 대한 포인터;
연관된 어댑터 인스턴스 및/또는 불투명한 엔드포인트 인덱스; 및
메타데이터.
포인터는 단일 포인터, 포인터들의 블록, 포인터들의 링크된 리스트, 트라이, 또는 임의의 다른 적합한 데이터 구조일 수 있다.
메타데이터는 하나 이상의 플래그를 포함할 수 있다.
메타데이터는 포인터가 버퍼가 아닌 디스크립터들의 테이블에 대한 포인터인지 및/또는 포인터가 버퍼에 대한 것인지를 나타낼 수 있다.
메타데이터는 디바이스 인터페이스 타입 및/또는 사이즈를 나타낼 수 있다. 일부 실시예에서, 디스크립터의 사이즈는 달라질 수 있다. 일부 실시예에서는 상이한 사이즈의 세트가 있을 수 있다. 메타데이터는 어떠한 사이즈가 사용 중인지를 나타낼 수 있다.
일부 실시예에서, 메타데이터는 디바이스 인터페이스 타입을 나타낼 수 있다.
메타데이터는 하나 이상의 큐 인덱스(논리적 큐에 대한 디스크립터의 위치) 및/또는 연관된 큐를 나타낼 수 있다.
메타데이터는, 제공되는 경우, 연관된 디바이스 인터페이스의 요건에 따라 달라질 것이라는 것을 이해해야 한다. 메타데이터의 포맷은 연관된 디바이스 인터페이스의 요건에 따라 달라질 수 있다. 메타데이터는 디스크립터 캐시에 의해 불투명한 것으로 처리될 수 있다.
디바이스 인덱스는 디스크립터가 연관된 애플리케이션에 대한 정보를 제공할 수 있다. 이것은 주어진 엔트리에서 어댑터를 나타낼 수 있거나 해당 업데이트가 별도로 제공될 수 있다는 것을 나타낼 수 있다. 디바이스 인덱스는 엔트리가 수신 큐, 커맨드 큐, 또는 전송 큐 또는 심지어는 윈도우에 대한 것인지에 대한 정보를 제공할 수 있다.
네트워크 인터페이스 디바이스와 동시에 통신할 수 있는(그리고 잠재적으로 상이한 디바이스 인터페이스 사양을 사용하는) 많은 사용자 레벨 애플리케이션에 대한 큐 및/또는 윈도우의 상태를 추적하기 위해, 공통 디스크립터 캐시는 적어도 다음 디스크립터를 포함할 수 있다. 디스크립터 캐시는 각 엔드포인트마다 적어도 다수의 디스크립터를 보유하도록 구성될 수 있다. 이를 통해, 예를 들어, 어댑터는 적어도 몇 개의 디스크립터를 항상 사용할 수 있기 때문에 디스크립터 페치에 의해서는 프레임 전달이 중단되지 않도록 보장할 수 있다. 예로서, 디스크립터의 개수는 0, 1, 16, 32, 64, 128개의 디스크립터일 수 있다. 상이한 엔드포인트는 동일하거나 상이한 개수의 디스크립터와 연관될 수 있다.
각 디바이스 인터페이스는 공통 디스크립터 캐시 내로의 인덱스로서 사용될 수 있는 적어도 하나의 대응하는 디바이스 인덱스를 가질 수 있다.
호스트는 하나 이상의 디바이스 드라이버를 다운로딩하여 네트워크 인터페이스 디바이스의 프로그래머블 인터페이스에 의해 지원되는 하나 이상의 디바이스 인터페이스 타입을 지원하도록 구성될 수 있다.
일부 실시예에서, 네트워크 인터페이스 디바이스는 네트워크 인터페이스 디바이스에 의해 지원되는 하나 이상의 상이한 인터페이스 타입을 위한 디바이스 드라이버를 제공할 수 있다. 호스트에 의해 수신되는 디바이스 드라이버는 디바이스 드라이버로 표현되거나 eBPF 프로그램과 같은 프로그램으로 표현될 수 있다.
일부 실시예에서, 디바이스 드라이버 및 디바이스 인터페이스는 단일 하이 레벨 프로그램으로부터 생성된다. 프로그램은 운영 체제에 의해 컴파일링되고 네트워크 인터페이스 디바이스 인스턴스로 다운로딩된다. 호스트 컴퓨팅 디바이스는 프로그램을 컴파일링하여, 디바이스 인터페이스 및 커널 모듈, 디바이스 드라이버, 또는 기본 운영 체제의 호스트 인터페이스에 적합한 임의의 다른 표현을 위한 펌웨어 또는 RTL 레벨 코드를 제공할 수 있다.
호스트 컴퓨팅 디바이스는 하이 레벨 언어 프로그램을 호스트 인터페이스(디바이스 드라이버)를 위한 중간 레벨 언어 프로그램으로 컴파일링하도록 구성될 수 있다. 이 중간 레벨 언어 프로그램은, 프로그램이 커널과 같은 보다 높은 권한을 가진 도메인에 삽입되는 경우, 검증될 수 있다. 단지 예로서, 중간 언어 프로그램은 eBPF(또는 확장된 eBPF) 프로그램일 수 있다.
호스트 컴퓨팅 디바이스는 하이 레벨 언어 프로그램을 디바이스 인터페이스를 위한 중간 레벨 언어 프로그램(예를 들어, HLS, 또는 실행 물리적 디바이스를 위한 펌웨어)으로 컴파일링하도록 구성될 수 있다.
하이 레벨 프로그램의 소스는 보다 높은 레벨의 권한을 가진 또는 보다 낮은 레벨의 권한을 가진 애플리케이션일 수 있다. 보다 높은 레벨의 권한을 가진 애플리케이션은 소위 신뢰할 수 있는 애플리케이션일 수 있고, 커널 레벨 등의 수정을 수행하도록 위임될 수 있다. 보다 낮은 레벨의 권한을 가진 애플리케이션은 소위 신뢰할 수 없는 애플리케이션일 수 있고, 따라서 커널 레벨 등의 수정을 수행할 수가 없다. 그러나, 신뢰할 수 없는 애플리케이션의 컴파일링된 출력은 권한 있는 검증자가 사용하기에 안전한 것으로 검증되거나 샌드박스 환경에서 실행될 수 있다.
애플리케이션은, 호스트 내의 디바이스 드라이버와 네트워크 인터페이스 디바이스 내의 디바이스 인터페이스로 컴파일링되는 하이 레벨 언어를 사용하여 디바이스 인터페이스에 대한 시맨틱을 표현할 수 있다. 애플리케이션과 연관된 권한에 따라, 디바이스 드라이버는 (보다 높은 권한의 경우) 커널 내에 삽입되거나 (보다 낮은 권한의 경우) 커널 외부에 삽입될 수 있다.
필요한 디바이스 인터페이스를 제공하기 위해 프로그래밍 인터페이스에 의해 사용되는 네트워크 인터페이스 디바이스용 프로그램은 보다 높거나 보다 낮은 권한과 연관될 수 있다. 프로그램이 보다 높은 권한을 갖는다면, 프로그램은 보다 높은 권한과 연관된 하드웨어 기능부의 일부 또는 전체를 사용할 수 있다. 프로그램이 보다 낮은 권한을 갖는다면, 프로그램은 보다 낮은 권한과 연관된 하드웨어만을 사용할 수 있다. 예로서, 프로그램이 보다 낮은 레벨의 권한과 연관되어 있다면, 액세스가 특정 DMA 버퍼로 제한될 수 있고/있거나 허용되는 인터럽트의 개수가 제한될 수 있고/있거나 인터럽트가 허용되지 않을 수 있고/있거나 버스에 대한 액세스의 스케줄링이 제한될 수 있다.
일부 실시예에서, 디바이스 인터페이스는 네트워크 인터페이스 디바이스 상의 샌드박스 환경에서 제공될 수 있다. 예를 들어, 어댑터는 샌드박스 환경에서 제공될 수 있다. 샌드박스 환경은 보다 낮은 레벨의 권한과 연관된 어댑터와 함께 사용될 수 있다.
일부 실시예에서, ATS의 프로그래밍은 주어진 어댑터와 연관된 특권에 따라 제어될 수 있다. 이는 보다 낮은 권한의 어댑터에는 보다 높은 레벨의 권한과 연관된 버퍼에 대한 액세스가 제공되지 않거나 해당 어댑터가 액세스할 수 있는 버퍼에만 액세스가 제공되도록 보장하기 위한 것이다.
일부 실시예에서, 프로그래머블 인터페이스에는 템플릿으로서의 템플릿 기능부, 예를 들어, 스케줄러 기능부, 도어벨 기능부, ATS 기능부, 디스크립터 캐시, DMA 엔진(공유되는 경우), 및 복수의 어댑터 중 하나 이상이 제공될 수 있다. 프로그램 코드 등이 특정 디바이스 인터페이스를 위해 프로그래머블 인터페이스에 의해 수신되는 경우, 이로 인해 어댑터에 대한 템플릿은 특정 디바이스 인터페이스에 맞게 수정될 것이다. 스케줄러 기능부, 도어벨 기능부, ATS 기능부, 디스크립터 캐시, 및 DMA 엔진의 하나 이상의 템플릿은 특정 디바이스 인터페이스를 지원하도록 수정될 수 있다.
일부 실시예에서, 프로그래머블 인터페이스의 프로그래밍은 런타임(run time)에서 수행될 수 있다. 일부 실시예에서, 프로그래머블 인터페이스의 프로그래밍은 호스트 컴퓨팅 디바이스 및 네트워크 인터페이스 디바이스의 동작 동안 수행될 수 있다.
전술한 실시예는 네트워크 인터페이스 디바이스와 호스트 디바이스 사이에서 사용하기 위한 프로그래머블 인터페이스를 논의했다. 대안적으로 또는 추가적으로, 프로그래머블 인터페이스가 네트워크 인터페이스 디바이스 상에서 라우팅을 위해 사용될 수 있다는 것을 이해해야 한다. 예를 들어, 네트워크 인터페이스 디바이스 상에는 버스를 사용하여 통신하도록 구성된 컴포넌트가 있을 수 있다. 해당 버스는 이전에 논의된 타입의 버스 중 임의의 버스일 수 있다.
예를 들어, 네트워크 인터페이스 디바이스는 PCIe 버스와 같은 버스를 사용하여 통신하도록 구성된 2개 이상의 ASIC을 포함할 수 있다. 일부 실시예에서, 호스트 디바이스와 인터페이싱하도록 구성된 동일한 프로그래머블 인터페이스는 또한 네트워크 인터페이스 디바이스 상의 2개 이상의 컴포넌트 사이에서 인터페이싱하도록 구성될 수 있다. 다른 실시예에서, 네트워크 인터페이스 디바이스 상의 컴포넌트들 간의 인터페이싱에 필요한 것과 비교하여 호스트 디바이스와 인터페이싱하기 위해 별도의 프로그래머블 인터페이스가 사용될 수 있다.
단지 예로서, 이전에 설명된 것과 같은 프로그래머블 인터페이스를 포함하는 예시적인 네트워크 인터페이스 디바이스의 일부 예가 이제 도 6을 참조하여 설명될 것이다.
일부 실시예에서, 프로토콜 처리가 네트워크 인터페이스 디바이스로 오프로딩되어 네트워크 인터페이스 디바이스에서 수행될 수 있다. 이러한 오프로딩이 네트워크 인터페이스 디바이스에서 수행되는 경우, 네트워크 인터페이스 디바이스의 프로토콜 처리 능력을 이용할 수 있는 기능을 네트워크 인터페이스 디바이스 상에 구현하는 것이 바람직할 수 있다. 호스트 대신 네트워크 인터페이스 디바이스 상에 이러한 기능을 구현하게 되면, 호스트와 네트워크 인터페이스 디바이스 사이의 데이터 전송을 줄여 대기 시간의 잠재적인 개선을 달성할 수 있다.
네트워크 인터페이스 디바이스(102)는 TCP/IP와 같은 전송 프로토콜에 따라 데이터 패킷을 처리하도록 구성된 전송 엔진(215)을 포함한다. 전송 엔진(215)은 프로토콜 스택을 포함할 수 있다. 전송 엔진(215)은 복수의 슬라이스(512) 또는 데이터 파이프라인을 포함할 수 있으며, 이들 슬라이스 중 일부는 네트워크(103)로부터 수신된 진입 데이터 패킷의 수신 처리를 수행하도록 구성된 RX 슬라이스이고, 이들 슬라이스 중 일부는 네트워크(103) 상으로 전송될 진출 데이터 패킷의 전송 처리를 수행하도록 구성된 TX 슬라이스이다. 일부 실시예에서, 슬라이스는 전송될 데이터와 수신된 데이터 모두를 핸들링할 수 있다.
도시된 예에서는 4개의 슬라이스가 제공된다. 그러나, 다른 실시예에서는 상이한 개수의 슬라이스가 사용된다는 것을 이해해야 한다. 일 실시예에서, 슬라이스는 수신된 데이터를 처리하거나 전송될 데이터를 처리하도록 구성될 수 있다. 다른 실시예에서, 슬라이스는 수신된 데이터 및 전송될 데이터를 처리할 수 있도록 구성될 수 있다. 일부 실시예에서, 슬라이스의 개수는 포트의 개수와 동일할 수 있다. 일부 실시예에서, 각 포트마다 송신 슬라이스 및 수신 슬라이스가 있을 수 있다. 일부 실시예에서, 포트의 개수와 슬라이스의 개수 사이에는 직접적인 상관 관계가 없을 수 있다. 일부 실시예에서, 슬라이스는 수신된 데이터를 처리하는 것에서 전송된 데이터를 처리하는 것으로 또는 그 반대로 동적으로 스위칭될 수 있다.
각 슬라이스는 처리 엔진으로 간주될 수 있다. 따라서, 각 슬라이스는 데이터 경로에 대한 파싱, 오프로드 매칭, 및 전달 시맨틱과 같은 기능을 구현하기 위해 마이크로 코드를 실행할 수 있다. 슬라이스는 프레임의 모든 비트에 대해 동작할 수 있다.
슬라이스는 슬라이스가 처리 중인 데이터에 대해 파싱 액션을 수행할 수 있다. 데이터를, 예를 들어, 필터에 대해 매칭시키는 매칭 액션과 매칭의 결과에 따라 액션을 수행하거나 수행하지 않는 액션 기능이 있을 수 있다.
네트워크 인터페이스 디바이스는 흐름 조종 및 짧은 대기 시간 동작, 하드웨어 타임스탬핑, 및 클럭 동기화와 같은 기능을 제공할 수 있다.
이더넷 인터페이스(225)는 네트워크로부터 데이터 패킷을 수신하고 이를 계층 2 스트리밍 인터페이스(220)에 전달하도록 구성된다. 계층 2 스트리밍 인터페이스(220)는 데이터 패킷을 전송 엔진(215)에 전달하도록 구성되고, 전송 엔진(215)은 데이터 패킷의 처리를 수행한 다음 처리된 데이터 패킷을 프로그래머블 인터페이스(510)에 전달한다. 프로그래머블 인터페이스(510)는, 예를 들어, DMA 기입 동작에서 데이터의 적어도 일부를 호스트(101)에 전달하도록 구성된다. 네트워크로 전송될 데이터에 대해서는 이 경로의 역방향을 따를 수 있다. 프로토콜 처리된 데이터 패킷은 계층 2 스트리밍 인터페이스(220)로 전달될 수 있고, 후속적으로 이더넷 인터페이스(225)로 전달된 후 네트워크(2103) 상으로 전송될 수 있다.
도 9를 참조하면, 도 9는 일부 실시예의 방법을 도시한 것이다. 단계 S1에서, 네트워크 인터페이스 디바이스의 프로그래머블 인터페이스는 네트워크 인터페이스 디바이스와 호스트 디바이스 사이의 적어도 하나의 버스와의 디바이스 인터페이스를 제공하도록 프로그래밍되고, 프로그래머블 인터페이스는 복수의 상이한 타입의 디바이스 인터페이스를 지원하도록 프로그래밍된다.
도 10을 참조하면, 도 10은 일부 실시예의 방법을 도시한 것이다. 단계 T1에서, 호스트 컴퓨팅 디바이스는 네트워크 인터페이스에 대한 디바이스 인터페이스를 정의하는 프로그램을 컴파일링한다.
단계 T2에서, 컴파일링된 프로그램은 호스트 컴퓨팅 디바이스에 설치되어 상기 디바이스 인터페이스에 대한 호스트 인터페이스를 정의하고, 네트워크 인터페이스 디바이스에 설치되어 해당 디바이스 인터페이스를 정의한다.
본원에서 사용된 정보 항목의 "식별"이 해당 정보 항목에 대한 직접적인 사양을 반드시 필요로 하는 것은 아니다. 예를 들어, 메모리의 시작 어드레스를 "식별"하는 포인터는 전체 물리적 메모리 어드레스를 지정할 수 있거나, 물리적 어드레스에 매핑되는 보다 큰 메모리 어드레스 공간 내의 어드레스를 지정할 수 있거나, 물리적 어드레스에 매핑되는 가상 어드레스를 지정할 수 있거나, 추가로 일부 종류의 사용자 ID에 따라 물리적 어드레스에 매핑되는 사용자 어드레스 공간 내의 어드레스를 지정할 수 있거나, 식별된 실제 시작 어드레스보다 1만큼 더 적거나 1만큼 더 큰 어드레스를 이들 방식 중 임의의 방식으로 식별할 수 있는 등이 가능하다.
호스트 컴퓨팅 또는 처리 디바이스 또는 시스템은 임의의 적합한 컴퓨팅 디바이스 또는 시스템일 수 있다. 예로서, 호스트 컴퓨팅 디바이스는 서버, 퍼스널 컴퓨터, 스위치, 라우터, 브리지, 가상화된 시스템(예컨대, 가상화된 운영 체제, 및 운영 체제가 지원하는 애플리케이션), 휴대용 디바이스, 예를 들어, 태블릿 컴퓨터, 스마트폰, 또는 임의의 다른 적합한 컴퓨팅 디바이스 중 하나 이상을 포함할 수 있다. 일부 실시예에서, 호스트 컴퓨팅 디바이스는 2개 이상의 컴퓨팅 디바이스의 세트에 의해 제공될 수 있다. 이들 컴퓨팅 디바이스는 동일하거나 상이할 수 있다. 이들 컴퓨팅 디바이스는 컴퓨팅 디바이스의 이전 예 중 임의의 하나 이상일 수 있다.
네트워크 인터페이스 디바이스는 유선 또는 무선 네트워크를 호스트 컴퓨팅 디바이스에 인터페이싱하도록 구성된 임의의 하드웨어 디바이스일 수 있다. 네트워크 인터페이스 디바이스는 네트워크와 호스트 디바이스 사이에 임의의 방식으로 제공될 수 있다. 네트워크 인터페이스 디바이스는 호스트 처리 디바이스의 필수적인 부분일 수 있다. 네트워크 인터페이스의 물리적 하드웨어 컴포넌트는 때때로 네트워크 인터페이스 카드(network interface card)(NIC)라고 지칭되지만 카드 형태일 필요는 없다. 예를 들어, 네트워크 인터페이스의 물리적 하드웨어 컴포넌트는 마더보드에 직접 장착된 집적 회로(IC) 및 커넥터의 형태일 수 있다. 네트워크 인터페이스 디바이스는 LAN(Local Area Network) 또는 LOM(마더보드 상의 LAN)에 의해 제공될 수 있다. 네트워크 인터페이스 디바이스는 대안적으로 또는 추가적으로 호스트 컴퓨팅 디바이스의 PCIe 카드와 같은 하나 이상의 주변장치로서 제공될 수 있다. 다른 실시예에서, 임의의 다른 적합한 네트워크 인터페이스 디바이스가 사용될 수 있음을 이해해야 한다.
네트워크 인터페이스 디바이스는 적어도 하나의 프로세서와 적어도 하나의 메모리에 의해 구현될 수 있다.
실시예는 프로세서 엔티티에서와 같은 데이터 프로세서에 의해 실행 가능한 컴퓨터 소프트웨어에 의해, 또는 하드웨어에 의해, 또는 소프트웨어와 하드웨어의 조합에 의해 구현될 수 있다. 소프트웨어 루틴, 애플릿 및/또는 매크로를 포함하는 프로그램 제품이라고도 하는 컴퓨터 소프트웨어 또는 프로그램은 임의의 장치 판독 가능 데이터 저장 매체에 저장될 수 있으며, 특정 태스크를 수행하기 위한 프로그램 인스트럭션을 포함한다. 컴퓨터 프로그램 제품은 이러한 프로그램이 실행될 때 실시예를 수행하도록 구성된 하나 이상의 컴퓨터 실행 가능 컴포넌트를 포함할 수 있다. 하나 이상의 컴퓨터 실행 가능 컴포넌트는 적어도 하나의 소프트웨어 코드 또는 그 일부일 수 있다.
또한, 이와 관련하여, 도면에서와 같은 로직 흐름의 임의의 블록은 프로그램 단계를 나타낼 수 있거나, 또는 상호 접속된 로직 회로, 블록 및 기능을 나타낼 수 있거나, 프로그램 단계와 로직 회로, 블록 및 기능의 조합을 나타낼 수 있음에 주목해야 한다. 소프트웨어는 메모리 칩으로서 이러한 물리적 매체 상에, 또는 프로세서 내에 구현된 메모리 블록 상에, 하드 디스크 또는 플로피 디스크와 같은 자기 매체 상에, 그리고, 예를 들어, DVD와 그의 데이터 변종인 CD와 같은 광학 매체 상에 저장될 수 있다. 물리적 매체는 비 일시적 매체이다.
메모리는 로컬 기술 환경에 적합한 임의의 타입일 수 있고, 반도체 기반 메모리 디바이스, 자기 메모리 디바이스 및 시스템, 광학 메모리 디바이스 및 시스템, 고정 메모리(fixed memory) 및 착탈식 메모리와 같은, 임의의 적절한 데이터 저장 기술을 사용하여 구현될 수 있다. 데이터 프로세서는 로컬 기술 환경에 적합한 임의의 타입일 수 있고, 범용 컴퓨터, 특수 목적 컴퓨터, 마이크로프로세서, 디지털 신호 프로세서(DSP) 중 하나 이상을 비 제한적인 예로서 포함할 수 있다.
본 출원인은 본원에서 설명된 각각의 개별적인 특징 및 2개 이상의 그러한 특징의 임의의 조합을, 그러한 특징 또는 조합이 전체적으로 본 기술 분야의 기술자의 일반적인 상식의 관점에서 본 명세서에 기반하여 수행될 수 있을 정도로, 그러한 특징 또는 특징의 조합이 본원에 개시된 임의의 문제를 해결하는지 여부와 관계없이, 그리고 청구항의 범위에 대한 제한 없이, 개별적으로 기술한다. 출원인은 본 발명의 양태가 이러한 임의의 개별 특징 또는 특징의 조합으로 구성될 수 있음을 나타낸다. 전술한 설명에 비추어 볼 때, 본 발명의 범위 내에서 다양한 수정이 행해질 수 있다는 것이 본 기술 분야의 기술자에게는 명백할 것이다.

Claims (15)

  1. 네트워크 인터페이스 디바이스에 있어서,
    상기 네트워크 인터페이스 디바이스와 호스트 디바이스 사이의 적어도 하나의 버스와의 디바이스 인터페이스를 제공하도록 구성되는 프로그래머블 인터페이스를 포함하고, 상기 프로그래머블 인터페이스는 복수의 상이한 타입의 디바이스 인터페이스를 지원하도록 프로그래밍 가능한 것인, 네트워크 인터페이스 디바이스.
  2. 제1항에 있어서,
    상기 프로그래머블 인터페이스는 적어도 2개의 디바이스 인터페이스 인스턴스를 동시에 지원하도록 구성되는 것인, 네트워크 인터페이스 디바이스.
  3. 제2항에 있어서,
    상기 프로그래머블 인터페이스는 공통 디스크립터 캐시(common descriptor cache)를 포함하고, 상기 공통 디스크립터 캐시는 복수의 디바이스 인터페이스 인스턴스에 대한 트랜잭션에 대한 개별 엔트리를 저장하도록 구성된 것인, 네트워크 인터페이스 디바이스.
  4. 제3항에 있어서,
    상기 공통 디스크립터 캐시 내의 엔트리는:
    포인터 정보;
    어댑터 인스턴스 및/또는 불투명한 엔드포인트 인덱스; 또는
    메타데이터
    중 하나 이상을 포함하는 것인, 네트워크 인터페이스 디바이스.
  5. 제4항에 있어서,
    상기 메타데이터는:
    상기 포인터가 포인터인지, 데이터 위치에 대한 포인터인지, 또는 추가 포인터에 대한 포인터인지의 표시;
    상기 엔트리의 적어도 일부와 연관된 사이즈;
    상기 엔트리와 연관된 어댑터의 표시;
    하나 이상의 큐의 표시; 및
    하나 이상의 큐 내의 위치
    중 하나 이상을 포함하는 것인, 네트워크 인터페이스 디바이스.
  6. 제3항 내지 제5항 중 어느 한 항에 있어서,
    상기 공통 디스크립터 캐시는:
    상이한 디바이스 인터페이스 인스턴스와 연관되는 상이한 파티션으로 적어도 부분적으로 분할되는 것;
    상이한 디바이스 인터페이스 인스턴스들 간에 공유되는 것;
    각 디바이스 인터페이스 인스턴스마다 보장된 캐시 예약을 제공하는 것; 및
    디바이스 인터페이스의 엔드포인트 인스턴스에 대해 보장된 개수의 디스크립터를 제공하는 것
    중 하나 이상이도록 구성되는 것인, 네트워크 인터페이스 디바이스.
  7. 제3항 내지 제6항 중 어느 한 항에 있어서,
    상기 공통 디스크립터 캐시는, 개별 디바이스 인터페이스와 연관된 도어벨의 도어벨 처리 또는 개별 디바이스 인터페이스와 연관된 데이터의 도착 중 하나 이상에 응답하여, 하나 이상의 디바이스 인터페이스에 대한 하나 이상의 디스크립터를 프리페치하도록 구성되는 것인, 네트워크 인터페이스 디바이스.
  8. 제2항 내지 제7항 중 어느 한 항에 있어서,
    상기 프로그래머블 인터페이스는 복수의 상이한 디바이스 인터페이스 인스턴스에 대하여 상기 적어도 하나의 버스에 대한 액세스를 스케줄링하도록 구성된 스케줄러를 포함하는 것인, 네트워크 인터페이스 디바이스.
  9. 제2항 내지 제8항 중 어느 한 항에 있어서,
    상기 프로그래머블 인터페이스는 각 디바이스 인터페이스 인스턴스마다 개별 디바이스 인터페이스 어댑터를 제공하도록 구성되는 것인, 네트워크 인터페이스 디바이스.
  10. 제9항에 있어서,
    개별 디바이스 인터페이스 어댑터는 DMA 엔진을 포함하는 것인, 네트워크 인터페이스 디바이스.
  11. 제2항 내지 제10항 중 어느 한 항에 있어서,
    상기 프로그래머블 인터페이스는:
    상기 적어도 2개의 디바이스 인터페이스 인스턴스에 의해 공유되는 DMA 엔진;
    상기 적어도 2개의 디바이스 인터페이스 인스턴스에 의해 공유되는 도어벨 기능부; 및
    상기 적어도 2개의 디바이스 인터페이스 인스턴스에 의해 공유되는 어드레스 변환 서비스
    중 적어도 하나를 제공하도록 구성되는 것인, 네트워크 인터페이스 디바이스.
  12. 제1항 내지 제11항 중 어느 한 항에 있어서,
    상기 복수의 타입의 디바이스 인터페이스 중 적어도 2개는 상이한 큐 구조 타입 중의 하나 이상 및 상이한 시맨틱 또는 커맨드 중의 하나 이상과 연관되는 것인, 네트워크 인터페이스 디바이스.
  13. 제1항 내지 제12항 중 어느 한 항에 있어서,
    상기 프로그래머블 인터페이스는 상기 적어도 하나의 버스의 하나 이상의 상이한 버스 프로토콜을 지원하도록 구성되는 것인, 네트워크 인터페이스 디바이스.
  14. 제1항 내지 제13항 중 어느 한 항에 있어서,
    상기 프로그래머블 인터페이스는 상기 상이한 타입의 디바이스 인터페이스 중 하나 이상을 지원하도록 프로그래밍 가능한 하나 이상의 템플릿 기능부를 포함하는 것인, 네트워크 인터페이스 디바이스.
  15. 제1항 내지 제14항 중 어느 한 항에 있어서,
    상기 네트워크 인터페이스 디바이스가 동작하는 동안, 상기 프로그래머블 인터페이스는:
    적어도 하나의 디바이스 인터페이스 인스턴스를 제거하는 것;
    적어도 하나의 디바이스 인터페이스 인스턴스를 추가하는 것; 또는
    적어도 하나의 디바이스 인터페이스 인스턴스에서 적어도 하나의 다른 디바이스 인터페이스 인스턴스로 스위칭하는 것
    중 적어도 하나를 수행하도록 구성되는 것인, 네트워크 인터페이스 디바이스.
KR1020227005596A 2019-07-29 2020-07-29 호스트 컴퓨팅 디바이스와 네트워크 인터페이스 디바이스를 포함하는 프로그래머블 네트워크 인터페이스 디바이스 KR20220035242A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/525,313 US11138116B2 (en) 2019-07-29 2019-07-29 Network interface device supporting multiple interface instances to a common bus
US16/525,313 2019-07-29
PCT/US2020/044091 WO2021021946A1 (en) 2019-07-29 2020-07-29 Programmable network interface device comprising a host computing device and a network interface device

Publications (1)

Publication Number Publication Date
KR20220035242A true KR20220035242A (ko) 2022-03-21

Family

ID=72087249

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020227005596A KR20220035242A (ko) 2019-07-29 2020-07-29 호스트 컴퓨팅 디바이스와 네트워크 인터페이스 디바이스를 포함하는 프로그래머블 네트워크 인터페이스 디바이스

Country Status (6)

Country Link
US (2) US11138116B2 (ko)
EP (1) EP4004753B1 (ko)
JP (1) JP2022542998A (ko)
KR (1) KR20220035242A (ko)
CN (1) CN114175005A (ko)
WO (1) WO2021021946A1 (ko)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110825485A (zh) * 2018-08-07 2020-02-21 华为技术有限公司 数据处理的方法、设备和服务器
US20200150997A1 (en) * 2020-01-17 2020-05-14 Yu Bruce Chang Windows live migration with transparent fail over linux kvm
US11775452B2 (en) * 2020-07-23 2023-10-03 MemRay Corporation Non-volatile memory controller device and non-volatile memory device
CN115643318A (zh) * 2022-09-29 2023-01-24 中科驭数(北京)科技有限公司 命令执行方法、装置、设备及计算机可读存储介质

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE10234990B4 (de) * 2002-07-31 2007-03-29 Advanced Micro Devices, Inc., Sunnyvale Hostcontroller, Verfahren zum Betreiben, zugehöriges Southbridgebauelement und Computersystem zur Steuerung der Ersetzung im voraus geholter Deskriptoren in einem Cache
DE102005009021A1 (de) * 2005-02-28 2006-09-07 Advanced Micro Devices Inc., Sunnyvale Vereinheitliche USB OTG-Steuerungseinheit
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
US9210140B2 (en) 2009-08-19 2015-12-08 Solarflare Communications, Inc. Remote functionality selection
US9003053B2 (en) 2011-09-22 2015-04-07 Solarflare Communications, Inc. Message acceleration
US9886072B1 (en) 2013-06-19 2018-02-06 Altera Corporation Network processor FPGA (npFPGA): multi-die FPGA chip for scalable multi-gigabit network processing
CN107992436B (zh) 2016-10-26 2021-04-09 华为技术有限公司 一种NVMe数据读写方法及NVMe设备
US10298496B1 (en) 2017-09-26 2019-05-21 Amazon Technologies, Inc. Packet processing cache

Also Published As

Publication number Publication date
JP2022542998A (ja) 2022-10-07
US11138116B2 (en) 2021-10-05
US20210034526A1 (en) 2021-02-04
WO2021021946A1 (en) 2021-02-04
US20220027273A1 (en) 2022-01-27
US11693777B2 (en) 2023-07-04
EP4004753B1 (en) 2023-12-13
EP4004753A1 (en) 2022-06-01
CN114175005A (zh) 2022-03-11

Similar Documents

Publication Publication Date Title
US11693777B2 (en) Network interface device supporting multiple interface instances to a common bus
US7496699B2 (en) DMA descriptor queue read and cache write pointer arrangement
US8352689B2 (en) Command tag checking in a multi-initiator media controller architecture
US8051212B2 (en) Network interface adapter with shared data send resources
US8850098B2 (en) Direct memory access (DMA) address translation between peer input/output (I/O) devices
US7472205B2 (en) Communication control apparatus which has descriptor cache controller that builds list of descriptors
US8909727B2 (en) RDMA read destination buffers mapped onto a single representation
US9736116B2 (en) Cooperated approach to network packet filtering
US20140331221A1 (en) Cooperated approach to network packet filtering
US10659555B2 (en) Network interface device and host processing device
US10097658B2 (en) Traffic control of packet transfer
US11429438B2 (en) Network interface device and host processing device
US10802828B1 (en) Instruction memory
US8966149B2 (en) Emulation of an input/output advanced programmable interrupt controller
US11899969B1 (en) Re-order buffer for in-order execution of dependent write transactions
JPWO2021021946A5 (ko)
Dittia et al. DMA Mechanisms for High Performance Network Interfaces