JP2022542998A - ホストコンピューティングデバイスおよびネットワークインターフェースデバイスを備えるプログラマブルネットワークインターフェースデバイス - Google Patents
ホストコンピューティングデバイスおよびネットワークインターフェースデバイスを備えるプログラマブルネットワークインターフェースデバイス Download PDFInfo
- Publication number
- JP2022542998A JP2022542998A JP2022506252A JP2022506252A JP2022542998A JP 2022542998 A JP2022542998 A JP 2022542998A JP 2022506252 A JP2022506252 A JP 2022506252A JP 2022506252 A JP2022506252 A JP 2022506252A JP 2022542998 A JP2022542998 A JP 2022542998A
- Authority
- JP
- Japan
- Prior art keywords
- interface
- network interface
- programmable
- different
- network
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/382—Information transfer, e.g. on bus using universal interface adapter
- G06F13/385—Information transfer, e.g. on bus using universal interface adapter for adaptation of a particular data processing system to different peripheral devices
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/36—Handling requests for interconnection or transfer for access to common bus or bus system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0815—Cache consistency protocols
- G06F12/0831—Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means
- G06F12/0835—Cache 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)
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0888—Addressing 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/10—Program control for peripheral devices
- G06F13/12—Program control for peripheral devices using hardware independent of the central processor, e.g. channel or peripheral processor
- G06F13/124—Program 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/128—Program 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/20—Handling requests for interconnection or transfer for access to input/output bus
- G06F13/28—Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/382—Information transfer, e.g. on bus using universal interface adapter
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/42—Bus transfer protocol, e.g. handshake; Synchronisation
- G06F13/4282—Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3802—Instruction prefetching
Abstract
ネットワークインターフェースデバイス(102)は、ネットワークインターフェースデバイス(102)とホストデバイス(101)との間の少なくとも1つのバスをデバイスインターフェースに提供するように構成されているプログラマブルインターフェース(119)を備える。プログラマブルインターフェース(119)は、複数の異なるタイプのデバイスインターフェースをサポートするようにプログラム可能である。
Description
優先権主張
本出願は、2019年7月29日に出願された米国非仮特許出願第16/525,313号の利益を主張する。
本出願は、2019年7月29日に出願された米国非仮特許出願第16/525,313号の利益を主張する。
分野
本出願は、ネットワークインターフェースデバイス、ホストコンピューティングデバイスおよびネットワークインターフェースデバイスを備えるシステム、方法ならびにコンピュータプログラムに関する。
本出願は、ネットワークインターフェースデバイス、ホストコンピューティングデバイスおよびネットワークインターフェースデバイスを備えるシステム、方法ならびにコンピュータプログラムに関する。
背景
ネットワークインターフェースデバイスが既知であり、典型的には、コンピューティングデバイスとネットワークとの間のインターフェースを提供するために使用される。ネットワークインターフェースデバイスは、ネットワークから受信されるデータを処理し、および/またはネットワーク上に置かれるデータを処理するように構成することができる。
ネットワークインターフェースデバイスが既知であり、典型的には、コンピューティングデバイスとネットワークとの間のインターフェースを提供するために使用される。ネットワークインターフェースデバイスは、ネットワークから受信されるデータを処理し、および/またはネットワーク上に置かれるデータを処理するように構成することができる。
概要
一態様によれば、ネットワークインターフェースデバイスであって、ネットワークインターフェースデバイスとホストデバイスとの間の少なくとも1つのバスによるデバイスインターフェースを提供するように構成されているプログラマブルインターフェースを備え、プログラマブルインターフェースは、複数の異なるタイプのデバイスインターフェースをサポートするようにプログラム可能である、ネットワークインターフェースデバイスが提供される。
一態様によれば、ネットワークインターフェースデバイスであって、ネットワークインターフェースデバイスとホストデバイスとの間の少なくとも1つのバスによるデバイスインターフェースを提供するように構成されているプログラマブルインターフェースを備え、プログラマブルインターフェースは、複数の異なるタイプのデバイスインターフェースをサポートするようにプログラム可能である、ネットワークインターフェースデバイスが提供される。
プログラマブルインターフェースは、デバイスインターフェースの少なくとも2つのインスタンスを同時にサポートするように構成することができる。
プログラマブルインターフェースは、共通ディスクリプタキャッシュを備えることができ、上記共通ディスクリプタキャッシュは、複数のデバイスインターフェースインスタンスのトランザクションのそれぞれのエントリを記憶するように構成される。
上記共通ディスクリプタキャッシュ内のエントリは、ポインタ情報、アダプタインスタンスおよび/もしくは不透明エンドポイントインデックス、またはメタデータのうちの1つ以上を含むことができる。
ポインタ情報は、ポインタ、ポインタのブロック、ポインタの連結リスト、またはトライを含むことができる。
メタデータは、ポインタがポインタであるか、データ位置へのポイントであるか、またはさらなるポインタへのポインタであるかの指示、上記エントリの少なくとも一部分と関連付けられるサイズ、上記エントリと関連付けられるアダプタの指示、1つ以上のキューの指示、および1つ以上のキュー内の位置の指示のうちの1つ以上を含むことができる。
共通ディスクリプタキャッシュは、異なるデバイスインターフェースインスタンスと関連付けられる異なるパーティションによって少なくとも部分的に区分化することができる。
共通ディスクリプタキャッシュは、異なるデバイスインターフェースインスタンス間で共有することができる。
共通ディスクリプタキャッシュは、各デバイスインターフェースインスタンスに保証されたキャッシュ予約を提供することができる。
共通ディスクリプタキャッシュは、デバイスインターフェースのエンドポイントインスタンスに保証された数のディスクリプタを提供することができる。エンドポイントインスタンスはキューであってもよい。
共通ディスクリプタキャッシュは、1つ以上のデバイスインターフェースインスタンスの1つ以上のディスクリプタをプリフェッチするように構成することができる。
共通ディスクリプタキャッシュは、それぞれのデバイスインターフェースと関連付けられるドアベルのドアベル処理、またはそれぞれのデバイスインターフェースと関連付けられるデータの到来のうちの1つ以上に応答して、1つ以上のデバイスインターフェースの1つ以上のディスクリプタをプリフェッチするように構成することができる。
プログラマブルインターフェースは、複数の異なるデバイスインターフェースインスタンスのために上記少なくともバスへのアクセスをスケジュールするように構成されているスケジューラを備えることができる。
プログラマブルインターフェースは、各デバイスインターフェースインスタンスに、それぞれのデバイスインターフェースアダプタを提供するように構成することができる。
それぞれのデバイスインターフェースアダプタは、DMAエンジンを備えることができる。
プログラマブルインターフェースは、上記少なくとも2つのデバイスインターフェースインスタンスによって共有されるDMAエンジンを提供するように構成することができる。
プログラマブルインターフェースは、上記少なくとも2つのデバイスインターフェースインスタンスによって共有されるドアベル機能を提供するように構成することができる。
プログラマブルインターフェースは、上記少なくとも2つのデバイスインターフェースインスタンスによって共有されるアドレス変換サービスを提供するように構成することができる。
上記複数のタイプのデバイスインターフェースのうちの少なくとも2つを、異なるキュー構造タイプに関連付けることができる。
上記複数のタイプのデバイスインターフェースのうちの少なくとも2つは、1つ以上の異なるセマンティクスまたはコマンドに関連付けることができる。
複数のタイプのデバイスインターフェースは、RDMAまたはVirtioまたはNVMeデバイスインターフェースのうちの1つ以上を含むことができる。
プログラマブルインターフェースは、上記少なくとも1つのバスの1つ以上の異なるバスプロトコルをサポートするように構成することができる。
1つ以上の異なるバスプロトコルは、PCIeバス、AXI)バス、CCIXバス、CAPIバス、OPEN CAPIバスのうちの1つ以上を含んでもよい。
プログラマブルインターフェースは、上記異なるタイプのデバイスインターフェースのうちの1つ以上をサポートするようにプログラム可能な1つ以上のテンプレート機能を備えることができる。
上記ネットワークインターフェースデバイスが動作している間、上記プログラマブルインターフェースは、少なくとも1つのデバイスインターフェースインスタンスを除去するように構成することができる。
上記ネットワークインターフェースデバイスが動作している間、上記プログラマブルインターフェースは、少なくとも1つのデバイスインターフェースインスタンスを追加するように構成することができる。
上記ネットワークインターフェースデバイスが動作している間、上記プログラマブルインターフェースは、少なくとも1つのデバイスインターフェースインスタンスから少なくとも1つの他のデバイスインターフェースインスタンスに切り替えるように構成することができる。
ネットワークインターフェースデバイスは、上記ネットワークインターフェースデバイスのプログラミングを制御するように構成されているプログラム情報を受信するように構成することができる。
プログラム情報は、上記ホストデバイスまたはネットワークのうちの一方から受信することができる。
プログラム情報は、ファームウェア、RTLコード、HLSコード、または命令シーケンスのうちの1つ以上を含むことができる。
別の態様によれば、ネットワークインターフェースデバイスは、ネットワークインターフェースデバイスとホストデバイスとの間の少なくとも1つのバスによるデバイスインターフェースを提供するように構成されているプログラマブルインターフェースを備え、プログラマブルインターフェースは、複数の異なるインスタンスのデバイスインターフェースをサポートするようにプログラム可能である。
任意の他の態様の特徴のいずれも、個別に、またはこの態様のネットワークインターフェースデバイスと組み合わせて使用することができることを理解されたい。
別の態様によれば、データ処理システムであって、ホストデバイスと、ネットワークインターフェースデバイスであり、ネットワークインターフェースデバイスとホストデバイスとの間の少なくとも1つのバスによるデバイスインターフェースを提供するように構成されているプログラマブルインターフェースを備え、プログラマブルインターフェースは、複数の異なるタイプのデバイスインターフェースをサポートするようにプログラム可能である、ネットワークインターフェースデバイスとを備える、データ処理システムが提供される。
プログラマブルインターフェースは、デバイスインターフェースの少なくとも2つのインスタンスを同時にサポートするように構成することができる。
プログラマブルインターフェースは、共通ディスクリプタキャッシュを備えることができ、上記共通ディスクリプタキャッシュは、複数のデバイスインターフェースインスタンスのトランザクションのそれぞれのエントリを記憶するように構成される。
上記共通ディスクリプタキャッシュ内のエントリは、ポインタ情報、アダプタインスタンスおよび/もしくは不透明エンドポイントインデックス、またはメタデータのうちの1つ以上を含むことができる。
ポインタ情報は、ポインタ、ポインタのブロック、ポインタの連結リスト、またはトライを含むことができる。
メタデータは、上記ポインタがポインタであるか、データ位置へのポイントであるか、またはさらなるポインタへのポインタであるかの指示、上記エントリの少なくとも一部分と関連付けられるサイズ、上記エントリと関連付けられるアダプタの指示、1つ以上のキューの指示、および1つ以上のキュー内の位置のうちの1つ以上を含むことができる。
共通ディスクリプタキャッシュは、異なるデバイスインターフェースインスタンスと関連付けられる異なるパーティションによって少なくとも部分的に区分化することができる。
共通ディスクリプタキャッシュは、異なるデバイスインターフェースインスタンス間で共有することができる。
共通ディスクリプタキャッシュは、各デバイスインターフェースインスタンスに保証されたキャッシュ予約を提供することができる。
共通ディスクリプタキャッシュは、デバイスインターフェースのエンドポイントインスタンスに保証された数のディスクリプタを提供されることができる。エンドポイントインスタンスはキューであってもよい。
共通ディスクリプタキャッシュは、1つ以上のデバイスインターフェースの1つ以上のディスクリプタをプリフェッチするように構成することができる。
共通ディスクリプタキャッシュは、それぞれのデバイスインターフェースと関連付けられるドアベルのドアベル処理、またはそれぞれのデバイスインターフェースと関連付けられるデータの到来のうちの1つ以上に応答して、1つ以上のデバイスインターフェースの1つ以上のディスクリプタをプリフェッチするように構成することができる。
プログラマブルインターフェースは、複数の異なるデバイスインターフェースインスタンスのために上記少なくともバスへのアクセスをスケジュールするように構成されているスケジューラを備えることができる。
プログラマブルインターフェースは、各デバイスインターフェースインスタンスに、それぞれのデバイスインターフェースアダプタを提供するように構成することができる。
それぞれのデバイスインターフェースアダプタは、DMAエンジンを備えることができる。
プログラマブルインターフェースは、上記少なくとも2つのデバイスインターフェースインスタンスによって共有されるDMAエンジンを提供するように構成することができる。
プログラマブルインターフェースは、上記少なくとも2つのデバイスインターフェースインスタンスによって共有されるドアベル機能を提供するように構成することができる。
ホストデバイスは、少なくとも1つのプロセッサおよび少なくとも1つのメモリを備えることができ、上記メモリは、1つ以上のプログラムのコンピュータコードを含む。
少なくとも1つのメモリおよびコンピュータコードは、少なくとも1つのプロセッサを用いて、ホストコンピューティングデバイスに、少なくとも上記ドアベル機能に少なくとも1つのドアベルを書き込ませるように構成することができる。
プログラマブルインターフェースは、上記少なくとも2つのデバイスインターフェースインスタンスによって共有されるアドレス変換サービスを提供するように構成することができる。
上記複数のタイプのデバイスインターフェースのうちの少なくとも2つを、異なるキュー構造タイプに関連付けることができる。
少なくとも1つのメモリおよびコンピュータコードは、少なくとも1つのプロセッサを用いて、ホストコンピューティングデバイスに、1つ以上のデバイスインターフェースインスタンスの1つ以上のキューを提供させるように構成することができる。
上記複数のタイプのデバイスインターフェースのうちの少なくとも2つは、1つ以上の異なるセマンティクスまたはコマンドに関連付けることができる。
複数のタイプのデバイスインターフェースは、RDMAまたはVirtioまたはNVMeデバイスインターフェースのうちの1つ以上を含むことができる。
プログラマブルインターフェースは、上記少なくとも1つのバスの1つ以上の異なるバスプロトコルをサポートするように構成することができる。
1つ以上の異なるバスプロトコルは、PCIeバス、AXI)バス、CCIXバス、CAPIバス、OPEN CAPIバスのうちの1つ以上を含んでもよい。
プログラマブルインターフェースは、上記異なるタイプのデバイスインターフェースのうちの1つ以上をサポートするようにプログラム可能な1つ以上のテンプレート機能を備えることができる。
上記ネットワークインターフェースデバイスが動作している間、上記プログラマブルインターフェースは、少なくとも1つのデバイスインターフェースインスタンスを除去するように構成することができる。
上記ネットワークインターフェースデバイスが動作している間、上記プログラマブルインターフェースは、少なくとも1つのデバイスインターフェースインスタンスを追加するように構成することができる。
上記ネットワークインターフェースデバイスが動作している間、上記プログラマブルインターフェースは、少なくとも1つのデバイスインターフェースインスタンスから少なくとも1つの他のデバイスインターフェースインスタンスに切り替えるように構成することができる。
ネットワークインターフェースデバイスは、上記ネットワークインターフェースデバイスのプログラミングを制御するように構成されているプログラム情報を受信するように構成することができる。
プログラム情報は、上記ホストデバイスまたはネットワークのうちの一方から受信することができる。
プログラム情報は、ファームウェア、RTLコード、HLSコード、または命令シーケンスのうちの1つ以上を含むことができる。
別の態様によれば、データ処理システムであって、ホストデバイスと、ネットワークインターフェースデバイスであり、ネットワークインターフェースデバイスとホストデバイスとの間の少なくとも1つのバスによるデバイスインターフェースを提供するように構成されているプログラマブルインターフェースを備え、プログラマブルインターフェースは、複数の異なるインスタンスのデバイスインターフェースをサポートするようにプログラム可能である、ネットワークインターフェースデバイスとを備える、データ処理システムが提供される。
任意の他の態様の特徴のいずれも、個別に、またはこの態様のデータ処理システムと組み合わせて使用することができることを理解されたい。
一態様によれば、方法であって、ネットワークインターフェースデバイスのプログラマブルインターフェースを、ネットワークインターフェースデバイスとホストデバイスとの間の少なくとも1つのバスによるデバイスインターフェースを提供するようにプログラムするステップを含み、プログラマブルインターフェースは、複数の異なるタイプのデバイスインターフェースをサポートするようにプログラム可能である、方法が提供される。
本方法は、上記プログラマブルインターフェースを、デバイスインターフェースの少なくとも2つのインスタンスを同時にサポートするようにプログラムするステップを含むことができる。
プログラマブルインターフェースは、共通ディスクリプタキャッシュを備えることができ、上記共通ディスクリプタキャッシュは、複数のデバイスインターフェースインスタンスのトランザクションのそれぞれのエントリを記憶するように構成される。
上記共通ディスクリプタキャッシュ内のエントリは、ポインタ情報、アダプタインスタンスおよび/もしくは不透明エンドポイントインデックス、またはメタデータのうちの1つ以上を含むことができる。
ポインタ情報は、ポインタ、ポインタのブロック、ポインタの連結リスト、またはトライを含むことができる。
メタデータは、上記ポインタがポインタであるか、データ位置へのポイントであるか、またはさらなるポインタへのポインタであるかの指示、上記エントリの少なくとも一部分と関連付けられるサイズ、上記エントリと関連付けられるアダプタの指示、1つ以上のキューの指示、および1つ以上のキュー内の位置のうちの1つ以上を含むことができる。
本方法は、上記共通ディスクリプタキャッシュが、異なるデバイスインターフェースインスタンスと関連付けられる異なるパーティションによって少なくとも部分的に区分化されるようにするステップを含むことができる。
本方法は、上記共通ディスクリプタキャッシュが、異なるデバイスインターフェースインスタンス間で共有されるようにするステップを含むことができる。
本方法は、上記共通ディスクリプタキャッシュに、各デバイスインターフェースインスタンスに保証されたキャッシュ予約を提供させるステップを含むことができる。
本方法は、上記共通ディスクリプタキャッシュに、デバイスインターフェースのエンドポイントインスタンスに保証された数のディスクリプタを提供させるステップを含むことができる。エンドポイントインスタンスはキューであってもよい。
本方法は、上記共通ディスクリプタキャッシュに、1つ以上のデバイスインターフェースの1つ以上のディスクリプタをプリフェッチさせるステップを含むことができる。
本方法は、上記共通ディスクリプタキャッシュに、それぞれのデバイスインターフェースと関連付けられるドアベルのドアベル処理、またはそれぞれのデバイスインターフェースと関連付けられるデータの到来のうちの1つ以上に応答して、1つ以上のデバイスインターフェースの1つ以上のディスクリプタをプリフェッチさせるステップを含むことができる。
プログラマブルインターフェースは、複数の異なるデバイスインターフェースインスタンスのために上記少なくともバスへのアクセスをスケジュールするように構成されているスケジューラを備えることができる。
本方法は、プログラマブルインターフェースに、各デバイスインターフェースインスタンスに、それぞれのデバイスインターフェースアダプタを提供させるステップを含むことができる。
それぞれのデバイスインターフェースアダプタは、DMAエンジンを備えることができる。
プログラマブルインターフェースは、上記少なくとも2つのデバイスインターフェースインスタンスによって共有されるDMAエンジンを含むことができる。
プログラマブルインターフェースは、上記少なくとも2つのデバイスインターフェースインスタンスによって共有されるドアベル機能を含むことができる。
プログラマブルインターフェースは、上記少なくとも2つのデバイスインターフェースインスタンスによって共有されるアドレス変換サービスを提供するように構成することができる。
本方法は、プログラマブルインターフェースに、それぞれの異なるデバイスインターフェースと関連付けられる複数の異なるキュー構造タイプをサポートさせるステップを含むことができる。
本方法は、プログラマブルインターフェースに、それぞれの異なるデバイスインターフェースと関連付けられる複数の異なるセマンティクスまたはコマンドをサポートさせるステップを含むことができる。
複数のタイプのデバイスインターフェースは、RDMAまたはVirtioまたはNVMeデバイスインターフェースのうちの1つ以上を含むことができる。
本方法は、プログラマブルインターフェースに、上記少なくとも1つのバスの複数の異なるバスプロトコルをサポートさせるステップを含むことができる。
1つ以上の異なるバスプロトコルは、PCIeバス、AXI)バス、CCIXバス、CAPIバス、OPEN CAPIバスのうちの1つ以上を含んでもよい。
本方法は、プログラマブルインターフェースの1つ以上のテンプレート機能が、上記異なるタイプのデバイスインターフェースのうちの1つ以上をサポートするようにプログラムされるようにするステップを含むことができる。
本方法は、上記ネットワークインターフェースデバイスが動作している間、少なくとも1つのデバイスインターフェースインスタンスが除去されるようにするステップを含むことができる。
本方法は、上記ネットワークインターフェースデバイスが動作している間、少なくとも1つのデバイスインターフェースインスタンスが追加されるようにするステップを含むことができる。
本方法は、上記ネットワークインターフェースデバイスが動作している間、少なくとも1つのデバイスインターフェースインスタンスが、少なくとも1つの他のデバイスインターフェースインスタンスに切り替えられるようにするステップを含むことができる。
本方法は、上記ネットワークインターフェースデバイスのプログラミングを制御するように構成されているプログラム情報を受信するステップを含むことができる。
本方法は、上記ホストデバイスまたはネットワークのうちの一方からプログラム情報を受信するステップを含むことができる。
プログラム情報は、ファームウェア、RTLコード、HLSコード、または命令シーケンスのうちの1つ以上を含むことができる。
別の態様によれば、データ処理システムであって、ネットワークインターフェースデバイスと、ホストコンピューティングデバイスであり、少なくとも1つのプロセッサおよび少なくとも1つのメモリを備え、上記メモリは1つ以上のプログラムのコンピュータコードを含み、少なくとも1つのメモリおよびコンピュータコードは、少なくとも1つのプロセッサを用いて、ホストコンピューティングデバイスに、上記ネットワークインターフェースデバイスに関連してデバイスインターフェースを定義するプログラムを少なくともコンパイルさせるように構成されており、上記コンパイルされたプログラムは、上記ホストコンピューティングデバイスにインストールされて、上記デバイスインターフェースのホストインターフェースを定義し、上記ネットワークインターフェースデバイスにインストールされて、対応するデバイスインターフェースを定義する、ホストコンピューティングデバイスとを備える、データ処理システムが提供される。
プログラムは、高レベルプログラムを含んでもよい。
コンパイルされたプログラムは、上記対応するデバイスインターフェースを定義するためのファームウェア、HLSコードまたはRTLコードを提供することができる。
コンパイルされたプログラムは、上記対応するデバイスインターフェースを定義するためのファームウェア、HLSコードまたはRTLコードを提供することができる。
コンパイルされたプログラムは、上記デバイスドライバの少なくとも一部分を定義する中間レベルプログラムを提供することができ、上記ホストコンピューティングデバイスは、上記中間レベルプログラムの少なくとも一部分をホストコンピューティングデバイスのカーネルに挿入することができることを判定するように構成されている。
ホストインターフェースは、デバイスドライバを含んでもよい。
ホストインターフェースは、動的にロードされるプログラムを含むことができる。
ホストインターフェースは、動的にロードされるプログラムを含むことができる。
ホストインターフェースは、実行について検証されるか、サンドボックスコードとして提供されるか、またはバイトコードとして提供されるかのうちの少なくとも1つであってもよい。
ネットワークインターフェースデバイスは前述の通りであってもよい。
ネットワークインターフェースデバイスは、ネットワークインターフェースデバイスとホストデバイスとの間の少なくとも1つのバスによるデバイスインターフェースを提供するように構成されているプログラマブルインターフェースを備えることができ、プログラマブルインターフェースは、複数の異なるタイプのデバイスインターフェースをサポートするようにプログラム可能である。コンパイルされたプログラムは、プログラマブルインターフェースにインストールすることができる。
ネットワークインターフェースデバイスは、ネットワークインターフェースデバイスとホストデバイスとの間の少なくとも1つのバスによるデバイスインターフェースを提供するように構成されているプログラマブルインターフェースを備えることができ、プログラマブルインターフェースは、複数の異なるタイプのデバイスインターフェースをサポートするようにプログラム可能である。コンパイルされたプログラムは、プログラマブルインターフェースにインストールすることができる。
プログラマブルインターフェースは、少なくとも2つのデバイスインターフェースインスタンスを同時にサポートするように構成することができる。
プログラマブルインターフェースは、共通ディスクリプタキャッシュを備えることができ、上記共通ディスクリプタキャッシュは、複数のデバイスインターフェースインスタンスのトランザクションのそれぞれのエントリを記憶するように構成される。
上記共通ディスクリプタキャッシュ内のエントリは、ポインタ情報、アダプタインスタンスおよび/もしくは不透明エンドポイントインデックス、またはメタデータのうちの1つ以上を含むことができる。
ポインタ情報は、ポインタ、ポインタのブロック、ポインタの連結リスト、またはトライを含むことができる。
メタデータは、上記ポインタがポインタであるか、データ位置へのポイントであるか、またはさらなるポインタへのポインタであるかの指示、上記エントリの少なくとも一部分と関連付けられるサイズ、上記エントリと関連付けられるアダプタの指示、1つ以上のキューの指示、および1つ以上のキュー内の位置のうちの1つ以上を含むことができる。
共通ディスクリプタキャッシュは、異なるデバイスインターフェースインスタンスと関連付けられる異なるパーティションによって少なくとも部分的に区分化することができる。
共通ディスクリプタキャッシュは、異なるデバイスインターフェースインスタンス間で共有することができる。
共通ディスクリプタキャッシュは、各デバイスインターフェースインスタンスに保証されたキャッシュ予約を提供することができる。
共通ディスクリプタキャッシュは、デバイスインターフェースのエンドポイントインスタンスに保証された数のディスクリプタを提供することができる。エンドポイントインスタンスはキューであってもよい。
共通ディスクリプタキャッシュは、1つ以上のデバイスインターフェースの1つ以上のディスクリプタをプリフェッチするように構成することができる。
共通ディスクリプタキャッシュは、それぞれのデバイスインターフェースと関連付けられるドアベルのドアベル処理、またはそれぞれのデバイスインターフェースと関連付けられるデータの到来のうちの1つ以上に応答して、1つ以上のデバイスインターフェースの1つ以上のディスクリプタをプリフェッチするように構成することができる。
プログラマブルインターフェースは、複数の異なるデバイスインターフェースインスタンスのために上記少なくともバスへのアクセスをスケジュールするように構成されているスケジューラを備えることができる。
プログラマブルインターフェースは、各デバイスインターフェースインスタンスに、それぞれのデバイスインターフェースアダプタを提供するように構成することができる。
それぞれのデバイスインターフェースアダプタは、DMAエンジンを備えることができる。
プログラマブルインターフェースは、上記少なくとも2つのデバイスインターフェースインスタンスによって共有されるDMAエンジンを提供するように構成することができる。
プログラマブルインターフェースは、上記少なくとも2つのデバイスインターフェースインスタンスによって共有されるドアベル機能を提供するように構成することができる。
ホストデバイスは、少なくとも1つのプロセッサおよび少なくとも1つのメモリを備えることができ、上記メモリは、1つ以上のプログラムのコンピュータコードを含む。
少なくとも1つのメモリおよびコンピュータコードは、少なくとも1つのプロセッサを用いて、ホストコンピューティングデバイスに、少なくとも上記ドアベル機能に少なくとも1つのドアベルを書き込ませるように構成することができる。
プログラマブルインターフェースは、上記少なくとも2つのデバイスインターフェースインスタンスによって共有されるアドレス変換サービスを提供するように構成することができる。
上記複数のタイプのデバイスインターフェースのうちの少なくとも2つを、異なるキュー構造タイプに関連付けることができる。
少なくとも1つのメモリおよびコンピュータコードは、少なくとも1つのプロセッサを用いて、ホストコンピューティングデバイスに、1つ以上のデバイスインターフェースインスタンスの1つ以上のキューを提供させるように構成することができる。
上記複数のタイプのデバイスインターフェースのうちの少なくとも2つは、1つ以上の異なるセマンティクスまたはコマンドに関連付けることができる。
複数のタイプのデバイスインターフェースは、RDMAまたはVirtioまたはNVMeデバイスインターフェースのうちの1つ以上を含むことができる。
プログラマブルインターフェースは、上記少なくとも1つのバスの1つ以上の異なるバスプロトコルをサポートするように構成することができる。
1つ以上の異なるバスプロトコルは、PCIeバス、AXI)バス、CCIXバス、CAPIバス、OPEN CAPIバスのうちの1つ以上を含んでもよい。
プログラマブルインターフェースは、上記異なるタイプのデバイスインターフェースのうちの1つ以上をサポートするようにプログラム可能な1つ以上のテンプレート機能を備えることができる。
上記ネットワークインターフェースデバイスが動作している間、上記プログラマブルインターフェースは、少なくとも1つのデバイスインターフェースインスタンスを除去するように構成することができる。
上記ネットワークインターフェースデバイスが動作している間、上記プログラマブルインターフェースは、少なくとも1つのデバイスインターフェースインスタンスを追加するように構成することができる。
上記ネットワークインターフェースデバイスが動作している間、上記プログラマブルインターフェースは、少なくとも1つのデバイスインターフェースインスタンスから少なくとも1つの他のデバイスインターフェースインスタンスに切り替えるように構成することができる。
別の態様によれば、方法であって、ホストコンピューティングデバイスに、ネットワークインターフェースデバイスに関連してデバイスインターフェースを定義するプログラムをコンパイルさせるステップであり、上記コンパイルされたプログラムは、上記ホストコンピューティングデバイスにインストールされて、上記デバイスインターフェースのホストインターフェースを定義し、上記ネットワークインターフェースデバイスにインストールされて、対応するデバイスインターフェースを定義する、コンパイルさせるステップを含む、方法が提供される。
プログラムは、高レベルプログラムを含んでもよい。
コンパイルされたプログラムは、上記対応するデバイスインターフェースを定義するためのファームウェア、HLSコードまたはRTLコードを提供することができる。
コンパイルされたプログラムは、上記対応するデバイスインターフェースを定義するためのファームウェア、HLSコードまたはRTLコードを提供することができる。
コンパイルされたプログラムは、上記デバイスドライバの少なくとも一部分を定義する中間レベルプログラムを提供することができ、本方法は、上記中間レベルプログラムの少なくとも一部分をホストコンピューティングデバイスのカーネルに挿入することができることを判定するステップを含む。
ホストインターフェースは、デバイスドライバを含んでもよい。
ホストインターフェースは、動的にロードされるプログラムを含むことができる。
ホストインターフェースは、動的にロードされるプログラムを含むことができる。
ホストインターフェースは、実行について検証されるか、サンドボックスコードとして提供されるか、またはバイトコードとして提供されるかのうちの少なくとも1つであってもよい。
ネットワークインターフェースデバイスは前述の通りであってもよい。
本方法は、上記コンパイルされたプログラムを上記ネットワークインターフェースデバイスのプログラマブルインターフェースにインストールするステップを含むことができ、上記プログラマブルインターフェースは、複数の異なるタイプのデバイスインターフェースをサポートするようにプログラム可能である。
本方法は、上記コンパイルされたプログラムを上記ネットワークインターフェースデバイスのプログラマブルインターフェースにインストールするステップを含むことができ、上記プログラマブルインターフェースは、複数の異なるタイプのデバイスインターフェースをサポートするようにプログラム可能である。
本方法は、上記プログラマブルインターフェースを、デバイスインターフェースの少なくとも2つのインスタンスを同時にサポートするようにプログラムするステップを含むことができる。
プログラマブルインターフェースは、共通ディスクリプタキャッシュを備えることができ、上記共通ディスクリプタキャッシュは、複数のデバイスインターフェースインスタンスのトランザクションのそれぞれのエントリを記憶するように構成される。
上記共通ディスクリプタキャッシュ内のエントリは、ポインタ情報、アダプタインスタンスおよび/もしくは不透明エンドポイントインデックス、またはメタデータのうちの1つ以上を含むことができる。
ポインタ情報は、ポインタ、ポインタのブロック、ポインタの連結リスト、またはトライを含むことができる。
メタデータは、上記ポインタがポインタであるか、データ位置へのポイントであるか、またはさらなるポインタへのポインタであるかの指示、上記エントリの少なくとも一部分と関連付けられるサイズ、上記エントリと関連付けられるアダプタの指示、1つ以上のキューの指示、および1つ以上のキュー内の位置のうちの1つ以上を含むことができる。
本方法は、上記共通ディスクリプタキャッシュが、異なるインスタンスのデバイスインターフェースと関連付けられる異なるパーティションによって少なくとも部分的に区分化されるようにするステップを含むことができる。
本方法は、上記共通ディスクリプタキャッシュが、異なるデバイスインターフェースインスタンス間で共有されるようにするステップを含むことができる。
本方法は、上記共通ディスクリプタキャッシュに、各デバイスインターフェースインスタンスに保証されたキャッシュ予約を提供させるステップを含むことができる。
本方法は、上記共通ディスクリプタキャッシュに、デバイスインターフェースのエンドポイントインスタンスに保証された数のディスクリプタを提供させるステップを含むことができる。エンドポイントインスタンスはキューであってもよい。
本方法は、上記共通ディスクリプタキャッシュに、1つ以上のデバイスインターフェースの1つ以上のディスクリプタをプリフェッチさせるステップを含むことができる。
本方法は、上記共通ディスクリプタキャッシュに、それぞれのデバイスインターフェースと関連付けられるドアベルのドアベル処理、またはそれぞれのデバイスインターフェースと関連付けられるデータの到来のうちの1つ以上に応答して、1つ以上のデバイスインターフェースの1つ以上のディスクリプタをプリフェッチさせるステップを含むことができる。
プログラマブルインターフェースは、複数の異なるデバイスインターフェースインスタンスのために上記少なくともバスへのアクセスをスケジュールするように構成されているスケジューラを備えることができる。
本方法は、プログラマブルインターフェースに、デバイスインターフェースの各インスタンスに、それぞれのデバイスインターフェースアダプタを提供させるステップを含むことができる。
それぞれのデバイスインターフェースアダプタは、DMAエンジンを備えることができる。
プログラマブルインターフェースは、上記少なくとも2つのインスタンスのデバイスインターフェースによって共有されるDMAエンジンを提供するように構成することができる。
プログラマブルインターフェースは、上記少なくとも2つのデバイスインターフェースインスタンスによって共有されるドアベル機能を提供するように構成することができる。
ホストデバイスは、少なくとも1つのプロセッサおよび少なくとも1つのメモリを備えることができ、上記メモリは、1つ以上のプログラムのコンピュータコードを含む。
少なくとも1つのメモリおよびコンピュータコードは、少なくとも1つのプロセッサを用いて、ホストコンピューティングデバイスに、少なくとも上記ドアベル機能に少なくとも1つのドアベルを書き込ませるように構成することができる。
プログラマブルインターフェースは、上記少なくとも2つのデバイスインターフェースインスタンスによって共有されるアドレス変換サービスを提供するように構成することができる。
本方法は、プログラマブルインターフェースに、それぞれの異なるデバイスインターフェースと関連付けられる複数の異なるキュー構造タイプをサポートさせるステップを含むことができる。
本方法は、ホストインターフェースに、1つ以上のデバイスインターフェースインスタンスの1つ以上のキューを提供させるステップを含むことができる。
本方法は、プログラマブルインターフェースに、それぞれの異なるデバイスインターフェースと関連付けられる複数の異なるセマンティクスまたはコマンドをサポートさせるステップを含むことができる。
複数のタイプのデバイスインターフェースは、RDMAまたはVirtioまたはNVMeデバイスインターフェースのうちの1つ以上を含むことができる。
本方法は、プログラマブルインターフェースに、上記少なくとも1つのバスの複数の異なるバスプロトコルをサポートさせるステップを含むことができる。
1つ以上の異なるバスプロトコルは、PCIeバス、AXI)バス、CCIXバス、CAPIバス、OPEN CAPIバスのうちの1つ以上を含んでもよい。
本方法は、コンパイルされたプログラムを使用して、それぞれのデバイスインターフェースをサポートするように、プログラマブルインターフェースの1つ以上のテンプレート機能をプログラムするステップを含むことができる。
本方法は、上記ネットワークインターフェースデバイスが動作している間、少なくとも1つのデバイスインターフェースインスタンスが除去されるようにするステップを含むことができる。
本方法は、上記ネットワークインターフェースデバイスが動作している間、少なくとも1つのデバイスインターフェースインスタンスが追加されるようにするステップを含むことができる。
本方法は、上記ネットワークインターフェースデバイスが動作している間、少なくとも1つのデバイスインターフェースインスタンスが、少なくとも1つの他のデバイスインターフェースインスタンスに切り替えられるようにするステップを含むことができる。
別の態様によれば、命令によって符号化された非一時的コンピュータ可読媒体であって、命令は、少なくとも1つのプロセッサ上で実行されると、少なくとも1つのプロセッサが前述の方法のいずれかのステップを実行することを可能にする、非一時的コンピュータ可読媒体が提供される。
別の態様では、コンピュータプログラム製品は、実行されると上記の方法のいずれかを提供するように構成されているコンピュータ実行可能コードを含む。
方法(複数可)を実行するように適合されたプログラムコード手段を含むコンピュータプログラムも提供され得る。コンピュータプログラムは、キャリア媒体によって記憶および/または他の方法で具現化されてもよい。
以上、多くの異なる実施形態について説明した。さらなる実施形態が、上述の実施形態のうちの任意の2つ以上の組み合わせによって提供されてもよいことを理解されたい。
図面の簡単な説明
ここで、いくつかの実施形態を、添付の図面を参照して単なる例として説明する。
ここで、いくつかの実施形態を、添付の図面を参照して単なる例として説明する。
詳細な説明
以下の説明は、当業者が本発明を作成および使用することを可能にするために提示され、特定の用途の文脈で提供される。開示された実施形態に対する様々な変更は、当業者には容易に明らかであろう。
以下の説明は、当業者が本発明を作成および使用することを可能にするために提示され、特定の用途の文脈で提供される。開示された実施形態に対する様々な変更は、当業者には容易に明らかであろう。
本明細書で定義される一般的な原理は、本発明の思想および範囲から逸脱することなく、他の実施形態および用途に適用することができる。したがって、本発明は、示された実施形態に限定されることを意図するものではなく、本明細書に開示された原理および特徴と一致する最も広い範囲が与えられるべきである。
データがネットワークなどのデータチャネルを介して2つのデータ処理システム間で転送される場合、データ処理システムの各々は、チャネルを介して通信することを可能にする適切なネットワークインターフェースを有する。多くの場合、ネットワークはイーサネット(登録商標)技術に基づいている。他の実施形態は、他の技術に基づくことができる。
ネットワークを介して通信するデータ処理システムは、ネットワークプロトコルの物理的および論理的要件をサポートすることができるネットワークインターフェースを備えている。ネットワークインターフェースの物理ハードウェア構成要素は、ネットワークインターフェースデバイスまたはネットワークインターフェースカード(NIC)として参照される。
ネットワークを介した送受信のための典型的なデータ処理システム100が図1に示されている。データ処理システム100は、ホストコンピューティングデバイスをネットワーク103にインターフェースするように構成されているネットワークインターフェースデバイス102に結合されているホストコンピューティングデバイス101を備える。ホストコンピューティングデバイス101には、ネットワークインターフェースデバイス102のデバイスドライバ115が設けられている。ホストコンピューティングデバイス101は、1つまたは複数のユーザレベルアプリケーション105をサポートするオペレーティングシステム104を含む。ホストコンピューティングデバイス101は、ネットワークプロトコルスタック(図示せず)も含むことができる。例えば、プロトコルスタックは、アプリケーションの構成要素であってもよく、アプリケーションがリンクされているライブラリであってもよく、および/または、またはオペレーティングシステムによって提供されてもよい。いくつかの実施形態では、2つ以上のプロトコルスタックが提供されてもよい。
ネットワークプロトコルスタックは、伝送制御プロトコル(TCP)スタックであってもよい。アプリケーション105は、ソケットを開き、ソケットに対してデータを読み書きすることによってTCP/IPメッセージを送受信することができる。オペレーティングシステム104は、メッセージがネットワークを介して転送されるようにすることができる。例えば、アプリケーションは、ソケットを通じて、次いでオペレーティングシステム104を介してネットワーク103にデータを送信するためのシステムコール(syscall)を呼び出すことができる。
スタックをホストコンピューティングデバイス101に実装する代わりに、いくつかのシステムは、プロトコル処理の少なくとも一部分をネットワークインターフェースデバイス102にオフロードすることができる。例えば、ネットワークインターフェースデバイス102は、TCPプロトコル処理を実行するためのTCPオフロードエンジン(TOE)を備えることができる。ネットワークを介して送信されるデータは、TOE対応仮想インターフェースドライバを介してアプリケーション105によって、ホストコンピューティングデバイス内のTCP/IPスタックを部分的にまたは完全にバイパスして、送信されてもよい。したがって、この高速経路に沿って送信されるデータは、TOEドライバの要件を満たすようにフォーマットされるだけでよい。
TOE機能は、ネットワークインターフェースデバイスにオフロードすることができる機能の一例であることを理解されたい。代替的または付加的に、1つ以上の他の機能がネットワークインターフェースデバイスにオフロードされてもよい。例として、プロトコル処理の一部分は、ネットワークインターフェースデバイスにオフロードされてもよく、アプリケーションは、ネットワークインターフェースデバイスなどの上で少なくとも部分的に提供されてもよい。
ネットワークインターフェースデバイスは、1つ以上のバッファ106を備えることができる。バッファ106は、任意の適切なメモリ、FIFO、またはレジスタのセットであってもよい。バッファは、フレームに対する変更(例えば、ヘッダへのチェックサム挿入)を必要とする任意の動作が、フレームのその部分がMAC(媒体アクセス制御)に転送される前に完了されるようなものであり得る。
ホストコンピューティングデバイス101は、1つ以上のプロセッサ113および1つ以上のメモリ109を備えることができる。(1つ以上のプロセッサは、実際には、1つ以上のメモリと共にオペレーティングシステムおよびユーザレベルアプリケーションの少なくとも一部分を提供することができる)。
システムのメモリ空間は、ホストコンピューティングデバイス上の1つ以上のメモリ、ネットワークインターフェースデバイス上の1つ以上のメモリ、ならびにホストコンピューティングデバイスおよびネットワークインターフェースデバイスの外部の1つ以上のメモリのうちの1つ以上によって提供されてもよいことを理解されたい。
いくつかの実施形態では、ホストコンピューティングデバイス101およびネットワークインターフェースデバイス102は、1つ以上のバス119を介して通信することができる。単なる例として、バスは、PCIe(peripheral component interconnect express)バス、AXI(advanced eXtensible interface)バス、CCIX(Cache Coherent Interconnect for Accelerators)バス、CAPI(Coherent Accelerator Processor Interface)バス、OPEN CAPIバス、または任意の他の適切なバスであってもよい。2つ以上のバスが提供される場合、少なくとも1つのバスは、少なくとも1つの他のバスとは異なるバスプロトコルを使用してもよく、またはすべてのバスが同じバスプロトコルを使用してもよい。
データ処理システムの動作中、ネットワーク上に送信されるべきデータは、送信のためにホストコンピューティングデバイス101からネットワークインターフェースデバイス102に転送することができる。データネットワークから受信されるデータを、ネットワークインターフェースデバイスを介してホストデバイスに渡すことができる。
いくつかの実施形態では、データ転送はデバイスキュー技法を使用して管理される。デバイスキュー技法は、DMA(ダイレクトメモリアクセス)をサポートすることができる。DMAを用いて、ネットワークインターフェースデバイスは、ホストデバイスのCPUをバイパスして、メモリとやり取りしてデータを送受信することができる。ネットワークから受信されるデータは、(例えば受信キュー内の)1つ以上のディスクリプタによって示される位置においてホストメモリに直接書き込まれる。ネットワーク上に送信されるデータを用いて、ネットワークインターフェースは、(例えば、送信キュー内の)1つ以上のディスクリプタによって示されるメモリ位置においてデータを送信する。
ホストデバイスおよびネットワークインターフェースデバイスは、デバイスインターフェースを介して通信する。ホストデバイスとネットワークインターフェースデバイスとの間のインターフェースを実装することができる様々な異なる方法がある。ホストデバイスとネットワークインターフェースデバイスとの間のインターフェースは、以下ではデバイスインターフェースとして参照される。
デバイスインターフェースは、業界仕様および/または独自仕様などで指定することができる。そのような仕様は、ホストおよびデバイスがともに動作することを可能にするために、ホストコンピューティングデバイスおよび/またはネットワークインターフェースデバイスがどのように構成されるべきかを定義することができる。
デバイスインターフェースの一態様は、キュー(リングとして参照されることもある)がどのように定義および管理されるかである。いくつかのデバイスインターフェースは、キュータイプの構造を必要としなくてもよい。
ネットワークインターフェースデバイスのプログラマブルインターフェース510をより詳細に示す図2を参照する。プログラマブルインターフェースは、複数の異なるデバイスインターフェースおよび/または複数の異なるバスプロトコルをサポートするように構成することができる。プログラマブルインターフェースは、同時にデバイスインターフェースの1つ以上のインスタンスをサポートすることができ、および/または、同時に1つ以上のバスをサポートすることができる。
デバイスインターフェースの2つ以上のインスタンスがサポートされている場合、それらは同じまたは異なるデバイスインターフェース仕様をサポートしてもよい。デバイスインターフェースのインスタンスの数は、ネットワークインターフェースデバイスの動作中に変化してもよい。サポートされるデバイスインターフェースのタイプ(複数可)は、ネットワークインターフェースデバイスの動作中に変化してもよい。
2つ以上のバスがサポートされる場合、それらは同じまたは異なるバスプロトコルをサポートしてもよい。バスの数は、ネットワークインターフェースデバイスの動作中に変化してもよい。1つ以上のバスのバスプロトコルは、ネットワークインターフェースデバイスの動作中に変化してもよい。
プログラマブルインターフェースは、デバイスインターフェース要件に応じて異なるデバイスインターフェースをサポートすることができる。例えば、デバイスインターフェースは、キューもしくはリング対構造TX/RXおよび任意選択的にイベント通知チャネル(または完了キュー)を使用することができ、またはデバイスインターフェースは、相対的に大きいメモリウィンドウを使用することができる。この後者の例では、データのフレームは増分方式の書き込みによって管理され、キュータイプ構造は必要とされない。
異なるデバイスインターフェースは、ホストコンピューティングデバイスとネットワークインターフェースデバイスとの間のインタラクションを異なる方法で実施することができる。
異なるデバイスインターフェースは、異なるセマンティクスに関連付けることができる。
いくつかのデバイスインターフェース仕様では、プロセスを制御するために使用されるコマンドはディスクリプタを参照することができる。ディスクリプタは、開始アドレスを識別することができ、ポインタとして参照されることがある。
デバイスインターフェースに応じて、ホストコンピューティングデバイスは、メモリ内に作業キューまたはディスクリプタリングを作成することができる。この作業キューは、1つ以上のコマンドを有することができる。ホストは、通信チャネルを介して、キューからネットワークインターフェースデバイス上のローカルメモリに1つ以上のコマンドを転送することができる。これらのコマンドは、ディスクリプタキャッシュ(後にプログラマブルインターフェースにおいてより詳細に説明する)に記憶することができる。
ネットワークインターフェースデバイスは、ネットワークからデータを送信および受信することができる。例示的なデバイスインターフェース仕様では、メモリ内に2つの作業キュー、すなわち、ネットワーク上に送信する準備ができているメモリ内のデータバッファを識別する送信(TX)作業キュー、および、ネットワークから入来するデータを受信するために利用可能なメモリ内のデータバッファを識別する受信(Rx)作業キューをセットアップすることができる。
前述したように、デバイスインターフェースに応じてディスクリプタを管理する様々な方法があり得る。いくつかの実施形態では、ネットワークインターフェースデバイスのプログラマブルインターフェースは、同じネットワークインターフェースデバイスが複数の異なるデバイスインターフェース仕様のうちの任意の1つ以上をサポートすることができるように構成される。例えば、ディスクリプタを実装する複数の異なる方法が、プログラマブルインターフェースによってサポートされてもよい。
異なるデバイスインターフェース仕様ならびに/またはキュー管理および/もしくはキュー構造のセマンティクスは異なっていてもよい。例えば、異なる仕様は、特定のコマンドに対する異なるコマンドおよび/もしくは異なるセマンティクス、ならびに/または、異なるコマンドに対する異なるアクションを有してもよい。いくつかの仕様では、別個の完了キューが提供されてもよいが、他の仕様では、完了キューは提供されない。異なるデバイスインターフェースは、異なるメタデータを必要とし得る。異なるデバイスインターフェースは、異なるチェックサム機構を使用することができる(例えば、異なる計算技法を使用し、および/または異なるデータセットにわたって計算する)。異なるデバイスインターフェースは、検証済みチェックサム情報を提供する異なる方法を有し得る。単なる例として、情報は、パケットデータに対するプレフィックスとして、または完了の一部分として提供されてもよい。
仕様は、データのフレームがバッファに関してどのように扱われるかにおいて異なり得る。例えば、バッファはただ1つのデータフレームを受信することができ、バッファは複数のデータフレームを受信することができ、または単一のフレームが2つ以上のバッファに及ぶことができる。これは、デバイスインターフェース仕様またはホスト仕様の特定の実施態様によって定義され得る。
デバイスインターフェースは、リング内の1つのディスクリプタが、データバッファではなく、より多くのディスクリプタのテーブルを指す場合、間接的なディスクリプタをサポートし得る。これは、例えば、リングを「延ばす」ために使用され得る。このタイプの構成は、例えば、後述するVirtioによってサポートされ得る。
1つ以上のデバイスインターフェース仕様は、トランザクションがバスにどのようにおよび/またはいつ配置されるかを定義することができる。これらは、例えば、DMA関連トランザクションであってもよい。例えば、いくつかの仕様は、一部分またはすべての状況においてトランザクションを集約することができる。いくつかの仕様は、単一のトランザクションが別個にバス上に置かれることを指定することができる。いくつかの仕様は、アラインメントおよび/またはパディングなど、バス上に置かれるトランザクションの属性を定義することができる。
デバイスインターフェースは、「標準化」インターフェース、専有インターフェース、またはさらには実装特有のインターフェースであってもよい。単なる例として、デバイスインターフェースを実装するためのいくつかの手法は、RDMA(remote direct memory access)、Virtio、およびNVMe(Non-Volatile Memory Host Controller Interface Express)によって提供される。NVMeは、PCI Express(PCIe)バスを介して取り付けられた不揮発性記憶媒体にアクセスするためのオープン論理デバイスインターフェース仕様である。
Virtioデバイスは仮想環境に見られる。設計により、それらは仮想マシン内のゲストにとって物理デバイスのように見える。Virtio仕様は、それらを物理デバイスのように扱う。この類似性は、ゲストが標準的なドライバおよび発見メカニズムを使用することを可能にする。Virtio仕様の目的は、仮想環境およびゲストが仮想デバイスの標準的かつ拡張可能なメカニズムを有するべきであることである。Virtioデバイスは、物理インターフェースとしてハードウェアで実装されてもよい。これにより、ハイパーバイザのない環境でゲストオペレーティングシステムイメージを実行することができる。
本出願人が提供するEF 100は、いわゆる独自仕様の一例である。
異なるデバイスインターフェースのこれらの例は単なる例であり、他の実施形態が、任意の適切なデバイスインターフェースと共に代替的または付加的に使用されてもよいことを理解されたい。
異なるデバイスインターフェースのこれらの例は単なる例であり、他の実施形態が、任意の適切なデバイスインターフェースと共に代替的または付加的に使用されてもよいことを理解されたい。
仕様は、仮想化挙動および/またはハードウェア挙動および/またはソフトウェア挙動および/またはファームウェア挙動を定義することができる。
プログラマブルインターフェースは、少なくとも2つの異なるデバイスインターフェースの要件が同じプログラマブルインターフェースによってサポートされ得るように構成される。
上述したように、異なるデバイスインターフェースは、例えばキュータイプ構造を実装するための異なる要件を有する場合がある。例えば、少なくともいくつかのキューのレイアウトおよび機能は、広く類似し得るが、いくつかの差がある。例えば、ディスクリプタのフォーマットおよびレイアウト、ポインタのインデックス、コマンドおよび通知完了のうちの1つ以上は、異なり得る。
例えば、EF100は、受信キュー、送信キューおよびイベントキューを有する。
いくつかのデバイスインターフェース仕様は、ネットワークインターフェースデバイス-ホストリング、ホスト-ネットワークデバイスリング、および完了リングのセットを有し得る。例として、トランザクションキューは、以下の要素、すなわち、ディスクリプタリング、完了リング、データバッファ、ドアベル、および割り込みターゲットから構成することができる。
いくつかのデバイスインターフェース仕様は、ネットワークインターフェースデバイス-ホストリング、ホスト-ネットワークデバイスリング、および完了リングのセットを有し得る。例として、トランザクションキューは、以下の要素、すなわち、ディスクリプタリング、完了リング、データバッファ、ドアベル、および割り込みターゲットから構成することができる。
デバイスインターフェース仕様の一例は、いくつかのユーザ構成可能ホストプロファイルを定義することができ、各プロファイルは、2つのメモリ領域のうちのいずれが特定のキュー要素を保持するかを指定する。いくつかの実施形態では、ユーザ構成可能ホストプロファイルの数は16である。これは単なる例であり、他の実施態様は異なる数のユーザ構成可能ホストプロファイルを有することができることを理解されたい。
例えば、PCI物理機能または仮想機能が、いくつかのVirtioキュー(VRING)をサポートし、Virtio-netパーソナリティを有するように指定され得る。別の機能が、NVMeキュー対をサポートし、NVMEパーソナリティを有することができる。
すべてのキューに、事前構成されているホストプロファイルのうちの1つを割り当てることができる。
プロファイルは、キューデータ、リング、および割込みが第1のホストメモリ空間内にあることを指定することができる。同様に、キューは、第2のホストメモリ空間に収容することができる。キューは、異なる空間にその要素を有することができる。例えば、データは第1のホストメモリから入来してもよいが、ディスクリプタ、完了および割り込みは第2のホストメモリに属し、またはその逆であってもよい。
デバイスインターフェースアダプタ308(後により詳細に説明する)は、ホスト-ネットワークインターフェースキューディスクリプタが、キューのホストプロファイルにおいて指定されたデータ位置に優先するデータ位置を選択することを可能にすることができる。
デバイスインターフェースアダプタは、キューの割り当てられたプロファイルIDをローカルキュー状態テーブルに記憶し、必要に応じてアダプタDMAトランザクションの一部分としてIDを供給することによって、DMAホストプロファイル機能をサポートすることができる。
RDMAはキュー対のセットを有する。いくつかの実施形態では、このセットは32k-128kキュー対を含んでもよい。各キュー対は、SQ(送信キュー)、RQ(受信キュー)、およびCQ(完了キュー)をサポートすることができる。
Virtioは、VIRTキューおよび任意選択的に制御VIRTキューの1つ以上の対を有することができる。いくつかの実施形態では、Virtioブロックデバイスは、単一のVIRTキューを介してブロックストレージインターフェースを提供する。ドライバは、ストレージからドライバにデータのブロックを転送する読み出し要求と、ドライバからデバイスにデータのブロックを転送する書き込み要求とを送信する。Virtioデバイスは、ディスクリプタテーブル、利用可能なリング、および使用されたリングを必要とし得る。
デバイスインターフェースのインスタンスは、ホストソフトウェアエンティティとハードウェアデータパスとの間の通信チャネルを提供する。
プログラマブルインターフェース510は、構成可能ハードウェアによって少なくとも部分的に提供されてもよい。構成可能ハードウェアは、任意の適切な構成可能ハードウェアであってもよい。単なる例として、プログラマブルインターフェース510は、FPGAおよびASICマイクロエンジンのうちの1つ以上によって提供されてもよい。プログラマブルインターフェースによって実行されるべき動作は、高レベル言語で指定されてもよい。次いで、これをゲートレベルまたはRTL(レジスタ転送言語)にコンパイルすることができる。代替的に、動作は、ASICなどのマイクロプロセッサにプログラムされたファームウェアとして提供されてもよい。HLS(ハイレベル合成)等のプログラムが使用されてもよい。
同じプログラマブルインターフェース510が、いくつかの実施形態では、任意の1つ以上の適切なバスプロトコルおよび/または任意の1つ以上の適切なデバイスインターフェース仕様をサポートするようにプログラムされてもよい。これは、ネットワークインターフェースデバイスが最初に使用されるときであってもよく、および/またはデバイスが使用されている間であってもよい。
プログラマブルインターフェース510は、1つ以上の共有バス119を有するインターフェース304を有する。(単なる例として、図2は2つのバスを示す。)バス119は、ホストデバイスとネットワークインターフェースデバイスとの間に設けられる。ネットワークインターフェースデバイスがどのように展開されるかに応じて、インターフェース304は、1つ以上のバス119とインターフェースするように構成することができる。2つ以上のバスがある場合、バスは、前述のように、同じまたは異なるプロトコルに従って動作することができる。いくつかの実施形態では、インターフェースは、代替的に、より小さいユニット(例えば、二分岐または四分岐)に分割することができる1つ以上のバスをサポートするように構成されてもよい。
図2はまた、1つ以上のデータスライス512を有するストリーミングサブシステム310を示している。スライスは、例えば、データが送信される前またはデータが受信された後に、データに対するデータ処理を実行することができる。
プログラマブルインターフェース510は、1つ以上のアダプタ308を実装するように構成される。アダプタは、デバイスインターフェースのインスタンスをサポートすることができる。いくつかの実施形態では、アダプタは、デバイスインターフェースの2つ以上のインスタンスをサポートすることができる。2つ以上のアダプタが実装されている場合、異なるアダプタは、異なるデバイスインターフェースをサポートするように構成することができる。いくつかの実施形態では、2つ以上のアダプタが同じデバイスインターフェース仕様を使用してもよい。
アダプタは、ホストコンピュート(compute)デバイスへのおよび/またはホストコンピュートデバイスからのそれぞれの動作を実行および制御するように構成することができる。これは、ハードウェア仮想化後であってもよい。
アダプタは、ホストデバイスへの通信およびホストデバイスからの通信のうちの1つ以上のものであってもよい。アダプタは、ホストへのDMAトランザクションおよびホストからのDMAトランザクション(例えば、ネットワークから受信されるデータ、ネットワーク上に送信されるデータ、および/またはディスクリプタフェッチなどの仮想デバイスインターフェースの一部分としてDMAを介して転送される情報のための)のうちの1つ以上をサポートすることができる。
1つ以上のアダプタは、1つ以上のスライス512から入力を受信し、および/または1つ以上のスライス512への出力を提供することができる。スライスは、ストリーミングサブシステム310の一部分であってもよい。いくつかの実施形態では、所与のスライスが、単一のアダプタまたは2つ以上のアダプタと通信することができる。
プログラマブルインターフェース510は、1つ以上のバスへのアクセスを制御する共通スケジューラ機能306を有する。スケジューラ機能は、例えば、ネットワークインターフェースデバイスとホストとの間の共有バスへのアクセスを制御することができる。バスは、例えばデバイスインターフェースの異なるインスタンス間で共有される必要がある有限の帯域幅を有する。例えば、スケジューラは、デバイスインターフェースの異なるインスタンスの各トランザクションがサポートされることを保証するように構成される。スケジューラは、すべてのトランザクションの間でバスリソース(例えばDMA帯域幅)をスケジュールする必要がある。デバイスインターフェースインスタンスと同様に、プログラマブルインターフェースは、他のDMAクライアント(ユーザ定義の外部カーネルなど)をサポートすることができる。スケジューラはまた、これらの機能をスケジュールするように構成することができる。
いくつかの実施形態では、単一のスケジューラ機能がスケジューリングを管理するように構成される。
スケジューラはまた、データパススライス内のバッファなどのデバイスリソースをスケジュールすることができる。スケジューラは、仮想デバイスインターフェース間のサービス品質ポリシを執行するために使用され得る。サービス品質ポリシは、例えばキューごとの優先度または帯域幅のうちの1つ以上に関連し得る。スケジューラは、ネットワークインターフェースデバイスの異なるサブシステム間の公平性を管理することができる。
アダプタのトランザクションは、スケジューラ306によってスケジュールされる。スケジューラは、いくつかの実施形態では、任意の他の必要なアクセスも管理することができる。
プログラマブルインターフェースは、ドアベル機能322を備える。ホストからネットワークインターフェースデバイスへのデバイスインターフェースの異なるインスタンスと関連付けられるすべてのドアベルは、この共通のドアベル機能に書き込まれる。ドアベルの使用および/またはそれらがどのように実装されるかおよび/またはそれらがどのように使用されるかは、それぞれのデバイスインターフェースに依存し得る。例えば、ホストは、ホストが書き込まれるべきデータを有するときにドアベルを提供することができる。ホストは、受信キューを示すためにドアベルを提供することができる。より一般的には、ホストは、プログラマブルインターフェース510によって何かを行うことが所望されるときにドアベル機能にドアベルを提供することができる。
ドアベル機能は、ドアベル書き込みのベースアドレスによってドアベルが意図されるアダプタを決定するように構成することができる。
ドアベル自体は、相対的に大きいデータフレームであリ得、または相対的に短くすることができ、例えば特定のキューまたはキュー内のインデックスなどを示す。例えば、相対的に大きいドアベルは、フレームの第1の部分またはフレーム全体のいずれかで送信されるデータを含むことができる。ドアベルがドアベル機能に書き込まれると、これにより、ドアベルが意図されているデバイスインターフェースのインスタンスをサポートするアダプタ308が、そのドアベルに適切に応答する。
ドアベルは、典型的には、ターゲットバス書き込みが発行されるようにマッピングされた宛先アドレスへのロード/ストアのような命令を実行するホストCPUによって生成され得る。バスマッピング属性(例えば、書き込み結合)および使用される特定の命令(例えば、書込みメモリバリア)は、生成されるバストランザクションに影響を及ぼす。
ドアベル機能は、ドアベルの動作を執行することができる。これは、異常なドアベルにフラグを立てること、および/または欠陥のあるドアベルを拒絶することを含み得る。ドアベル機能は、例えば、所与のアダプタと関連付けられる2つ以上のドアベルを合体させることができる。
プログラマブルインターフェースは、後により詳細に説明するアドレス変換サービスATS320を備える。ATSは、デバイスインターフェースの異なるインスタンスによって共有することができる。プログラマブルインターフェースは、IOMMUおよび/またはATSが使用されるようにするように構成される。これは、デバイスインターフェース仕様および/または特定のタイプのDMAアクセスに依存し得る。プログラマブルインターフェースは、IOMMUおよびATSの一方または両方をサポートするように構成することができる。
いくつかの実施形態では、共通DMAディスクリプタキャッシュ314は、プログラマブルインターフェースによって提供されてもよい。このディスクリプタキャッシュは、例えば、すべてのデバイスインターフェースインスタンスのすべてのキャッシュされたディスクリプタを含むことができる。ディスクリプタキャッシュは、バス物理アドレスに解決するポインタを有することができる。キャッシュがそれぞれのキューのためのディスクリプタを使い果たし始めている場合、キャッシュはそれぞれのキューのために1つ以上のディスクリプタをフェッチすることができることを理解されたい。これは、ディスクリプタキャッシュおよび/またはそれぞれのアダプタによって制御することができる。
ディスクリプタキャッシュは、例えばディスクリプタが古くなっている場合、または他のディスクリプタの空間を作るために、1つ以上のディスクリプタを追い出すことができる。追い出しは、ランダム、最長未使用、アダプタと関連付けられる優先度、各アダプタと関連付けられるディスクリプタの数、および/または任意の他の適切な基準のうちの1つ以上に基づいてもよい。
ディスクリプタキャッシュの動作は、どのキューのどのディスクリプタがフェッチされるか、および/または、ディスクリプタキャッシュが一杯になったときもしくは一杯になろうとしているとき、および/または、そのときにどのディスクリプタがディスクリプタキャッシュから削除されるべきかを決定する際に、サービス保証および使用パターンのうちの1つ以上を考慮に入れることができる。ディスクリプタキャッシュは、ヘッドオブラインブロッキングを回避するためにディスクリプタを事前にプリフェッチしようと試みることができる。
ディスクリプタキャッシュは、異なるアダプタ間で区分化することができる。パーティションは、各アダプタに固定の割り当てがあるようなものとすることができる。各アダプタの割り当ては、同じであっても異なっていてもよい。代替的に、パーティションのサイズを変更してもよい。これは、1つ以上のアダプタのアクティビティおよび/またはアダプタによってサポートされるアクティビティのタイプおよび/またはデバイスインターフェースのタイプなどの要因に依存し得る。
代替的に、ディスクリプタキャッシュは、アダプタの要求に応じて異なるアダプタ間で共有されてもよい。
いくつかの実施形態では、ディスクリプタキャッシュは、各アダプタと関連付けられる固定割り当てと、必要に応じてアダプタのいずれか1つ以上によって使用可能な共有割り当てとを有することができる。
ディスクリプタキャッシュは、各アダプタインスタンスに保証されたキャッシュ予約を提供することができる。
ディスクリプタキャッシュは、アダプタのエンドポイントインスタンスに保証された数のディスクリプタを提供することができる。エンドポイントインスタンスはキューであってもよい。
ディスクリプタキャッシュは、それぞれのアダプタと関連付けられるドアベルのドアベル処理、および/またはそれぞれのアダプタと関連付けられるデータの到来のうちの1つ以上に応答して、1つ以上のディスクリプタをプリフェッチするように構成することができる。
図2のプログラマブルインターフェース510への変更をより詳細に示す図3を参照する。
この例では、プログラマブルインターフェースは、複数のインターフェースを提供される。この例では、2つが示されている。しかしながら、いくつかの実施形態では、2つ以上のインターフェースが提供されてもよい。図2の構成は、2つのインターフェースを有するように変更されてもよいことを理解されたい。
図3に示す例では、共有DMAエンジン330が提供される。このDMAエンジンは、異なるアダプタ308によって共有される。共有DMAエンジンは、図2に示すように、単一のインターフェースと共に使用されてもよい。
後述するように、図2の構成における各アダプタにDMAエンジンが設けられているが、図3の例では、DMAエンジンは2つ以上のアダプタによって共有されている。共有DMAエンジンは、リソースが効率的に使用されるという点で有利であり得る。特定のアダプタに提供されるDMAエンジンは、そのアダプタの挙動に最適化することができる。
DMAエンジンは、ディスクリプタキャッシュからDMAコマンドを読み出し、定義されたシーケンスにおいてそれらを実行する。DMAエンジンは、メモリからデータを読み出すか、またはメモリにデータを書き込む。DMAエンジンは、バスインターフェースとインターフェースし、クレジット、アウトオブオーダー完了、および並列トランザクション(例えば、複数の未処理トランザクション)などのバスフロー制御プロトコルメカニズムを処理することができる。DMAエンジンが有する帯域幅の配分は、スケジューラによって制御される。
図2のアダプタ308の一例をより詳細に示す図4を参照する。
アダプタ308は、ドアベルハンドラ350と、ディスクリプタローダ354と、DMAエンジン356と、RX/TX処理機能360とを有する。
アダプタ308は、ドアベルハンドラ350と、ディスクリプタローダ354と、DMAエンジン356と、RX/TX処理機能360とを有する。
ドアベルは、ドアベル機能322によって受信されると、特定のアダプタへの動的アドレスマップに基づいて解決される。特定のアダプタのドアベルハンドラ350は、ドアベルを解析する。ドアベルハンドラは、ドアベル機能をポーリングして、その特定のアダプタ向けのドアベルを取得するように構成することができる。解析は、ドアベルと関連付けられるコマンド、ディスクリプタ、データ、およびデバイスインデックスのうちの1つ以上を決定する。コマンドは、データ読み出し、データ書き込み、および/またはより複雑なコマンドなどの任意の適切なコマンドであってもよい。
ドアベルハンドラは、解析されたドアベルの1つ以上の部分を含む出力をディスクリプタローダに提供する。ディスクリプタローダは、ディスクリプタキャッシュからディスクリプタをアセンブルするように構成される。ディスクリプタローダはまた、キューポインタなどのキャッシュコンテキスト情報をフェッチするように構成される。キューポインタなどのキャッシュコンテキスト情報は、ディスクリプタインデックスの状態を提供することができる。
ディスクリプタキャッシュは、要求されたディスクリプタキャッシュラインをディスクリプタローダに提供する。ディスクリプタキャッシュは、ホストまたはデバイスメモリのうちの1つ以上からディスクリプタキャッシュラインに直接メモリアクセス(DMA)することができる。ディスクリプタキャッシュは、間接ディスクリプタおよび他のディスクリプタのうちの1つ以上をプリフェッチすることができる。ディスクリプタキャッシュは、古いディスクリプタを追い出すことができる。
コマンドおよび関連するディスクリプタ(複数可)は、ディスクリプタローダによってディスクリプタハンドラに提供される。ディスクリプタハンドラは、コマンド(複数可)をDMA要求チェーンに変換する。したがって、処理のチェーンは、DMAエンジンへのDMA要求のリストにおいて終端する。DMAエンジンはDMA要求を実行する。DMA要求は、スケジューラ306によってスケジュールされる。
DMAエンジンは、特定のデバイスインターフェースのセマンティクスを用いてプログラムされる。ディスクリプタの処理のために、いくつかのDMA応答が必要とされ得る。ディスクリプタハンドラは、DMAエンジンによってディスクリプタハンドラに提供される1つ以上の完了を介してDMAエンジンの進行を認識する。
他のDMA応答がRX/TX処理機能へ送達され得る。RX/TX処理機能は、オフロード処理、再アセンブリ論理などの機能を実行するように構成される。
図4は1つのアダプタを示すことを理解されたい。プログラマブルインターフェースは、1つまたは複数のアダプタをサポートすることができることを理解されたい。
図3のアダプタ308の一例をより詳細に示す図5を参照する。図5のアダプタは、図4のアダプタとほぼ同じように動作する。しかしながら、この場合、DMAエンジンはアダプタの外部にあり、2つ以上の異なるアダプタによって共有することができる。しかしながら、ディスクリプタハンダおよびRx/TX機能によるDMAエンジンとのインタラクションは、図4に関連して説明したものと同じである。これらの実施形態において、スケジューラは、共通DMAエンジンを介した異なるアダプタ308によるDMAアクセスをスケジュールするように構成される。
いくつかの実施形態のメモリアドレス管理の態様を示す図7を参照する。ホストコンピューティングデバイス101には、ネットワークインターフェースデバイス106のデバイスドライバ115が設けられている。デバイスドライバ115は、実効的に、ホスト内のメモリ109の一部分を、DMA読み出しおよび書き込みのためにネットワークインターフェースデバイスにとってアクセス可能にする。
デバイスドライバ115は、オペレーティングシステムのデバイスインターフェースAPIに準拠する、590で示される「トップエッジ」を有する。オペレーティングシステムデバイスインターフェースAPIは、NDISまたはLinux(登録商標)ネットワークドライバAPIとすることができる。デバイスドライバ115は、ネットワークインターフェースデバイスハードウェアに適合し、API動作、送信動作、受信動作、割り込み動作、およびバッファ・リング再充填動作などの動作を実行するためにレジスタレベル動作を実行する、591で参照される「下側エッジ」を有する。
下側エッジは、ベンダまたはデバイス固有の動作をサポートすることができる。いくつかの実施形態では、仮想デバイスインターフェースが標準化されて、デバイスドライバを汎用デバイスタイプ(例えば、ネットワークデバイスドライバ)にする。VirtioおよびNVMEはそのような例である。
ホストは、IOMMU(入出力メモリ管理ユニット)514を備えることができる。IOMMUは、ホスト側でメモリマッピングを提供するように構成することができる。いくつかの実施形態では、メモリマッピングはバス119のホスト側で行われる。そのようなIOMMUが提供されるか否か、および/またはそのIOMMUがどのように動作するかは、ホストCPUおよび/またはチップセットアーキテクチャの一部分であり得る。
アドレス変換は、IOMMUによって実行されてもよい。ネットワークインターフェースデバイスは、ディスクリプタキュー内のアドレスにデータを「書き込む」ことができる。その書き込みトランザクションは、IOMMUによって受信され、次にディスクリプタキュー内のアドレスと関連付けられる物理位置に書き込まれる。IOMMU技法は、ネットワークインターフェースによるいくつかのDMAアクセスのために使用され得る。
プログラマブルインターフェースは、アドレス変換サービスATSまたはバッファテーブルをサポートすることができる。ATSは、デバイスがDMAトランザクションに使用することができるアドレスを変換し、ディスクリプタキューの一部分を形成することができる。アドレスは、バスまたは物理アドレスに変換することができる。アドレスがバス物理アドレスに変換される場合、IOMMUはバス物理アドレスを変換することができる。ATSは、IOMMUのキャッシュとして機能し得るか、またはバッファ仮想アドレスをバス物理アドレスにマッピングし得るか、またはバッファ仮想アドレスをIOMMUが存在しない物理アドレスにマッピングし得る。これは、必要なデバイスインターフェース挙動によって少なくとも部分的に定義され得る。
1つ以上のデバイスインターフェースタイプでは、ATSは提供されなくてもよい。
アドレス変換がどのように管理されるかは、デバイスインターフェースによって定義され得ることを理解されたい。したがって、ディスクリプタ内のアドレスの物理位置へのマッピングは、デバイスインターフェースに応じてIOMMUおよび/またはATSにおいて実行され得る。
アドレス変換がどのように管理されるかは、デバイスインターフェースによって定義され得ることを理解されたい。したがって、ディスクリプタ内のアドレスの物理位置へのマッピングは、デバイスインターフェースに応じてIOMMUおよび/またはATSにおいて実行され得る。
いくつかの実施形態では、各アプリケーションのアドレス空間を提供することができる。特定のアプリケーションと関連付けられるディスクリプタキューは、特定のアドレスを有することができる。いくつかの実施形態では、ATSは、そのアドレスを変換するように構成され得る。所与のキューは一般に、別のキューと関連付けられるメモリ空間を参照することができないことに留意されたい。ホストのOSは、バッファテーブルを更新することができる。アプリケーションスレッドは、受信ディスクリプタをポストすることができ、受信ディスクリプタは、アプリケーションが例えばそのデータを注入することを所望するメモリ、または送信されるべきデータがフェッチされるメモリを定義する。ネットワークインターフェースデバイスは、例えば、ATSまたはバッファテーブルを使用するマッピングを使用して、指示されたメモリ位置と関連付けられる物理メモリ位置を決定する。
DMAは、ネットワークインターフェースデバイスに割り当てられたアドレス空間の領域へとおよび/または当該領域からデータを転送することを可能にする。これにより、ネットワークインターフェースデバイスの受信スライス512を介して受信されるデータを、DMAプロセスを介してホストメモリに書き込むことができる。これにより、ホストメモリ内のデータが、ここでもDMAプロセスを介して、ネットワークインターフェースデバイスの送信スライス512を介して送信されることが可能になる。
マッピングは、ディスクリプタキューのコンテキストに対するプライベートアドレスマッピングとして、または例えばシステムページテーブルなどの共有データ構造として、またはアドレス変換キャッシュとして実装されてもよい。
ネットワークインターフェースデバイスが物理位置にデータを注入したとき、関連するソケットのイベントキュー、および、ネットワークインターフェースデバイスによって使用される受信キュー内の書き込みポインタを更新することができる。ネットワークインターフェースデバイスは、受信キュー内の更新書き込みポインタによって示される次の位置に次の受信データを書き込むかまたは注入することができる。ポインタはディスクリプタキャッシュに記憶される。
バッファテーブルの一例が図8に示されており、バッファの物理位置(または前述のようなバス物理アドレス)を決定するために使用される。IOMMUまたはATSは、バッファテーブルとして実装されてもよい。いくつかの実施形態では、バッファテーブルは、スレッドまたはアプリケーションのいずれが各バッファに割り当てられているかをマッピングし、各バッファについて以下の情報を保持する。
1.バッファインデックス。これはバッファの識別番号であり、ホストに対して一意である。バッファは、バッファテーブルインデックスフィールド内のこの番号によって識別される。
2.所有権。これは、どのアプリケーションまたはスレッドがバッファを所有しているかを示す。
3.物理メモリアドレス。バッファは、物理メモリの連続したブロックを占有し、この番号は、そのブロックが始まる場所(または前述のようなバス物理アドレス)を示す。
4.長さ。これは、メモリ内のバッファの長さを示す。
各バッファテーブルエントリのサイズは、ホストシステムのページサイズ、典型的には4キロバイトに一致するように選択され得る。このようにして、物理メモリの不連続領域にマッピングされるアプリケーションの仮想アドレス空間の連続領域は、バッファテーブルエントリのシーケンスによって表すことができる。他の実施形態では、いくつかのサイズは、ギガバイトHuge Pageサイズまでサポートされ得る。
各バッファテーブルエントリのサイズは、ホストシステムのページサイズ、典型的には4キロバイトに一致するように選択され得る。このようにして、物理メモリの不連続領域にマッピングされるアプリケーションの仮想アドレス空間の連続領域は、バッファテーブルエントリのシーケンスによって表すことができる。他の実施形態では、いくつかのサイズは、ギガバイトHuge Pageサイズまでサポートされ得る。
指示されたメモリの物理メモリ位置へのマッピングは、バッファテーブルを使用して実行され得る。
ディスクリプタキャッシュは、ディスクリプタがどのアダプタに関連付けられているかに関する直接的または間接的な指示を含むことができる。これにより、それぞれのディスクリプタに正しいセマンティクスを適用することができる。
いくつかの実施形態では、ディスクリプタキャッシュ内の所与のエントリは、
データが書き込まれる/読み出されるべき位置へのポインタ、
関連するアダプタインスタンスおよび/または不透明エンドポイントインデックス、ならびに
メタデータ
のうちの1つ以上を含むことができる。
データが書き込まれる/読み出されるべき位置へのポインタ、
関連するアダプタインスタンスおよび/または不透明エンドポイントインデックス、ならびに
メタデータ
のうちの1つ以上を含むことができる。
ポインタは、単一のポインタ、ポインタのブロック、ポインタの連結リスト、トライ、または任意の他の適切なデータ構造であってもよい。
メタデータは、1つ以上のフラグを含むことができる。
メタデータは、ポインタがバッファではなくディスクリプタのテーブルへのポインタであるか否か、および/またはポインタがバッファへのポインタであるか否かを示すことができる。
メタデータは、ポインタがバッファではなくディスクリプタのテーブルへのポインタであるか否か、および/またはポインタがバッファへのポインタであるか否かを示すことができる。
メタデータは、デバイスインターフェースタイプおよび/またはサイズを示し得る。いくつかの実施形態では、ディスクリプタはサイズが異なり得る。いくつかの実施形態では、異なるサイズのセットが存在し得る。メタデータは、どのサイズが使用されているかを示すことができる。
いくつかの実施形態では、メタデータは、デバイスインターフェースタイプを示すことができる。
メタデータは、1つ以上のキューインデックス(論理キューに対するディスクリプタの位置)および/または関連するキューを示すことができる。
メタデータは、提供される場合、関連するデバイスインターフェースの要件に依存することを理解されたい。メタデータのフォーマットは、関連するデバイスインターフェースの要件に依存し得る。メタデータは、ディスクリプタキャッシュによって不透明として扱われ得る。
デバイスインデックスは、ディスクリプタが関連付けられているアプリケーションに関する情報を提供することができる。これは、アダプタを示してもよく、または、所与のエントリに別個に設けられてもよい。デバイスインデックスは、エントリが受信キュー用であるか、コマンドキュー用であるか、送信キュー用であるか、またはさらにはウィンドウ用であるかに関する情報を提供することができる。
同時に(また、場合によって異なるデバイスインターフェース仕様を使用して)ネットワークインターフェースデバイスと通信する可能性のある多くのユーザレベルアプリケーションのキューおよび/またはウィンドウの状態を追跡するために、共通ディスクリプタキャッシュは、少なくとも次のディスクリプタを含むことができる。ディスクリプタキャッシュは、各エンドポイントについて少なくともいくつかのディスクリプタを保持するように構成され得る。これにより、例えば、アダプタは、少なくともいくつかのディスクリプタが常に利用可能であるため、ディスクリプタのフェッチによってフレーム送達が決して失速しないことを保証することができる。例として、ディスクリプタの数は、0、1、16、32、64、128個のディスクリプタであってもよい。異なるエンドポイントは、同じまたは異なる数のディスクリプタと関連付けられ得る。
各デバイスインターフェースは、共通ディスクリプタキャッシュへのインデックスとして使用され得る少なくとも1つの対応するデバイスインデックスを有し得る。
ホストは、ネットワークインターフェースデバイスのプログラマブルインターフェースによってサポートされるデバイスインターフェースタイプのうちの1つ以上をサポートするために1つ以上のデバイスドライバをダウンロードするように構成することができる。
いくつかの実施形態では、ネットワークインターフェースデバイスは、ネットワークインターフェースデバイスによってサポートされる異なるインターフェースタイプのうちの1つ以上のデバイスドライバを提供することができる。ホストが受信するデバイスドライバは、デバイスドライバとして表現されてもよく、または、eBPFプログラムなどのプログラムとして表現されてもよい。
いくつかの実施形態では、デバイスドライバおよびデバイスインターフェースは、単一の高レベルプログラムから生成される。プログラムはコンパイルされ、オペレーティングシステムによってネットワークインターフェースデバイスインスタンスにダウンロードされる。ホストコンピューティングデバイスは、プログラムをコンパイルして、デバイスインターフェースのファームウェアまたはRTLレベルコード、およびカーネルモジュール、デバイスドライバ、またはネイティブオペレーティングシステムのホストインターフェースに適した任意の他の表現を提供することができる。
ホストコンピューティングデバイスは、高レベル言語プログラムをホストインターフェース(デバイスドライバ)のための中間レベル言語プログラムにコンパイルするように構成することができる。この中間レベル言語プログラムは、プログラムがカーネルなどのより高い特権ドメインに挿入されるべきである場合に検証することができる。単なる例として、中間レベル言語プログラムは、eBPF(または拡張eBPF)プログラムであってもよい。
ホストコンピューティングデバイスは、高レベル言語プログラムをデバイスインターフェースのための中間レベル言語プログラムにコンパイルするように構成することができる。(例えば、HLS、または物理デバイスを実行するためのファームウェア)
高レベルプログラムのソースは、より高いレベルの特権またはより低いレベルの特権を有するアプリケーションであってもよい。より高いレベルの特権を有するアプリケーションは、いわゆるトラステッドアプリケーションであり得るため、カーネルレベルなどの変更を行うことを委ねられる。より低いレベルの特権を有するアプリケーションは、いわゆるアントラステッドアプリケーションであり得るため、カーネルレベルなどの変更を行うことができない。しかしながら、アントラステッドアプリケーションのコンパイルされた出力は、特権検証者が使用するのに安全であると検証されるか、または他の様態でサンドボックス環境において実行されてもよい。
高レベルプログラムのソースは、より高いレベルの特権またはより低いレベルの特権を有するアプリケーションであってもよい。より高いレベルの特権を有するアプリケーションは、いわゆるトラステッドアプリケーションであり得るため、カーネルレベルなどの変更を行うことを委ねられる。より低いレベルの特権を有するアプリケーションは、いわゆるアントラステッドアプリケーションであり得るため、カーネルレベルなどの変更を行うことができない。しかしながら、アントラステッドアプリケーションのコンパイルされた出力は、特権検証者が使用するのに安全であると検証されるか、または他の様態でサンドボックス環境において実行されてもよい。
アプリケーションは、ホスト内のデバイスドライバおよびネットワークインターフェースデバイス内のデバイスインターフェースにコンパイルされる高レベル言語を使用して、デバイスインターフェースのセマンティクスを表現することができる。アプリケーションと関連付けられる特権に応じて、デバイスドライバは、(より高い特権を有する)カーネル内に挿入され得、または、(より低い特権を有する)カーネルの外部に挿入され得る。
必要なデバイスインターフェースを提供するためにプログラミングインターフェースによって使用されるネットワークインターフェースデバイスのためのプログラムは、より高いまたはより低い特権と関連付けられ得る。プログラムがより高い特権を有する場合、プログラムは、より高い特権と関連付けられるハードウェア機能のいずれかまたはすべてを使用することができる。プログラムがより低い特権を有する場合、プログラムは、より低い特権と関連付けられるハードウェアのみを使用することができる。例として、プログラムがより低いレベルの特権に関連付けられている場合、アクセスが特定のDMAバッファに制限され得、および/または、許可される割り込みの数が制限され得、および/または、割り込みが許可され得ず、および/または、バスへのアクセスのスケジューリングが制限され得る。
いくつかの実施形態では、デバイスインターフェースは、ネットワークインターフェースデバイス上のサンドボックス環境内に提供されてもよい。例えば、アダプタは、サンドボックス環境内に提供されてもよい。サンドボックス環境は、より低いレベルの特権と関連付けられるアダプタと共に使用され得る。
いくつかの実施形態では、ATSのプログラミングは、所与のアダプタと関連付けられる特権に応じて制御され得る。これは、より低い特権アダプタに、より高いレベルの特権と関連付けられるバッファへのアクセスが与えられないこと、またはアダプタがアクセスを許可されるバッファのみが与えられることを保証するためである。
いくつかの実施形態では、プログラマブルインターフェースには、テンプレートとして、スケジューラ機能、ドアベル機能、ATS機能、ディスクリプタキャッシュ、DMAエンジン(共有される場合)、および複数のアダプタのうちの1つ以上などのテンプレート機能を提供することができる。プログラムコードなどが特定のデバイスインターフェースのプログラマブルインターフェースによって受信されると、これにより、アダプタのテンプレートが特定のデバイスインターフェースと一致するように修正される。スケジューラ機能、ドアベル機能、ATS機能、ディスクリプタキャッシュ、およびDMAエンジンのテンプレートのうちの1つ以上は、特定のデバイスインターフェースをサポートするように修正されてもよい。
いくつかの実施形態では、プログラマブルインターフェースのプログラミングは、実行時に実施されてもよい。いくつかの実施形態では、プログラマブルインターフェースのプログラミングは、ホストコンピューティングデバイスおよびネットワークインターフェースデバイスの動作中に実施されてもよい。
前述の実施形態は、ネットワークインターフェースデバイスとホストデバイスとの間で使用するためのプログラマブルインターフェースについて説明した。代替的または付加的に、プログラマブルインターフェースは、ネットワークインターフェースデバイス上のルーティングに使用されてもよいことを理解されたい。例えば、バスを使用して通信するように構成されているネットワークインターフェースデバイス上の構成要素があってもよい。そのバスは、前述のタイプのバスのいずれかであってもよい。
例えば、ネットワークインターフェースデバイスは、PCIeバスなどのバスを使用して通信するように構成されている2つ以上のASICを備えることができる。いくつかの実施形態では、ホストデバイスとインターフェースするように構成されている同じプログラマブルインターフェースがまた、ネットワークインターフェースデバイス上の2つ以上の構成要素間でインターフェースするように構成されてもよい。他の実施形態では、ネットワークインターフェースデバイス上の構成要素間のインターフェースに必要なものと比較して、別個のプログラマブルインターフェースを使用して、ホストデバイスとインターフェースすることができる。
単なる例として、前述のようなプログラマブルインターフェースを含む例示的なネットワークインターフェースデバイスのいくつかの例を、ここで図6を参照して説明する。
いくつかの実施形態では、プロトコル処理は、ネットワークインターフェース内で実行されるようにネットワークインターフェースデバイスにオフロードされてもよい。そのようなオフロードがネットワークインターフェースデバイスにおいて実行される場合、ネットワークインターフェースデバイスのプロトコル処理能力を利用することができるネットワークインターフェースデバイス上に機能を実装することが望ましい場合がある。ホストの代わりにネットワークインターフェースデバイスにそのような機能を実装することにより、ホストとネットワークインターフェースデバイスとの間のデータ転送を低減することによってレイテンシの潜在的な改善を達成することができる。
ネットワークインターフェースデバイス102は、TCP/IPなどのトランスポートプロトコルに従ってデータパケットを処理するように構成されているトランスポートエンジン215を備える。トランスポートエンジン215は、プロトコルスタックを含むことができる。トランスポートエンジン215は、複数のスライス512またはデータパイプラインを備えることができ、スライスの一部分は、ネットワーク103から受信されるイングレスデータパケットの受信処理を実行するように構成されているRXスライスであり、スライスの一部分は、ネットワーク103上に送信されるエグレスデータパケットの送信処理を実行するように構成されているTXスライスである。いくつかの実施形態では、スライスは、送信されるデータと受信されるデータの両方を処理することが可能であり得る。
図示の例では、4つのスライスが提供されている。しかしながら、他の実施形態では、異なる数のスライスが使用されることを理解されたい。一実施形態では、スライスは、受信データを処理するか、または送信されるデータを処理するように構成することができる。他の実施形態では、スライスは、受信データおよび送信されるデータを処理することができるように構成されてもよい。いくつかの実施形態では、スライスの数は、ポートの数と同じであってもよい。いくつかの実施形態では、各ポートに対して送信スライスおよび受信スライスが存在し得る。いくつかの実施形態では、ポートの数とスライスの数との間に直接相関がなくてもよい。いくつかの実施形態では、スライスは、受信データの処理から送信データの処理に、およびその逆に動的に切り替えることができる。
各スライスは、処理エンジンとみなすことができる。したがって、各スライスは、マイクロコードを実行して、データパスの解析、オフロードのマッチング、およびセマンティクスの送達などの機能を実施することができる。スライスは、フレームの任意のビットに作用することができる。
スライスは、スライスが処理しているデータに対して解析動作を実行することができる。データを、例えば、フィルタ、および、アクションを実行するかまたはマッチングの結果に依存しないアクション機能と照合するマッチングアクションがあってもよい。
ネットワークインターフェースデバイスは、フローステアリングおよび低レイテンシ動作、ハードウェアタイムスタンプ付与およびクロック同期などの機能を提供することができる。
イーサネットインターフェース225は、ネットワークからデータパケットを受信し、それらをレイヤ2ストリーミングインターフェース220に渡すように構成される。レイヤ2ストリーミングインターフェース220は、処理されたデータパケットをプログラマブルインターフェース510に渡す前に、データパケットの処理を実行するトランスポートエンジン215にデータパケットを渡すように構成される。プログラマブルインターフェース510は、例えば、DMA書き込み動作においてホスト101にデータの少なくとも一部を渡すように構成される。ネットワーク上に送信されるべきデータについては、この経路の逆に従うことができる。プロトコル処理済みデータパケットは、ネットワーク2103上に送信される前に、レイヤ2インターフェース220に、続いてイーサネットインターフェース225に渡されてもよい。
いくつかの実施形態の方法を示す図9を参照する。ステップS1において、ネットワークインターフェースデバイスのプログラマブルインターフェースが、ネットワークインターフェースデバイスとホストデバイスとの間の少なくとも1つのバスをデバイスインターフェースに提供するようにプログラムされ、プログラマブルインターフェースは、複数の異なるタイプのデバイスインターフェースをサポートするようにプログラムされる。
いくつかの実施形態の方法を示す図10を参照する。ステップT1において、ホストコンピューティングデバイスが、ネットワークインターフェースに関連してデバイスインターフェースを定義するプログラムをコンパイルする。
ステップT2において、コンパイルされたプログラムが、上記デバイスインターフェースのホストインターフェースを定義するためにホストコンピューティングデバイスにインストールされ、対応するデバイスインターフェースを定義するためにネットワークインターフェースデバイスにインストールされる。
本明細書において使用される場合、情報の項目の「識別」は、必ずしもその情報の項目の直接的な指定を必要としない。例えば、メモリ内の開始アドレスを「識別」するポインタは、物理メモリアドレス全体を指定することができ、または物理アドレスにマッピングされているより大きいメモリアドレス空間内のアドレスを指定することができ、または物理アドレスにマッピングされた仮想アドレスを指定することができ、または何らかの種類のユーザIDにさらに依存して物理アドレスにマッピングされたユーザアドレス空間内のアドレスを指定することができ、またはこれらの方法のいずれかで、識別された実際の開始アドレスよりも1つ小さいまたは1つ大きいアドレスを識別することができる、などである。
ホストコンピューティングまたは処理デバイスまたはシステムは、任意の適切なコンピューティングデバイスまたはシステムであってもよい。例として、ホストコンピューティングデバイスは、サーバ、パーソナルコンピュータ、スイッチ、ルータ、ブリッジ、仮想化システム(例えば、仮想化オペレーティングシステムおよびそれがサポートするアプリケーション)、タブレットコンピュータもしくはスマートフォンなどのポータブルデバイス、または任意の他の適切なコンピューティングデバイスのうちの1つ以上を含むことができる。いくつかの実施形態では、ホストコンピューティングデバイスは、2つ以上のコンピューティングデバイスのセットによって提供されてもよい。これらのコンピューティングデバイスは、同じであってもよく、または異なっていてもよい。これらのコンピューティングデバイスは、コンピューティングデバイスの前述の例のうちの任意の1つ以上であってもよい。
ネットワークインターフェースデバイスは、有線または無線ネットワークをホストコンピューティングデバイスにインターフェースするように構成されている任意のハードウェアデバイスであってもよい。ネットワークインターフェースデバイスは、ネットワークとホストデバイスとの間に任意の方法で提供することができる。ネットワークインターフェースデバイスは、ホスト処理デバイスの一体部分であってもよい。ネットワークインターフェースの物理ハードウェア構成要素は、カードの形態である必要はないが、ネットワークインターフェースカード(NIC)として参照されることがある。例えば、それらは、マザーボード上に直接取り付けられた集積回路(IC)およびコネクタの形態であり得る。ネットワークインターフェースデバイスは、LAN(ローカルエリアネットワーク)またはLOM(マザーボード上LAN)によって提供されてもよい。ネットワークインターフェースデバイスは、代替的または付加的に、ホストコンピューティングデバイスのPCIeカードなどの1つ以上の周辺デバイスとして提供されてもよい。他の実施形態では、任意の他の適切なネットワークインターフェースデバイスが使用されてもよいことを理解されたい。
ネットワークインターフェースデバイスは、少なくとも1つのプロセッサおよび少なくとも1つのメモリによって実装されてもよい。
実施形態は、プロセッサエンティティにあるものなどのデータプロセッサによって、またはハードウェアによって、またはソフトウェアとハードウェアとの組み合わせによって実行可能なコンピュータソフトウェアによって実施することができる。ソフトウェアルーチン、アプレット、および/またはマクロを含む、プログラム製品とも呼ばれるコンピュータソフトウェアまたはプログラムは、任意の装置可読データ記憶媒体に記憶されてもよく、それらは特定のタスクを実行するためのプログラム命令を含む。コンピュータプログラム製品は、プログラムが作動されると、実施形態を実行するように構成される1つ以上のコンピュータ実行可能構成要素を含むことができる。1つ以上のコンピュータ実行可能構成要素は、少なくとも1つのソフトウェアコードまたはその部分であってもよい。
さらに、これに関して、図のような論理フローの任意のブロックは、プログラムステップ、もしくは相互接続された論理回路、ブロックおよび機能、またはプログラムステップと論理回路、ブロックおよび機能との組み合わせを表すことができることに留意されたい。ソフトウェアは、メモリチップ、またはプロセッサ内に実装されたメモリブロックなどの物理媒体、ハードディスクまたはフロッピー(登録商標)ディスクなどの磁気媒体、ならびに例えばDVDおよびそのデータ変形、CDなどの光学媒体に記憶することができる。物理媒体は、非一時的媒体である。
メモリは、ローカル技術環境に適した任意のタイプのものであってもよく、半導体ベースのメモリデバイス、磁気メモリデバイスおよびシステム、光メモリデバイスおよびシステム、固定メモリおよびリムーバブルメモリなどの任意の適切なデータ記憶技術を使用して実装することができる。データプロセッサは、ローカル技術環境に適した任意のタイプのものであってもよく、非限定的な例として、汎用コンピュータ、専用コンピュータ、マイクロプロセッサ、デジタル信号プロセッサ(DSP)のうちの1つ以上を含んでもよい。
本出願人は、本明細書において、本明細書に記載された個々の特徴および2つ以上のそのような特徴の任意の組み合わせを単独で、本明細書に開示された問題を解決するか否かにかかわらず、また特許請求の範囲に限定されることなく、当業者の共通の一般知識に照らして、そのような特徴または組み合わせが全体として本明細書に基づいて実行されることができる範囲で、開示する。本出願人は、本発明の態様が、任意のそのような個々の特徴または特徴の組み合わせからなり得ることを示す。上記の説明を考慮すると、本発明の範囲内で様々な変更を行うことができることが当業者には明らかであろう。
Claims (15)
- ネットワークインターフェースデバイスであって、
前記ネットワークインターフェースデバイスとホストデバイスとの間の少なくとも1つのバスによるデバイスインターフェースを提供するように構成されているプログラマブルインターフェースを備え、前記プログラマブルインターフェースは、複数の異なるタイプのデバイスインターフェースをサポートするようにプログラム可能である、ネットワークインターフェースデバイス。 - 前記プログラマブルインターフェースは、デバイスインターフェースの少なくとも2つのインスタンスを同時にサポートするように構成される、請求項1に記載のネットワークインターフェースデバイス。
- 前記プログラマブルインターフェースは、共通ディスクリプタキャッシュを備え、前記共通ディスクリプタキャッシュは、前記複数のデバイスインターフェースインスタンスのトランザクションのそれぞれのエントリを記憶するように構成されている、請求項2に記載のネットワークインターフェースデバイス。
- 前記共通ディスクリプタキャッシュ内のエントリは、
ポインタ情報、
アダプタインスタンスおよび/もしくは不透明エンドポイントインデックス、または
メタデータ
のうちの1つ以上を含む、請求項3に記載のネットワークインターフェースデバイス。 - 前記メタデータは、
前記ポインタがポインタであるか、データ位置へのポインタであるか、またはさらなるポインタへのポインタであるかの指示、
前記エントリの少なくとも一部分と関連付けられるサイズ、
前記エントリと関連付けられるアダプタの指示、
1つ以上のキューの指示、および
1つ以上のキュー内の位置
のうちの1つ以上を含む、請求項4に記載のネットワークインターフェースデバイス。 - 前記共通ディスクリプタキャッシュは、
異なるデバイスインターフェースインスタンスと関連付けられる異なるパーティションによって少なくとも部分的に区分化されること、
異なるデバイスインターフェースインスタンス間で共有されること、
各デバイスインターフェースインスタンスに保証されたキャッシュ予約を提供すること、および
デバイスインターフェースのエンドポイントインスタンスに保証された数のディスクリプタを提供すること
のうちの1つ以上を行うように構成されている、請求項3~5のいずれか1項に記載のネットワークインターフェースデバイス。 - 前記共通ディスクリプタキャッシュは、それぞれのデバイスインターフェースと関連付けられるドアベルのドアベル処理、またはそれぞれのデバイスインターフェースと関連付けられるデータの到来のうちの1つ以上に応答して、1つ以上のデバイスインターフェースの1つ以上のディスクリプタをプリフェッチするように構成されている、請求項3~6のいずれか1項に記載のネットワークインターフェースデバイス。
- 前記プログラマブルインターフェースは、複数の異なるデバイスインターフェースインスタンスのために前記少なくともバスへのアクセスをスケジュールするように構成されているスケジューラを備える、請求項2~7のいずれか1項に記載のネットワークインターフェースデバイス。
- 前記プログラマブルインターフェースは、各デバイスインターフェースインスタンスに、それぞれのデバイスインターフェースアダプタを提供するように構成されている、請求項2~8のいずれか1項に記載のネットワークインターフェースデバイス。
- それぞれのデバイスインターフェースアダプタがDMAエンジンを備える、請求項9に記載のネットワークインターフェースデバイス。
- 前記プログラマブルインターフェースは、
前記少なくとも2つのデバイスインターフェースインスタンスによって共有されるDMAエンジン、
前記少なくとも2つのデバイスインターフェースインスタンスによって共有されるドアベル機能、および
前記少なくとも2つのデバイスインターフェースインスタンスによって共有されるアドレス変換サービス
のうちの少なくとも1つを提供するように構成されている、請求項2~10のいずれか1項に記載のネットワークインターフェースデバイス。 - 前記複数のタイプのデバイスインターフェースのうちの少なくとも2つが、異なるキュー構造タイプのうちの1つ以上および異なるセマンティクスまたはコマンドのうちの1つ以上と関連付けられる、先行する請求項のいずれか1項に記載のネットワークインターフェースデバイス。
- 前記プログラマブルインターフェースは、前記少なくとも1つのバスの1つ以上の異なるバスプロトコルをサポートするように構成されている、先行する請求項のいずれか1項に記載のネットワークインターフェースデバイス。
- 前記プログラマブルインターフェースは、前記異なるタイプのデバイスインターフェースのうちの1つ以上をサポートするようにプログラム可能な1つ以上のテンプレート機能を備える、先行する請求項のいずれか1項に記載のネットワークインターフェースデバイス。
- 前記ネットワークインターフェースデバイスが動作している間、前記プログラマブルインターフェースは、
少なくとも1つのデバイスインターフェースインスタンスを削除すること、
少なくとも1つのデバイスインターフェースインスタンスを追加すること、または
少なくとも1つのデバイスインターフェースインスタンスから少なくとも1つの他のデバイスインターフェースインスタンスへと切り替えること
のうちの少なくとも1つを行うように構成されている、先行する請求項のいずれか1項に記載のネットワークインターフェースデバイス。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/525,313 | 2019-07-29 | ||
US16/525,313 US11138116B2 (en) | 2019-07-29 | 2019-07-29 | Network interface device supporting multiple interface instances to a common bus |
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 (2)
Publication Number | Publication Date |
---|---|
JP2022542998A true JP2022542998A (ja) | 2022-10-07 |
JPWO2021021946A5 JPWO2021021946A5 (ja) | 2023-07-18 |
Family
ID=72087249
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2022506252A Pending JP2022542998A (ja) | 2019-07-29 | 2020-07-29 | ホストコンピューティングデバイスおよびネットワークインターフェースデバイスを備えるプログラマブルネットワークインターフェースデバイス |
Country Status (6)
Country | Link |
---|---|
US (2) | US11138116B2 (ja) |
EP (1) | EP4004753B1 (ja) |
JP (1) | JP2022542998A (ja) |
KR (1) | KR20220035242A (ja) |
CN (1) | CN114175005A (ja) |
WO (1) | WO2021021946A1 (ja) |
Families Citing this family (4)
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)
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 |
EP2574000B1 (en) | 2011-09-22 | 2020-04-08 | Xilinx, 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 |
-
2019
- 2019-07-29 US US16/525,313 patent/US11138116B2/en active Active
-
2020
- 2020-07-29 EP EP20757119.1A patent/EP4004753B1/en active Active
- 2020-07-29 KR KR1020227005596A patent/KR20220035242A/ko unknown
- 2020-07-29 CN CN202080054975.6A patent/CN114175005A/zh active Pending
- 2020-07-29 JP JP2022506252A patent/JP2022542998A/ja active Pending
- 2020-07-29 WO PCT/US2020/044091 patent/WO2021021946A1/en unknown
-
2021
- 2021-10-04 US US17/493,694 patent/US11693777B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
US20210034526A1 (en) | 2021-02-04 |
EP4004753A1 (en) | 2022-06-01 |
US11138116B2 (en) | 2021-10-05 |
US20220027273A1 (en) | 2022-01-27 |
CN114175005A (zh) | 2022-03-11 |
WO2021021946A1 (en) | 2021-02-04 |
EP4004753B1 (en) | 2023-12-13 |
US11693777B2 (en) | 2023-07-04 |
KR20220035242A (ko) | 2022-03-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11693777B2 (en) | Network interface device supporting multiple interface instances to a common bus | |
US10375022B2 (en) | Cooperated approach to network packet filtering | |
US9286472B2 (en) | Efficient packet handling, redirection, and inspection using offload processors | |
US9875208B2 (en) | Method to use PCIe device resources by using unmodified PCIe device drivers on CPUs in a PCIe fabric with commodity PCI switches | |
US9276875B2 (en) | Cooperated approach to network packet filtering | |
US9280290B2 (en) | Method for steering DMA write requests to cache memory | |
US9639464B2 (en) | Application-assisted handling of page faults in I/O operations | |
US10298496B1 (en) | Packet processing cache | |
CN115481071A (zh) | 针对计算机总线的非投递式写事务 | |
US20170177528A1 (en) | Architecture for software defined interconnect switch | |
US20140201390A1 (en) | Network Overlay System and Method Using Offload Processors | |
US7721023B2 (en) | I/O address translation method for specifying a relaxed ordering for I/O accesses | |
US10713083B2 (en) | Efficient virtual I/O address translation | |
US8706942B2 (en) | Direct memory access (DMA) address translation between peer-to-peer input/output (I/O) devices | |
US20130054896A1 (en) | System memory controller having a cache | |
US10659555B2 (en) | Network interface device and host processing device | |
TW201030623A (en) | Providing multiple virtual device controllers by redirecting an interrupt from a physical device controller | |
US11429438B2 (en) | Network interface device and host processing device | |
US10802828B1 (en) | Instruction memory | |
US8966149B2 (en) | Emulation of an input/output advanced programmable interrupt controller | |
JPWO2021021946A5 (ja) |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20230707 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20230707 |