JP2024512366A - ネットワークインターフェースデバイス - Google Patents
ネットワークインターフェースデバイス Download PDFInfo
- Publication number
- JP2024512366A JP2024512366A JP2023554776A JP2023554776A JP2024512366A JP 2024512366 A JP2024512366 A JP 2024512366A JP 2023554776 A JP2023554776 A JP 2023554776A JP 2023554776 A JP2023554776 A JP 2023554776A JP 2024512366 A JP2024512366 A JP 2024512366A
- Authority
- JP
- Japan
- Prior art keywords
- data
- packets
- hub
- packet
- memory
- 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
- 230000015654 memory Effects 0.000 claims abstract description 132
- 238000012545 processing Methods 0.000 claims abstract description 85
- 238000013500 data storage Methods 0.000 claims abstract description 53
- 230000004044 response Effects 0.000 claims abstract description 40
- 238000000034 method Methods 0.000 claims description 52
- 230000008569 process Effects 0.000 claims description 36
- 239000002775 capsule Substances 0.000 description 58
- 230000006870 function Effects 0.000 description 51
- 239000000872 buffer Substances 0.000 description 37
- 230000032258 transport Effects 0.000 description 32
- 238000002955 isolation Methods 0.000 description 26
- 239000004744 fabric Substances 0.000 description 16
- 238000005538 encapsulation Methods 0.000 description 11
- 238000011144 upstream manufacturing Methods 0.000 description 11
- 238000004891 communication Methods 0.000 description 10
- 230000009471 action Effects 0.000 description 9
- 230000005540 biological transmission Effects 0.000 description 9
- 239000008186 active pharmaceutical agent Substances 0.000 description 8
- 238000000926 separation method Methods 0.000 description 6
- 238000010586 diagram Methods 0.000 description 5
- 238000007726 management method Methods 0.000 description 5
- 238000004458 analytical method Methods 0.000 description 4
- 238000006243 chemical reaction Methods 0.000 description 4
- 238000001152 differential interference contrast microscopy Methods 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 4
- 230000010354 integration Effects 0.000 description 4
- 238000012546 transfer Methods 0.000 description 4
- 230000001133 acceleration Effects 0.000 description 3
- 230000008901 benefit Effects 0.000 description 3
- 230000000903 blocking effect Effects 0.000 description 3
- 238000002347 injection Methods 0.000 description 3
- 239000007924 injection Substances 0.000 description 3
- 230000006855 networking Effects 0.000 description 3
- 230000002093 peripheral effect Effects 0.000 description 3
- 230000011218 segmentation Effects 0.000 description 3
- 238000013459 approach Methods 0.000 description 2
- 230000003139 buffering effect Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000001914 filtration Methods 0.000 description 2
- 238000003780 insertion Methods 0.000 description 2
- 230000037431 insertion Effects 0.000 description 2
- 238000011068 loading method Methods 0.000 description 2
- 230000003863 physical function Effects 0.000 description 2
- 230000004224 protection Effects 0.000 description 2
- 230000007704 transition Effects 0.000 description 2
- 238000012795 verification Methods 0.000 description 2
- 208000037004 Myoclonic-astatic epilepsy Diseases 0.000 description 1
- WGZDBVOTUVNQFP-UHFFFAOYSA-N N-(1-phthalazinylamino)carbamic acid ethyl ester Chemical compound C1=CC=C2C(NNC(=O)OCC)=NN=CC2=C1 WGZDBVOTUVNQFP-UHFFFAOYSA-N 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000004888 barrier function Effects 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000001427 coherent effect Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000013523 data management Methods 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000018109 developmental process Effects 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000002372 labelling Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 239000000463 material Substances 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000000874 microwave-assisted extraction Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000003362 replicative effect Effects 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/22—Parsing or analysis of headers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/067—Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/10—Flow control; Congestion control
- H04L47/34—Flow control; Congestion control ensuring sequence integrity, e.g. using sequence numbers
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1097—Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/30—Definitions, standards or architectural aspects of layered protocol stacks
- H04L69/32—Architecture of open systems interconnection [OSI] 7-layer type protocol stacks, e.g. the interfaces between the data link level and the physical level
- H04L69/322—Intralayer communication protocols among peer entities or protocol data unit [PDU] definitions
- H04L69/326—Intralayer communication protocols among peer entities or protocol data unit [PDU] definitions in the transport layer [OSI layer 4]
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer Security & Cryptography (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
ネットワークインターフェースデバイスは、複数のデータパケットを含むストレージ応答を受信するように構成された入力を備え、1つ以上の複数のパケットは、ヘッダ部分及び記憶されるデータを含み、ヘッダ部分は、トランスポートプロトコルヘッダ及びデータストレージアプリケーションヘッダを含む。第1のパケットプロセッサは、前述の複数のパケットのうちの2つ以上を受信し、受信されたパケットのトランスポートプロトコル処理を実行して、トランスポートプロトコル処理されたパケットを提供するように構成されている。トランスポートプロトコル処理されたパケットを第1のパケットプロセッサから受信し、受信されたパケットの記憶されるデータをメモリに書込み、データストレージアプリケーションヘッダ、及びデータが書込まれたメモリ内の場所へのポインタを提供するように構成されている第2のパケットプロセッサ。【選択図】図1
Description
本出願は、ネットワークインターフェースデバイスに関する。
ネットワークインターフェースデバイスは、知られており、典型的には、コンピューティングデバイスとネットワークとの間のインターフェースを提供するために使用される。いくつかのネットワークインターフェースデバイスは、ネットワークから受信されるデータを処理するように、かつ/又はネットワーク上に置くデータを処理するように構成することができる。
いくつかのネットワークインターフェースデバイスについては、具体的なアプリケーション及び/又は増加するデータレートのサポートに向けて、設計の高度な特殊化を提供しようとする動きがあり得る。
開示されるネットワークインターフェースデバイスは、複数のデータパケットを含むストレージ応答を受信するように構成された入力であって、1つ以上の複数のパケットが、ヘッダ部分及び記憶されるデータを含み、前述のヘッダ部分が、トランスポートプロトコルヘッダ及びデータストレージアプリケーションヘッダを含む、入力と、前述の複数のパケットのうちの2つ以上を受信し、受信されたパケットのトランスポートプロトコル処理を実行して、トランスポートプロトコル処理されたパケットを提供するように構成された第1のパケットプロセッサと、トランスポートプロトコル処理されたパケットを第1のパケットプロセッサから受信し、受信されたパケットの記憶されるデータをメモリに書込み、データストレージアプリケーションヘッダ、及びデータが書込まれたメモリ内の場所へのポインタを提供するように構成された第2のパケットプロセッサと、を備える。
ネットワークインターフェースデバイスは、トランスポートプロトコル処理アプリケーションの少なくとも一部をサポートするように構成され得、第2のパケットプロセッサは、トランスポートプロトコルヘッダ、データストレージアプリケーションヘッダ、及びデータが書込まれたメモリ内の場所へのポインタを、トランスポートプロトコル処理アプリケーションに提供するように構成されている。
ネットワークインターフェースデバイスは、データストレージアプリケーションの少なくとも一部をサポートするように構成され得る。
データストレージアプリケーションは、CEPHアプリケーション、NVMeアプリケーション、及び分散オブジェクトストアアプリケーションのうちの1つ以上を含み得る。
ネットワークインターフェースデバイスは、仮想化ストレージバックエンド機能を備え得、前述の仮想化ストレージバックエンド機能は、ホストからストレージ要求を受信するように構成されている。
データストレージアプリケーションが実行するように構成されているオペレーティングシステムは、対応するストレージ要求を行うブロックストレージアプリケーションのオペレーティングシステムとは異なるオペレーティングシステムであり得る。
データストレージアプリケーションは、ユーザ空間ネットワークスタックを介してネットワークにアクセスするように構成され得る。
データストレージアプリケーションは、ユーザスペースストレージスタックを介して、データ空間アプリケーションに関連付けられたローカルストレージにアクセスするように構成され得る。
データストレージアプリケーションは、ユーザ空間ストレージスタックを介した直接メモリアクセスを使用してデータを移動させるように構成され得る。
複数のデータパケットは、データストレージアプリケーション読取り応答によって提供され、前述の読取り応答は、データストレージアプリケーションの読取り要求に応答して提供される。
ネットワークインターフェースデバイスは、ネットワークとのインターフェースを提供するネットワークインターフェースを備え得、前述のネットワークインターフェースは、ネットワークから前述の読取り応答を受信するように構成されている。
ネットワークインターフェースデバイスは、ホストコンピュータとのインターフェースを提供するホストコンピュータインターフェースを備え得、前述のホストインターフェースは、ホストコンピュータから読取り要求を受信するように構成されている。
第1のパケットプロセッサは、受信されたパケットのうちの1つ以上が順不同であるかどうかを判定するように構成され得、1つ以上の受信されたパケットが順不同であると判定されたとき、第1のパケットプロセッサは、それぞれの順不同パケットを関連付けられた指示とともに第2のパケットプロセッサに提供するように構成され得る。
第2のパケットプロセッサは、それぞれの順不同パケットのデータを、そのデータをメモリに記憶することなくトランスポートプロトコル処理アプリケーションに送るように構成され得る。
第2のパケットプロセッサは、それぞれの順不同パケットのデータストレージアプリケーションヘッダ、それぞれの順不同パケットのトランスポートプロトコルヘッダ、及びそれぞれの順不同パケットのデータを、そのデータをメモリに記憶することなく、トランスポートプロトコル処理アプリケーションに送るように構成され得、メモリ内の場所へのポインタは提供されない。
ネットワークインターフェースデバイスは、トランスポートプロトコルアプリケーションを含み得、前述のトランスポートプロトコルアプリケーションは、順不同パケットが複数のパケット内の順序通りの位置において注入されるように、それぞれの順不同パケットを入力に提供させるように構成されている。
第1のパケットプロセッサは、注入されたパケットを処理し、出力を第2のパケットプロセッサに提供するように構成され得、前述の第2のパケットプロセッサは、注入されたパケットの記憶されるデータをメモリに書込むように構成されている。
第2のパケットプロセッサは、それぞれの順不同パケットのデータをメモリに書込むように構成され得る。
ネットワークインターフェースデバイスは、トランスポートプロトコルアプリケーションを含み得、前述のトランスポートプロトコルアプリケーションは、順不同パケットに基づくパケットを、入力によって受信された複数のパケット内に、複数のパケットに対して順序通りの位置に注入させるように構成されており、前述の注入されたパケットは、トランスポートプロトコルヘッダと、データストレージアプリケーションヘッダと、データが書込まれたメモリ内の場所へのポインタと、を含む。
ネットワークインターフェースデバイスは、トランスポートプロトコルアプリケーションを含み得、前述のトランスポートプロトコルアプリケーションは、2つ以上のパケットが順序通りであるかどうかを判定するように構成され、2つ以上のパケットが順序通りでないと判定されたとき、トランスポートプロトコルアプリケーションは、順不同パケットに基づくパケットを、前述の入力内に、データのパケットのうちの他のパケットに対して正しい位置に注入させるように構成され得る。
ネットワークインターフェースデバイスは、データストレージアプリケーションのクライアントを備え得、データストレージアプリケーションの前述のクライアントは、トランスポートプロトコル処理アプリケーションから、パケットのためのデータストレージアプリケーションヘッダと、メモリ内の場所への関連付けられたポインタとをフェッチし、関連付けられた出力を提供するように構成されている。
データストレージアプリケーションのクライアントによって提供される関連付けられた出力は、メモリからホストコンピュータデバイスのホストメモリへのデータの直接メモリアクセスを引き起こすように構成され得る。
ネットワークインターフェースデバイスは、仮想化ストレージバックエンド機能を備え得、前述の仮想化ストレージバックエンド機能は、メモリからホストコンピュータデバイスのホストメモリへのデータの直接メモリアクセスを引き起こすように構成されている。
トランスポートプロトコルは、TCPを含み得る。
メモリは、DDRメモリであり得る。
ネットワークインターフェースデバイスは、記憶されるデータが書込まれるメモリを備え得る。
この概要セクションは、ある概念を単に紹介するために提供され、特許請求される主題の任意の重要な又は本質的な特徴を識別するために提供されるわけではない。本発明の装置の他の特徴は、添付図面から、かつ以下の詳細な説明から明らかになるであろう。
いくつかの実施形態は、添付の図面においてほんの一例として例解される。しかしながら、図面は、示された特定の実装形態のみに配置を限定するものと解釈されるべきではない。以下の詳細な説明を検討し、図面を参照すれば、様々な態様及び利点が明らかになるであろう。
ネットワークインターフェースデバイスを介してネットワークに結合されたデータ処理システムの概略図を示す。
いくつかの実施形態のネットワークインターフェースデバイスを示す。
いくつかの実施形態のネットワークインターフェースデバイスのサブシステムを概略的に示す。
いくつかの実施形態のホスト及びネットワークインターフェースデバイスの概略図を示す。
いくつかの実施形態のネットワークインターフェースデバイスのストリーミングサブシステムの一実施例を示す。
いくつかの実施形態のネットワークインターフェースデバイスのストリーミングサブシステムの別の実施例を示す。
いくつかの実施形態のアップストリームハブ及びダウンストリームハブを有するストリーミングプロセッサを概略的に示す。
ストリーミングサブシステムにおいて追加の処理を提供するために使用されるプラグインの一実施例を示す。
ストリーミングサブシステム内の構成要素を置換するためにプラグインが使用される別の実施例を示す。
いくつかの実施形態で使用されるカプセルを示す。
いくつかの実施形態で使用されるハブアーキテクチャの概略図を示す。
イングレスプラグインインターフェース統合の一実施例を示す。
エグレスプラグインインターフェース統合の例を示す。
ストリーミングサブシステムのキャッシュサブシステムの目的変更を示す。
いくつかの実施形態のネットワークインターフェースデバイスの異なる信頼ドメインを示す。
2つの信頼エリアが、一方が他方から切り離されていることを示す。
異なる特権レベルを有する2つの信頼エリアの実施例を示す。
同じ特権レベルを有する2つの信頼エリアの実施例を示す。
いくつかの実施形態のネットワークインターフェースデバイス上のデータストレージ仮想化の実施例を示す。
図13の例示的なネットワークインターフェースデバイスの一部をより詳細に示す。
いくつかの実施形態の方法を示す。
いくつかの実施形態の別の方法を示す。
いくつかの実施形態の別の方法を示す。
本開示は、新規特徴を定義する特許請求の範囲で締めくくられているが、本開示内に説明される様々な特徴は、図面と併せて説明を考慮することにより、より良く理解されると考えられる。本明細書に説明されるプロセス、機械、製造、及びそれらの任意の変形は、例解の目的で提供される。本開示内に説明される具体的な構造的詳細及び機能的詳細は、限定として解釈されるものではなく、単に特許請求の範囲の基礎として、かつ実質的に任意の適切に詳細な構造において説明される特徴を様々に採用するように、当業者に対して教示するための代表的な基礎として解釈されるものである。更に、本開示内で使用される用語及び語句は、限定することを意図するものではなく、説明される特徴の理解可能な説明を提供することを意図するものである。
データがデータチャネルを介して2つのデータ処理システム間で転送されるときに、データ処理システムの各々は、チャネルにわたって通信することを許可する適切なネットワークインターフェースを有する。データチャネルは、ネットワークによって提供され得る。例えば、ネットワークは、イーサネット技術又は任意の他の好適な技術に基づき得る。データ処理システムには、ネットワークプロトコルの物理的及び論理的要件をサポートすることができるネットワークインターフェースが提供され得る。ネットワークインターフェースの物理的ハードウェア構成要素は、ネットワークインターフェースデバイス又はネットワークインターフェースカード(network interface card、NIC)と呼ばれる。本明細書では、ネットワークインターフェースデバイスをNICと呼ぶ。NICは、集積回路又はハードウェアモジュールなどの任意の好適なハードウェアの形態で提供され得ることを理解されたい。NICは、必ずしもカードの形態で実装されるとは限らない。
コンピュータシステムは、ユーザレベルアプリケーションがネットワークと通信するためのオペレーティングシステム(operating system、OS)を有し得る。カーネルとして知られているオペレーティングシステムの部分は、アプリケーションとNICに固有のデバイスドライバとの間でコマンド及びデータを変換するためのプロトコルスタックと、NICを直接制御するためのデバイスドライバとを含む。これらの機能をオペレーティングシステムカーネル内に提供することによって、NICの複雑さ及びNIC間の違いをユーザレベルアプリケーションから隠すことができる。加えて、ネットワークハードウェア及び他のシステムリソース(メモリなど)を多くのアプリケーションで安全に共有することができ、欠陥のあるアプリケーション又は悪意のあるアプリケーションからシステムを守ることができる。
ネットワークにわたって送信を実行するための典型的なデータ処理システム100を、図1に示す。データ処理システム100は、ホストをネットワーク103にインターフェース接続するように配置されているNIC109に結合されたホストコンピューティングデバイス101を備える。ホストコンピューティングデバイス101は、1つ以上のユーザレベルアプリケーション105をサポートするオペレーティングシステム104を含む。ホストコンピューティングデバイス101はまた、ネットワークプロトコルスタック(図示せず)を含み得る。ネットワークプロトコルスタックは、送信制御プロトコル(Transmission Control Protocol、TCP)スタック又は任意の他の好適なプロトコルスタックであり得る。プロトコルスタックは、トランスポートプロトコルスタックであり得る。
アプリケーション105は、ソケットを開き、ソケットに対してデータを読み書きすることによって、TCP/IP(インターネットプロトコル)メッセージを送り、かつ受信し得、オペレーティングシステム104は、ネットワークにわたってメッセージを伝送させる。
いくつかのシステムは、プロトコルスタックをNIC109に少なくとも部分的にオフロードし得る。例えば、スタックがTCPスタックである場合、NIC109は、TCPプロトコル処理を実行するためのTCPオフロードエンジン(TCP Offload Engine、TOE)を備え得る。ホストコンピューティングデバイス101ではなく、NIC109においてプロトコル処理を実行することによって、ホストシステム101のプロセッサ(複数可)に対する要求が減少し得る。ネットワークを介して送信されるデータは、カーネルTCP/IPスタックを完全にバイパスして、TOE対応仮想インターフェースドライバを介してアプリケーション105によって送られ得る。したがって、この高速経路に沿って送られたデータは、TOEドライバの要件を満たすようにフォーマットされる必要があるだけである。
ホストコンピューティングデバイス101は、1つ以上のプロセッサ及び1つ以上のメモリを備え得る。いくつかの実施形態では、ホストコンピューティングデバイス101及びNIC109は、バス、例えば、周辺構成要素相互接続エクスプレス(peripheral component interconnect express、PCIeバス)を介して通信し得る。
データ処理システムの動作中、ネットワーク上に送信されるデータは、送信のためにホストコンピューティングデバイス101からNIC109に転送され得る。一実施例において、データパケットは、ホストプロセッサによってホストからNICに直接転送され得る。ホストは、NIC109上に位置する1つ以上のバッファ106にデータを提供し得る。次いで、NIC109は、データパケットを準備し、それらをネットワーク103を介して送信し得る。
代替的に、データは、ホストシステム101内のバッファ107に書込まれ得る。いくつかのシステムは、これらのデータ転送機構の両方をサポートし得る。次いで、データは、NICによってバッファ107から取り出され、ネットワーク103を介して送信され得る。
これらの場合の両方において、データは、ネットワークを介して送信される前に、1つ以上のバッファ内に一時的に記憶され得る。
データ処理システムはまた、NIC109を介してネットワークからデータを受信し得る。
データ処理システムは、サーバ、パーソナルコンピュータ、又はハンドヘルドデバイスなど、任意のタイプのコンピューティングデバイスであり得る。いくつかの実施形態は、イーサネットを介してTCP/IPを動作させるネットワークにおける使用に好適であり得る。他の実施形態では、1つ以上の異なるプロトコルが使用され得る。実施形態は、有線又は無線の任意の好適なネットワークとともに使用され得る。
いくつかの実施形態のNIC109を示す図2aを参照する。ネットワークインターフェースは、1つ以上の集積回路によって少なくとも部分的に提供され得る。代替的に、NICは、より大きな集積回路の一部であり得る。NIC109は、単一のハードウェアモジュールによって、又は2つ以上のハードウェアモジュールによって提供され得る。NICは、メインCPUの前にネットワーク接続CPUを提供し得る。NICは、ホストCPUとネットワークとの間のデータ経路上に位置する。
NICは、データの移動及び処理を最適化するために、特定用途向けパイプラインを提供するように構成可能であり得る。NICは、ネットワークのための高レベルプログラミング抽象化を統合し、加速を計算し得る。
いくつかの実施形態のNICは、テラビットクラスエンドポイントデバイスをサポートし得る。いくつかの実施形態は、テラビットデータレート処理をサポートすることが可能であり得る。例えば、NICは、テラビットデータレートでネットワークからデータを受信し、かつ/又はテラビットデータレートでネットワークにデータを置き得る。しかしながら、他の実施形態では、より低いデータレート、若しくは更に高いデータレートで動作及び/又はサポートし得ることを諒解されたい。
図2aの装置は、システムオンチップ(System-on-Chip、SoC)を提供するものとみなし得る。図2に示すSoCは、プログラマブル集積回路IC及び統合プログラマブルデバイスプラットフォームの一実施例である。図2の例では、NIC109の様々な異なるサブシステム又は領域は、単一の集積パッケージ内に提供された単一のダイ上に実装され得る。他の例では、様々なサブシステムは、単一の集積パッケージとして提供される複数の相互接続ダイ上に実装され得る。いくつかの実施形態では、図2のNIC109は、2つ以上のパッケージ、集積回路によって、又はチップレットによって提供され得る。
実施例では、NIC109は、異なる機能性を有する回路機構を有する複数の領域を含む。実施例では、NIC109は、1つ以上のCPU 111によって提供される処理システムを有する。NIC109は、ネットワークからデータを受信するため、かつ/又はデータをネットワーク上に置くための1つ以上の第1のトランシーバ116を有する。NIC109は、1つ以上の仮想スイッチ(vSwitch)又はプロトコルエンジン102を有し、これについては後でより詳細に説明する。プロトコルエンジンは、トランスポートプロトコルエンジンであり得る。この機能を、以下では仮想スイッチ機能と呼ぶ。NIC109は、1つ以上のMAC(medium access control、媒体アクセス制御)層機能114を有する。NIC109は、ホストからデータを受信するため、かつ/又はホストにデータを提供するための1つ以上の第2のトランシーバ110を有する。NIC109は、1つ以上のPCIe(周辺構成要素相互接続エクスプレス)インターフェース112を有する。
NICは、1つ以上のDMA(direct memory access、ダイレクトメモリアクセス)アダプタ117を有する。DMAアダプタは、メモリドメインとパケットストリーミングドメインとの間のブリッジを提供する。これは、メモリ間転送をサポートし得る。これについては、以下でより詳細に説明する。
NIC109は、1つ以上の処理コア108を備えるか、又はそれへのアクセスを有し得る。ほんの一例として、コアは、ARM処理コア及び/又は任意の他の好適な処理コアであり得る。
NIC109は、図2aにおいて網掛けされているネットワークオンチップ(network on chip、NoC)115を有する。これは、NIC109の異なる部分間の通信経路を提供し得る。NIC109上の構成要素のうちの2つ以上が、代替的又は追加的に、直接接続経路及び/又は専用の強化バスインターフェースを介して通信し得ることを諒解されたい。
NoC間のエリアは、1つ以上の構成要素を含み得る。例えば、エリアは、1つ以上のプログラマブルロジック(programmable logic、PL)ブロック113を収容し得る。このエリアは、ファブリックと呼ばれることもある。ほんの一例として、プログラマブルロジックブロックは、1つ以上のFPGA(Field programmable gate array、フィールドプログラマブルゲートアレイ)によって少なくとも部分的に提供され得る。エリアは、1つ以上のルックアップテーブルLUTを収容し得る。1つ以上の機能が、プログラマブルロジックブロックによって提供され得る。これらの機能のいくつかの実施例については後述する。このエリアにおける異なる機能に適応する能力は、同じNICが種々の異なるエンドユーザ要件を満たすために使用されることを可能にし得る。
他の実施形態では、任意の他の好適な通信装置が、NoCの代わりに、又はNoCに加えて、NIC上で使用され得ることを諒解されたい。
NICは、ホストデバイスとネットワークとの間のインターフェースを提供する。NICは、データがネットワークから受信されることを可能にする。そのデータは、ホストデバイスに提供され得る。いくつかの実施形態では、NICは、データがホストデバイスに提供される前にデータを処理し得る。いくつかの実施形態では、NICは、データがネットワークによって送信されることを可能にする。そのデータは、ホストデバイス及び/又はNICから提供され得る。いくつかの実施形態では、NICは、データがネットワークによって送信される前にデータを処理し得る。
仮想スイッチ102は、少なくとも部分的に強化されたデバイス又はNICの一部であり得る。
単一の仮想スイッチ又は2つ以上の別個の仮想スイッチが存在し得る。
仮想スイッチ102は、NoCを使用して、かつ/又は直接接続経路及び/若しくは専用の強化バスインターフェースを介して、チップ上の他のブロックと通信することができる。いくつかの実施形態では、これは、伝送されるデータの量に対するNoCの容量に依存し得る。NoCは、例えば、NIC109によるメモリアクセスのために使用され得る。NoC115は、例えば、CPU111、プロセッサ108、DMAアダプタ117及び/又はPCIeブロック112にデータを配信するために使用され得る。
いくつかの実施形態では、NoC及び/又は直接接続経路及び/又は専用の強化バスインターフェースは、後でより詳細に説明されるように、1つ以上のアクセラレータカーネル及び/又は他のプラグインにデータを配信するために使用され得る。いくつかの実施形態では、ルーティングはプログラマブルロジックを介する場合がある。これらのプラグインは、いくつかの実施形態では、プログラマブルロジック113によって提供され得る。
仮想スイッチ102は、NIC109のエッジ領域上に物理的に位置し、NIC109の様々な他の構成要素と通信し得る。いくつかの実施形態では、仮想スイッチ102は、MAC層機能114及び1つ以上の第1のトランシーバ116に物理的に近接して配置され得る。これらの構成要素は、NIC109のエッジ領域に物理的に近接して配置され得る。ネットワークからのデータは、1つ以上の第1のトランシーバ116によって受信される。
他の実施形態では、仮想スイッチ102、MAC層機能114及び1つ以上の第1のトランシーバ116は、NICのエッジ領域から物理的に離れて配置され得る。
いくつかの実施形態は、カスタマイズされたNIC機能が提供されることを可能にし得る。これは、具体的なNIC機能が必要とされる場合に有用であり得る。これは、特定のアプリケーション又は複数のアプリケーションのため、若しくはNICの特定の使用のためであり得る。これは、そのNIC機能をサポートするために必要とされるデバイスの量が比較的少ない場合に有用であり得る。代替的又は追加的に、これは、NICのカスタマイズが望まれる場合に有用であり得る。いくつかの実施形態は、フレキシブルNICを提供し得る。
カスタマイズは、PL113を使用して1つ以上の機能を提供することによってサポートされ得る。
いくつかの実施形態は、比較的高い日付レートをサポートするために使用され得る。
図2aのNICのサブシステム間の通信経路を概略的に示す図2bを参照する。ホストPCIeインターフェース112及びDMAコントローラ117は、メモリバスを介して通信する。DMAコントローラ117は、メモリバスを使用してメモリファブリック140を介して通信する。管理コントローラ130は、制御バスを使用してメモリファブリック140を介して制御プレーンメッセージを提供する。アプリケーションプロセッサ111は、メモリバスを使用してメモリファブリック140を介して通信する。データは、メモリバスを使用してメモリファブリックを介してDDRメモリ142で受信される。
DMAコントローラ117は、パケットバスを介して1つ以上の仮想スイッチ102と通信する。1つ以上の仮想スイッチは、パケット処理を提供し得る。1つ以上の仮想スイッチは、後でより詳細に説明するように、オフロード処理及び仮想スイッチングを実行し得る。1つ以上の仮想スイッチによって提供される処理は、1つ以上のプラグイン144を使用して修正され得、これは、一実施形態では、図2aのPLブロック113を使用して実装される。プラグインは、メモリバスを介してメモリファブリックと通信し、パケットバスを介して1つ以上の仮想スイッチと通信し得る。1つ以上の仮想スイッチは、パケットバスを介してMAC 114と通信し得る。
いくつかの実施形態では、データのカプセルを使用して、NIC内でデータを伝送し得る。これについては、以下でより詳細に説明する。
ホストデバイス101及びNIC109によってサポートされる機能ブロックの概略図を示す図3を参照する。NIC109は、仮想スイッチ機能102を備える。この仮想スイッチ機能102は、後でより詳細に説明するように、1つ以上のプラグインによって拡張可能である。
プラグインを有する仮想スイッチ機能102は、カスタムプロトコル及びスイッチアクションをサポートすることができる。
ホストデバイス101は、いくつかの仮想マシンVM122を備える。
いくつかのPCIe PF(物理機能)及び/又はVF(仮想機能)がサポートされ得る。PCIe機能118は、複数の仮想NIC(VNIC)を有し得る。各VNIC 126は、仮想スイッチ上の別個のポートに接続され得る。図3では、明確にするために、1つのPCIe機能及びPCIe機能の1つのVNICを示している。
各vNIC126は、1つ以上のVI(仮想インターフェース)127を有し得る。各VIは、パケットを送り、かつ受信するためのチャネルを提供し得る。各VIは、送信キューTxQ、受信キューRxQ及びイベントキューEvQを有し得る。仮想マシンと仮想機能との間には1対1の関係が存在し得る。いくつかの実施形態では、VF(又はPF)にマッピングされた複数のVIがあり得る。
いくつかの実施形態では、所与のPF又はVF内のVIのうちの1つは、機能管理インターフェースをサポートし得る。
仮想スイッチ102は、複数の仮想ポートを備える。ポートは、VNICのTxQからデータを受信し、VNICのRxQにデータを送信するように構成され得る。
仮想スイッチ102は、例えばCPU 111によって提供される1つ以上のアプリケーションCPU、仮想スイッチを制御するように構成されている管理コントローラ130、及び1つ以上のMAC層機能114とインターフェース接続するように構成されている。
いくつかの実施形態において、仮想スイッチは、先に考察したようなプラグインによって拡張可能である。プラグインの一実施例は、ハードウェアアクセラレータ128を備える。
NICによって提供されるいくつかの実施形態のストリーミングサブシステム200の実施例を示す図4aを参照する。
ストリーミングサブシステムの送信及び受信経路上にパイプラインが存在する。より詳細に説明されるように、エンドユーザアプリケーションにいくらかの柔軟性を提供するために、ストリーミングサブシステムは、1つ以上のプラグインが追加されることを可能にする。プラグインは、パイプラインのデータ経路に追加され得る。1つ以上のプラグインは、プログラマブルロジック113によって提供され得る。データパイプラインの他の構成要素は、強化されたロジックや回路によって提供され得る。強化されたロジック又は回路によって提供されるデータパイプラインの構成要素は、仮想スイッチ機能によって提供され得る。
プラグインを使用することにより、デバイスのカスタマイズが容易になる場合がある。これは、同じデバイスが異なるエンドユーザ又はアプリケーションのためにカスタマイズされることを可能にし得る。代替的又は追加的に、プラグインを使用することにより、同じデバイスアーキテクチャがいくつかの異なるアプリケーションに使用されることが可能となる。
データは、データ経路内のあるポイントにおいて出て、プラグインに進み、データ経路に再注入され得る。この再注入は、同じ又は別のプラグインを介する場合がある。データは、データ経路内に再注入される場合も、されない場合もある。これについては、以下でより詳細に説明する。
スケジューラは、データ経路に沿ったデータの移動を制御するために提供される。データ経路の各ステージは、スケジューラによって制御される。プラグインも、それぞれのスケジューラによってスケジューリングされる。スケジューラは、所与のプラグインの下流で競合し得るリソース(バッファなど)を管理する。これについては、以下でより詳細に説明する。スケジューラは、強化されたロジック又は回路によって提供され得る。
ストリーミングサブシステムは、複数のデータインターフェースをサポートし得る。いくつかの実施形態では、1つ以上のデータインターフェースは、全二重であり得る。これは、データインターフェースがイングレスとエグレスを半分ずつ有し得ることを意味する。いくつかの実施形態では、1つ以上のデータインターフェースは半二重であり得る。これは、データインターフェースがイングレス又はエグレスデータをサポートすることを意味する。イングレスは、ストリーミングサブシステム内へのデータの入力を指し、エグレスは、ストリーミングサブシステムからのデータの出力を指す。
データインターフェースは、構成要素間ストリーミングバス(inter-component streaming bus、ICSB)フォーマット又は任意の他の好適なバスフォーマットを使用し得る。
DMA(ダイレクトメモリアクセス)アダプタインターフェース202は、ストリーミングサブシステムとDMAエンジンとの間でデータを渡すために使用される。DMAアダプタインターフェースは、データインターフェースを提供する。いくつかの実施形態では、1つのDMAアダプタが存在し得る。他の実施形態では、複数のDMAアダプタが存在し得る。これについては、後で詳細に説明する。
図4aに示す実施例では、「ホストからカードへ」のH2Cデータフロー、すなわちホストコンピュータからNICへのデータフロー用の1つのDMAアダプタインターフェース202が示されている。いくつかの実施形態では、1つよりも多いH2C DMAアダプタが提供され得る。これは、例えば、要求されるデータ速度及び/又はNIC上の利用可能なエリアに依存し得る。いくつかの実施形態において、2つのH2C DMAアダプタが提供され得る。他の実施形態では、1つのH2C DMAアダプタが提供され得る。いくつかの実施形態では、2つよりも多いH2C DMAアダプタが提供される。
C2Hインターフェース用の1つのDMAアダプタインターフェース204が提供され得る。C2Hは、「カードからホストへ」のデータフロー、すなわちNICからホストコンピュータである。DMAアダプタインターフェースは、データをNoC(又はファブリック)上に置く場合がある。
いくつかの実施形態において、C2Hアダプタの数は、H2C DMAアダプタの数と同じになる。いくつかの実施形態では、C2Hアダプタインターフェースの数は、H2C DMAアダプタインターフェースの数と異なることになる。
いくつかの実施形態では、単一のDMAアダプタが、C2Hデータフロー並びにH2Cデータフローをサポートし得る。これは、それぞれのDMAアダプタインターフェース又は共有アダプタインターフェースによってサポートされ得る。他の実施形態では、C2HデータフローのためのDMAアダプタは、H2CデータフローのためのDMAアダプタとは異なり得る。これは、それぞれのDMAアダプタインターフェースによってサポートし得る。
DMAは、図2bに概略的に示すように、メモリドメインとパケットストリーミングドメインとの間のブリッジを提供する。いくつかの実施形態では、DMAはメモリ間転送をサポートし得る。このいくつかの実施例については、後でより詳細に説明する。
DMAは、ホストからNICへのコマンドのための記述子リングと、NICからホストへの通知のための完了リングとを使用し得る。DMAは、メモリの読取り及びメモリへの書込みをサポートし得る。メモリは、少なくとも部分的にホスト内に設けられ得る。
いくつかの実施形態では、1つよりも多いタイプのDMAアクセスがサポートされ、それをサポートするために専用キャプチャインターフェースを必要とする場合がある。例えば、Virtio(VirtIOと呼ばれることもある)のような標準化されたアプローチ、及び/又はベンダ固有のアプローチ及び/又はカスタマイズされたアプローチをサポートするアダプタが存在し得る。
H2C DMAアダプタインターフェース202の出力は、第1のハブ252に提供される。第1のハブ252は、H2C DMAアダプタインターフェース202とVNIC-TX(仮想NIC送信)エンジン240との間に設けられる。いくつかの実施形態では、ハブは、少なくとも1つのストリーミングインバウンドプラグイン及び/又は少なくとも1つのストリーミングアウトバウンドプラグインをサポートすることができる。これにより、ユーザは、各エンジンの前及び/又は後にデータストリームにアクセスすることが可能になり得る。ハブは、強化されたロジック又は回路によって提供され得る。
2つ以上のH2C DMAアダプタインターフェース202が設けられている場合、1つのハブを使用して、それらをサポートし得ることを諒解されたい。
H2C DMAは、メモリから1つ以上のパケットを収集し、それらをアダプタ202を介して第1のハブ252にストリーミングするように構成されている。これは、第1のスケジューラ203aの制御下に置かれる。
第1のスケジューラ203aは、出力されるデータをH2C DMAアダプタによって通知され、H2C DMAアダプタにジョブ要求を発行し得る。
第1のハブ252は、1つ以上の第1のエグレスプラグイン214aを有する。1つのH2C DMAアダプタが存在する場合、1つのエグレスプラグインが存在し得る。2つのH2C DMAアダプタが存在する場合、2つのエグレスプラグインが存在し得る。これは、ホストからプラグイン(H2P)への接続性を提供する。他の実施形態では、DMAアダプタと比較して異なる数のエグレスプラグインが存在し得る。
第1のハブ252は、1つ以上の第2のイングレスプラグイン214bを有する。これは、プラグインから仮想NIC(TX)エンジン(P2VNT)への接続性を提供する。1つのH2C DMAアダプタがある場合、1つのイングレスプラグインが存在し得る。2つのH2C DMAアダプタが存在する場合、2つのイングレスプラグインが存在し得る。他の実施形態では、DMAアダプタと比較して異なる数のイングレスプラグインが存在し得る。
2つの半バス幅データインターフェースがある場合、第1のハブは、全バス幅データ出力を提供するために、受信されたデータを処理するように構成され得る。プラグインインターフェースは、プラグインが作られるポイントにおけるパイプラインの総帯域幅をサポートし得る。実装形態に応じて、これは、単一のバスインターフェース又はより狭いバスの集合体であり得る。DMAアダプタは、NoCによって、又はファブリックを介してアクセスされ得る。
第2のスケジューラ203bは、第1のハブ252によるデータの出力を制御するように構成されている。
第1のハブ252は、VNIC-TX(仮想NIC送信)エンジン240に出力を提供する。VNIC-TXエンジン240は、ホストインターフェースを通じて、DMAアダプタを介してドライバによって送られたパケット、及び/又はイングレスインターフェースを介して受信されたパケットを処理し、ドライバに代わって以下の機能のうちの1つ以上を実行することができる。
-チェックサムオフロード
-VLAN(仮想ローカルエリアネットワーク)挿入オフロード
-パケット検証(例えば、ソースアドレス、ファイアウォール及び/又は同様のものを実施する)。
-チェックサムオフロード
-VLAN(仮想ローカルエリアネットワーク)挿入オフロード
-パケット検証(例えば、ソースアドレス、ファイアウォール及び/又は同様のものを実施する)。
他の実施形態では、1つ以上の代替機能又は追加機能を実行し得る。
VNIC-TXエンジンは、第2のハブ254にデータを出力するように構成されている。
第2のハブ254は、1つ又は2つのエグレスプラグイン214cを有する。これは、仮想NIC(TX)エンジンからプラグインVNT2Pへの接続性を提供する。1つのH2C DMAアダプタ204が存在する場合、1つのエグレスプラグインが存在し得る。2つのH2C DMAアダプタが存在する場合、2つのエグレスプラグインが存在し得る。他の実施形態では、DMAアダプタと比較して異なる数のエグレスプラグインが存在し得る。
第2のハブ254は、1つ又は2つのイングレスプラグイン214dを有する。これは、プラグインからホスト側からのMAE(match action engine、マッチアクションエンジン)244(P2HMAE)への接続性を提供する。
1つのH2C DMAアダプタ204が存在する場合、1つのイングレスプラグインが存在し得る。2つのH2C DMAアダプタが存在する場合、2つのイングレスプラグインが存在し得る。他の実施形態では、DMAアダプタと比較して異なる数のイングレスプラグインが存在し得る。
第3のスケジューラ203cは、第2のハブ254によるデータの出力を制御するように構成されている。
第2のハブは、MAE 244に出力を提供する。MAE 244は、いくつかの実施形態では、ストリーミングサブシステムのために提供されるキャッシングサブシステム215を利用する。MAEは、解析一致アクション機能、カプセル化機能、及び/又はカプセル化解除機能など、任意の好適な機能を実行し得る。
MAEエンジンは、ルール駆動型解析一致アクションエンジンを用いて、仮想スイッチング機能を実装し得る。例えば、ルールはドライバによって提供される。各ルールは、一致基準のセットと、それらの基準を満たすパケットに適用するアクションのセットとを提供し得る。
MAEエンジンは、仮想スイッチング機能及び他のオフロードを実行し得る。これは、
パケットをイングレス仮想ポートからエグレス仮想ポートにマッピングすることと、
パケットを2つ以上のエグレスポートに複製することと、
カプセル化及びカプセル化解除と、
接続追跡及びNAT(ネットワークアドレス変換)と、
パケットフィルタリングと、
パケットラベリングと、
ECN(明示的輻輳通知マーキング)と、
パケット及びバイトの計数と、のうちの1つ以上を含み得る。
パケットをイングレス仮想ポートからエグレス仮想ポートにマッピングすることと、
パケットを2つ以上のエグレスポートに複製することと、
カプセル化及びカプセル化解除と、
接続追跡及びNAT(ネットワークアドレス変換)と、
パケットフィルタリングと、
パケットラベリングと、
ECN(明示的輻輳通知マーキング)と、
パケット及びバイトの計数と、のうちの1つ以上を含み得る。
MAEは、
パケットを解析し、キャッシュサブシステム内のルールテーブルのルックアップを実行するストリーミングプロセッサであるマッチエンジン(match engine、ME)と、
必要なときにパケット複製を行い、パケットドロップを行う再生ハブと、
一致したルールによって示されるアクションを呼び出す、ストリーミングプロセスであるアクションエンジン(AE)と、を備え得る。
パケットを解析し、キャッシュサブシステム内のルールテーブルのルックアップを実行するストリーミングプロセッサであるマッチエンジン(match engine、ME)と、
必要なときにパケット複製を行い、パケットドロップを行う再生ハブと、
一致したルールによって示されるアクションを呼び出す、ストリーミングプロセスであるアクションエンジン(AE)と、を備え得る。
マッチエンジンは、最初に着信パケットを解析する。これは、以下の3ステップのプロセスであり得る。
1.カプセル化の一部であり得る外部ヘッダを解析する。解析されたヘッダは、イーサネット、VLAN(virtual local area network、仮想ローカルエリアネットワーク)、IP(internet protocol、インターネットプロトコル)及びUDP(user datagram protocol、ユーザデータグラムプロトコル)ヘッダを含む。
2.STCAM(smart ternary content addressable memory、スマート三値連想メモリ)又はBCAM(binary content addressable memory、二値連想メモリ)又はキャッシュサブシステムの任意の他の好適なメモリ内にある、外部ルールテーブル内のヘッダフィールド及びソースポートをルックアップする。キーは、ヘッダフィールドのサブセットにいくつかのメタデータを加えたものから形成され、ルールは、キービットの恣意的なサブセットに一致する。ルックアップ結果は、(もしあれば)存在するカプセル化、(後で使用される)接続追跡に関するフィールド、及び外部ルールIDのうちの1つ以上を識別し得る。
3.残りのカプセル化ヘッダ(もしあれば)を解析し、内部ヘッダ(又は内部ヘッダのみ)を解析する。解析は、フレームの先頭において再び開始する。カプセル化が存在する場合、ステップ(1)ですでに解析され、カプセル化の一部として識別されたヘッダはスキップされる。典型的には、次いで、更なるカプセル化ヘッダが解析され、その後に内部ヘッダが続く。カプセル化が存在しない場合、内部フレーム解析は、フレームの先頭において再び開始する。
1.カプセル化の一部であり得る外部ヘッダを解析する。解析されたヘッダは、イーサネット、VLAN(virtual local area network、仮想ローカルエリアネットワーク)、IP(internet protocol、インターネットプロトコル)及びUDP(user datagram protocol、ユーザデータグラムプロトコル)ヘッダを含む。
2.STCAM(smart ternary content addressable memory、スマート三値連想メモリ)又はBCAM(binary content addressable memory、二値連想メモリ)又はキャッシュサブシステムの任意の他の好適なメモリ内にある、外部ルールテーブル内のヘッダフィールド及びソースポートをルックアップする。キーは、ヘッダフィールドのサブセットにいくつかのメタデータを加えたものから形成され、ルールは、キービットの恣意的なサブセットに一致する。ルックアップ結果は、(もしあれば)存在するカプセル化、(後で使用される)接続追跡に関するフィールド、及び外部ルールIDのうちの1つ以上を識別し得る。
3.残りのカプセル化ヘッダ(もしあれば)を解析し、内部ヘッダ(又は内部ヘッダのみ)を解析する。解析は、フレームの先頭において再び開始する。カプセル化が存在する場合、ステップ(1)ですでに解析され、カプセル化の一部として識別されたヘッダはスキップされる。典型的には、次いで、更なるカプセル化ヘッダが解析され、その後に内部ヘッダが続く。カプセル化が存在しない場合、内部フレーム解析は、フレームの先頭において再び開始する。
MAE 244は、第3のハブ256に出力を提供する。第3のハブ256は、MAE 244とVNIC-RXエンジン242との間に提供される。
第3のハブ256は、1つ又は2つのイングレスプラグイン214fを有する。これは、MAEエンジンからプラグイン(HMAE2P)への接続性を提供する。1つのH2C DMAアダプタ204が存在する場合、1つのイングレスプラグインが存在し得る。2つのH2C DMAアダプタが存在する場合、2つのイングレスプラグインが存在し得る。他の実施形態では、DMAアダプタと比較して異なる数のイングレスプラグインが存在し得る。
第3のハブ256は、1つ又は2つのエグレスプラグイン214eを有する。これは、プラグインから仮想NIC(RX)エンジン(P2VNR)への接続性を提供する。1つのH2C DMAアダプタ204が存在する場合、1つのエグレスプラグインが存在し得る。2つのH2C DMAアダプタが存在する場合、2つのエグレスプラグインが存在し得る。他の実施形態では、DMAアダプタと比較して異なる数のエグレスプラグインが存在し得る。
第3のハブは、任意選択で、1つ以上の更なるエグレスプラグイン214iを有し得る。これは、ネットワーク側宛先からのMAE(match action engine、マッチアクションエンジン)244からプラグイン(NMAE2P)への接続性を提供する。第3のハブ256のネットワーク形成の半分に対するイングレスプラグインは存在しない場合があるが、それは、この場所においてデータを注入することは、いくつかの実施形態でサポートされるTX MACに直接データを送ることと同じだからである。他の実施形態では、1つ以上のイングレスプラグインが、第3のハブ256のネットワーク形成の半分によってサポートされ得ることを諒解されたい。
1つのH2C DMAアダプタ204が存在する場合、1つの更なるエグレスプラグインが存在し得る。2つのH2C DMAアダプタが存在する場合、2つの更なるエグレスプラグインが存在し得る。他の実施形態では、DMAアダプタと比較して異なる数の更なるエグレスプラグインが存在し得る。
代替的又は追加的に、それぞれのハブプラグインインターフェースとストリーミングサブシステムといくつかのDMAアダプタとの間のトラフィックをルーティングする相互接続が存在し得る。相互接続は、イングレスプラグイン及び/又はエグレスプラグインとみなし得る。例えば、これは、NoC、又はプログラマブルロジックで創出されたバス構造であり得る。
VNIC-RXエンジン又はプロセッサは、ホスト又は組み込みプロセッサに宛てられたパケットを扱い得る。これは、パケットを受信するドライバに代わって、以下の機能のうちの1つ以上を実行し得る。
-パケット分類
-チェックサム機能、例えば計算及び検証
-フローステアリング及び/又はRSS(受信側スケーリング)
-パケットフィルタリング
-パケット分類
-チェックサム機能、例えば計算及び検証
-フローステアリング及び/又はRSS(受信側スケーリング)
-パケットフィルタリング
第4のスケジューラ203dは、第3のハブ256によるデータの出力を制御するように構成されている。
VNIC-RXエンジン242は、第4のハブ258にデータを出力するように構成されている。
第4のハブ258は、VNIC-RXエンジン242とC2H DMAアダプタ204との間に提供される。
第4のハブ258は、1つ又は2つのエグレスプラグイン214gを有する。これは、仮想NIC(RX)エンジンからプラグイン(VNR2P)への接続性を提供する。1つのH2C DMAアダプタ204が存在する場合、1つのエグレスプラグインが存在し得る。2つのH2C DMAアダプタが存在する場合、2つのエグレスプラグインが存在し得る。他の実施形態では、DMAアダプタと比較して異なる数のエグレスプラグインが存在し得る。
第4のハブ258は、1つ又は2つのイングレスプラグイン214hを有する。これは、プラグインからC2H DMAアダプタ(P2H)への接続性を提供する。1つのH2C DMAアダプタ204が存在する場合、1つのイングレスプラグインが存在し得る。2つのH2C DMAアダプタが存在する場合、2つのイングレスプラグインが存在し得る。他の実施形態では、DMAアダプタと比較して異なる数のイングレスプラグインが存在し得る。
第5のスケジューラ203eは、第4のハブ258によるデータの出力を制御するように構成されている。
1つ以上のネットワークポート受信ストリーミングエンジンNET_RX 206は、1つ以上のMAC(medium access controller、媒体アクセスコントローラ)210からストリーミングサブシステムにデータを渡すために提供される。NET_RXエンジンは、MACバスインターフェースを、ストリーミングサブシステムが使用するバスフォーマットに変換し得る。ほんの一例として、これはICSBバスであり得る。いくつかの実施形態では、RX MACからデータを受信するように構成された1つのNET_RXエンジンインスタンスが存在し得る。いくつかの実施形態では、2つのNET_RXエンジンインスタンスが存在し得、各NET_RXエンジンは、n個のRX MACからデータを受信するように構成されている。nは任意の好適な数であり得、いくつかの実施形態では8である。NET_RXは、データが受信MACからストリーミングサブシステムに渡されることを可能にするために使用される。
NET_RX206は、第5のハブ260に出力を提供するように構成されている。これにより、第5のハブによって提供されるデータバッファを利用しつつ、ネットワークRXデータがユーザロジックに送られることが可能になる。第5のハブは、いくつかの実施形態では、任意選択であり得る。
第5のハブは、任意選択で、1つ以上のエグレスプラグイン214kを有し得る。1つのH2C DMAアダプタ204が存在する場合、1つのエグレスプラグインが存在し得る。2つのH2C DMAアダプタが存在する場合、2つのエグレスプラグインが存在し得る。他の実施形態では、DMAアダプタと比較して異なる数のエグレスプラグインが存在し得る。
第5のハブ260は、第2のハブ254に出力を提供し得る。
第5のハブ260は、データのためのエグレスプラグインと併せて使用され得る。これにより、例えば、パイプラインの残りをバイパスすることを可能になり得る。これにより、例えば、受信されたデータがエグレスバッファを介してNICのファブリックに向けられることが可能になる。スケジューリングは、このハブのスケジューラ(図示せず)によって管理される。
第3のハブ256は、データのイングレスを扱うためにプラグインと併せて使用することができる。これにより、例えば、パイプラインの残りをバイパスすることが可能になり得る。これにより、例えば、ファブリックからのデータがイングレスバッファを介してTX部分に向けられることが可能になる。スケジューリングは、スケジューラのうちの1つによって管理される。
第2のハブ254は、任意選択で、1つ以上の更なるイングレスプラグイン214jを有し得ることに留意されたい。これは、プラグインからネットワーク側からのMAE(マッチアクションエンジン)244(P2NMAE)への接続性を提供する。1つのH2C DMAアダプタ204が存在する場合、1つの更なるイングレスプラグインが存在し得る。2つのH2C DMAアダプタが存在する場合、2つの更なるイングレスプラグインが存在し得る。他の実施形態では、DMAアダプタと比較して異なる数のエグレスプラグインが存在し得る。
1つ以上のネットワークポート送信ストリーミングエンジンNET_TX208は、ストリーミングサブシステムから1つ以上の送信MAC(媒体アクセスコントローラ)212にデータを渡すために提供される。(これらのMACは、図2a、図2b、及び図3に示されるMAC 114であり得る。)いくつかの実施形態では、データをTX MACに送信するように構成された1つのNET_TXエンジンインスタンスが存在し得る。いくつかの実施形態では、2つのNET_TXエンジンインスタンスが存在し得、各NET_TXエンジンは、n個のTX MACにデータを送信するように構成されている。nは任意の好適な数であり得、いくつかの実施形態では8である。NET_TXエンジンは、ストリーミングサブシステムのバスフォーマットをMACのバスフォーマットにカバーするように構成され得る。
NET_TX 208は、第3のハブ256からの出力を受信するように構成されている。第6のスケジューラ203fは、第3のハブによるNET_TX 208へのデータの出力を制御するように構成されている。
代替的又は追加的に、それぞれのハブプラグインインターフェースとストリーミングサブシステムといくつかのMAアダプタとの間のトラフィックをルーティングする相互接続が存在し得る。相互接続は、イングレスプラグイン及び/又はエグレスプラグインとみなし得る。例えば、これは、NoC、又はプログラマブルロジックで創出されたバス構造であり得る。
考察したように、1つ以上のプラグインインターフェースは、1つ以上のハブによって提供される。いくつかの実施形態では、プラグインインターフェースは、ストリーミングサブシステムデータ経路にデータを注入するイングレスプラグインインターフェースであり得る。いくつかの実施形態では、プラグインインターフェースは、ストリーミングサブシステムデータ経路からデータを抽出するために使用されるエグレスプラグインインターフェースであり得る。データは、ユーザカーネル及び/又は他の機能によって、かつ/又はユーザカーネル及び/又は他の機能に提供され得る。ユーザカーネル及び/又は他の機能は、NICの他の部分によって提供され得る。いくつかの実施形態では、ユーザカーネル又は他の機能は、プログラマブルロジックによって提供され得る。いくつかの実施形態では、ユーザカーネル及び/又は他の関数は、ハードウェアによって提供され得る。いくつかの実施形態では、NICをNICの最終用途要件に合わせてカスタマイズすることを可能にするために、ユーザカーネル及び/又は他の関数を使用することができる。
いくつかの実施形態では、イングレス及びエグレスプラグインインターフェースの数は、同じであり得る。例えば、10個のイングレスプラグイン及び10個のエグレスプラグインが存在し得る。他の実施形態では、10個より多い又は少ないイングレス/エグレスプラグインが存在し得る。いくつかの実施形態では、イングレスプラグイン及びエグレスプラグインの数は異なり得る。
いくつかの実施形態において、プラグインインターフェースは、データのイングレス及びエグレスを双方向にサポートしている場合がある。
いくつかの実施形態では、プラグインよりも少ないプラグインインターフェースが存在し得る。これらの実施形態では、プラグインインターフェースは、いくつかのプラグインポイントへの/からのトラフィックを多重化し得る。数は2つ以上であり得る。
プラグインは、全幅バスインターフェース又は半バス幅インターフェースを有し得る。プラグインが半幅バスインターフェースを有する場合、プラグインは対で提供され得る。これにより、プラグインが各ポイントにおいてストリーミングサブシステムデータ経路のフルスピードに一致することが可能になり得る。ストリーミングサブシステムデータ経路は、全幅バスで動作し得る。
プラグインインターフェースが全幅インターフェースを有する場合、所与の注入又は抽出ポイントに関連付けられた1つのプラグインインターフェースのみが存在し得る。
VNICTXエンジン240、MAE 244、VNICRXエンジン242、NET_RXエンジン206、及びNETTXエンジン208は、データ処理エンジンの非限定的な実施例である。
ストリーミングプロセッサ又はエンジンを概略的に示す、図4cを参照する。ストリーミングプロセッサは、上流ハブ及び下流ハブを有する。これにより、ユーザは、各エンジンの前及び後にデータストリームにアクセスすることが可能になり得る。図4cに示される装置は、図4a及び図4bの装置において使用される。
ハブは、いくつかの実施形態では、受信フロー及び送信フローに共通である。これにより、受信経路と送信経路との間のデータの柔軟なフローが可能になり得る。
ハブは、1つ以上のイングレスプラグイン及び1つ以上のエグレスプラグインを有し得る。
ストリーミングプロセッサは、概してブロックしない。ストリーミングプロセッサは、概して、一時的な場合を除いて背圧の発生を回避することを目的としている。システムは、フローに優先順位をつけ、ブロッキング挙動に適応することを可能にするいくつかの仮想チャネルをサポートし得る。例えば、フローのルックアップはローカルキャッシュで行われ、フローエントリはローカルキャッシュに常駐しない。リモートメモリ(例えば、DDR)からのフェッチを実行する必要があり、これにはいくつかのクロックサイクルを要する場合がある。キャッシュサブシステムは、ルックアップ及び多数の未処理のリモートメモリ読取り要求のパイプライン化をサポートし得るが、キャッシュの局所性が低いトラフィックパターンの場合、いくつかのフローの処理が行頭ブロッキングを引き起こし得る。仮想チャネルは、このブロッキングが他の仮想チャネルからの他のフローに影響を及ぼすことを防止し得る。
ストリーミングプロセッサは、特定の帯域幅をサポートし得る。
ハブは、データをストリーミングサブシステムに注入することを所望し得る上流のプロセッサ及びプラグインのために、下流のバッファリングを提供し得る。各ハブは、必要に応じて全てのプラグインから同時にデータを抽出/注入することができるように、スケジューラを包含するか、又はスケジューラによって制御される。ハブは、パイプラインに対するカスタマイゼーション(ループを含む)を創出するために使用され得る。図4cに示すスケジューラは、上流ハブをスケジューリングするためのものである。下流ハブの宛先クレジットは、スケジューラによって使用される。
図4aの装置に戻ると、送信経路は以下の通りであり得る。データの送信は、1つ以上のDMA送信キューに1つ以上のエントリを提供するホスト又はアプリケーションCPUによって開始され得る。H2C DMAアダプタインターフェース202は、第1のハブ252を介してVNIC TXエンジン240に出力を提供する。VNIC TXエンジン240は、第2のハブ254を介してMAE 244に出力を提供する。MAE 244は、送信経路と受信経路との間に仮想スイッチ機能を提供し得る。MAE 240は、第3のハブ256を介してNET_TXエンジン208に出力を提供する。NET_TXエンジン208は、送信MAC 212に出力を提供する。
受信経路は、以下の通りであり得る。ネットワークからのデータは、NET_RXエンジン206に出力を提供する受信MAC 210によって受信され得る。NET_RXエンジンは、第5のハブ260及び第2のハブ254を介してMAE 244に出力を提供する。MAE 244は、第3のハブ256を介してVNIC_RXエンジン242に出力を提供する。VNIC_RXエンジン242は、第4のハブ258を介してC2H DMAアダプタインターフェースに出力を提供する。
ホストループ経路は、次の通りであり得る。データの送信は、1つ以上のDMA送信キューに1つ以上のエントリを提供するホスト又はアプリケーションCPUによって開始され得る。H2C DMAアダプタインターフェース202は、第1のハブ252を介してVNIC_TXエンジン240に出力を提供する。VNIC_TXエンジン240は、第2のハブ254を介してMAE 244に出力を提供する。MAE 244は、第3のハブ256を介してVNIC_RXエンジン242に出力を提供する。VNIC_RXエンジンは、第4のハブ258を介してC2H DMAアダプタインターフェースに出力を提供する。
ネットワーク間フロー経路、以下の通りであり得る。ネットワークからのデータは、NET_RXエンジン206に出力を提供する受信MAC 210によって受信され得る。NET_RXエンジン206は、第5のハブ260及び第2のハブ254を介してMAE244に出力を提供する。MAE 240は、第3のハブ256を介してNET_TXエンジン208に出力を提供する。NET_TXエンジン208は、送信MAC 212に出力を提供する。
いくつかの実施形態では、図4aのエンティティの各々の間にバス接続が提供される。いくつかの実施形態では、エンティティの各々の間に提供されるバス接続は、同じ幅であり得る。いくつかの実施形態では、データは、全バス幅を使用してストリーミングサブシステムに注入される。他の実施形態において、データは、バス幅の半分を使用してストリーミングサブシステムに注入され得る。後者の場合、一対のデータ注入エンティティが存在し得る。
データ注入エンティティは、1つ以上のプラグイン、DMAアダプタ、及び/又は受信MAC 210を含み得る。
いくつかの実施形態では、データは、全バス幅を使用してストリーミングサブシステムから除去される。他の実施形態では、データは、バス幅の半分を使用して、ストリーミングサブシステムから除去され得る。後者の場合、一対のデータ除去エンティティが存在し得る。
データ除去エンティティは、1つ以上のプラグイン、DMAアダプタ、及び/又は送信MAC 212を含み得る。
いくつかの実施形態では、MAEは、VNIC TXエンジン240から、かつネットワークポート受信ストリーミングエンジンNET_RX206からのトラフィックを処理するように要求される。VNIC TXエンジン及びネットワークポート受信ストリーミングエンジンNET_RX206の各々は、最大でXまでのデータレートをサポートし得る。次いで、潜在的に、MAEは、最大で2Xまでのデータレートをサポートする必要があり得る。
いくつかの実施形態では、使用シナリオに応じて、実際には、MAEによってサポートされる必要がある平均データレートは、Xだけである。その場合、MAEは、VNIC TXエンジン及びネットワークポート受信ストリーミングエンジンNET_RX206と同じレートで機能することができる。したがって、MAEとそのハブとの間のバスは、ストリーミングサブシステムの他のバスと同じ幅のものであり得る。
他の実施形態では、MAEによってサポートされる必要があるデータレートは、Xを超え得る。いくつかの実施形態では、MAEは、最大で2Xのデータレートをサポートする必要があり得る。これは、MAEへのバス及びMAEからのバスを修正することによってサポートされ得る。バス幅を増加させ得(例えば、倍にする)、かつ/又はバスのクロックレートを上昇させ得る。
いくつかの実施形態は、セグメント化されたバスを使用し得る。セグメント化されたバスは、全体のデータ経路幅が物理的に別個の部分に分割されるストリーミングバスである。各セグメントは、それ自体の主制御信号(例えば、SOP(start of packet、パケットの開始)及びEOP(end of packet、パケットの終了))を有する。セグメント化されたバスは、恣意的なサイズのカプセルを運ぶ固定幅の任意のバスの潜在的な非効率性を克服するために使用され得る。セグメント化なしでは、カプセルがバス幅よりも(例えば)1バイト長い場合、カプセルを運ぶために2バスビート(クロックサイクル)が必要になり、1バイトを除くバス全体は、第2のビートでは何も運ばない。セグメント化されたバスは、次のカプセルが上記の実施例における第2のバスビートにおいて送信を開始することを可能にし、無駄な帯域幅の多くを回復する。セグメントの数が増加するにつれて、恣意的なカプセルサイズに対するバス帯域幅は、その理論的最大値の100%に向かう傾向がある。しかしながら、これは、セグメント化の増加に伴って必要となる多重化及び逆多重化動作の複雑さとリソースとのバランスをとる必要がある。セグメント化されたバスの利点は、セグメント化されていないバスの幅又はクロック速度を増加させるなどの選択肢に対してバランスを取り得る。これは、必要とされる実装形態に依存し得る。セグメントの数及びセグメント幅は、制約に伴って変化し得る。
多くの場合、バスは4つのセグメントに分割され得るが、これは、制約がどの程度強いかに応じて変化し得る。
フレームサイズ、及び/又はバス幅によってサポートされるセグメントの数を修正することができる。
MAEは、他のエンジンよりも高いデータレートで動作し得る。
1つの変形例を図4bに示す。この変形例では、2つのMAEエンジン244a及び244bが提供される。第1のMAE 224aは、ホストからのデータを処理するホストMAEとみなされ得る。第2のMAE 244bは、ネットワークからのデータを処理するためのネットワークMAEとみなされ得る。MAEの各々は、第3のハブ256に出力を提供する。他の実施形態では、並列に配置された2つより多くのMAEエンジンが存在し得ることを諒解されたい。
図4aの第2のハブ機能は、2つのハブ254a及び254bによって提供される。ハブ254aは、そのハブに関連付けられた任意のプラグインとともに、VNIC TXエンジンからの出力を受信するように構成されている。ハブ254aは、第1のMAE 244aに出力を提供するように構成されている。ハブ254bは、そのハブに関連付けられた任意のプラグインとともに、NET_RXエンジン206からの出力を受信するように配置されている。ハブ254bは、第2のMAE 244bに出力を提供するように構成されている。
スケジューラ203cは、両方のMAEエンジン及び両方のハブ254a及びbから入力を受信し得る。
したがって、この実施形態では、MAEの各々とそれらのそれぞれのハブとの間のバスは、ストリーミングサブシステムの他のバスと同じ幅のものであり得、各MAEがデータレートXをサポートすることを可能にする。
Xが任意の好適な値であり得ることを諒解されたい。例えば、Xは200又は400Gb/sであり得る。これらの値は純粋に例としてのものであり、異なる実施形態では異なり得ることを諒解されたい。
いくつかの実施形態では、他のハブと比較して、ハブ256によってサポートされるエグレスプラグインの数は2倍であり得る。図4a及び図4bに関連して考察した両方の実施形態では、第3のハブの総帯域幅は、第1のハブ252及び第5のハブ260のいずれかにおける帯域幅の2倍であり得る。
いくつかの実施形態において、データ経路は、プラグインを効果的に含む。これは、場合によっては、タイミングの問題を考慮する必要性を回避し得る。スケジューラは、プラグインが提供されるタイミングに対処する。スケジューラについては、以下でより詳細に説明する。上述したように、ハブは、データをストリーミングに注入することを所望し得る上流のプロセッサ及びプラグインのために、下流のバッファリングを提供し得る。これは、スケジューラによって制御され得る。
代替的又は追加的に、データ経路の1つ以上の構成要素をバイパスするか、又はプラグインによって置き換えることができる。
プラグインは、動的にロードされ得る。すなわち、NICがインストールされた後にプラグインがインストールされ得る。
プラグインは、任意の好適な構成要素であり得る。例として、プラグインはハードウェア構成要素であり得る。プラグインは、加速化されたアプリケーションのハードウェア構成要素であり得る。プラグインは、カスタムプロトコル及び/又は加速化サポートを可能にし得る。
図4a又は図4bのデータ経路に特徴を追加するためにプラグインが使用される実施例を示す、図5を参照する。ストリーミングサブシステムは、図4a又は図4bに関連して説明した通りである。図5に示される実施例では、VNIC TXエンジンからMAE244へのデータ経路は、第2のハブ254を介して暗号化プラグイン250を含むように修正される。送信されるデータは、ハブ254を介して暗号化プラグイン250に渡される。データは、データ経路から除去され、暗号化プラグインによって暗号化され、次いで、第2のハブを介してデータパスに再注入される。
VNIC RXエンジン208からMAE244へのデータ経路は、第3のハブ256を介して復号化プラグイン251を含むように修正される。受信されるデータは、ハブ254を介して復号化プラグインに渡される。データは、データ経路から除去され、復号化プラグインによって復号化され、次いで、第3のハブを介してデータ経路に再注入される。
この例では、処理されたデータは、除去されるハブに再注入される。しかしながら、他の実施形態では、データは、異なるハブを介してデータ経路に再注入され得る。
ハブ254及び256のこれらのプラグインポイントは、ネットワーク層暗号化/復号化のために使用され得る。トランスポート層暗号化(例えば、TLS)プロトコルプラグインは、ハブ252及び/又は258を使用し得る。いくつかの実施形態は、これらのハブへのプラグインを使用する、ネットワーク及びトランスポート層暗号化の両方を使用し得る。この後者の実施形態は、フレームごとに二重暗号化又は復号化が必要とされる場合に使用され得る。
プラグインによって提供される暗号化及び復号化は、それぞれIPSec暗号化及び復号化、又は任意の他の好適な暗号化/復号化であり得る。
図4a又は図4bのデータ経路の構成要素を置換するためにプラグインが使用される実施例を示す、図6を参照する。ストリーミングサブシステムは、図4a又は図4bに関連して説明した通りである。図6に示される実施例では、データストリーミング経路のMAE244は、カスタムエンジン253によって置換される。
送信経路は、以下のように修正される。データの送信は、1つ以上のDMA送信キューに1つ以上のエントリを提供するホスト又はアプリケーションCPUによって開始され得る。H2C DMAアダプタインターフェース202は、第1のハブ252を介してVNIC TXエンジン240に出力を提供する。VNIC TXエンジン240は、第2のハブ254を介してカスタムエンジンに出力を提供する。カスタムエンジンは、第3のハブ256を介してNET_TXエンジン208に出力を提供する。NET_TXエンジン208は、送信MAC212に出力を提供する。したがって、データは、第2のハブの1つ以上のエグレスプラグインを介して除去され、処理され、第3のハブの1つ以上のイングレスプラグインを介してデータ経路に再注入される。
受信経路は、以下の通りであり得る。ネットワークからのデータは、NET_RXエンジン206に出力を提供する受信MAC210によって受信され得る。NET_RXエンジンは、第2のハブ254を介してカスタムエンジン253に出力を提供する。カスタムエンジン253は、第3のハブ256を介してVNIC_RXエンジン242に出力を提供する。VNIC_RXエンジン242は、第4のハブ258を介してC2H DMAアダプタインターフェースに出力を提供する。したがって、データは、第2のハブの1つ以上のエグレスプラグインを介して除去され、処理され、第3のハブの1つ以上のイングレスプラグインを介してデータ経路に再注入される。
上述したように、いくつかの実施形態は、カプセルを使用し得る。いくつかの実施形態で使用されるカプセルを示す、図7を参照する。いくつかの実施形態では、ストリーミングサブシステムはカプセルを運ぶ。後で考察するように、カプセルは、代替的に又は追加的に、NICの他の部分で使用され得る。カプセルは、制御カプセル又はネットワークパケットカプセルであり得る。ペイロードは、ペイロードへのポインタによって提供され得る。代替的に、ペイロードはカプセル内に提供され得る。
図7に概略的に示されるように、カプセルはメタデータ702を含む。これは、カプセルの先頭において提供され得る。この後に、カプセルペイロード710が続き得る。
メタデータは、カプセルが制御カプセルであるかネットワークカプセルであるかに依存し得る。
ネットワークパケットカプセルは、カプセルメタデータを有し、その後に例えばペイロード内のイーサネットフレームが続く。
メタデータは、制御カプセル及びネットワークカプセルに共通であり得るカプセルヘッダを含み得る。カプセルヘッダは、カプセルが制御カプセルであるかネットワークパケットカプセルであるかを示す情報を含み得る。カプセルヘッダは、ストリーミングサブシステムを通してのパケットのルーティングを制御するルート情報を含み得る。カプセルヘッダは、カプセルによって使用される仮想チャネルを示す仮想チャネル情報を含み得る。カプセルヘッダは、カプセルの長さを示す長さ情報を含み得る。
ネットワークパケットカプセルは、メタデータ702の一部としてカプセルヘッダに続くネットワークカプセルヘッダを有する。これは、カプセルメタデータのレイアウト、及びカプセルペイロードがイーサネットFCS(frame check sequence、フレームチェックシーケンス)を含むか否かを示し得る。
制御カプセルのメタデータは、制御カプセルのタイプを示し得る。カプセルは、オフセットを示すメタデータを有し得る。これは、処理するデータの先頭を示し得る。
スケジューラは、データ経路に沿ったデータの移動のタイミングを制御し得る。スケジューラは、データが1つ以上のプラグインによって処理される場合であっても、タイミングを制御するために使用され得る。いくつかの実施形態では、データ経路の各ステージは、スケジューラによって制御され得る。いくつかの実施形態では、プラグインは、スケジューラによってスケジュールされる。
いくつかの実施形態において、スケジューラは、クレジットベースのシステムを使用し得る。
スケジューラは、ストリーミングサブシステム内のデータフローを管理する。いくつかの実施形態では、このデータフローはカプセルを含む。
フローは、1つのソースを有し、1つ以上の宛先を有し得る。スケジューラの観点から、フローソース及び宛先は、送られるデータを保持するメモリリソース、又は受信されるデータのための空間である。宛先は、下流ハブ内の1つ以上のバッファであり得、ソースは、ハブ及び/又はそのハブのプラグイン内の1つ以上のバッファであり得る。
フローソースは、それが包含し、出力を望むデータの量をスケジューラに通信する。このフローソース状態は、ソースクレジット数と呼ばれる。ソースのタイプに応じて、ソースクレジットは、以下のうちの1つを参照し得る。
1)3状態値として表現される記述子の数。
a)利用可能な記述子がない、
b)利用可能な記述子の数が、ゼロより多く、グローバルに構成された閾値より少ない、及び
c)利用可能な記述子の数が、グローバルに構成された閾値数よりも多い。
1)3状態値として表現される記述子の数。
a)利用可能な記述子がない、
b)利用可能な記述子の数が、ゼロより多く、グローバルに構成された閾値より少ない、及び
c)利用可能な記述子の数が、グローバルに構成された閾値数よりも多い。
これは、H2C DMAキューであるソースによって使用され得る。
2)3状態値として表現されるカプセルの数。
a)利用可能なカプセルがない、
b)利用可能なカプセルの数が、ゼロより多く、グローバルに構成された閾値より少ない、及び
c)利用可能なカプセルの数が、グローバルに構成された閾値数よりも多い。
2)3状態値として表現されるカプセルの数。
a)利用可能なカプセルがない、
b)利用可能なカプセルの数が、ゼロより多く、グローバルに構成された閾値より少ない、及び
c)利用可能なカプセルの数が、グローバルに構成された閾値数よりも多い。
この方法は、ソースによって、すなわちハブのFIFOによって使用され得る。
いくつかの実施形態において、クレジットの量は、代替的に又は追加的に、バストランザクションにおいて測定されたデータの量(例えば、512ビットワード)を指し得る。
フロー宛先は、データを受信するために利用可能な自由空間の量をスケジューラに通信し得る。このフロー宛先状態は、宛先クレジット数と呼ばれ得る。宛先のタイプに応じて、宛先クレジットは、以下のうちの1つを参照し得る。
1)バストランザクションにおいて測定されるデータの量(例えば、512ビットワード)。これは、宛先がデータバッファ(例えば、ハブ内のFIFO)であるときに使用され得る。
2)宛先がデータを受け入れることができるか否かを示す2状態値。これは、NET TXポート又はNET TXポート優先度チャネルによって使用され得る。
1)バストランザクションにおいて測定されるデータの量(例えば、512ビットワード)。これは、宛先がデータバッファ(例えば、ハブ内のFIFO)であるときに使用され得る。
2)宛先がデータを受け入れることができるか否かを示す2状態値。これは、NET TXポート又はNET TXポート優先度チャネルによって使用され得る。
フローソース及びフロー宛先の状態に基づいて、スケジューラは、どのフローがデータを転送するのに適格かを判定する。スケジューラは、そのプログラミングに従って全ての適格なフローを評価し、どのフローを進めることができるかを判定する。例えば、スケジューラは、現在最も優先順位の高いフローを選択し、具体的な長さのデータブロックを送信するようにフローソースに命令し得る(スケジューラジョブ)。スケジューラは、ジョブが完了したときにシステムがとる状態をより良く表すように、その内部状態を更新する。そうすることにより、スケジューラは、すでに発行されたジョブが完了するのを待つことなく、別のジョブ要求を発行することが可能になり得る。
スケジューラがその状態を更新すると、スケジューラは、宛先の新しい状態及びフロー間の新しい優先順位関係を予測する。スケジューラは変化を正確に予測しない場合があるので、スケジューラは悲観的な観点をとる場合があり、すなわち、スケジューラは、スケジューラジョブ要求の結果として生成され、宛先にプッシュされ得る最大量のデータを想定する。いくつかの状況では、宛先に書込まれるデータの量は、ジョブ要求で指定されたデータブロックのサイズを(時には著しく)超え得る。また、データの量が要求された量よりも少ないシナリオや、データが全く転送されないシナリオも存在し得る。
ソースは、ジョブ要求を実行し、完了した各ジョブについてスケジューラにメッセージを送る。このジョブ応答メッセージは、コスト、ソース状態、及び消費された宛先クレジットを含み得る。コストは、ジョブがどれだけのスループットリソースを消費したかをスケジューラに知らせる。コストは、ジョブの本質及び性質に依存する。しかしながら、しかし、フロー間の優先度関係を更新するためにコストを使用するスケジューラが、異なる種類のジョブのコストを比較及び評価できるように、コスト関数を正規化し得る。ソース状態は、ソースの新しい状態である。最後に、消費される宛先クレジットは、ジョブ中に産出されたデータによって消費される宛先空間の量を指す。
図4a又は図4bの装置には、ハブ又はDMAアダプタという2つのソース装置がある。
ソースがハブである場合、ソースはハブのFIFOであり、ジョブ要求を実行してジョブ応答を生成するエンティティは、ハブの読取りステージである。この装置では、ハブの後にエンジン及び別のハブが続く。次のハブのFIFOは、宛先である。エンジンは、パケットを修正することができ、それによって各パケットの長さを減少又は増加させる。エンジンは、代替的又は追加的にパケットを創出し得る。パケット長を増加されることができる最大量は、グローバルに構成されたパラメータであり得る。消費された宛先クレジットを報告するときのソースハブ読取りステージは、ジョブ内の各パケットが、ストリーミングエンジンによって最大許可量だけ長くされたと仮定し得る。
エンジンは、代替的又は追加的にパケットを創出し得る。エンジンは、代替的又は追加的にパケットを削除し得る。
ソース装置がDMAアダプタであるとき、ソースは、DMAキューであり、ジョブ要求を実行するエンティティは、記述子パイプと呼ばれる。記述子パイプは、DMA記述子を処理し、ホストから/ホストへのデータの読取り又は書込みをDMAに要求する。記述子パイプは、データを処理する。データを処理している間、記述子パイプは、TSO(TCP segmentation offload、TCPセグメンテーションオフロード)動作、擬似ヘッダの除去/追加などに起因してパケットをサイズ変更し得る。ハブの場合のように、消費された宛先クレジットを報告するときの記述子パイプは、ジョブ内の各パケットが記述子パイプによって最大可能量だけ長くされたと仮定し得る。
説明した両方のソース装置について、ジョブのデータをサイズ変更するエンティティ(ストリーミングエンジン又はDMAアダプタデータパイプ)は、ジョブ応答内で指定された消費された宛先クレジットと、消費された実際の宛先クレジットとの間の不一致を報告し得る。これは、処理されたパケットごとに宛先クレジット調整メッセージを送ることによって達成され得る。各宛先クレジット調整メッセージは、ジョブ応答で使用されるパケットの最大拡張シナリオと、パケットの実際のサイズとの間の差を伝える。宛先クレジット調整メッセージは、パケットごとに発行され得る。
ソースが空の状態から2つの空でない状態のいずれか1つに遷移すると、ソースは、スケジューラにソースクレジットメッセージを送る。
ソース固有のTX閾値設定に起因して、ソースは、他の条件が満たされるまで、もはや空ではないことをスケジューラに通知することが防止される場合がある。したがって、ソースクレジットメッセージ通知メッセージは、スケジューラに、ソースが、空の状態から、閾値状態を下回る空でない状態に、又は閾値状態を超える空でない状態に遷移したことを伝え得る。
宛先は、宛先内の空間の量が増加したことを示す宛先クレジットメッセージをスケジューラに送る。いくつかの実施形態では、スケジューラに宛先クレジットメッセージが殺到されないことを確実にするために、宛先は、宛先クレジットメッセージのレートを事前に構成された最大レートに制限する宛先クレジットメッセージモデレータを実装し得る。
スケジューラは、ジョブ要求メッセージをソースに発行する。
ジョブ要求が完了すると、ソースはジョブ応答を発行し、ジョブ応答は以下を指定する。
ソースの状態:ソースの新しい状態、空、閾値を下回る空でない、閾値を超える空でない、
消費された宛先クレジット:ジョブ実行中に消費された宛先クレジットの量の悲観的見積り、及び
ジョブのコスト。
ソースの状態:ソースの新しい状態、空、閾値を下回る空でない、閾値を超える空でない、
消費された宛先クレジット:ジョブ実行中に消費された宛先クレジットの量の悲観的見積り、及び
ジョブのコスト。
エンジン又はDMAアダプタ記述子パイプは、処理されたパケットごとに宛先クレジット調整メッセージを提供する。いくつかの実施形態では、スケジューラに宛先調整クレジットメッセージが殺到されないことを確実にするために、ストリームエンジンは、宛先クレジット調整メッセージのレートを事前に構成された最大レートに制限する宛先クレジット調整メッセージモデレータを実装し得る。
いくつかの実施形態では、ソースのうちの1つ以上は、いくつかのジョブを並列に(少なくともいくらかの重複を伴って)処理し得る。
図4a又は図4bのスケジューラの各々は、概して、ソース、宛先、及びそれらを一緒にリンクするフローのある関連するセットを管理することに特化されている。スケジューラの内部構成及びプログラミングは、フローがソース及び宛先にどのように関連するかを指定する。一実施形態では、2つのフローがソースを共有する場合はないが、複数のフローが同じ宛先をターゲットにすることができ、いくつかのフローは複数の宛先をターゲットにし得る。QoS(ポリシー)は、インターフェースにおけるパイプライン帯域幅の共有を制御するために、スケジューラによって使用され得る。
いくつかの実施形態のハブを示す、図8aを参照する。図8aに示されるこのハブの実施例は、2つのエグレスプラグイン902と、1つのイングレスプラグイン904とを有する。
データは、ストリーミングサブシステム内のハブの位置に応じて、上流アダプタ及び/又はエンジンから受信され得る。データは、代替的又は追加的に、イングレスプラグインから受信され得る。
ハブは、書込みコントローラ(ハブ書込みステージ(hub write stage、HWS)及びプラグインハブ書込みステージ(plugin hub write stage、PWS))を有する。これらは、図8aにおいてHWS0、HWS1及びPWSと表記されている。上流アダプタ及び/又はエンジンからのデータは、ハブ書込みステージに提供され、イングレスプラグインからのデータは、プラグインハブ書込みステージに提供される。HWSは、デマルチプレクサ機能を提供し得るか、又はデマルチプレクサであり得る。
ハブは、図8aのHRSを参照した読取りコントローラ(ハブ読取りステージHRS)と、バッファメモリブロックとを有する。これらのバッファメモリブロックは、図8aでMem Block0、1及び3として参照される。バッファメモリブロックは、循環バッファを包含し得、それによって、ハブ設計の残りから循環バッファ実装を抽象化する。バッファメモリブロックは、1つ以上の循環バッファ又は任意の他の好適なバッファ実装を包含し得る。バッファメモリブロックのバッファは、カプセルデータ及び/又はメタデータを包含し得る。
データバッファメモリブロック(Mem Block 0及び1)は、ハブのイングレスポートとエグレスポートとをリンクするFIFOを実装し得る。(Memブロック3によって提供される)シャドウFIFOは、イングレスプラグイン動作をサポートするために使用され得る。シャドウFIFOは、エグレスプラグイン動作をサポートするために使用されるFIFOとレート一致し得る。
メタデータバッファメモリブロックは、メタデータ(カプセル長さ及び他のフィールド)を運ぶFIFOによって実装され得、メタデータ(典型的には長さ)が、カプセルの終わりにおいて書込みステージによって書込まれるが、カプセルの先頭において読取りステージによって読み出されるように、読取りステージによって前もってプリフェッチされることを可能にする。メタデータFIFOは、メモリブロックMem Block 0、1及び/又は3内に提供され得る。
HWSステージの出力は、エグレスプラグイン及び/又はデータバッファメモリブロックMem Block 0及び1に提供される。
読取りコントローラHRSは、スケジューラ宛先クレジットメッセージモデレータを組み込んでおり、(ハブバッファに自由空間の存在についてそれぞれのスケジューラに通知する)スケジューラ宛先クレジットメッセージを所定のレートで生成することを担当している。
読取りコントローラはまた、前述したように、(ハブバッファ内のデータの存在についてスケジューラに通知する)ソースクレジットメッセージを生成する。
書込みステージ及び読取りステージは、読取り/書込み通知メッセージを互いに交換し得る。読取り/書込み通知メッセージのポイントツーポイントリンクは、同じハブ内の読取り/書込みステージ間に提供される。通知メッセージは、受信側コントローラに、メッセージを産出するコントローラによって実行される各トランザクション、すなわち、どのFIFOへの/からの書込み/読取り、書込み/読取りトランザクションのタイプ、SOP(start of packet、パケットの開始)、EOP(end of packet、パケットの終了)、MIDDLEについて通知する。
通知メッセージを使用して、各コントローラは、コントローラがアクセスする全てのFIFOの状態、すなわち、ワードの数、完全なパケットのみの数、完全な及び部分的に読出し/書込みされたパケットの数を追跡することができる。
HRSステージは、イングレスプラグインからパケット通知メッセージを受信するように構成されている。HRSステージはまた、ローカルクレジットをイングレスプラグインに提供するように構成されている。
各バッファメモリブロックは、1つ又はいくつかのデータバッファ及びそれらに付随するメタデータバッファを保持し得る。各ハブ読取り又は書込みポートは、少なくとも1つの読取り又は書込みバッファメモリブロックポートの完全な所有権を有し得る。いくつかの実施形態では、2つのハブポートが同じバッファメモリブロックポートを共有しない場合がある。データを通過させることを望む任意のハブ書込み-読出しポート対は、少なくとも1つのバッファメモリブロックを共通に有し得る。
スケジューラを示す。スケジューラは、HRSのアクティビティを制御するために使用される。1つ以上のスケジューラは、他のハブ及び/又は他のブロックの読取りステージを制御し得る。スケジューラは、このハブからソースクレジットメッセージを受信し、1つ以上の下流ハブ及び/又は1つ以上の他のブロックから宛先クレジットメッセージを受信する。ハブは、その宛先クレジット情報を1つ以上の上流スケジューラに送る。HRSステージ及びスケジューラは、前述したようなジョブ要求メッセージ及びジョブ応答メッセージを交換する。
イングレスプラグインインターフェース統合を概略的に示す、図8bを参照する。図8bに示す実施例では、2つのハブ900a及び900bが示されている。ハブ900aは、ハブ900bの上流にある。ハブの各々は、図8aに関連して説明したようなものであり得る。示されるこの実施例では、第2のハブ900bは、PWS及び関連付けられたメモリブロックを有していない。ハブがイングレスプラグインをサポートする場合、PWS及び関連付けられたメモリブロックが提供され得る。そうでない場合、PWS及び関連付けられたメモリブロックは、図8bに示される第2のハブ900bの場合のように、省略され得る。
ハブ間にはエンジン916が存在する。これは、先に考察したエンジンのいずれか1つであり得る。
スケジューラ918は、図8aに示されるようなものであり得、第1のハブからソースクレジットを受信し得る。これらのソースクレジットは、第1のハブのHRSから受信され、図8bに概略的に示されるように、第1のハブのFIFOに関する。第1のハブのHRSはまた、ジョブ要求及び/又はジョブ応答をスケジューラに提供する。
第1のハブのHRSはまた、イングレスプラグイン920のためのソースクレジットを提供する。イングレスプラグインは、NICのプログラマブルロジック部分912(例えば、図2aのプログラマブルロジック113)によって提供され得る。
いくつかの実施形態では、イングレスプラグイン自体にハブ922が提供され得る。このプラグインハブは、NICのプログラマブルロジック部分912内に提供され、NICの強化された部分914の一部でない場合があるという点で、ソフトハブと呼ばれ得る。強化された部914は、強化されたエリアとNICのプログラマブルロジックとの間に点線で概略的に示されている。
ハブ900a及び900bは、NICの強化された部分内に提供され得る。プラグインハブ922は、HWS部分、メモリバッファ及びHRS部分を有する第2のハブ900bと同一又は類似の構造を有し得る。ソースクレジットは、プラグインハブによって提供され得、プラグインハブ922のFIFOに関する。
プラグイン920によって提供されるデータは、プラグインハブ及び一対のコンバータ924a及び924bを介して第1のハブ900aに提供される。一対のコンバータのうちの第1のコンバータ924aは、プログラマブルロジックによって提供され、一対のコンバータのうちの第2のコンバータ924bは、NICの強化された部分内に提供される。データは、プラグインハブから、データを第1のハブのために必要な形式に変換する第1のコンバータ924aに出力される。これにより、必要なバス形式でデータを提供し得る。データは、第1のコンバータ924aから第2のコンバータ924bを介して第1のハブに渡される。いくつかの実施形態では、第1のコンバータは、データの第1の変換を提供し、第2のコンバータは、第1のハブのために必要とされる形式へのデータの第2の変換を提供する。
ほんの一例として、第1のコンバータは、例えば400MHzでクロックされるSTバス形式になるようにデータを変換し、第2のコンバータは、例えば800MHzでクロックされるICSBバス形式にデータを変換する。
第2のコンバータは、第1のコンバータ924aを介してプラグインハブに提供されるFIFOクレジットを第1のハブのPWSから受信する。
いくつかの実施形態では、コンバータは省略され得る。いくつかの実施形態では、1つのコンバータのみが必要とされる。いくつかの実施形態では、1つ以上のコンバータは、第1のハブとプラグインハブ又はプラグイン自体との間のインターフェースとして機能する。
コンバータ924bを、ハブの一部であると考える場合があることを諒解されたい。プラグイン920、プラグインハブ922及び第1のコンバータ924aは、イングレスプラグインを提供すると考えられ得る。
スケジューラは、下流ハブから宛先クレジットを受信するように構成されている。スケジューラは、好適なハードウェア上で実行されるコンピュータコードによって提供され得る。ハードウェアは、例えば、少なくとも1つのプロセッサ及び少なくとも1つのメモリであり得る。
エグレスプラグインインターフェース統合を概略的に示す、図8cを参照する。図8cに示す実施例では、先に考察したような2つのハブ900a及び900bが示されている。それぞれのハブがイングレスプラグインをサポートする場合、PWS及び関連付けられたメモリブロックが提供され得る。そうでない場合、PWS及び関連付けられたメモリブロックは省略され得る。
ハブ間にはエンジン916が存在する。これは、前述したエンジンのいずれか1つであり得る。
第1のハブ900aのHRSは、ジョブ要求及び/又はジョブ応答をスケジューラ918に提供する。スケジューラは、下流ハブ900bから宛先クレジットを受信するように構成されている。スケジューラは、エグレスプラグイン920’から宛先クレジットを受信するように構成されている。
エグレスプラグイン920’は、参照符号912によって示されるファブリック内のユーザロジックによって提供され得る。
いくつかの実施形態では、エグレスプラグイン自体にハブ922’が提供され得る。このプラグインハブは、イングレスプラグインに関連して考察したように、NICのプログラマブルロジック部分912内に提供される。
エグレスプラグインハブ922’は、HWS部分、メモリバッフ、及びHRS部分を有する第2のハブ900bと同じ又は同様の構造を有し得る。宛先クレジットは、プラグインハブによって提供され得、エグレスプラグインハブ922’のFIFO’に関する。
プラグイン920’に提供されるデータは、一対のコンバータ924a’及び924bを介して第2のハブ900bによって提供される。これは、エグレスプラグイン宛先クレジットの使用によって、スケジューラによって制御される。1つ以上のレートマッチFIFOを使用し得る。レートマッチFIFOは、バス幅、したがってデータレートをマッチさせ得る。いくつかの実施形態では、1つのレートマッチFIFOが、エグレスプラグインインターフェースごとに提供され得る。これにより、エンジンと第2のハブとの間の全幅バス及び半幅バスインターフェースからエグレスプラグインへの遷移が可能になり得る。
一対のコンバータのうちの第1のコンバータ924a’は、NICのプログラマブルロジック部分内に提供され、一対のコンバータのうちの第2のコンバータ924b’は、NICの強化された部分914内に提供される。データは、第2のハブ900bから出力され、データを必要な形式に変換する第2のコンバータ924aに提供される。この変換されたデータは、第1のコンバータ924a’に渡され得る。この第1のコンバータ924a’は、エグレスプラグイン922’に必要な形式でデータを提供し得る。データは、第2のハブから第2のコンバータ924b’を介して第1のコンバータ924a’に渡される。いくつかの実施形態では、第2のコンバータは、データの第1の変換を提供し、第1のコンバータは、エグレスプラグインのために必要とされる形式へのデータの第2の変換を提供する。ほんの一例として、第2のコンバータは、800MHzでクロックされるICSBバス形式から400MHzでクロックされるSTバス形式にデータを変換し、第2のコンバータは、400MHzでクロックされるSTバス形式を、エグレスプラグインへの入力のためのデータストリームに変換する。
いくつかの実施形態では、コンバータは省略され得る。いくつかの実施形態では、1つのコンバータのみが必要とされる。いくつかの実施形態では、1つ以上のコンバータは、第2のハブとプラグインハブ又はプラグイン自体との間のインターフェースとして機能する。
コンバータ924b’を、第2のハブの一部であると考える場合があることを諒解されたい。エグレスプラグイン920’、エグレスプラグインハブ及び第1のコンバータ924a’は、エグレスプラグインを提供すると考えられ得る。
スケジューラは、下流ハブから宛先クレジットを受信するように構成されている。
スケジューラは、好適なハードウェア上で実行されるコンピュータコードによって提供され得る。ハードウェアは、例えば、少なくとも1つのプロセッサ及び少なくとも1つのメモリであり得る。
図4a又は図4bに示されるキャッシュサブシステムは、いくつかの実施形態においてMAEによって使用され得る。キャッシュサブシステムは、キャッシュカウンタ、ルックアップサービス、及び複数のキャッシュされたCAMを備え得る。図6に示す、実施例では、MAEはカスタムエンジンによってバイパスされる。これは、キャッシュサブシステムがストリーミングサブシステムによって使用されない一実施例である。いくつかの実施形態では、キャッシュのメモリは目的変更され得る。例えば、いくつかの実施形態では、メモリは、FIFO(first in first out、先入れ先出し)、BCAM又はSTCAMのうちの1つ以上として使用することができる。
いくつかの実施形態では、メモリへのアクセスは、ファブリックを介して、又はNoCを介して行われる。CAMは、ミスがNoCを介してファブリックに実装されたミスハンドラに転送されるよう、キャッシュするように設計され得る。ミスハンドラは、オンチップメモリ又は外部DDR(double data rate、ダブルデータレート)メモリなどの任意の好適なメモリを使用してCAMを「拡張」することができる。
メモリが目的変更される場合、ストリーミングサブシステムはもはやキャッシュサブシステムにアクセスすることができない。
したがって、いくつかの実施形態は、MAEエンジンをサポートするための強化キャッシュとして使用されないときに、キャッシュがCAMとして再使用されることを可能にし得る。
この点に関して、目的変更されたキャッシュサブシステム215を示す図9を参照する。いくつかの実施形態では、x個のメモリ800が提供され得る。ほんの一例として、32個のメモリ800が存在し得る。この実施例では、メモリは64b幅であり得る。しかしながら、これはほんの一例である。各メモリ800は、デュアルポート802に関連付けられ得る。各ポート804及び806は、読取り及び書込みをサポートすることができる。
この実施例では、1638Gbit/sの総帯域幅を与え得るメモリ当たり800Mのアクセスが存在し得る。いくつかの実施形態では、これは、読取りと書込みの任意の必要な組み合わせをサポートし得る。
いくつかの実施形態では、キャッシュメモリは、用途に応じて目的変更することができる。例えば、メモリは、以下のうちの1つを提供するために使用され得る。
4x 200Gbit/s FIFO
64bキー+値及び800Mルックアップ/sを有する8x BCAM
1x STCAM、4マスク、256bキー+値及び400Mルックアップ
4x 200Gbit/s FIFO
64bキー+値及び800Mルックアップ/sを有する8x BCAM
1x STCAM、4マスク、256bキー+値及び400Mルックアップ
いくつかの実施形態では、キャッシュ内のバッファがアドレスによって割り当てられ、解放され、参照されることができるオントップアドレス方式が提供される。バッファアドレスは、DMA及び又はアクセラレータコマンドのためのソース/ターゲットとして使用され得る。メモリの多重化は、CAMをメモリチャネルのセット内に実装するために使用され、各チャネルは読取り/書込みコントローラを有する。このモードがアクティブであるとき、メモリは同時にCAMとして使用されない場合がある。
前述のストリーミングサブシステムは、前述のエンジンのうちの1つ以上を省略し得、かつ/又は1つ以上の他のエンジンを含み得る。前述のエンジンのうちの1つ以上によって提供される1つ以上の機能は、省略され得る。1つ以上の他の機能は、前述のエンジンのうちの1つ以上によって実行され得る。
いくつかの実施形態では、ストリーミングサブシステムを提供するASIC(強化された部分)と、プラグインを提供するPLとの間で、バリアを越えてデータが1回、2回、又はそれ以上交差する場合がある。いくつかの実施形態では、データは、ネットワークから受信され、ストリーミングサブシステムパイプラインを出た後に完全に終了し得る。いくつかの実施形態では、データは、PLによって供給され得る。
プラグインには、ASIC、CPU及び/又はプログラマブルロジックのうちの1つ以上が提供され得る。プラグインは、データ処理エンティティであり得る。
いくつかの実施形態において、処理エンジンは、必要な機能を提供するようにプログラムされ得る。処理エンジンのプログラミングは、RTL、C、P4、及びeBPFなどの任意の好適なプログラミング言語を使用し得る。
いくつかの実施形態の方法を示す、図16を参照する。これは、ネットワークインターフェースデバイス内で実行され得る。
この方法は、ステップ1601において、第1のハブにおいて、第1の上流データ経路エンティティから、かつプログラマブルロジックに実装された第1のデータ処理エンティティからデータを受信することを含む。
この方法は、ステップ1602において、第1のハブに関連付けられた第1のスケジューラによって、第1のハブから第1のデータ処理エンジンへのデータの出力を制御することを含む。
この方法は、ステップ1603において、第1のデータ処理エンジンによって、第1のハブから受信されたデータを処理することを含む。及び
この方法は、ステップ1604において、第1のデータ処理エンジンによって、処理されたデータを第2のハブに出力することを含む。
この方法は、ステップ1604において、第1のデータ処理エンジンによって、処理されたデータを第2のハブに出力することを含む。
2つのCPU 750及び752を有するNIC 109を示す、図10を参照する。実際には、CPUはCPU複合体であり得る。CPU複合体は、それらのCPUキャッシュ及び相互接続を有する所与の数のCPUコアを備える。これらのCPU 752のうちの第1のCPUは、ホストCPUであり得る。これらのCPU 750のうちの第2のCPUは、埋め込みオペレーティングシステム及び/又はアプリケーション728を実行するアプリケーションCPUであり得る。ファームウェア724は、NICのための制御プレーン機能を提供し得る。ファームウェアは、再構成可能処理ユニットRPUなどの低電力CPU上に存在し得る。これは制御プレーンCPU 724と呼ばれる。
いくつかの実施形態では、CPU 750及び752は、別個のCPUによって提供される。他の実施形態では、これらのCPUは、共通のCPUによって提供され得る。いくつかの実施形態では、これらのCPUのうちの一方又は両方は、NICの一部として提供され得る。他の実施形態では、これらのCPUのうちの一方又は両方は、ホストデバイスによって提供され得る。図10に示される実施例では、2つのCPUは別個のCPUである。第1のCPUは、ホストCPU 752であり、第2のCPUは、NICの一部として提供されるCPU 750である。
制御プレーンCPU 724は、CPUから分離され得る。いくつかの実施形態では、制御プレーンCPUは、第2のCPU 750の一部として提供され得る。制御プレーンCPU 724は、NICの一部であり得る。しかしながら、いくつかの実施形態では、制御プレーンCPUは、ホスト内に少なくとも部分的に実装され得る。
先に考察したように、データのストリームは、NICによって受信/送信される。データのストリームは、ネットワークから受信され得るか、又はネットワーク上に送信され得る。データのストリームのうちの異なるストリームは、異なるフローに関連付けられる。異なるフローは、例えば、IPアドレス、ソケット、及びポート番号によって識別することができる。
NICは、それぞれのモジュールによって提供されるいくつかの異なるストリーミングカーネルを有し得る。ストリーミングカーネルは、受信されたデータを処理し得る。ストリーミングカーネルは、処理されたデータを次のストリーミングカーネルに渡し得る。これについては、後で詳細に考察する。
ネットワークから受信されたデータは、MACモジュール114によって受信され得る。MACモジュールは、受信したデータに対してMAC層処理を実行する。MACモジュールは、前述したような仮想スイッチに出力を提供する。出力は、MAC処理されたデータを含み得る。
MAC処理されたデータは、NICの仮想スイッチ部分(vSwitch)102によって処理される。仮想スイッチは、前述のストリーミングサブシステムの少なくとも一部によって提供され得る。実行される処理は、使用されるプラグインに依存し得る。処理は、前述した通りであり得る。vSwitchは、vSwitchがデータを処理したとき、AES(advanced encryption standard、高度暗号化標準)モジュール730に出力を提供し得る。出力は、処理されたデータを含み得る。
AES(高度暗号化標準)モジュール730がvSwitchから出力を受信すると、AESは、処理されたデータを復号化するように構成され得る。復号化の実行に応答して、AESモジュールは、TCPモジュール766又はカーネルに出力を提供し得る。出力は、復号化されたデータを含み得る。
いくつかの実施形態において、AES関数の少なくとも一部が、vSwitchへのプラグインによって提供され得ることを諒解されたい。
この実施例は、AESセキュリティ機能を参照した。このセキュリティは、ChaCha20-Poly1305又はSalsa20及び/又は同様のものなど、任意の他の好適なセキュリティ機能とすることができることを諒解されたい。セキュリティ機能は、暗号化されたデータを判定するため、又はキーを導出するために、暗号アルゴリズムを実装し、かつ/又はカスタムネットワークプロトコルヘッダの処理を可能にし得る。いくつかのシナリオでは、セキュリティ機能は省略され得る。
いくつかの実施形態では、データを解析して、AES演算に使用すべきブロック及びキーを判定する中間モジュールが提供され得る。その中間モジュールは、vSwitchへのプラグインとして提供され得る。
TCPモジュール766は、AESモジュールからのその出力に応答して、例えばTCPヘッダの処理など、復号化されたデータに対して必要なTCP関連処理を実行するように構成されている。他の実施形態では、TCPとは異なるプロトコルをサポートする異なるプロトコルモジュールが、代替的に又は追加的に提供され得る。
いくつかの実施形態では、TCPモジュール766は、全ての必要なTCPプロトコル処理を実行し得る。他の実施形態では、TCPモジュールは省略され得、TCP処理は他の場所で実行され得る。いくつかの実施形態では、TCPモジュールは、TCP処理の一部のみを実行し得る。例えば、TCPモジュールは、リアセンブリを実行し、ヘッダをソフトウェアTCP実装に転送するだけの場合がある。これは、例えば、本出願人がアプリケーション処理ユニット上で提供されるOnloadなどの加速ネットワークスタックによって提供され得る。これについては後で考察する。
TCPモジュールは、プラグインによって、かつ/又はストリーミングサブシステムのエンジンのうちの1つ以上によって提供され得る。これは、NICにおいて実行されるTCP関連処理に依存し得る。前述したように、TCP処理の全部又は一部がNIC内で実行される場合があるか、又はTCP処理がNIC内で実行されない場合がある。
データに関連付けられたコンテキスト又はアドレスに応じて、TCPモジュールによって、キー値KVモジュール736又はNVMeOF(non-volatile memory express over fabrics、不揮発性メモリエクスプレスオーバーファブリック)モジュール734のいずれかに出力が提供される。TCPモジュールによって提供されるこの出力は、プロトコル処理されたデータを含み得る。KVモジュール736及びNVMeOFモジュール734が、提供され得る異なるモジュールの2つの実施例であることを諒解されたい。しかしながら、これらの例示的なモジュールのうちの1つ以上の代わりに、1つ以上の他のモジュールが使用され得ることを諒解されたい。いくつかの実施形態では、2つより多くのモジュール又は1つのみのモジュールが存在し得る。これは、サポートされるアプリケーションの数及び/又はタイプに依存し得る。
この実施例では、KVモジュール及びNVMeOFモジュールは、受信方向においてTCPモジュールの下流にある。他の実施形態では、1つ以上のモジュールが、TCPモジュールと並列に、かつ/又は受信方向においてTCPモジュールの上流に提供され得る。
いくつかの実施形態では、KVモジュール及びNVMeOFモジュールのうちの一方又は両方は、ストリーミングサブシステムへのプラグインモジュールとして提供され得る。
いくつかの実施形態では、デフォルトは、データが1つ以上の特定のデータフローに関連付けられない限り、モジュールのうちの1つに出力を提供することである。この実施例では、デフォルトモジュールはNVMeOFモジュール734であり得、1つ又は特定のデータフローに関連付けられたデータのみがKVモジュール736に提供される。特定のデータフローは、例えば、そのアドレス情報によって識別され得る。
他の実施形態では、モジュールの両方は、それぞれのデータフローに関連付けられ得、データがそれぞれのデータフローに関連付けられている場合にのみ、データがそれぞれのモジュールに出力される。所与のデータフローは、いくつかの実施形態では、1つのモジュールのみに向けられ得る。しかしながら、他の実施形態では、所与のデータフローが、2つの異なるモジュールに向けられ得る。
TCPモジュールとKVモジュールとの間のインターフェースは、TCPモジュールからKVモジュールへの1つ以上の特定のデータフローに関連付けられたデータに対してのみ出力が提供されるようになっている。このインターフェースについては、後で詳細に考察する。同様に、TCPモジュールとNVMeOFモジュールとの間のインターフェースは、TCPモジュールからNVMeOFモジュールへの1つ以上の特定のデータフローに関連付けられたデータに対してのみ出力が提供されるようになっている。
NVMeOFモジュール732は、TCPスタックからの出力に応答してプロトコル処理されたデータに対してその機能を実行し、NIC内のOSスタック734をサポートするNVMEキュー対を介して第1のCPU 752内のNMVeスタック742に出力を提供する。OSスタック734をサポートするこのNVMEキュー対は、前述したようなPCIe機能における1つ以上のvNICによって提供され得るか、又はNVMeOFモジュール732の一部として提供され得る。
NVMeスタック742へのこの出力は、NVMeOFモジュール732によって処理されたデータを含み得る。NVMeスタック742は、ホストCPUである第1のCPU内の関連付けられたアプリケーション720に出力を提供する。
KVモジュール736は、SHM共有メモリインターフェース738に出力を提供する。SHMインターフェース738は、前述したようなPCIe機能における1つ以上のvNICによって提供され得るか、又はNVMeOFモジュール732の一部として提供され得る。
出力は、SHMインターフェース及びAPI 740を介してKVアプリケーション722に提供される。API 740は、ランタイムライブラリによって提供され得る。API 740及びKVアプリケーション722は、第1のCPU上に設けられ得る。
いくつかの実施形態において、アプリケーション720及び722は、異なるCPUによってサポートされ得る。
いくつかの実施形態では、モジュールによって提供される処理は、データのタイプを変更し得る。例えば、vSwitchからの出力は、レイヤ2,3(イーサネットフレーム+IP処理)処理に対応するデータ単位である。TCPスタックモジュールからの出力は、信頼できる順序通りのバイトストリームである。NVMeOFモジュールからの出力は、NVMeブロックストレージレベルトランザクションであり得る。ポストTCPバイトストリームは、KVアプリケーションによってゲット要求又はセット要求として解釈され得る。
所与のプロセス又はコンテキスト(CPU上のアドレス空間)がアクセスし得るメモリの場所は、そのプロセス又はコンテキストに関連付けられた特権レベルに依存することを諒解されたい。CPUによってサポートされる異なるアプリケーションは、異なるアドレス空間に関連付けられ得る。アプリケーションのアドレス空間は、そのアプリケーションの特権に依存し得る。
先の考察は、NICによって受信されたデータの処理に関するものであった。アプリケーションは、代替的又は追加的に、データをネットワーク上に置くように構成され得る。データは、それぞれのメモリの場所から読み出され得る。メモリの場所は、それぞれのアプリケーションに関連付けられたアドレス空間内に存在し得る。データは、代替的又は追加的にメッセージであり得ることを諒解されたい。例として、メッセージは、要求メッセージ、応答メッセージ、クエリメッセージ、又は任意の他の好適なメッセージであり得る。
NVMeアプリケーション720からのデータは、NVMeスタック742及びNVMe QPサポート援OSスタック732を介してNVMeOFモジュール732に渡される。これらのエンティティは、必要に応じてデータを処理する。処理されたデータは、TCPモジュール766に出力され得る。
KVアプリケーション722からのデータは、API 740及びSHMインターフェース738から、必要に応じてデータを処理するKVモジュール736に渡される。処理されたデータは、TCPモジュール766に出力され得る。
TCPモジュール766は、NVMeOFモジュール732及び/又はKVモジュール736からデータを受信する。いくつかの実施形態では、TCPモジュール766は、それらのモジュールのうちの所与の1つからのデータを、そのデータが1つ以上の特定のデータフローに関連付けられている場合にのみ受け入れるように構成され得る。これについては、後に詳細に説明する。
TCPモジュール766は、KVモジュール736又はNVMeOFモジュール732のいずれかから受信したデータに対して必要なTCP関連処理を実行するように構成されている。プロトコル処理されたデータは、AESモジュール730に出力される。
AESモジュール730は、受信されたデータを暗号化するように構成され得る。AESモジュールは、暗号化されたデータをvSwitch102に出力し得る。AESモジュール自体は、ネットワークヘッダ情報からデータブロック及び主要材料を判定するために必要とされるプロトコル解析を実施するためのモジュールによってラップされ得、逆もまた同様である。
vSwitchは、暗号化されたデータを処理し得る。vSwitchによって提供される処理は、NICのプラグインに依存し得る。図10に示されるNICのモジュールのうちの1つ以上は、前述のように、ストリーミングサブシステムへのプラグインとして提供され得る。
vSwitchは、処理されたデータをMAC処理のためにMACモジュールに出力するように構成されている。データは、ネットワーク上に置かれ得る。
vSwitchは、例えば、図4a及び4bに示されるように、前述され得る。しかしながら、他の実施形態では、任意の他の好適なNIC装置が提供され得る。そのNIC装置は、前述したような1つ以上のプラグインをサポートする機能性を有さない場合がある。
ネットワーク管理コントローラNMC726は、制御CPU 724によって提供され得る。NMC762は、どのデータフローがどのモジュールによって処理されるかを制御するように構成されている。NMCは、それぞれのアドレス空間のデータフローのみが所与のモジュールによって処理されることを確実にするようにモジュールをプログラムする。
いくつかの実施形態において、NMC762は、NIC内の異なるフローのステアリングを制御する。
いくつかの実施形態では、異なるエンドユーザは、NICによってサポートされるアプリケーションが異なることを要求する場合がある。前述したように、NVMeアプリケーション及びKVアプリケーションは、サポートされる必要があり得るアプリケーションの実施例である。他の実施形態は、代替的又は追加的に、1つ以上の他のアプリケーションがサポートされ得る。異なるアプリケーションは、1つ以上のそれぞれのモジュールがサポートされること、及び/又はNICの1つ以上のハードウェア部分が特定のアプリケーションをサポートするために割り当てられることを必要とし得る。アプリケーションをサポートするために必要なリソースの割り当ては、NMC726によって制御される。特定のアプリケーションに割り当てられたリソースは、別のアプリケーションに割り当てられたリソース及び/又はプロトコル機能及び暗号化/復号化機能などの異なる機能をサポートするために必要とされる他のリソースから分離されたままであり得る。
いくつかの実施形態では、ハードウェアリソースは、プログラマブルロジックによって少なくとも部分的に提供され得る。
1つ以上のハードウェアリソースは、例えば、前述したような特定のアプリケーション専用であり得る。代替的又は追加的に、1つ以上のハードウェアリソースが2つ以上のアプリケーションによって共有され得る。共有リソースの実施例は、物理的に全てのアクセスがメモリコントローラを介して行われるメモリである。共有リソースの場合、割り当ては、ハードウェアの領域若しくはスライス(アドレスの範囲)、及び/又は帯域幅若しくは優先度などの必要とされ得る1つ以上の他の性質に基づく。全ての共有リソース及び専用リソースを合わせて、アドレス空間と考えられ得る。
先に考察したモジュールの1つ以上は、NMCによって動的にロードされ得る。
モジュールは、ハードウェア加速アプリケーション機能を実装するNIC上のハードウェアであり得る。前述したように、カーネルは、それぞれのモジュールによって提供され得、アプリケーションの機能を実装するのでアプリケーション固有であり得、アプリケーションは潜在的に異なる。モジュールは、いくつかの実施形態において、複数のカーネルに関連付けられ得る。
機能は、ユーザ空間アプリケーションのものであり得る。ほんの一例として、そのような機能は、キー値データベースであり得る。
機能は、オペレーティングシステムアプリケーションのものであり得る。ほんの一例として、そのような機能はファイアウォールであり得る。
機能は、ハイパーバイザ常駐アプリケーションのものであり得る。ほんの一例として、そのような機能は仮想スイッチであり得る。
それぞれのモジュールによって提供されるハードウェアカーネルは、上で考察したようなそれぞれの1つ以上の機能の同じ分離/特権の性質をミラーリングする必要がある。
アプリケーションとカーネルとの間のインターフェースは、シェル様インターフェース又は任意の他の好適なインターフェースによって提供され得る。いくつかの実施形態において、このインターフェースは、カーネルへのソフトウェアAPI及びカーネルのためのハードウェアAPIを提供するファームウェア及びハードウェアの組み合わせによって実装され得る。このインターフェースは、絶縁回路によって提供され得る。この分離回路は、ファームウェアとハードウェアの組み合わせによって提供され得る。提供されるインターフェースは、NICによって使用されるオペレーティングシステム技術に依存し得る。インターフェースは、ハードウェアアドレス空間に関連付けられると考えられ得る。このハードウェアアドレス空間は、プログラマブルロジック、DDR、及びCPUのうちの1つ以上を備え得る。カーネルは、アプリケーションを(インターフェースを介して)NIC上のハードウェアに接続する。
カーネルは、メモリのエリアにロードされ得る。前述のように、モジュールは、1つ以上のカーネル及びそれぞれのインターフェースを備え得る。メモリのこのエリアは、少なくともアプリケーションプログラムによるアクセスから保護され得る。カーネルは、プロセスの実行、アプリケーションをサポートするのに必要なハードウェアの管理、及び割込みの処理などのタスクを実行する。必要とされるハードウェアは、CPU、メモリ、周辺デバイス及び/又はNICのプログラマブルロジックであり得る。ハードウェアは、シェルのハードウェアアドレス空間内にある。
アプリケーションは、ホスト(第1の)CPU上で実行される。
いくつかの実施形態では、ロード可能なカーネルは、実行時に挿入及び除去され得る。カーネルは、任意の好適なタイプのカーネルであり得る。いくつかの実施形態において、カーネルは、ハードウェアで実行するようにコンパイルされたアプリケーションの関数(構成要素)であり得る。
異なるカーネルは、異なる特権又は信頼エリアに関連付けられ得る。異なる信頼エリアが、異なるデータフロー/アプリケーションに対して設定され得る。これにより、異なるアドレス空間を互いに分離することが可能になる。異なるアドレス空間又はフローは、NIC上の異なるハードウェアリソースに関連付けられ得、それらの異なるハードウェアリソースは、互いに分離される。異なるアプリケーションをサポートするカーネルは、異なるインターフェースに関連付けられ得る。
図10の装置では、3つの異なる信頼又は特権エリアが点線によって示され、751a、751b及び751cが参照される。
vSwitch、AES、TCP及びNVMeOFモジュールは、第1の信頼エリア751aに関連付けられ得る。これは、このエリアが特権の第1のドメインに関連付けられることを意味する。
KVモジュール、KVアプリケーション、SHM及びAPIは、第2の信頼エリア751bに関連付けられる。これは、このエリアが第2の特権ドメインに関連付けられることを意味する。
NVMeスタック及び関連付けられたアプリケーションは、第3の信頼エリア751cに関連付けられ得る。これは、このエリアが第3の特権ドメインに関連付けられることを意味する。
概して、第2のエリア及び第3のエリアは、第2の信頼ドメイン及び第3の信頼ドメインのうちの一方から第2のドメイン及び第3のドメインのうちの他方にデータをプッシュすることができないように、互いに分離された状態に保たれる。
したがって、いくつかの実施形態では、異なる特権又は信頼のエリア若しくはドメインが、異なるデータフロー及び/又はアプリケーションに提供される。異なる特権又は信頼エリア領域は、1つ以上のモジュールに関連付けられると考えることができる。前述の実施例では、インターフェースは、モジュールによって提供され得る。いくつかの実施形態では、共通インターフェースは、1つ以上のモジュールによって共有され得る。
図11を参照する。図11は、第1の信頼エリア(AOT)、AOT A、及び第2のAOT、AOT Bを示す。信頼エリアは、互いに分離されていることを諒解されたい。この実施例では、各信頼エリアは、それ自体のアドレス空間に関連付けられる。これらの信頼エリアの各々は、NIC内に提供される。
この実施例では、各信頼エリアに関連付けられたアドレス空間に重複はない。各信頼エリアは、所与の特権レベルに関連付けられ得る。特権レベルは、同じであり得るか、又は異なり得る。メモリなどのハードウェアリソースが信頼エリア間で共有される場合、リソースは、それぞれの信頼シェル又はエリアによってアクセス可能な部分のみがその信頼シェル又はエリアに可視(及びアクセス可能)であるように分割され得る。1つの信頼シェル又はエリア内のハードウェアは、異なる信頼シェル又はエリア内のハードウェア(ワイヤ、ロジックなど)に対する知識又はアクセスを有していない。これは、デバッグ及び/又は診断ツール、及びこのハードウェア並びに信頼エリアの1つ以上のカーネルを生成及びリンクするために使用されるソフトウェアコンパイラに広がり得る。
リソースの使用は、システムポリシーに従って共有される。CPUでは、例えば、MMU(memory management unit、メモリ管理ユニット)が、このメモリ仮想化機能を実行し得る。NICでは、アプリケーション及び関連付けられたハードウェアカーネルを動的に創出し得、したがって、単一のハードウェア要素は、全ての可能な信頼エリアの組み合わせを仮想化することができない。
いくつかの実施形態では、アドレス空間が共有されることが可能である。これは、特権を強制するためのリソース固有の保護(共有物理メモリのためのMMUなど)が存在することを必要とする場合がある。
NIC内のアドレス空間は、いくつかの実施形態では、NMC726によって制御され得る。
信頼エリアのアドレス空間は、1つ以上のアクセラレータエンジン、NICのプログラマブルロジック、及び/又はローカルメモリを包含し得る。
実行時に、2つの信頼エリア間の通信チャネルが創出される。この通信チャネルは、バス又は同様の通信チャネルであり得る。ほんの一例として、通信チャネルはAXI-Bバスであり得る。バスは、aとして参照される。
通信チャネルが創出されると、分離回路がセットアップされる。信頼エリアの各々には、前述したようなインターフェースが提供される。AOT Aは、インターフェース、インターフェースAを有し、AOT Bは、インターフェース、インターフェースBを有する。これらのインターフェースの各々には、それぞれの分離回路が提供される。この分離回路は、システムコールハンドラ機能によって提供される機能に類似した機能を提供し得る。例えば、この機能は、データ有効性をチェックし、かつ/又はモジュールがリセット又は除去された場合の予期せぬバストランザクション終了などの下位レベルの問題を扱い得る。分離回路によって提供される機能は、それぞれの信頼エリアに関連付けられた相対的特権に依存する。システムコールハンドラ型機能は、アプリケーションとカーネルとの間の相互作用を効果的に可能にする。1つの信頼ドメイン内の1つのカーネルは、そのカーネルが異なる信頼ドメイン内にある別のカーネルのアドレス空間に対して直接読出し及び書込みを行うことができない。
分離回路がセットアップされると、それぞれのアドレス空間に対応するカーネルロジックがロードされる。これは、cとして参照される。このカーネルロジックは、1つ以上のカーネルに関連付けられ得る。分離回路は、信頼エリアのモジュール又はカーネルのうちの具体的な1つに関連付けられ得る。これは、信頼エリアの入口点モジュール及び/又は信頼エリアの出口点モジュールであり得る。
提供される分離回路は、各信頼エリアに関連付けられた相対的特権に依存し得る。これに関して、図12a及び図12bを参照する。
図12aでは、AOT Aは、AOT Bよりも低い特権に関連付けられる。これは、AOT AがKVカーネルを備え、AOT BがvSwitch、AESカーネル、TCPカーネル及びNVMeOFカーネルを備える、図10の実施例に対応する。この場合、制御又はマスタ分離回路は、AOT B内に提供され得る。特に、AOT Aとのインターフェースは、創出された通信チャネルを介してTCPカーネルとなり得る。分離回路は、KVカーネルに向けられるべき特定のフローに関連付けられたデータのみが実際にKVカーネルに向けられることを確実にするために提供され得る。分離回路は、TCPカーネルの出力とバスとの間に設けられ得る。いくつかの実施形態では、分離回路はカーネルに統合され得る。
代替的又は追加的に、分離回路は、AOT Aからの任意の不要なデータフローを破棄させ得る。
いくつかの実施形態では、モジュールが除去/リセットされるときのハードウェアレベルの問題に対処するために、分離回路が各AOT内に提供され得る。これは、特権に関係なくいずれかの側で起こる可能性がある。このカーネルの除去又は挿入は、必要に応じていつでも行い得る。言い換えれば、カーネルは、システムの実行中に挿入又は除去され得る。
図12bでは、AOT Aは、AOT Bと同じ特権に関連付けられる。この場合、AOT B内及びAOT A内に提供される分離回路は、等しい重みである。AOT B内の分離回路は、カーネルAに向けられるべき特定のフローに関連付けられたデータのみが実際にカーネルAに向けられることを確実にするために提供され得る。AOT A内の分離回路は、カーネルBに向けられるべき特定のフローに関連付けられたデータのみが実際にカーネルBに向けられることを確実にするように提供され得る。
代替的又は追加的に、AOT B内の分離回路は、AOT Aからの任意の不要なデータフローを破棄させ得る。代替的又は追加的に、AOT A内の分離回路は、AOT Bからの任意の不要なデータフローを破棄させ得る。
絶縁回路は、ヘッダビット(例えば、IPソースアドレスビット)などのデータ値を強制して、それらが正しいことを確実にし得る。このデータ値を強制する分離回路は、データ値を出力する信頼エリア内及び/又はデータ値を受信する信頼エリア内にあり得る。
特定の信頼エリアに関連付けられた分離回路は、それぞれの信頼エリアによって受信されたデータを、それぞれの信頼エリアによって使用される形式になるように修正し得る。特定の信頼エリアに関連付けられた分離回路は、それぞれの信頼エリア内でのみ必要とされるデータの部分を除去するように、それぞれの信頼エリアによって出力されるデータを修正し得る。
それぞれの信頼エリアによって使用される分離回路は、それぞれの信頼エリアである、特権ドメイン内でのみ使用されるカプセル化など、データを追加及び/又は除去するように構成され得る。
絶縁回路は、バスプロトコルが適切に順守されることを強制し得る。これは、例えば信頼エリア間のリンク上であり得る。例えば、分離回路は、AXIトランザクションが、例えば片側がリセット又は除去され、かつ/又は制限(長さ)内である場合に、適切に終了することを確実にし得る。
代替的又は追加的に、分離回路は、クレジットベースのフロー制御及びスケジューラインターフェースが正しく動作することを確実にし得る。具体的な信頼エリアの動作環境によっては、隔離回路による強制は、任意選択的であり得る。
したがって、カーネルがNICにロードされると、カーネルを他のカーネルに接続する1つ以上のハードウェアリンカ又は通信リンクが提供される。これらのハードウェアリンカは、許可されたネットワークフローに関連付けられたデータのみが受信及び/又は出力され得るようになっている。カーネルのローディングは、1つ以上のハードウェアリソースが、所与のアドレス空間に対してアドレス指定可能であることを可能にする
所与のアプリケーションに関連付けられたアドレス空間は、NICによって提供されるアドレス空間を含み得る。異なるアドレス空間は、異なるアプリケーションに関連付けられる。異なる信頼エリアに起因して、1つのアプリケーションが、異なるアプリケーションに関連付けられたリソースにアクセスすることが防止され得る。アドレス空間は、所与のアプリケーションアドレス空間/信頼エリアに対して動的に構築され得る。アドレス空間は、CPUリソースを含み得る。したがって、信頼エリアは、CPU上で実行されるソフトウェアアプリケーションの分離を提供するために使用されるCPUアドレス空間構造の拡張であると考えられ得る。したがって、信頼エリアは、CPUを含む異なるハードウェアの組み合わせ上で実行されるハードウェアとソフトウェアとのハイブリッドアプリケーションのための分離を提供し得る。
AESモジュール及びvSwitchなどのデータプレーンアクセラレータ機能は、ストリーミングカーネルとして論理的に表され得ることを諒解されたい。これらのカーネルは、TCPカーネルと同じ信頼エリアの一部であると考えられ、同じ信頼エリアにおいて提供される。
NMC726は、カーネルトポロジを介したカプセルルーティングを定義するNIC上のソフトウェア定義ネットワークを提供し得る。カプセルは、それぞれのネットワークフローに関連付けられ、カプセルは、関連付けられたネットワークフローに従ってルーティングされる。カプセルは、前述した通りであり得る。
NMC726は、NICハードウェアが異なる信頼エリアによって使用されることを可能にするように構成されている。それぞれの信頼エリアによって使用されるハードウェアは、ファブリック(再構成可能ロジック)、アクセラレータ、ネットワークインターフェース及びCPU(埋め込み及び/又は外部)のうちの1つ以上を備える。NMCは、異なる保護ドメイン又は信頼エリアを提供するように構成されている。制御プレーンは、ランタイム機能を含む。このランタイム機能は、図10に関連して説明したようなカーネルの動的ローディングを制御する。
この実施例では、2つのアプリケーションに共通のTCPモジュールが提供される。他の実施形態では、TCPモジュールが、各アプリケーションに提供される。
AESモジュールは、いくつかの実施形態において省略され得る。他の実施形態では、1つ以上の異なる暗号化モジュールが代わりに使用され得る。
図10に示されているモジュールは、ほんの一例である。他の実施形態では、1つ以上のモジュールが省略され得る。1つ以上の代替モジュールが提供され得る。異なる信頼ドメインの2つ以上のアプリケーションによって共有される少なくとも1つの共有モジュール、及び/又は同じ信頼ドメインの1つ以上のアプリケーション専用の少なくとも1つの専用モジュールが提供され得る。1つ以上の専用モジュールは、データ経路内の1つ以上の共有モジュールよりもアプリケーションに近い場合がある。
モジュールは、モジュール機能を提供するように構成されているNICのハードウェアリソースのセットとみなし得る。これは、カーネルを提供するためであり得る。これらのリソースは、ファブリック(再構成可能ロジック)、アクセラレータ、ネットワークインターフェース、及びCPU(埋め込み及び/又は外部)のうちの1つ以上であり得る。ほんの一例として、モジュールは、プログラマブルロジックによって、又は任意の他の好適なハードウェアによって提供され得る。いくつかの実施形態では、モジュールは、構成可能なハードウェアによって提供され得る。モジュールは、モジュールの必要な機能を提供するためにコンピュータコードを実行するように構成され得る。モジュールは、メモリを備えるか、又はメモリへのアクセスを有し得る。そのメモリは、例えば、コンピュータコードを記憶し得る。
いくつかの実施形態では、専用モジュールは、2つのアプリケーションによって共有され得、その場合、それら2つのアプリケーションは、同じ信頼ドメインを共有する。
共有モジュールは、各信頼ドメインが1つ以上のアプリケーションに関連付けられている、2つ以上の異なる信頼ドメインにサービスを提供し得る。
前述の実施例では、カーネル又はモジュールのうちの1つの1つ以上が、プラグインによってストリーミングサブシステムに提供されるものとして説明されている。他の実施形態では、前述のようなストリーミングサブシステムアーキテクチャが使用されない場合があることを諒解されたい。この後者の実施例では、モジュールは、受信データのためのストリーミング受信経路及び/又は送信データのためのストリーミング送信経路において提供され得る。そのようなストリーミング経路は、前述のエンジンのうちの1つ以上を含み得る。しかしながら、ストリーミング経路がデータを順番に処理するように構築され得るような実施例では、ハブ及びそれらの関連付けられたスケジューラは省略され得る。
他の実施形態では、FPGA(又は他のプログラマブルロジック)は、サービスシナリオをサポートし得る。例えば、1つの信頼エリアは、インフラストラクチャプロバイダのための監視及び課金並びにプライベートネットワーキングを含み得、別の信頼エリアは、全ての他のハードウェアリソースを含み得る。
いくつかの実施形態の方法を示す、図17を参照する。これは、ネットワークインターフェースデバイス内で実行され得る。
方法は、ステップ1701において、第1の信頼エリアと第2の信頼エリアとをリンクすることを含み、第1の信頼エリアは、ネットワークインターフェースデバイスの第1の部分を含み、第1の部分は、第1のカーネルを含み、第2の信頼エリアは、第1の部分とは異なるネットワークインターフェースデバイスの第2の部分を含み、第2の部分は、第2のカーネルを含む。
この方法は、ステップ1702において、第1の信頼エリアに関連付けられた分離回路を使用して、第1の信頼エリアと第2の信頼エリアとの間で渡されるデータを制御することを含む。
以下の実施例では、Cephを参照する。Cephは、データストレージプラットフォームの実施例である。Cephはデータストレージプラットフォームの一実施例であり、実施形態は、任意の他の好適なデータストレージ及び/又は管理プラットフォーム又はアプリケーションとともに使用され得ることを諒解されたい。他の実施形態は、代替的に又は追加的に、NVMe又は分散オブジェクトストアアプリケーションを使用し得る。
ストレージ仮想化では、ゲストOSが要求を行い得る。この要求は、virtio-blk(ブロック)要求であり得る。この要求は、読出し又は書込み要求であり得る。これは、Cephに対するSPDK(storage performance development kit、ストレージ性能開発キット)BDEV(block device、ブロックデバイス)プラグイン、又は他の好適な機能によって扱われ得る。
Virtioデバイスは、仮想環境において提供されるが、仮想マシンを有するゲストには物理デバイスであるように見える。これは、ゲストOSが標準ドライバを使用することを可能にするためである。Virtio-blkは仮想化されたストレージバックエンドの一実施例であり、他の実施形態ではVirtio-SCSIを使用し得る。他の実施形態では、非Virtioデバイス及び非Virtio仮想化ストレージバックエンドが提供され得る。
SPDKは、スケーラブルなユーザモードストレージアプリケーションを書くためのツール及びライブラリのセットを提供する。SPDKは、必要なドライバの全てをユーザ空間内に移動させ得、これにより、システムコールが回避され、アプリケーションからのゼロコピーアクセスが可能になる。SPDKブロックデバイス層であるBDEVは、従来のカーネルストレージスタック内のデバイスドライバのすぐ上に位置することが多いオペレーティングシステムブロックストレージ層と同等であるように意図されたCライブラリである。このライブラリは、ブロックストレージデバイスとインターフェースするブロックデバイスを実装するためのプラガブルモジュールAPIを提供し得る。他の実施形態では、SPDKの代わりに他のツール及びライブラリを使用し得る。
Ceph機能は、1つ以上の他のCephノードを使用してネットワークを介して要求をサービスする。これは、TCPソケットを介してMSGRプロトコル(これは、メッセージがCephで配信される低レベルプロトコルである)を使用し得る。ホストTCPスタックは、ネットワーク要求を送り、1つ以上のリモートCephノードから応答を受信し得る。Ceph機能は、応答を処理し、SPDK BDEV要求を完了する。Virtio-Blkドライバは、例えば、要求が読取り要求であった場合、読取りデータをゲストOSに配信し得る。
NICによるストレージ仮想化のサポートを示す、図13及び図14を参照する。NICは、前述した通りであり得る。
いくつかの実施形態は、CPU処理能力を超え得るデータレートの扱いを容易にし得る。
いくつかの実施形態は、制御とデータの扱いを分離し得る。データペイロード及びヘッダは、別々に扱われ得る。
いくつかの実施形態では、ペイロードデータは、DDRなどのメモリに書込まれる。これは、NICのメモリであり得るか、又はNICとは別個であり得る。
制御データの処理(例えばプロトコル処理)はソフトウェアで、データの扱いはハードウェアで行い得る。
いくつかの実施形態では、前述したようなカプセルを使用し得る。
図13は、ストレージ仮想化をサポートするように構成されているNIC 109を示す。NICは、少なくとも部分的に前述した通りであり得る。NIC 109は、1つ以上のMAC層機能114を有する。仮想スイッチ機能102は、前述したように、MACからデータを受信し、かつ/又はMACにデータを提供するように構成されている。図10に関連して説明したようなTCPモジュール766が、提供され得る。TCPモジュール766は、仮想スイッチ機能102からデータを受信し、かつ/又は仮想スイッチ機能にデータを提供し得る。TCPモジュールは、前述したようにデータを処理し得る。
Cephモジュール768が提供される。
Virtio-Blk(ブロック)モジュール772が提供される。Virtio-Blk 772は、DMAアダプタである。これは、標準PCIハードウェアパーソナリティを提示し、CPU 752上のソフトウェアがNICにVirtioコマンドを発行できるように、Virtio標準に準拠するDMAリングをサポートする。
Cephモジュール768及びVirtio-Blk772について、より詳細に説明する。これらのモジュールは、ハードウェアで実装され得る。これらのモジュールは、いくつかの実施形態において、データプレーンを扱う。これらのモジュールのうちの一方又は他方又は両方は、プラグインとして実装され得る。
NIC109には、DDRメモリ770又は任意の他の好適なメモリが提供される。
前述したようなホストCPU 752が提供され得る。ホストCPUは、DDR 762(又は他の好適なメモリ)及び仮想マシン764を備え得る。
NIC装置又はホストによって提供される第2のCPU 750は、DDR 760(又は他の好適なメモリ)を備え得る。これは、DDR 770と同じか、又は異なり得る。これは、図10に関連して考察した第2のCPUと同じであり得る。
第2のCPUは、Cephクライアント754、ネットワークスタックライブラリ756、及びSPDKライブラリ751を備える。ネットワークスタックライブラリ756及びSPDKライブラリ751は、ユーザ空間においてCephクライアントとリンクされる。ネットワークスタックライブラリには、Cephとのソケットインターフェースが提供されている。SPDKライブラリには、CephクライアントとのBDEVインターフェースが提供されている。
SPDKライブラリは、Virtio-Blkハードウェア772を認識し、かつ非CPUコヒーレントデータ(後で考察するDDR 770に記憶されたペイロード)に対してDMAポインタを使用することができるVirtio-Blkソフトウェア機能758を含む。
TCP及びVirtio-Blk機能のためにホストのオペレーティングシステムカーネルを使用しないほうが、性能上の利点があり得る。
ネットワークスタックライブラリ756は、出願人によって提供されるOnloadネットワークスタックライブラリ、又はユーザ若しくはアプリケーションレベルで動作する任意の他の好適なネットワークスタッククライアントであり得る。Onloadライブラリは、オペレーティングシステムの関与なしに、プロトコル態様をユーザレベルで扱うことを可能にするように、アプリケーションレベルで提供されている。言い換えれば、オペレーティングシステムカーネルバイパスがサポートされる。ネットワークスタックライブラリは、任意の好適なプロトコルをサポートし得る。いくつかの実施形態では、ネットワークスタックは、IP及び/又は任意の他の好適なプロトコル上でTCP及び/又はUDPをサポートし得る。図13及び図14に示す実施例では、Onloadライブラリは、TCP機能757をサポートする。
実施例としてCeph読取り応答の扱いを使用する図13の側面をより詳細に示す、図14を参照する。図14では、図4aのNICの一部が、第1のエグレスプラグイン790及び第2のイングレスプラグイン792とともに概略的に示されている。他の実施形態では、図4bのNICを使用し得る。
第1のプラグイン790は、ユーザレベルで提供されるネットワークスタックへのインターフェースを提供する。この第1のプラグインは、Onload TCP RXプラグインであり得る。これは、TCPモジュール766に対応し得る。このプラグインは、エグレスプラグインであり、ハブ256からのものである。これは、パケットプロセッサとみなされ得る。
第2のプラグインは、データストレージプラグインであり得る。例えば、第2のプラグインは、Cephプラグインである。第2のプラグインは、イングレスプラグインであり、ハブ258に入力を提供する。このプラグインは、Cephモジュール768に対応し得る。これは、パケットプロセッサとみなされ得る。
データフロー又は接続は、データストレージアプリケーション(この例ではCeph)のためのデータのパケットのストリームを受信し得る。パケットは、ヘッダと、記憶されるデータとを含み得る。この実施例では、データは読取り要求に応答して提供される。ヘッダは、Cephヘッダ及びTCPヘッダ(又は他のトランスポートプロトコルヘッダ)を含み得る。
データは、ネットワーク受信ポートストリーミングエンジンから第5のハブ260によって受信され、第2のハブ254を介してMAE 244に向けられる。MAE 244は、第3のハブ256を介してデータを第1のプラグインに向ける。
第1のプラグインは、パケットを処理してTCPヘッダ部分を取得し得る。第1のプラグインはまた、提供されるデータが順序通りであることを確実にする。第1のプラグインは、データストレージプラグイン792に順序通りのバイトストリームを提示する。データストレージヘッダは、バイトストリーム内の(IPセグメントの先頭だけでなく)任意の場所に現れ得る。データが順番通りに到着しない場合、データストレージプラグインへの出力には、ネットワークフレーム全体と、データに処理すべきアプリケーションデータが包含されていないという指示と、を含み得る。
第1のプラグイン790は、パケットをデータストレージプラグイン792に渡す。データ記憶プラグインは、データストレージアプリケーションヘッダとプロトコルヘッダとを分離する。例えば、プロトコルヘッダはTCPヘッダであり得る。データストレージプラグインは、分割されたヘッダをハブ258に出力する。第4のハブは、TCPヘッダをネットワークスタックのTCPヘッダリングに、かつデータストレージアプリケーションヘッダをネットワークスタックのパケットペイロードリングに向ける。データストレージプラグインは、パケットのデータを直接メモリに向ける。データストレージプラグインはまた、ネットワークスタックのパケットペイロードリングへのデータストレージアプリケーションヘッダを有するポインタを提供する。ポインタは、メモリ770内のデータの場所を指す。
第2のCPU上のOnloadクライアント756は、TCP状態制御に関連付けられているTCPヘッダリングを有する。これは、ハブ258からTCPヘッダを受信する。Onloadクライアントは、Cephヘッダと、メモリ内のデータの場所へのデータポインタとを管理するために使用されるパケットペイロードリングを有する。また、TCP再注入制御を有する再注入リングも存在する。これは、パケットの順番通りでなく、パケットを正しい順序にするために1つ以上のパケットを再注入する必要がある場合に使用される。
ユーザレベルでは、CPU 750において、SPDKはVirtio-Blkソフトウェア機能758と、Cephクライアント754とインターフェースするBDEVインターフェースとを提供する。BDEVは、Cephのブロックストレージ構成要素用のライブラリである。Cephクライアント754は、Cephストレージと通信し得る。Cephクライアント754は、Onloadクライアントによって提供されるソケットインターフェースを介してリモートストレージ又は他のCephノードと通信し得る。いくつかの実施形態では、Cephアプリケーションは、ブロックストレージ要求を行っているアプリケーションとは異なるオペレーティングシステム内で実行される。Cephアプリケーションは、ユーザ空間ネットワークスタック、例えば、Open Onloadを介してネットワークにアクセスする。Cephアプリケーションは、例えばSPDKによって提供されるユーザ空間ストレージスタックを介して、そのローカルストレージにアクセスする。Cephアプリケーションのアクセスにより、データはSPDKを介してDMAによって転送される。
Ceph読取り応答パケットの処理について説明する。BDEV.read API呼び出しを発行するvirtio-blk758ソフトウェアによって受信されるvirtio-blk772ハードウェアインターフェースを使用して、VM 764によって生成されるvirtio-blk読取り要求によって、読取り動作が開始されることを諒解されたい。Cephクライアント754は、データを要求するために他のCephノードにネットワークTCPソケット書込みを発行していた。戻りデータ(読取り応答)は、図14の実施例がピックアップするポイントである。
Ceph読取り応答パケットは、ネットワーク受信ポートストリーミングエンジンから第5のハブ260で受信され、第2のハブ254を介してMAE 244に向けられる。データは、前述したようなカプセルによって伝送されることに留意されたい。Ceph受信応答は、Ceph読取りデータ、Cephヘッ、及びTCPヘッダを含む。MAE 244は、第3のハブ256を介して第1のOnloadプラグイン790にデータを向ける。
図14から分かるように、第1のプラグインは、Ceph読取り応答を受信する。第1のプラグインは、Ceph応答のTCPヘッダを処理し得る。
第1のプラグインは、Cephプラグインに出力を提供する。Cephプラグインは、Ceph読取りデータをDDRに直接書込む。出力はまた、Cephプラグインによってハブ258に提供される。この出力は、TCPヘッダと、Ceph読取りデータが記憶されているメモリ場所へのポインタを有するCephヘッダ部分とを含む。
TCPヘッダは、ハブ258によって、Onloadネットワークスタック内のTCPパケットペイロードリングに渡される。
DDR内のCephデータへのポインタを有するCephヘッダは、Onloadネットワークスタック内のパケットペイロードリングに渡される。いくつかの実施形態では、Cephヘッダの内容は、Onloadネットワークスタックに対して不透明である。Onloadネットワークは、このCephデータを「アプリケーション」データとして取り扱う。代替的又は追加的に、他のアプリケーションがサポートされ得ることを諒解されたい。
CephクライアントはTCPソケットを読取り、パケットペイロードリングからポインタを有するCephヘッダであるパケットペイロードリングに記憶されたデータを受信し、BDEVインターフェースに応答を提供してBDEV読取り呼び出しを完了する。これは、Virtio-blk758(ブロックプロキシ)への出力をもたらし、これは、データポインタを使用して、読取り応答データがホスト内の仮想マシンに渡されるようにする。Virtio-blkは、Ceph読取り応答データのホストメモリへのDMAを引き起こす。DDRへのポインタが使用され、読取りデータをホストメモリに提供するためにDMA動作が実行される。Cephクライアントは、ポインタの性質を認識していない。Cephクライアントは、BDEVインターフェースを介して渡されるポインタを見る。ポインタ上でハードウェアDMA動作を呼び出すことができるのは、Virtio-blk758SPDKプラグインである。
ネットワークスタックのTCP状態制御は、TCPヘッダを使用して、SACK(selective acknowledgement、選択的肯定応答)又はACKがCeph読取り応答のソースに返送されるべきかどうかを判定する。TCPヘッダはシーケンス番号を包含し、これを使用して、どのパケットが受信されたか、及び欠落パケットがあるかどうかを判定することができる。SACK/ACKは、CephピアのTCPスタックに、TCPデータが再送信される必要があるかどうかを示す。Ceph(ソフトウェア部分754及びプラグイン又はハードウェア部分768の両方)は、再送信などを伴う信頼できるバイトストリームがTCP層において扱われることを確認する。
TCP SACK/ACKは、第1のハブ252に注入される。TCP SACK/ACKは、VNIC TXエンジン240に渡される。VNIC TXエンジンから、TCP SACK/ACKは、第2のハブ254を介してMAE244に渡される。TCP SACK/ACKは、第3のハブ256に渡され、ネットワーク上に出力するためにネットワーク送信ポートストリーミングエンジン208に出力される。
TCP SACK/ACKは、ネットワーク上に送信するのに好適な形式になるように、ストリーミングサブシステムを通過する際に処理され得ることを諒解されたい。
TCP再注入リングは、TCPパケットの再注入を制御するために提供され得る。これは、TCPパケットフローの順序を再確立するためであり得る。TCPパケットシーケンス番号は、1つ以上のパケットの並び替えが必要かどうかを判定するために使用される。TCP再注入リングは、Cephプラグイン及びハブ258を介して第1のプラグインから再注入されるべき1つ以上のパケットの指示を受信し得る。TCP再注入リングは、Cephプラグインが、ネットワーク再送信又は順不同データ受信に続いて、アプリケーションデータのハードウェア処理を再開することを可能にし得る。
再注入されるべきTCPパケットは、そのTCPヘッダがTCPパケットヘッダリングから除去され、そのCephヘッダがパケットペイロードリングから除去される。
再注入されたTCPパケットは、第1のハブ252に提供され、VNIC TXエンジン240に渡され、第2のハブ254を介してMAE 244に向けられる。再注入されたパケットは、次いで、ハブ256を介して第1のプラグインに渡される。
例外経路データの全てがソフトウェアに送られるので、再注入されたパケットは、ネットワークから受信されたかのようにCephプラグインが処理する全てのペイロードデータを包含する。データがローカルDDRに記憶されるのはこのポイントのみである。第1のプラグ及び第2のプラグは、TCPヘッダがパケットヘッダリングに渡され、再注入されたパケットのデータポインタを有するCephヘッダがパケットペイロードリングに追加されるように、再注入されたパケットを処理する。
代替的に、Cephプラグインは、順不同データに対しても例外経路データの全てをDDRに記憶させる。この実施形態では、再注入されたパケットは、TCPヘッダと、DDRへのポインタを有するCephヘッダとを含み得る。再注入されたパケットは、DDRに記憶されたデータを含まない場合がある。再注入されるパケットは、パケットが再注入されたパケットであるという指示を含み得る。
別の実施形態では、TCPスタック(又は他のトランスポートプロトコル処理スタック)は、ハードウェアで完全に実装され得る。このスタックは、再送信を含む全てのプロトコル動作を実行し得る。この実施例では、Onloadソフトウェアは省略され得る。Cephプラグイン792は、DDR 770内のデータの場所へのデータポインタをソフトウェア内のCephクライアント754に直接配信し得る。
したがって、いくつかの実施形態では、データプレーンハードウェアが、リアセンブリ動作を実行し、データからのヘッダを解析する。いくつかの実施形態では、このデータプレーンハードウェアは、ストリーミングサブシステムへの1つ以上のプラグインによって提供され得る。いくつかの実施形態では、データは、ハードウェアプラグインのローカルのバッファに保持され得る。
いくつかの実施形態は、キュー対を介してヘッダをソフトウェアに配信させ得る。これらのヘッダは、カプセル内のデータの制御プレーン部分を含む。ソフトウェアは、制御プレーン機能を実行するために使用され得る。ソフトウェアは、プロトコル処理を扱い得る。例えば、ソフトウェアは、TCPプロトコル処理を提供し得る。これは、再送信プロセスを扱うことを含み得る。
いくつかの実施形態は、ストレージ仮想化を提供し得る。
いくつかの実施形態は、ヘッダ情報のみが埋め込みCPUによって処理されるように、ホストにおいてブロックストレージ読取り/書込みコマンドを仮想化し得る。
図示の実施例では、プラグインが使用されている。異なるストリーミングサブシステム構造が、Onloadハードウェア及びCephハードウェアのためのプラグインを使用することなく、データフロー内にOnloadハードウェア及びCephハードウェアを含めて使用され得ることを諒解されたい。
この実施例では、Ceph、Onload及びSPDKが使用される。これらはほんの一例であり、他の実施形態は任意の他の好適なコンピュータプログラムを使用し得る。
いくつかの実施形態では、複数のデータパケットを含むストレージ応答を受信するように構成された入力を備えるネットワークインターフェースデバイスが提供され、各データパケットは、ヘッダ部分及び記憶されるデータを含む。ヘッダ部は、トランスポートプロトコルヘッダと、データストレージアプリケーションヘッダとを含む。ネットワークインターフェースデバイスは、複数のパケットを受信し、トランスポートプロトコル処理を実行してトランスポートプロトコル処理されたパケットを提供するように構成された第1のパケットプロセッサを備える。ネットワークインターフェースデバイスは、第1のパケットプロセッサからトランスポートプロトコル処理されたパケットを受信し、記憶されるデータをメモリに書込み、データストレージアプリケーションヘッダ及び記憶されるデータが書込まれたメモリ内の場所へのポインタを含む出力を提供するように構成された第2のパケットプロセッサを備える。
ネットワークインターフェースデバイスによって実行される方法を示す、図15を参照する。
1501では、本方法は、各々がヘッダ部及び記憶されるデータを含む複数のデータパケットを含むストレージ応答を受信することを含み、前述のヘッダ部は、トランスポートプロトコルヘッダと、データストレージアプリケーションヘッダとを含む。
1502では、本方法は、受信した複数のトランスポートプロトコル処理済みパケットをトランスポートプロトコル処理することを含む。
1503では、本方法は、トランスポートプロトコル処理されたパケットを処理して、記憶されるべきデータをネットワークインターフェースデバイス内のメモリに書込むことと、データストレージアプリケーションヘッダ及び記憶されるべきデータが書込まれたメモリ内の場所に対するポインタを含む出力を提供することと、を含む。
態様及び特徴は、場合によっては個々の図に記載されていることもあるが、組み合わせが明示的に示されていなくても、又は組み合わせとして明示的に記載されていなくても、1つの図からの特徴を別の図の特徴と組み合わせることができることが諒解されよう。
本明細書で提供される本発明の装置の説明は、例解を目的とするものであり、網羅的であること、又は開示される形態及び実施例に限定されることを意図するものではない。本明細書で使用される用語は、本発明の装置の原理、実際の適用又は市場で見出される技術に対する技術的改善を説明するため、及び/又は本明細書で開示される本発明の装置を当業者が理解することを可能にするために選択された。変形例及びバリエーションは、記載された発明の装置の範囲及び趣旨から逸脱することなく、当業者には明らかであり得る。したがって、そのような特徴及び実装形態の範囲を示すものとして、前述の開示ではなく、以下の特許請求の範囲が参照されるべきである。
Claims (15)
- ネットワークインターフェースデバイスであって、
複数のデータパケットを含むストレージ応答を受信するように構成された入力であって、前記複数のデータパケットの各々が、ヘッダ部分及び記憶されるデータを含み、前記ヘッダ部分が、トランスポートプロトコルヘッダ及びデータストレージアプリケーションヘッダを含む、入力と、
前記複数のパケットを受信し、トランスポートプロトコル処理を実行して、トランスポートプロトコル処理されたパケットを提供するように構成された第1のパケットプロセッサと、
前記第1のパケットプロセッサから前記トランスポートプロトコル処理されたパケットを受信し、前記記憶されるデータをメモリに書込み、前記データストレージアプリケーションヘッダ及び前記記憶されるデータが書込まれた前記メモリ内の場所へのポインタを含む出力を提供するように構成された第2のパケットプロセッサと、を備える、ネットワークインターフェースデバイス。 - 前記ネットワークインターフェースデバイスが、トランスポートプロトコル処理アプリケーションの少なくとも一部をサポートするように構成されており、前記第2のパケットプロセッサが、前記トランスポートプロトコルヘッダ、前記データストレージアプリケーションヘッダ及び前記ポインタを、前記トランスポートプロトコル処理アプリケーションに提供するように構成されている、請求項1に記載のネットワークインターフェースデバイス。
- 前記ネットワークインターフェースデバイスが、データストレージアプリケーションの少なくとも一部を提供するように構成されている、請求項1に記載のネットワークインターフェースデバイス。
- 前記データストレージアプリケーションが、Cephアプリケーション、不揮発性メモリエクスプレス(Non Volatile Memory Express、NVMe)アプリケーション、又は分散オブジェクトストアアプリケーションのうち少なくとも1つを含む、請求項3に記載のネットワークインターフェースデバイス。
- 前記データストレージアプリケーションが実行するように構成されているオペレーティングシステムが、対応するストレージ要求を行うブロックストレージアプリケーションのオペレーティングシステムとは異なるオペレーティングシステムである、請求項3に記載のネットワークインターフェースデバイス。
- 前記データストレージアプリケーションが、(a)ユーザ空間ネットワークスタックを介して、ネットワークにアクセスすること、(b)前記ユーザ空間ストレージスタックを介して、前記データストレージアプリケーションに関連付けられたローカルストレージにアクセスすること、又は(c)ユーザ空間ストレージスタックを介した直接メモリアクセスを使用して、前記データを記憶させること、を行うように構成されている、請求項3に記載のネットワークインターフェースデバイス。
- 仮想化ストレージバックエンド機能を更に備え、前記仮想化ストレージバックエンド機能が、ホストからストレージ要求を受信するように構成されている、請求項1に記載のネットワークインターフェースデバイス。
- 前記ストレージ応答が、データストレージアプリケーションに対する読取り応答を含み、前記読取り応答が、前記データストレージアプリケーションの読取り要求に応答して提供される、請求項1に記載のネットワークインターフェースデバイス。
- 前記第1のパケットプロセッサが、前記複数のパケットのうちの1つ以上が順不同であるかどうかを判定するように構成されており、前記複数のパケットのうちの1つ以上が順不同パケットであると判定されたとき、前記第1のパケットプロセッサが、前記順不同パケットを関連付けられた指示とともに前記第2のパケットプロセッサに提供するように構成されている、請求項1に記載のネットワークインターフェースデバイス。
- 前記第2のパケットプロセッサが、前記順不同パケットの前記記憶されるデータを、メモリにそのデータを記憶することなく、トランスポートプロトコル処理アプリケーションに送るように構成されている、請求項9に記載のネットワークインターフェースデバイス。
- 前記第2のパケットプロセッサが、前記順不同パケットの前記データストレージアプリケーションヘッダ、前記順不同パケットの前記トランスポートプロトコルヘッダ、及び前記順不同パケットの前記記憶されるデータを、そのデータをメモリに記憶することなく、トランスポートプロトコル処理アプリケーションに送るように構成されており、メモリ内の場所へのポインタは提供さない、請求項9に記載のネットワークインターフェースデバイス。
- 前記トランスポートプロトコル処理アプリケーションを更に含み、前記トランスポートプロトコル処理アプリケーションは、前記順不同パケットが前記複数のパケット内の順序通りの位置において注入され、注入されたパケットが生成されるように、前記順不同パケットを前記入力に提供させるように構成されている、請求項11に記載のネットワークインターフェースデバイス。
- 前記第1のパケットプロセッサが、前記注入されたパケットを処理し、出力を前記第2のパケットプロセッサに提供するように構成されており、前記第2のパケットプロセッサが、前記注入されたパケットの前記記憶されるデータをメモリに書込むように構成されている、請求項12に記載のネットワークインターフェースデバイス。
- 前記第2のパケットプロセッサが、前記順不同パケットの前記データをメモリに書込むように構成されており、ネットワークインターフェースデバイスが、トランスポートプロトコル処理アプリケーションを備え、前記トランスポートプロトコル処理アプリケーションが、前記順不同パケットに基づくパケットを、前記入力によって受信された前記複数のパケット内に、前記複数のパケットに対して順序通りの位置に注入するように構成されており、前記注入されたパケットが、前記トランスポートプロトコルヘッダと、前記データストレージアプリケーションヘッダと、前記記憶されるデータが書込まれたメモリ内の場所への前記ポインタと、を備える、請求項10に記載のネットワークインターフェースデバイス。
- トランスポートプロトコル処理アプリケーションを更に含み、前記トランスポートプロトコル処理アプリケーションが、前記複数のパケットが順序通りであるかどうかを判定するように構成されており、前記複数のパケットが順序通りでないと判定されたとき、前記トランスポートプロトコル処理アプリケーションが、順不同パケットを、前記入力内に、前記複数のパケットのうちの他のパケットに対して正しい位置に注入させるように構成されている、請求項1に記載のネットワークインターフェースデバイス。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US17/199,202 US11689648B2 (en) | 2021-03-11 | 2021-03-11 | Network interface device |
US17/199,202 | 2021-03-11 | ||
PCT/US2022/018540 WO2022192048A1 (en) | 2021-03-11 | 2022-03-02 | Network interface device |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2024512366A true JP2024512366A (ja) | 2024-03-19 |
Family
ID=80819748
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2023554776A Pending JP2024512366A (ja) | 2021-03-11 | 2022-03-02 | ネットワークインターフェースデバイス |
Country Status (6)
Country | Link |
---|---|
US (1) | US11689648B2 (ja) |
EP (1) | EP4285213A1 (ja) |
JP (1) | JP2024512366A (ja) |
KR (1) | KR20230157347A (ja) |
CN (1) | CN116917853A (ja) |
WO (1) | WO2022192048A1 (ja) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112214240B (zh) * | 2019-07-10 | 2024-05-31 | 慧荣科技股份有限公司 | 主机输出输入命令的执行装置及方法及计算机可读取存储介质 |
US11899585B2 (en) | 2021-12-24 | 2024-02-13 | Western Digital Technologies, Inc. | In-kernel caching for distributed cache |
US11934663B2 (en) * | 2022-01-10 | 2024-03-19 | Western Digital Technologies, Inc. | Computational acceleration for distributed cache |
US11797379B2 (en) | 2022-02-04 | 2023-10-24 | Western Digital Technologies, Inc. | Error detection and data recovery for distributed cache |
US20230350603A1 (en) * | 2022-04-28 | 2023-11-02 | Rambus Inc. | Securing dynamic random access memory (dram) contents to non-volatile in a persistent memory module |
CN116016720A (zh) * | 2022-12-14 | 2023-04-25 | 湖南智领通信科技有限公司 | 一种多接口多通道在线离线网络协议解析系统及方法 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6434620B1 (en) * | 1998-08-27 | 2002-08-13 | Alacritech, Inc. | TCP/IP offload network interface device |
JP2006325054A (ja) * | 2005-05-20 | 2006-11-30 | Seiko Epson Corp | Tcp/ip受信処理回路及びそれを具備する半導体集積回路 |
US11392317B2 (en) * | 2017-05-31 | 2022-07-19 | Fmad Engineering Kabushiki Gaisha | High speed data packet flow processing |
US10686872B2 (en) | 2017-12-19 | 2020-06-16 | Xilinx, Inc. | Network interface device |
-
2021
- 2021-03-11 US US17/199,202 patent/US11689648B2/en active Active
-
2022
- 2022-03-02 CN CN202280019108.8A patent/CN116917853A/zh active Pending
- 2022-03-02 JP JP2023554776A patent/JP2024512366A/ja active Pending
- 2022-03-02 WO PCT/US2022/018540 patent/WO2022192048A1/en active Application Filing
- 2022-03-02 KR KR1020237031408A patent/KR20230157347A/ko unknown
- 2022-03-02 EP EP22711765.2A patent/EP4285213A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
WO2022192048A1 (en) | 2022-09-15 |
CN116917853A (zh) | 2023-10-20 |
KR20230157347A (ko) | 2023-11-16 |
EP4285213A1 (en) | 2023-12-06 |
US20220294883A1 (en) | 2022-09-15 |
US11689648B2 (en) | 2023-06-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11689648B2 (en) | Network interface device | |
US11263158B2 (en) | Programmable computer IO device interface | |
EP3629168B1 (en) | Network interface device | |
EP3503507B1 (en) | Network interface device | |
US11489773B2 (en) | Network system including match processing unit for table-based actions | |
US11394664B2 (en) | Network interface device | |
US11924032B2 (en) | Network interface device | |
JP2024509884A (ja) | ネットワークインターフェースデバイス | |
US20220166718A1 (en) | Systems and methods to prevent packet reordering when establishing a flow entry | |
US11960596B2 (en) | Network interface device | |
US20230224261A1 (en) | Network interface device |