(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024116163
(43)【公開日】2024-08-27
(54)【発明の名称】ネットワークインターフェースデバイス
(51)【国際特許分類】
G06F 15/173 20060101AFI20240820BHJP
G06F 9/445 20180101ALI20240820BHJP
【FI】
G06F15/173 660B
G06F9/445
【審査請求】有
【請求項の数】1
【出願形態】OL
【外国語出願】
(21)【出願番号】P 2024083450
(22)【出願日】2024-05-22
(62)【分割の表示】P 2021523691の分割
【原出願日】2019-11-05
(31)【優先権主張番号】16/180,883
(32)【優先日】2018-11-05
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】16/395,027
(32)【優先日】2019-04-25
(33)【優先権主張国・地域又は機関】US
(71)【出願人】
【識別番号】591025439
【氏名又は名称】ザイリンクス インコーポレイテッド
【氏名又は名称原語表記】XILINX INCORPORATED
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】ポぺ,スティーブン
(72)【発明者】
【氏名】タートン,ニール
(72)【発明者】
【氏名】リドック,デイビッド
(72)【発明者】
【氏名】キタリエブ,ドミトリ
(72)【発明者】
【氏名】ソハン,リプデュマン
(72)【発明者】
【氏名】ロバーツ,デレク
(57)【要約】 (修正有)
【課題】ネットワークを介して受信されるデータパケットを、複数の機能ユニットにより効率よく実行するネットワークインターフェースデバイスを提供する。
【解決手段】異なる処理ステージを割り当てられる複数の処理ユニット640a~640dを備えるハードウェアモジュール610及びコントローラを有するネットワークインターフェースデバイス600であって、複数の処理ユニットの各々は、それ自体の少なくとも1つの所定の動作に関連付けられ、ハードウェアモジュールは、コンパイル時に、複数の処理ユニットのうちの少なくともいくつかを、データパケットに対して夫々の少なくとも1つの動作を特定の順序で実行し、そのデータパケットに関する機能を実行するように配置する。コントローラは、別の処理回路がコンパイルされている間に1つの処理回路が使用されるように、オンザフライで異なる処理回路間で切り替える。
【選択図】
図6
【特許請求の範囲】
【請求項1】
ホストデバイスをネットワークにインターフェースするためのネットワークインターフェースデバイスであって、
第1のインターフェースであり、前記第1のインターフェースは、複数のデータパケットを受信するように構成されている、第1のインターフェースと、
複数の処理ユニットを備える構成可能ハードウェアモジュールであり、各処理ユニットは、単一のステップにおいて実行可能な所定のタイプの動作に関連付けられる、構成可能ハードウェアモジュールとを備え、
前記複数の処理ユニットのうちの少なくともいくつかは、異なる所定のタイプの動作に関連付けられ、
前記ハードウェアモジュールは、前記複数のデータパケットのうちの1つまたは複数を処理して前記複数のデータパケットのうちの前記1つまたは複数に関して第1の機能を実行するための第1のデータ処理パイプラインを提供するために、前記複数の前記処理ユニットのうちの少なくともいくつかを相互接続するように構成可能である、ネットワークインターフェースデバイス。
【請求項2】
前記複数の処理ユニットの前記少なくともいくつかのうちの2つ以上は、関連する少なくとも1つの所定の動作を並列に実行するように構成される、請求項1に記載のネットワークインターフェースデバイス。
【請求項3】
前記複数の処理ユニットのうちの前記少なくともいくつかのうちの2つ以上は、
クロック信号によって規定される所定の時間長内に関連する所定のタイプの動作を実施し、
前記所定の時間長の終了に応答して、それぞれの前記少なくとも1つの動作の結果を次の処理ユニットに転送するように構成される、請求項1または2に記載のネットワークインターフェースデバイス。
【請求項4】
前記複数の処理ユニットの各々は、それぞれの前記処理ユニットに関連付けられる前記少なくとも1つの動作を実行するように構成された特定用途向け集積回路を含む、先行する請求項のいずれか1項に記載のネットワークインターフェースデバイス。
【請求項5】
前記複数の処理ユニットのうちの少なくとも1つは、デジタル回路と、前記デジタル回路によって実行される処理に関連する状態を記憶するメモリとを備え、前記デジタル回路は、前記メモリと通信して、それぞれの前記処理ユニットに関連付けられる前記所定のタイプの動作を実行するように構成される、先行する請求項のいずれか1項に記載のネットワークインターフェースデバイス。
【請求項6】
前記複数の処理ユニットのうちの2つ以上にアクセス可能なメモリを備え、前記メモリは、第1のデータパケットに関連付けられる状態を記憶するように構成され、前記ハードウェアモジュールによる前記第1の機能の実行中、前記複数の処理ユニットのうちの2つ以上は、前記状態にアクセスし、前記状態を修正するように構成される、先行する請求項のいずれか1項に記載のネットワークインターフェースデバイス。
【請求項7】
前記複数の処理ユニットのうちの前記少なくともいくつかのうちの第1の処理ユニットは、前記複数の処理ユニットのうちの第2の処理ユニットによる前記状態の値のアクセス中にストールするように構成される、請求項6に記載のネットワークインターフェースデバイス。
【請求項8】
前記複数の処理ユニットのうちの1つまたは複数は、関連する所定のタイプの動作に基
づいて、それぞれのパイプラインに固有の動作を実行するように個別に構成可能である、先行する請求項のいずれか1項に記載のネットワークインターフェースデバイス。
【請求項9】
前記ハードウェアモジュールは、命令を受信し、前記命令に応答して、
前記複数のデータパケットのうちの1つまたは複数を処理するためのデータ処理パイプラインを提供するために、前記複数の前記処理ユニットのうちの少なくともいくつかを相互接続すること、
前記複数の処理ユニットのうちの1つまたは複数に、前記1つまたは複数のデータパケットに関して関連する所定のタイプの動作を実行させること、
前記複数の処理ユニットのうちの1つまたは複数をデータ処理パイプラインに追加すること、および
データ処理パイプラインから前記複数の処理ユニットのうちの1つまたは複数を除去することのうちの少なくとも1つを行うように構成されている、先行する請求項のいずれか1項に記載のネットワークインターフェースデバイス。
【請求項10】
前記所定の動作は、
メモリから前記第1のデータパケットの少なくとも1つの値をロードすること、
データパケットの少なくとも1つの値をメモリに記憶すること、および
データパケットに関して実行されるべきアクションを決定するためにルックアップテーブル内のルックアップを実行することのうちの少なくとも1つを含む、先行する請求項のいずれか1項に記載のネットワークインターフェースデバイス。
【請求項11】
前記複数の処理ユニットのうちの前記少なくともいくつかのうちの1つまたは複数は、関連する少なくとも1つの所定の動作の少なくとも1つの結果を第1の処理パイプライン内の次の処理ユニットに渡すように構成され、前記次の処理ユニットは、前記少なくとも1つの結果に応じて次の所定の動作を実行するように構成される、先行する請求項のいずれか1項に記載のネットワークインターフェースデバイス。
【請求項12】
前記異なる所定のタイプの動作の各々は、異なるテンプレートによって定義される、先行する請求項のいずれか1項に記載のネットワークインターフェースデバイス。
【請求項13】
前記所定の動作のタイプは、
データパケットにアクセスすること、
前記ハードウェアモジュールのメモリに記憶されたルックアップテーブルにアクセスすること、
データパケットからロードされたデータに対して論理演算を実行すること、および
前記ルックアップテーブルからロードされたデータに対して論理演算を実行することのうちの少なくとも1つを含む、先行する請求項のいずれか1項に記載のネットワークインターフェースデバイス。
【請求項14】
前記ハードウェアモジュールはルーティングハードウェアを備え、前記ハードウェアモジュールは、前記第1のデータ処理パイプラインによって定義される特定の順序で前記複数の処理ユニット間でデータパケットをルーティングするように前記ルーティングハードウェアを構成することによって、前記第1のデータ処理パイプラインを提供するために前記複数の前記処理ユニットの少なくともいくつかを相互接続するように構成可能である、先行する請求項のいずれか1項に記載のネットワークインターフェースデバイス。
【請求項15】
前記ハードウェアモジュールは、前記複数の前記処理ユニットの少なくともいくつかを相互接続して、前記複数のデータパケットのうちの1つまたは複数を処理して前記第1の機能とは異なる第2の機能を実行するための第2のデータ処理パイプラインを提供するよ
うに構成可能である、先行する請求項のいずれか1項に記載のネットワークインターフェースデバイス。
【請求項16】
前記ハードウェアモジュールは、前記複数の前記処理ユニットのうちの少なくともいくつかを相互接続して、前記第1のデータ処理パイプラインを提供した後に、前記複数の前記処理ユニットのうちの少なくともいくつかを相互接続して第2のデータ処理パイプラインを提供するように構成可能である、先行する請求項のいずれか1項に記載のネットワークインターフェースデバイス。
【請求項17】
前記ハードウェアモジュールとは別個の、前記複数のデータパケットのうちの1つまたは複数に対して前記第1の機能を実行するように構成されたさらなる回路を備える、先行する請求項のいずれか1項に記載のネットワークインターフェースデバイス。
【請求項18】
前記さらなる回路は、
フィールドプログラマブルゲートアレイ、および
複数の中央処理装置のうちの少なくとも1つを含む、請求項17に記載のネットワークインターフェースデバイス。
【請求項19】
前記ネットワークインターフェースデバイスは、少なくとも1つのコントローラを備え、前記さらなる回路は、前記第1の機能が前記ハードウェアモジュールにおいて実行されるようにするためのコンパイルプロセス中にデータパケットに対して前記第1の機能を実行するように構成され、前記少なくとも1つのコントローラは、前記コンパイルプロセスの完了に応答して、データパケットに対する前記第1の機能の実行を開始するように前記ハードウェアモジュールを制御するように構成される、請求項17または18に記載のネットワークインターフェースデバイス。
【請求項20】
前記少なくとも1つのコントローラは、前記第1の機能が前記ハードウェアモジュールにおいて実行されるようにするための前記コンパイルプロセスが完了したという前記決定に応答して、データパケットに対する前記第1の機能の実行を停止するように前記さらなる回路を制御するように構成される、請求項19に記載のネットワークインターフェースデバイス。
【請求項21】
前記ネットワークインターフェースデバイスは少なくとも1つのコントローラを備え、前記ハードウェアモジュールは、前記第1の機能が前記さらなる回路において実行されるようにするためのコンパイルプロセス中にデータパケットに対して前記第1の機能を実行するように構成され、前記少なくとも1つのコントローラは、前記第1の機能が前記さらなる回路において実行されるようにするための前記コンパイルプロセスが完了したと決定し、前記決定に応答して、データパケットに対する前記第1の機能の実行を開始するように前記さらなる回路を制御するように構成される、請求項17または18のいずれか1項に記載のネットワークインターフェースデバイス。
【請求項22】
前記少なくとも1つのコントローラは、前記第1の機能が前記さらなる回路において実行されるようにするための前記コンパイルプロセスが完了したという前記決定に応答して、データパケットに対する前記第1の機能の実行を停止するように前記ハードウェアモジュールを制御するように構成される、請求項21に記載のネットワークインターフェースデバイス。
【請求項23】
前記第1の機能が前記ハードウェアモジュールにおいて実行されることを可能にするためのコンパイルプロセスを実行するように構成された少なくとも1つのコントローラを備える、先行する請求項のいずれか1項に記載のネットワークインターフェースデバイス。
【請求項24】
先行する請求項のいずれか1項に記載のネットワークインターフェースデバイスと、ホストデバイスとを備えるデータ処理システムであって、前記データ処理システムは、前記第1の機能が前記ハードウェアモジュールにおいて実行されることを可能にするためのコンパイルプロセスを実行するように構成された少なくとも1つのコントローラを備える、データ処理システム。
【請求項25】
前記少なくとも1つのコントローラは、
前記ネットワークインターフェースデバイス、および
前記ホストデバイスのうちの1つまたは複数によって提供される、請求項24に記載のデータ処理システム。
【請求項26】
前記コンパイルプロセスは、前記第1の機能を表現するコンピュータプログラムが前記ホストデバイスのカーネルモードにおいて安全に実行されるという、前記少なくとも1つのコントローラによる決定に応答して実行される、請求項24または25に記載のデータ処理システム。
【請求項27】
前記少なくとも1つのコントローラは、前記複数の処理ユニットのうちの前記少なくともいくつかの各々を、前記第1のデータ処理パイプラインの特定の順序で、コンピュータコード命令のシーケンスによって表される複数の動作からの少なくとも1つの動作を実行するために割り当てることによって前記コンパイルプロセスを実行するように構成され、前記複数の動作は、前記複数のデータパケットのうちの前記1つまたは複数に対する前記第1の機能を提供する、請求項24、25または26に記載のデータ処理システム。
【請求項28】
前記少なくとも1つのコントローラは、
前記コンパイルプロセスの完了前に、前記ネットワークインターフェースデバイスのさらなる回路に、データパケットに対して前記第1の機能を実行させるための第1の命令を送信し、
前記コンパイルプロセスの完了後に、前記ハードウェアモジュールに、データパケットに対する前記第1の機能の実行を開始させるための第2の命令を送信するように構成される、請求項24~27のいずれか1項に記載のデータ処理システム。
【請求項29】
ネットワークインターフェースデバイスにおける実施のための方法であって、
第1のインターフェースにおいて、複数のデータパケットを受信するステップと、
ハードウェアモジュールの複数の処理ユニットのうちの少なくともいくつかを相互接続して、前記複数のデータパケットのうちの1つまたは複数を処理して前記複数のデータパケットのうちの前記1つまたは複数に対して第1の機能を実行するための第1のデータ処理パイプラインを提供するように、前記ハードウェアモジュールを構成するステップとを含み、
各処理ユニットは、単一のステップにおいて実行可能な所定のタイプの動作に関連付けられ、
前記複数の処理ユニットのうちの少なくともいくつかは、異なる所定のタイプの動作に関連付けられる、方法。
【請求項30】
ネットワークインターフェースデバイスに方法を実施させるためのプログラム命令を含む非一時的コンピュータ可読媒体であって、前記方法は、
第1のインターフェースにおいて、複数のデータパケットを受信するステップと、
ハードウェアモジュールの複数の処理ユニットのうちの少なくともいくつかを相互接続して、前記複数のデータパケットのうちの1つまたは複数を処理して前記複数のデータパケットのうちの前記1つまたは複数に対して第1の機能を実行するための第1のデータ処
理パイプラインを提供するように、前記ハードウェアモジュールを構成するステップとを含み、
各処理ユニットは、単一のステップにおいて実行可能な所定のタイプの動作に関連付けられ、
前記複数の処理ユニットのうちの少なくともいくつかは、異なる所定のタイプの動作に関連付けられる、非一時的コンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【0001】
分野
本出願は、データパケットに関する機能を実行するためのネットワークインターフェースデバイスに関する。
【背景技術】
【0002】
背景
ネットワークインターフェースデバイスが既知であり、典型的には、コンピューティングデバイスとネットワークとの間のインターフェースを提供するために使用される。ネットワークインターフェースデバイスは、ネットワークから受信されるデータを処理し、および/またはネットワーク上に置かれるデータを処理するように構成することができる。
【発明の概要】
【課題を解決するための手段】
【0003】
概要
一態様によれば、ホストデバイスをネットワークにインターフェースするためのネットワークインターフェースデバイスであって、第1のインターフェースであり、第1のインターフェースは、複数のデータパケットを受信するように構成されている、第1のインターフェースと、複数の処理ユニットを備える構成可能ハードウェアモジュールであり、各処理ユニットは、単一のステップにおいて実行可能な所定のタイプの動作に関連付けられる、構成可能ハードウェアモジュールとを備え、上記複数の処理ユニットのうちの少なくともいくつかは、異なる所定のタイプの動作に関連付けられ、ハードウェアモジュールは、上記複数のデータパケットのうちの1つまたは複数を処理して上記複数のデータパケットのうちの上記1つまたは複数に関して第1の機能を実行するための第1のデータ処理パイプラインを提供するために、上記複数の上記処理ユニットのうちの少なくともいくつかを相互接続するように構成可能である、ネットワークインターフェースデバイスが提供される。
【0004】
いくつかの実施形態では、第1の機能は、フィルタリング機能を含む。いくつかの実施形態では、機能は、トンネリング、カプセル化、およびルーティング機能のうちの少なくとも1つを含む。いくつかの実施形態では、第1の機能は、拡張Berkleyパケットフィルタ機能を含む。
【0005】
いくつかの実施形態では、第1の機能は、分散型サービス妨害スクラブ動作を含む。
いくつかの実施形態では、第1の機能は、ファイアウォール動作を含む。
【0006】
いくつかの実施形態では、第1のインターフェースは、ネットワークから第1のデータパケットを受信するように構成される。
【0007】
いくつかの実施形態では、第1のインターフェースは、ホストデバイスから第1のデータパケットを受信するように構成される。
【0008】
いくつかの実施形態では、複数の処理ユニットの少なくともいくつかのうちの2つ以上は、それらの関連する少なくとも1つの所定の動作を並列に実行するように構成される。
【0009】
いくつかの実施形態では、複数の処理ユニットのうちの少なくともいくつかのうちの2つ以上は、ハードウェアモジュールの共通クロック信号に従ってそれらの関連する所定の
タイプの動作を実行するように構成される。
【0010】
いくつかの実施形態では、複数の処理ユニットの少なくともいくつかのうちの2つ以上の各々は、クロック信号によって定義される所定の時間長内にその関連する所定のタイプの動作を実行するように構成される。
【0011】
いくつかの実施形態では、複数の処理ユニットのうちの少なくともいくつかのうちの2つ以上は、所定の時間長の期間内に第1のデータパケットにアクセスし、所定の時間長の終了に応答して、それぞれの上記少なくとも1つの動作の結果を次の処理ユニットに転送するように構成される。
【0012】
いくつかの実施形態では、結果は、少なくとも、複数のデータパケットのうちの1つまたは複数からの値、マップ状態への更新、およびメタデータのうちの少なくとも1つまたは複数を含む。
【0013】
いくつかの実施形態では、複数の処理ユニットの各々は、それぞれの処理ユニットに関連付けられる少なくとも1つの動作を実行するように構成された特定用途向け集積回路を含む。
【0014】
いくつかの実施形態では、処理ユニットの各々は、フィールドプログラマブルゲートアレイを含む。いくつかの実施形態では、処理ユニットの各々は、任意の他のタイプのソフトロジックを含む。
【0015】
いくつかの実施形態では、複数の処理ユニットのうちの少なくとも1つは、デジタル回路と、デジタル回路によって実行される処理に関連する状態を記憶するメモリとを備え、デジタル回路は、メモリと通信して、それぞれの処理ユニットに関連付けられる所定のタイプの動作を実行するように構成される。
【0016】
いくつかの実施形態では、ネットワークインターフェースデバイスは、複数の処理ユニットのうちの2つ以上にアクセス可能なメモリを備え、メモリは、第1のデータパケットに関連付けられる状態を記憶するように構成され、ハードウェアモジュールによる第1の機能の実行中、複数の処理ユニットのうちの2つ以上は、状態にアクセスし、状態を修正するように構成される。
【0017】
いくつかの実施形態では、複数の処理ユニットのうちの少なくともいくつかのうちの第1の処理ユニットは、複数の処理ユニットのうちの第2の処理ユニットによる状態の値のアクセス中にストールするように構成される。
【0018】
いくつかの実施形態では、複数の処理ユニットのうちの1つまたは複数は、それらの関連する所定のタイプの動作に基づいて、それぞれのパイプラインに固有の動作を実行するように個別に構成可能である。
【0019】
いくつかの実施形態では、ハードウェアモジュールは、命令を受信し、上記命令に応答して、上記複数のデータパケットのうちの1つまたは複数を処理するためのデータ処理パイプラインを提供するために、上記複数の上記処理ユニットのうちの少なくともいくつかを相互接続すること、上記複数の処理ユニットのうちの1つまたは複数に、上記1つまたは複数のデータパケットに関してそれらの関連する所定のタイプの動作を実行させること、上記複数の処理ユニットのうちの1つまたは複数をデータ処理パイプラインに追加すること、および、データ処理パイプラインから上記複数の処理ユニットのうちの1つまたは複数を除去することのうちの少なくとも1つを行うように構成されている。
【0020】
いくつかの実施形態では、所定の動作は、メモリから第1のデータパケットの少なくとも1つの値をロードすること、データパケットの少なくとも1つの値をメモリに記憶すること、および、データパケットに関して実行されるべきアクションを決定するためにルックアップテーブル内のルックアップを実行することのうちの少なくとも1つを含む。
【0021】
いくつかの実施形態では、ハードウェアモジュールは、命令を受信するように構成され、ハードウェアモジュールは、上記命令に応答して、上記複数のデータパケットのうちの1つまたは複数を処理するためのデータ処理パイプラインを提供するために、上記複数の上記処理ユニットのうちの少なくともいくつかを相互接続するように構成可能であり、命令は、第3の処理パイプラインを介して送信されるデータパケットを含む。
【0022】
いくつかの実施形態では、複数の処理ユニットのうちの1つまたは複数少なくともいくつかは、上記命令に応答して、複数のデータパケットのうちの上記1つまたは複数に関してそれらの関連する所定のタイプの動作のうちの選択された動作を実行するように構成可能である。
【0023】
いくつかの実施形態では、複数の構成要素は、ハードウェアモジュールとは異なる回路において第1の機能を提供するように構成された複数の構成要素のうちの第2の構成要素を含み、ネットワークインターフェースデバイスは、処理パイプラインを通過するデータパケットが、複数の構成要素のうちの第1の構成要素および複数の構成要素のうちの第2の構成要素のうちの1つによって処理されるようにするように構成された少なくとも1つのコントローラを備える。
【0024】
いくつかの実施形態では、ネットワークインターフェースデバイスは、ハードウェアモジュールにデータパケットに対する第1の機能の実行を開始させる命令を発行するように構成された少なくとも1つのコントローラを備え、命令は、複数の構成要素のうちの第1の構成要素が処理パイプラインに挿入されるようにするように構成される。
【0025】
いくつかの実施形態では、ネットワークインターフェースデバイスは、ハードウェアモジュールにデータパケットに対する第1の機能の実行を開始させる命令を発行するように構成された少なくとも1つのコントローラを備え、命令は、処理パイプラインを通じて送信され、複数の構成要素のうちの第1の構成要素が作動されるようにするように構成される制御メッセージを含む。
【0026】
いくつかの実施形態では、複数の処理ユニットの少なくともいくつかのうちの1つまたは複数について、関連する少なくとも1つの動作は、ネットワークインターフェースデバイスのメモリから第1のデータパケットの少なくとも1つの値をロードすること、第1のデータパケットの少なくとも1つの値をネットワークインターフェースデバイスのメモリに記憶することと、および、第1のデータパケットに関して行われるべきアクションを決定するためにルックアップテーブル内のルックアップを行うことのうちの少なくとも1つを含む。
【0027】
いくつかの実施形態では、複数の処理ユニットのうちの少なくともいくつかのうちの1つまたは複数は、その関連する少なくとも1つの所定の動作の少なくとも1つの結果を第1の処理パイプライン内の次の処理ユニットに渡すように構成され、次の処理ユニットは、少なくとも1つの結果に応じて次の所定の動作を実行するように構成される。
【0028】
いくつかの実施形態では、異なる所定のタイプの動作の各々は、異なるテンプレートによって定義される。
【0029】
いくつかの実施形態では、所定の動作のタイプは、データパケットにアクセスすること、ハードウェアモジュールのメモリに記憶されたルックアップテーブルにアクセスすること、データパケットからロードされたデータに対して論理演算を実行すること、および、ルックアップテーブルからロードされたデータに対して論理演算を実行することのうちの少なくとも1つを含む。
【0030】
いくつかの実施形態では、ハードウェアモジュールはルーティングハードウェアを備え、ハードウェアモジュールは、第1のデータ処理パイプラインによって定義される特定の順序で複数の処理ユニット間でデータパケットをルーティングするようにルーティングハードウェアを構成することによって、第1のデータ処理パイプラインを提供するために上記複数の上記処理ユニットの少なくともいくつかを相互接続するように構成可能である。
【0031】
いくつかの実施形態では、ハードウェアモジュールは、上記複数の上記処理ユニットの少なくともいくつかを相互接続して、上記複数のデータパケットのうちの1つまたは複数を処理して第1の機能とは異なる第2の機能を実行するための第2のデータ処理パイプラインを提供するように構成可能である。
【0032】
いくつかの実施形態では、ハードウェアモジュールは、複数の上記処理ユニットのうちの少なくともいくつかを相互接続して第1のデータ処理パイプラインを提供した後に、上記複数の上記処理ユニットのうちの少なくともいくつかを相互接続して第2のデータ処理パイプラインを提供するように構成可能である。
【0033】
いくつかの実施形態では、ネットワークインターフェースデバイスは、ハードウェアモジュールとは別個の、上記複数のデータパケットのうちの1つまたは複数に対して第1の機能を実行するように構成されたさらなる回路を備える。
【0034】
いくつかの実施形態では、さらなる回路は、フィールドプログラマブルゲートアレイ、および複数の中央処理装置のうちの少なくとも1つを含む。
【0035】
いくつかの実施形態では、ネットワークインターフェースデバイスは、少なくとも1つのコントローラを備え、さらなる回路は、第1の機能がハードウェアモジュールにおいて実行されるようにするためのコンパイルプロセス中にデータパケットに対して第1の機能を実行するように構成され、少なくとも1つのコントローラは、コンパイルプロセスの完了に応答して、データパケットに対する第1の機能の実行を開始するようにハードウェアモジュールを制御するように構成される。
【0036】
いくつかの実施形態では、さらなる回路は、複数の中央処理装置を含む。
いくつかの実施形態では、少なくとも1つのコントローラは、第1の機能がハードウェアモジュールにおいて実行されるようにするためのコンパイルプロセスが完了したという上記決定に応答して、データパケットに対する第1の機能の実行を停止するようにさらなる回路を制御するように構成される。
【0037】
いくつかの実施形態では、ネットワークインターフェースデバイスは少なくとも1つのコントローラを備え、ハードウェアモジュールは、第1の機能がさらなる回路において実行されるようにするためのコンパイルプロセス中にデータパケットに対して第1の機能を実行するように構成され、少なくとも1つのコントローラは、第1の機能がさらなる回路において実行されるようにするためのコンパイルプロセスが完了したと決定し、上記決定に応答して、データパケットに対する第1の機能の実行を開始するようにさらなる回路を制御するように構成される。
【0038】
いくつかの実施形態では、さらなる回路はフィールドプログラマブルゲートアレイを含む。
【0039】
いくつかの実施形態では、少なくとも1つのコントローラは、第1の機能がさらなる回路において実行されるようにするためのコンパイルプロセスが完了したという上記決定に応答して、データパケットに対する第1の機能の実行を停止するようにハードウェアモジュールを制御するように構成される。
【0040】
いくつかの実施形態では、ネットワークインターフェースデバイスは、第1の機能がハードウェアモジュールにおいて実行されることを可能にするためのコンパイルプロセスを実行するように構成された少なくとも1つのコントローラを備える。
【0041】
いくつかの実施形態では、コンパイルプロセスは、制御メッセージに応答するハードウェアモジュール内の制御プレーンインターフェースを提供するための命令を提供することを含む。
【0042】
別の態様によれば、第1の態様によるネットワークインターフェースデバイスと、ホストデバイスとを備えるデータ処理システムが提供され、データ処理システムは、第1の機能がハードウェアモジュールにおいて実行されることを可能にするためのコンパイルプロセスを実行するように構成された少なくとも1つのコントローラを備える。
【0043】
いくつかの実施形態では、少なくとも1つのコントローラは、ネットワークインターフェースデバイス、およびホストデバイスのうちの1つまたは複数によって提供される。
【0044】
いくつかの実施形態では、コンパイルプロセスは、第1の機能を表現するコンピュータプログラムがホストデバイスのカーネルモードにおいて安全に実行されるという、少なくとも1つのコントローラによる決定に応答して実行される。
【0045】
いくつかの実施形態では、少なくとも1つのコントローラは、複数の処理ユニットのうちの少なくともいくつかの各々を、第1のデータ処理パイプラインの特定の順序で、コンピュータコード命令のシーケンスによって表される複数の動作からの少なくとも1つの動作を実行するために割り当てることによってコンパイルプロセスを実行するように構成され、複数の動作は、複数のデータパケットのうちの1つまたは複数に対する第1の機能を提供する。
【0046】
いくつかの実施形態では、少なくとも1つのコントローラは、コンパイルプロセスの完了前に、ネットワークインターフェースデバイスのさらなる回路に、データパケットに対して第1の機能を実行させるための第1の命令を送信し、上記コンパイルプロセスの完了後に、上記ハードウェアモジュールに、データパケットに対する第1の機能の実行を開始させるための第2の命令を送信するように構成される。
【0047】
別の態様によれば、ネットワークインターフェースデバイスにおける実施のための方法が提供され、本方法は、第1のインターフェースにおいて、複数のデータパケットを受信するステップと、ハードウェアモジュールの複数の処理ユニットのうちの少なくともいくつかを相互接続して、上記複数のデータパケットのうちの1つまたは複数を処理して上記複数のデータパケットのうちの上記1つまたは複数に対して第1の機能を実行するための第1のデータ処理パイプラインを提供するように、ハードウェアモジュールを構成するステップとを含み、各処理ユニットは、単一のステップにおいて実行可能な所定のタイプの動作に関連付けられ、上記複数の処理ユニットのうちの少なくともいくつかは、異なる所
定のタイプの動作に関連付けられる。
【0048】
別の態様によれば、ネットワークインターフェースデバイスに方法を実施させるためのプログラム命令を含む非一時的コンピュータ可読媒体が提供され、方法は、第1のインターフェースにおいて、複数のデータパケットを受信するステップと、ハードウェアモジュールの複数の処理ユニットのうちの少なくともいくつかを相互接続して、上記複数のデータパケットのうちの1つまたは複数を処理して上記複数のデータパケットのうちの上記1つまたは複数に対して第1の機能を実行するための第1のデータ処理パイプラインを提供するように、ハードウェアモジュールを構成するステップとを含み、各処理ユニットは、単一のステップにおいて実行可能な所定のタイプの動作に関連付けられ、上記複数の処理ユニットのうちの少なくともいくつかは、異なる所定のタイプの動作に関連付けられる。
【0049】
別の態様によれば、処理ユニットが提供され、処理ユニットは、ネットワークインターフェースデバイスにおいて受信される第1のデータパケットに対して少なくとも1つの所定の動作を実行し、第1のデータパケットに関して第1のさらなる少なくとも1つの所定の動作を行うように構成された第1のさらなる処理ユニットに接続され、上記第1のデータパケットに関して第2のさらなる少なくとも1つの所定の動作を行うように構成された第2のさらなる処理ユニットに接続され、第1のさらなる処理ユニットから、第1のさらなる少なくとも1つの所定の動作の結果を受信し、第1のさらなる少なくとも1つの所定の動作の結果に応じて少なくとも1つの所定の動作を実行し、上記第2のさらなる少なくとも1つの所定の動作における処理のために、少なくとも1つの所定の動作の結果を第2のさらなる処理ユニットに送信するように構成されている。
【0050】
いくつかの実施形態では、処理ユニットは、少なくとも1つの所定の動作をタイミング調整するためのクロック信号を受信するように構成され、処理ユニットは、クロック信号の少なくとも1つのサイクルにおいて少なくとも1つの所定の動作を実行するように構成される。
【0051】
いくつかの実施形態では、処理ユニットは、クロック信号の単一サイクルにおいて少なくとも1つの所定の動作を実行するように構成される。
【0052】
いくつかの実施形態では、少なくとも1つの所定の動作、第1のさらなる少なくとも1つの所定の動作、および第2のさらなる少なくとも1つの所定の動作は、ネットワークインターフェースデバイスにおいて受信される第1のデータパケットに対して実行される機能の一部を形成する。
【0053】
いくつかの実施形態では、第1のデータパケットは、ホストデバイスから受信され、ネットワークインターフェースデバイスは、ホストデバイスをネットワークにインターフェースするように構成される。
【0054】
いくつかの実施形態では、第1のデータパケットはネットワークから受信され、ネットワークインターフェースデバイスは、ホストデバイスをネットワークにインターフェースするように構成される。
【0055】
いくつかの実施形態では、機能はフィルタリング機能である。
いくつかの実施形態では、フィルタリング機能は、拡張Berkleyパケットフィルタ機能である。
【0056】
いくつかの実施形態では、処理ユニットは、少なくとも1つの所定の動作を実行するように構成された特定用途向け集積回路を含む。
【0057】
いくつかの実施形態では、処理ユニットは、少なくとも1つの所定の動作を実行するように構成されたデジタル回路と、実行される少なくとも1つの所定の動作に関連する状態を記憶するメモリとを備える。
【0058】
いくつかの実施形態では、処理ユニットは、第1のさらなる処理ユニットおよび第2のさらなる処理ユニットにアクセス可能なメモリにアクセスするように構成され、メモリは、第1のデータパケットに関連付けられた状態を記憶するように構成され、少なくとも1つの所定の動作は、メモリに記憶された状態を変更することを含む。
【0059】
いくつかの実施形態では、処理ユニットは、第1のクロックサイクル中にメモリから上記状態の値を読み出し、第2のさらなる処理ユニットによる修正のために上記値を第2のさらなる処理ユニットに提供するように構成され、処理ユニットは、第1のクロックサイクル後の第2のクロックサイクル中にストールするように構成される。
【0060】
いくつかの実施形態では、少なくとも1つの所定の動作は、ネットワークインターフェースデバイスのメモリから第1のデータパケットをロードすること、第1のデータパケットをネットワークインターフェースデバイスのメモリに記憶すること、および、第1のデータパケットに関して実行されるべきアクションを決定するためにルックアップテーブル内のルックアップを実行することのうちの少なくとも1つを含む。
【0061】
別の態様によれば、処理ユニットにおいて実施される方法が提供され、方法は、ネットワークインターフェースデバイスにおいて受信される第1のデータパケットに関して少なくとも1つの所定の動作を実行するステップと、第1のデータパケットに関して第1のさらなる少なくとも1つの所定の動作を行うように構成された第1のさらなる処理ユニットに接続するステップと、上記第1のデータパケットに関して第2のさらなる少なくとも1つの所定の動作を行うように構成された第2のさらなる処理ユニットに接続するステップと、第1のさらなる処理ユニットから、第1のさらなる少なくとも1つの所定の動作の結果を受信するステップと、第1のさらなる少なくとも1つの所定の動作の結果に応じて少なくとも1つの所定の動作を実行するステップと、上記第2のさらなる少なくとも1つの所定の動作における処理のために、少なくとも1つの所定の動作の結果を第2のさらなる処理ユニットに送信するステップとを含む。
【0062】
別の態様によれば、処理ユニットによって実行されると、処理ユニットに方法を実施させる命令を記憶しているコンピュータ可読非一時的記憶デバイスが提供され、方法は、ネットワークインターフェースデバイスにおいて受信される第1のデータパケットに関して少なくとも1つの所定の動作を実行するステップと、第1のデータパケットに関して第1のさらなる少なくとも1つの所定の動作を行うように構成された第1のさらなる処理ユニットに接続するステップと、上記第1のデータパケットに関して第2のさらなる少なくとも1つの所定の動作を行うように構成された第2のさらなる処理ユニットに接続するステップと、第1のさらなる処理ユニットから、第1のさらなる少なくとも1つの所定の動作の結果を受信するステップと、第1のさらなる少なくとも1つの所定の動作の結果に応じて少なくとも1つの所定の動作を実行するステップと、上記第2のさらなる少なくとも1つの所定の動作における処理のために、少なくとも1つの所定の動作の結果を第2のさらなる処理ユニットに送信するステップとを含む。
【0063】
別の態様によれば、ホストデバイスをネットワークにインターフェースするためのネットワークインターフェースデバイスが提供され、ネットワークインターフェースデバイスは、少なくとも1つのコントローラと、データパケットを受信するように構成されている第1のインターフェースと、第1のインターフェースにおいて受信されるデータパケット
に対して第1の機能を実行するように構成された第1の回路と、第2の回路とを備え、第1の回路は、第1の機能が第2の回路において実行されるようにするためのコンパイルプロセス中に、第1のインターフェースにおいて受信されるデータパケットに対して第1の機能を実行するように構成され、少なくとも1つのコントローラは、第1の機能が第2の回路において実行されるようにするためのコンパイルプロセスが完了したと決定し、上記決定に応答して、第1のインターフェースにおいて受信されるデータパケットに対する第1の機能の実行を開始するように第2の回路を制御するように構成される。
【0064】
いくつかの実施形態では、少なくとも1つのコントローラは、第1の機能が第2の回路において実行されるようにするためのコンパイルプロセスが完了したという上記決定に応答して、第1のインターフェースにおいて受信されるデータパケットに対する第1の機能の実行を停止するように第1の回路を制御するように構成される。
【0065】
いくつかの実施形態では、少なくとも1つのコントローラは、第1の機能が第2の回路において実行されるようにするためのコンパイルプロセスが完了したという上記決定に応答して、第1のインターフェースにおいて受信される第1のデータフローのデータパケットに対する第1の機能の実行を開始し、第1のデータフローのデータパケットに対する第1の機能の実行を停止するように第1の回路を制御するように構成されている。
【0066】
いくつかの実施形態では、第1の回路は、少なくとも1つの中央処理装置を備え、少なくとも1つの中央処理装置の各々は、第1のインターフェースにおいて受信される少なくとも1つのデータパケットに対して第1の機能を実行するように構成される。
【0067】
いくつかの実施形態では、第2の回路は、第1のインターフェースにおいて受信されるデータパケットに対する第1の機能の実行を開始するように構成されたフィールドプログラマブルゲートアレイを備える。
【0068】
いくつかの実施形態では、第2の回路は、複数の処理ユニットを備えるハードウェアモジュールを備え、各処理ユニットは少なくとも1つの所定の動作に関連付けられ、第1のインターフェースは、第1のデータパケットを受信するように構成され、ハードウェアモジュールは、第1の機能が第2の回路において実行されるためのコンパイルプロセスの後に、複数の処理ユニットの少なくともいくつかに、第1のデータパケットに対して第1の機能を実行するように、特定の順序でそれらの関連付けられる少なくとも1つの所定の動作を実行させるように構成される。
【0069】
いくつかの実施形態では、第1の回路は、複数の処理ユニットを備えるハードウェアモジュールを備え、各処理ユニットは少なくとも1つの所定の動作に関連付けられ、第1のインターフェースは、第1のデータパケットを受信するように構成され、ハードウェアモジュールは、第1の機能が第2の回路において実行されるようにするためのコンパイルプロセス中に、複数の処理ユニットの少なくともいくつかに、第1のデータパケットに対して第1の機能を実行するように、特定の順序でそれらの関連付けられる少なくとも1つの所定の動作を実行させるように構成される。
【0070】
いくつかの実施形態では、少なくとも1つのコントローラは、第2の回路によって実行されるように第1の機能をコンパイルするためのコンパイルプロセスを実行するように構成される。
【0071】
いくつかの実施形態では、少なくとも1つのコントローラは、コンパイルプロセスの完了前に、第1のインターフェースにおいて受信されるデータパケットに対して第1の機能を実行するように第1の回路に命令するように構成される。
【0072】
いくつかの実施形態では、第2の回路によって実行されるように第1の機能をコンパイルするためのコンパイルプロセスは、ホストデバイスによって実行され、少なくとも1つのコントローラは、ホストデバイスからのコンパイルプロセスの完了の指示の受信に応答して、コンパイルプロセスが完了したと決定するように構成される。
【0073】
いくつかの実施形態では、第1のインターフェースにおいて受信されるデータパケットを処理するための処理パイプラインを備え、処理パイプラインは、第1のインターフェースにおいて受信されるデータパケットに対して複数の機能のうちの1つを各々が実行するように構成された複数の構成要素を備え、複数の構成要素のうちの第1の構成要素は、第1の回路によって提供されるときに第1の機能を提供するように構成され、複数の構成要素のうちの第2の構成要素は、第2の少なくとも1つの処理ユニットによって提供されるときに第1の機能を提供するように構成される。
【0074】
いくつかの実施形態では、少なくとも1つのコントローラは、複数の構成要素のうちの第2の構成要素を処理パイプラインに挿入することによって、第1のインターフェースにおいて受信されるデータパケットに対する第1の機能の実行を開始するように第2の回路を制御するように構成される。
【0075】
いくつかの実施形態では、少なくとも1つのコントローラは、第1の機能が第2の回路において実行されるようにするためのコンパイルプロセスが完了したという上記決定に応答して、処理パイプラインから複数の構成要素のうちの第1の構成要素を除去することによって、第1のインターフェースにおいて受信されるデータパケットに対する第1の機能の実行を停止するように第1の回路を制御するように構成される。
【0076】
いくつかの実施形態では、少なくとも1つのコントローラは、複数の構成要素のうちの第2の構成要素を作動させるために処理パイプラインを通じて制御メッセージを送信することによって、第1のインターフェースにおいて受信されるデータパケットに対する第1の機能の実行を開始するように第2の回路を制御するように構成される。
【0077】
いくつかの実施形態では、少なくとも1つのコントローラは、第1の機能が第2の回路において実行されるようにするためのコンパイルプロセスが完了したという上記決定に応答して、複数の構成要素のうちの第2の構成要素を機能停止するために処理パイプラインを介して制御メッセージを送信することによって、第1のインターフェースにおいて受信されるデータパケットに対する第1の機能の実行を停止するように第1の回路を制御するように構成される。
【0078】
いくつかの実施形態では、複数の構成要素のうちの第1の構成要素は、処理パイプラインを通過するデータパケット第1のデータフローに対して第1の機能を提供するように構成され、複数の構成要素のうちの第2の構成要素は、処理パイプラインを通過する第2のデータフローのデータパケットに対して第1の機能を提供するように構成される。
【0079】
いくつかの実施形態では、第1の機能は、データパケットをフィルタリングすることを含む。
【0080】
いくつかの実施形態では、第1のインターフェースは、ネットワークからデータパケットを受信するように構成される。
【0081】
いくつかの実施形態では、第1のインターフェースは、ホストデバイスからデータパケットを受信するように構成される。
【0082】
いくつかの実施形態では、第2の回路の第1の機能のコンパイル時間は、第1の回路の第1の機能のコンパイル時間よりも長い。
【0083】
別の態様によれば、方法が提供され、方法は、ネットワークインターフェースデバイスの第1のインターフェースにおいてデータパケットを受信するステップと、ネットワークインターフェースデバイスの第1の回路において、第1のインターフェースにおいて受信されるデータパケットに対して第1の機能を実行するステップとを含み、第1の回路は、第1の機能が第2の回路において実行されるようにするためのコンパイルプロセス中に、第1のインターフェースにおいて受信されるデータパケットに対して第1の機能を実行するように構成され、方法は、第1の機能が第2の回路において実行されるようにするためのコンパイルプロセスが完了したと決定するステップと、上記決定に応答して、第1のインターフェースにおいて受信されるデータパケットに対する第1の機能の実行を開始するようにネットワークインターフェースデバイスの第2の回路を制御するステップとを含む。
【0084】
別の態様によれば、データ処理システムに方法を実施させるためのプログラム命令を含む非一時的コンピュータ可読媒体が提供され、方法は、ネットワークインターフェースデバイスの第1のインターフェースにおいてデータパケットを受信するステップと、ネットワークインターフェースデバイスの第1の回路において、第1のインターフェースにおいて受信されるデータパケットに対して第1の機能を実行するステップとを含み、第1の回路は、第1の機能が第2の回路において実行されるようにするためのコンパイルプロセス中に、第1のインターフェースにおいて受信されるデータパケットに対して第1の機能を実行するように構成され、方法は、第1の機能が第2の回路において実行されるようにするためのコンパイルプロセスが完了したと決定するステップと、上記決定に応答して、第1のインターフェースにおいて受信されるデータパケットに対する第1の機能の実行を開始するようにネットワークインターフェースデバイスの第2の回路を制御するステップとを含む。
【0085】
別の態様によれば、非一時的コンピュータ可読媒体が提供され、媒体は、データ処理システムに、ネットワークインターフェースデバイスの第2の回路によって実行されるように第1の機能をコンパイルするためのコンパイルプロセスを実行するステップと、上記コンパイルプロセスの完了前に、ネットワークインターフェースデバイスの第1の回路に、ネットワークインターフェースデバイスの第1のインターフェースにおいて受信されるデータパケットに関して第1の機能を実行させるための第1の命令を送信するステップと、第2の回路に、コンパイルプロセスの完了後に、第1のインターフェースにおいて受信されるデータパケットに対する第1の機能の実行を開始させるための第2の命令を送信するステップとを実施させるためのプログラム命令を含む。
【0086】
いくつかの実施形態では、非一時的コンピュータ可読媒体は、データ処理システムに、第1の回路によって実行されるように第1の機能をコンパイルするためのさらなるコンパイルプロセスを実行させるためのプログラム命令を含み、コンパイルプロセスにかかる時間は、さらなるコンパイルプロセスにかかる時間よりも長い。
【0087】
いくつかの実施形態では、データ処理システムは、ホストデバイスを備え、ネットワークインターフェースデバイスは、ホストデバイスをネットワークとインターフェースするように構成される。
【0088】
いくつかの実施形態では、データ構成システムは、ネットワークインターフェースデバイスを備え、ネットワークインターフェースデバイスは、ホストデバイスをネットワーク
とインターフェースするように構成される。
【0089】
いくつかの実施形態では、データ処理システムは、ホストデバイスと、ネットワークインターフェースデバイスとを備え、ネットワークインターフェースデバイスは、ホストデバイスをネットワークとインターフェースするように構成される。
【0090】
いくつかの実施形態では、第1の機能は、ネットワークから第1のインターフェースにおいて受信されるデータパケットをフィルタリングすることを含む。
【0091】
いくつかの実施形態では、非一時的コンピュータ可読媒体は、コンパイルプロセスの完了後に、第1の回路に、第1のインターフェースにおいて受信されるデータパケットに対する機能の実行を停止させる第3の命令を送信することを、データ処理システムに実行させるための構成プログラム命令を含む。
【0092】
いくつかの実施形態では、非一時的コンピュータ可読媒体は、第2の回路に、第1のデータフローのデータパケットに対して第1の機能を実行させる命令を送信することと、第1の回路に、第1のデータフローのデータパケットに対する第1の機能の実行を停止させる命令を送信することとを、データ処理システムに実行させるためのプログラム命令を含む。
【0093】
いくつかの実施形態では、第1の回路は、少なくとも1つの中央処理装置を備え、第2のコンパイルプロセスの完了前に、少なくとも1つの中央処理装置の各々は、第1のインターフェースにおいて受信される少なくとも1つのデータパケットに対して第1の機能を実行するように構成される。
【0094】
いくつかの実施形態では、第2の回路は、第1のインターフェースにおいて受信されるデータパケットに対する第1の機能の実行を開始するように構成されたフィールドプログラマブルゲートアレイを備える。
【0095】
いくつかの実施形態では、第2の回路は、複数の処理ユニットを備えるハードウェアモジュールを備え、各処理ユニットは少なくとも1つの所定の動作に関連付けられ、第1のインターフェースにおいて受信されるデータパケットは第1のデータパケットを含み、ハードウェアモジュールは、第2のコンパイルプロセスの完了後に、第1のデータパケットに対するそのそれぞれの少なくとも1つの動作を実施する複数の処理ユニットの各処理ユニット少なくともいくつかによって、第1のデータパケットに対して第1の機能を実行するように構成される。
【0096】
いくつかの実施形態では、第1の回路は、データパケットに対して第1の機能を提供するように構成されている複数の処理ユニットを備えるハードウェアモジュールを備え、各処理ユニットは少なくとも1つの所定の動作に関連付けられ、第1のインターフェースにおいて受信されるデータパケットは第1のデータパケットを含み、ハードウェアモジュールは、第2のコンパイルプロセスの完了前に、第1のデータパケットに対するそのそれぞれの少なくとも1つの動作を実施する複数の処理ユニットのうちの少なくともいくつかの各処理ユニットによって、第1のデータパケットに対して第1の機能を実行するように構成される。
【0097】
いくつかの実施形態では、コンパイルプロセスは、コンピュータコード命令のシーケンス内の複数の処理ステージのうちの1つに関連付けられる少なくとも1つの動作を特定の順序で実行するために、第2の回路の複数の処理ユニットの各々を割り当てることを含む。
【0098】
いくつかの実施形態では、第1の回路によって提供される第1の機能は、第1のインターフェースにおいて受信されるデータパケットを処理するための処理パイプラインの構成要素として提供され、第2の回路によって提供される第1の機能は、処理パイプラインの構成要素として提供される。
【0099】
いくつかの実施形態では、第1の命令は、複数の構成要素のうちの第1の構成要素が処理パイプラインに挿入されるようにするように構成された命令を含む。
【0100】
いくつかの実施形態では、第2の命令は、複数の構成要素のうちの第2の構成要素が処理パイプラインに挿入されるようにするように構成された命令を含む。
【0101】
いくつかの実施形態では、非一時的コンピュータ可読媒体は、コンパイルプロセスの完了後に、第1の回路に、第1のインターフェースにおいて受信されるデータパケットに対する第1の機能の実行を停止させる第3の命令を送信することを、データ処理システムに実行させるための構成プログラム命令を含み、第3の命令は、複数の構成要素のうちの第1の構成要素が処理パイプラインから除去されるようにするように構成された命令を含む。
【0102】
いくつかの実施形態では、第1の命令は、複数の構成要素のうちの第2の構成要素を作動させるために処理パイプラインを通じて送信される制御メッセージを含む。
【0103】
いくつかの実施形態では、第2の命令は、複数の構成要素のうちの第2の構成要素を作動させるために処理パイプラインを通じて送信される制御メッセージを含む。
【0104】
いくつかの実施形態では、非一時的コンピュータ可読媒体は、コンパイルプロセスの完了後に、第1の回路に、第1のインターフェースにおいて受信されるデータパケットに対する機能の実行を停止させる第3の命令を送信することを、データ処理システムに実行させるためのプログラム命令を含み、第3の命令は、複数の構成要素のうちの第1の構成要素を機能停止するための処理パイプラインを介した制御メッセージを含む。
【0105】
別の態様によれば、少なくとも1つのプロセッサと、コンピュータプログラムコードを含む少なくとも1つのメモリとを備えるデータ処理システムが提供され、少なくとも1つのメモリおよびコンピュータプログラムコードは、少なくとも1つのプロセッサを用いて、データ処理システムに、ネットワークインターフェースデバイスの第2の回路によって実行されるように機能をコンパイルするためのコンパイルプロセスを実行するステップと、コンパイルプロセスの完了前に、ネットワークインターフェースデバイスの第1の回路に、ネットワークインターフェースデバイスの第1のインターフェースにおいて受信されるデータパケットに対して機能を実行するように命令するステップと、第2の少なくとも1つの処理ユニットに、第2のコンパイルプロセスの完了後に、第1のインターフェースにおいて受信されるデータパケットに対する機能の実行を開始するように命令するステップとを行わせるように構成されている。
【0106】
別の態様によれば、データ処理システムにおいて実施するための方法が提供され、方法は、ネットワークインターフェースデバイスの第2の回路によって実行されるように機能をコンパイルするためのコンパイルプロセスを実行するステップと、上記コンパイルプロセスの完了前に、ネットワークインターフェースデバイスの第1の回路に、ネットワークインターフェースデバイスの第1のインターフェースにおいて受信されるデータパケットに関して機能を実行させるための第1の命令を送信するステップと、第2の回路に、コンパイルプロセスの完了後に、第1のインターフェースにおいて受信されるデータパケット
に対する機能の実行を開始させるための第2の命令を送信するステップとを含む。
【0107】
別の態様によれば、データ処理システムに、コンピュータコード命令のシーケンス内の複数の処理ステージのうちの1つに関連付けられる少なくとも1つの動作を特定の順序で実行するために、複数の処理ユニットの各々を割り当てさせるためのプログラム命令を含む非一時的コンピュータ可読媒体が提供され、複数の処理ステージは、ネットワークインターフェースデバイスの第1のインターフェースにおいて受信される第1のデータパケットに対する第1の機能を提供し、複数の処理ユニットの各々は、複数のタイプの処理のうちの1つを実行するように構成され、複数の処理ユニットのうちの少なくともいくつかは、異なるタイプの処理を実行するように構成され、複数の処理ユニットの各々について、割り当ては、処理ユニットがそれぞれの少なくとも1つの処理を実行するのに適したタイプの処理を実行するように構成されているという決定に応じて実行される。
【0108】
いくつかの実施形態では、処理のタイプの各々は、複数のテンプレートのうちの1つによって定義される。
【0109】
いくつかの実施形態では、処理のタイプは、ネットワークインターフェースデバイスにおいて受信されるデータパケットにアクセスすること、ハードウェアモジュールのメモリに記憶されたルックアップテーブルにアクセスすること、データパケットからロードされたデータに対して論理演算を実行すること、および、ルックテーブルからロードされたデータに対して論理演算を実行することのうちの少なくとも1つを含む。
【0110】
いくつかの実施形態では、複数の処理ユニットのうちの少なくともいくつかのうちの2つ以上は、ハードウェアモジュールの共通クロック信号に従ってそれらの関連する少なくとも1つの動作を実行するように構成される。
【0111】
いくつかの実施形態では、割り当ては、複数の処理ユニットの少なくともいくつかのうちの2つ以上の各々を、クロック信号によって定義される所定の時間長内にその関連する少なくとも1つの動作を実行するために割り当てることを含む。
【0112】
いくつかの実施形態では、割り当ては、複数の処理ユニットのうちの少なくともいくつかのうちの2つ以上を、所定の時間長の期間内に第1のデータパケットにアクセスするために割り当てることを含む。
【0113】
いくつかの実施形態では、割り当ては、複数の処理ユニットの少なくともいくつかのうちの2つ以上の各々を、所定の時間長の期間の終了に応答して、それぞれの少なくとも1つの動作の結果を次の処理ユニットに転送するために割り当てることを含む。
【0114】
いくつかの実施形態では、非一時的コンピュータ可読媒体は、データ処理システムに、複数のステージのうちの少なくともいくつかを単一のクロックサイクルを占有するように割り当てることを実行させるためのプログラム命令を含む。
【0115】
いくつかの実施形態では、非一時的コンピュータ可読媒体は、データ処理システムに、複数の処理ユニットのうちの2つ以上を、並列に実行されるそれらの割り当てられた少なくとも1つの動作を実行するために割り当てさせるためのプログラム命令を含む。
【0116】
いくつかの実施形態では、ネットワークインターフェースデバイスは、複数の処理ユニットを備えるハードウェアモジュールを備える。
【0117】
いくつかの実施形態では、非一時的コンピュータ可読媒体は、データ処理システムに、
割り当てを含むコンパイルプロセスを実施するステップと、コンパイルプロセスの完了前に、ネットワークインターフェースデバイスの回路に、第1のインターフェースにおいて受信されるデータパケットに対して第1の機能を実行させるための第1の命令を送信するステップと、複数の処理ユニットに、コンパイルプロセスの完了後に、第1のインターフェースにおいて受信されるデータパケットに対する第1の機能の実行を開始させるための第2の命令を送信するステップとを実施させるためのコンピュータプログラム命令を含む。
【0118】
いくつかの実施形態では、非一時的コンピュータ可読媒体は含み、複数の処理ユニットの少なくともいくつかのうちの1つまたは複数について、割り当てられる少なくとも1つの動作は、ネットワークインターフェースデバイスのメモリから第1のデータパケットの少なくとも1つの値をロードすること、第1のデータパケットの少なくとも1つの値をネットワークインターフェースデバイスのメモリに記憶することと、および、第1のデータパケットに関して行われるべきアクションを決定するためにルックアップテーブル内のルックアップを行うことのうちの少なくとも1つを含む。
【0119】
いくつかの実施形態では、非一時的コンピュータ可読媒体は、データ処理システムに、第1のデータパケットに対して第1の機能を実行するように、特定の順序で複数の処理ユニット間で第1のデータパケットをルーティングするようにネットワークインターフェースデバイスのルーティングハードウェアを構成する命令を発行させるためのコンピュータプログラム命令を含む。
【0120】
いくつかの実施形態では、複数の処理ユニットによって提供される第1の機能は、第1のインターフェースにおいて受信されるデータパケットを処理するための処理パイプラインの構成要素として提供される。
【0121】
いくつかの実施形態では、非一時的コンピュータ可読媒体は、データ処理システムに、構成要素が処理パイプラインに挿入されるようにする命令を発行させることによって、複数の処理ユニットに、第1のインターフェースにおいて受信されるデータパケットに対する第1の機能の実行を開始させるためのコンピュータプログラム命令を含む。
【0122】
いくつかの実施形態では、非一時的コンピュータ可読媒体は、データ処理システムに、構成要素が処理パイプライン内で作動されるようにする命令を発行させることによって、複数の処理ユニットに、第1のインターフェースにおいて受信されるデータパケットに対する第1の機能の実行を開始させるためのコンピュータプログラム命令を含む。
【0123】
いくつかの実施形態では、データ処理システムは、ホストデバイスを備え、ネットワークインターフェースデバイスは、ホストデバイスをネットワークとインターフェースするように構成される。
【0124】
いくつかの実施形態では、データ処理システムはネットワークインターフェースデバイスを備える。
【0125】
いくつかの実施形態では、データ処理システムは、ネットワークインターフェースデバイスと、ホストデバイスとを備え、ネットワークインターフェースデバイスは、ホストデバイスをネットワークとインターフェースするように構成される。
【0126】
別の態様によれば、少なくとも1つのプロセッサと、コンピュータプログラムコードを含む少なくとも1つのメモリとを備えるデータ処理システムが提供され、少なくとも1つのメモリおよびコンピュータプログラムコードは、少なくとも1つのプロセッサを用いて
、データ処理システムに、コンピュータコード命令のシーケンス内の複数の処理ステージのうちの1つに関連付けられる少なくとも1つの動作を特定の順序で実行するために、複数の処理ユニットの各々を割り当てさせるように構成されており、複数の処理ステージは、ネットワークインターフェースデバイスの第1のインターフェースにおいて受信される第1のデータパケットに対する第1の機能を提供し、複数の処理ユニットの各々は、複数のタイプの処理のうちの1つを実行するように構成され、複数の処理ユニットのうちの少なくともいくつかは、異なるタイプの処理を実行するように構成され、複数の処理ユニットの各々について、割り当ては、処理ユニットがそれぞれの少なくとも1つの処理を実行するのに適したタイプの処理を実行するように構成されているという決定に応じて実行される。
【0127】
別の態様によれば、コンピュータコード命令のシーケンス内の複数の処理ステージのうちの1つに関連付けられる少なくとも1つの動作を特定の順序で実行するために、複数の処理ユニットの各々を割り当てるステップを含む方法が提供され、複数の処理ステージは、ネットワークインターフェースデバイスの第1のインターフェースにおいて受信される第1のデータパケットに対する第1の機能を提供し、複数の処理ユニットの各々は、複数のタイプの処理のうちの1つを実行するように構成され、複数の処理ユニットのうちの少なくともいくつかは、異なるタイプの処理を実行するように構成され、複数の処理ユニットの各々について、割り当ては、処理ユニットがそれぞれの少なくとも1つの処理を実行するのに適したタイプの処理を実行するように構成されているという決定に応じて実行される。
【0128】
ハードウェアモジュールの処理ユニットは、それらのタイプの動作を単一のステップで実行するものとして説明されている。しかしながら、当業者は、この特徴が好ましい特徴に過ぎず、本発明の機能に必須または不可欠ではないことを認識するであろう。
【0129】
一態様によれば、コンパイラにおいてビットファイル記述およびプログラムを受信するステップであって、上記ビットファイル記述は回路の一部分のルーティングの記述を含む、受信するステップと、上記プログラムのためのビットファイルを出力するために上記ビットファイル記述を使用して上記プログラムをコンパイルするステップとを含む方法が提供される。
【0130】
方法は、上記プログラムに関連付けられる機能を実行するように上記回路の上記部分の少なくとも一部を構成するために上記ビットファイルを使用するステップを含むことができる。
【0131】
ビットファイル記述は、回路の上記部分の複数の処理ユニット間のルーティングに関する情報を含むことができる。
【0132】
ビットファイル記述は、上記複数の処理ユニットのうちの少なくとも1つについて、1つまたは複数の他の処理ユニットのいずれにデータを出力することができるか、および、1つまたは複数の他の処理ユニットのいずれからデータを受信することができるか、のうちの少なくとも1つを示すルーティング情報を含むことができる。
【0133】
ビットファイル記述は、2つ以上のそれぞれの処理ユニット間の1つまたは複数のルートを示すルーティング情報を含むことができる。
【0134】
ビットファイル記述は、プログラムのためのビットファイルを提供するためにプログラムをコンパイルするときにコンパイラによって使用可能なルートのみを示す情報を含むことができる。
【0135】
ビットファイルは、それぞれの処理ユニットについて、それぞれの処理ユニットのビットファイル記述内の上記1つまたは複数の他の処理ユニットのうちの1つまたは複数のいずれから入力が提供されるべきか、それぞれの処理ユニットのビットファイル記述内の上記1つまたは複数の他の処理ユニットのうちの1つまたは複数のいずれに出力が提供されるべきか、のうちの少なくとも1つを示す情報を含むことができる。
【0136】
回路の一部は、複数の処理ユニットを備える構成可能ハードウェアモジュールの少なくとも一部分を含むことができ、各処理ユニットは、単一のステップにおいて実行可能な所定のタイプの動作に関連付けられ、上記複数の処理ユニットのうちの少なくともいくつかは、異なる所定のタイプの動作に関連付けられ、上記ビットファイル記述は、複数の処理ユニットのうちの少なくともいくつかの間のルーティングに関する情報を含み、上記方法は、上記ビットファイルを使用して、ハードウェアに、上記複数のデータパケットのうちの1つまたは複数を処理して上記複数のデータパケットのうちの上記1つまたは複数に関して第1の機能を実行するための第1のデータ処理パイプラインを提供するために、上記複数の上記処理ユニットのうちの少なくともいくつかを相互接続させるステップを含むことができる。
【0137】
ビットファイル記述は、FPGAの少なくとも一部のものであってもよい。
ビットファイル記述は、動的にプログラム可能なFPGAの一部のものであってもよい。
【0138】
プログラムは、eBPFプログラムおよびP4プログラムのうちの1つを含んでもよい。
【0139】
コンパイラおよびFPGAは、ネットワークインターフェースデバイス内に設けられてもよい。
【0140】
別の態様によれば、少なくとも1つのプロセッサと、1つまたは複数のプログラムのためのコンピュータコードを含む少なくとも1つのメモリとを備える装置が提供され、少なくとも1つのメモリおよびコンピュータコードは、少なくとも1つのプロセッサを用いて、装置に、少なくとも、ビットファイル記述およびプログラムを受信することであって、上記ビットファイル記述は、回路の一部分のルーティングの記述を含む、受信することと、上記プログラムのためのビットファイルを出力するために上記ビットファイル記述を使用して上記プログラムをコンパイルすることとを行わせるように構成されている。
【0141】
少なくとも1つのメモリおよびコンピュータコードは、少なくとも1つのプロセッサを用いて、装置に、上記ビットファイルを使用して、上記プログラムに関連付けられる機能を実行するように上記回路の上記部分の少なくとも一部を構成させるように構成することができる。
【0142】
ビットファイル記述は、回路の上記部分の複数の処理ユニット間のルーティングに関する情報を含むことができる。
【0143】
ビットファイル記述は、上記複数の処理ユニットのうちの少なくとも1つについて、1つまたは複数の他の処理ユニットのいずれにデータを出力することができるか、および、1つまたは複数の他の処理ユニットのいずれからデータを受信することができるか、のうちの少なくとも1つを示すルーティング情報を含むことができる。
【0144】
ビットファイル記述は、2つ以上のそれぞれの処理ユニット間の1つまたは複数のルー
トを示すルーティング情報を含むことができる。
【0145】
ビットファイル記述は、プログラムのためのビットファイルを提供するためにプログラムをコンパイルするときにコンパイラによって使用可能なルートのみを示す情報を含むことができる。
【0146】
ビットファイルは、それぞれの処理ユニットについて、それぞれの処理ユニットのビットファイル記述内の上記1つまたは複数の他の処理ユニットのうちの1つまたは複数のいずれから入力が提供されるべきか、それぞれの処理ユニットのビットファイル記述内の上記1つまたは複数の他の処理ユニットのうちの1つまたは複数のいずれに出力が提供されるべきか、のうちの少なくとも1つを示す情報を含むことができる。
【0147】
回路の一部は、複数の処理ユニットを備える構成可能ハードウェアモジュールの少なくとも一部分を含むことができ、各処理ユニットは、単一のステップにおいて実行可能な所定のタイプの動作に関連付けられ、上記複数の処理ユニットのうちの少なくともいくつかは、異なる所定のタイプの動作に関連付けられ、上記ビットファイル記述は、複数の処理ユニットのうちの少なくともいくつかの間のルーティングに関する情報を含み、少なくとも1つのメモリおよびコンピュータコードは、少なくとも1つのプロセッサを用いて、装置に、上記ビットファイルを使用して、ハードウェアに、上記複数のデータパケットのうちの1つまたは複数を処理して上記複数のデータパケットのうちの上記1つまたは複数に関して第1の機能を実行するための第1のデータ処理パイプラインを提供するために、上記複数の上記処理ユニットのうちの少なくともいくつかを相互接続させるステップを行わせるように構成されている。
【0148】
ビットファイル記述は、FPGAの少なくとも一部のものであってもよい。
ビットファイル記述は、動的にプログラム可能なFPGAの一部のものであってもよい。
【0149】
プログラムは、eBPFプログラムおよびP4プログラムのうちの1つを含んでもよい。
【0150】
別の態様によれば、ネットワークインターフェースデバイスが提供され、ネットワークインターフェースデバイスは、複数のデータパケットを受信するように構成された第1のインターフェースと、複数の処理ユニットを備える構成可能ハードウェアモジュールであって、各処理ユニットは、単一のステップで実行可能な所定のタイプの動作に関連付けられている、構成可能ハードウェアモジュールと、上記構成可能ハードウェアモジュールの少なくとも一部分のルーティングの記述を含ビットファイル記述およびプログラムを受信し、上記プログラムのためのビットファイルを出力するために上記ビットファイル記述を使用して上記プログラムをコンパイルするように構成されているコンパイラとを備え、上記ハードウェアモジュールは、プログラムに関連付けられる第1の機能を実行するために上記ビットファイルを使用して構成可能である。
【0151】
ネットワークインターフェースデバイスは、ホストデバイスをネットワークにインターフェースするためのものであってもよい。
【0152】
上記複数の処理ユニットの少なくともいくつかは、異なる所定のタイプの動作に関連付けられてもよい。
【0153】
ハードウェアモジュールは、上記複数の上記処理ユニットの少なくともいくつかを相互接続して、上記複数のデータパケットのうちの1つまたは複数を処理して、上記複数のデ
ータパケットのうちの上記1つまたは複数に対して第1の機能を実行するための第1のデータ処理パイプラインを提供するように構成可能であり得る。
【0154】
いくつかの実施形態では、第1の機能は、フィルタリング機能を含む。いくつかの実施形態では、機能は、トンネリング、カプセル化、およびルーティング機能のうちの少なくとも1つを含む。いくつかの実施形態では、第1の機能は、拡張Berkleyパケットフィルタ機能を含む。
【0155】
いくつかの実施形態では、第1の機能は、分散型サービス妨害スクラブ動作を含む。
いくつかの実施形態では、第1の機能は、ファイアウォール動作を含む。
【0156】
いくつかの実施形態では、第1のインターフェースは、ネットワークから第1のデータパケットを受信するように構成される。
【0157】
いくつかの実施形態では、第1のインターフェースは、ホストデバイスから第1のデータパケットを受信するように構成される。
【0158】
いくつかの実施形態では、複数の処理ユニットの少なくともいくつかのうちの2つ以上は、それらの関連する少なくとも1つの所定の動作を並列に実行するように構成される。
【0159】
いくつかの実施形態では、複数の処理ユニットのうちの少なくともいくつかのうちの2つ以上は、ハードウェアモジュールの共通クロック信号に従ってそれらの関連する所定のタイプの動作を実行するように構成される。
【0160】
いくつかの実施形態では、複数の処理ユニットの少なくともいくつかのうちの2つ以上の各々は、クロック信号によって定義される所定の時間長内にその関連する所定のタイプの動作を実行するように構成される。
【0161】
いくつかの実施形態では、複数の処理ユニットのうちの少なくともいくつかのうちの2つ以上は、所定の時間長の期間内に第1のデータパケットにアクセスし、所定の時間長の終了に応答して、それぞれの上記少なくとも1つの動作の結果を次の処理ユニットに転送するように構成される。
【0162】
いくつかの実施形態では、結果は、少なくとも、複数のデータパケットのうちの1つまたは複数からの値、マップ状態への更新、およびメタデータのうちの少なくとも1つまたは複数を含む。
【0163】
いくつかの実施形態では、複数の処理ユニットの各々は、それぞれの処理ユニットに関連付けられる少なくとも1つの動作を実行するように構成された特定用途向け集積回路を含む。
【0164】
いくつかの実施形態では、処理ユニットの各々は、フィールドプログラマブルゲートアレイを含む。いくつかの実施形態では、処理ユニットの各々は、任意の他のタイプのソフトロジックを含む。
【0165】
いくつかの実施形態では、複数の処理ユニットのうちの少なくとも1つは、デジタル回路と、デジタル回路によって実行される処理に関連する状態を記憶するメモリとを備え、デジタル回路は、メモリと通信して、それぞれの処理ユニットに関連付けられる所定のタイプの動作を実行するように構成される。
【0166】
いくつかの実施形態では、ネットワークインターフェースデバイスは、複数の処理ユニットのうちの2つ以上にアクセス可能なメモリを備え、メモリは、第1のデータパケットに関連付けられる状態を記憶するように構成され、ハードウェアモジュールによる第1の機能の実行中、複数の処理ユニットのうちの2つ以上は、状態にアクセスし、状態を修正するように構成される。
【0167】
いくつかの実施形態では、複数の処理ユニットのうちの少なくともいくつかのうちの第1の処理ユニットは、複数の処理ユニットのうちの第2の処理ユニットによる状態の値のアクセス中にストールするように構成される。
【0168】
いくつかの実施形態では、複数の処理ユニットのうちの1つまたは複数は、それらの関連する所定のタイプの動作に基づいて、それぞれのパイプラインに固有の動作を実行するように個別に構成可能である。
【0169】
いくつかの実施形態では、ハードウェアモジュールは、命令を受信し、上記命令に応答して、上記複数のデータパケットのうちの1つまたは複数を処理するためのデータ処理パイプラインを提供するために、上記複数の上記処理ユニットのうちの少なくともいくつかを相互接続すること、上記複数の処理ユニットのうちの1つまたは複数に、上記1つまたは複数のデータパケットに関してそれらの関連する所定のタイプの動作を実行させること、上記複数の処理ユニットのうちの1つまたは複数をデータ処理パイプラインに追加すること、および、データ処理パイプラインから上記複数の処理ユニットのうちの1つまたは複数を除去することのうちの少なくとも1つを行うように構成されている。
【0170】
いくつかの実施形態では、所定の動作は、メモリから第1のデータパケットの少なくとも1つの値をロードすること、データパケットの少なくとも1つの値をメモリに記憶すること、および、データパケットに関して実行されるべきアクションを決定するためにルックアップテーブル内のルックアップを実行することのうちの少なくとも1つを含む。
【0171】
いくつかの実施形態では、ハードウェアモジュールは、命令を受信するように構成され、ハードウェアモジュールは、上記命令に応答して、上記複数のデータパケットのうちの1つまたは複数を処理するためのデータ処理パイプラインを提供するために、上記複数の上記処理ユニットのうちの少なくともいくつかを相互接続するように構成可能であり、命令は、第3の処理パイプラインを介して送信されるデータパケットを含む。
【0172】
いくつかの実施形態では、複数の処理ユニットのうちの1つまたは複数少なくともいくつかは、上記命令に応答して、複数のデータパケットのうちの上記1つまたは複数に関してそれらの関連する所定のタイプの動作のうちの選択された動作を実行するように構成可能である。
【0173】
いくつかの実施形態では、複数の構成要素は、ハードウェアモジュールとは異なる回路において第1の機能を提供するように構成された複数の構成要素のうちの第2の構成要素を含み、ネットワークインターフェースデバイスは、処理パイプラインを通過するデータパケットが、複数の構成要素のうちの第1の構成要素および複数の構成要素のうちの第2の構成要素のうちの1つによって処理されるようにするように構成された少なくとも1つのコントローラを備える。
【0174】
いくつかの実施形態では、ネットワークインターフェースデバイスは、ハードウェアモジュールにデータパケットに対する第1の機能の実行を開始させる命令を発行するように構成された少なくとも1つのコントローラを備え、命令は、複数の構成要素のうちの第1の構成要素が処理パイプラインに挿入されるようにするように構成される。
【0175】
いくつかの実施形態では、ネットワークインターフェースデバイスは、ハードウェアモジュールにデータパケットに対する第1の機能の実行を開始させる命令を発行するように構成された少なくとも1つのコントローラを備え、命令は、処理パイプラインを通じて送信され、複数の構成要素のうちの第1の構成要素が作動されるようにするように構成される制御メッセージを含む。
【0176】
いくつかの実施形態では、複数の処理ユニットの少なくともいくつかのうちの1つまたは複数について、関連する少なくとも1つの動作は、ネットワークインターフェースデバイスのメモリから第1のデータパケットの少なくとも1つの値をロードすること、第1のデータパケットの少なくとも1つの値をネットワークインターフェースデバイスのメモリに記憶することと、および、第1のデータパケットに関して行われるべきアクションを決定するためにルックアップテーブル内のルックアップを行うことのうちの少なくとも1つを含む。
【0177】
いくつかの実施形態では、複数の処理ユニットのうちの少なくともいくつかのうちの1つまたは複数は、その関連する少なくとも1つの所定の動作の少なくとも1つの結果を第1の処理パイプライン内の次の処理ユニットに渡すように構成され、次の処理ユニットは、少なくとも1つの結果に応じて次の所定の動作を実行するように構成される。
【0178】
いくつかの実施形態では、異なる所定のタイプの動作の各々は、異なるテンプレートによって定義される。
【0179】
いくつかの実施形態では、所定の動作のタイプは、データパケットにアクセスすること、ハードウェアモジュールのメモリに記憶されたルックアップテーブルにアクセスすること、データパケットからロードされたデータに対して論理演算を実行すること、および、ルックアップテーブルからロードされたデータに対して論理演算を実行することのうちの少なくとも1つを含む。
【0180】
いくつかの実施形態では、ハードウェアモジュールはルーティングハードウェアを備え、ハードウェアモジュールは、第1のデータ処理パイプラインによって定義される特定の順序で複数の処理ユニット間でデータパケットをルーティングするようにルーティングハードウェアを構成することによって、第1のデータ処理パイプラインを提供するために上記複数の上記処理ユニットの少なくともいくつかを相互接続するように構成可能である。
【0181】
いくつかの実施形態では、ハードウェアモジュールは、上記複数の上記処理ユニットの少なくともいくつかを相互接続して、上記複数のデータパケットのうちの1つまたは複数を処理して第1の機能とは異なる第2の機能を実行するための第2のデータ処理パイプラインを提供するように構成可能である。
【0182】
いくつかの実施形態では、ハードウェアモジュールは、複数の上記処理ユニットのうちの少なくともいくつかを相互接続して第1のデータ処理パイプラインを提供した後に、上記複数の上記処理ユニットのうちの少なくともいくつかを相互接続して第2のデータ処理パイプラインを提供するように構成可能である。
【0183】
いくつかの実施形態では、ネットワークインターフェースデバイスは、ハードウェアモジュールとは別個の、上記複数のデータパケットのうちの1つまたは複数に対して第1の機能を実行するように構成されたさらなる回路を備える。
【0184】
いくつかの実施形態では、さらなる回路は、フィールドプログラマブルゲートアレイ、
および複数の中央処理装置のうちの少なくとも1つを含む。
【0185】
いくつかの実施形態では、ネットワークインターフェースデバイスは、少なくとも1つのコントローラを備え、さらなる回路は、第1の機能がハードウェアモジュールにおいて実行されるようにするためのコンパイルプロセス中にデータパケットに対して第1の機能を実行するように構成され、少なくとも1つのコントローラは、コンパイルプロセスの完了に応答して、データパケットに対する第1の機能の実行を開始するようにハードウェアモジュールを制御するように構成される。
【0186】
いくつかの実施形態では、さらなる回路は、複数の中央処理装置を含む。
いくつかの実施形態では、少なくとも1つのコントローラは、第1の機能がハードウェアモジュールにおいて実行されるようにするためのコンパイルプロセスが完了したという上記決定に応答して、データパケットに対する第1の機能の実行を停止するようにさらなる回路を制御するように構成される。
【0187】
いくつかの実施形態では、ネットワークインターフェースデバイスは少なくとも1つのコントローラを備え、ハードウェアモジュールは、第1の機能がさらなる回路において実行されるようにするためのコンパイルプロセス中にデータパケットに対して第1の機能を実行するように構成され、少なくとも1つのコントローラは、第1の機能がさらなる回路において実行されるようにするためのコンパイルプロセスが完了したと決定し、上記決定に応答して、データパケットに対する第1の機能の実行を開始するようにさらなる回路を制御するように構成される。
【0188】
いくつかの実施形態では、さらなる回路はフィールドプログラマブルゲートアレイを含む。
【0189】
いくつかの実施形態では、少なくとも1つのコントローラは、第1の機能がさらなる回路において実行されるようにするためのコンパイルプロセスが完了したという上記決定に応答して、データパケットに対する第1の機能の実行を停止するようにハードウェアモジュールを制御するように構成される。
【0190】
いくつかの実施形態では、ネットワークインターフェースデバイスは、第1の機能がハードウェアモジュールにおいて実行されることを可能にするためのコンパイルプロセスを実行するように構成された少なくとも1つのコントローラを備える。
【0191】
いくつかの実施形態では、コンパイルプロセスは、制御メッセージに応答するハードウェアモジュール内の制御プレーンインターフェースを提供するための命令を提供することを含む。
【0192】
別の態様によれば、コンピュータ実施方法が提供され、方法は、複数の処理ユニットを備える構成可能ハードウェアモジュールの少なくとも一部のルーティング情報を決定するステップを含み、各処理ユニットは、単一のステップで実行可能な所定のタイプの動作に関連付けられ、上記複数の処理ユニットのうちの少なくともいくつかは、異なる所定のタイプの動作に関連付けられ、上記ルーティング情報は、少なくとも複数の処理ユニット間の利用可能なルートに関する情報を提供する。
【0193】
構成可能ハードウェアモジュールは、実質的に静的な部分および実質的に動的な部分を含むことができ、上記決定するステップは、上記実質的に動的な部分のルーティング情報を決定することを含む。
【0194】
上記実質的に動的な部分のルーティング情報を決定することは、上記実質的に静的な部分の処理ユニットのうちの1つまたは複数によって使用される上記実質的に動的な部分のルーティングを決定することを含むことができる。
【0195】
決定することは、上記ルーティング情報を決定するために、上記構成可能ハードウェアモジュールの少なくとも一部のビットファイル記述を分析することを含むことができる。
【0196】
別の態様によれば、非一時的コンピュータ可読媒体が提供され、媒体は、複数の処理ユニットを備える構成可能ハードウェアモジュールの少なくとも一部のルーティング情報を決定するためのプログラム命令を含み、各処理ユニットは、単一のステップで実行可能な所定のタイプの動作に関連付けられ、上記複数の処理ユニットのうちの少なくともいくつかは、異なる所定のタイプの動作に関連付けられ、上記ルーティング情報は、少なくとも複数の処理ユニット間の利用可能なルートに関する情報を提供する。
【0197】
方法(複数可)を実行するように適合されたプログラムコード手段を含むコンピュータプログラムも提供され得る。コンピュータプログラムは、キャリア媒体によって記憶および/または他の方法で具現化されてもよい。
【0198】
以上、多くの異なる実施形態について説明した。さらなる実施形態が、上述の実施形態のうちの任意の2つ以上の組み合わせによって提供されてもよいことを理解されたい。
【0199】
様々な他の態様およびさらなる実施形態もまた、以下の詳細な説明および添付の特許請求の範囲に記載される。
【0200】
図面の簡単な説明
ここで、いくつかの実施形態を、添付の図面を参照して単なる例として説明する。
【図面の簡単な説明】
【0201】
【
図1】ネットワークに結合されたデータ処理システムの概略図である。
【
図2】ホストコンピューティングデバイス上でユーザモードにおいて作動するように構成されたフィルタリング動作アプリケーションを備えるデータ処理システムの概略図である。
【
図3】ホストコンピューティングデバイス上でカーネルモードにおいて作動するように構成されたフィルタリング動作を備えるデータ処理システムの概略図である。
【
図4】データパケットに関して機能を実行するための複数のCPUを備えるネットワークインターフェースデバイスの概略図である。
【
図5】データパケットに関して機能を実行するためのアプリケーションを作動させるフィールドプログラマブルゲートアレイを備えるネットワークインターフェースデバイスの概略図である。
【
図6】データパケットに関して機能を実行するためのハードウェアモジュールを備えるネットワークインターフェースデバイスの概略図である。
【
図7】データパケットに関して機能を実行するための、フィールドプログラマブルゲートアレイと、少なくとも1つの処理ユニットとを備えるネットワークインターフェースデバイスの概略図である。
【
図8】いくつかの実施形態によるネットワークインターフェースデバイス内で実施される方法を示す図である。
【
図9】いくつかの実施形態によるネットワークインターフェースデバイス内で実施される方法を示す図である。
【
図10】一連のプログラムによってデータパケットを処理する実施例を示す図である。
【
図11】複数の処理ユニットによってデータパケットを処理する実施例を示す図である。
【
図12】複数の処理ユニットによってデータパケットを処理する実施例を示す図である。
【
図13】データパケットを処理するための処理ステージのパイプラインの例を示す図である。
【
図14】複数のプラガブル構成要素を有するスライスアーキテクチャの例を示す図である。
【
図15】複数の処理ユニットの処理の構成および順序の例示的な表現を示す図である。
【
図16】機能をコンパイルする例示的な方法を示す図である。
【
図17】ステートフル処理ユニットの一例を示す図である。
【
図18】ステートレス処理ユニットの一例を示す図である。
【
図19】いくつかの実施形態の方法を示す図である。
【
図20a】FPGAにおけるスライス間のルーティングを示す図である。
【
図20b】FPGAにおけるスライス間のルーティングを示す図である。
【
図21】FGPA上のパーティションを概略的に示す図である。
【発明を実施するための形態】
【0202】
詳細な説明
以下の説明は、当業者が本発明を作成および使用することを可能にするために提示され、特定の用途の文脈で提供される。開示された実施形態に対する様々な変更は、当業者には容易に明らかであろう。
【0203】
本明細書で定義される一般的な原理は、本発明の思想および範囲から逸脱することなく、他の実施形態および用途に適用することができる。したがって、本発明は、示された実施形態に限定されることを意図するものではなく、本明細書に開示された原理および特徴と一致する最も広い範囲が与えられるべきである。
【0204】
データがネットワークなどのデータチャネルを介して2つのデータ処理システム間で転送される場合、データ処理システムの各々は、チャネルを介して通信することを可能にする適切なネットワークインターフェースを有する。多くの場合、ネットワークはイーサネット(登録商標)技術に基づいている。ネットワークを介して通信するデータ処理システムは、ネットワークプロトコルの物理的および論理的要件をサポートすることができるネットワークインターフェースを備えている。ネットワークインターフェースの物理ハードウェア構成要素は、ネットワークインターフェースデバイスまたはネットワークインターフェースカード(NIC)と呼ばれる。
【0205】
ほとんどのコンピュータシステムは、ユーザレベルアプリケーションがネットワークと通信するためのオペレーティングシステム(OS)を含む。カーネルとして知られるオペレーティングシステムの一部は、アプリケーションとネットワークインターフェースデバイスに固有のデバイスドライバとの間でコマンドおよびデータを変換するためのプロトコルスタックを含む。デバイスドライバは、ネットワークインターフェースデバイスを直接制御することができる。オペレーティングシステムカーネルにこれらの機能を提供することにより、ネットワークインターフェースデバイスの複雑さおよび違いをユーザレベルアプリケーションから隠すことができる。ネットワークハードウェアおよび他のシステムリソース(メモリなど)は、多くのアプリケーションによって安全に共有することができ、システムは、欠陥または悪意のあるアプリケーションから保護することができる。
【0206】
ネットワークを介した送信を実行するための典型的なデータ処理システム100が
図1
に示されている。データ処理システム100は、ホストをネットワーク103にインターフェースするように構成されたネットワークインターフェースデバイス102に結合されたホストコンピューティングデバイス101を備える。ホストコンピューティングデバイス101は、1つまたは複数のユーザレベルアプリケーション105をサポートするオペレーティングシステム104を含む。ホストコンピューティングデバイス101は、ネットワークプロトコルスタック(図示せず)も含むことができる。例えば、プロトコルスタックは、アプリケーションの構成要素であってもよく、アプリケーションがリンクされているライブラリであってもよく、またはオペレーティングシステムによって提供されてもよい。いくつかの実施形態では、2つ以上のプロトコルスタックが提供されてもよい。
【0207】
ネットワークプロトコルスタックは、伝送制御プロトコル(TCP)スタックであってもよい。アプリケーション105は、ソケットを開き、ソケットに対してデータを読み書きすることによってTCP/IPメッセージを送受信することができ、オペレーティングシステム104は、ネットワークを介してメッセージが転送されるようにする。例えば、アプリケーションは、ソケットを通じて、次いでオペレーティングシステム104を介してネットワーク103にデータを送信するためのシステムコール(syscall)を呼び出すことができる。メッセージを送信するためのこのインターフェースは、メッセージパッシングインターフェースとして知られ得る。
【0208】
スタックをホスト101に実装する代わりに、いくつかのシステムは、プロトコルスタックをネットワークインターフェースデバイス102にオフロードする。例えば、スタックがTCPスタックである場合、ネットワークインターフェースデバイス102は、TCPプロトコル処理を実行するためのTCPオフロードエンジン(TOE)を備えることができる。ホストコンピューティングデバイス101ではなくネットワークインターフェースデバイス102内でプロトコル処理を実行することによって、ホストシステム101のプロセッサ(複数可)に対する需要を低減することができる。ネットワークを介して送信されるデータは、TOE対応仮想インターフェースドライバを介してアプリケーション105によって、カーネルTCP/IPスタックを部分的にまたは完全に渡すことによって送信されてもよい。したがって、この高速経路に沿って送信されるデータは、TOEドライバの要件を満たすようにフォーマットされるだけでよい。
【0209】
ホストコンピューティングデバイス101は、1つまたは複数のプロセッサおよび1つまたは複数のメモリを備えることができる。いくつかの実施形態では、ホストコンピューティングデバイス101およびネットワークインターフェースデバイス102は、バス、例えば周辺機器相互接続エクスプレス(PCIeバス)を介して通信することができる。
【0210】
データ処理システムの動作中、ネットワーク上に送信されるべきデータは、送信のためにホストコンピューティングデバイス101からネットワークインターフェースデバイス102に転送することができる。一例では、データパケットは、ホストプロセッサによってホストからネットワークインターフェースデバイスに直接転送されてもよい。ホストは、ネットワークインターフェースデバイス102上に配置された1つまたは複数のバッファ106にデータを提供することができる。次いで、ネットワークインターフェースデバイス102は、データパケットを準備し、それらをネットワーク103を介して送信することができる。
【0211】
あるいは、データは、ホストシステム101内のバッファ107に書き込まれてもよい。次いで、データは、ネットワークインターフェースデバイスによってバッファ107から取り出し、ネットワーク103を介して送信することができる。
【0212】
これらの場合の両方において、データは、ネットワークを介した送信の前に、1つまた
は複数のバッファに一時的に記憶される。ネットワークを介して送信されたデータは、(ルックバックにおいて)ホストに返され得る。
【0213】
データパケットがネットワーク103を介して送受信されるとき、ネットワークを介して送信されるデータパケット上で、またはネットワークを介して受信されるデータパケット上で、データパケットに対する動作として表現することができる多くの処理タスクが存在する。例えば、ホストシステム101を分散型サービス妨害(DDOS)フィルタリングから保護するように、受信されるデータパケットに対してフィルタリングプロセスを実行することができる。このようなフィルタリングプロセスは、単純なパック検査または拡張Berkleyパケットフィルタ(eBPF)によって実行することができる。別の例として、ネットワーク103を介して送信されるデータパケットに対してカプセル化および転送が実行され得る。これらのプロセスは、多くのCPUサイクルを消費し、従来のOSアーキテクチャにとって負担となり得る。
【0214】
フィルタリング動作または他のパケット処理動作がホストシステム220において実施され得る一方法を示す
図2を参照する。ホストシステム220によって実行されるプロセスは、ユーザ空間またはカーネル空間のいずれかで実行されるものとして示されている。ネットワークインターフェースデバイス210においてネットワークから受信されるデータパケットを終端アプリケーション250に送達するための受信経路が、カーネル空間に存在する。この受信経路は、ドライバ235と、プロトコルスタック240と、ソケット245とを備える。フィルタリング動作230は、ユーザ空間において実施される。ネットワークインターフェースデバイス210によってホストシステム220に提供される入来パケットは、(プロトコル処理が行われる)カーネルをバイパスし、フィルタリング動作230に直接提供される。
【0215】
フィルタリング動作230には、ホストシステム220内の他の要素とデータパケットを交換するための仮想インターフェース(エーテルファブリック仮想インターフェース(EFVI)もしくはデータプレーン開発キット(DPDK)または任意の他の適切なインターフェースであってもよい)が与えられる。フィルタリング動作230は、DDOSスクラブおよび/または他の形態のフィルタリングを実行することができる。DDOSスクラブプロセスは、DDOS候補として容易に認識されるすべてのパケット、例えば、サンプルパケット、パケットのコピー、およびまだ分類されていないパケットに対して実行することができる。フィルタリング動作230に送達されないパケットは、ネットワークインターフェースからドライバ235に直接渡すことができる。動作230は、フィルタリングを実行するための拡張Berkeleyパケットフィルタ(eBPF)を提供することができる。受信されるパケットが動作230によって提供されるフィルタリングを通過する場合、動作230は、受信されるパケットを処理するためにカーネル内の受信経路にパケットを再注入するように構成される。具体的には、パケットは、ドライバ235またはスタック240に提供される。その後、パケットはプロトコルスタック240によってプロトコル処理される。その後、パケットは、終端アプリケーション250に関連付けられたソケット245に渡される。終端アプリケーション250は、recv()呼び出しを発行して、関連するソケットのバッファからデータパケットを取り出す。
【0216】
しかしながら、この手法にはいくつかの問題がある。最初に、フィルタリング動作230はホストCPU上で作動する。フィルタリング230を作動させるために、ホストCPUは、ネットワークから受信される速度でデータパケットを処理しなければならない。ネットワークからデータが送受信される速度が速い場合、これはホストCPUの処理リソースの大きな損失を構成する可能性がある。フィルタリング動作230への高いデータ流量は、I/O帯域幅および内部メモリ/キャッシュ帯域幅などの他の限られたリソースの大量消費をもたらす可能性がある。
【0217】
データパケットのカーネルへの再注入を実行するために、再注入を実行するための特権APIをフィルタリング動作230に提供する必要がある。再注入プロセスは煩雑であり、パケットの順序付けに注意を要する場合がある。再注入を実行するために、動作230は、多くの場合、専用のCPUコアを必要とし得る。
【0218】
データを動作に提供し、再注入するステップは、データをメモリにコピーし、メモリからコピーする必要がある。このコピーは、システムに対するリソース負荷である。
【0219】
ネットワークを介して送受信されるデータに対するフィルタリング以外の他のタイプの動作を提供する場合にも、同様の問題が発生する可能性がある。
【0220】
いくつかの動作(DPDKタイプの動作など)は、処理されたパケットをネットワーク上に戻す転送を必要とする場合がある。
【0221】
別の手法を示す
図3を参照する。同様の要素は、同様の参照符号によって参照される。この例では、エクスプレスデータパス(XDP)310として知られる追加の層が、カーネルにおける送信および受信経路へ挿入される。XDP 310への拡張は、送信経路への挿入を可能にする。XDPヘルパは、(受信動作の結果として)パケットが送信されることを可能にする。XDP 310は、オペレーティングシステムのドライバレベルで挿入され、スタック240によってプロトコル処理される前にネットワークから受信されるデータパケットに対して動作を実行するように、このレベルでプログラムが実行されることを可能にする。XDP 310はまた、ネットワークを介して送信されるデータパケットに対して動作を実行するために、このレベルでプログラムが実行されることを可能にする。したがって、eBPFプログラムおよび他のプログラムは、送信経路および受信経路において動作することができる。
【0222】
図3に例示されるように、フィルタリング動作320は、XDP 310の一部であるプログラム330を形成するために、ユーザ空間からXDPへ挿入され得る。動作320は、データ受信経路上で実行されることになるXDP制御プレーンを使用して挿入されて、受信経路上のパケットに対してフィルタリング動作(例えばDDOSスクラブ)を実行するプログラム330を提供する。このようなプログラム330は、eBPFプログラムであってもよい。
【0223】
プログラム330は、ドライバ235とプロトコルスタック240との間でカーネルに挿入されて示されている。しかしながら、他の例では、プログラム330は、カーネル内の受信経路内の他の点に挿入されてもよい。プログラム330は、データパケットを受信する別個の制御経路の一部であってもよい。プログラム330は、アプリケーションによって、そのアプリケーションのためのソケット245のアプリケーションプログラミングインターフェース(API)に対する拡張を提供することによって提供されてもよい。
【0224】
このプログラム330は、付加的または代替的に、送信経路を介して送信されているデータに対して1つまたは複数の動作を実行することができる。次いで、XDP 310は、ネットワークインターフェースデバイス210を介してネットワークを介してデータを送信するためにドライバ235の送信機能を呼び出す。この場合のプログラム330は、ネットワークを介して送信されるべきデータパケットに関する負荷分散またはルーティング動作を提供することができる。プログラム330は、ネットワークを介して送信されるべきデータパケットに関するセグメント再カプセル化および転送動作を提供することができる。
【0225】
プログラム330は、ファイアウォール、仮想スイッチング、またはプロトコル終了もしくはアプリケーション処理を必要としない他の動作に使用することができる。
【0226】
このようにXDP 310を使用する利点の1つは、プログラム330が中間コピーなしでドライバによって処理されるメモリバッファに直接アクセスできることである。
【0227】
このように動作のためのプログラム330をカーネルに挿入するためには、プログラム330が安全であることを保証する必要がある。安全でないプログラムがカーネルに挿入される場合、これは、カーネルをクラッシュさせる可能性がある無限ループ、バッファオーバフロー、初期化されない変数、コンパイラエラー、大型プログラムによって引き起こされる性能問題などの特定のリスクをもたらす。
【0228】
このようにしてXDP 310に挿入される前にプログラム330が安全であることを保証するために、検証器がホストシステム220上で作動して、プログラム330の安全性を検証することができる。検証器は、ループが存在しないことを保証するように構成することができる。後方ジャンプ動作は、ループを発生させない限り許可され得る。検証器は、プログラム330が所定数(例えば、4000)以下の命令を有することを保証するように構成することができる。検証器は、プログラム330のデータパスをトラバースすることによってレジスタ使用の有効性のチェックを実行することができる。可能な経路が多すぎる場合、プログラム330は、カーネルモードで実行するのに安全ではないとして拒否される。例えば、1000を超える分岐がある場合、プログラム330は拒否され得る。
【0229】
XDPは、安全なプログラム330をカーネルにおいてインストールすることができる一例であり、これを達成することができる他の方法があることが当業者には理解されよう。
【0230】
図3に関して上述した手法は、例えば、動作がカーネルにおいてコードを実行するために必要な安全な(またはサンドボックス化された)言語で表現できる場合、
図2に関して上述した手法と同じくらい効率的であり得る。eBPF言語は、x86プロセッサ上で効率的に実行することができ、JIT(ジャストインタイム)コンパイル技法は、eBPFプログラムをネイティブマシンコードにコンパイルすることを可能にする。言語は安全であるように設計されており、例えば、状態は、(ハッシュテーブルなどの)共有データ構造である構造体のみをマッピングするように制限されている。許容されるループは制限されており、代わりに、1つのeBPFプログラムが別のeBPFプログラムをテールコールすることができる。状態空間は制約される。
【0231】
しかしながら、いくつかの実装形態では、この手法によれば、ホストシステム220のリソース(例えば、I/O帯域幅および内部メモリ/キャッシュ帯域幅、ホストCPU)上で大きな損失が存在し得る。データパケットに対する動作は依然としてホストCPUによって実行されており、ホストCPUは、データが送信/受信されている速度でそのような動作を実行する必要がある。
【0232】
別の提案は、ホストシステムではなくネットワークインターフェースデバイスで上記の動作を実行することである。そうすることにより、消費されるI/O帯域幅、メモリおよびキャッシュ帯域幅に加えて、動作を実行するときにホストCPUによって使用されるCPUサイクルを解放することができる。処理動作の実行をホストからネットワークインターフェースデバイスのハードウェアに移行することは、いくつかの課題を提示し得る。
【0233】
ネットワークハードウェアにおいて処理を実施するための1つの提案は、パケット処理
および/または操作動作に特化した複数のCPUを備えるネットワーク処理ユニット(NPU)をネットワークインターフェースデバイスに提供することである。
【0234】
例えばCPU 420などの中央処理装置(CPU)のアレイ410を備えるネットワークインターフェースデバイス400の例を示している、
図4を参照する。CPUは、ネットワークから送受信されるデータパケットをフィルタリングするなどの機能を実行するように構成される。CPUのアレイ410の各CPUは、NPUであってもよい。
図4には示されていないが、CPUは、付加的または代替的に、ネットワークを介した送信のためにホストから受信されるデータパケットに対する負荷分散などの動作を実行するように構成されてもよい。これらのCPUは、そのようなパケット処理/操作動作に特化している。CPUは、このようなパケット処理/操作動作に最適化された命令セットを実行する。
【0235】
ネットワークインターフェースデバイス400は、CPUのアレイ410の間で共有され、アレイにとってアクセス可能なメモリ(図示せず)をさらに備える。
【0236】
ネットワークインターフェースデバイス400は、ネットワークインターフェースデバイス400をネットワークとインターフェースするためのネットワーク媒体アクセス制御(MAC)層430を備える。MAC層430は、ネットワークを介してデータパケットを受信し、ネットワークを介してデータパケットを送信するように構成される。
【0237】
ネットワークインターフェースデバイス400において受信されるパケットに対する動作は、CPUにわたって並列化される。図示のように、MAC層430においてデータフローが受信されると、それは拡散機能440に渡され、拡散機能は、フローからデータパケットを抽出し、CPUがこれらのデータパケットの処理、例えばフィルタリングを実行するために、NPU 410内の複数のCPUにわたってデータパケットを分配するように構成される。拡散機能440は、受信データパケットを解析して、それらが属するデータフローを識別することができる。拡散機能440は、各パケットについて、パケットが属するデータフロー内のそれぞれのパケットの位置の指示を生成する。指示は、例えば、タグであってもよい。拡散機能440は、各パケットの関連するメタデータにそれぞれの指示を追加する。各データパケットの関連するメタデータは、データパケットに付加することができる。関連するメタデータは、サイドバンド制御情報として拡散機能440に渡すことができる。指示は、任意の特定のフローのデータパケットの順序が再構築され得るように、データパケットが属するフローに応じて追加される。
【0238】
複数のCPU 410によってプログラミングされた後、データパケットは次いで、再順序付け機能450に渡され、再順序付け機能は、データフローのパケットをホストインターフェース層460に渡す前に正しい順序に順序付けし直す。再順序付け機能450は、フローのデータパケット内の指示(例えば、タグ)を比較してデータパケットの順序を再構築することによって、フロー内のデータパケットを順序付けし直すことができる。次いで、順序付けし直されたデータパケットは、ホストインターフェース460をトラバースし、ホストシステム220に送達される。
【0239】
図4は、ネットワークから受信されるデータパケットに対してのみ動作するCPUのアレイ410を示しているが、ネットワークを介した送信のためにホストから受信されるデータパケットに対して同様の原理(拡散および順序付けし直しを含む)を実行することができ、CPUのアレイ410は、ホストから受信されるこれらのデータパケットに対して機能(例えば、負荷分散)を実行する。
【0240】
CPUによって実行されるプログラムは、
図3に関して上述した例においてホストCP
U上で実行されるプログラムのコンパイルまたはトランスコードされたバージョンであってもよい。言い換えれば、動作を実行するためにホストCPU上で実行される命令セットは、ネットワークインターフェース400内の専用CPUの各CPUアレイ上での実行のために変換される。
【0241】
CPUにわたる並列化を達成するために、プログラムの複数のインスタンスがコンパイルされ、複数のCPU上で並列に実行される。プログラムの各インスタンスは、ネットワークインターフェースデバイスにおいて受信されるデータパケットの異なるセットを処理する役割を果たすことができる。しかしながら、各個々のデータパケットは、そのデータパケットに対してプログラムの機能を提供するときに単一のCPUによって処理される。並列プログラムの実行の全体的な効果は、ホストCPU上での単一のプログラム(例えば、プログラム330)の実行と同じであり得る。
【0242】
専用のCPUのうちの1つは、毎秒5000万パケット程度でデータパケットを処理することができる。この動作速度は、ホストCPUの動作速度よりも低速であり得る。したがって、並列化を使用して、ホストCPU上で同等のプログラムを実行することによって達成されるのと同じ性能を達成することができる。並列化を実行するために、データパケットはCPU上に拡散され、次いでCPUによる処理後に順序付けし直される。再順序付けステップ450と共に各フローのデータパケットを順に処理する要件は、ボトルネックを導入し、メモリリソースオーバーヘッドを増加させる可能性があり、デバイスの利用可能なスループットを制限する可能性がある。この要件および再順序付けステップ450は、ネットワークトラフィックの内容および並列性を適用できる程度に応じて処理スループットが変動する可能性があるため、デバイスのジッタを増加させる可能性がある。
【0243】
このような専用CPUを使用する利点の1つは、短いコンパイル時間であり得る。例えば、そのようなCPU上で1秒未満で実行するように、フィルタリングアプリケーションをコンパイルすることが可能であり得る。
【0244】
この手法がより高いリンク速度にスケーリングされる場合、CPUのアレイの使用に問題があり得る。ホストネットワークインターフェースが、近い将来にテラビット/秒の速度に到達するために必要とされ得る。このようなCPUアレイ410をこれらのより高い速度にスケールアップする場合、必要な電力量が問題になる可能性がある。
【0245】
別の提案は、ネットワークインターフェースデバイスにフィールドプログラマブルゲートアレイ(FPGA)を含め、FPGAを使用してネットワークから受信されるデータパケットに対して動作を実行することである。
【0246】
ネットワークインターフェースデバイス500において受信されるデータパケットに対して動作を実行するためのFPGAアプリケーション515を有するFPGA 510の、ネットワークインターフェースデバイス500における使用の一例を示す
図5を参照する。
図4にあるものと同様の要素は、同様の参照符号によって参照される。
【0247】
図5は、ネットワークから受信されるデータパケットに対してのみ動作するFPGAアプリケーション515を示しているが、そのようなFPGAアプリケーション515は、ネットワークを介した送信のために、またはホストもしくはシステム上の別のネットワークインターフェースに戻すために、ホストから受信されるこれらのデータパケットに対して機能(例えば、負荷分散および/またはファイアウォール機能)を実行するために使用されてもよい。
【0248】
FPGAアプリケーション515は、CもしくはC++またはscalaなどの一般的
なシステムレベル言語で記述されたプログラムをFPGA 510上で作動するようにコンパイルすることによって提供することができる。
【0249】
そのFPGA 510は、ネットワークインターフェース機能およびFPGA機能を有することができる。FPGA機能は、ネットワークインターフェースデバイスのユーザの必要に応じてFPGA 510にプログラムされ得るFPGAアプリケーション515を提供することができる。FPGAアプリケーション515は、例えば、ネットワーク230からホストへの受信経路上でメッセージのフィルタリングを提供することができる。FPGAアプリケーション515は、ファイアウォールを提供することができる。
【0250】
FPGA 510は、FPGAアプリケーション515を提供するようにプログラム可能とすることができる。ネットワークインターフェースデバイス機能の一部は、FPGA
510内の「ハード」ロジックとして実装されてもよい。例えば、ハードロジックは、特定用途向け集積回路(ASIC)のゲートであってもよい。FPGAアプリケーション515は、「ソフト」ロジックとして実装されてもよい。ソフトロジックは、FPGA LUT(ルックアップテーブル)をプログラミングすることによって提供されてもよい。ハードロジックは、ソフトロジックと比較してより高いレートでクロックされることが可能であり得る。
【0251】
ネットワークインターフェースデバイス500は、ホストとデータを送受信するように構成されたホストインターフェース505を備える。ネットワークインターフェースデバイス520は、ネットワークとデータを送受信するように構成されたネットワーク媒体アクセス制御(MAC)インターフェース520を含む。
【0252】
MACインターフェース520においてネットワークからデータパケットが受信されると、データパケットはFPGAアプリケーション515に渡され、FPGAアプリケーションはデータパケットに対してフィルタリングなどの機能を実行するように構成されている。次いで、データパケット(任意のフィルタリングを通過する場合)は、ホストインターフェース505に渡され、そこからホストに渡される。あるいは、データパケットFPGAアプリケーション515は、データパケットをドロップまたは再送信することを決定することができる。
【0253】
FPGAを使用してデータパケットに対して機能を実行するこの手法に伴う1つの問題は、必要とされるコンパイル時間が比較的長いことである。FPGAは、AND、OR、NOTなどのようなプリミティブ論理演算を個別に表す多くの論理要素(例えば論理セル)から構成される。これらの論理要素は、プログラム可能な相互接続を有するマトリクスに配置構成される。機能を提供するために、これらの論理セルは、回路定義および同期クロックタイミング制約を実施するためにともに動作する必要があり得る。各論理セルを配置し、セル間をルーティングすることは、アルゴリズム的に困難な課題であり得る。利用レベルがより低いFPGA上でコンパイルする場合、コンパイル時間は10分未満であり得る。しかしながら、FPGAデバイスが様々なアプリケーションによってより利用されるようになるにつれて、所与の機能をFPGA上にコンパイルする時間が増加するように、場所およびルートの課題が増大する可能性がある。そのため、そのルーティングリソースの大部分が既に消費されているFPGAに追加のロジックを追加するには、数時間のコンパイル時間がかかる場合がある。
【0254】
1つの手法は、解析プリミティブ、マッチングプリミティブ、およびアクションプリミティブなどの特定の処理プリミティブを使用してハードウェアを設計することである。これらは、すべてのパケットが3つのプロセスの各々を受ける処理パイプラインを構築するために使用され得る。最初に、パケットが解析されて、プロトコルヘッダのメタデータ表
現が構築される。第二に、パケットは、テーブルに保持された規則と柔軟にマッチングされる。最後に、一致がみつかったとき、パケットは、マッチング動作において選択されたテーブルからのエントリに応じて動作される。
【0255】
解析/マッチング/アクションモデルを使用して機能を実装するために、P4プログラミング言語(または同様の言語)を使用することができる。P4プログラミング言語は、標的に依存せず、これは、P4で書かれたプログラムをコンパイルして、CPU、FPGA、ASIC、NPUなどのような異なるタイプのハードウェアで実行できることを意味する。各異なるタイプの標的には、P4ソースコードを適切な標的スイッチモデルにマッピングする独自のコンパイラが設けられている。
【0256】
P4は、高レベルプログラムがパケット処理パイプラインのパケット処理動作を表現することを可能にするプログラミングモデルを提供するために使用され得る。この手法は、宣言的なスタイルで自然に自身を表現する動作に対して良好に機能する。P4言語では、プログラマは、解析、マッチング、およびアクションステージを、受信されるデータパケットに対して実行される動作として表現する。これらの動作は、効率的に実行するために専用ハードウェアについてまとめられている。しかしながら、この宣言的なスタイルは、eBPFプログラムなどの命令的な性質のプログラムを表現するのに適切ではない場合がある。
【0257】
ネットワークインターフェースデバイスでは、eBPFプログラムのシーケンスが連続的に実行される必要があり得る。この場合、互いに呼び合うeBPFプログラムのチェーンが生成される。各プログラムは、状態を修正することができ、出力は、プログラムのチェーン全体が連続的に実行されたかのようになる。コンパイラがすべての解析、マッチング、およびアクションステップを収集することは困難であり得る。しかしながら、eBPFプログラムのチェーンが既にインストールされている場合であっても、チェーンをインストール、削除、または変更する必要があり得、さらなる課題を提示する可能性がある。
【0258】
リピート実行を必要とするそのようなプログラムの例を提供するために、データパケットを処理するように構成されたプログラムe
1、e
2、e
3のシーケンスの例を示す
図10を参照する。各プログラムは、例えば、eBPFプログラムであってもよい。各プログラムは、受信データパケットを解析し、テーブル1010内の一致するエントリにおけるアクションを決定するためにテーブル1010内のルックアップを実行し、次いでデータパケットに対するアクションを実行するように構成される。アクションは、パケットを修正することを含むことができる。各eBPFプログラムはまた、ローカル状態および共有状態に応じてアクションを実行することができる。データパケットP
0は、パイプライン内の次のプログラムe
2に渡され、修正される前に、eBPFプログラムe
1によって最初に処理される。プログラムのシーケンスの出力は、パイプライン内の最終プログラムの出力、すなわちe
3である。
【0259】
n個のそのようなプログラムの各々の効果を単一のP4プログラムに組み合わせることは、コンパイラにとって複雑であり得る。さらに、特定のプログラミングモデル(XDPなど)は、状況の変化に応じて迅速に、プログラムのシーケンスの任意の時点においてプログラムを動的に挿入および削除する必要があり得る。
【0260】
本出願のいくつかの実施形態によれば、複数の処理ユニットを備えるネットワークインターフェースデバイスが提供される。各処理ユニットは、ハードウェアにおいて少なくとも1つの所定の動作を実行するように構成される。各処理ユニットは、それ自体のローカル状態を記憶するメモリを備える。各処理ユニットは、この状態を変更するデジタル回路を備える。デジタル回路は、特定用途向け集積回路であってもよい。各処理ユニットは、
それぞれの複数の動作を実行するように、構成可能なパラメータを含むプログラムを実行するように構成される。各処理ユニットはアトムであってもよい。アトムは、予め定義されたテンプレートの特定のプログラミングおよびルーティングによって定義される。これは、接続された複数の処理ユニットによって提供されるフローにおけるその特定の動作挙動および論理的場所を定義する。「アトム」という用語が本明細書で使用される場合、これは、単一のステップでその動作を実行するように構成されたデータ処理ユニットを指すと理解され得る。すなわち、アトムは、その動作をアトム動作として実行する。
【0261】
アトムは、1つまたは複数の入力を取り、1つまたは複数の出力を生成する、一連の計算のうちの1つを繰り返し実行するように構成することができるハードウェア構造の集合と見なすことができる。
【0262】
アトムはハードウェアによって提供される。アトムは、コンパイラによって構成されてもよい。アトムは、計算を実行するように構成され得る。
【0263】
コンパイル中、複数の処理ユニットのうちの少なくともいくつかは、複数の処理ユニットのうちの少なくともいくつかによってネットワークインターフェースデバイスにおいて受信されるデータパケットに関して機能が実行されるように、動作を実行するように構成される。複数の処理ユニットの少なくともいくつかの各々は、データパケットに関して機能を実行するように、それぞれの少なくとも1つの所定の動作を実行するように構成される。言い換えれば、接続された処理ユニットが実行するように構成された動作は、受信データパケットに対して実行される。動作は、複数の処理ユニットの少なくともいくつかによって順次実行される。集合的に、複数の動作の各々の実行は、受信パケットに関する機能、例えばフィルタリングを提供する。
【0264】
機能を実行するようにそれぞれの少なくとも1つの所定の動作を実行するように各アトムを配置することによって、
図5に関して上述したFPGAアプリケーション例と比較してコンパイル時間を短縮することができる。さらに、ハードウェア内で特定の動作を実行するために特に専用にされている処理ユニットを使用して機能を実行することにより、
図4に関して上述したように、ネットワークインターフェースデバイス内のソフトウェアを実行するCPUを使用して各データパケットの機能を実行することに関して、機能を実行できる速度を改善することができる。
【0265】
本出願の実施形態によるネットワークインターフェースデバイス600の一例を示す
図6を参照する。ネットワークインターフェースデバイスは、ネットワークインターフェースデバイス600のインターフェースにおいて受信されるデータパケットの処理を実行するように構成されたハードウェアモジュール610を備える。
図6は、受信経路上のデータパケットのための機能(例えば、フィルタリング)を実行するハードウェアモジュール610を示しているが、ハードウェアモジュール610は、ホストから受信される送信経路上のデータパケットのための機能(例えば、負荷分散またはファイアウォール)を実行するためにも使用され得る。
【0266】
ネットワークインターフェースデバイス600は、ホストとデータパケットを送受信するためのホストインターフェース620と、ネットワークとデータパケットを送受信するためのネットワークMACインターフェース630とを含む。
【0267】
ネットワークインターフェースデバイス600は、複数の処理ユニット640a、640b、640c、640dを備えるハードウェアモジュール610を備える。各処理ユニットは、アトム処理ユニットであってもよい。アトムという用語は、本明細書において処理ユニットを指すために使用される。各処理ユニットは、ハードウェアにおいて少なくと
も1つの動作を実行するように構成される。処理ユニットの各々は、少なくとも1つの動作を実行するように構成されたデジタル回路645を備える。デジタル回路645は、特定用途向け集積回路であってもよい。処理ユニットの各々は、状態情報を記憶するメモリ650をさらに備える。デジタル回路645は、複数の動作のそれぞれを実行する際に、状態情報を更新する。ローカルメモリに加えて、各処理ユニットは、複数の処理ユニットの各々にアクセス可能な状態情報を同じく記憶することができる共有メモリ660にアクセスすることができる。
【0268】
共有メモリ660内の状態情報および/または処理ユニットのメモリ650内の状態情報は、処理ユニット間で渡されるメタデータ、一時変数、データパケットの内容、1つまたは複数の共有マップの内容のうちの少なくとも1つを含むことができる。
【0269】
複数の処理ユニットは共に、ネットワークインターフェースデバイス600において受信されるデータパケットに対して実行される機能を提供することができる。コンパイラは、複数の処理ユニットのうちの少なくともいくつかを、各入来データパケットに関してそれらのそれぞれの少なくとも1つの所定の動作を実行するように構成することによって、入来データパケットに関して機能を実行するようにハードウェアモジュール610を構成するための命令を出力する。これは、処理ユニット640a、640b、640c、640dのうちの少なくともいくつかをともに連結(すなわち、接続)することによって達成され得、その結果、接続された処理ユニットの各々は、各入来データパケットに対してそれぞれの少なくとも1つの動作を実行する。各処理ユニットは、機能を実行するために、特定の順序でそれぞれの少なくとも1つの動作を実行する。順序は、2つ以上の処理ユニットが互いに並列に、すなわち同時に実行するようなものであってもよい。例えば、1つの処理ユニットは、第2の処理ユニットも同じデータパケット内の異なる位置から読み出す期間(ハードウェアモジュール610の周期信号(例えば、クロック信号)によって定義される)中にデータパケットから読み出すことができる。
【0270】
いくつかの実施形態では、データパケットは、処理ユニットによって表される各ステージを順に通過する。この場合、各処理ユニットは、その処理を実行するためにデータパケットを次の処理ユニットに渡す前にその処理を完了する。
【0271】
図6に示す例では、処理ユニット640a、640b、および640dは、コンパイル時に互いに接続され、結果、それらの各々は、受信データパケットに関して機能、例えばフィルタリングを実行するように、それぞれの少なくとも1つの動作を実行する。処理ユニット640a、640b、640dは、データパケットを処理するためのパイプラインを形成する。データパケットは、各々が等しい期間を有する複数のステージにおいて、このパイプラインに沿って移動することができる。期間は、周期信号またはビートに従って定義することができる。期間は、クロック信号によって定義されてもよい。クロックのいくつかの期間は、パイプラインの各ステージの1つの期間を定義することができる。データパケットは、繰り返し期間の各発生の終わりにパイプライン内の1つのステージに沿って移動する。期間は、固定間隔であってもよい。あるいは、パイプライン内のステージの各期間は、可変量の時間を要してもよい。パイプラインの次のステージを示す信号は、前の処理ステージが動作を終了したときに生成されてもよく、これは可変の時間量を要し得る。ストールが、何らかの所定の時間量にわたって信号を遅延させることによって、パイプラインの任意のステージにおいて導入されてもよい。
【0272】
処理ユニット640a、640b、640dの各々は、それらのそれぞれの少なくとも1つの動作の一部として共有メモリ660にアクセスするように構成されてもよい。処理ユニット640a、640b、640dの各々は、それらのそれぞれの少なくとも1つの動作の一部としてメタデータを互いに渡すように構成されてもよい。処理ユニット640
a、640b、640dの各々は、それらのそれぞれの少なくとも1つの動作の一部として、ネットワークから受信されるデータパケットにアクセスするように構成され得る。
【0273】
この例では、処理ユニット640cは、機能を提供するように受信データパケットの処理を実行するために使用されず、パイプラインから省略される。
【0274】
ネットワークMAC層630において受信されるデータパケットは、処理のためにハードウェアモジュール610に渡され得る。
図6には示されていないが、ハードウェアモジュール610によって実行される処理は、ハードウェアモジュール610によって提供される機能以外のデータパケットに関する追加の機能を提供するより大きな処理パイプラインの一部であってもよい。これは、
図14に関して示されており、下記により詳細に説明される。
【0275】
第1の処理ユニット640aはデータパケットに対して第1の少なくとも1つの動作を実施するよう構成される。この第1の少なくとも1つの動作は、データパケットからの読み出し、メモリ660内の共有状態への読み出しおよび書き込み、ならびに/またはアクションを決定するためにテーブル内のルックアップを実行することのうちの少なくとも1つを含むことができる。次いで、第1の処理ユニット640aは、その少なくとも1つの動作から結果を生成するように構成される。結果は、メタデータの形態であってもよい。結果は、データパケットに対する修正を含むことができる。結果は、メモリ660内の共有状態に対する修正を含むことができる。第2の処理ユニット640bは、第1の処理ユニット640aによって実行された動作の結果に応じて、第1のデータパケットに対して少なくとも1つの動作を実行するように構成されている。第2の処理ユニット640bは、その少なくとも1つの動作から結果を生成し、第1のデータパケットに対してその少なくとも1つの動作を行うように構成された第3の処理ユニット640dにその結果を渡す。第1の処理ユニット640a、第2の処理ユニット640b、および第3の処理ユニット640dは共に、データパケットに関する機能を提供するように構成されている。次いで、データパケットは、ホストインターフェース620に渡され得、ホストインターフェースからホストシステムに渡される。
【0276】
したがって、接続された処理ユニットは、ネットワークインターフェースデバイスにおいて受信されるデータパケットを処理するためのパイプラインを形成することが分かる。このパイプラインは、eBPFプログラムの処理を提供することができる。パイプラインは、複数のeBPFプログラムの処理を提供することができる。パイプラインは、順に実行される複数のモジュールの処理を提供することができる。
【0277】
ハードウェアモジュール610内の処理ユニットの相互接続は、ハードウェアモジュール610の予め合成された相互接続ファブリックのルーティング機能をプログラムすることによって実行されてもよい。この相互接続ファブリックは、ハードウェアモジュール610の様々な処理ユニット間の接続を提供する。相互接続ファブリックは、ファブリックによってサポートされるトポロジに従ってプログラムされる。可能な例示的なトポロジを、
図15を参照して下記に説明する。
【0278】
ハードウェアモジュール610は、少なくとも1つのバスインターフェースをサポートする。少なくとも1つのバスインターフェースは、ハードウェアモジュール610においてデータパケットを受信する(例えば、ホストまたはネットワークから)。少なくとも1つのバスインターフェースは、ハードウェアモジュール610から(例えば、ホストまたはネットワークに)データパケットを出力する。少なくとも1つのバスインターフェースは、ハードウェアモジュール610において制御メッセージを受信する。制御メッセージは、ハードウェアモジュール610を構成するためのものであってもよい。
【0279】
図6に示す例は、
図5に示すFPGAアプリケーション515と比較してコンパイル時間が短縮されるという利点を有する。
図6のハードウェアモジュール610は、例えば、フィルタリング機能をコンパイルするために必要な時間が10秒未満であり得る。
図6に示す例は、
図4に示すCPUのアレイの例と比較して処理速度が向上するという利点を有する。
【0280】
アプリケーションは、汎用プログラム(または複数のプログラム)を予め合成されたデータパスにマッピングすることによって、そのようなハードウェアモジュール610における実行のためにコンパイルすることができる。コンパイラは、任意の数の処理ステージインスタンスをリンクすることによってデータパスを構築し、各インスタンスは、予め合成された処理ステージアトムのうちの1つから構築される。
【0281】
各アトムは回路から構築される。各回路は、RTL(レジスタ転送言語)または高レベル言語を使用して定義することができる。各回路は、コンパイラまたはツールチェーンを使用して合成される。アトムは、ハードロジックに合成されてもよく、そのため、ネットワークインターフェースデバイスのハードウェアモジュール内のハード(ASIC)リソースとして利用可能であってもよい。アトムは、ソフトロジックに合成されてもよい。ソフトロジック内のアトムには、物理デバイス上の合成ロジックの場所およびルート情報を割り当てて維持する制約を設けることができる。アトムは、アトムの挙動を指定する構成可能なパラメータを用いて設計することができる。各パラメータは、処理パイプラインのクロックサイクル中に処理ユニットによって実行されるべき少なくとも1つの動作を指定することができる変数、またはさらには動作のシーケンス(マイクロプログラム)であってもよい。アトムを実装するロジックは、同期的または非同期的にクロックされてもよい。
【0282】
アトムの処理パイプライン自体は、周期信号に従って動作するように構成されてもよい。この場合、各データパケットおよびメタデータは、信号の各発生に応答してパイプラインに沿って1つのステージを移動する。処理パイプラインは非同期的に動作することができる。この場合、パイプライン内のより高いレベルの背圧は、上流ステージからのデータがそれに提示されたときにのみ、各下流ステージに処理を開始させる。
【0283】
複数のそのようなアトムによって実行される機能をコンパイルするとき、コンピュータコード命令のシーケンスが複数の動作に分離され、各動作は単一のアトムにマッピングされる。各動作は、コンピュータコード命令内の逆アセンブルされた命令の単一の行を表すことができる。各動作は、アトムの1つによって実行されるように、アトムの1つに割り当てられる。コンピュータコード命令内の表現ごとに1つのアトムが存在し得る。各アトムは、1つのタイプの動作に関連付けられ、その関連付けられた動作のタイプに基づいてコンピュータコード命令内の少なくとも1つの動作を実行するように選択される。例えば、アトムは、データパケットからのロード動作を実行するように事前構成され得る。したがって、そのようなアトムは、コンピュータコード内のデータパケットからのロード動作を表す命令を実行するために割り当てられる。
【0284】
コンピュータコード命令内で、1行につき1つのアトムを選択することができる。したがって、そのようなアトムを含むハードウェアモジュール内で機能を実装する場合、そのようなアトムが100個存在し得、各々がそのデータパケットに関して機能を実行するようにそれぞれの動作を実行する。
【0285】
各アトムは、その関連する動作(複数可)のタイプを決定する処理ステージテンプレートのセットのうちの1つに従って構築することができる。コンパイルプロセスは、その関
連するタイプに基づいて特定の少なくとも1つの動作を実行するように各アトムを制御するための命令を生成するように構成される。例えば、アトムがパケットアクセス動作を実行するように事前構成されている場合、コンパイルプロセスは、そのアトムに、パケットのヘッダから特定の情報(例えば、パケットのソースID)をロードするための動作を割り当てることができる。コンパイルプロセスは、命令をハードウェアモジュールに送信するように構成され、アトムは、コンパイルプロセスによってアトムに割り当てられた動作を実行するように構成される。
【0286】
アトムの挙動を指定する処理ステージテンプレートは、論理ステージテンプレート(例えば、レジスタ、スクラッチパッドメモリ、およびスタック、ならびに分岐に対する動作を提供する)、パケットアクセス状態テンプレート(例えば、パケットデータロードおよび/またはパケットデータストアを提供する)、およびマップアクセスステージテンプレート(例えば、マップ検索アルゴリズム、マップテーブルサイズ)である。
【0287】
パケットアクセスステージは、データパケットからのバイトシーケンスの読み出し、データパケット内の1つのバイトシーケンスの異なるバイトシーケンスによる置換、データパケットへのバイトの挿入、および、データパケット内のバイトの削除のうちの少なくとも1つを含むことができる。
【0288】
マップアクセスステージを使用して、ダイレクトインデックス配列および連想配列を含む異なるタイプのマップ(例えばルックアップテーブル)にアクセスすることができる。マップアクセスステージは、あるロケーションからの値の読み出し、あるロケーションへの値の書き込み、マップ内のあるロケーションにおける値の異なる値による置換のうちの少なくとも1つを含むことができる。マップアクセスステージは、値がマップ内のあるロケーションから読み出され、異なる値と比較される比較動作を含むことができる。そのロケーションから読み出された値が異なる値よりも小さい場合、第1のアクション(例えば、何もしない、そのロケーションにおける値を異なる値と交換する、または値をともに加算する)が実行され得る。そうでなければ、第2のアクション(例えば、何もしない、値を交換または加算する)が実行され得る。いずれの場合も、そのロケーションから読み出された値は、次の処理ステージに提供され得る。
【0289】
各マップアクセスステージは、ステートフル処理ユニットにおいて実施され得る。マップアクセスステージの処理を実行するように構成されたアトムに含まれ得る回路1700の一例を示す
図17を参照する。回路1700は、ルックアップテーブルへの入力として使用される入力値のハッシュを実行するように構成されたハッシュ機能1710を含むことができる。回路1700は、アトムの動作に関連付けられる状態を記憶するように構成されたメモリ1720を含む。回路1700は、演算を実行するように構成された算術論理演算ユニット1730を含む。
【0290】
論理ステージは、先行するステージによって提供される値に対して計算を実行することができる。論理ステージを実施するように構成された処理ユニットは、ステートレス処理ユニットであってもよい。各ステートレス処理ユニットは、単純な演算を行うことができる。各処理ユニットは、例えば8ビット演算を行ってもよい。
【0291】
各論理ステージはステートレス処理ユニットに実装されてもよい。論理ステージの処理を実行するように構成されたアトムに含まれ得る回路1800の一例を示す
図18を参照する。回路1800は、算術論理演算ユニット(ALU)およびマルチプレクサのアレイを備える。ALUおよびマルチプレクサは層に配列され、ALUによる処理の1つの層の出力は、マルチプレクサによって使用されてALUの次の層に入力を提供する。
【0292】
ハードウェアモジュールに実装されたステージのパイプラインは、第1のパケットアクセスステージ(pkt0)、それに続く第1の論理ステージ(logic0)、それに続く第1のマップアクセスステージ(map0)、それに続く第2の論理ステージ(logic1)、それに続く第2のパケットアクセスステージ(pkt1)などを含むことができる。したがって、これは次の形態、pkt0-> logic0-> map0-> logic1-> pkt1、をとることができる。
【0293】
いくつかの例では、ステージpkt0は、パケットから必要な情報を抽出し、ステージpkt0は、この情報をステージlogic0に渡す。ステージlogic0は、パケットが有効なIPパケットであるか否かを決定する。場合によっては、logic0はマップ要求を形成し、マップ要求をmap0に送信し、map0はマップ動作を実行する。ステージmap0は、ルックアップテーブルの更新を実行することができる。次に、ステージlogic1は、マップ動作からの結果を収集し、結果としてパケットをドロップするか否かを決定する。
【0294】
場合によっては、このパケットに対してマップ動作を実行すべきでない場合をカバーするために、マップ要求が無効にされる。マップ動作が行われない場合、logic0は、パケットが有効なIPパケットであるか否かに応じて、パケットをドロップすべきか否かをlogic1に示す。いくつかの例では、ルックアップテーブルは256個のエントリを含み、各エントリは8ビット値である。
【0295】
説明されるこの例は、5つのステージのみを含む。しかしながら、上述したように、さらに多くのものを使用することができる。さらに、動作はすべて順に実行される必要はなく、同じデータパケットに関するいくつかの動作は、異なる処理ユニットによって同時に実行されてもよい。
【0296】
図6に示すハードウェアモジュール610は、データパケットに関して機能を実行するためのアトムの単一のパイプラインを示す。しかしながら、ハードウェアモジュール610は、データパケットを処理するための複数のパイプラインを備えてもよい。複数のパイプラインの各々は、データパケットに関して異なる機能を実行することができる。ハードウェアモジュール610は、ハードウェアモジュール610の第1のセットアトムを相互接続して第1のデータ処理パイプラインを形成するように構成可能である。ハードウェアモジュール610はまた、ハードウェアモジュール610のアトムの第2のセットを相互接続して第2のデータ処理パイプラインを形成するように構成可能である。
【0297】
複数の処理ユニットを備えるハードウェアモジュールにおいて実施される機能をコンパイルするために、コンピュータコードのシーケンスから始まる一連のステップが実行されてもよい。ホストデバイスまたはネットワークインターフェースデバイス上のプロセッサ上で実行することができるコンパイラは、コンピュータコードの逆アセンブルされたシーケンスにアクセスすることができる。
【0298】
第一に、コンパイラは、コンピュータコード命令のシーケンスを別個のステージに分割するように構成される。各ステージは、上述の処理ステージテンプレートのうちの1つによる動作を含むことができる。例えば、1つのステージは、データパケットからの読み出しを提供することができる。1つのステージは、マップデータの更新を提供することができる。別のステージは、パスドロップ決定を行うことができる。コンパイラは、コードによって表現される複数の演算の各々を、複数のステージのうちの1つに割り当てる。
【0299】
第二に、コンパイラは、コードから決定される処理ステージの各々を、異なる処理ユニットによって実行されるように割り当てるように構成される。これは、処理ステージのそ
れぞれの少なくとも1つの動作の各々が異なる処理ステージによって実行されることを意味する。次いで、コンパイラの出力を使用して、処理ユニットに、機能を実行するように特定の順序で各ステージの動作を実行させることができる。
【0300】
コンパイラの出力は、ハードウェアモジュールの処理ユニットに各処理ステージに関連付けられる動作を実行させるために使用される生成された命令を含む。
【0301】
コンパイラの出力はまた、ハードウェアモジュール610を構成するための制御メッセージに応答するハードウェアモジュール内の論理を生成するために使用されてもよい。そのような制御メッセージは、
図14に関して下記により詳細に説明される。
【0302】
ネットワークインターフェースデバイス600上で実行されるように機能をコンパイルするためのコンパイルプロセスは、機能を提供するためのプロセスがホストデバイスのカーネルにおいて安全に実行されると決定したことに応答して実行することができる。プログラムの安全性の決定は、
図3に関して上述したように、適切な検証器によって実行することができる。プロセスがカーネルでの実行に対して安全であると決定されると、プロセスはネットワークインターフェースデバイスでの実行のためにコンパイルすることができる。
【0303】
データパケットに関して機能を実行するためにそれぞれの少なくとも1つの動作を実行する複数の処理ユニットのうちの少なくともいくつかの表現を示す
図15を参照する。そのような表現は、コンパイラによって生成され、機能を実行するようにハードウェアモジュールを構成するために使用され得る。表現は、動作が実行され得る順序、および処理ユニットのいくつかがそれらの動作をどのように並列に実行するかを示す。
【0304】
表現1500は、行および列を有する表の形態である。表のエントリのいくつかは、それぞれの動作を実行するように構成されたアトム、例えばアトム1510aを示す。処理ユニットが属する行は、特定のデータパケットに対してその処理ユニットによって実行される動作のタイミングを示す。各行は、クロック信号の1つまたは複数のサイクルによって表される単一の期間に対応することができる。同じ行に属する処理ユニットは、それらの動作を並列に実行する。
【0305】
論理ステージへの入力は行0に提供され、計算フローは後の行に進む。デフォルトでは、アトムは、それ自体と同じ列にあるが前の行にあるアトムによる処理からの結果を受信する。例えば、アトム1510bは、アトム1510aによる処理の結果を受信し、これらの結果に応じて自身の処理を実行する。
【0306】
ローカルルーティングリソースを使用する場合、アトムはまた、列番号が2以下だけ異なる前の行のアトムからの出力にアクセスすることもできる。例えば、アトム1510dは、アトム1510cによって実行された処理からの結果を受信することができる。
【0307】
グローバルルーティングリソースを使用する場合、アトムは、前の2行かつ任意の列内のアトムからの出力にアクセスすることもできる。これは、グローバルルーティングリソースを使用して実行され得る。例えば、アトム1510fは、アトム1510eによって実行された処理からの結果を受信することができる。
【0308】
アトム間のルーティングに関するこれらの制約は一例として与えられ、他の制約が適用されてもよい。より制限の強い制約を適用することにより、アトム間の情報のルーティングをより容易にすることができる。より制限の弱い制約を適用することにより、スケジューリングをより容易にすることができる。所与のタイプ(例えば、マップ、ロジック、ま
たはパケットアクセス)のアトムの数が使い尽くされた場合、またはアトム間のルーティングを行うことができない場合、ハードウェアモジュールへの機能のコンパイルは失敗する。
【0309】
特定の制約は、ハードウェアモジュールによってサポートされる相互接続ファブリックによってサポートされるトポロジによって決定される。相互接続ファブリックは、ハードウェアモジュールのアトムに特定の順序でそれらの動作を実行させ、制約内で互いにデータを提供させるようにプログラムされる。
図15は、相互接続ファブリックをそのようにプログラムすることができる方法の特定の一例を示す。
【0310】
(
図5に示すように)FPGAアプリケーション515をFPGAに合成する間に、配置配線アルゴリズムが使用される。しかしながら、この場合、解空間は制約され、そのため、アルゴリズムは短い有界実行時間を有する。
【0311】
処理速度または効率とコンパイル時間との間にはトレードオフが存在する。本出願の実施形態によれば、受信されるデータパケットに関する機能を提供するために、最初に、少なくとも1つの処理ユニット(
図6に関して上述したようにCPUまたはアトムであり得る)上でプログラムをコンパイルし実行することが望ましい場合がある。次いで、少なくとも1つの処理ユニットは、第1の期間中に受信データパケットに関して機能を作動させ、実行することができる。ネットワークインターフェースデバイスの動作中、第2の少なくとも1つの処理ユニット(
図6に関して上述したようにFPGAアプリケーションまたはテンプレートタイプの処理ユニットであってもよい)は、データパケットに関して機能を実行するように構成することができる。次いで、第2の少なくとも1つの処理ユニットがその後にネットワークインターフェースデバイスにおいて受信されるデータパケットに対して機能を実行するように、機能を第1の少なくとも1つの処理ユニットから第2の少なくとも1つの処理ユニットに移行することができる。したがって、第1の少なくとも1つの処理ユニットはより速くコンパイルすることができ、機能が第2の少なくとも1つの処理ユニットのためにコンパイルされている間にデータパケットに関して機能を実行するために使用することができるため、第2の少なくとも1つの処理ユニットのより遅いコンパイル時間は、第2の少なくとも1つの処理ユニットのために機能がコンパイルされる前にネットワークインターフェースデバイスがデータパケットに関して機能を実行することを妨げない。第2の少なくとも1つの処理ユニットは典型的には、より速い処理時間を有するため、コンパイルされるときに第2の少なくとも1つの処理ユニットに移行することにより、ネットワークインターフェースデバイスにおいて受信されるデータパケットのより速い処理が可能になる。
【0312】
本出願の実施形態によれば、コンパイルプロセスは、データ処理システムの少なくとも1つのプロセッサ上で作動するように構成することができ、少なくとも1つのプロセッサは、第1の少なくとも1つの処理ユニットおよび第2の少なくとも1つの処理ユニットが適切なときにデータパケットに関して少なくとも1つの機能を実行するための命令を送信するように構成される。少なくとも1つのプロセッサは、ホストCPUを含んでもよい。少なくとも1つのプロセッサは、ネットワークインターフェースデバイス上の制御プロセッサを含んでもよい。少なくとも1つのプロセッサは、ホストシステム上の1つまたは複数のプロセッサと、ネットワークインターフェースデバイス上の1つまたは複数のプロセッサとの組み合わせを含むことができる。
【0313】
したがって、少なくとも1つのプロセッサは、ネットワークインターフェースデバイスの第1の少なくとも1つの処理ユニットによって実行されるように機能をコンパイルするための第1のコンパイルプロセスを実行するように構成される。少なくとも1つのプロセッサはまた、ネットワークインターフェースデバイスの第2の少なくとも1つの処理ユニ
ットによって実行されるように機能をコンパイルするための第2のコンパイルプロセスを実行するように構成される。第2のコンパイルプロセスの完了前に、少なくとも1つの処理ユニットは、ネットワークから受信されるデータパケットに関して機能を実行するように、第1の少なくとも1つの処理ユニットに命令する。その後、第2のコンパイルプロセスの完了後に、少なくとも1つの処理ユニットは、ネットワークから受信されるデータパケットに関する機能の実行を開始するように、第2の少なくとも1つの処理ユニットに命令する。
【0314】
これらのステップを実行することにより、ネットワークインターフェースデバイスは、第2のコンパイルプロセスが完了するのを待っている間に、第1の少なくとも1つの処理ユニット(コンパイル時間がより短いが、処理がより低速および/またはより低効率であり得る)を使用して機能を実行することができる。第2のコンパイルプロセスが完了すると、ネットワークインターフェースデバイスは、第1の少なくとも1つの処理ユニットに加えて、またはその代わりに、第2の少なくとも1つの処理ユニット(コンパイル時間がより長いが、処理がより高速および/またはより高効率であり得る)を使用して機能を実行することができる。
【0315】
本出願の実施形態による例示的なネットワークインターフェースデバイス700を示す
図7を参照する。前の図に示されたものと同様の参照要素は、同様の参照符号で示されている。
【0316】
ネットワークインターフェースデバイスは、第1の少なくとも1つの処理ユニット710を備える。第1の少なくとも1つの処理ユニット710は、複数の処理ユニットを備える、
図6に示すハードウェアモジュール610を含むことができる。第1の少なくとも1つの処理ユニット710は、
図4に示すように、1つまたは複数のCPUを含むことができる。
【0317】
機能は、第1の期間中に、ネットワークから受信されるデータパケットに関して第1の少なくとも1つの処理ユニット710によって機能が実行されるように、第1の少なくとも1つの処理ユニット710上で実行されるようにコンパイルされる。第1の少なくとも1つの処理ユニット710は、第2の少なくとも1つの処理ユニットの第2のコンパイルプロセスの完了前に、ネットワークから受信されるデータパケットに関して機能を実行するように、第1の少なくとも1つのプロセッサによって命令される。
【0318】
ネットワークインターフェースデバイスは、第2の少なくとも1つの処理ユニット720を備える。第2の少なくとも1つの処理ユニット720は、(
図5に示すような)FPGAアプリケーションを有するFPGAを備えることができ、または複数の処理ユニットを備える
図6に示すハードウェアモジュール610を備えることができる。
【0319】
第1の期間中、第2のコンパイルプロセスは、第2の少なくとも1つの処理ユニット上で実行するための機能をコンパイルするために実行される。すなわち、ネットワークインターフェースデバイスは、FPGAアプリケーション515をオンザフライでコンパイルするように構成される。
【0320】
第1の期間後に(すなわち、第2のコンパイルプロセスの完了後に)、第2の少なくとも1つの処理ユニット720は、ネットワークから受信されるデータパケットに関する機能の実行を開始するように構成されている。
【0321】
第1の期間の後、第1の少なくとも1つの処理ユニット710は、ネットワークから受信されるデータパケットに関する機能の実行を停止することができる。いくつかの実施形
態では、第1の少なくとも1つの処理ユニット710は、部分的に、データパケットに関する機能の実行を停止することができる。例えば、第1の少なくとも1つの処理ユニットが複数のCPUを含む場合、第1の期間の後、1つまたは複数のCPUは、ネットワークから受信されるデータパケットに関する処理の実行を停止することができ、複数のCPUの残りのCPUは処理を実行し続ける。
【0322】
第1の少なくとも1つの処理ユニット710は、第1のデータフローのデータパケットに関して機能を実行するよう構成することができる。第2のコンパイルプロセスが完了すると、第2の少なくとも1つの処理ユニット720は、第1のデータフローのデータパケットに関する機能の実行を開始することができる。第2のコンパイルプロセスが完了すると、第1の少なくとも1つの処理ユニットは、第1のデータフローのデータパケットに関する機能の実行を停止することができる。
【0323】
第1の少なくとも1つの処理ユニットおよび第2の少なくとも1つの処理ユニットについて、異なる組み合わせが可能である。例えば、いくつかの実施形態では、第1の少なくとも1つの処理ユニット710は、(
図4に示すように)複数のCPUを含み、一方、第2の少なくとも1つの処理ユニット720は、(
図6に示すように)複数の処理ユニットを有するハードウェアモジュールを備える。いくつかの実施形態では、第1の少なくとも1つの処理ユニット710は、(
図4に示すように)複数のCPUを含み、一方、第2の少なくとも1つの処理ユニット720は、(
図5に示すように)FPGAを含む。いくつかの実施形態では、第1の少なくとも1つの処理ユニット710は、(
図6に示すように)複数の処理ユニットを有するハードウェアモジュールを備え、一方、第2の少なくとも1つの処理ユニット720は、(
図5に示すように)FPGAを含む。
【0324】
接続された複数の処理ユニット640a、640b、640dがデータパケットに対してそのそれぞれの少なくとも1つの動作をどのように実行することができるかを示す
図11を参照する。処理ユニットの各々は、受信されるデータパケットに対してそのそれぞれの少なくとも1つの動作を実行するように構成される。
【0325】
各処理ユニットの少なくとも1つの動作は、機能(例えば、eBPFプログラムの機能)内の論理ステージを表すことができる。各処理ユニットの少なくとも1つの動作は、処理ユニットによって実行される命令によって表現可能とすることができる。命令は、アトムの挙動を決定することができる。
【0326】
図11は、パケット(P
0)が各処理ユニットによって実施される処理ステージに沿ってどのように進行するかを示している。
【0327】
各処理ユニットは、コンパイラによって指定される特定の順序でパケットに対して処理を実行する。順序は、処理ユニットのいくつかがそれらの処理を並列に実行するように構成されるようなものであってもよい。この処理は、メモリに保持されるパケットの少なくとも一部にアクセスすることを含むことができる。付加的にまたは代替的に、この処理は、パケットに対して実行されるべきアクションを決定するために、ルックアップテーブルへのルックアップを実行することを含んでもよい。付加的にまたは代替的に、この処理は、状態1110を修正することを含むことができる。
【0328】
処理ユニットは、メタデータM0,M1,M2,M3を互いに交換する。第1の処理ユニット640aは、それぞれの少なくとも1つの所定の動作を実行し、それに応じてメタデータM1を生成するように構成されている。第1の処理ユニット640aは、メタデータM1を第2の処理ユニット640bに渡すように構成されている。
【0329】
処理ユニットの少なくともいくつかは、データパケットの内容、それ自体の記憶されている状態、グローバル共有状態、およびデータパケットに関連付けられたメタデータ(例えば、M0、M1、M2、M3)のうちの少なくとも1つに応じて、それぞれの少なくとも1つの動作を実行する。処理ユニットのいくつかはステートレスであり得る。
【0330】
処理ユニットの各々は、少なくとも1クロックサイクルの間にデータパケット(P0)のためのその関連するタイプの動作を実行することができる。いくつかの実施形態では、処理ユニットの各々は、単一のクロックサイクル中にその関連するタイプの動作を実行することができる。処理ユニットの各々は、それらの動作を実行するために個別にクロックされてもよい。このクロッキングは、処理ユニットの処理パイプラインのクロッキングに追加され得る。
【0331】
第2の処理ユニット640bの動作をより詳細に調べると、第2の処理ユニット640bは、第1のデータパケットに対して第1の少なくとも1つの所定の動作を行うように構成された第1の処理ユニット640aに接続されるように構成されている。第2の処理ユニット640bは、第1の少なくとも1つの所定動作の結果を第1のさらなる処理ユニットから受信するように構成されている。第2の処理ユニット640bは、第1の少なくとも1つの所定の動作の結果に応じて第2の少なくとも1つの所定の動作を実行するように構成されている。第2の処理ユニット640bは、第1のデータパケットに対して第3の少なくとも1つの所定の動作を行うように構成された第3の処理ユニット640dに接続されるように構成されている。第2の処理ユニット640bは、第2の少なくとも1つの所定の動作の結果を、第3の少なくとも1つの所定の動作における処理のために第3の処理ユニット640dに送信するように構成されている。
【0332】
処理ユニットは、同様に、複数のデータパケットの各々に関して機能を提供するような順序において動作することができる。
【0333】
本出願の実施形態は、機能が可能にする場合、複数のパケットが同時にパイプライン化され得るようなものである。
【0334】
データパケットのパイプライン化を示す
図12を参照する。図示されるように、異なるパケットは、異なる処理ユニットによって同時に処理され得る。第1の処理ユニット640aは、第3のデータパケット(P
2)に対して第1の時点(t
0)においてそれぞれの少なくとも1つの動作を実行している。第2の処理ユニット640bは、第2のデータパケット(P
1)に対して第1の時点(t
0)においてそれぞれの少なくとも1つの動作を実行している。第3の処理ユニット640dは、第1のデータパケット(P
0)に対して第1の時点(t
0)においてそれぞれの少なくとも1つの動作を実行している。
【0335】
各処理ユニットにより少なくともそれぞれの動作が実行された後、各パケットは、シーケンス内で1つのステージに沿って移動する。例えば、後続の第2の時点(t1)において、第1の処理ユニット640aは、第4のデータパケット(P3)に対する第1の時点(t0)におけるそのそれぞれの少なくとも1つの動作を実行している。第2の処理ユニット640bは、第3のデータパケット(P2)に対して第1の時点(t0)においてそのそれぞれの少なくとも1つの動作を実行している。第3の処理ユニット640dは、第1のデータパケット(P1)に対して第1の時点(t0)においてそのそれぞれの少なくとも1つの動作を実行している。
【0336】
いくつかの実施形態では、所与のステージに複数のパケットが存在し得ることを理解されたい。
【0337】
いくつかの実施形態では、パケットは、必ずしもロックステップではなく、1つのステージから次のステージに移動することができる。
【0338】
パイプライン危険性がない限り、固定クロックで動作するそのようなパイプラインは一定の帯域幅を有することができる。これにより、システム内のジッタを低減することができる。
【0339】
命令を実行するときの危険(共有状態にアクセスするときの競合など)を回避するために、各処理ユニットは、必要に応じて動作なし(すなわち、処理ユニットはストールする)命令を実行するように構成され得る。
【0340】
いくつかの実施形態では、動作(単純な算術、インクリメント、定数値の加算/減算、シフト、データパケットまたはメタデータからの値の加算/減算など)は、処理ユニットによって実行される1クロックサイクルを必要とする。これは、ある処理ユニットが必要とする共有状態の値が別の処理ユニットによってまだ更新されていないことを意味し得る。したがって、共有状態1110の古い値が、それらを必要とする処理ユニットによって読み出され得る。したがって、共有状態に値を読み書きするときに危険が発生する可能性がある。他方、中間値に対する動作が、危険が発生することなくメタデータとして渡され得る。
【0341】
回避され得る共有状態1110への読み出しおよび書き込みの際の危険の例は、インクリメント動作のコンテキストにおいて与えられ得る。このようなインクリメント動作は、共有状態1110においてパケットカウンタをインクリメントする動作であり得る。インクリメント動作の一実施態様では、パイプラインの第1のタイムスロット中に、第2の処理ユニット640bが、共有状態1110からカウンタの値を読み出し、この読み出し動作の出力(例えば、メタデータM2として)を第3の処理ユニット640dに提供するように構成されている。第3の処理ユニット640dは、第2の処理ユニット640bからカウンタの値を受け取るように構成されている。第2のタイムスロットの間、第3の処理ユニット640dはこの値をインクリメントし、インクリメントされた新たな値を共有状態1110に書き込む。
【0342】
このようなインクリメント動作を実行するときに問題が発生する可能性があり、すなわち、第2のタイムスロット中に、第2の処理ユニット640bが共有状態1110に記憶されたカウンタにアクセスしようとする場合、第2の処理ユニット640bは、共有状態1110のカウンタ値が第3の処理ユニット640dによって更新される前にカウンタの以前の値を読み出す可能性がある。
【0343】
したがって、この問題に対処するために、第2の処理ユニット640bは、(動作なし命令またはパイプラインバブルの第2の処理ユニット640bによる実行を通じて)第2のタイムスロット中にストールされ得る。ストールは、次の命令の実行の遅延であると理解することができる。この遅延は、次の命令の代わりに「動作なし」命令の実行によって実施することができる。次に、第2の処理ユニット640bは、後続の第3のタイムスロットの間に共有状態1110からカウンタ値を読み出す。第3のタイムスロットの間、共有状態1110のカウンタは更新されており、そのため、第2の処理ユニット640bが更新された値を読み出すことが保証される。
【0344】
いくつかの実施形態では、それぞれのアトムは、単一のパイプラインタイムスロット中に状態から読み出し、状態を更新し、更新された状態を書き込むように構成される。この場合、上述した処理ユニットのストールを用いなくてもよい。しかしながら、処理ユニットをストールすることによって、必要とされるメモリインターフェースのコストを低減す
ることができる。
【0345】
いくつかの実施形態では、危険を回避するために、パイプライン内の処理ユニットは、それら自体の動作を実行する前に、パイプライン内の他の処理ユニットがそれらの処理を終了するまで待機することができる。
【0346】
上述したように、コンパイラは、任意の数の処理ステージインスタンスをリンクすることによってデータパスを構築し、各インスタンスは、所定の数(与えられた例では3つ)の予め合成された処理ステージテンプレートのうちの1つから構築される。処理ステージテンプレートは、論理ステージテンプレート(例えば、レジスタ、スクラッチパッドメモリ、およびメタデータに対する演算を提供する)、パケットアクセス状態テンプレート(例えば、パケットデータロードおよび/またはパケットデータストアを提供する)、およびマップアクセスステージテンプレート(例えば、マップ検索アルゴリズム、マップテーブルサイズ)である。
【0347】
各処理ステージインスタンスは、単一の処理ユニットによって実装されてもよい。すなわち、各処理ステージは、処理ユニットによって実行されるそれぞれの少なくとも1つの動作を含む。
【0348】
図13は、受信されるデータパケットを処理するために処理ステージがパイプライン1300内でどのように互いに接続され得るかの一例を示す。
図13に示すように、第1のデータパケットはFIFO 1305において受信され記憶される。第1の論理ステージ1310において、1つまたは複数の呼び出し引数が受信される。呼び出し引数は、受信されるデータパケットに対して実行されるべき機能を識別するプログラムセレクタを含むことができる。呼び出し引数は、受信されるデータパケットのパケット長の指示を含むことができる。第1の論理ステージ1310は、呼び出し引数を処理し、第1のパケットアクセスステージ1315に出力を提供するように構成されている。
【0349】
第1のパケットアクセスステージ1315はネットワークタップ1320において第1のパケットからデータをロードする。第1のパケットアクセスステージ1315はまた、第1の論理ステージ1310の出力に応じて第1のパケットにデータを書き込むこともできる。第1のパケットアクセスステージ1315は、第1のデータパケットの先頭にデータを書き込むことができる。第1のパケットアクセスステージ1315は、データパケット内のデータを上書きすることができる。
【0350】
ロードされたデータならびに任意の他のメタデータおよび/または引数は、次に、第2の論理ステージ1325に提供され、第2の論理ステージは、第1のデータパケットに関して処理を実行し、出力引数を第1のマップアクセスステージ1330に提供する。第1のマップアクセスステージ1330は、第2の論理ステージ1325からの出力を使用してルックアップテーブルへのルックアップを実行し、第1のデータパケットに関して実行されるべきアクションを決定する。次に、出力は第3の論理ステージ1335に渡され、第3の論理ステージはこの出力を処理し、結果を第2のパケットアクセスステージ1340に渡す。
【0351】
第2のパケットアクセスステージ1340は、第3の論理ステージ1335の出力に応じて、第1のデータパケットからデータを読み出し、および/または第1のデータパケットにデータを書き込むことができる。次に、第2のパケットアクセスステージ1340の結果は、受信される入力に関して処理を実行するように構成された第4の論理ステージ1345に渡される。
【0352】
パイプラインは、複数のパケットアクセスステージ、論理ステージ、およびマップアクセスステージを含むことができる。最後の論理ステージ1350は、戻り引数を出力するように構成されている。戻り引数は、データパケットの開始を識別するポインタを備えることができる。戻り引数は、データパケットに関して実行されるべきアクションの指示を含むことができる。アクションの指示は、パケットがドロップされるべきか否かを示すことができる。アクションの指示は、パケットがホストシステムに転送されるべきか否かを示すことができる。ネットワークインターフェースデバイスは、パケットがドロップされるべきであるという指示に応答して、それぞれのデータパケットをドロップするように構成された少なくとも1つの処理ユニットを備えることができる。
【0353】
パイプライン1300は、1つまたは複数のバイパスFIFO 1355a、1355b、1355cをさらに含むことができる。バイパスFIFOは、マップアクセスステージおよび/またはパケットアクセスステージの周りの第1のデータパケットからのデータなどの処理データを渡すために使用され得る。いくつかの実施形態では、マップアクセスステージおよび/またはパケットアクセスステージは、そのそれぞれの少なくとも1つの動作を実行するために第1のデータパケットからのデータを必要としない。マップアクセスステージおよび/またはパケットアクセスステージは、入力引数に応じてそれらのそれぞれの少なくとも1つの動作を実行することができる。
【0354】
本出願の実施形態によるネットワークインターフェースデバイス600,700によって実行される方法800を示す
図8を参照する。
【0355】
S810において、ネットワークインターフェースデバイスの機能ハードウェアモジュールが機能を実施するように構成される。ハードウェアモジュールは、各々がデータパケットに関してある種の動作をハードウェアにおいて実行するように構成された複数の処理ユニットを備える。S810は、受信される各データパケットに関する機能を提供するように、特定の順序でそれぞれの所定のタイプの動作を実行するように複数の処理ユニットの少なくともいくつかを構成することを含む。ハードウェアモジュールをそのように構成することは、受信されるデータパケットが複数の処理ユニットのうちの少なくともいくつかの複数の動作の各々によって処理を受けるように、複数の処理ユニットのうちの少なくともいくつかを接続することを含む。接続は、処理ユニット間でデータパケットおよび関連するメタデータをルーティングするように、ハードウェアモジュールのルーティングハードウェアを構成することによって達成され得る。
【0356】
S820において、ネットワークインターフェースデバイスの第1のインターフェースにおいてネットワークから第1のデータパケットが受信される。
【0357】
S830において、第1のデータパケットが、S810のコンパイルプロセス中に接続された少なくともいくつかの処理ユニットの各々によって処理される。少なくともいくつかの処理ユニットの各々は、少なくとも1つのデータパケットに対して、それが実行するように事前構成された動作のタイプを実行する。したがって、機能は第1のデータパケットに対して実行される。
【0358】
S840において、処理された第1のデータパケットが、その宛先に向かって転送される。これは、データパケットをホストに送信することを含み得る。これは、ネットワークを介してデータパケットを送信することを含むことができる。
【0359】
本出願の実施形態によるネットワークインターフェースデバイス700において実行することができる方法900を示す
図9を参照する。
【0360】
S910において、ネットワークインターフェースデバイスの第1の少なくとも1つの処理ユニット(すなわち、第1の回路)が、ネットワークを介して受信されるデータパケットを受信して処理するように構成される。この処理は、データパケットに関して機能を実行することを含む。処理は、第1の期間中に実行される。
【0361】
S920において、第2の少なくとも1つの処理ユニット(すなわち、第2の回路)上で実行するために機能をコンパイルするように、第2のコンパイルプロセスが第1の期間中に実行される。
【0362】
S930において、第2のコンパイル処理が完了したか否かが決定され、完了していない場合、方法はS910およびS920に戻り、第1の少なくとも1つの処理ユニットは、ネットワークから受信されるデータパケットに関して処理を実行し続け、第2のコンパイルプロセスが継続する。
【0363】
S940において、第2のコンパイルが完了したという決定に応答して、第1の少なくとも1つの処理ユニットは、受信されるデータパケットに関する機能の実行を停止する。いくつかの実施形態では、第1の少なくとも1つの処理ユニットは、特定のデータフローに関してのみ機能を実行することを停止することができる。次いで、第2の少なくとも1つの処理ユニットが、代わりにそれらの特定のデータフローに関して機能を実行することができる(S950)。
【0364】
S950において、第2のコンパイルプロセスが完了すると、第2の少なくとも1つの処理ユニットは、ネットワークから受信されるデータパケットに関する機能の実行を開始するように構成される。
【0365】
本出願の実施形態による方法1600を示す
図16を参照する。方法1600は、ネットワークインターフェースデバイスまたはホストデバイスにおいて実行することができる。
【0366】
S1610において、第1の少なくとも1つの処理ユニットによって実行されるように機能をコンパイルするように、コンパイルプロセスが実行される。
【0367】
S1620において、第2の少なくとも1つの処理ユニットによって実行されるように機能をコンパイルするように、コンパイルプロセスが実行される。このプロセスは、第1の機能を提供するようにデータパケットを処理するための複数のステージのうちの1つのステージに関連付けられる少なくとも1つの動作を実行するために、第2の少なくとも1つの処理ユニットの複数の処理ユニットの各々を割り当てることを含む。複数の処理ユニットの各々は、あるタイプの処理を行うように構成され、割り当ては、処理ユニットがそれぞれの少なくとも1つの動作を行うのに適したタイプの処理を行うように構成されているという決定に応じて行われる。言い換えれば、処理ユニットは、それらのテンプレートに従って選択される。
【0368】
1630において、S1620におけるコンパイルプロセスの完了に先立って、第1の少なくとも1つの処理ユニットに機能を実行させるための命令が送信される。この命令は、S1620のコンパイルプロセスが開始する前に送信されてもよい。
【0369】
S1640において、S1620におけるコンパイルプロセスの完了後に、第2の回路にデータパケットに関する機能を実行させるための命令が第2の回路に送信される。この命令は、S1620において生成されたコンパイル済み命令を含むことができる。
【0370】
本出願の実施形態による機能は、ネットワークインターフェース内の処理スライスのプラガブル構成要素として提供されてもよい。スライス1425がネットワークインターフェースデバイス600でどのように使用され得るかの例を示す
図14を参照する。スライス1425は、処理パイプラインと呼ばれる場合がある。
【0371】
ネットワークインターフェースデバイス600は、スライス1425によって処理され、次いでネットワークを介して送信されることになるデータパケットをホストから受信して記憶するための送信キュー1405を含む。ネットワークインターフェースデバイス600は、スライス1425によって処理され、次いでホストに送達されることになる、ネットワーク1410から受信されるデータパケットを記憶するための受信キュー1410を含む。ネットワークインターフェースデバイス600は、スライス1425によって処理されており、ホストに送達するためのものである、ネットワークから受信されるデータパケットを記憶するための受信キュー1415を含む。ネットワークインターフェースデバイス600は、スライス1425によって処理されており、ネットワークに送達するためのものである、ホストから受信されるデータパケットを記憶するための送信キューを含む。
【0372】
ネットワークインターフェースデバイス600のスライス1425は、受信経路および送信経路上でデータパケットを処理するための複数の処理機能を備える。スライス1425は、受信経路および送信経路上でデータパケットのプロトコル処理を実行するように構成されたプロトコルスタックを備えることができる。いくつかの実施形態では、ネットワークインターフェースデバイス600内に複数のスライスが存在してもよい。複数のスライスのうちの少なくとも1つは、ネットワークから受信される受信データパケットを処理するように構成されてもよい。複数のスライスのうちの少なくとも1つは、ネットワークを介した送信のために送信データパケットを処理するように構成されてもよい。スライスは、少なくとも1つのFPGAおよび/または少なくとも1つのASICなどのハードウェア処理装置によって実装されてもよい。
【0373】
アクセラレータ構成要素1430a、1430b、1430c、1430dを、図示のようにスライス内の異なるステージに挿入することができる。アクセラレータ構成要素は各々、スライスをトラバースするデータパケットに関する機能を提供する。アクセラレータ構成要素は、オンザフライで、すなわちネットワークインターフェースデバイスの動作中に挿入または除去することができる。したがって、アクセラレータ構成要素は、プラガブル構成要素である。アクセラレータ構成要素は論理領域であり、スライス1425に割り当てられる。それらの各々は、スライスをトラバースするパケットが構成要素の内外にストリーミングされることを可能にするストリーミングパケットインターフェースをサポートする。
【0374】
例えば、1つのタイプのアクセラレータ構成要素は、受信または送信経路上のデータパケットの暗号化を提供するように構成され得る。別のタイプのアクセラレータ構成要素は、受信または送信経路上でデータパケットの解読を提供するように構成されてもよい。
【0375】
(
図6を参照して上述したように)複数の接続された処理ユニットによって実行される動作を実行することによって提供される上述した機能は、アクセラレータ構成要素によって提供することができる。同様に、(
図4を参照して上述したような)ネットワーク処理CPUのアレイおよび/または(
図5を参照して上述したような)FPGAアプリケーションによって提供される機能は、アクセラレータ構成要素によって提供されてもよい。
【0376】
説明したように、ネットワークインターフェースデバイスの動作中に、第1の少なくとも1つの処理ユニット(複数の接続された処理ユニットなど)によって実行される処理は
、第2の少なくとも1つの処理ユニットから移行されてもよい。この移行を実施するために、スライス1425の構成要素のうちの第1の少なくとも1つの処理ユニットによる処理のための構成要素は、第2の少なくとも1つの処理ユニットによる処理のための構成要素に置き換えることができる。
【0377】
ネットワークインターフェースデバイスは、スライス1425から構成要素を挿入および除去するように構成された制御プロセッサを備えることができる。上述した第1の期間中、第1の少なくとも1つの処理ユニットによる機能の実行からの構成要素がスライス1425内に存在し得る。制御プロセッサは、第1の期間の後に、第1の少なくとも1つの処理ユニットにより機能を提供するプラガブル構成要素をスライス1425から除去し、第2の少なくとも1つの処理ユニットにより機能を提供するプラガブル構成要素をスライス1425に挿入するように構成することができる。
【0378】
スライスからの構成要素の挿入および除去に加えて、またはその代わりに、制御プロセッサは、プログラムを構成要素にロードし、制御プレーンコマンドを発行して、構成要素へのフレームの流れを制御することができる。この場合、構成要素は、パイプラインに挿入されず、または、パイプラインから除去されずに動作させられ、または動作させられなくてもよい。
【0379】
いくつかの実施形態では、制御プレーンまたは構成情報は、別個の制御バスを必要とすることなく、データパスを介して搬送される。いくつかの実施形態では、データパス構成要素の構成を更新する要求は、ネットワークパケットと同じバスを介して搬送されるメッセージとして符号化される。したがって、データパスは、ネットワークパケットおよび制御パケットの2種類のパケットを搬送することができる。
【0380】
制御パケットは、制御プロセッサによって形成され、スライス1425を使用してデータパケットを送信または受信するために使用されるのと同じメカニズムを使用してスライス1425に注入される。この同じメカニズムは、送信キューまたは受信キューであってもよい。制御パケットは、任意の適切な方法でネットワークパケットと区別することができる。いくつかの実施形態では、異なるタイプのパケットは、メタデータワード内の1つまたは複数のビットによって区別されてもよい。
【0381】
いくつかの実施形態では、制御パケットは、制御パケットがスライス1425を通る経路を決定するメタデータワード内のルーティングフィールドを含む。制御パケットは、制御コマンドのシーケンスを搬送することができる。各制御コマンドは、スライス1425の1つまたは複数の構成要素を対象とすることができる。それぞれのデータパス構成要素は、構成要素IDフィールドによって識別される。各制御コマンドは、それぞれの識別された構成要素に対する要求を符号化する。要求は、その構成要素の構成に変更を加えることであってもよい。要求は、構成要素が作動されるか否か、すなわち、構成要素がスライスをトラバースするデータパケットに関してその機能を実行するか否かを制御することができる。
【0382】
したがって、いくつかの実施形態では、ネットワークインターフェースデバイス600の制御プロセッサは、スライスの構成要素のうちの1つに、ネットワークインターフェースデバイスにおいて受信されるデータパケットに関する機能の実行を開始させるためのメッセージを送信するように構成される。このメッセージは、プラガブル構成要素を通じて送信され、機能を実行するための構成要素へのフレームのアトミックスイッチオーバーを引き起こす制御プレーンメッセージである。次いで、この構成要素は、スイッチアウトされるまでスライスをトラバースするすべての受信データパケットに対して実行する。制御プロセッサは、スライスの構成要素のうちの別の構成要素に、この構成要素が、ネットワ
ークインターフェースデバイス600において受信されるデータパケットに関する機能の実行を停止するようにさせるためのメッセージを送信するように構成される。
【0383】
構成要素をデータスライス1425に出入りするように切り替えるために、ソケットは、イングレスおよびエグレスデータパスの様々な点に存在することができる。制御プロセッサは、スライス1425に出入りする追加のロジックを精査することができる。この追加のロジックは、構成要素間に配置されるFIFOの形態をとることができる。
【0384】
制御プロセッサは、スライス1425を通じてスライス1425の構成された構成要素に制御プレーンメッセージを送信することができる。構成は、スライス1425の構成要素によって実行される機能を決定することができる。例えば、スライス1425を介して送信される制御メッセージは、ハードウェアモジュールが、データパケットに関して機能を実行するように構成されるようにすることができる。そのような制御メッセージは、ハードウェアモジュールのアトムが、特定の機能を提供するようにハードウェアモジュールのパイプラインに相互接続されるようにすることができる。そのような制御メッセージは、ハードウェアモジュールの個々のアトムが、個々に選択されたアトムによって実行される動作を選択するように構成されるようにすることができる。各アトムはあるタイプの動作を実行するように事前構成されているため、各アトムの動作の選択は、各アトムが実行するように事前構成されている動作のタイプに応じて行われる。
【0385】
次に、いくつかのさらなる実施形態を、
図19~
図21を参照して説明する。本実施形態では、FPGAにおいてパケット処理プログラムまたはフィードフォワードパイプラインが作動される。FPGAのサブユニットにパケット処理プログラムまたはフィードフォワードパイプラインを実装させる方法について説明する。パケット処理プログラムまたはフィードフォワードパイプラインは、eBPFプログラムもしくはP4プログラムまたは任意の他の適切なプログラムであってもよい。
【0386】
このFPGAは、ネットワークインターフェースデバイスに設けられてもよい。いくつかの実施形態では、パケット処理プログラムは、ネットワークインターフェースデバイスがそのホストに対してインストールされた後にのみ展開または作動される。
【0387】
パケット処理プログラムまたはフィードフォワードパイプラインは、ループのない論理フローを実装することができる。
【0388】
いくつかの実施形態では、プログラムは、ユーザレベルなどの非特権ドメインまたはより低い特権ドメインで書かれてもよい。プログラムは、カーネルなどの特権ドメインまたはより高い特権ドメインで作動されてもよい。プログラムを作動させるハードウェアは、任意のループがないことを必要とする場合がある。
【0389】
以下の実施形態では、eBPFプログラム例を参照する。しかしながら、他の実施形態は、任意の他の適切なプログラムと共に使用されてもよいことを理解されたい。
【0390】
以下の実施形態のうちの1つまたは複数は、前述の実施形態のうちの1つまたは複数と組み合わせて使用することができることを理解されたい。
【0391】
いくつかの実施形態は、FPGA、ASIC、または任意の他の適切なハードウェアデバイスのコンテキストで提供され得る。いくつかの実施形態は、FPGAまたはASICなどのサブユニットを使用する。以下の例は、FPGAを参照して説明される。同様のプロセスが、ASICまたは任意の他の適切なハードウェアデバイスによって実行されてもよいことを理解されたい。
【0392】
サブユニットはアトムであってもよい。アトムのいくつかの例は前述されている。前述のアトムの例のいずれも、代替的または付加的にサブユニットとして使用されてもよいことを理解されたい。代替的または付加的に、これらのサブユニットは、「スライス」または構成可能論理ブロックと呼ばれる場合がある。
【0393】
これらのサブユニットの各々は、単一の命令または複数の関連する命令を実行するように構成されてもよい。後者の場合、関連する命令は、(1つまたは複数のビットによって定義され得る)単一の出力を提供し得る。
【0394】
サブユニットは、計算ユニットであると考えることができる。サブユニットは、パケットが順に処理されるパイプラインに配列されてもよい。いくつかの実施形態では、サブユニットは、プログラム内のそれぞれの命令(または複数の命令)を実行するように動的に割り当てることができる。
【0395】
いくつかの実施形態では、サブユニットは、例えばFPGAのブロックを定義するために使用されるユニットの全部または一部であってもよい。いくつかのFPGAでは、FPGAのブロックはスライスと呼ばれる。いくつかの実施形態では、サブユニットまたはアトムは、スライスに等しい。
【0396】
それぞれのアトムまたはサブユニットをFPGAのそれぞれのブロックまたはスライスにマッピングすることによって、RTLアトムをFPGAリソースにマッピングする手法と比較して、改善されたリソース利用率が達成され得る。そのような後者の手法の結果として、RTLアトムは、FPGAの比較的多数の個々のブロックまたはスライスを必要とし得る。
【0397】
いくつかの実施形態では、コンパイルはアトムレベルであってもよい。これは、処理がパイプライン化されるという利点を有し得る。パケットは順に処理され得る。コンパイルプロセスは、比較的迅速に実行され得る。
【0398】
いくつかの実施形態では、算術演算は、1バイト当たり1スライスを必要とし得る。論理演算は、1バイト当たり半分のスライスを必要とし得る。シフト演算は、シフト演算の幅に応じてスライスの集合を必要とする場合がある。比較演算は、1バイト当たり1つのスライスを必要とし得る。選択動作は、1バイト当たり半分のスライスを必要とし得る。
【0399】
コンパイルプロセスの一部として、配置およびルーティングが実行される。配置は、特定の命令または複数の命令を実行するための特定の物理サブユニットの割り当てである。ルーティングは、特定のサブユニットの1つまたは複数の出力が、例えば別の1つまたは複数のサブユニットであり得る正しい宛先にルーティングされることを保証する。
【0400】
配置およびルーティングは、パイプラインの一端から始まる特定のサブユニットに動作が割り当てられるプロセスを使用することができる。いくつかの実施形態では、最も重要な動作が、より重要性の低い動作の前に配置され得る。いくつかの実施形態では、ルーティングは、特定の動作が配置されるのと同時に割り当てられてもよい。いくつかの実施形態では、ルートは、予め計算されたルートの限定されたセットから選択されてもよい。これについては、後にさらに詳細に説明する。
【0401】
いくつかの実施形態では、ルートを割り当てることができない場合、動作は後のために保留される。
【0402】
いくつかの実施形態では、予め計算されたルートは、バイト幅のルートであってもよい。しかしながら、これは単なる例であり、他の実施形態では、異なるルート幅が定義されてもよい。いくつかの実施形態では、複数の異なるサイズのルートが提供されてもよい。
【0403】
いくつかの実施形態では、ルーティングは、近くのサブユニット間のルーティングに限定されてもよい。
【0404】
いくつかの実施形態では、サブユニットは、FPGA上に規則的な構造で物理的に配列されてもよい。
【0405】
いくつかの実施形態では、ルーティングを容易にするために、サブユニットがどのように通信することができるかに関する規則を作成することができる。例えば、サブユニットは、その隣、その上または下にあるサブユニットにのみ出力を提供することができる。
【0406】
代替的または付加的に、ルーティングの目的のために、次のサブユニットがどれだけ離れているかに制限を設けることができる。例えば、サブユニットは、隣接するサブユニット、または規定の距離内にある(例えば、2つ以上の介在するサブユニットが存在しない)サブユニットにのみデータを出力することができる。
【0407】
いくつかの実施形態の方法を示す
図19を参照する。
いくつかの実施形態では、FPGAは、1つまたは複数の「静的」領域および1つまたは複数の「動的」領域を有することができる。静的領域は標準的な構成を提供し、動的機能はエンドユーザの要件に従って機能を提供することができる。静的部分は、例えば、エンドユーザがネットワークインターフェースデバイスを受け取る前に、例えばネットワークインターフェースデバイスがホストに対して設置される前に定義されてもよい。例えば、静的領域は、ネットワークインターフェースデバイスに特定の機能を提供させるように構成されてもよい。静的領域には、アトム間の予め計算されたルートが提供される。後により詳細に説明するように、1つまたは複数の動的領域を通過する1つまたは複数の静的領域間のルーティングが存在してもよい。動的領域は、ネットワークインターフェースデバイスがホストに対して展開されるときに、エンドユーザによってその要件に応じて構成されてもよい。動的領域は、経時的にエンドユーザのために異なる機能を実行するように構成されてもよい。
【0408】
ステップS1において、メインビットファイル50およびツールチェックポイント52と呼ばれる第1のビットファイルを提供するために、第1のコンパイルプロセスが実行される。これは、いくつかの実施形態では静的領域の少なくとも一部のビットファイルである。ビットファイルは、FPGAにダウンロードされると、FPGAに、ビットファイルがそこからコンパイルされたプログラムにおいて指定されるように機能させる。いくつかの実施形態では、第1のコンパイルプロセスにおいて使用されるプログラムは、任意の1つまたは複数のプログラムであってもよく、またはFPGAの一部内のルーティングの決定を支援するように特に設計されたテストプログラムであってもよい。いくつかの実施形態では、一連の単純なプログラムが代替的または付加的に使用されてもよい。
【0409】
プログラムは、修正されてもよく、またはコンパイラによって使用され得る再構成可能なパーティションを有してもよい。プログラムは、再構成可能パーティションからネットを移動させることによって、コンパイラのジョブをより容易にするように修正され得る。
【0410】
ステップS1は、設計ツールにおいて実行されてもよい。単なる例として、Vivadoツールが、XilinXFPGAと共に使用されてもよい。チェックポイントファイルは、設計ツールによって提供されてもよい。チェックポイントファイルは、ビットファイ
ルが生成された時点での設計のスナップショットを表す。チェックポイントファイルは、合成ネットリスト、設計制約、配置情報、およびルーティング情報のうちの1つまたは複数を含むことができる。
【0411】
ステップS2において、ビットファイル記述54を提供するためにチェックポイントファイルを考慮に入れてビットファイルが分析される。分析は、リソースを検出すること、ルートを生成すること、タイミングをチェックすること、1つまたは複数の部分バイトファイルを生成すること、およびビットファイル記述を生成することのうちの1つまたは複数のためのものであり得る。
【0412】
分析は、ビットファイルからルーティング情報を抽出するように構成されてもよい。分析は、信号がいずれのワイヤまたはルートを伝搬したかを決定するように構成され得る。
【0413】
分析フェーズは、少なくとも部分的に合成または設計ツール内で実行することができる。いくつかの実施形態では、Vivadoのスクリプト作成ツールを使用することができる。スクリプト作成ツールは、TCL(ツールコマンド言語)であってもよい。TCLは、Vivadoの機能を追加または変更するために使用することができる。Vivadoの機能は、TCLスクリプトによって呼び出され、制御され得る。
【0414】
ビットファイル記述54は、FPGAの所与の部分がどのように使用され得るかを定義する。例えば、ビットファイル記述は、いずれのアトムがいずれの他のアトムにルーティングされ得るか、およびそれらのアトム間をルーティングすることが可能な1つまたは複数のルートを示す。例えば、各アトムについて、ビットファイル記述は、そのアトムへの入力がどこに由来し得るか、および、データの出力のための1つまたは複数のルートと共に、そのアトムからの出力がどこにルーティングされ得るかを示す。ビットファイル記述は、いかなるプログラムからも独立している。
【0415】
ビットファイル記述は、ルート情報、いずれのルート対が競合するかの指示、およびアトムの必要な構成からビットファイルを生成する方法の記述のうちの1つまたは複数を含むことができる。
【0416】
ビットファイル記述は、アトムのセット間で利用可能なルートのセットを提供することができるが、これは任意の特定の命令が所与のアトムによって実行される前である。
【0417】
ビットファイル記述は、FPGAの一部のためのものであってもよい。ビットファイル記述は、FPGAの動的な部分のためのものであってもよい。ビットファイル記述は、いずれのルートが利用可能であるか、および/またはいずれのルートが利用不可能であるかを含む。例えば、ビットファイルは、例えばFPGAの静的部分(複数可)によって、必要とされるFPGAの動的部分にわたる任意のルーティングを考慮して、FPGAの動的部分に対して、いずれのルートが利用可能であるかを示すことができる。
【0418】
いくつかの実施形態では、ビットファイル記述は、任意の適切な方法で取得することができることを理解されたい。例えば、ビットファイル記述は、FPGAまたはASICのプロバイダによって提供されてもよい。
【0419】
いくつかの実施形態では、ビットファイル記述は、設計ツールによって提供されてもよい。本実施形態では、分析ステップを省略してもよい。設計ツールは、ビットファイル記述を出力することができる。ビットファイル記述は、FPGAの動的部分にわたる任意の必要なルーティングを含むFPGAの静的部分のためのものであり得る。
【0420】
ビットファイル記述を生成するために、任意の他の適切な技術が使用されてもよいことが認識されるべきである。前述の例では、FPGAを設計するために使用されるツールは、ビットファイルを生成するために使用される解析を提供するために使用される。
【0421】
他の実施形態では異なるツールが使用されてもよいことを理解されたい。いくつかの実施形態では、ツールは、製品または一連の製品に固有のものであってもよい。例えば、FPGAのプロバイダは、そのFPGAを管理するための関連ツールを提供することができる。
【0422】
他の実施形態では、汎用スクリプト作成ツールを使用することができる。
いくつかの実施形態では、異なるツールまたは異なる技法を使用して、部分ビットファイルを決定することができる。例えば、いずれの特徴がいずれの特徴に対応するかを決定するために、メインビットファイルを分析することができる。これは、複数の部分ビットファイルが生成されることを必要とする場合がある。
【0423】
ステップS3は、ネットワークインターフェースデバイスがホストに対してインストールされ、物理FPGAデバイス上で実行されるときに実施されることを理解されたい。ステップS1およびS2は、設計合成プロセスの一部として実行されて、ネットワークインターフェースデバイスを実装するビットファイルイメージを生成することができる。いくつかの実施形態では、ステップS1および/またはステップS2は、FPGAの動作を特徴付けるために使用される。FPGAが特徴付けられると、ビットファイル記述は、所与の規定の様式で動作することになるすべての物理ネットワークインターフェースデバイスのメモリに記憶される。
【0424】
ステップS3において、ビットファイル記述およびeBPFプログラムを使用してコンパイルが実行される。コンパイルの出力は、eBPFプログラムの部分ビットファイルである。コンパイルは、部分ビットファイル、および、個々のスライスによって実行されることになるプログラミングにルートを追加する。
【0425】
ビットファイル記述は、展開されるシステム内で提供されてもよいことを理解されたい。ビットファイル記述は、メモリに記憶され得る。ビットファイル記述は、FPGA、ネットワークインターフェースデバイス、またはホストデバイスに記憶することができる。いくつかの実施形態では、ビットファイル記述は、ネットワークインターフェースデバイス上のFPGAに接続されたフラッシュメモリなどに記憶される。フラッシュメモリは、メインビットファイルも含み得る。
【0426】
eBPFプログラムは、ビットファイル記述と共に記憶されてもよいし、または別個に記憶されてもよい。eBPFプログラムは、FPGA、ネットワークインターフェースデバイス、またはホストに記憶されてもよい。eBPFの場合、プログラムは、両方ともホスト上で作動しているユーザモードプログラムからカーネルに転送され得る。カーネルは、プログラムをデバイスドライバに転送し、デバイスドライバは、ホストまたはネットワークインターフェースデバイス上で作動しているコンパイラにプログラムを転送する。いくつかの実施形態では、eBPFプログラムは、ホストOSがブートする前に作動することができるように、ネットワークインターフェースデバイスに記憶されてもよい。
【0427】
コンパイラは、ネットワークインターフェースデバイス、FPGA、またはホスト上の任意の適切な位置に設けられてもよい。単なる例として、コンパイラは、ネットワークインターフェースデバイス上のCPU上で作動されてもよい。
【0428】
次に、コンパイラフローについて説明する。コンパイラのフロントエンドが、eBPF
プログラムを受信する。eBPFプログラムは、任意の適切な言語で書かれてもよい。例えば、eBPFプログラムは、C型言語で書かれてもよい。コンパイラは、フロントエンドにおいて、プログラムを中間表現IRに変換するように構成される。いくつかの実施形態では、IRはLLVM-IRまたは任意の他の適切なIRであってもよい。
【0429】
いくつかの実施形態では、ポインタ解析を実行して、パケット/マップアクセスプリミティブを作成することができる。
【0430】
いくつかの実施形態では、IRの最適化がコンパイラによって実行されてもよいことを理解されたい。これは、いくつかの実施形態では任意選択であり得る。
【0431】
コンパイラの高レベル合成バックエンドは、プログラムパイプラインをステージに分割し、パケットアクセスタップを生成し、Cコードを放出するように構成される。いくつかの実施形態では、設計ツールのHLS部分および/または使用されている設計ツールを呼び出して、HLSフェーズの出力を合成することができる。
【0432】
FPGAアトムのコンパイラバックエンドは、パイプラインをステージに分割し、パケットアクセスタップを生成する。if変換は、制御依存性をデータ依存性に変換するために実行され得る。設計が配置され、ルーティングされる。eBPFプログラムの部分ビットファイルが出力される。
【0433】
ルーティング競合がある場合、
図20aに示すようなルーティング問題が発生する可能性がある。例えば、スライスAはスライスCと通信することができ、スライスBはスライスDと通信することができる。
図20aの構成では、共通ルーティング部60は、スライスAとスライスCとの間の通信、ならびにスライスBとスライスDとの間の通信に割り当てられている。いくつかの実施形態では、このルーティング競合は回避され得る。これに関して、
図20bを参照する。図から分かるように、スライスBとスライスDとの間のルート62と比較して、スライスAとスライスCとの間に別個のルート64が設けられている。
【0434】
いくつかの実施形態では、ビットファイル記述は、サブユニットの少なくともいくつかの対に対する複数の異なるルートを含むことができる。コンパイルプロセスは、
図20aに示すように、ルーティング競合をチェックする。ルーティング競合の場合、コンパイラは、ルートの適切な代替の1つを選択することによって、そのような競合を解決または回避することができる。
【0435】
図21は、eBPFプログラムを実行するためのFPGA内のパーティション66を示す。パーティションは、例えば、一連の入力フリップフロップ68および一連の出力フリップフロップを介してFPGAの静的部分とインターフェースする。いくつかの実施形態では、前述のように、設計全体にルーティング70があってもよい。
【0436】
コンパイラは、コンパイラによって構成されているFPGAの領域にわたるルーティングに対処する必要があり得る。コンパイラは、メインビットファイル内の再構成可能パーティションに適合する部分ビットファイルを生成する必要がある。再構成可能パーティションを用いてメインビットファイルが生成されるとき、設計ツールは、再構成可能パーティション内の論理リソースの使用を回避し、結果、それらのリソースを部分ビットファイルによって使用することができる。しかしながら、設計ツールは、再構成可能パーティション内のルーティングリソースの使用を回避することができない場合がある。
【0437】
その結果、分析ツールは、メインビットファイル内にある設計ツールによって使用され
たルーティングリソースの使用を回避する必要がある。分析ツールは、ビットファイル記述内の利用可能なルートのそのリストが、メインビットファイルによって使用されているいずれの使用リソースも含まないことを確認する必要があり得る。利用可能なルートは、FPGAが非常に規則的であるため、FPGA内の多数の場所で使用することができるルートテンプレートに関して定義することができる。メインビットファイルによって使用されるルーティングリソースは規則性を破り、これは、分析ツールがメインビットファイルと競合する場所でそれらのテンプレートを使用することを回避することを意味する。分析ツールは、それらの場所で使用することができる新しいルートテンプレートを生成すること、および/または特定のルートテンプレートが特定の場所で使用されるのを防ぐことを必要とする場合がある。
【0438】
いくつかの例示的なeBPFプログラム断片をアトムによって実行される命令に変換する際にコンパイラによって提供される機能のいくつかの例をここで説明する。
【0439】
いくつかの実施形態は、ビットファイル記述を生成するために任意の適切な合成ツールを使用することができる。単なる例として、いくつかの実施形態は、ハードウェアのためにアトミックトランザクションを使用するモードに基づくBluespecツールを使用することができる。
【0440】
第1の例では、eBPFプログラム断片は以下の2つの命令を有する。
命令1:r1+=r2
命令2:r1+=r3
第1の命令は、レジスタ1内の数(r1)をレジスタ2内の数(r2)に加算し、その結果をr1内に置く。第2の命令はr1をr3に加算し、結果をr1に置く。この例の両方の命令は64ビットレジスタを使用するが、最下位の32ビットのみを使用する。結果の上位32ビットはゼロで満たされる。
【0441】
コンパイラは、これらをアトムによって実行される命令に変換する。32ビット加算命令は、32対のルックアップテーブル(LUT)、32ビットのキャリーチェーン、および32個のフリップフロップを必要とする。
【0442】
ルックアップテーブルの各対は、2ビットの結果を生成するために2ビットを加算する。キャリーチェーンは、加算中にビットを桁列から次の列に運ぶことを可能にし、減算中にビットを次の列から借用することを可能にする構造である。
【0443】
32個のフリップフロップは、1つのクロックサイクルで値を受け取り、次のクロックサイクルで値を再生する記憶要素である。これらは、クロックサイクルごとに行われる作業量を制限し、タイミング分析を単純化するために使用され得る。
【0444】
いくつかの実施形態では、FPGAは、いくつかのスライスを含むことができる。いくつかの例示的なスライスでは、キャリーチェーンは、スライスの底部(CIN)からスライスの上部(COUT)に伝搬し、その後、次のスライスアップのCIN入力に接続する。
【0445】
各スライスが4ビットのキャリーチェーンを有する例では、32ビット加算を実行するために8つのスライスが使用される。この実施形態では、アトムは、一対のスライスによって提供されると考えることができる。これは、アトムが8ビット値に対して動作することがいくつかの実施形態において好都合であり得るためである。
【0446】
各スライスが8ビットのキャリーチェーンを有する例では、32ビット加算を実行する
ために4つのスライスが使用される。この実施形態では、アトムは、スライスによって提供されると考えることができる。
【0447】
これは単なる例であり、前述のように、アトムは任意の適切な方法で定義され得ることを理解されたい。
【0448】
この例では、FPGAが8ビットのキャリーチェーンをサポートするスライスを有する事例が、ここで第1の例示的なeBPFプログラム断片のコンパイルにおいて使用される。
【0449】
32ビット幅の3つの入力値および32ビット幅の1つの出力値がある。これら3つの入力値を生成した他の先行する命令があり得る。以下では、スライス(アトム)のいくつかの任意の位置を想定する。
【0450】
以下の番号付け規則が使用される。スライス(アトム)は、規則的な行および列の配列に配列されている。XnYmは、配列中のアトムの位置を示す。Xnは列を示し、Ymは行を示す。X6Y0は、スライスが列6および行0にあることを示す。他の実施形態では、任意の他の適切な番号付け方式を使用できることを理解されたい。
【0451】
初期値が以下の場所で同時に生成されたと仮定する。
r1:スライスX6Y0、X6Y1、X6Y2およびX6Y3
r2:スライスX6Y4、X6Y5、X6Y6およびX6Y7
r3:スライスX6Y8、X6Y9、X6Y10およびX6Y11
第1の命令の結果は、キャリーチェーンが正しく接続されるように、同じ列内の4つの隣接するスライスによって計算される必要がある。コンパイラは、その結果をスライスX7Y0、X7Y1、X7Y2およびX7Y3において計算することを選択し得る。これが奏効するためには、入力を接続する必要がある。X6Y0からX7Y0への接続、別のX6Y1からX7Y1への接続、X6Y2からX7Y2への1つの接続、およびX6Y3からX7Y3への1つの接続が存在する。X6Y4-X6Y7からX7Y0-X7Y3への対応する接続も必要である。
【0452】
これらは、8つの入力ビットの各々が対応する出力ビットに接続されることを意味するフルバイト接続である。例えば、スライスX6Y0フリップフリップ0からの出力は、スライスX7Y0 LUT 0の入力0に接続される。
【0453】
スライスX6Y0フリップフリップ1からの出力は、スライスX7Y0 LUT 1の入力0に接続される。
【0454】
以降も同様である。
スライスX6Y0フリップフリップ7からの出力は、スライスX7Y0 LUT 7の入力0に接続される。
【0455】
第1のクロックサイクルの間、スライスX6Y0-X6Y7からのr1およびr2値は、スライスX7Y0-X7Y3の入力に転送され、LUTおよびキャリーチェーンによって処理され、結果はそれらのスライスのフリップフリップ(X7Y0-X7Y3)に記憶され、次のサイクルで使用される準備ができる。
【0456】
命令2に移る。コンパイラは、命令2の結果を計算する場所を選択する必要がある。スライスX7Y4~X7Y7を選択し得る。ここでも、命令1の結果(X7Y0~X7Y3)から命令2の入力(X7Y4~X7Y7)へのフルバイト接続が存在することになる。
【0457】
r3の値も必要である。r1、r2およびr3がサイクル0において生成された場合、r1+r2がサイクル1において生成される。r3の値は、サイクル1において生成されるようにクロックサイクルだけ遅延させる必要がある。コンパイラは、スライスX7Y8~X7Y11を使用してサイクル1においてr3を生成することを選択し得る。次に、サイクル0においてr3を生成した元のスライス(X6Y8~X6Y11)から、サイクル1において同じ値を生成する新しいスライス(X7Y8~X7Y11)への接続が必要になる。それが完了すると、命令2のために、それらの新しいスライスから命令2のスライスへの接続がここで必要になる。したがって、スライスX7Y8からの出力は、スライスX7Y4の入力に接続し、以下同様である。
【0458】
このとき、FPGAビットファイルは、以下の機能を含む。
-X6Y0からX7Y0入力0へのフルバイト接続(初期r1バイト0)
-X6Y1からX7Y1入力0へのフルバイト接続(初期r1バイト1)
-X6Y2からX7Y2入力0へのフルバイト接続(初期r1バイト2)
-X6Y3からX7Y3入力0へのフルバイト接続(初期r1バイト3)
-X6Y4からX7Y0入力1へのフルバイト接続(初期r2バイト0)
-X6Y5からX7Y1入力1へのフルバイト接続(初期r2バイト1)
-X6Y6からX7Y2入力1へのフルバイト接続(初期r2バイト2)
-X6Y7からX7Y3入力1へのフルバイト接続(初期r2バイト3)
-X6Y8からX7Y8入力0へのフルバイト接続(初期r3バイト0)
-X6Y9からX7Y9入力0へのフルバイト接続(初期r3バイト1)
-X6Y10からX7Y10入力0へのフルバイト接続(初期r3バイト2)
-X6Y11からX7Y11入力0へのフルバイト接続(初期r3バイト3)
-入力0を入力1に加算するように構成されたスライスX7Y0(命令1バイト0)
-入力0を入力1に加算するように構成されたスライスX7Y1(命令1バイト1)
-入力0を入力1に加算するように構成されたスライスX7Y2(命令1バイト2)
-入力0を入力1に加算するように構成されたスライスX7Y3(命令1バイト3)
-入力0を出力にコピーするように構成されたスライスX7Y8(r3遅延バイト0)
-入力0を出力にコピーするように構成されたスライスX7Y9(r3遅延バイト1)
-入力0を出力にコピーするように構成されたスライスX7Y10(r3遅延バイト2)
-入力0を出力にコピーするように構成されたスライスX7Y11(r3遅延バイト3)
-X7Y0からX7Y4入力0へのフルバイト接続(命令1バイト0)
-X7Y1からX7Y5入力0へのフルバイト接続(命令1バイト1)
-X7Y2からX7Y6入力0へのフルバイト接続(命令1バイト2)
-X7Y3からX7Y7入力0へのフルバイト接続(命令1バイト3)
-X7Y8からX7Y4入力1へのフルバイト接続(r3遅延バイト0)
-X7Y9からX7Y5入力1へのフルバイト接続(r3遅延バイト1)
-X7Y10からX7Y6入力1へのフルバイト接続(r3遅延バイト2)
-X7Y11からX7Y7入力1へのフルバイト接続(r3遅延バイト3)
-入力0を入力1に加算するように構成されたスライスX7Y4(命令2バイト0)
-入力0を入力1に加算するように構成されたスライスX7Y5(命令2バイト1)
-入力0を入力1に加算するように構成されたスライスX7Y6(命令2バイト2)
-入力0を入力1に加算するように構成されたスライスX7Y7(命令2バイト3)
コンパイラは、命令2の結果の上位32ビットを生成する必要がない。これは、それらが0であることが分かっているためである。その事実に注目し、それらが使用されるときはいつでも0を使用することができる。
【0459】
次に、eBPF断片のコンパイルの第2の例について説明する。
命令1:r1&=0xff
命令2:r2&=0xff
命令3:r1<r2の場合、L1へ進む
命令4:r1=r2
ラベルL1。
【0460】
第1の命令は、r1と定数0xffとのビット積を実行し、結果をr1に置く。対応するビットがr1において元々1に設定されており、対応するビットが定数において1に設定されていた場合、結果における所与のビットは1に設定される。そうでなければ0に設定される。定数0xffは、ビット0~7が設定されており、ビット8~63がクリアされており、そのため、結果として、r1のビット0~7は変更されないが、ビット8~63は0に設定される。これにより、コンパイラはビット8~63が0であり、それらを生成する必要がないことを理解するため、コンパイラに関する物事が単純化される。第2の命令はr2に対して同じことを行う。
【0461】
命令3は、r1がr2未満であるか否かをチェックし、そうであればラベルL1にジャンプする。これにより、命令4がスキップされる。命令4は、単純に値をr2からr1にコピーする。この命令シーケンスは、r1バイト0およびr2バイト0の最小値を見つけ、結果をr1バイト0に置く。
【0462】
コンパイラは、「if変換」として知られる技法を使用して、条件付きジャンプを選択命令に変えることができる。
【0463】
命令1:r1&=0xff
命令2:r2&=0xff
命令5:c1=(r1<r2)
命令6:r1=c1?r1:r2
命令5は、r1をr2と比較し、r1がr2未満であればc1を1に設定し、そうでなければc1を0に設定する。命令6は、c1が設定されている場合にr1をr1にコピーし(これは効果を有しない)、そうでない場合にr2をr1にコピーする選択命令である。c1が1に等しい場合、命令3は命令4をスキップしていることになり、これはr1がその値を命令1から保持することを意味する。この場合、選択命令もr1を変更せずに保持する。c1が0に等しい場合、命令3は命令4をスキップしていないため、r2は命令4によってr1にコピーされる。ここでも、選択命令はr2をr1にコピーするため、新しいシーケンスは古いシーケンスと同じ効果を有する。
【0464】
命令6は有効なeBPF命令ではない。しかしながら、この命令は、コンパイラがそれらに対して作用している間にLLVM-IRにおいて表現される。命令6は、LLVM-IRにおいては有効な命令である。
【0465】
これらの命令は、ここでアトムに割り当てられる必要がある。入力r1がスライスX0Y0~X0Y7において利用可能であり、r2がスライスX0Y8~X0Y15において利用可能であると仮定する。命令1および2は、r1およびr2の上位7バイトが0に設定されることをコンパイラに注記させる。
【0466】
次に、コンパイラは、スライスX1Y0内の命令5の結果を計算することを選択し得る。スライスX0Y0の出力からスライスX1Y0の入力0へのフルバイト接続、およびスライスX0Y8の出力からスライスX1Y0の入力1へのフルバイト接続が必要である。2つの値を比較する方法は、一方を他方から減算し、次のビットアップから借用しようと
することによって計算がオーバーフローするか否かを確認することである。そして、この比較結果は、スライスX1Y1のフリップフロップ7に記憶される。
【0467】
第1の例と同様に、r1およびr2は、命令6に対して適時に値を提示するために1サイクルだけ遅延される必要がある。コンパイラは、r1およびr2に対してそれぞれスライスX1Y1およびX1Y2を使用し得る。
【0468】
選択命令は、c1、r1、およびr2の3つの入力を必要とする。r1およびr2は1バイト幅であるが、c1は1ビット幅しかないことに留意されたい。コンパイルが選択命令スライスX2Y0の結果を計算すると仮定する。選択はビットごとに実行され、スライスX2Y0内の各LUTが1ビットを扱う。
【0469】
c1が設定される場合、結果のビット0はr1ビット0であり、
そうでない場合、r2ビット0である。
【0470】
c1が設定される場合、結果のビット1はr1ビット1であり、
そうでない場合、r2ビット1である。
【0471】
...そして、以下まで同様である。
c1が設定される場合、結果のビット7はr1ビット7であり、
そうでない場合、r2ビット7である。
【0472】
各LUTはr1からの対応するビットおよびr2からの対応するビットにアクセスする必要があり得るが、すべてのLUTはc1にアクセスする必要がある。これは、c1がスライスの入力0のビットにわたって複製される必要があることを意味する。したがって、命令6の入力のための接続は以下のようになる。
【0473】
スライスX1Y0の出力のビット7をスライスX2Y0の入力0に複製する。
スライスX1Y1の出力からスライスX2Y0の入力1へのフルバイト接続。
【0474】
スライスX1Y2の出力からスライスX2Y0の入力2へのフルバイト接続。
対処する必要がある別の問題は、シフト命令に関する。以下の例を考える。
【0475】
5ビット左への16ビットシフトは、
出力ビット0を0に設定し、
出力ビット1を0に設定し、
出力ビット2を0に設定し、
出力ビット3を0に設定し、
出力ビット4を0に設定し、
入力ビット0を出力ビット5にコピーし、
入力ビット1を出力ビット6にコピーし、
...
入力ビット10を出力ビット15にコピーすることを必要とする。
【0476】
ここでの入力および出力は、接続のものであることに留意されたい。接続の入力は、第1のスライスの出力からのものである。接続の出力は、第2のスライスの入力に進む。
【0477】
スライス内でこの種の接続を行うことは可能でない場合があり、そうではなく、スライス間の相互接続によってこの種の接続を行うことは可能である場合がある。コンパイラは、16ビット入力値が同じ列内の2つの隣接するスライスによって生成されたと仮定する
ことができる。これは、コンパイラがそこで値が生成されることを確認することができるためである。
【0478】
一例として、入力がスライスX0Y4およびX0Y5によって生成され、出力がスライスX1Y4およびX1Y5に向かうと仮定する。その場合、以下の接続が必要となる。
【0479】
スライスX1Y4ビット0は0であることが分かっているため、必要ではない
スライスX1Y4ビット1は0であることが分かっているため、必要ではない
スライスX1Y4ビット2は0であることが分かっているため、必要ではない
スライスX1Y4ビット3は0であることが分かっているため、必要ではない
スライスX1Y4ビット4は0であることが分かっているため、必要ではない
スライスX1Y4ビット5はスライスX0Y4ビット0からのものである
スライスX1Y4ビット6はスライスX0Y4ビット1からのものである
スライスX1Y4ビット7はスライスX0Y4ビット2からのものである
スライスX1Y5ビット0はスライスX0Y4ビット3からのものである
スライスX1Y5ビット1はスライスX0Y4ビット4からのものである
スライスX1Y5ビット2はスライスX0Y4ビット5からのものである
スライスX1Y5ビット3はスライスX0Y4ビット6からのものである
スライスX1Y5ビット4はスライスX0Y4ビット7からのものである
スライスX1Y5ビット5はスライスX0Y5ビット0からのものである
スライスX1Y5ビット6はスライスX0Y5ビット1からのものである
スライスX1Y5ビット7はスライスX0Y5ビット2からのものである
スライスX1Y5の入力への8つの接続は、シフトされた接続またはシフトされたルートと考えることができる。スライスX1Y4にも同じ構造を使用することができるが、X1Y3およびX1Y4からの入力を有する。これは、ビット5~7が照合され、スライスはビット0~4を無視することができるため、いずれの入力がそこに提示されるかは問題ではないためである。
【0480】
1~7ビットの任意の量だけシフトできる必要があり得る。0ビットまたは8ビットだけシフトする接続は、その場合、各ビットが別のスライスの対応するビットに接続するため、フルバイト接続とまったく同じである。
【0481】
可変量のシフトは、シフトされる値の幅に応じて、2ステージまたは3ステージ内で行われ得る。ステージは以下の通りである。
【0482】
ステージ1:0、1、2または3だけシフトする。
ステージ2:0、4、8または12だけシフトする。
【0483】
ステージ3:0、16、32または48だけシフトする(32ビットまたは64ビットのみ)。
【0484】
別の例として、可変量バイト分の算術右シフトがあるとすると、シフトされる値はスライスX3Y2によって生成され、シフト量はX3Y3によって生成される。
【0485】
算術右シフトは、「算術右シフト」タイプの接続を必要とする。このタイプの接続は、1つのスライスの出力を取り、それらを別のスライスの入力に接続するが、そのプロセスにおいてそれらを一定量だけ右にシフトし、必要に応じて符号ビットを複製する。
【0486】
例えば、「算術右3シフト」接続は、以下を有する。
出力ビット0は入力ビット3からのものである
出力ビット1は入力ビット4からのものである
出力ビット2は入力ビット5からのものである
出力ビット3は入力ビット6からのものである
出力ビット4は入力ビット7からのものである
出力ビット5は入力ビット7(符号ビット)からのものである
出力ビット6は入力ビット7(符号ビット)からのものである
出力ビット7は入力ビット7(符号ビット)からのものである
ステージ1は、スライスX4Y2において計算することができ、その場合、以下の接続が必要になる。
【0487】
スライスX3Y2からスライスX4Y2入力0へのフルバイト
スライスX3Y2からスライスX4Y2入力1への算術右1シフト
スライスX3Y2からスライスX4Y2入力2への算術右2シフト
スライスX3Y2からスライスX4Y2入力3への算術右3シフト
スライスX3Y3ビット0をスライスX4Y2入力4に複製する
スライスX3Y3ビット1をスライスX4Y2入力5に複製する
次に、スライスX4Y2は、以下のように入力4および入力5に基づいて最初の4つの入力のうちの1つを選択するように構成される。
【0488】
入力4が0であり、入力5が0である:入力0を選択する
入力4が1であり、入力5が0である:入力1を選択する
入力4が0であり、入力5が1である:入力2を選択する
入力4が1であり、入力5が1である:入力3を選択する
スライスX3Y3からスライスX4Y3にシフト量をコピーして遅延バージョンを提供することができる。
【0489】
ステージ2は、スライスX5Y2において計算され得、その場合、以下の接続が必要になる。
【0490】
スライスX4Y2からスライスX5Y2入力0へのフルバイト
スライスX4Y2からスライスX5Y2入力1への算術右4シフト
スライスX4Y3ビット2をスライスX5Y2入力2に複製する
次に、スライスX5Y2は、以下のように入力2に基づいて入力0または入力1を選択するように構成される。
【0491】
入力2が0:入力0を選択する
入力2が1:入力1を選択する
スライスX5Y2の出力は、可変算術右シフト演算の結果となる。
【0492】
所与のアトムのビットファイルは以下のとおりであり得る。
アトムの識別情報
所与のアトムが入力およびその入力に利用可能なルートを受け取ることができる他のアトムのリスト。
【0493】
所与のアトムが出力およびその出力に利用可能なルートを提供することができる他のアトムのリスト
FPGAは規則的な構造であるため、必要に応じて個々のアトムの修正を伴う複数のアトムに使用できる共通のテンプレートがあり得ることを理解されたい。
【0494】
一例として、スライスX7Y1のビットファイル記述は、以下の可能な入力および出力
を指定することができる。
【0495】
ルートAまたはルートBを介したX6Y1からの入力
ルートCまたはルートDを介したX6Y5からの入力
ルートEまたはルートFを介したX7Y0からの入力
ルートGまたはルートHを介したX8Y1への出力
ルートIまたはルートJを介したX7Y2への出力
ルートKまたはルートLを介したX7Y5への出力。
【0496】
コンパイラは、このビットファイル記述を使用して、以下の前述した第1のeBPF例のスライスX7Y1の入力および出力のための部分ビットファイルを提供する。
【0497】
ルートAを介したX6Y1からの入力
ルートCを介したX6Y5からの入力
ルートKまたはルートLを介したX7Y5への出力。
【0498】
一例として、スライスXnYmのビットファイル記述は、以下の可能な入力および出力を指定することができる。
【0499】
ルートAまたはルートBを介したXn-1Ymからの入力
ルートCまたはルートDを介したXn-1Ym+4からの入力
ルートEまたはルートFを介したXnYm-1からの入力
ルートGまたはルートHを介したXn+1Ymへの出力
ルートIまたはルートJを介したXnYm+1への出力
ルートKまたはルートLを介したXnYm+4への出力。
【0500】
このビットファイル記述は、前述のように、コンパイラが使用するのに利用できない1つまたは複数のルートを除去するように修正することができる。これは、ルートが別のアトムによって使用されるか、またはパーティションをまたいだルーティングに使用されるためであり得る。
【0501】
コンパイラは、1つまたは複数のコンピュータプロセッサによって実行され得るコンピュータ実行可能命令を含むコンピュータプログラムによって実装され得ることを理解されたい。コンパイラは、1つまたは複数のメモリと連携して動作する少なくとも1つのプロセッサなどのハードウェア上で実行することができる。
【0502】
上記は例示的な実施形態を説明しているが、本発明の範囲から逸脱することなく開示された解決策に対して行うことができるいくつかの変形および修正があることに留意されたい。
【0503】
したがって、実施形態は、添付の特許請求項の範囲内で変化し得る。一般に、いくつかの実施形態は、ハードウェアもしくは専用回路、ソフトウェア、ロジック、またはそれらの任意の組み合わせにおいて実施することができる。例えば、いくつかの態様はハードウェアにおいて実装されてもよく、一方、他の態様は、コントローラ、マイクロプロセッサ、または他のコンピューティングデバイスによって実行され得るファームウェアまたはソフトウェアにおいて実装されてもよいが、実施形態はそれらに限定されない。
【0504】
実施形態は、メモリに記憶され、関与するエンティティの少なくとも1つのデータプロセッサによって、またはハードウェアによって、またはソフトウェアとハードウェアとの組み合わせによって実行可能なコンピュータソフトウェアによって実施することができる
。
【0505】
ソフトウェアは、メモリチップ、またはプロセッサ内に実装されたメモリブロックなどの物理媒体、ハードディスクまたはフロッピー(登録商標)ディスクなどの磁気媒体、および例えばDVDおよびそのデータ変形、CDなどの光学媒体に記憶することができる。
【0506】
メモリは、ローカル技術環境に適した任意のタイプのものであってもよく、半導体ベースのメモリデバイス、磁気メモリデバイスおよびシステム、光メモリデバイスおよびシステム、固定メモリおよびリムーバブルメモリなどの任意の適切なデータ記憶技術を使用して実装することができる。
【0507】
データプロセッサは、ローカル技術環境に適した任意のタイプのものであってもよく、非限定的な例として、汎用コンピュータ、専用コンピュータ、マイクロプロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、ゲートレベル回路、およびマルチコアプロセッサアーキテクチャに基づくプロセッサのうちの1つまたは複数を含んでもよい。
【0508】
添付の図面および添付の特許請求の範囲と併せて読めば、前述の説明を考慮して、様々な修正および適合が当業者には明らかになり得る。しかしながら、本教示のすべてのそのようなおよび類似の修正は、添付の特許請求の範囲に定義される範囲内に依然として含まれる。
【手続補正書】
【提出日】2024-06-13
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
ホストデバイスをネットワークにインターフェースするためのネットワークインターフェースデバイスであって、
第1のインターフェースであり、前記第1のインターフェースは、複数のデータパケットを受信するように構成されている、第1のインターフェースと、
複数の処理ユニットを備える構成可能ハードウェアモジュールであり、各処理ユニットは、単一のステップにおいて実行可能な所定のタイプの動作に関連付けられる、構成可能ハードウェアモジュールとを備え、
前記複数の処理ユニットのうちの少なくともいくつかは、異なる所定のタイプの動作に関連付けられ、
前記ハードウェアモジュールは、前記複数のデータパケットのうちの1つまたは複数を処理して前記複数のデータパケットのうちの前記1つまたは複数に関して第1の機能を実行するための第1のデータ処理パイプラインを提供するために、前記複数の前記処理ユニットのうちの少なくともいくつかを相互接続するように構成可能である、ネットワークインターフェースデバイス。
【外国語明細書】