Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
JP7849969B2 - Network Interface Device - Google Patents
[go: Go Back, main page]

JP7849969B2 - Network Interface Device - Google Patents

Network Interface Device

Info

Publication number
JP7849969B2
JP7849969B2 JP2021523691A JP2021523691A JP7849969B2 JP 7849969 B2 JP7849969 B2 JP 7849969B2 JP 2021523691 A JP2021523691 A JP 2021523691A JP 2021523691 A JP2021523691 A JP 2021523691A JP 7849969 B2 JP7849969 B2 JP 7849969B2
Authority
JP
Japan
Prior art keywords
processing
processing units
data
network interface
data packets
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2021523691A
Other languages
Japanese (ja)
Other versions
JP2022512879A (en
Inventor
ポぺ,スティーブン
タートン,ニール
リドック,デイビッド
キタリエブ,ドミトリ
ソハン,リプデュマン
ロバーツ,デレク
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Xilinx Inc
Original Assignee
Xilinx Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US16/180,883 external-priority patent/US11012411B2/en
Priority claimed from US16/395,027 external-priority patent/US11082364B2/en
Application filed by Xilinx Inc filed Critical Xilinx Inc
Publication of JP2022512879A publication Critical patent/JP2022512879A/en
Priority to JP2024083450A priority Critical patent/JP2024116163A/en
Application granted granted Critical
Publication of JP7849969B2 publication Critical patent/JP7849969B2/en
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30079Pipeline control instructions, e.g. multicycle NOP
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/5044Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering hardware capabilities
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/74Address processing for routing
    • H04L45/742Route cache; Operation thereof
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/15Interconnection of switching modules
    • H04L49/1515Non-blocking multistage, e.g. Clos
    • H04L49/1546Non-blocking multistage, e.g. Clos using pipelined operation

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Stored Programmes (AREA)
  • Advance Control (AREA)
  • Logic Circuits (AREA)
  • Multi Processors (AREA)

Description

分野
本出願は、データパケットに関する機能を実行するためのネットワークインターフェースデバイスに関する。
Field: This application relates to a network interface device for performing functions related to data packets.

背景
ネットワークインターフェースデバイスが既知であり、典型的には、コンピューティングデバイスとネットワークとの間のインターフェースを提供するために使用される。ネットワークインターフェースデバイスは、ネットワークから受信されるデータを処理し、および/またはネットワーク上に置かれるデータを処理するように構成することができる。
Background: Network interface devices are known and are typically used to provide an interface between computing devices and networks. Network interface devices can be configured to process data received from and/or data placed on the network.

概要
一態様によれば、ホストデバイスをネットワークにインターフェースするためのネットワークインターフェースデバイスであって、第1のインターフェースであり、第1のインターフェースは、複数のデータパケットを受信するように構成されている、第1のインターフェースと、複数の処理ユニットを備える構成可能ハードウェアモジュールであり、各処理ユニットは、単一のステップにおいて実行可能な所定のタイプの動作に関連付けられる、構成可能ハードウェアモジュールとを備え、上記複数の処理ユニットのうちの少なくともいくつかは、異なる所定のタイプの動作に関連付けられ、ハードウェアモジュールは、上記複数のデータパケットのうちの1つまたは複数を処理して上記複数のデータパケットのうちの上記1つまたは複数に関して第1の機能を実行するための第1のデータ処理パイプラインを提供するために、上記複数の上記処理ユニットのうちの少なくともいくつかを相互接続するように構成可能である、ネットワークインターフェースデバイスが提供される。
Summary In one embodiment, a network interface device is provided for interface a host device to a network, comprising: a first interface, the first interface being configured to receive a plurality of data packets; and a configurable hardware module comprising a plurality of processing units, each processing unit being associated with a predetermined type of operation that can be performed in a single step, wherein at least some of the plurality of processing units are associated with different predetermined types of operations, and the hardware module is configurable to interconnect at least some of the plurality of processing units in order to provide a first data processing pipeline for processing one or more of the plurality of data packets and performing a first function with respect to one or more of the plurality of data packets.

いくつかの実施形態では、第1の機能は、フィルタリング機能を含む。いくつかの実施形態では、機能は、トンネリング、カプセル化、およびルーティング機能のうちの少なくとも1つを含む。いくつかの実施形態では、第1の機能は、拡張Berkleyパケットフィルタ機能を含む。 In some embodiments, the first function includes a filtering function. In some embodiments, the function includes at least one of tunneling, encapsulation, and routing functions. In some embodiments, the first function includes an extended Berkley packet filtering function.

いくつかの実施形態では、第1の機能は、分散型サービス妨害スクラブ動作を含む。
いくつかの実施形態では、第1の機能は、ファイアウォール動作を含む。
In some embodiments, the first function includes a distributed denial-of-service scrubbing operation.
In some embodiments, the first function includes firewall operation.

いくつかの実施形態では、第1のインターフェースは、ネットワークから第1のデータパケットを受信するように構成される。 In some embodiments, the first interface is configured to receive a first data packet from the network.

いくつかの実施形態では、第1のインターフェースは、ホストデバイスから第1のデータパケットを受信するように構成される。 In some embodiments, the first interface is configured to receive a first data packet from a host device.

いくつかの実施形態では、複数の処理ユニットの少なくともいくつかのうちの2つ以上は、それらの関連する少なくとも1つの所定の動作を並列に実行するように構成される。 In some embodiments, at least two of several processing units are configured to perform at least one predetermined operation in parallel.

いくつかの実施形態では、複数の処理ユニットのうちの少なくともいくつかのうちの2つ以上は、ハードウェアモジュールの共通クロック信号に従ってそれらの関連する所定のタイプの動作を実行するように構成される。 In some embodiments, at least two of several processing units are configured to perform their associated predetermined types of operations in accordance with a common clock signal of the hardware module.

いくつかの実施形態では、複数の処理ユニットの少なくともいくつかのうちの2つ以上の各々は、クロック信号によって定義される所定の時間長内にその関連する所定のタイプの動作を実行するように構成される。 In some embodiments, each of at least two of a plurality of processing units is configured to perform its associated predetermined type of operation within a predetermined time length defined by a clock signal.

いくつかの実施形態では、複数の処理ユニットのうちの少なくともいくつかのうちの2つ以上は、所定の時間長の期間内に第1のデータパケットにアクセスし、所定の時間長の終了に応答して、それぞれの上記少なくとも1つの動作の結果を次の処理ユニットに転送するように構成される。 In some embodiments, at least two of several processing units are configured to access a first data packet within a predetermined time period and, in response to the end of the predetermined time period, transfer the result of each of the at least one of the above operations to the next processing unit.

いくつかの実施形態では、結果は、少なくとも、複数のデータパケットのうちの1つまたは複数からの値、マップ状態への更新、およびメタデータのうちの少なくとも1つまたは複数を含む。 In some embodiments, the results include at least one or more of the following: values from one or more of the data packets, updates to the map state, and metadata.

いくつかの実施形態では、複数の処理ユニットの各々は、それぞれの処理ユニットに関連付けられる少なくとも1つの動作を実行するように構成された特定用途向け集積回路を含む。 In some embodiments, each of the processing units includes an application-specific integrated circuit configured to perform at least one operation associated with each processing unit.

いくつかの実施形態では、処理ユニットの各々は、フィールドプログラマブルゲートアレイを含む。いくつかの実施形態では、処理ユニットの各々は、任意の他のタイプのソフトロジックを含む。 In some embodiments, each processing unit includes a field-programmable gate array. In some embodiments, each processing unit includes any other type of soft logic.

いくつかの実施形態では、複数の処理ユニットのうちの少なくとも1つは、デジタル回路と、デジタル回路によって実行される処理に関連する状態を記憶するメモリとを備え、デジタル回路は、メモリと通信して、それぞれの処理ユニットに関連付けられる所定のタイプの動作を実行するように構成される。 In some embodiments, at least one of a plurality of processing units comprises a digital circuit and a memory for storing a state related to the processing performed by the digital circuit, and the digital circuit is configured to communicate with the memory to perform a predetermined type of operation associated with each processing unit.

いくつかの実施形態では、ネットワークインターフェースデバイスは、複数の処理ユニットのうちの2つ以上にアクセス可能なメモリを備え、メモリは、第1のデータパケットに関連付けられる状態を記憶するように構成され、ハードウェアモジュールによる第1の機能の実行中、複数の処理ユニットのうちの2つ以上は、状態にアクセスし、状態を修正するように構成される。 In some embodiments, the network interface device includes a memory accessible to two or more of a plurality of processing units, the memory is configured to store the state associated with a first data packet, and during the execution of the first function by the hardware module, two or more of the plurality of processing units are configured to access and modify the state.

いくつかの実施形態では、複数の処理ユニットのうちの少なくともいくつかのうちの第1の処理ユニットは、複数の処理ユニットのうちの第2の処理ユニットによる状態の値のアクセス中にストールするように構成される。 In some embodiments, a first processing unit, among at least some of the multiple processing units, is configured to stall while a second processing unit among the multiple processing units accesses a state value.

いくつかの実施形態では、複数の処理ユニットのうちの1つまたは複数は、それらの関連する所定のタイプの動作に基づいて、それぞれのパイプラインに固有の動作を実行するように個別に構成可能である。 In some embodiments, one or more of the processing units can be individually configured to perform operations specific to their respective pipelines based on their associated predetermined types of operations.

いくつかの実施形態では、ハードウェアモジュールは、命令を受信し、上記命令に応答して、上記複数のデータパケットのうちの1つまたは複数を処理するためのデータ処理パイプラインを提供するために、上記複数の上記処理ユニットのうちの少なくともいくつかを相互接続すること、上記複数の処理ユニットのうちの1つまたは複数に、上記1つまたは複数のデータパケットに関してそれらの関連する所定のタイプの動作を実行させること、上記複数の処理ユニットのうちの1つまたは複数をデータ処理パイプラインに追加すること、および、データ処理パイプラインから上記複数の処理ユニットのうちの1つまたは複数を除去することのうちの少なくとも1つを行うように構成されている。 In some embodiments, the hardware module is configured to receive instructions and, in response to those instructions, to provide a data processing pipeline for processing one or more of the multiple data packets. This involves interconnecting at least some of the multiple processing units, causing one or more of the multiple processing units to perform predetermined related operations with respect to one or more data packets, adding one or more of the multiple processing units to the data processing pipeline, and removing one or more of the multiple processing units from the data processing pipeline.

いくつかの実施形態では、所定の動作は、メモリから第1のデータパケットの少なくとも1つの値をロードすること、データパケットの少なくとも1つの値をメモリに記憶すること、および、データパケットに関して実行されるべきアクションを決定するためにルックアップテーブル内のルックアップを実行することのうちの少なくとも1つを含む。 In some embodiments, a predetermined operation includes at least one of the following: loading at least one value of a first data packet from memory; storing at least one value of the data packet in memory; and performing a lookup in a lookup table to determine an action to be performed with respect to the data packet.

いくつかの実施形態では、ハードウェアモジュールは、命令を受信するように構成され、ハードウェアモジュールは、上記命令に応答して、上記複数のデータパケットのうちの1つまたは複数を処理するためのデータ処理パイプラインを提供するために、上記複数の上記処理ユニットのうちの少なくともいくつかを相互接続するように構成可能であり、命令は、第3の処理パイプラインを介して送信されるデータパケットを含む。 In some embodiments, the hardware module is configured to receive instructions, and the hardware module can be configured to interconnect at least some of the processing units to provide a data processing pipeline for processing one or more of the plurality of data packets in response to the instructions, wherein the instructions include data packets transmitted through a third processing pipeline.

いくつかの実施形態では、複数の処理ユニットのうちの1つまたは複数少なくともいくつかは、上記命令に応答して、複数のデータパケットのうちの上記1つまたは複数に関してそれらの関連する所定のタイプの動作のうちの選択された動作を実行するように構成可能である。 In some embodiments, one or more of the processing units can be configured to perform a selected operation from a predetermined set of operations relating to one or more of the data packets in response to the instruction.

いくつかの実施形態では、複数の構成要素は、ハードウェアモジュールとは異なる回路において第1の機能を提供するように構成された複数の構成要素のうちの第2の構成要素を含み、ネットワークインターフェースデバイスは、処理パイプラインを通過するデータパケットが、複数の構成要素のうちの第1の構成要素および複数の構成要素のうちの第2の構成要素のうちの1つによって処理されるようにするように構成された少なくとも1つのコントローラを備える。 In some embodiments, the plurality of components includes a second component among the plurality of components configured to provide a first function in a circuit distinct from the hardware module, and the network interface device comprises at least one controller configured such that data packets passing through the processing pipeline are processed by one of the first component among the plurality of components and one of the second component among the plurality of components.

いくつかの実施形態では、ネットワークインターフェースデバイスは、ハードウェアモジュールにデータパケットに対する第1の機能の実行を開始させる命令を発行するように構成された少なくとも1つのコントローラを備え、命令は、複数の構成要素のうちの第1の構成要素が処理パイプラインに挿入されるようにするように構成される。 In some embodiments, the network interface device comprises at least one controller configured to issue a command to a hardware module to initiate the execution of a first function for a data packet, wherein the command is configured to cause a first component of a plurality of components to be inserted into the processing pipeline.

いくつかの実施形態では、ネットワークインターフェースデバイスは、ハードウェアモジュールにデータパケットに対する第1の機能の実行を開始させる命令を発行するように構成された少なくとも1つのコントローラを備え、命令は、処理パイプラインを通じて送信され、複数の構成要素のうちの第1の構成要素が作動されるようにするように構成される制御メッセージを含む。 In some embodiments, the network interface device comprises at least one controller configured to issue a command to a hardware module to initiate the execution of a first function for a data packet, the command including a control message transmitted through a processing pipeline and configured to activate a first component of a plurality of components.

いくつかの実施形態では、複数の処理ユニットの少なくともいくつかのうちの1つまたは複数について、関連する少なくとも1つの動作は、ネットワークインターフェースデバイスのメモリから第1のデータパケットの少なくとも1つの値をロードすること、第1のデータパケットの少なくとも1つの値をネットワークインターフェースデバイスのメモリに記憶することと、および、第1のデータパケットに関して行われるべきアクションを決定するためにルックアップテーブル内のルックアップを行うことのうちの少なくとも1つを含む。 In some embodiments, for at least one or more of a plurality of processing units, the relevant at least one operation includes at least one of loading at least one value of a first data packet from the memory of a network interface device, storing at least one value of the first data packet in the memory of the network interface device, and performing a lookup in a lookup table to determine the action to be taken with respect to the first data packet.

いくつかの実施形態では、複数の処理ユニットのうちの少なくともいくつかのうちの1つまたは複数は、その関連する少なくとも1つの所定の動作の少なくとも1つの結果を第1の処理パイプライン内の次の処理ユニットに渡すように構成され、次の処理ユニットは、少なくとも1つの結果に応じて次の所定の動作を実行するように構成される。 In some embodiments, one or more of at least some of a plurality of processing units are configured to pass at least one result of its associated predetermined operation to the next processing unit in a first processing pipeline, and the next processing unit is configured to perform the next predetermined operation in response to at least one result.

いくつかの実施形態では、異なる所定のタイプの動作の各々は、異なるテンプレートによって定義される。 In some embodiments, each of the different predetermined types of operation is defined by a different template.

いくつかの実施形態では、所定の動作のタイプは、データパケットにアクセスすること、ハードウェアモジュールのメモリに記憶されたルックアップテーブルにアクセスすること、データパケットからロードされたデータに対して論理演算を実行すること、および、ルックアップテーブルからロードされたデータに対して論理演算を実行することのうちの少なくとも1つを含む。 In some embodiments, a predetermined type of operation includes at least one of the following: accessing data packets; accessing lookup tables stored in the memory of a hardware module; performing logical operations on data loaded from data packets; and performing logical operations on data loaded from lookup tables.

いくつかの実施形態では、ハードウェアモジュールはルーティングハードウェアを備え、ハードウェアモジュールは、第1のデータ処理パイプラインによって定義される特定の順序で複数の処理ユニット間でデータパケットをルーティングするようにルーティングハードウェアを構成することによって、第1のデータ処理パイプラインを提供するために上記複数の上記処理ユニットの少なくともいくつかを相互接続するように構成可能である。 In some embodiments, the hardware module includes routing hardware, and the hardware module can be configured to interconnect at least some of the processing units in order to provide the first data processing pipeline by configuring the routing hardware to route data packets between the processing units in a specific order defined by the first data processing pipeline.

いくつかの実施形態では、ハードウェアモジュールは、上記複数の上記処理ユニットの少なくともいくつかを相互接続して、上記複数のデータパケットのうちの1つまたは複数を処理して第1の機能とは異なる第2の機能を実行するための第2のデータ処理パイプラインを提供するように構成可能である。 In some embodiments, the hardware module can be configured to interconnect at least some of the plurality of processing units to provide a second data processing pipeline for processing one or more of the plurality of data packets and performing a second function different from the first function.

いくつかの実施形態では、ハードウェアモジュールは、複数の上記処理ユニットのうちの少なくともいくつかを相互接続して第1のデータ処理パイプラインを提供した後に、上記複数の上記処理ユニットのうちの少なくともいくつかを相互接続して第2のデータ処理パイプラインを提供するように構成可能である。 In some embodiments, the hardware module can be configured to interconnect at least some of the processing units described above to provide a first data processing pipeline, and then to interconnect at least some of the processing units described above to provide a second data processing pipeline.

いくつかの実施形態では、ネットワークインターフェースデバイスは、ハードウェアモジュールとは別個の、上記複数のデータパケットのうちの1つまたは複数に対して第1の機能を実行するように構成されたさらなる回路を備える。 In some embodiments, the network interface device includes additional circuitry, separate from the hardware module, configured to perform a first function for one or more of the aforementioned data packets.

いくつかの実施形態では、さらなる回路は、フィールドプログラマブルゲートアレイ、および複数の中央処理装置のうちの少なくとも1つを含む。 In some embodiments, the further circuitry includes a field-programmable gate array and at least one of a plurality of central processing units.

いくつかの実施形態では、ネットワークインターフェースデバイスは、少なくとも1つのコントローラを備え、さらなる回路は、第1の機能がハードウェアモジュールにおいて実行されるようにするためのコンパイルプロセス中にデータパケットに対して第1の機能を実行するように構成され、少なくとも1つのコントローラは、コンパイルプロセスの完了に応答して、データパケットに対する第1の機能の実行を開始するようにハードウェアモジュールを制御するように構成される。 In some embodiments, the network interface device comprises at least one controller, and further circuitry is configured to perform a first function on data packets during a compilation process to enable the first function to be performed in a hardware module, and at least one controller is configured to control the hardware module to begin performing the first function on data packets in response to the completion of the compilation process.

いくつかの実施形態では、さらなる回路は、複数の中央処理装置を含む。
いくつかの実施形態では、少なくとも1つのコントローラは、第1の機能がハードウェアモジュールにおいて実行されるようにするためのコンパイルプロセスが完了したという上記決定に応答して、データパケットに対する第1の機能の実行を停止するようにさらなる回路を制御するように構成される。
In some embodiments, the further circuitry includes a plurality of central processing units.
In some embodiments, at least one controller is configured to control further circuitry to stop executing the first function on data packets in response to the above-mentioned decision that the compilation process for executing the first function in the hardware module is complete.

いくつかの実施形態では、ネットワークインターフェースデバイスは少なくとも1つのコントローラを備え、ハードウェアモジュールは、第1の機能がさらなる回路において実行されるようにするためのコンパイルプロセス中にデータパケットに対して第1の機能を実行するように構成され、少なくとも1つのコントローラは、第1の機能がさらなる回路において実行されるようにするためのコンパイルプロセスが完了したと決定し、上記決定に応答して、データパケットに対する第1の機能の実行を開始するようにさらなる回路を制御するように構成される。 In some embodiments, the network interface device comprises at least one controller, and the hardware module is configured to perform a first function on data packets during a compilation process for which the first function is to be performed in further circuitry. The at least one controller is configured to determine that the compilation process for which the first function is to be performed in further circuitry is complete, and in response to this determination, to control the further circuitry to begin performing the first function on data packets.

いくつかの実施形態では、さらなる回路はフィールドプログラマブルゲートアレイを含む。 In some embodiments, the further circuitry includes a field-programmable gate array.

いくつかの実施形態では、少なくとも1つのコントローラは、第1の機能がさらなる回路において実行されるようにするためのコンパイルプロセスが完了したという上記決定に応答して、データパケットに対する第1の機能の実行を停止するようにハードウェアモジュールを制御するように構成される。 In some embodiments, at least one controller is configured to control a hardware module to stop executing the first function on data packets in response to the above-mentioned decision that the compilation process for executing the first function in further circuitry has been completed.

いくつかの実施形態では、ネットワークインターフェースデバイスは、第1の機能がハードウェアモジュールにおいて実行されることを可能にするためのコンパイルプロセスを実行するように構成された少なくとも1つのコントローラを備える。 In some embodiments, the network interface device comprises at least one controller configured to perform a compilation process to enable the first function to be executed in the hardware module.

いくつかの実施形態では、コンパイルプロセスは、制御メッセージに応答するハードウェアモジュール内の制御プレーンインターフェースを提供するための命令を提供することを含む。 In some embodiments, the compilation process includes providing instructions for providing a control plane interface within a hardware module that responds to control messages.

別の態様によれば、第1の態様によるネットワークインターフェースデバイスと、ホストデバイスとを備えるデータ処理システムが提供され、データ処理システムは、第1の機能がハードウェアモジュールにおいて実行されることを可能にするためのコンパイルプロセスを実行するように構成された少なくとも1つのコントローラを備える。 In another embodiment, a data processing system is provided comprising a network interface device according to the first embodiment and a host device, wherein the data processing system includes at least one controller configured to perform a compilation process to enable the first function to be executed in the hardware module.

いくつかの実施形態では、少なくとも1つのコントローラは、ネットワークインターフェースデバイス、およびホストデバイスのうちの1つまたは複数によって提供される。 In some embodiments, at least one controller is provided by one or more of the network interface device and host devices.

いくつかの実施形態では、コンパイルプロセスは、第1の機能を表現するコンピュータプログラムがホストデバイスのカーネルモードにおいて安全に実行されるという、少なくとも1つのコントローラによる決定に応答して実行される。 In some embodiments, the compilation process is performed in response to a decision by at least one controller that a computer program representing a first function is to be safely executed in kernel mode on the host device.

いくつかの実施形態では、少なくとも1つのコントローラは、複数の処理ユニットのうちの少なくともいくつかの各々を、第1のデータ処理パイプラインの特定の順序で、コンピュータコード命令のシーケンスによって表される複数の動作からの少なくとも1つの動作を実行するために割り当てることによってコンパイルプロセスを実行するように構成され、複数の動作は、複数のデータパケットのうちの1つまたは複数に対する第1の機能を提供する。 In some embodiments, at least one controller is configured to perform the compilation process by assigning each of at least some of a plurality of processing units to perform at least one operation from a plurality of operations represented by a sequence of computer code instructions, in a specific order of a first data processing pipeline, wherein the plurality of operations provide a first function to one or more of a plurality of data packets.

いくつかの実施形態では、少なくとも1つのコントローラは、コンパイルプロセスの完了前に、ネットワークインターフェースデバイスのさらなる回路に、データパケットに対して第1の機能を実行させるための第1の命令を送信し、上記コンパイルプロセスの完了後に、上記ハードウェアモジュールに、データパケットに対する第1の機能の実行を開始させるための第2の命令を送信するように構成される。 In some embodiments, at least one controller is configured to send a first instruction to further circuitry of the network interface device to perform a first function on data packets before the compilation process is complete, and to send a second instruction to the hardware module to begin performing the first function on data packets after the compilation process is complete.

別の態様によれば、ネットワークインターフェースデバイスにおける実施のための方法が提供され、本方法は、第1のインターフェースにおいて、複数のデータパケットを受信するステップと、ハードウェアモジュールの複数の処理ユニットのうちの少なくともいくつかを相互接続して、上記複数のデータパケットのうちの1つまたは複数を処理して上記複数のデータパケットのうちの上記1つまたは複数に対して第1の機能を実行するための第1のデータ処理パイプラインを提供するように、ハードウェアモジュールを構成するステップとを含み、各処理ユニットは、単一のステップにおいて実行可能な所定のタイプの動作に関連付けられ、上記複数の処理ユニットのうちの少なくともいくつかは、異なる所定のタイプの動作に関連付けられる。 In another embodiment, a method for implementation in a network interface device is provided, the method comprising the steps of: receiving a plurality of data packets on a first interface; and configuring a hardware module to interconnect at least some of a plurality of processing units of the hardware module to provide a first data processing pipeline for processing one or more of the plurality of data packets and performing a first function on one or more of the plurality of data packets, wherein each processing unit is associated with a predetermined type of operation that can be performed in a single step, and at least some of the plurality of processing units are associated with different predetermined types of operations.

別の態様によれば、ネットワークインターフェースデバイスに方法を実施させるためのプログラム命令を含む非一時的コンピュータ可読媒体が提供され、方法は、第1のインターフェースにおいて、複数のデータパケットを受信するステップと、ハードウェアモジュールの複数の処理ユニットのうちの少なくともいくつかを相互接続して、上記複数のデータパケットのうちの1つまたは複数を処理して上記複数のデータパケットのうちの上記1つまたは複数に対して第1の機能を実行するための第1のデータ処理パイプラインを提供するように、ハードウェアモジュールを構成するステップとを含み、各処理ユニットは、単一のステップにおいて実行可能な所定のタイプの動作に関連付けられ、上記複数の処理ユニットのうちの少なくともいくつかは、異なる所定のタイプの動作に関連付けられる。 In another embodiment, a non-temporary computer-readable medium is provided containing program instructions for causing a network interface device to carry out the method, the method comprising the steps of: receiving a plurality of data packets at a first interface; and configuring a hardware module to interconnect at least some of a plurality of processing units of the hardware module to provide a first data processing pipeline for processing one or more of the plurality of data packets and performing a first function on one or more of the plurality of data packets, each processing unit being associated with a predetermined type of operation that can be performed in a single step, and at least some of the plurality of processing units being associated with different predetermined types of operations.

別の態様によれば、処理ユニットが提供され、処理ユニットは、ネットワークインターフェースデバイスにおいて受信される第1のデータパケットに対して少なくとも1つの所定の動作を実行し、第1のデータパケットに関して第1のさらなる少なくとも1つの所定の動作を行うように構成された第1のさらなる処理ユニットに接続され、上記第1のデータパケットに関して第2のさらなる少なくとも1つの所定の動作を行うように構成された第2のさらなる処理ユニットに接続され、第1のさらなる処理ユニットから、第1のさらなる少なくとも1つの所定の動作の結果を受信し、第1のさらなる少なくとも1つの所定の動作の結果に応じて少なくとも1つの所定の動作を実行し、上記第2のさらなる少なくとも1つの所定の動作における処理のために、少なくとも1つの所定の動作の結果を第2のさらなる処理ユニットに送信するように構成されている。 In another embodiment, a processing unit is provided, which is connected to a first further processing unit configured to perform at least one predetermined operation on a first data packet received by a network interface device, and to perform at least one further predetermined operation on the first data packet; and is connected to a second further processing unit configured to perform at least one further predetermined operation on the first data packet; the processing unit is configured to receive the result of the first further predetermined operation from the first further processing unit, perform at least one predetermined operation in accordance with the result of the first further predetermined operation, and transmit the result of at least one predetermined operation to the second further processing unit for processing in the second further predetermined operation.

いくつかの実施形態では、処理ユニットは、少なくとも1つの所定の動作をタイミング調整するためのクロック信号を受信するように構成され、処理ユニットは、クロック信号の少なくとも1つのサイクルにおいて少なくとも1つの所定の動作を実行するように構成される。 In some embodiments, the processing unit is configured to receive a clock signal for timing at least one predetermined operation, and the processing unit is configured to perform at least one predetermined operation in at least one cycle of the clock signal.

いくつかの実施形態では、処理ユニットは、クロック信号の単一サイクルにおいて少なくとも1つの所定の動作を実行するように構成される。 In some embodiments, the processing unit is configured to perform at least one predetermined operation within a single cycle of the clock signal.

いくつかの実施形態では、少なくとも1つの所定の動作、第1のさらなる少なくとも1つの所定の動作、および第2のさらなる少なくとも1つの所定の動作は、ネットワークインターフェースデバイスにおいて受信される第1のデータパケットに対して実行される機能の一部を形成する。 In some embodiments, at least one predetermined operation, a first further predetermined operation, and a second further predetermined operation form part of a function performed on a first data packet received by the network interface device.

いくつかの実施形態では、第1のデータパケットは、ホストデバイスから受信され、ネットワークインターフェースデバイスは、ホストデバイスをネットワークにインターフェースするように構成される。 In some embodiments, the first data packet is received from a host device, and the network interface device is configured to interface the host device to the network.

いくつかの実施形態では、第1のデータパケットはネットワークから受信され、ネットワークインターフェースデバイスは、ホストデバイスをネットワークにインターフェースするように構成される。 In some embodiments, the first data packet is received from the network, and the network interface device is configured to interface the host device to the network.

いくつかの実施形態では、機能はフィルタリング機能である。
いくつかの実施形態では、フィルタリング機能は、拡張Berkleyパケットフィルタ機能である。
In some embodiments, the function is filtering.
In some embodiments, the filtering function is an extended Berkley packet filtering function.

いくつかの実施形態では、処理ユニットは、少なくとも1つの所定の動作を実行するように構成された特定用途向け集積回路を含む。 In some embodiments, the processing unit includes an application-specific integrated circuit configured to perform at least one predetermined operation.

いくつかの実施形態では、処理ユニットは、少なくとも1つの所定の動作を実行するように構成されたデジタル回路と、実行される少なくとも1つの所定の動作に関連する状態を記憶するメモリとを備える。 In some embodiments, the processing unit comprises a digital circuit configured to perform at least one predetermined operation, and a memory for storing the state associated with the at least one predetermined operation being performed.

いくつかの実施形態では、処理ユニットは、第1のさらなる処理ユニットおよび第2のさらなる処理ユニットにアクセス可能なメモリにアクセスするように構成され、メモリは、第1のデータパケットに関連付けられた状態を記憶するように構成され、少なくとも1つの所定の動作は、メモリに記憶された状態を変更することを含む。 In some embodiments, the processing unit is configured to access a memory accessible to a first and a second further processing unit, the memory is configured to store the state associated with the first data packet, and at least one predetermined operation includes modifying the state stored in the memory.

いくつかの実施形態では、処理ユニットは、第1のクロックサイクル中にメモリから上記状態の値を読み出し、第2のさらなる処理ユニットによる修正のために上記値を第2のさらなる処理ユニットに提供するように構成され、処理ユニットは、第1のクロックサイクル後の第2のクロックサイクル中にストールするように構成される。 In some embodiments, the processing unit is configured to read the state value from memory during a first clock cycle and provide the value to a second further processing unit for modification by the second further processing unit, and the processing unit is configured to stall during a second clock cycle following the first clock cycle.

いくつかの実施形態では、少なくとも1つの所定の動作は、ネットワークインターフェースデバイスのメモリから第1のデータパケットをロードすること、第1のデータパケットをネットワークインターフェースデバイスのメモリに記憶すること、および、第1のデータパケットに関して実行されるべきアクションを決定するためにルックアップテーブル内のルックアップを実行することのうちの少なくとも1つを含む。 In some embodiments, at least one predetermined operation includes at least one of the following: loading a first data packet from the memory of a network interface device; storing the first data packet in the memory of the network interface device; and performing a lookup in a lookup table to determine an action to be performed with respect to the first data packet.

別の態様によれば、処理ユニットにおいて実施される方法が提供され、方法は、ネットワークインターフェースデバイスにおいて受信される第1のデータパケットに関して少なくとも1つの所定の動作を実行するステップと、第1のデータパケットに関して第1のさらなる少なくとも1つの所定の動作を行うように構成された第1のさらなる処理ユニットに接続するステップと、上記第1のデータパケットに関して第2のさらなる少なくとも1つの所定の動作を行うように構成された第2のさらなる処理ユニットに接続するステップと、第1のさらなる処理ユニットから、第1のさらなる少なくとも1つの所定の動作の結果を受信するステップと、第1のさらなる少なくとも1つの所定の動作の結果に応じて少なくとも1つの所定の動作を実行するステップと、上記第2のさらなる少なくとも1つの所定の動作における処理のために、少なくとも1つの所定の動作の結果を第2のさらなる処理ユニットに送信するステップとを含む。 In another embodiment, a method is provided to be implemented in a processing unit, the method comprising: performing at least one predetermined operation with respect to a first data packet received by a network interface device; connecting to a first further processing unit configured to perform at least one further predetermined operation with respect to the first data packet; connecting to a second further processing unit configured to perform at least one further predetermined operation with respect to the first data packet; receiving the result of the first further predetermined operation from the first further processing unit; performing at least one predetermined operation in accordance with the result of the first further predetermined operation; and transmitting the result of at least one predetermined operation to the second further processing unit for processing in the second further predetermined operation.

別の態様によれば、処理ユニットによって実行されると、処理ユニットに方法を実施させる命令を記憶しているコンピュータ可読非一時的記憶デバイスが提供され、方法は、ネットワークインターフェースデバイスにおいて受信される第1のデータパケットに関して少なくとも1つの所定の動作を実行するステップと、第1のデータパケットに関して第1のさらなる少なくとも1つの所定の動作を行うように構成された第1のさらなる処理ユニットに接続するステップと、上記第1のデータパケットに関して第2のさらなる少なくとも1つの所定の動作を行うように構成された第2のさらなる処理ユニットに接続するステップと、第1のさらなる処理ユニットから、第1のさらなる少なくとも1つの所定の動作の結果を受信するステップと、第1のさらなる少なくとも1つの所定の動作の結果に応じて少なくとも1つの所定の動作を実行するステップと、上記第2のさらなる少なくとも1つの所定の動作における処理のために、少なくとも1つの所定の動作の結果を第2のさらなる処理ユニットに送信するステップとを含む。 In another embodiment, a computer-readable non-temporary storage device is provided that, when executed by a processing unit, stores instructions causing the processing unit to perform the method. The method includes the steps of: performing at least one predetermined operation with respect to a first data packet received in a network interface device; connecting to a first further processing unit configured to perform at least one further predetermined operation with respect to the first data packet; connecting to a second further processing unit configured to perform at least one further predetermined operation with respect to the first data packet; receiving the result of the first further predetermined operation from the first further processing unit; performing at least one predetermined operation in response to the result of the first further predetermined operation; and transmitting the result of at least one predetermined operation to the second further processing unit for processing in the second further predetermined operation.

別の態様によれば、ホストデバイスをネットワークにインターフェースするためのネットワークインターフェースデバイスが提供され、ネットワークインターフェースデバイスは、少なくとも1つのコントローラと、データパケットを受信するように構成されている第1のインターフェースと、第1のインターフェースにおいて受信されるデータパケットに対して第1の機能を実行するように構成された第1の回路と、第2の回路とを備え、第1の回路は、第1の機能が第2の回路において実行されるようにするためのコンパイルプロセス中に、第1のインターフェースにおいて受信されるデータパケットに対して第1の機能を実行するように構成され、少なくとも1つのコントローラは、第1の機能が第2の回路において実行されるようにするためのコンパイルプロセスが完了したと決定し、上記決定に応答して、第1のインターフェースにおいて受信されるデータパケットに対する第1の機能の実行を開始するように第2の回路を制御するように構成される。 In another embodiment, a network interface device is provided for interface a host device to a network, the network interface device comprising at least one controller, a first interface configured to receive data packets, a first circuit configured to perform a first function on data packets received on the first interface, and a second circuit, wherein the first circuit is configured to perform the first function on data packets received on the first interface during a compilation process to enable the first function to be performed on the second circuit, and at least one controller is configured to determine that the compilation process to enable the first function to be performed on the second circuit is complete, and in response to this determination, to control the second circuit to begin performing the first function on data packets received on the first interface.

いくつかの実施形態では、少なくとも1つのコントローラは、第1の機能が第2の回路において実行されるようにするためのコンパイルプロセスが完了したという上記決定に応答して、第1のインターフェースにおいて受信されるデータパケットに対する第1の機能の実行を停止するように第1の回路を制御するように構成される。 In some embodiments, at least one controller is configured to control the first circuit to stop executing the first function on data packets received at the first interface, in response to the above-mentioned decision that the compilation process for executing the first function in the second circuit has been completed.

いくつかの実施形態では、少なくとも1つのコントローラは、第1の機能が第2の回路において実行されるようにするためのコンパイルプロセスが完了したという上記決定に応答して、第1のインターフェースにおいて受信される第1のデータフローのデータパケットに対する第1の機能の実行を開始し、第1のデータフローのデータパケットに対する第1の機能の実行を停止するように第1の回路を制御するように構成されている。 In some embodiments, at least one controller is configured to control the first circuit to start executing the first function on data packets of the first data flow received at the first interface, and to stop executing the first function on data packets of the first data flow, in response to the above-mentioned decision that the compilation process for executing the first function in the second circuit has been completed.

いくつかの実施形態では、第1の回路は、少なくとも1つの中央処理装置を備え、少なくとも1つの中央処理装置の各々は、第1のインターフェースにおいて受信される少なくとも1つのデータパケットに対して第1の機能を実行するように構成される。 In some embodiments, the first circuit comprises at least one central processing unit, each of which is configured to perform a first function for at least one data packet received at the first interface.

いくつかの実施形態では、第2の回路は、第1のインターフェースにおいて受信されるデータパケットに対する第1の機能の実行を開始するように構成されたフィールドプログラマブルゲートアレイを備える。 In some embodiments, the second circuit comprises a field-programmable gate array configured to initiate the execution of a first function for data packets received at the first interface.

いくつかの実施形態では、第2の回路は、複数の処理ユニットを備えるハードウェアモジュールを備え、各処理ユニットは少なくとも1つの所定の動作に関連付けられ、第1のインターフェースは、第1のデータパケットを受信するように構成され、ハードウェアモジュールは、第1の機能が第2の回路において実行されるためのコンパイルプロセスの後に、複数の処理ユニットの少なくともいくつかに、第1のデータパケットに対して第1の機能を実行するように、特定の順序でそれらの関連付けられる少なくとも1つの所定の動作を実行させるように構成される。 In some embodiments, the second circuit comprises a hardware module having a plurality of processing units, each processing unit associated with at least one predetermined operation, the first interface configured to receive a first data packet, and the hardware module configured to cause at least some of the plurality of processing units to perform their associated at least one predetermined operation in a specific order, after a compilation process for the first function to be executed in the second circuit, in order to perform the first function on the first data packet.

いくつかの実施形態では、第1の回路は、複数の処理ユニットを備えるハードウェアモジュールを備え、各処理ユニットは少なくとも1つの所定の動作に関連付けられ、第1のインターフェースは、第1のデータパケットを受信するように構成され、ハードウェアモジュールは、第1の機能が第2の回路において実行されるようにするためのコンパイルプロセス中に、複数の処理ユニットの少なくともいくつかに、第1のデータパケットに対して第1の機能を実行するように、特定の順序でそれらの関連付けられる少なくとも1つの所定の動作を実行させるように構成される。 In some embodiments, the first circuit comprises a hardware module having a plurality of processing units, each processing unit associated with at least one predetermined operation, and the first interface is configured to receive first data packets. The hardware module is configured to cause at least some of the plurality of processing units to perform their associated at least one predetermined operation in a specific order so that the first function is executed in the second circuit.

いくつかの実施形態では、少なくとも1つのコントローラは、第2の回路によって実行されるように第1の機能をコンパイルするためのコンパイルプロセスを実行するように構成される。 In some embodiments, at least one controller is configured to perform a compilation process for compiling the first function to be executed by a second circuit.

いくつかの実施形態では、少なくとも1つのコントローラは、コンパイルプロセスの完了前に、第1のインターフェースにおいて受信されるデータパケットに対して第1の機能を実行するように第1の回路に命令するように構成される。 In some embodiments, at least one controller is configured to instruct a first circuit to perform a first function on data packets received at a first interface before the compilation process is complete.

いくつかの実施形態では、第2の回路によって実行されるように第1の機能をコンパイルするためのコンパイルプロセスは、ホストデバイスによって実行され、少なくとも1つのコントローラは、ホストデバイスからのコンパイルプロセスの完了の指示の受信に応答して、コンパイルプロセスが完了したと決定するように構成される。 In some embodiments, the compilation process for compiling the first function to be executed by a second circuit is performed by a host device, and at least one controller is configured to determine that the compilation process is complete in response to receiving an instruction from the host device indicating the completion of the compilation process.

いくつかの実施形態では、第1のインターフェースにおいて受信されるデータパケットを処理するための処理パイプラインを備え、処理パイプラインは、第1のインターフェースにおいて受信されるデータパケットに対して複数の機能のうちの1つを各々が実行するように構成された複数の構成要素を備え、複数の構成要素のうちの第1の構成要素は、第1の回路によって提供されるときに第1の機能を提供するように構成され、複数の構成要素のうちの第2の構成要素は、第2の少なくとも1つの処理ユニットによって提供されるときに第1の機能を提供するように構成される。 In some embodiments, a processing pipeline is provided for processing data packets received at a first interface, the processing pipeline comprising a plurality of components, each configured to perform one of a plurality of functions on the data packets received at the first interface, the first of the plurality of components configured to provide a first function when provided by a first circuit, and the second of the plurality of components configured to provide a first function when provided by at least one second processing unit.

いくつかの実施形態では、少なくとも1つのコントローラは、複数の構成要素のうちの第2の構成要素を処理パイプラインに挿入することによって、第1のインターフェースにおいて受信されるデータパケットに対する第1の機能の実行を開始するように第2の回路を制御するように構成される。 In some embodiments, at least one controller is configured to control a second circuit to initiate the execution of a first function on data packets received at the first interface by inserting a second component of a plurality of components into the processing pipeline.

いくつかの実施形態では、少なくとも1つのコントローラは、第1の機能が第2の回路において実行されるようにするためのコンパイルプロセスが完了したという上記決定に応答して、処理パイプラインから複数の構成要素のうちの第1の構成要素を除去することによって、第1のインターフェースにおいて受信されるデータパケットに対する第1の機能の実行を停止するように第1の回路を制御するように構成される。 In some embodiments, at least one controller is configured to control the first circuit to stop executing the first function on data packets received at the first interface by removing the first component of a plurality of components from the processing pipeline in response to the above-mentioned decision that the compilation process for executing the first function at the second circuit has been completed.

いくつかの実施形態では、少なくとも1つのコントローラは、複数の構成要素のうちの第2の構成要素を作動させるために処理パイプラインを通じて制御メッセージを送信することによって、第1のインターフェースにおいて受信されるデータパケットに対する第1の機能の実行を開始するように第2の回路を制御するように構成される。 In some embodiments, at least one controller is configured to control a second circuit to initiate the execution of a first function on data packets received at the first interface by sending a control message through a processing pipeline to activate a second component of a plurality of components.

いくつかの実施形態では、少なくとも1つのコントローラは、第1の機能が第2の回路において実行されるようにするためのコンパイルプロセスが完了したという上記決定に応答して、複数の構成要素のうちの第2の構成要素を機能停止するために処理パイプラインを介して制御メッセージを送信することによって、第1のインターフェースにおいて受信されるデータパケットに対する第1の機能の実行を停止するように第1の回路を制御するように構成される。 In some embodiments, at least one controller is configured to control the first circuit to stop executing the first function on data packets received at the first interface by sending a control message via a processing pipeline to deactivate the second component of a plurality of components, in response to the above-mentioned decision that the compilation process for executing the first function in the second circuit has been completed.

いくつかの実施形態では、複数の構成要素のうちの第1の構成要素は、処理パイプラインを通過するデータパケット第1のデータフローに対して第1の機能を提供するように構成され、複数の構成要素のうちの第2の構成要素は、処理パイプラインを通過する第2のデータフローのデータパケットに対して第1の機能を提供するように構成される。 In some embodiments, a first component among the multiple components is configured to provide a first function to a first data flow of data packets passing through the processing pipeline, and a second component among the multiple components is configured to provide a first function to data packets of a second data flow passing through the processing pipeline.

いくつかの実施形態では、第1の機能は、データパケットをフィルタリングすることを含む。 In some embodiments, the first function includes filtering data packets.

いくつかの実施形態では、第1のインターフェースは、ネットワークからデータパケットを受信するように構成される。 In some embodiments, the first interface is configured to receive data packets from the network.

いくつかの実施形態では、第1のインターフェースは、ホストデバイスからデータパケットを受信するように構成される。 In some embodiments, the first interface is configured to receive data packets from the host device.

いくつかの実施形態では、第2の回路の第1の機能のコンパイル時間は、第1の回路の第1の機能のコンパイル時間よりも長い。 In some embodiments, the compilation time for the first function of the second circuit is longer than the compilation time for the first function of the first circuit.

別の態様によれば、方法が提供され、方法は、ネットワークインターフェースデバイスの第1のインターフェースにおいてデータパケットを受信するステップと、ネットワークインターフェースデバイスの第1の回路において、第1のインターフェースにおいて受信されるデータパケットに対して第1の機能を実行するステップとを含み、第1の回路は、第1の機能が第2の回路において実行されるようにするためのコンパイルプロセス中に、第1のインターフェースにおいて受信されるデータパケットに対して第1の機能を実行するように構成され、方法は、第1の機能が第2の回路において実行されるようにするためのコンパイルプロセスが完了したと決定するステップと、上記決定に応答して、第1のインターフェースにおいて受信されるデータパケットに対する第1の機能の実行を開始するようにネットワークインターフェースデバイスの第2の回路を制御するステップとを含む。 In another embodiment, a method is provided, comprising the steps of: receiving a data packet on a first interface of a network interface device; and performing a first function on the data packet received on the first interface in a first circuit of the network interface device, wherein the first circuit is configured to perform the first function on the data packet received on the first interface during a compilation process for the first function to be performed in a second circuit; and the method comprises the steps of: determining that the compilation process for the first function to be performed in the second circuit is complete; and, in response to the determination, controlling the second circuit of the network interface device to begin performing the first function on the data packet received on the first interface.

別の態様によれば、データ処理システムに方法を実施させるためのプログラム命令を含む非一時的コンピュータ可読媒体が提供され、方法は、ネットワークインターフェースデバイスの第1のインターフェースにおいてデータパケットを受信するステップと、ネットワークインターフェースデバイスの第1の回路において、第1のインターフェースにおいて受信されるデータパケットに対して第1の機能を実行するステップとを含み、第1の回路は、第1の機能が第2の回路において実行されるようにするためのコンパイルプロセス中に、第1のインターフェースにおいて受信されるデータパケットに対して第1の機能を実行するように構成され、方法は、第1の機能が第2の回路において実行されるようにするためのコンパイルプロセスが完了したと決定するステップと、上記決定に応答して、第1のインターフェースにおいて受信されるデータパケットに対する第1の機能の実行を開始するようにネットワークインターフェースデバイスの第2の回路を制御するステップとを含む。 In another embodiment, a non-temporary computer-readable medium is provided containing program instructions for causing a data processing system to carry out a method, the method comprising the steps of: receiving a data packet at a first interface of a network interface device; and performing a first function on the data packet received at the first interface in a first circuit of the network interface device, the first circuit being configured to perform the first function on the data packet received at the first interface during a compilation process for the first function to be performed in a second circuit, the method comprising the steps of: determining that the compilation process for the first function to be performed in the second circuit is complete; and, in response to the determination, controlling the second circuit of the network interface device to begin performing the first function on the data packet received at the first interface.

別の態様によれば、非一時的コンピュータ可読媒体が提供され、媒体は、データ処理システムに、ネットワークインターフェースデバイスの第2の回路によって実行されるように第1の機能をコンパイルするためのコンパイルプロセスを実行するステップと、上記コンパイルプロセスの完了前に、ネットワークインターフェースデバイスの第1の回路に、ネットワークインターフェースデバイスの第1のインターフェースにおいて受信されるデータパケットに関して第1の機能を実行させるための第1の命令を送信するステップと、第2の回路に、コンパイルプロセスの完了後に、第1のインターフェースにおいて受信されるデータパケットに対する第1の機能の実行を開始させるための第2の命令を送信するステップとを実施させるためのプログラム命令を含む。 In another embodiment, a non-temporary computer-readable medium is provided, the medium including program instructions for causing a data processing system to perform a compilation process for compiling a first function to be executed by a second circuit of a network interface device; before the completion of the compilation process, sending a first instruction to the first circuit of the network interface device to perform the first function with respect to data packets received at the first interface of the network interface device; and after the completion of the compilation process, sending a second instruction to the second circuit to initiate the execution of the first function with respect to data packets received at the first interface.

いくつかの実施形態では、非一時的コンピュータ可読媒体は、データ処理システムに、第1の回路によって実行されるように第1の機能をコンパイルするためのさらなるコンパイルプロセスを実行させるためのプログラム命令を含み、コンパイルプロセスにかかる時間は、さらなるコンパイルプロセスにかかる時間よりも長い。 In some embodiments, the non-temporary computer-readable medium includes program instructions causing a data processing system to perform a further compilation process to compile a first function to be executed by a first circuit, wherein the time required for the compilation process is longer than the time required for the further compilation process.

いくつかの実施形態では、データ処理システムは、ホストデバイスを備え、ネットワークインターフェースデバイスは、ホストデバイスをネットワークとインターフェースするように構成される。 In some embodiments, the data processing system includes a host device, and the network interface device is configured to interface the host device with a network.

いくつかの実施形態では、データ構成システムは、ネットワークインターフェースデバイスを備え、ネットワークインターフェースデバイスは、ホストデバイスをネットワークとインターフェースするように構成される。 In some embodiments, the data configuration system includes a network interface device, which is configured to interface a host device with the network.

いくつかの実施形態では、データ処理システムは、ホストデバイスと、ネットワークインターフェースデバイスとを備え、ネットワークインターフェースデバイスは、ホストデバイスをネットワークとインターフェースするように構成される。 In some embodiments, the data processing system comprises a host device and a network interface device, the network interface device being configured to interface the host device with a network.

いくつかの実施形態では、第1の機能は、ネットワークから第1のインターフェースにおいて受信されるデータパケットをフィルタリングすることを含む。 In some embodiments, the first function includes filtering data packets received from the network on the first interface.

いくつかの実施形態では、非一時的コンピュータ可読媒体は、コンパイルプロセスの完了後に、第1の回路に、第1のインターフェースにおいて受信されるデータパケットに対する機能の実行を停止させる第3の命令を送信することを、データ処理システムに実行させるための構成プログラム命令を含む。 In some embodiments, the non-temporary computer-readable medium includes a configuration program instruction that causes a data processing system to transmit a third instruction to a first circuit, after the compilation process is complete, causing the first circuit to cease performing a function on data packets received at the first interface.

いくつかの実施形態では、非一時的コンピュータ可読媒体は、第2の回路に、第1のデータフローのデータパケットに対して第1の機能を実行させる命令を送信することと、第1の回路に、第1のデータフローのデータパケットに対する第1の機能の実行を停止させる命令を送信することとを、データ処理システムに実行させるためのプログラム命令を含む。 In some embodiments, the non-temporary computer-readable medium includes program instructions causing a data processing system to transmit an instruction to a second circuit to perform a first function on data packets of a first data flow, and an instruction to the first circuit to stop performing the first function on data packets of the first data flow.

いくつかの実施形態では、第1の回路は、少なくとも1つの中央処理装置を備え、第2のコンパイルプロセスの完了前に、少なくとも1つの中央処理装置の各々は、第1のインターフェースにおいて受信される少なくとも1つのデータパケットに対して第1の機能を実行するように構成される。 In some embodiments, the first circuit comprises at least one central processing unit, and before the completion of the second compilation process, each of the at least one central processing unit is configured to perform a first function on at least one data packet received at the first interface.

いくつかの実施形態では、第2の回路は、第1のインターフェースにおいて受信されるデータパケットに対する第1の機能の実行を開始するように構成されたフィールドプログラマブルゲートアレイを備える。 In some embodiments, the second circuit comprises a field-programmable gate array configured to initiate the execution of a first function for data packets received at the first interface.

いくつかの実施形態では、第2の回路は、複数の処理ユニットを備えるハードウェアモジュールを備え、各処理ユニットは少なくとも1つの所定の動作に関連付けられ、第1のインターフェースにおいて受信されるデータパケットは第1のデータパケットを含み、ハードウェアモジュールは、第2のコンパイルプロセスの完了後に、第1のデータパケットに対するそのそれぞれの少なくとも1つの動作を実施する複数の処理ユニットの各処理ユニット少なくともいくつかによって、第1のデータパケットに対して第1の機能を実行するように構成される。 In some embodiments, the second circuit comprises a hardware module having a plurality of processing units, each processing unit associated with at least one predetermined operation, data packets received at the first interface include a first data packet, and the hardware module is configured to perform a first function on the first data packet after the completion of the second compilation process, by at least some of the processing units of the plurality of processing units, each performing its respective at least one operation on the first data packet.

いくつかの実施形態では、第1の回路は、データパケットに対して第1の機能を提供するように構成されている複数の処理ユニットを備えるハードウェアモジュールを備え、各処理ユニットは少なくとも1つの所定の動作に関連付けられ、第1のインターフェースにおいて受信されるデータパケットは第1のデータパケットを含み、ハードウェアモジュールは、第2のコンパイルプロセスの完了前に、第1のデータパケットに対するそのそれぞれの少なくとも1つの動作を実施する複数の処理ユニットのうちの少なくともいくつかの各処理ユニットによって、第1のデータパケットに対して第1の機能を実行するように構成される。 In some embodiments, the first circuit comprises a hardware module having a plurality of processing units configured to provide a first function to a data packet, each processing unit associated with at least one predetermined operation, the data packet received at the first interface includes a first data packet, and the hardware module is configured to perform the first function to the first data packet by at least some of the plurality of processing units, each performing its respective at least one operation on the first data packet, before the completion of the second compilation process.

いくつかの実施形態では、コンパイルプロセスは、コンピュータコード命令のシーケンス内の複数の処理ステージのうちの1つに関連付けられる少なくとも1つの動作を特定の順序で実行するために、第2の回路の複数の処理ユニットの各々を割り当てることを含む。 In some embodiments, the compilation process includes assigning each of a plurality of processing units of a second circuit to execute, in a specific order, at least one operation associated with one of a plurality of processing stages in a sequence of computer code instructions.

いくつかの実施形態では、第1の回路によって提供される第1の機能は、第1のインターフェースにおいて受信されるデータパケットを処理するための処理パイプラインの構成要素として提供され、第2の回路によって提供される第1の機能は、処理パイプラインの構成要素として提供される。 In some embodiments, the first function provided by the first circuit is provided as a component of a processing pipeline for processing data packets received at the first interface, and the first function provided by the second circuit is provided as a component of a processing pipeline.

いくつかの実施形態では、第1の命令は、複数の構成要素のうちの第1の構成要素が処理パイプラインに挿入されるようにするように構成された命令を含む。 In some embodiments, the first instruction includes an instruction configured such that the first component of a plurality of components is inserted into the processing pipeline.

いくつかの実施形態では、第2の命令は、複数の構成要素のうちの第2の構成要素が処理パイプラインに挿入されるようにするように構成された命令を含む。 In some embodiments, the second instruction includes an instruction configured such that the second component of a plurality of components is inserted into the processing pipeline.

いくつかの実施形態では、非一時的コンピュータ可読媒体は、コンパイルプロセスの完了後に、第1の回路に、第1のインターフェースにおいて受信されるデータパケットに対する第1の機能の実行を停止させる第3の命令を送信することを、データ処理システムに実行させるための構成プログラム命令を含み、第3の命令は、複数の構成要素のうちの第1の構成要素が処理パイプラインから除去されるようにするように構成された命令を含む。 In some embodiments, the non-temporary computer-readable medium includes a configuration program instruction causing a data processing system to send a third instruction to a first circuit after the completion of the compilation process, which causes the first circuit to stop performing a first function on data packets received at the first interface, wherein the third instruction includes an instruction configured such that the first component of a plurality of components is removed from the processing pipeline.

いくつかの実施形態では、第1の命令は、複数の構成要素のうちの第2の構成要素を作動させるために処理パイプラインを通じて送信される制御メッセージを含む。 In some embodiments, the first instruction includes a control message transmitted through the processing pipeline to activate a second component among a plurality of components.

いくつかの実施形態では、第2の命令は、複数の構成要素のうちの第2の構成要素を作動させるために処理パイプラインを通じて送信される制御メッセージを含む。 In some embodiments, the second instruction includes a control message transmitted through the processing pipeline to activate a second component among a plurality of components.

いくつかの実施形態では、非一時的コンピュータ可読媒体は、コンパイルプロセスの完了後に、第1の回路に、第1のインターフェースにおいて受信されるデータパケットに対する機能の実行を停止させる第3の命令を送信することを、データ処理システムに実行させるためのプログラム命令を含み、第3の命令は、複数の構成要素のうちの第1の構成要素を機能停止するための処理パイプラインを介した制御メッセージを含む。 In some embodiments, the non-transient computer-readable medium includes a program instruction causing a data processing system to send a third instruction to a first circuit after the completion of the compilation process, which causes the first circuit to stop performing a function on data packets received at the first interface, the third instruction including a control message via a processing pipeline for deactivating the first component of a plurality of components.

別の態様によれば、少なくとも1つのプロセッサと、コンピュータプログラムコードを含む少なくとも1つのメモリとを備えるデータ処理システムが提供され、少なくとも1つのメモリおよびコンピュータプログラムコードは、少なくとも1つのプロセッサを用いて、データ処理システムに、ネットワークインターフェースデバイスの第2の回路によって実行されるように機能をコンパイルするためのコンパイルプロセスを実行するステップと、コンパイルプロセスの完了前に、ネットワークインターフェースデバイスの第1の回路に、ネットワークインターフェースデバイスの第1のインターフェースにおいて受信されるデータパケットに対して機能を実行するように命令するステップと、第2の少なくとも1つの処理ユニットに、第2のコンパイルプロセスの完了後に、第1のインターフェースにおいて受信されるデータパケットに対する機能の実行を開始するように命令するステップとを行わせるように構成されている。 In another embodiment, a data processing system is provided comprising at least one processor and at least one memory containing computer program code. The at least one memory and the computer program code are configured to use at least one processor to cause the data processing system to perform the following steps: a compilation process for compiling functions to be executed by a second circuit of a network interface device; a step, before the completion of the compilation process, instructing a first circuit of the network interface device to execute functions on data packets received at the first interface of the network interface device; and a step, after the completion of the second compilation process, instructing at least one second processing unit to begin executing functions on data packets received at the first interface.

別の態様によれば、データ処理システムにおいて実施するための方法が提供され、方法は、ネットワークインターフェースデバイスの第2の回路によって実行されるように機能をコンパイルするためのコンパイルプロセスを実行するステップと、上記コンパイルプロセスの完了前に、ネットワークインターフェースデバイスの第1の回路に、ネットワークインターフェースデバイスの第1のインターフェースにおいて受信されるデータパケットに関して機能を実行させるための第1の命令を送信するステップと、第2の回路に、コンパイルプロセスの完了後に、第1のインターフェースにおいて受信されるデータパケットに対する機能の実行を開始させるための第2の命令を送信するステップとを含む。 In another embodiment, a method is provided for implementation in a data processing system, the method comprising: performing a compilation process to compile a function to be executed by a second circuit of a network interface device; before the completion of the compilation process, transmitting a first instruction to the first circuit of the network interface device to perform a function with respect to data packets received on the first interface of the network interface device; and after the completion of the compilation process, transmitting a second instruction to the second circuit to initiate the execution of a function with respect to data packets received on the first interface.

別の態様によれば、データ処理システムに、コンピュータコード命令のシーケンス内の複数の処理ステージのうちの1つに関連付けられる少なくとも1つの動作を特定の順序で実行するために、複数の処理ユニットの各々を割り当てさせるためのプログラム命令を含む非一時的コンピュータ可読媒体が提供され、複数の処理ステージは、ネットワークインターフェースデバイスの第1のインターフェースにおいて受信される第1のデータパケットに対する第1の機能を提供し、複数の処理ユニットの各々は、複数のタイプの処理のうちの1つを実行するように構成され、複数の処理ユニットのうちの少なくともいくつかは、異なるタイプの処理を実行するように構成され、複数の処理ユニットの各々について、割り当ては、処理ユニットがそれぞれの少なくとも1つの処理を実行するのに適したタイプの処理を実行するように構成されているという決定に応じて実行される。 In another embodiment, a data processing system is provided with a non-temporary computer-readable medium containing program instructions for assigning each of a plurality of processing units to perform, in a specific order, at least one operation associated with one of a plurality of processing stages in a sequence of computer code instructions, wherein the plurality of processing stages provide a first function to a first data packet received at a first interface of a network interface device, each of the plurality of processing units is configured to perform one of a plurality of types of processing, at least some of the plurality of processing units are configured to perform different types of processing, and for each of the plurality of processing units, the assignment is performed in accordance with the determination that the processing unit is configured to perform a type of processing suitable for performing each of its at least one operations.

いくつかの実施形態では、処理のタイプの各々は、複数のテンプレートのうちの1つによって定義される。 In some embodiments, each type of processing is defined by one of several templates.

いくつかの実施形態では、処理のタイプは、ネットワークインターフェースデバイスにおいて受信されるデータパケットにアクセスすること、ハードウェアモジュールのメモリに記憶されたルックアップテーブルにアクセスすること、データパケットからロードされたデータに対して論理演算を実行すること、および、ルックテーブルからロードされたデータに対して論理演算を実行することのうちの少なくとも1つを含む。 In some embodiments, the type of processing includes at least one of the following: accessing data packets received by a network interface device; accessing lookup tables stored in the memory of a hardware module; performing logical operations on data loaded from data packets; and performing logical operations on data loaded from lookup tables.

いくつかの実施形態では、複数の処理ユニットのうちの少なくともいくつかのうちの2つ以上は、ハードウェアモジュールの共通クロック信号に従ってそれらの関連する少なくとも1つの動作を実行するように構成される。 In some embodiments, at least two of several processing units are configured to perform at least one of their associated operations in accordance with a common clock signal of the hardware module.

いくつかの実施形態では、割り当ては、複数の処理ユニットの少なくともいくつかのうちの2つ以上の各々を、クロック信号によって定義される所定の時間長内にその関連する少なくとも1つの動作を実行するために割り当てることを含む。 In some embodiments, the assignment includes assigning each of at least two of a plurality of processing units to perform at least one of its associated operations within a predetermined time length defined by a clock signal.

いくつかの実施形態では、割り当ては、複数の処理ユニットのうちの少なくともいくつかのうちの2つ以上を、所定の時間長の期間内に第1のデータパケットにアクセスするために割り当てることを含む。 In some embodiments, the assignment includes assigning at least two of several processing units to access a first data packet within a predetermined time period.

いくつかの実施形態では、割り当ては、複数の処理ユニットの少なくともいくつかのうちの2つ以上の各々を、所定の時間長の期間の終了に応答して、それぞれの少なくとも1つの動作の結果を次の処理ユニットに転送するために割り当てることを含む。 In some embodiments, the assignment includes assigning each of two or more of at least some of a plurality of processing units to transfer the results of at least one operation of each to the next processing unit in response to the end of a predetermined time period.

いくつかの実施形態では、非一時的コンピュータ可読媒体は、データ処理システムに、複数のステージのうちの少なくともいくつかを単一のクロックサイクルを占有するように割り当てることを実行させるためのプログラム命令を含む。 In some embodiments, the non-temporary computer-readable medium includes program instructions causing a data processing system to perform the task of allocating at least some of a plurality of stages to occupy a single clock cycle.

いくつかの実施形態では、非一時的コンピュータ可読媒体は、データ処理システムに、複数の処理ユニットのうちの2つ以上を、並列に実行されるそれらの割り当てられた少なくとも1つの動作を実行するために割り当てさせるためのプログラム命令を含む。 In some embodiments, the non-temporary computer-readable medium includes program instructions causing a data processing system to allocate two or more of a plurality of processing units to perform at least one of their assigned operations, which are executed in parallel.

いくつかの実施形態では、ネットワークインターフェースデバイスは、複数の処理ユニットを備えるハードウェアモジュールを備える。 In some embodiments, the network interface device comprises a hardware module with multiple processing units.

いくつかの実施形態では、非一時的コンピュータ可読媒体は、データ処理システムに、割り当てを含むコンパイルプロセスを実施するステップと、コンパイルプロセスの完了前に、ネットワークインターフェースデバイスの回路に、第1のインターフェースにおいて受信されるデータパケットに対して第1の機能を実行させるための第1の命令を送信するステップと、複数の処理ユニットに、コンパイルプロセスの完了後に、第1のインターフェースにおいて受信されるデータパケットに対する第1の機能の実行を開始させるための第2の命令を送信するステップとを実施させるためのコンピュータプログラム命令を含む。 In some embodiments, the non-temporary computer-readable medium includes computer program instructions causing a data processing system to perform a compilation process including assignment; to transmit a first instruction to the circuitry of a network interface device to perform a first function on data packets received on a first interface, before the compilation process is completed; and to transmit a second instruction to a plurality of processing units to initiate the execution of a first function on data packets received on the first interface, after the compilation process is completed.

いくつかの実施形態では、非一時的コンピュータ可読媒体は含み、複数の処理ユニットの少なくともいくつかのうちの1つまたは複数について、割り当てられる少なくとも1つの動作は、ネットワークインターフェースデバイスのメモリから第1のデータパケットの少なくとも1つの値をロードすること、第1のデータパケットの少なくとも1つの値をネットワークインターフェースデバイスのメモリに記憶することと、および、第1のデータパケットに関して行われるべきアクションを決定するためにルックアップテーブル内のルックアップを行うことのうちの少なくとも1つを含む。 In some embodiments, a non-temporary computer-readable medium is included, and for one or more of at least some of the processing units, at least one assigned operation includes at least one of loading at least one value of a first data packet from the memory of the network interface device, storing at least one value of the first data packet in the memory of the network interface device, and performing a lookup in a lookup table to determine the action to be taken with respect to the first data packet.

いくつかの実施形態では、非一時的コンピュータ可読媒体は、データ処理システムに、第1のデータパケットに対して第1の機能を実行するように、特定の順序で複数の処理ユニット間で第1のデータパケットをルーティングするようにネットワークインターフェースデバイスのルーティングハードウェアを構成する命令を発行させるためのコンピュータプログラム命令を含む。 In some embodiments, the non-transient computer-readable medium includes computer program instructions causing a data processing system to issue instructions that configure the routing hardware of a network interface device to route a first data packet between multiple processing units in a specific order in order to perform a first function for the first data packet.

いくつかの実施形態では、複数の処理ユニットによって提供される第1の機能は、第1のインターフェースにおいて受信されるデータパケットを処理するための処理パイプラインの構成要素として提供される。 In some embodiments, the first function provided by multiple processing units is provided as a component of a processing pipeline for processing data packets received at the first interface.

いくつかの実施形態では、非一時的コンピュータ可読媒体は、データ処理システムに、構成要素が処理パイプラインに挿入されるようにする命令を発行させることによって、複数の処理ユニットに、第1のインターフェースにおいて受信されるデータパケットに対する第1の機能の実行を開始させるためのコンピュータプログラム命令を含む。 In some embodiments, the non-temporary computer-readable medium includes computer program instructions that cause a data processing system to issue instructions causing components to be inserted into a processing pipeline, thereby causing multiple processing units to initiate the execution of a first function on data packets received at a first interface.

いくつかの実施形態では、非一時的コンピュータ可読媒体は、データ処理システムに、構成要素が処理パイプライン内で作動されるようにする命令を発行させることによって、複数の処理ユニットに、第1のインターフェースにおいて受信されるデータパケットに対する第1の機能の実行を開始させるためのコンピュータプログラム命令を含む。 In some embodiments, the non-temporary computer-readable medium includes computer program instructions that cause a data processing system to issue instructions causing components to operate within a processing pipeline, thereby causing multiple processing units to initiate the execution of a first function on data packets received at a first interface.

いくつかの実施形態では、データ処理システムは、ホストデバイスを備え、ネットワークインターフェースデバイスは、ホストデバイスをネットワークとインターフェースするように構成される。 In some embodiments, the data processing system includes a host device, and the network interface device is configured to interface the host device with a network.

いくつかの実施形態では、データ処理システムはネットワークインターフェースデバイスを備える。 In some embodiments, the data processing system includes a network interface device.

いくつかの実施形態では、データ処理システムは、ネットワークインターフェースデバイスと、ホストデバイスとを備え、ネットワークインターフェースデバイスは、ホストデバイスをネットワークとインターフェースするように構成される。 In some embodiments, the data processing system comprises a network interface device and a host device, wherein the network interface device is configured to interface the host device with the network.

別の態様によれば、少なくとも1つのプロセッサと、コンピュータプログラムコードを含む少なくとも1つのメモリとを備えるデータ処理システムが提供され、少なくとも1つのメモリおよびコンピュータプログラムコードは、少なくとも1つのプロセッサを用いて、データ処理システムに、コンピュータコード命令のシーケンス内の複数の処理ステージのうちの1つに関連付けられる少なくとも1つの動作を特定の順序で実行するために、複数の処理ユニットの各々を割り当てさせるように構成されており、複数の処理ステージは、ネットワークインターフェースデバイスの第1のインターフェースにおいて受信される第1のデータパケットに対する第1の機能を提供し、複数の処理ユニットの各々は、複数のタイプの処理のうちの1つを実行するように構成され、複数の処理ユニットのうちの少なくともいくつかは、異なるタイプの処理を実行するように構成され、複数の処理ユニットの各々について、割り当ては、処理ユニットがそれぞれの少なくとも1つの処理を実行するのに適したタイプの処理を実行するように構成されているという決定に応じて実行される。 In another embodiment, a data processing system is provided comprising at least one processor and at least one memory containing computer program code, wherein the at least one memory and the computer program code are configured to cause the data processing system to use at least one processor to assign each of a plurality of processing units to perform, in a specific order, at least one operation associated with one of a plurality of processing stages in a sequence of computer code instructions, the plurality of processing stages providing a first function for a first data packet received at a first interface of a network interface device, each of the plurality of processing units is configured to perform one of a plurality of types of processing, at least some of the plurality of processing units are configured to perform different types of processing, and for each of the plurality of processing units, the assignment is performed in accordance with the determination that the processing unit is configured to perform a type of processing suitable for performing its respective at least one operation.

別の態様によれば、コンピュータコード命令のシーケンス内の複数の処理ステージのうちの1つに関連付けられる少なくとも1つの動作を特定の順序で実行するために、複数の処理ユニットの各々を割り当てるステップを含む方法が提供され、複数の処理ステージは、ネットワークインターフェースデバイスの第1のインターフェースにおいて受信される第1のデータパケットに対する第1の機能を提供し、複数の処理ユニットの各々は、複数のタイプの処理のうちの1つを実行するように構成され、複数の処理ユニットのうちの少なくともいくつかは、異なるタイプの処理を実行するように構成され、複数の処理ユニットの各々について、割り当ては、処理ユニットがそれぞれの少なくとも1つの処理を実行するのに適したタイプの処理を実行するように構成されているという決定に応じて実行される。 In another embodiment, a method is provided comprising the step of assigning each of a plurality of processing units to perform, in a particular order, at least one operation associated with one of a plurality of processing stages in a sequence of computer code instructions, wherein the plurality of processing stages provide a first function to a first data packet received on a first interface of a network interface device, each of the plurality of processing units is configured to perform one of a plurality of types of processing, at least some of the plurality of processing units are configured to perform different types of processing, and for each of the plurality of processing units, the assignment is performed in accordance with the determination that the processing unit is configured to perform a type of processing suitable for performing each of its at least one operations.

ハードウェアモジュールの処理ユニットは、それらのタイプの動作を単一のステップで実行するものとして説明されている。しかしながら、当業者は、この特徴が好ましい特徴に過ぎず、本発明の機能に必須または不可欠ではないことを認識するであろう。 The processing units of the hardware module are described as performing those types of operations in a single step. However, those skilled in the art will recognize that this feature is merely a desirable feature and not essential or indispensable to the functionality of the present invention.

一態様によれば、コンパイラにおいてビットファイル記述およびプログラムを受信するステップであって、上記ビットファイル記述は回路の一部分のルーティングの記述を含む、受信するステップと、上記プログラムのためのビットファイルを出力するために上記ビットファイル記述を使用して上記プログラムをコンパイルするステップとを含む方法が提供される。 According to one embodiment, a method is provided comprising the steps of: receiving a bitfile description and a program in a compiler, wherein the bitfile description includes a description of the routing of a portion of a circuit; and compiling the program using the bitfile description to output a bitfile for the program.

方法は、上記プログラムに関連付けられる機能を実行するように上記回路の上記部分の少なくとも一部を構成するために上記ビットファイルを使用するステップを含むことができる。 The method may include the step of using the bitfile to configure at least a portion of the above-mentioned part of the above-mentioned circuit to perform the function associated with the above-mentioned program.

ビットファイル記述は、回路の上記部分の複数の処理ユニット間のルーティングに関する情報を含むことができる。 The bitfile description can include information about routing between multiple processing units in the aforementioned part of the circuit.

ビットファイル記述は、上記複数の処理ユニットのうちの少なくとも1つについて、1つまたは複数の他の処理ユニットのいずれにデータを出力することができるか、および、1つまたは複数の他の処理ユニットのいずれからデータを受信することができるか、のうちの少なくとも1つを示すルーティング情報を含むことができる。 The bitfile description may include routing information indicating, for at least one of the above-mentioned processing units, at least one of the following: which of the one or more other processing units it can output data to, and which of the one or more other processing units it can receive data from.

ビットファイル記述は、2つ以上のそれぞれの処理ユニット間の1つまたは複数のルートを示すルーティング情報を含むことができる。 A bitfile description can include routing information indicating one or more routes between two or more processing units.

ビットファイル記述は、プログラムのためのビットファイルを提供するためにプログラムをコンパイルするときにコンパイラによって使用可能なルートのみを示す情報を含むことができる。 A bitfile description can include information indicating only the roots available to the compiler when compiling a program to provide the bitfile for the program.

ビットファイルは、それぞれの処理ユニットについて、それぞれの処理ユニットのビットファイル記述内の上記1つまたは複数の他の処理ユニットのうちの1つまたは複数のいずれから入力が提供されるべきか、それぞれの処理ユニットのビットファイル記述内の上記1つまたは複数の他の処理ユニットのうちの1つまたは複数のいずれに出力が提供されるべきか、のうちの少なくとも1つを示す情報を含むことができる。 The bitfile may include information indicating, for each processing unit, at least one of the following: that input should be provided from one or more of the one or more other processing units described in the bitfile description of that processing unit; or that output should be provided to one or more of the one or more other processing units described in the bitfile description of that processing unit.

回路の一部は、複数の処理ユニットを備える構成可能ハードウェアモジュールの少なくとも一部分を含むことができ、各処理ユニットは、単一のステップにおいて実行可能な所定のタイプの動作に関連付けられ、上記複数の処理ユニットのうちの少なくともいくつかは、異なる所定のタイプの動作に関連付けられ、上記ビットファイル記述は、複数の処理ユニットのうちの少なくともいくつかの間のルーティングに関する情報を含み、上記方法は、上記ビットファイルを使用して、ハードウェアに、上記複数のデータパケットのうちの1つまたは複数を処理して上記複数のデータパケットのうちの上記1つまたは複数に関して第1の機能を実行するための第1のデータ処理パイプラインを提供するために、上記複数の上記処理ユニットのうちの少なくともいくつかを相互接続させるステップを含むことができる。 The circuit may include at least a portion of a configurable hardware module comprising multiple processing units, each processing unit associated with a predetermined type of operation that can be performed in a single step, and at least some of the multiple processing units associated with different predetermined types of operations; the bitfile description includes information regarding routing between at least some of the multiple processing units; and the method may include the step of using the bitfile to cause the hardware to interconnect at least some of the multiple processing units in order to provide a first data processing pipeline for processing one or more of the multiple data packets and performing a first function with respect to one or more of the multiple data packets.

ビットファイル記述は、FPGAの少なくとも一部のものであってもよい。
ビットファイル記述は、動的にプログラム可能なFPGAの一部のものであってもよい。
The bitfile description may be at least a part of the FPGA.
The bitfile description may be part of a dynamically programmable FPGA.

プログラムは、eBPFプログラムおよびP4プログラムのうちの1つを含んでもよい。 The program may include one of the following: an eBPF program or a P4 program.

コンパイラおよびFPGAは、ネットワークインターフェースデバイス内に設けられてもよい。 The compiler and FPGA may be located within the network interface device.

別の態様によれば、少なくとも1つのプロセッサと、1つまたは複数のプログラムのためのコンピュータコードを含む少なくとも1つのメモリとを備える装置が提供され、少なくとも1つのメモリおよびコンピュータコードは、少なくとも1つのプロセッサを用いて、装置に、少なくとも、ビットファイル記述およびプログラムを受信することであって、上記ビットファイル記述は、回路の一部分のルーティングの記述を含む、受信することと、上記プログラムのためのビットファイルを出力するために上記ビットファイル記述を使用して上記プログラムをコンパイルすることとを行わせるように構成されている。 In another embodiment, a device is provided comprising at least one processor and at least one memory containing computer code for one or more programs, wherein the at least one memory and computer code are configured to cause the device, using at least one processor, to receive at least a bitfile description and a program, wherein the bitfile description includes a description of the routing of a portion of a circuit, and to compile the program using the bitfile description to output a bitfile for the program.

少なくとも1つのメモリおよびコンピュータコードは、少なくとも1つのプロセッサを用いて、装置に、上記ビットファイルを使用して、上記プログラムに関連付けられる機能を実行するように上記回路の上記部分の少なくとも一部を構成させるように構成することができる。 At least one memory and computer code can be configured, using at least one processor, to cause the device to configure at least a portion of the circuit to perform functions associated with the program using the bit file.

ビットファイル記述は、回路の上記部分の複数の処理ユニット間のルーティングに関する情報を含むことができる。 The bitfile description can include information about routing between multiple processing units in the aforementioned part of the circuit.

ビットファイル記述は、上記複数の処理ユニットのうちの少なくとも1つについて、1つまたは複数の他の処理ユニットのいずれにデータを出力することができるか、および、1つまたは複数の他の処理ユニットのいずれからデータを受信することができるか、のうちの少なくとも1つを示すルーティング情報を含むことができる。 The bitfile description may include routing information indicating, for at least one of the above-mentioned processing units, at least one of the following: which of the one or more other processing units it can output data to, and which of the one or more other processing units it can receive data from.

ビットファイル記述は、2つ以上のそれぞれの処理ユニット間の1つまたは複数のルートを示すルーティング情報を含むことができる。 A bitfile description can include routing information indicating one or more routes between two or more processing units.

ビットファイル記述は、プログラムのためのビットファイルを提供するためにプログラムをコンパイルするときにコンパイラによって使用可能なルートのみを示す情報を含むことができる。 A bitfile description can include information indicating only the roots available to the compiler when compiling a program to provide the bitfile for the program.

ビットファイルは、それぞれの処理ユニットについて、それぞれの処理ユニットのビットファイル記述内の上記1つまたは複数の他の処理ユニットのうちの1つまたは複数のいずれから入力が提供されるべきか、それぞれの処理ユニットのビットファイル記述内の上記1つまたは複数の他の処理ユニットのうちの1つまたは複数のいずれに出力が提供されるべきか、のうちの少なくとも1つを示す情報を含むことができる。 The bitfile may include information indicating, for each processing unit, at least one of the following: that input should be provided from one or more of the one or more other processing units described in the bitfile description of that processing unit; or that output should be provided to one or more of the one or more other processing units described in the bitfile description of that processing unit.

回路の一部は、複数の処理ユニットを備える構成可能ハードウェアモジュールの少なくとも一部分を含むことができ、各処理ユニットは、単一のステップにおいて実行可能な所定のタイプの動作に関連付けられ、上記複数の処理ユニットのうちの少なくともいくつかは、異なる所定のタイプの動作に関連付けられ、上記ビットファイル記述は、複数の処理ユニットのうちの少なくともいくつかの間のルーティングに関する情報を含み、少なくとも1つのメモリおよびコンピュータコードは、少なくとも1つのプロセッサを用いて、装置に、上記ビットファイルを使用して、ハードウェアに、上記複数のデータパケットのうちの1つまたは複数を処理して上記複数のデータパケットのうちの上記1つまたは複数に関して第1の機能を実行するための第1のデータ処理パイプラインを提供するために、上記複数の上記処理ユニットのうちの少なくともいくつかを相互接続させるステップを行わせるように構成されている。 A portion of the circuit may include at least a portion of a configurable hardware module comprising multiple processing units, each processing unit associated with a predetermined type of operation that can be performed in a single step, and at least some of the multiple processing units are associated with different predetermined types of operations; the bitfile description includes information regarding routing between at least some of the multiple processing units; and at least one memory and computer code are configured, using at least one processor, to cause the device, using the bitfile, to interconnect at least some of the multiple processing units in order to provide a first data processing pipeline for processing one or more of the multiple data packets and performing a first function with respect to one or more of the multiple data packets.

ビットファイル記述は、FPGAの少なくとも一部のものであってもよい。
ビットファイル記述は、動的にプログラム可能なFPGAの一部のものであってもよい。
The bitfile description may be at least a part of the FPGA.
The bitfile description may be part of a dynamically programmable FPGA.

プログラムは、eBPFプログラムおよびP4プログラムのうちの1つを含んでもよい。 The program may include one of the following: an eBPF program or a P4 program.

別の態様によれば、ネットワークインターフェースデバイスが提供され、ネットワークインターフェースデバイスは、複数のデータパケットを受信するように構成された第1のインターフェースと、複数の処理ユニットを備える構成可能ハードウェアモジュールであって、各処理ユニットは、単一のステップで実行可能な所定のタイプの動作に関連付けられている、構成可能ハードウェアモジュールと、上記構成可能ハードウェアモジュールの少なくとも一部分のルーティングの記述を含ビットファイル記述およびプログラムを受信し、上記プログラムのためのビットファイルを出力するために上記ビットファイル記述を使用して上記プログラムをコンパイルするように構成されているコンパイラとを備え、上記ハードウェアモジュールは、プログラムに関連付けられる第1の機能を実行するために上記ビットファイルを使用して構成可能である。 In another embodiment, a network interface device is provided, comprising: a first interface configured to receive a plurality of data packets; a configurable hardware module comprising a plurality of processing units, each processing unit being associated with a predetermined type of operation that can be performed in a single step; and a compiler configured to receive a bitfile description containing a routing description of at least a portion of the configurable hardware module and a program, and to compile the program using the bitfile description to output a bitfile for the program, wherein the hardware module is configurable using the bitfile to perform a first function associated with the program.

ネットワークインターフェースデバイスは、ホストデバイスをネットワークにインターフェースするためのものであってもよい。 A network interface device may also be used to interface a host device to a network.

上記複数の処理ユニットの少なくともいくつかは、異なる所定のタイプの動作に関連付けられてもよい。 At least some of the above processing units may be associated with different predetermined types of operations.

ハードウェアモジュールは、上記複数の上記処理ユニットの少なくともいくつかを相互接続して、上記複数のデータパケットのうちの1つまたは複数を処理して、上記複数のデータパケットのうちの上記1つまたは複数に対して第1の機能を実行するための第1のデータ処理パイプラインを提供するように構成可能であり得る。 The hardware module may be configured to interconnect at least some of the above-mentioned processing units to process one or more of the above-mentioned data packets and to provide a first data processing pipeline for performing a first function on one or more of the above-mentioned data packets.

いくつかの実施形態では、第1の機能は、フィルタリング機能を含む。いくつかの実施形態では、機能は、トンネリング、カプセル化、およびルーティング機能のうちの少なくとも1つを含む。いくつかの実施形態では、第1の機能は、拡張Berkleyパケットフィルタ機能を含む。 In some embodiments, the first function includes a filtering function. In some embodiments, the function includes at least one of tunneling, encapsulation, and routing functions. In some embodiments, the first function includes an extended Berkley packet filtering function.

いくつかの実施形態では、第1の機能は、分散型サービス妨害スクラブ動作を含む。
いくつかの実施形態では、第1の機能は、ファイアウォール動作を含む。
In some embodiments, the first function includes a distributed denial-of-service scrubbing operation.
In some embodiments, the first function includes firewall operation.

いくつかの実施形態では、第1のインターフェースは、ネットワークから第1のデータパケットを受信するように構成される。 In some embodiments, the first interface is configured to receive a first data packet from the network.

いくつかの実施形態では、第1のインターフェースは、ホストデバイスから第1のデータパケットを受信するように構成される。 In some embodiments, the first interface is configured to receive a first data packet from a host device.

いくつかの実施形態では、複数の処理ユニットの少なくともいくつかのうちの2つ以上は、それらの関連する少なくとも1つの所定の動作を並列に実行するように構成される。 In some embodiments, at least two of several processing units are configured to perform at least one predetermined operation in parallel.

いくつかの実施形態では、複数の処理ユニットのうちの少なくともいくつかのうちの2つ以上は、ハードウェアモジュールの共通クロック信号に従ってそれらの関連する所定のタイプの動作を実行するように構成される。 In some embodiments, at least two of several processing units are configured to perform their associated predetermined types of operations in accordance with a common clock signal of the hardware module.

いくつかの実施形態では、複数の処理ユニットの少なくともいくつかのうちの2つ以上の各々は、クロック信号によって定義される所定の時間長内にその関連する所定のタイプの動作を実行するように構成される。 In some embodiments, each of at least two of a plurality of processing units is configured to perform its associated predetermined type of operation within a predetermined time length defined by a clock signal.

いくつかの実施形態では、複数の処理ユニットのうちの少なくともいくつかのうちの2つ以上は、所定の時間長の期間内に第1のデータパケットにアクセスし、所定の時間長の終了に応答して、それぞれの上記少なくとも1つの動作の結果を次の処理ユニットに転送するように構成される。 In some embodiments, at least two of several processing units are configured to access a first data packet within a predetermined time period and, in response to the end of the predetermined time period, transfer the result of each of the at least one of the above operations to the next processing unit.

いくつかの実施形態では、結果は、少なくとも、複数のデータパケットのうちの1つまたは複数からの値、マップ状態への更新、およびメタデータのうちの少なくとも1つまたは複数を含む。 In some embodiments, the results include at least one or more of the following: values from one or more of the data packets, updates to the map state, and metadata.

いくつかの実施形態では、複数の処理ユニットの各々は、それぞれの処理ユニットに関連付けられる少なくとも1つの動作を実行するように構成された特定用途向け集積回路を含む。 In some embodiments, each of the processing units includes an application-specific integrated circuit configured to perform at least one operation associated with each processing unit.

いくつかの実施形態では、処理ユニットの各々は、フィールドプログラマブルゲートアレイを含む。いくつかの実施形態では、処理ユニットの各々は、任意の他のタイプのソフトロジックを含む。 In some embodiments, each processing unit includes a field-programmable gate array. In some embodiments, each processing unit includes any other type of soft logic.

いくつかの実施形態では、複数の処理ユニットのうちの少なくとも1つは、デジタル回路と、デジタル回路によって実行される処理に関連する状態を記憶するメモリとを備え、デジタル回路は、メモリと通信して、それぞれの処理ユニットに関連付けられる所定のタイプの動作を実行するように構成される。 In some embodiments, at least one of a plurality of processing units comprises a digital circuit and a memory for storing a state related to the processing performed by the digital circuit, and the digital circuit is configured to communicate with the memory to perform a predetermined type of operation associated with each processing unit.

いくつかの実施形態では、ネットワークインターフェースデバイスは、複数の処理ユニットのうちの2つ以上にアクセス可能なメモリを備え、メモリは、第1のデータパケットに関連付けられる状態を記憶するように構成され、ハードウェアモジュールによる第1の機能の実行中、複数の処理ユニットのうちの2つ以上は、状態にアクセスし、状態を修正するように構成される。 In some embodiments, the network interface device includes a memory accessible to two or more of a plurality of processing units, the memory is configured to store the state associated with a first data packet, and during the execution of the first function by the hardware module, two or more of the plurality of processing units are configured to access and modify the state.

いくつかの実施形態では、複数の処理ユニットのうちの少なくともいくつかのうちの第1の処理ユニットは、複数の処理ユニットのうちの第2の処理ユニットによる状態の値のアクセス中にストールするように構成される。 In some embodiments, a first processing unit, among at least some of the multiple processing units, is configured to stall while a second processing unit among the multiple processing units accesses a state value.

いくつかの実施形態では、複数の処理ユニットのうちの1つまたは複数は、それらの関連する所定のタイプの動作に基づいて、それぞれのパイプラインに固有の動作を実行するように個別に構成可能である。 In some embodiments, one or more of the processing units can be individually configured to perform operations specific to their respective pipelines based on their associated predetermined types of operations.

いくつかの実施形態では、ハードウェアモジュールは、命令を受信し、上記命令に応答して、上記複数のデータパケットのうちの1つまたは複数を処理するためのデータ処理パイプラインを提供するために、上記複数の上記処理ユニットのうちの少なくともいくつかを相互接続すること、上記複数の処理ユニットのうちの1つまたは複数に、上記1つまたは複数のデータパケットに関してそれらの関連する所定のタイプの動作を実行させること、上記複数の処理ユニットのうちの1つまたは複数をデータ処理パイプラインに追加すること、および、データ処理パイプラインから上記複数の処理ユニットのうちの1つまたは複数を除去することのうちの少なくとも1つを行うように構成されている。 In some embodiments, the hardware module is configured to receive instructions and, in response to those instructions, to provide a data processing pipeline for processing one or more of the multiple data packets. This involves interconnecting at least some of the multiple processing units, causing one or more of the multiple processing units to perform predetermined related operations with respect to one or more data packets, adding one or more of the multiple processing units to the data processing pipeline, and removing one or more of the multiple processing units from the data processing pipeline.

いくつかの実施形態では、所定の動作は、メモリから第1のデータパケットの少なくとも1つの値をロードすること、データパケットの少なくとも1つの値をメモリに記憶すること、および、データパケットに関して実行されるべきアクションを決定するためにルックアップテーブル内のルックアップを実行することのうちの少なくとも1つを含む。 In some embodiments, a predetermined operation includes at least one of the following: loading at least one value of a first data packet from memory; storing at least one value of the data packet in memory; and performing a lookup in a lookup table to determine an action to be performed with respect to the data packet.

いくつかの実施形態では、ハードウェアモジュールは、命令を受信するように構成され、ハードウェアモジュールは、上記命令に応答して、上記複数のデータパケットのうちの1つまたは複数を処理するためのデータ処理パイプラインを提供するために、上記複数の上記処理ユニットのうちの少なくともいくつかを相互接続するように構成可能であり、命令は、第3の処理パイプラインを介して送信されるデータパケットを含む。 In some embodiments, the hardware module is configured to receive instructions, and the hardware module can be configured to interconnect at least some of the processing units to provide a data processing pipeline for processing one or more of the plurality of data packets in response to the instructions, wherein the instructions include data packets transmitted through a third processing pipeline.

いくつかの実施形態では、複数の処理ユニットのうちの1つまたは複数少なくともいくつかは、上記命令に応答して、複数のデータパケットのうちの上記1つまたは複数に関してそれらの関連する所定のタイプの動作のうちの選択された動作を実行するように構成可能である。 In some embodiments, one or more of the processing units can be configured to perform a selected operation from a predetermined set of operations relating to one or more of the data packets in response to the instruction.

いくつかの実施形態では、複数の構成要素は、ハードウェアモジュールとは異なる回路において第1の機能を提供するように構成された複数の構成要素のうちの第2の構成要素を含み、ネットワークインターフェースデバイスは、処理パイプラインを通過するデータパケットが、複数の構成要素のうちの第1の構成要素および複数の構成要素のうちの第2の構成要素のうちの1つによって処理されるようにするように構成された少なくとも1つのコントローラを備える。 In some embodiments, the plurality of components includes a second component among the plurality of components configured to provide a first function in a circuit distinct from the hardware module, and the network interface device comprises at least one controller configured such that data packets passing through the processing pipeline are processed by one of the first component among the plurality of components and one of the second component among the plurality of components.

いくつかの実施形態では、ネットワークインターフェースデバイスは、ハードウェアモジュールにデータパケットに対する第1の機能の実行を開始させる命令を発行するように構成された少なくとも1つのコントローラを備え、命令は、複数の構成要素のうちの第1の構成要素が処理パイプラインに挿入されるようにするように構成される。 In some embodiments, the network interface device includes at least one controller configured to issue a command to a hardware module to initiate the execution of a first function for a data packet, wherein the command is configured to cause a first component of a plurality of components to be inserted into the processing pipeline.

いくつかの実施形態では、ネットワークインターフェースデバイスは、ハードウェアモジュールにデータパケットに対する第1の機能の実行を開始させる命令を発行するように構成された少なくとも1つのコントローラを備え、命令は、処理パイプラインを通じて送信され、複数の構成要素のうちの第1の構成要素が作動されるようにするように構成される制御メッセージを含む。 In some embodiments, the network interface device comprises at least one controller configured to issue a command to a hardware module to initiate the execution of a first function for a data packet, the command including a control message transmitted through a processing pipeline and configured to activate a first component of a plurality of components.

いくつかの実施形態では、複数の処理ユニットの少なくともいくつかのうちの1つまたは複数について、関連する少なくとも1つの動作は、ネットワークインターフェースデバイスのメモリから第1のデータパケットの少なくとも1つの値をロードすること、第1のデータパケットの少なくとも1つの値をネットワークインターフェースデバイスのメモリに記憶することと、および、第1のデータパケットに関して行われるべきアクションを決定するためにルックアップテーブル内のルックアップを行うことのうちの少なくとも1つを含む。 In some embodiments, for at least one or more of a plurality of processing units, the relevant at least one operation includes at least one of loading at least one value of a first data packet from the memory of a network interface device, storing at least one value of the first data packet in the memory of the network interface device, and performing a lookup in a lookup table to determine the action to be taken with respect to the first data packet.

いくつかの実施形態では、複数の処理ユニットのうちの少なくともいくつかのうちの1つまたは複数は、その関連する少なくとも1つの所定の動作の少なくとも1つの結果を第1の処理パイプライン内の次の処理ユニットに渡すように構成され、次の処理ユニットは、少なくとも1つの結果に応じて次の所定の動作を実行するように構成される。 In some embodiments, one or more of at least some of a plurality of processing units are configured to pass at least one result of at least one of their associated predetermined operations to the next processing unit in a first processing pipeline, and the next processing unit is configured to perform a subsequent predetermined operation in response to at least one result.

いくつかの実施形態では、異なる所定のタイプの動作の各々は、異なるテンプレートによって定義される。 In some embodiments, each of the different predetermined types of operation is defined by a different template.

いくつかの実施形態では、所定の動作のタイプは、データパケットにアクセスすること、ハードウェアモジュールのメモリに記憶されたルックアップテーブルにアクセスすること、データパケットからロードされたデータに対して論理演算を実行すること、および、ルックアップテーブルからロードされたデータに対して論理演算を実行することのうちの少なくとも1つを含む。 In some embodiments, a predetermined type of operation includes at least one of the following: accessing data packets; accessing lookup tables stored in the memory of a hardware module; performing logical operations on data loaded from data packets; and performing logical operations on data loaded from lookup tables.

いくつかの実施形態では、ハードウェアモジュールはルーティングハードウェアを備え、ハードウェアモジュールは、第1のデータ処理パイプラインによって定義される特定の順序で複数の処理ユニット間でデータパケットをルーティングするようにルーティングハードウェアを構成することによって、第1のデータ処理パイプラインを提供するために上記複数の上記処理ユニットの少なくともいくつかを相互接続するように構成可能である。 In some embodiments, the hardware module includes routing hardware, and the hardware module can be configured to interconnect at least some of the processing units in order to provide the first data processing pipeline by configuring the routing hardware to route data packets between the processing units in a specific order defined by the first data processing pipeline.

いくつかの実施形態では、ハードウェアモジュールは、上記複数の上記処理ユニットの少なくともいくつかを相互接続して、上記複数のデータパケットのうちの1つまたは複数を処理して第1の機能とは異なる第2の機能を実行するための第2のデータ処理パイプラインを提供するように構成可能である。 In some embodiments, the hardware module can be configured to interconnect at least some of the plurality of processing units to provide a second data processing pipeline for processing one or more of the plurality of data packets and performing a second function different from the first function.

いくつかの実施形態では、ハードウェアモジュールは、複数の上記処理ユニットのうちの少なくともいくつかを相互接続して第1のデータ処理パイプラインを提供した後に、上記複数の上記処理ユニットのうちの少なくともいくつかを相互接続して第2のデータ処理パイプラインを提供するように構成可能である。 In some embodiments, the hardware module can be configured to interconnect at least some of the processing units described above to provide a first data processing pipeline, and then to interconnect at least some of the processing units described above to provide a second data processing pipeline.

いくつかの実施形態では、ネットワークインターフェースデバイスは、ハードウェアモジュールとは別個の、上記複数のデータパケットのうちの1つまたは複数に対して第1の機能を実行するように構成されたさらなる回路を備える。 In some embodiments, the network interface device includes additional circuitry, separate from the hardware module, configured to perform a first function for one or more of the aforementioned data packets.

いくつかの実施形態では、さらなる回路は、フィールドプログラマブルゲートアレイ、および複数の中央処理装置のうちの少なくとも1つを含む。 In some embodiments, the further circuitry includes a field-programmable gate array and at least one of a plurality of central processing units.

いくつかの実施形態では、ネットワークインターフェースデバイスは、少なくとも1つのコントローラを備え、さらなる回路は、第1の機能がハードウェアモジュールにおいて実行されるようにするためのコンパイルプロセス中にデータパケットに対して第1の機能を実行するように構成され、少なくとも1つのコントローラは、コンパイルプロセスの完了に応答して、データパケットに対する第1の機能の実行を開始するようにハードウェアモジュールを制御するように構成される。 In some embodiments, the network interface device comprises at least one controller, and further circuitry is configured to perform a first function on data packets during a compilation process to enable the first function to be performed in a hardware module, and at least one controller is configured to control the hardware module to begin performing the first function on data packets in response to the completion of the compilation process.

いくつかの実施形態では、さらなる回路は、複数の中央処理装置を含む。
いくつかの実施形態では、少なくとも1つのコントローラは、第1の機能がハードウェアモジュールにおいて実行されるようにするためのコンパイルプロセスが完了したという上記決定に応答して、データパケットに対する第1の機能の実行を停止するようにさらなる回路を制御するように構成される。
In some embodiments, the further circuitry includes a plurality of central processing units.
In some embodiments, at least one controller is configured to control further circuitry to stop executing the first function on data packets in response to the above-mentioned decision that the compilation process for executing the first function in the hardware module is complete.

いくつかの実施形態では、ネットワークインターフェースデバイスは少なくとも1つのコントローラを備え、ハードウェアモジュールは、第1の機能がさらなる回路において実行されるようにするためのコンパイルプロセス中にデータパケットに対して第1の機能を実行するように構成され、少なくとも1つのコントローラは、第1の機能がさらなる回路において実行されるようにするためのコンパイルプロセスが完了したと決定し、上記決定に応答して、データパケットに対する第1の機能の実行を開始するようにさらなる回路を制御するように構成される。 In some embodiments, the network interface device comprises at least one controller, and the hardware module is configured to perform a first function on data packets during a compilation process for which the first function is to be performed in further circuitry. The at least one controller is configured to determine that the compilation process for which the first function is to be performed in further circuitry is complete, and in response to this determination, to control the further circuitry to begin performing the first function on data packets.

いくつかの実施形態では、さらなる回路はフィールドプログラマブルゲートアレイを含む。 In some embodiments, the further circuitry includes a field-programmable gate array.

いくつかの実施形態では、少なくとも1つのコントローラは、第1の機能がさらなる回路において実行されるようにするためのコンパイルプロセスが完了したという上記決定に応答して、データパケットに対する第1の機能の実行を停止するようにハードウェアモジュールを制御するように構成される。 In some embodiments, at least one controller is configured to control a hardware module to stop executing the first function on data packets in response to the above-mentioned decision that the compilation process for executing the first function in further circuitry has been completed.

いくつかの実施形態では、ネットワークインターフェースデバイスは、第1の機能がハードウェアモジュールにおいて実行されることを可能にするためのコンパイルプロセスを実行するように構成された少なくとも1つのコントローラを備える。 In some embodiments, the network interface device comprises at least one controller configured to perform a compilation process to enable the first function to be executed in the hardware module.

いくつかの実施形態では、コンパイルプロセスは、制御メッセージに応答するハードウェアモジュール内の制御プレーンインターフェースを提供するための命令を提供することを含む。 In some embodiments, the compilation process includes providing instructions for providing a control plane interface within a hardware module that responds to control messages.

別の態様によれば、コンピュータ実施方法が提供され、方法は、複数の処理ユニットを備える構成可能ハードウェアモジュールの少なくとも一部のルーティング情報を決定するステップを含み、各処理ユニットは、単一のステップで実行可能な所定のタイプの動作に関連付けられ、上記複数の処理ユニットのうちの少なくともいくつかは、異なる所定のタイプの動作に関連付けられ、上記ルーティング情報は、少なくとも複数の処理ユニット間の利用可能なルートに関する情報を提供する。 In another embodiment, a computer implementation method is provided, the method comprising the step of determining routing information for at least some of a configurable hardware module comprising a plurality of processing units, each processing unit associated with a predetermined type of operation that can be performed in a single step, at least some of the plurality of processing units associated with different predetermined types of operations, and the routing information provides information about available routes between at least the plurality of processing units.

構成可能ハードウェアモジュールは、実質的に静的な部分および実質的に動的な部分を含むことができ、上記決定するステップは、上記実質的に動的な部分のルーティング情報を決定することを含む。 The configurable hardware module may include substantially static and substantially dynamic parts, and the above determining step includes determining the routing information of the substantially dynamic part.

上記実質的に動的な部分のルーティング情報を決定することは、上記実質的に静的な部分の処理ユニットのうちの1つまたは複数によって使用される上記実質的に動的な部分のルーティングを決定することを含むことができる。 Determining the routing information for the substantially dynamic portion described above may include determining the routing for the substantially dynamic portion used by one or more of the processing units for the substantially static portion described above.

決定することは、上記ルーティング情報を決定するために、上記構成可能ハードウェアモジュールの少なくとも一部のビットファイル記述を分析することを含むことができる。 The determination may include analyzing the bitfile descriptions of at least some of the configurable hardware modules to determine the routing information described above.

別の態様によれば、非一時的コンピュータ可読媒体が提供され、媒体は、複数の処理ユニットを備える構成可能ハードウェアモジュールの少なくとも一部のルーティング情報を決定するためのプログラム命令を含み、各処理ユニットは、単一のステップで実行可能な所定のタイプの動作に関連付けられ、上記複数の処理ユニットのうちの少なくともいくつかは、異なる所定のタイプの動作に関連付けられ、上記ルーティング情報は、少なくとも複数の処理ユニット間の利用可能なルートに関する情報を提供する。 In another embodiment, a non-temporary computer-readable medium is provided, the medium including program instructions for determining routing information for at least some of a configurable hardware module comprising a plurality of processing units, each processing unit associated with a predetermined type of operation that can be executed in a single step, at least some of the plurality of processing units associated with different predetermined types of operations, and the routing information provides information about available routes between at least the plurality of processing units.

方法(複数可)を実行するように適合されたプログラムコード手段を含むコンピュータプログラムも提供され得る。コンピュータプログラムは、キャリア媒体によって記憶および/または他の方法で具現化されてもよい。 A computer program may also be provided that includes program code means adapted to perform the method(s). The computer program may be stored and/or otherwise embodied by a carrier medium.

以上、多くの異なる実施形態について説明した。さらなる実施形態が、上述の実施形態のうちの任意の2つ以上の組み合わせによって提供されてもよいことを理解されたい。 The above describes several different embodiments. It should be understood that further embodiments may be provided by any combination of two or more of the embodiments described above.

様々な他の態様およびさらなる実施形態もまた、以下の詳細な説明および添付の特許請求の範囲に記載される。 Various other aspects and further embodiments are also described in the following detailed description and appended claims.

図面の簡単な説明
ここで、いくつかの実施形態を、添付の図面を参照して単なる例として説明する。
Brief Description of the Drawings: Herein, several embodiments are described merely as examples with reference to the attached drawings.

ネットワークに結合されたデータ処理システムの概略図である。This is a schematic diagram of a data processing system connected to a network. ホストコンピューティングデバイス上でユーザモードにおいて作動するように構成されたフィルタリング動作アプリケーションを備えるデータ処理システムの概略図である。This is a schematic diagram of a data processing system that includes a filtering application configured to operate in user mode on a host computing device. ホストコンピューティングデバイス上でカーネルモードにおいて作動するように構成されたフィルタリング動作を備えるデータ処理システムの概略図である。This is a schematic diagram of a data processing system with filtering operations configured to operate in kernel mode on a host computing device. データパケットに関して機能を実行するための複数のCPUを備えるネットワークインターフェースデバイスの概略図である。This is a schematic diagram of a network interface device equipped with multiple CPUs for performing functions related to data packets. データパケットに関して機能を実行するためのアプリケーションを作動させるフィールドプログラマブルゲートアレイを備えるネットワークインターフェースデバイスの概略図である。This is a schematic diagram of a network interface device equipped with a field-programmable gate array that runs an application to perform functions related to data packets. データパケットに関して機能を実行するためのハードウェアモジュールを備えるネットワークインターフェースデバイスの概略図である。This is a schematic diagram of a network interface device that includes hardware modules for performing functions related to data packets. データパケットに関して機能を実行するための、フィールドプログラマブルゲートアレイと、少なくとも1つの処理ユニットとを備えるネットワークインターフェースデバイスの概略図である。This is a schematic diagram of a network interface device comprising a field-programmable gate array and at least one processing unit for performing functions with respect to data packets. いくつかの実施形態によるネットワークインターフェースデバイス内で実施される方法を示す図である。This figure shows a method implemented within a network interface device according to several embodiments. いくつかの実施形態によるネットワークインターフェースデバイス内で実施される方法を示す図である。This figure shows a method implemented within a network interface device according to several embodiments. 一連のプログラムによってデータパケットを処理する実施例を示す図である。This figure shows an example of processing data packets using a series of programs. 複数の処理ユニットによってデータパケットを処理する実施例を示す図である。This figure shows an example of processing data packets using multiple processing units. 複数の処理ユニットによってデータパケットを処理する実施例を示す図である。This figure shows an example of processing data packets using multiple processing units. データパケットを処理するための処理ステージのパイプラインの例を示す図である。This figure shows an example of a processing stage pipeline for processing data packets. 複数のプラガブル構成要素を有するスライスアーキテクチャの例を示す図である。This figure shows an example of a slice architecture with multiple pluggable components. 複数の処理ユニットの処理の構成および順序の例示的な表現を示す図である。This figure shows an illustrative representation of the configuration and sequence of processing units. 機能をコンパイルする例示的な方法を示す図である。This diagram illustrates an example of how to compile a function. ステートフル処理ユニットの一例を示す図である。This figure shows an example of a stateful processing unit. ステートレス処理ユニットの一例を示す図である。This figure shows an example of a stateless processing unit. いくつかの実施形態の方法を示す図である。This figure shows a method according to several embodiments. FPGAにおけるスライス間のルーティングを示す図である。This diagram shows the routing between slices in an FPGA. FPGAにおけるスライス間のルーティングを示す図である。This diagram shows the routing between slices in an FPGA. FGPA上のパーティションを概略的に示す図である。This is a schematic diagram showing partitions on an FGPA.

詳細な説明
以下の説明は、当業者が本発明を作成および使用することを可能にするために提示され、特定の用途の文脈で提供される。開示された実施形態に対する様々な変更は、当業者には容易に明らかであろう。
Detailed Description: The following description is provided to enable those skilled in the art to create and use the present invention, and is provided in the context of a particular application. Various modifications to the disclosed embodiments will be readily apparent to those skilled in the art.

本明細書で定義される一般的な原理は、本発明の思想および範囲から逸脱することなく、他の実施形態および用途に適用することができる。したがって、本発明は、示された実施形態に限定されることを意図するものではなく、本明細書に開示された原理および特徴と一致する最も広い範囲が与えられるべきである。 The general principles defined herein can be applied to other embodiments and applications without departing from the spirit and scope of the invention. Therefore, the invention is not intended to be limited to the embodiments shown, but rather should be given the broadest scope consistent with the principles and features disclosed herein.

データがネットワークなどのデータチャネルを介して2つのデータ処理システム間で転送される場合、データ処理システムの各々は、チャネルを介して通信することを可能にする適切なネットワークインターフェースを有する。多くの場合、ネットワークはイーサネット(登録商標)技術に基づいている。ネットワークを介して通信するデータ処理システムは、ネットワークプロトコルの物理的および論理的要件をサポートすることができるネットワークインターフェースを備えている。ネットワークインターフェースの物理ハードウェア構成要素は、ネットワークインターフェースデバイスまたはネットワークインターフェースカード(NIC)と呼ばれる。 When data is transferred between two data processing systems via a data channel, such as a network, each data processing system has a suitable network interface that enables communication over the channel. Often, the network is based on Ethernet® technology. Data processing systems communicating over a network have a network interface that can support the physical and logical requirements of the network protocol. The physical hardware components of a network interface are called network interface devices or network interface cards (NICs).

ほとんどのコンピュータシステムは、ユーザレベルアプリケーションがネットワークと通信するためのオペレーティングシステム(OS)を含む。カーネルとして知られるオペレーティングシステムの一部は、アプリケーションとネットワークインターフェースデバイスに固有のデバイスドライバとの間でコマンドおよびデータを変換するためのプロトコルスタックを含む。デバイスドライバは、ネットワークインターフェースデバイスを直接制御することができる。オペレーティングシステムカーネルにこれらの機能を提供することにより、ネットワークインターフェースデバイスの複雑さおよび違いをユーザレベルアプリケーションから隠すことができる。ネットワークハードウェアおよび他のシステムリソース(メモリなど)は、多くのアプリケーションによって安全に共有することができ、システムは、欠陥または悪意のあるアプリケーションから保護することができる。 Most computer systems include an operating system (OS) for user-level applications to communicate with the network. Part of the OS, known as the kernel, includes a protocol stack for translating commands and data between applications and device drivers specific to network interface devices. Device drivers can directly control network interface devices. By providing these functions to the operating system kernel, the complexity and differences of network interface devices can be hidden from user-level applications. Network hardware and other system resources (such as memory) can be securely shared by many applications, and the system can be protected from flawed or malicious applications.

ネットワークを介した送信を実行するための典型的なデータ処理システム100が図1に示されている。データ処理システム100は、ホストをネットワーク103にインターフェースするように構成されたネットワークインターフェースデバイス102に結合されたホストコンピューティングデバイス101を備える。ホストコンピューティングデバイス101は、1つまたは複数のユーザレベルアプリケーション105をサポートするオペレーティングシステム104を含む。ホストコンピューティングデバイス101は、ネットワークプロトコルスタック(図示せず)も含むことができる。例えば、プロトコルスタックは、アプリケーションの構成要素であってもよく、アプリケーションがリンクされているライブラリであってもよく、またはオペレーティングシステムによって提供されてもよい。いくつかの実施形態では、2つ以上のプロトコルスタックが提供されてもよい。 A typical data processing system 100 for performing transmission over a network is shown in Figure 1. The data processing system 100 comprises a host computing device 101 coupled to a network interface device 102 configured to interface the host to a network 103. The host computing device 101 includes an operating system 104 that supports one or more user-level applications 105. The host computing device 101 may also include a network protocol stack (not shown). For example, the protocol stack may be a component of the application, a library to which the application is linked, or provided by the operating system. In some embodiments, two or more protocol stacks may be provided.

ネットワークプロトコルスタックは、伝送制御プロトコル(TCP)スタックであってもよい。アプリケーション105は、ソケットを開き、ソケットに対してデータを読み書きすることによってTCP/IPメッセージを送受信することができ、オペレーティングシステム104は、ネットワークを介してメッセージが転送されるようにする。例えば、アプリケーションは、ソケットを通じて、次いでオペレーティングシステム104を介してネットワーク103にデータを送信するためのシステムコール(syscall)を呼び出すことができる。メッセージを送信するためのこのインターフェースは、メッセージパッシングインターフェースとして知られ得る。 The network protocol stack may be a Transmission Control Protocol (TCP) stack. Application 105 can send and receive TCP/IP messages by opening a socket and reading and writing data to the socket, and the operating system 104 ensures that the messages are transmitted over the network. For example, an application can invoke a system call (syscall) to send data to network 103 via a socket, and then via the operating system 104. This interface for sending messages may be known as a message passing interface.

スタックをホスト101に実装する代わりに、いくつかのシステムは、プロトコルスタックをネットワークインターフェースデバイス102にオフロードする。例えば、スタックがTCPスタックである場合、ネットワークインターフェースデバイス102は、TCPプロトコル処理を実行するためのTCPオフロードエンジン(TOE)を備えることができる。ホストコンピューティングデバイス101ではなくネットワークインターフェースデバイス102内でプロトコル処理を実行することによって、ホストシステム101のプロセッサ(複数可)に対する需要を低減することができる。ネットワークを介して送信されるデータは、TOE対応仮想インターフェースドライバを介してアプリケーション105によって、カーネルTCP/IPスタックを部分的にまたは完全に渡すことによって送信されてもよい。したがって、この高速経路に沿って送信されるデータは、TOEドライバの要件を満たすようにフォーマットされるだけでよい。 Instead of implementing the stack on the host 101, some systems offload the protocol stack to a network interface device 102. For example, if the stack is a TCP stack, the network interface device 102 may include a TCP Offload Engine (TOE) for performing TCP protocol processing. Performing protocol processing within the network interface device 102 rather than the host computing device 101 reduces the demand on the processor(s) of the host system 101. Data transmitted over the network may be sent by application 105 via a TOE-enabled virtual interface driver, partially or completely passing the kernel TCP/IP stack. Therefore, data transmitted along this high-speed path only needs to be formatted to meet the requirements of the TOE driver.

ホストコンピューティングデバイス101は、1つまたは複数のプロセッサおよび1つまたは複数のメモリを備えることができる。いくつかの実施形態では、ホストコンピューティングデバイス101およびネットワークインターフェースデバイス102は、バス、例えば周辺機器相互接続エクスプレス(PCIeバス)を介して通信することができる。 The host computing device 101 may comprise one or more processors and one or more memories. In some embodiments, the host computing device 101 and the network interface device 102 can communicate via a bus, such as the Peripheral Interconnection Express (PCIe bus).

データ処理システムの動作中、ネットワーク上に送信されるべきデータは、送信のためにホストコンピューティングデバイス101からネットワークインターフェースデバイス102に転送することができる。一例では、データパケットは、ホストプロセッサによってホストからネットワークインターフェースデバイスに直接転送されてもよい。ホストは、ネットワークインターフェースデバイス102上に配置された1つまたは複数のバッファ106にデータを提供することができる。次いで、ネットワークインターフェースデバイス102は、データパケットを準備し、それらをネットワーク103を介して送信することができる。 During the operation of the data processing system, data to be transmitted over the network can be transferred from the host computing device 101 to the network interface device 102 for transmission. In one example, data packets may be transferred directly from the host to the network interface device by the host processor. The host can provide data to one or more buffers 106 located on the network interface device 102. The network interface device 102 can then prepare the data packets and transmit them over the network 103.

あるいは、データは、ホストシステム101内のバッファ107に書き込まれてもよい。次いで、データは、ネットワークインターフェースデバイスによってバッファ107から取り出し、ネットワーク103を介して送信することができる。 Alternatively, the data may be written to buffer 107 in the host system 101. The data can then be retrieved from buffer 107 by a network interface device and transmitted over network 103.

これらの場合の両方において、データは、ネットワークを介した送信の前に、1つまたは複数のバッファに一時的に記憶される。ネットワークを介して送信されたデータは、(ルックバックにおいて)ホストに返され得る。 In both of these cases, the data is temporarily stored in one or more buffers before being transmitted over the network. The data transmitted over the network may be returned to the host (in a lookback).

データパケットがネットワーク103を介して送受信されるとき、ネットワークを介して送信されるデータパケット上で、またはネットワークを介して受信されるデータパケット上で、データパケットに対する動作として表現することができる多くの処理タスクが存在する。例えば、ホストシステム101を分散型サービス妨害(DDOS)フィルタリングから保護するように、受信されるデータパケットに対してフィルタリングプロセスを実行することができる。このようなフィルタリングプロセスは、単純なパック検査または拡張Berkleyパケットフィルタ(eBPF)によって実行することができる。別の例として、ネットワーク103を介して送信されるデータパケットに対してカプセル化および転送が実行され得る。これらのプロセスは、多くのCPUサイクルを消費し、従来のOSアーキテクチャにとって負担となり得る。 When data packets are transmitted and received over network 103, many processing tasks exist that can be expressed as operations on the data packets, either on the data packets transmitted or received over the network. For example, a filtering process can be performed on received data packets to protect the host system 101 from distributed denial-of-service (DDoS) filtering. Such filtering processes can be performed by simple pack checking or an extended Berkley packet filter (eBPF). Another example is encapsulation and forwarding, which may be performed on data packets transmitted over network 103. These processes consume many CPU cycles and can be burdensome for conventional OS architectures.

フィルタリング動作または他のパケット処理動作がホストシステム220において実施され得る一方法を示す図2を参照する。ホストシステム220によって実行されるプロセスは、ユーザ空間またはカーネル空間のいずれかで実行されるものとして示されている。ネットワークインターフェースデバイス210においてネットワークから受信されるデータパケットを終端アプリケーション250に送達するための受信経路が、カーネル空間に存在する。この受信経路は、ドライバ235と、プロトコルスタック240と、ソケット245とを備える。フィルタリング動作230は、ユーザ空間において実施される。ネットワークインターフェースデバイス210によってホストシステム220に提供される入来パケットは、(プロトコル処理が行われる)カーネルをバイパスし、フィルタリング動作230に直接提供される。 Refer to Figure 2, which illustrates one method by which filtering or other packet processing operations may be performed in the host system 220. The processes executed by the host system 220 are shown as running in either user space or kernel space. A receive path exists in kernel space for delivering data packets received from the network by the network interface device 210 to the terminal application 250. This receive path comprises a driver 235, a protocol stack 240, and a socket 245. The filtering operation 230 is performed in user space. Incoming packets provided to the host system 220 by the network interface device 210 bypass the kernel (where protocol processing takes place) and are provided directly to the filtering operation 230.

フィルタリング動作230には、ホストシステム220内の他の要素とデータパケットを交換するための仮想インターフェース(エーテルファブリック仮想インターフェース(EFVI)もしくはデータプレーン開発キット(DPDK)または任意の他の適切なインターフェースであってもよい)が与えられる。フィルタリング動作230は、DDOSスクラブおよび/または他の形態のフィルタリングを実行することができる。DDOSスクラブプロセスは、DDOS候補として容易に認識されるすべてのパケット、例えば、サンプルパケット、パケットのコピー、およびまだ分類されていないパケットに対して実行することができる。フィルタリング動作230に送達されないパケットは、ネットワークインターフェースからドライバ235に直接渡すことができる。動作230は、フィルタリングを実行するための拡張Berkeleyパケットフィルタ(eBPF)を提供することができる。受信されるパケットが動作230によって提供されるフィルタリングを通過する場合、動作230は、受信されるパケットを処理するためにカーネル内の受信経路にパケットを再注入するように構成される。具体的には、パケットは、ドライバ235またはスタック240に提供される。その後、パケットはプロトコルスタック240によってプロトコル処理される。その後、パケットは、終端アプリケーション250に関連付けられたソケット245に渡される。終端アプリケーション250は、recv()呼び出しを発行して、関連するソケットのバッファからデータパケットを取り出す。 Filtering operation 230 is provided with a virtual interface (which may be an Ether Fabric Virtual Interface (EFVI) or a Data Plane Development Kit (DPDK) or any other suitable interface) for exchanging data packets with other elements within the host system 220. Filtering operation 230 can perform DDoS scrubbing and/or other forms of filtering. The DDoS scrubbing process can be performed on all packets that are readily recognizable as DDoS candidates, e.g., sample packets, packet copies, and packets that have not yet been classified. Packets that are not delivered to filtering operation 230 can be passed directly to driver 235 from the network interface. Operation 230 can provide an Extended Berkeley Packet Filter (eBPF) for performing filtering. If an incoming packet passes the filtering provided by operation 230, operation 230 is configured to reinject the packet into the receive path in the kernel for processing the incoming packet. Specifically, the packet is delivered to driver 235 or stack 240. The packet is then protocol-processed by the protocol stack 240. The packet is then passed to socket 245 associated with the terminating application 250. The terminating application 250 issues a recv() call to retrieve the data packet from the buffer of the associated socket.

しかしながら、この手法にはいくつかの問題がある。最初に、フィルタリング動作230はホストCPU上で作動する。フィルタリング230を作動させるために、ホストCPUは、ネットワークから受信される速度でデータパケットを処理しなければならない。ネットワークからデータが送受信される速度が速い場合、これはホストCPUの処理リソースの大きな損失を構成する可能性がある。フィルタリング動作230への高いデータ流量は、I/O帯域幅および内部メモリ/キャッシュ帯域幅などの他の限られたリソースの大量消費をもたらす可能性がある。 However, this method has several problems. First, the filtering operation 230 runs on the host CPU. To operate filtering 230, the host CPU must process data packets at the rate they are received from the network. If data is sent and received from the network at a high rate, this can constitute a significant loss of processing resources for the host CPU. High data traffic to filtering operation 230 can lead to heavy consumption of other limited resources, such as I/O bandwidth and internal memory/cache bandwidth.

データパケットのカーネルへの再注入を実行するために、再注入を実行するための特権APIをフィルタリング動作230に提供する必要がある。再注入プロセスは煩雑であり、パケットの順序付けに注意を要する場合がある。再注入を実行するために、動作230は、多くの場合、専用のCPUコアを必要とし得る。 To perform reinjection of data packets into the kernel, it is necessary to provide the filtering operation 230 with a privileged API for performing the reinjection. The reinjection process is complex and may require careful packet ordering. To perform the reinjection, operation 230 may often require a dedicated CPU core.

データを動作に提供し、再注入するステップは、データをメモリにコピーし、メモリからコピーする必要がある。このコピーは、システムに対するリソース負荷である。 The steps of providing data to the operation and reinjecting it require copying the data to memory and then copying it back from memory. This copying represents a resource burden on the system.

ネットワークを介して送受信されるデータに対するフィルタリング以外の他のタイプの動作を提供する場合にも、同様の問題が発生する可能性がある。 Similar problems can occur when providing other types of behavior besides filtering for data transmitted and received over a network.

いくつかの動作(DPDKタイプの動作など)は、処理されたパケットをネットワーク上に戻す転送を必要とする場合がある。 Some operations (such as DPDK-type operations) may require the processing of packets to be forwarded back onto the network.

別の手法を示す図3を参照する。同様の要素は、同様の参照符号によって参照される。この例では、エクスプレスデータパス(XDP)310として知られる追加の層が、カーネルにおける送信および受信経路へ挿入される。XDP 310への拡張は、送信経路への挿入を可能にする。XDPヘルパは、(受信動作の結果として)パケットが送信されることを可能にする。XDP 310は、オペレーティングシステムのドライバレベルで挿入され、スタック240によってプロトコル処理される前にネットワークから受信されるデータパケットに対して動作を実行するように、このレベルでプログラムが実行されることを可能にする。XDP 310はまた、ネットワークを介して送信されるデータパケットに対して動作を実行するために、このレベルでプログラムが実行されることを可能にする。したがって、eBPFプログラムおよび他のプログラムは、送信経路および受信経路において動作することができる。 Refer to Figure 3, which illustrates another method. Similar elements are referred to by similar reference numerals. In this example, an additional layer known as the Express Data Path (XDP) 310 is inserted into the transmit and receive paths in the kernel. The extension to XDP 310 enables insertion into the transmit path. The XDP helper enables packets to be transmitted (as a result of receive operations). XDP 310 is inserted at the operating system driver level, allowing programs to run at this level to perform operations on data packets received from the network before being protocol-processed by the stack 240. XDP 310 also allows programs to run at this level to perform operations on data packets transmitted over the network. Thus, eBPF programs and other programs can operate in both the transmit and receive paths.

図3に例示されるように、フィルタリング動作320は、XDP 310の一部であるプログラム330を形成するために、ユーザ空間からXDPへ挿入され得る。動作320は、データ受信経路上で実行されることになるXDP制御プレーンを使用して挿入されて、受信経路上のパケットに対してフィルタリング動作(例えばDDOSスクラブ)を実行するプログラム330を提供する。このようなプログラム330は、eBPFプログラムであってもよい。 As illustrated in Figure 3, filtering operation 320 can be injected into XDP from user space to form program 330, which is part of XDP 310. Operation 320 is injected using the XDP control plane, which will run on the data reception path, to provide program 330 that performs filtering operations (e.g., DDOS scrubbing) on packets on the reception path. Such program 330 may be an eBPF program.

プログラム330は、ドライバ235とプロトコルスタック240との間でカーネルに挿入されて示されている。しかしながら、他の例では、プログラム330は、カーネル内の受信経路内の他の点に挿入されてもよい。プログラム330は、データパケットを受信する別個の制御経路の一部であってもよい。プログラム330は、アプリケーションによって、そのアプリケーションのためのソケット245のアプリケーションプログラミングインターフェース(API)に対する拡張を提供することによって提供されてもよい。 Program 330 is shown as being inserted into the kernel between driver 235 and protocol stack 240. However, in other examples, program 330 may be inserted at other points in the receive path within the kernel. Program 330 may also be part of a separate control path that receives data packets. Program 330 may be provided by an application by providing an extension to the application programming interface (API) of socket 245 for that application.

このプログラム330は、付加的または代替的に、送信経路を介して送信されているデータに対して1つまたは複数の動作を実行することができる。次いで、XDP 310は、ネットワークインターフェースデバイス210を介してネットワークを介してデータを送信するためにドライバ235の送信機能を呼び出す。この場合のプログラム330は、ネットワークを介して送信されるべきデータパケットに関する負荷分散またはルーティング動作を提供することができる。プログラム330は、ネットワークを介して送信されるべきデータパケットに関するセグメント再カプセル化および転送動作を提供することができる。 This program 330 can, additionally or alternatively, perform one or more operations on data being transmitted through the transmission path. The XDP 310 then invokes the transmit function of the driver 235 to transmit data over the network via the network interface device 210. In this case, program 330 can provide load balancing or routing operations for data packets to be transmitted over the network. Program 330 can also provide segment reencapsulation and forwarding operations for data packets to be transmitted over the network.

プログラム330は、ファイアウォール、仮想スイッチング、またはプロトコル終了もしくはアプリケーション処理を必要としない他の動作に使用することができる。 Program 330 can be used for firewalls, virtual switching, or other operations that do not require protocol termination or application processing.

このようにXDP 310を使用する利点の1つは、プログラム330が中間コピーなしでドライバによって処理されるメモリバッファに直接アクセスできることである。 One advantage of using XDP 310 in this way is that program 330 can directly access the memory buffers processed by the driver without intermediate copying.

このように動作のためのプログラム330をカーネルに挿入するためには、プログラム330が安全であることを保証する必要がある。安全でないプログラムがカーネルに挿入される場合、これは、カーネルをクラッシュさせる可能性がある無限ループ、バッファオーバフロー、初期化されない変数、コンパイラエラー、大型プログラムによって引き起こされる性能問題などの特定のリスクをもたらす。 In order to insert program 330 for operation into the kernel in this way, it is necessary to ensure that program 330 is safe. If an unsafe program is inserted into the kernel, this introduces certain risks, such as infinite loops that can crash the kernel, buffer overflows, uninitialized variables, compiler errors, and performance problems caused by large programs.

このようにしてXDP 310に挿入される前にプログラム330が安全であることを保証するために、検証器がホストシステム220上で作動して、プログラム330の安全性を検証することができる。検証器は、ループが存在しないことを保証するように構成することができる。後方ジャンプ動作は、ループを発生させない限り許可され得る。検証器は、プログラム330が所定数(例えば、4000)以下の命令を有することを保証するように構成することができる。検証器は、プログラム330のデータパスをトラバースすることによってレジスタ使用の有効性のチェックを実行することができる。可能な経路が多すぎる場合、プログラム330は、カーネルモードで実行するのに安全ではないとして拒否される。例えば、1000を超える分岐がある場合、プログラム330は拒否され得る。 To ensure that program 330 is safe before being inserted into XDP 310, a verifier can operate on the host system 220 to verify the safety of program 330. The verifier can be configured to ensure the absence of loops. Backward jump operations may be permitted as long as they do not create loops. The verifier can be configured to ensure that program 330 has no more than a predetermined number of instructions (e.g., 4000). The verifier can perform a check of register usage validity by traversing the data path of program 330. If there are too many possible paths, program 330 is rejected as unsafe to run in kernel mode. For example, if there are more than 1000 branches, program 330 may be rejected.

XDPは、安全なプログラム330をカーネルにおいてインストールすることができる一例であり、これを達成することができる他の方法があることが当業者には理解されよう。 XDP is one example of how a secure program 330 can be installed in the kernel, and those skilled in the art will understand that there are other ways to achieve this.

図3に関して上述した手法は、例えば、動作がカーネルにおいてコードを実行するために必要な安全な(またはサンドボックス化された)言語で表現できる場合、図2に関して上述した手法と同じくらい効率的であり得る。eBPF言語は、x86プロセッサ上で効率的に実行することができ、JIT(ジャストインタイム)コンパイル技法は、eBPFプログラムをネイティブマシンコードにコンパイルすることを可能にする。言語は安全であるように設計されており、例えば、状態は、(ハッシュテーブルなどの)共有データ構造である構造体のみをマッピングするように制限されている。許容されるループは制限されており、代わりに、1つのeBPFプログラムが別のeBPFプログラムをテールコールすることができる。状態空間は制約される。 The method described above for Figure 3 can be as efficient as the method described above for Figure 2, for example, if the operation can be expressed in a safe (or sandboxed) language necessary for the kernel to execute the code. The eBPF language can run efficiently on x86 processors, and JIT (just-in-time) compilation techniques enable the compilation of eBPF programs into native machine code. The language is designed to be safe; for example, state is restricted to mapping only structures that are shared data structures (such as hash tables). Permitted loops are restricted, and instead, one eBPF program can tail-call another eBPF program. The state space is constrained.

しかしながら、いくつかの実装形態では、この手法によれば、ホストシステム220のリソース(例えば、I/O帯域幅および内部メモリ/キャッシュ帯域幅、ホストCPU)上で大きな損失が存在し得る。データパケットに対する動作は依然としてホストCPUによって実行されており、ホストCPUは、データが送信/受信されている速度でそのような動作を実行する必要がある。 However, in some implementations, this method can result in significant resource losses on the host system 220 (e.g., I/O bandwidth and internal memory/cache bandwidth, host CPU). The operations on data packets are still performed by the host CPU, and the host CPU needs to perform such operations at the rate in which the data is being transmitted/received.

別の提案は、ホストシステムではなくネットワークインターフェースデバイスで上記の動作を実行することである。そうすることにより、消費されるI/O帯域幅、メモリおよびキャッシュ帯域幅に加えて、動作を実行するときにホストCPUによって使用されるCPUサイクルを解放することができる。処理動作の実行をホストからネットワークインターフェースデバイスのハードウェアに移行することは、いくつかの課題を提示し得る。 Another suggestion is to perform the above operations on the network interface device rather than the host system. Doing so would free up CPU cycles used by the host CPU when performing the operations, in addition to the consumed I/O bandwidth, memory, and cache bandwidth. Shifting the execution of processing operations from the host to the network interface device hardware may present several challenges.

ネットワークハードウェアにおいて処理を実施するための1つの提案は、パケット処理および/または操作動作に特化した複数のCPUを備えるネットワーク処理ユニット(NPU)をネットワークインターフェースデバイスに提供することである。 One proposed solution for performing processing in network hardware is to provide a network processing unit (NPU) with multiple CPUs specialized for packet processing and/or operational tasks to the network interface device.

例えばCPU 420などの中央処理装置(CPU)のアレイ410を備えるネットワークインターフェースデバイス400の例を示している、図4を参照する。CPUは、ネットワークから送受信されるデータパケットをフィルタリングするなどの機能を実行するように構成される。CPUのアレイ410の各CPUは、NPUであってもよい。図4には示されていないが、CPUは、付加的または代替的に、ネットワークを介した送信のためにホストから受信されるデータパケットに対する負荷分散などの動作を実行するように構成されてもよい。これらのCPUは、そのようなパケット処理/操作動作に特化している。CPUは、このようなパケット処理/操作動作に最適化された命令セットを実行する。 Refer to Figure 4, which shows an example of a network interface device 400 comprising an array 410 of central processing units (CPUs), such as CPU 420. The CPUs are configured to perform functions such as filtering data packets transmitted and received from the network. Each CPU in the CPU array 410 may be an NPU. Although not shown in Figure 4, the CPUs may also be configured to perform additional or alternative operations such as load balancing of data packets received from hosts for transmission over the network. These CPUs are specialized for such packet processing/manipulation operations. The CPUs execute instruction sets optimized for such packet processing/manipulation operations.

ネットワークインターフェースデバイス400は、CPUのアレイ410の間で共有され、アレイにとってアクセス可能なメモリ(図示せず)をさらに備える。 The network interface device 400 is shared among the CPU arrays 410 and further includes memory (not shown) accessible to the arrays.

ネットワークインターフェースデバイス400は、ネットワークインターフェースデバイス400をネットワークとインターフェースするためのネットワーク媒体アクセス制御(MAC)層430を備える。MAC層430は、ネットワークを介してデータパケットを受信し、ネットワークを介してデータパケットを送信するように構成される。 The network interface device 400 includes a network medium access control (MAC) layer 430 for interface the network interface device 400 with the network. The MAC layer 430 is configured to receive data packets over the network and transmit data packets over the network.

ネットワークインターフェースデバイス400において受信されるパケットに対する動作は、CPUにわたって並列化される。図示のように、MAC層430においてデータフローが受信されると、それは拡散機能440に渡され、拡散機能は、フローからデータパケットを抽出し、CPUがこれらのデータパケットの処理、例えばフィルタリングを実行するために、NPU 410内の複数のCPUにわたってデータパケットを分配するように構成される。拡散機能440は、受信データパケットを解析して、それらが属するデータフローを識別することができる。拡散機能440は、各パケットについて、パケットが属するデータフロー内のそれぞれのパケットの位置の指示を生成する。指示は、例えば、タグであってもよい。拡散機能440は、各パケットの関連するメタデータにそれぞれの指示を追加する。各データパケットの関連するメタデータは、データパケットに付加することができる。関連するメタデータは、サイドバンド制御情報として拡散機能440に渡すことができる。指示は、任意の特定のフローのデータパケットの順序が再構築され得るように、データパケットが属するフローに応じて追加される。 The operation on packets received by the network interface device 400 is parallelized across the CPUs. As shown in the figure, when a data flow is received at the MAC layer 430, it is passed to the spreading function 440, which is configured to extract data packets from the flow and distribute them across multiple CPUs in the NPU 410 for the CPUs to process these data packets, such as filtering. The spreading function 440 can analyze the received data packets to identify the data flow to which they belong. For each packet, the spreading function 440 generates an instruction for the location of each packet within the data flow to which the packet belongs. The instruction may be, for example, a tag. The spreading function 440 adds the respective instruction to the relevant metadata of each packet. The relevant metadata of each data packet can be appended to the data packet. The relevant metadata can be passed to the spreading function 440 as sideband control information. The instructions are added according to the flow to which the data packets belong so that the order of data packets in any particular flow can be reconstructed.

複数のCPU 410によってプログラミングされた後、データパケットは次いで、再順序付け機能450に渡され、再順序付け機能は、データフローのパケットをホストインターフェース層460に渡す前に正しい順序に順序付けし直す。再順序付け機能450は、フローのデータパケット内の指示(例えば、タグ)を比較してデータパケットの順序を再構築することによって、フロー内のデータパケットを順序付けし直すことができる。次いで、順序付けし直されたデータパケットは、ホストインターフェース460をトラバースし、ホストシステム220に送達される。 After being programmed by multiple CPUs 410, the data packets are then passed to a reordering function 450, which reorders the data flow packets into the correct order before passing them to the host interface layer 460. The reordering function 450 can reorder data packets in a flow by comparing the instructions (e.g., tags) within the data packets of the flow and reconstructing the order of the data packets. The reordered data packets then traverse the host interface 460 and are delivered to the host system 220.

図4は、ネットワークから受信されるデータパケットに対してのみ動作するCPUのアレイ410を示しているが、ネットワークを介した送信のためにホストから受信されるデータパケットに対して同様の原理(拡散および順序付けし直しを含む)を実行することができ、CPUのアレイ410は、ホストから受信されるこれらのデータパケットに対して機能(例えば、負荷分散)を実行する。 Figure 4 shows an array of CPUs 410 that operates only on data packets received from the network. However, similar principles (including spreading and reordering) can be applied to data packets received from a host for transmission over the network, and the array of CPUs 410 performs functions (e.g., load balancing) on these data packets received from the host.

CPUによって実行されるプログラムは、図3に関して上述した例においてホストCPU上で実行されるプログラムのコンパイルまたはトランスコードされたバージョンであってもよい。言い換えれば、動作を実行するためにホストCPU上で実行される命令セットは、ネットワークインターフェース400内の専用CPUの各CPUアレイ上での実行のために変換される。 The program executed by the CPU may be a compiled or transcoded version of the program executed on the host CPU in the example described above with respect to Figure 3. In other words, the instruction set executed on the host CPU to perform the operation is translated for execution on each CPU array of the dedicated CPUs within the network interface 400.

CPUにわたる並列化を達成するために、プログラムの複数のインスタンスがコンパイルされ、複数のCPU上で並列に実行される。プログラムの各インスタンスは、ネットワークインターフェースデバイスにおいて受信されるデータパケットの異なるセットを処理する役割を果たすことができる。しかしながら、各個々のデータパケットは、そのデータパケットに対してプログラムの機能を提供するときに単一のCPUによって処理される。並列プログラムの実行の全体的な効果は、ホストCPU上での単一のプログラム(例えば、プログラム330)の実行と同じであり得る。 To achieve parallelism across CPUs, multiple instances of a program are compiled and executed in parallel on multiple CPUs. Each instance of the program can be responsible for processing a different set of data packets received by a network interface device. However, each individual data packet is processed by a single CPU when providing the program's functionality to that data packet. The overall effect of parallel program execution may be the same as running a single program (e.g., program 330) on the host CPU.

専用のCPUのうちの1つは、毎秒5000万パケット程度でデータパケットを処理することができる。この動作速度は、ホストCPUの動作速度よりも低速であり得る。したがって、並列化を使用して、ホストCPU上で同等のプログラムを実行することによって達成されるのと同じ性能を達成することができる。並列化を実行するために、データパケットはCPU上に拡散され、次いでCPUによる処理後に順序付けし直される。再順序付けステップ450と共に各フローのデータパケットを順に処理する要件は、ボトルネックを導入し、メモリリソースオーバーヘッドを増加させる可能性があり、デバイスの利用可能なスループットを制限する可能性がある。この要件および再順序付けステップ450は、ネットワークトラフィックの内容および並列性を適用できる程度に応じて処理スループットが変動する可能性があるため、デバイスのジッタを増加させる可能性がある。 One of the dedicated CPUs can process data packets at a rate of approximately 50 million packets per second. This operating speed may be slower than that of the host CPU. Therefore, parallelization can be used to achieve the same performance as that achieved by running an equivalent program on the host CPU. To perform parallelization, data packets are spread across the CPUs and then reordered after processing by the CPUs. The requirement to process data packets in each flow sequentially, along with the reordering step 450, can introduce a bottleneck, increase memory resource overhead, and limit the available throughput of the device. This requirement and the reordering step 450 can increase device jitter because processing throughput may fluctuate depending on the content of the network traffic and the degree to which parallelism can be applied.

このような専用CPUを使用する利点の1つは、短いコンパイル時間であり得る。例えば、そのようなCPU上で1秒未満で実行するように、フィルタリングアプリケーションをコンパイルすることが可能であり得る。 One advantage of using such a dedicated CPU is potentially the short compilation time. For example, it might be possible to compile a filtering application to run on such a CPU in less than one second.

この手法がより高いリンク速度にスケーリングされる場合、CPUのアレイの使用に問題があり得る。ホストネットワークインターフェースが、近い将来にテラビット/秒の速度に到達するために必要とされ得る。このようなCPUアレイ410をこれらのより高い速度にスケールアップする場合、必要な電力量が問題になる可能性がある。 If this method scales to higher link speeds, the use of the CPU array may become problematic. The host network interface may need to reach speeds of terabits per second in the near future. If such a CPU array 410 is scaled up to these higher speeds, the required power consumption may become an issue.

別の提案は、ネットワークインターフェースデバイスにフィールドプログラマブルゲートアレイ(FPGA)を含め、FPGAを使用してネットワークから受信されるデータパケットに対して動作を実行することである。 Another proposal involves incorporating a field-programmable gate array (FPGA) into the network interface device and using the FPGA to perform actions on data packets received from the network.

ネットワークインターフェースデバイス500において受信されるデータパケットに対して動作を実行するためのFPGAアプリケーション515を有するFPGA 510の、ネットワークインターフェースデバイス500における使用の一例を示す図5を参照する。図4にあるものと同様の要素は、同様の参照符号によって参照される。 Refer to Figure 5, which shows an example of the use of FPGA 510 in network interface device 500, having an FPGA application 515 for performing operations on data packets received by network interface device 500. Elements similar to those in Figure 4 are referred to by the same reference numerals.

図5は、ネットワークから受信されるデータパケットに対してのみ動作するFPGAアプリケーション515を示しているが、そのようなFPGAアプリケーション515は、ネットワークを介した送信のために、またはホストもしくはシステム上の別のネットワークインターフェースに戻すために、ホストから受信されるこれらのデータパケットに対して機能(例えば、負荷分散および/またはファイアウォール機能)を実行するために使用されてもよい。 Figure 5 shows an FPGA application 515 that operates only on data packets received from the network. However, such an FPGA application 515 may also be used to perform functions (e.g., load balancing and/or firewall functions) on these data packets received from the host for transmission over the network or for return to another network interface on the host or system.

FPGAアプリケーション515は、CもしくはC++またはscalaなどの一般的なシステムレベル言語で記述されたプログラムをFPGA 510上で作動するようにコンパイルすることによって提供することができる。 FPGA applications 515 can be provided by compiling programs written in common system-level languages such as C, C++, or scala to run on FPGA 510.

そのFPGA 510は、ネットワークインターフェース機能およびFPGA機能を有することができる。FPGA機能は、ネットワークインターフェースデバイスのユーザの必要に応じてFPGA 510にプログラムされ得るFPGAアプリケーション515を提供することができる。FPGAアプリケーション515は、例えば、ネットワーク230からホストへの受信経路上でメッセージのフィルタリングを提供することができる。FPGAアプリケーション515は、ファイアウォールを提供することができる。 The FPGA 510 may have both network interface functionality and FPGA functionality. The FPGA functionality can provide FPGA applications 515 that can be programmed into the FPGA 510 according to the needs of the network interface device user. For example, the FPGA application 515 can provide message filtering on the receiving path from network 230 to the host. The FPGA application 515 can also provide a firewall.

FPGA 510は、FPGAアプリケーション515を提供するようにプログラム可能とすることができる。ネットワークインターフェースデバイス機能の一部は、FPGA 510内の「ハード」ロジックとして実装されてもよい。例えば、ハードロジックは、特定用途向け集積回路(ASIC)のゲートであってもよい。FPGAアプリケーション515は、「ソフト」ロジックとして実装されてもよい。ソフトロジックは、FPGA LUT(ルックアップテーブル)をプログラミングすることによって提供されてもよい。ハードロジックは、ソフトロジックと比較してより高いレートでクロックされることが可能であり得る。 The FPGA 510 can be programmed to provide an FPGA application 515. Some of the network interface device functions may be implemented as “hard” logic within the FPGA 510. For example, the hard logic may be gates of an application-specific integrated circuit (ASIC). The FPGA application 515 may be implemented as “soft” logic. The soft logic may be provided by programming an FPGA LUT (lookup table). The hard logic may be clocked at a higher rate than the soft logic.

ネットワークインターフェースデバイス500は、ホストとデータを送受信するように構成されたホストインターフェース505を備える。ネットワークインターフェースデバイス520は、ネットワークとデータを送受信するように構成されたネットワーク媒体アクセス制御(MAC)インターフェース520を含む。 The network interface device 500 includes a host interface 505 configured to send and receive data with a host. The network interface device 520 includes a network medium access control (MAC) interface 520 configured to send and receive data with the network.

MACインターフェース520においてネットワークからデータパケットが受信されると、データパケットはFPGAアプリケーション515に渡され、FPGAアプリケーションはデータパケットに対してフィルタリングなどの機能を実行するように構成されている。次いで、データパケット(任意のフィルタリングを通過する場合)は、ホストインターフェース505に渡され、そこからホストに渡される。あるいは、データパケットFPGAアプリケーション515は、データパケットをドロップまたは再送信することを決定することができる。 When a data packet is received from the network via the MAC interface 520, the data packet is passed to the FPGA application 515, which is configured to perform functions such as filtering on the data packet. The data packet (if it passes any filtering) is then passed to the host interface 505, and from there to the host. Alternatively, the FPGA application 515 can decide to drop or retransmit the data packet.

FPGAを使用してデータパケットに対して機能を実行するこの手法に伴う1つの問題は、必要とされるコンパイル時間が比較的長いことである。FPGAは、AND、OR、NOTなどのようなプリミティブ論理演算を個別に表す多くの論理要素(例えば論理セル)から構成される。これらの論理要素は、プログラム可能な相互接続を有するマトリクスに配置構成される。機能を提供するために、これらの論理セルは、回路定義および同期クロックタイミング制約を実施するためにともに動作する必要があり得る。各論理セルを配置し、セル間をルーティングすることは、アルゴリズム的に困難な課題であり得る。利用レベルがより低いFPGA上でコンパイルする場合、コンパイル時間は10分未満であり得る。しかしながら、FPGAデバイスが様々なアプリケーションによってより利用されるようになるにつれて、所与の機能をFPGA上にコンパイルする時間が増加するように、場所およびルートの課題が増大する可能性がある。そのため、そのルーティングリソースの大部分が既に消費されているFPGAに追加のロジックを追加するには、数時間のコンパイル時間がかかる場合がある。 One problem associated with this approach of using FPGAs to perform functions on data packets is the relatively long compilation time required. An FPGA consists of many logic elements (e.g., logic cells) that individually represent primitive logic operations such as AND, OR, and NOT. These logic elements are arranged and configured in a matrix with programmable interconnections. To provide functionality, these logic cells may need to work together to enforce circuit definitions and synchronous clock timing constraints. Arranging each logic cell and routing between them can be an algorithmically challenging task. Compiling on FPGAs with lower utilization levels may take less than 10 minutes. However, as FPGA devices become more widely used by various applications, the challenges of location and routing may increase, leading to longer compilation times for a given function on the FPGA. Therefore, adding additional logic to an FPGA where a significant portion of its routing resources are already consumed may require several hours of compilation.

1つの手法は、解析プリミティブ、マッチングプリミティブ、およびアクションプリミティブなどの特定の処理プリミティブを使用してハードウェアを設計することである。これらは、すべてのパケットが3つのプロセスの各々を受ける処理パイプラインを構築するために使用され得る。最初に、パケットが解析されて、プロトコルヘッダのメタデータ表現が構築される。第二に、パケットは、テーブルに保持された規則と柔軟にマッチングされる。最後に、一致がみつかったとき、パケットは、マッチング動作において選択されたテーブルからのエントリに応じて動作される。 One approach is to design the hardware using specific processing primitives, such as parsing primitives, matching primitives, and action primitives. These can be used to construct a processing pipeline in which every packet undergoes one of three processes. First, the packet is parsed to construct a metadata representation of the protocol header. Second, the packet is flexibly matched against rules held in a table. Finally, when a match is found, the packet is acted upon according to the entry from the table selected in the matching operation.

解析/マッチング/アクションモデルを使用して機能を実装するために、P4プログラミング言語(または同様の言語)を使用することができる。P4プログラミング言語は、標的に依存せず、これは、P4で書かれたプログラムをコンパイルして、CPU、FPGA、ASIC、NPUなどのような異なるタイプのハードウェアで実行できることを意味する。各異なるタイプの標的には、P4ソースコードを適切な標的スイッチモデルにマッピングする独自のコンパイラが設けられている。 The P4 programming language (or a similar language) can be used to implement functionality using analysis/matching/action models. The P4 programming language is target-independent, meaning that programs written in P4 can be compiled and executed on different types of hardware such as CPUs, FPGAs, ASICs, and NPUs. Each different type of target has its own compiler that maps the P4 source code to the appropriate target switch model.

P4は、高レベルプログラムがパケット処理パイプラインのパケット処理動作を表現することを可能にするプログラミングモデルを提供するために使用され得る。この手法は、宣言的なスタイルで自然に自身を表現する動作に対して良好に機能する。P4言語では、プログラマは、解析、マッチング、およびアクションステージを、受信されるデータパケットに対して実行される動作として表現する。これらの動作は、効率的に実行するために専用ハードウェアについてまとめられている。しかしながら、この宣言的なスタイルは、eBPFプログラムなどの命令的な性質のプログラムを表現するのに適切ではない場合がある。 P4 can be used to provide a programming model that allows high-level programs to express the packet processing operations of a packet processing pipeline. This approach works well for operations that naturally express themselves in a declarative style. In the P4 language, the programmer expresses the parsing, matching, and action stages as operations performed on an incoming data packet. These operations are grouped together for dedicated hardware to perform efficiently. However, this declarative style may not be suitable for expressing programs of an imperative nature, such as eBPF programs.

ネットワークインターフェースデバイスでは、eBPFプログラムのシーケンスが連続的に実行される必要があり得る。この場合、互いに呼び合うeBPFプログラムのチェーンが生成される。各プログラムは、状態を修正することができ、出力は、プログラムのチェーン全体が連続的に実行されたかのようになる。コンパイラがすべての解析、マッチング、およびアクションステップを収集することは困難であり得る。しかしながら、eBPFプログラムのチェーンが既にインストールされている場合であっても、チェーンをインストール、削除、または変更する必要があり得、さらなる課題を提示する可能性がある。 Network interface devices may require a sequence of eBPF programs to be executed sequentially. In this case, a chain of eBPF programs calling each other is generated. Each program can modify its state, and the output will appear as if the entire program chain had been executed sequentially. It can be difficult for the compiler to collect all the analysis, matching, and action steps. However, even if a chain of eBPF programs is already installed, it may be necessary to install, remove, or modify the chain, potentially presenting further challenges.

リピート実行を必要とするそのようなプログラムの例を提供するために、データパケットを処理するように構成されたプログラムe、e、eのシーケンスの例を示す図10を参照する。各プログラムは、例えば、eBPFプログラムであってもよい。各プログラムは、受信データパケットを解析し、テーブル1010内の一致するエントリにおけるアクションを決定するためにテーブル1010内のルックアップを実行し、次いでデータパケットに対するアクションを実行するように構成される。アクションは、パケットを修正することを含むことができる。各eBPFプログラムはまた、ローカル状態および共有状態に応じてアクションを実行することができる。データパケットPは、パイプライン内の次のプログラムeに渡され、修正される前に、eBPFプログラムeによって最初に処理される。プログラムのシーケンスの出力は、パイプライン内の最終プログラムの出力、すなわちeである。 To provide an example of such a program requiring repeated execution, see Figure 10, which shows an example sequence of programs e1 , e2 , and e3 configured to process data packets. Each program may be, for example, an eBPF program. Each program is configured to parse an incoming data packet, perform a lookup in table 1010 to determine an action in a matching entry in table 1010, and then perform an action on the data packet. The action may include modifying the packet. Each eBPF program may also perform an action depending on the local and shared state. Data packet P0 is first processed by eBPF program e1 before being passed to the next program in the pipeline, e2 , and modified. The output of the sequence of programs is the output of the final program in the pipeline, i.e., e3 .

n個のそのようなプログラムの各々の効果を単一のP4プログラムに組み合わせることは、コンパイラにとって複雑であり得る。さらに、特定のプログラミングモデル(XDPなど)は、状況の変化に応じて迅速に、プログラムのシーケンスの任意の時点においてプログラムを動的に挿入および削除する必要があり得る。 Combining the effects of n such programs into a single P4 program can be complex for a compiler. Furthermore, certain programming models (such as XDP) may require the dynamic insertion and removal of programs at any point in the program sequence in response to changing circumstances.

本出願のいくつかの実施形態によれば、複数の処理ユニットを備えるネットワークインターフェースデバイスが提供される。各処理ユニットは、ハードウェアにおいて少なくとも1つの所定の動作を実行するように構成される。各処理ユニットは、それ自体のローカル状態を記憶するメモリを備える。各処理ユニットは、この状態を変更するデジタル回路を備える。デジタル回路は、特定用途向け集積回路であってもよい。各処理ユニットは、それぞれの複数の動作を実行するように、構成可能なパラメータを含むプログラムを実行するように構成される。各処理ユニットはアトムであってもよい。アトムは、予め定義されたテンプレートの特定のプログラミングおよびルーティングによって定義される。これは、接続された複数の処理ユニットによって提供されるフローにおけるその特定の動作挙動および論理的場所を定義する。「アトム」という用語が本明細書で使用される場合、これは、単一のステップでその動作を実行するように構成されたデータ処理ユニットを指すと理解され得る。すなわち、アトムは、その動作をアトム動作として実行する。 According to some embodiments of this application, a network interface device comprising multiple processing units is provided. Each processing unit is configured in hardware to perform at least one predetermined operation. Each processing unit includes memory for storing its own local state. Each processing unit includes digital circuitry for modifying this state. The digital circuitry may be an application-specific integrated circuit. Each processing unit is configured to execute a program containing configurable parameters to perform each of the multiple operations. Each processing unit may be an atom. An atom is defined by specific programming and routing of a predefined template. This defines its specific operational behavior and logical location in the flow provided by the connected multiple processing units. Where the term “atom” is used herein, it may be understood to refer to a data processing unit configured to perform its operation in a single step; that is, an atom performs its operation as an atom operation.

アトムは、1つまたは複数の入力を取り、1つまたは複数の出力を生成する、一連の計算のうちの1つを繰り返し実行するように構成することができるハードウェア構造の集合と見なすことができる。 An atom can be viewed as a set of hardware structures that can be configured to repeatedly perform one of a series of computations, each taking one or more inputs and producing one or more outputs.

アトムはハードウェアによって提供される。アトムは、コンパイラによって構成されてもよい。アトムは、計算を実行するように構成され得る。 Atoms are provided by hardware. Atoms may be configured by a compiler. Atoms may be configured to perform computations.

コンパイル中、複数の処理ユニットのうちの少なくともいくつかは、複数の処理ユニットのうちの少なくともいくつかによってネットワークインターフェースデバイスにおいて受信されるデータパケットに関して機能が実行されるように、動作を実行するように構成される。複数の処理ユニットの少なくともいくつかの各々は、データパケットに関して機能を実行するように、それぞれの少なくとも1つの所定の動作を実行するように構成される。言い換えれば、接続された処理ユニットが実行するように構成された動作は、受信データパケットに対して実行される。動作は、複数の処理ユニットの少なくともいくつかによって順次実行される。集合的に、複数の動作の各々の実行は、受信パケットに関する機能、例えばフィルタリングを提供する。 During compilation, at least some of the processing units are configured to perform actions such that functions are performed on data packets received by the network interface device by at least some of the processing units. Each of at least some of the processing units is configured to perform at least one predetermined action on the data packets. In other words, the actions configured for the connected processing units are performed on the received data packets. The actions are performed sequentially by at least some of the processing units. Collectively, the execution of each of the actions provides a function on the received packets, such as filtering.

機能を実行するようにそれぞれの少なくとも1つの所定の動作を実行するように各アトムを配置することによって、図5に関して上述したFPGAアプリケーション例と比較してコンパイル時間を短縮することができる。さらに、ハードウェア内で特定の動作を実行するために特に専用にされている処理ユニットを使用して機能を実行することにより、図4に関して上述したように、ネットワークインターフェースデバイス内のソフトウェアを実行するCPUを使用して各データパケットの機能を実行することに関して、機能を実行できる速度を改善することができる。 By arranging each atom to perform at least one predetermined operation to execute a function, compilation time can be reduced compared to the FPGA application example described above with respect to Figure 5. Furthermore, by executing functions using processing units specifically dedicated to performing particular operations within the hardware, the speed at which functions can be executed can be improved, as described above with respect to Figure 4, with respect to using the CPU running the software within the network interface device to execute the function of each data packet.

本出願の実施形態によるネットワークインターフェースデバイス600の一例を示す図6を参照する。ネットワークインターフェースデバイスは、ネットワークインターフェースデバイス600のインターフェースにおいて受信されるデータパケットの処理を実行するように構成されたハードウェアモジュール610を備える。図6は、受信経路上のデータパケットのための機能(例えば、フィルタリング)を実行するハードウェアモジュール610を示しているが、ハードウェアモジュール610は、ホストから受信される送信経路上のデータパケットのための機能(例えば、負荷分散またはファイアウォール)を実行するためにも使用され得る。 Refer to Figure 6, which shows an example of a network interface device 600 according to an embodiment of this application. The network interface device includes a hardware module 610 configured to perform processing of data packets received on the interface of the network interface device 600. Figure 6 shows the hardware module 610 performing a function for data packets on the receiving path (e.g., filtering), but the hardware module 610 may also be used to perform a function for data packets on the transmitting path received from a host (e.g., load balancing or firewall).

ネットワークインターフェースデバイス600は、ホストとデータパケットを送受信するためのホストインターフェース620と、ネットワークとデータパケットを送受信するためのネットワークMACインターフェース630とを含む。 The network interface device 600 includes a host interface 620 for sending and receiving data packets with a host, and a network MAC interface 630 for sending and receiving data packets with the network.

ネットワークインターフェースデバイス600は、複数の処理ユニット640a、640b、640c、640dを備えるハードウェアモジュール610を備える。各処理ユニットは、アトム処理ユニットであってもよい。アトムという用語は、本明細書において処理ユニットを指すために使用される。各処理ユニットは、ハードウェアにおいて少なくとも1つの動作を実行するように構成される。処理ユニットの各々は、少なくとも1つの動作を実行するように構成されたデジタル回路645を備える。デジタル回路645は、特定用途向け集積回路であってもよい。処理ユニットの各々は、状態情報を記憶するメモリ650をさらに備える。デジタル回路645は、複数の動作のそれぞれを実行する際に、状態情報を更新する。ローカルメモリに加えて、各処理ユニットは、複数の処理ユニットの各々にアクセス可能な状態情報を同じく記憶することができる共有メモリ660にアクセスすることができる。 The network interface device 600 comprises a hardware module 610 having a plurality of processing units 640a, 640b, 640c, and 640d. Each processing unit may be an atom processing unit. The term "atom" is used herein to refer to a processing unit. Each processing unit is configured to perform at least one operation in hardware. Each processing unit includes a digital circuit 645 configured to perform at least one operation. The digital circuit 645 may be an application-specific integrated circuit. Each processing unit further includes a memory 650 for storing state information. The digital circuit 645 updates the state information when performing each of the plurality of operations. In addition to local memory, each processing unit can access a shared memory 660 that can also store state information accessible to each of the plurality of processing units.

共有メモリ660内の状態情報および/または処理ユニットのメモリ650内の状態情報は、処理ユニット間で渡されるメタデータ、一時変数、データパケットの内容、1つまたは複数の共有マップの内容のうちの少なくとも1つを含むことができる。 The state information in shared memory 660 and/or the state information in the processing unit's memory 650 may include at least one of the following: metadata passed between processing units, temporary variables, data packet contents, and the contents of one or more shared maps.

複数の処理ユニットは共に、ネットワークインターフェースデバイス600において受信されるデータパケットに対して実行される機能を提供することができる。コンパイラは、複数の処理ユニットのうちの少なくともいくつかを、各入来データパケットに関してそれらのそれぞれの少なくとも1つの所定の動作を実行するように構成することによって、入来データパケットに関して機能を実行するようにハードウェアモジュール610を構成するための命令を出力する。これは、処理ユニット640a、640b、640c、640dのうちの少なくともいくつかをともに連結(すなわち、接続)することによって達成され得、その結果、接続された処理ユニットの各々は、各入来データパケットに対してそれぞれの少なくとも1つの動作を実行する。各処理ユニットは、機能を実行するために、特定の順序でそれぞれの少なくとも1つの動作を実行する。順序は、2つ以上の処理ユニットが互いに並列に、すなわち同時に実行するようなものであってもよい。例えば、1つの処理ユニットは、第2の処理ユニットも同じデータパケット内の異なる位置から読み出す期間(ハードウェアモジュール610の周期信号(例えば、クロック信号)によって定義される)中にデータパケットから読み出すことができる。 The multiple processing units together can provide functions to be performed on data packets received by the network interface device 600. The compiler outputs instructions to configure the hardware module 610 to perform functions on incoming data packets by configuring at least some of the multiple processing units to perform at least one predetermined operation for each incoming data packet. This can be achieved by linking (i.e., connecting) at least some of the processing units 640a, 640b, 640c, and 640d together, so that each of the connected processing units performs at least one operation for each incoming data packet. Each processing unit performs at least one operation in a specific order to perform its function. The order may be such that two or more processing units execute in parallel, i.e., simultaneously. For example, one processing unit may read from a data packet during a period (defined by a periodic signal of the hardware module 610, e.g., a clock signal) in which a second processing unit also reads from a different location within the same data packet.

いくつかの実施形態では、データパケットは、処理ユニットによって表される各ステージを順に通過する。この場合、各処理ユニットは、その処理を実行するためにデータパケットを次の処理ユニットに渡す前にその処理を完了する。 In some embodiments, data packets sequentially pass through each stage represented by a processing unit. In this case, each processing unit completes its processing before passing the data packet to the next processing unit to perform its own processing.

図6に示す例では、処理ユニット640a、640b、および640dは、コンパイル時に互いに接続され、結果、それらの各々は、受信データパケットに関して機能、例えばフィルタリングを実行するように、それぞれの少なくとも1つの動作を実行する。処理ユニット640a、640b、640dは、データパケットを処理するためのパイプラインを形成する。データパケットは、各々が等しい期間を有する複数のステージにおいて、このパイプラインに沿って移動することができる。期間は、周期信号またはビートに従って定義することができる。期間は、クロック信号によって定義されてもよい。クロックのいくつかの期間は、パイプラインの各ステージの1つの期間を定義することができる。データパケットは、繰り返し期間の各発生の終わりにパイプライン内の1つのステージに沿って移動する。期間は、固定間隔であってもよい。あるいは、パイプライン内のステージの各期間は、可変量の時間を要してもよい。パイプラインの次のステージを示す信号は、前の処理ステージが動作を終了したときに生成されてもよく、これは可変の時間量を要し得る。ストールが、何らかの所定の時間量にわたって信号を遅延させることによって、パイプラインの任意のステージにおいて導入されてもよい。 In the example shown in Figure 6, processing units 640a, 640b, and 640d are connected to each other at compile time, and as a result, each of them performs at least one operation with respect to received data packets, such as performing filtering. Processing units 640a, 640b, and 640d form a pipeline for processing data packets. Data packets can travel along this pipeline in multiple stages, each having an equal duration. The duration can be defined according to a periodic signal or beat. The duration may also be defined by a clock signal. Several periods of the clock can define one duration for each stage of the pipeline. Data packets travel along one stage in the pipeline at the end of each occurrence of a repeating duration. The duration may be a fixed interval. Alternatively, each duration of a stage in the pipeline may require a variable amount of time. A signal indicating the next stage in the pipeline may be generated when the previous processing stage has finished its operation, and this may require a variable amount of time. A stall may be introduced at any stage of the pipeline by delaying the signal for some predetermined amount of time.

処理ユニット640a、640b、640dの各々は、それらのそれぞれの少なくとも1つの動作の一部として共有メモリ660にアクセスするように構成されてもよい。処理ユニット640a、640b、640dの各々は、それらのそれぞれの少なくとも1つの動作の一部としてメタデータを互いに渡すように構成されてもよい。処理ユニット640a、640b、640dの各々は、それらのそれぞれの少なくとも1つの動作の一部として、ネットワークから受信されるデータパケットにアクセスするように構成され得る。 Each of the processing units 640a, 640b, and 640d may be configured to access the shared memory 660 as part of at least one of their respective operations. Each of the processing units 640a, 640b, and 640d may be configured to pass metadata to each other as part of at least one of their respective operations. Each of the processing units 640a, 640b, and 640d may be configured to access data packets received from the network as part of at least one of their respective operations.

この例では、処理ユニット640cは、機能を提供するように受信データパケットの処理を実行するために使用されず、パイプラインから省略される。 In this example, processing unit 640c is not used to perform processing of incoming data packets to provide functionality and is therefore omitted from the pipeline.

ネットワークMAC層630において受信されるデータパケットは、処理のためにハードウェアモジュール610に渡され得る。図6には示されていないが、ハードウェアモジュール610によって実行される処理は、ハードウェアモジュール610によって提供される機能以外のデータパケットに関する追加の機能を提供するより大きな処理パイプラインの一部であってもよい。これは、図14に関して示されており、下記により詳細に説明される。 Data packets received at the network MAC layer 630 may be passed to the hardware module 610 for processing. Although not shown in Figure 6, the processing performed by the hardware module 610 may be part of a larger processing pipeline that provides additional functionality for data packets beyond the capabilities provided by the hardware module 610. This is illustrated with reference to Figure 14 and will be described in more detail below.

第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に渡され得、ホストインターフェースからホストシステムに渡される。 The first processing unit 640a is configured to perform at least one first operation on a data packet. This at least one first operation may include at least one of reading from the data packet, reading and writing to shared state in memory 660, and/or performing a lookup in a table to determine an action. The first processing unit 640a is then configured to produce a result from its at least one operation. The result may be in the form of metadata. The result may include modifications to the data packet. The result may include modifications to shared state in memory 660. The second processing unit 640b is configured to perform at least one operation on the first data packet in response to the result of the operation performed by the first processing unit 640a. The second processing unit 640b produces a result from its at least one operation and passes the result to the third processing unit 640d, which is configured to perform that at least one operation on the first data packet. The first processing unit 640a, the second processing unit 640b, and the third processing unit 640d are all configured to provide functionality related to the data packet. Next, the data packet may be passed to the host interface 620, and then from the host interface to the host system.

したがって、接続された処理ユニットは、ネットワークインターフェースデバイスにおいて受信されるデータパケットを処理するためのパイプラインを形成することが分かる。このパイプラインは、eBPFプログラムの処理を提供することができる。パイプラインは、複数のeBPFプログラムの処理を提供することができる。パイプラインは、順に実行される複数のモジュールの処理を提供することができる。 Therefore, it can be seen that the connected processing unit forms a pipeline for processing data packets received by the network interface device. This pipeline can provide processing for eBPF programs. The pipeline can provide processing for multiple eBPF programs. The pipeline can provide processing for multiple modules executed sequentially.

ハードウェアモジュール610内の処理ユニットの相互接続は、ハードウェアモジュール610の予め合成された相互接続ファブリックのルーティング機能をプログラムすることによって実行されてもよい。この相互接続ファブリックは、ハードウェアモジュール610の様々な処理ユニット間の接続を提供する。相互接続ファブリックは、ファブリックによってサポートされるトポロジに従ってプログラムされる。可能な例示的なトポロジを、図15を参照して下記に説明する。 The interconnection of processing units within the hardware module 610 may be performed by programming the routing function of a pre-composite interconnection fabric of the hardware module 610. This interconnection fabric provides connectivity between the various processing units of the hardware module 610. The interconnection fabric is programmed according to the topology supported by the fabric. Possible exemplary topologies are described below with reference to Figure 15.

ハードウェアモジュール610は、少なくとも1つのバスインターフェースをサポートする。少なくとも1つのバスインターフェースは、ハードウェアモジュール610においてデータパケットを受信する(例えば、ホストまたはネットワークから)。少なくとも1つのバスインターフェースは、ハードウェアモジュール610から(例えば、ホストまたはネットワークに)データパケットを出力する。少なくとも1つのバスインターフェースは、ハードウェアモジュール610において制御メッセージを受信する。制御メッセージは、ハードウェアモジュール610を構成するためのものであってもよい。 The hardware module 610 supports at least one bus interface. At least one bus interface receives data packets in the hardware module 610 (e.g., from a host or network). At least one bus interface outputs data packets from the hardware module 610 (e.g., to a host or network). At least one bus interface receives control messages in the hardware module 610. These control messages may be for configuring the hardware module 610.

図6に示す例は、図5に示すFPGAアプリケーション515と比較してコンパイル時間が短縮されるという利点を有する。図6のハードウェアモジュール610は、例えば、フィルタリング機能をコンパイルするために必要な時間が10秒未満であり得る。図6に示す例は、図4に示すCPUのアレイの例と比較して処理速度が向上するという利点を有する。 The example shown in Figure 6 has the advantage of reduced compilation time compared to the FPGA application 515 shown in Figure 5. For example, the hardware module 610 in Figure 6 may require less than 10 seconds to compile the filtering function. The example shown in Figure 6 also has the advantage of improved processing speed compared to the CPU array example shown in Figure 4.

アプリケーションは、汎用プログラム(または複数のプログラム)を予め合成されたデータパスにマッピングすることによって、そのようなハードウェアモジュール610における実行のためにコンパイルすることができる。コンパイラは、任意の数の処理ステージインスタンスをリンクすることによってデータパスを構築し、各インスタンスは、予め合成された処理ステージアトムのうちの1つから構築される。 An application can be compiled for execution on such a hardware module 610 by mapping a general-purpose program (or multiple programs) to a pre-composed data path. The compiler constructs the data path by linking any number of processing stage instances, each instance being constructed from one of the pre-composed processing stage atoms.

各アトムは回路から構築される。各回路は、RTL(レジスタ転送言語)または高レベル言語を使用して定義することができる。各回路は、コンパイラまたはツールチェーンを使用して合成される。アトムは、ハードロジックに合成されてもよく、そのため、ネットワークインターフェースデバイスのハードウェアモジュール内のハード(ASIC)リソースとして利用可能であってもよい。アトムは、ソフトロジックに合成されてもよい。ソフトロジック内のアトムには、物理デバイス上の合成ロジックの場所およびルート情報を割り当てて維持する制約を設けることができる。アトムは、アトムの挙動を指定する構成可能なパラメータを用いて設計することができる。各パラメータは、処理パイプラインのクロックサイクル中に処理ユニットによって実行されるべき少なくとも1つの動作を指定することができる変数、またはさらには動作のシーケンス(マイクロプログラム)であってもよい。アトムを実装するロジックは、同期的または非同期的にクロックされてもよい。 Each atom is constructed from a circuit. Each circuit can be defined using RTL (Register Transfer Language) or a high-level language. Each circuit is synthesized using a compiler or toolchain. Atoms may be synthesized into hard logic and therefore available as hard (ASIC) resources within the hardware module of a network interface device. Atoms may also be synthesized into soft logic. Atoms in soft logic can be constrained to assign and maintain location and routing information for the synthesized logic on the physical device. Atoms can be designed using configurable parameters that specify the atom's behavior. Each parameter may be a variable that specifies at least one operation to be performed by a processing unit during a clock cycle of the processing pipeline, or even a sequence of operations (microprogram). The logic implementing the atom may be clocked synchronously or asynchronously.

アトムの処理パイプライン自体は、周期信号に従って動作するように構成されてもよい。この場合、各データパケットおよびメタデータは、信号の各発生に応答してパイプラインに沿って1つのステージを移動する。処理パイプラインは非同期的に動作することができる。この場合、パイプライン内のより高いレベルの背圧は、上流ステージからのデータがそれに提示されたときにのみ、各下流ステージに処理を開始させる。 The atom's processing pipeline itself may be configured to operate according to a periodic signal. In this case, each data packet and metadata moves through one stage along the pipeline in response to each occurrence of the signal. The processing pipeline can operate asynchronously. In this case, a higher level of back pressure within the pipeline causes each downstream stage to begin processing only when data from the upstream stage is presented to it.

複数のそのようなアトムによって実行される機能をコンパイルするとき、コンピュータコード命令のシーケンスが複数の動作に分離され、各動作は単一のアトムにマッピングされる。各動作は、コンピュータコード命令内の逆アセンブルされた命令の単一の行を表すことができる。各動作は、アトムの1つによって実行されるように、アトムの1つに割り当てられる。コンピュータコード命令内の表現ごとに1つのアトムが存在し得る。各アトムは、1つのタイプの動作に関連付けられ、その関連付けられた動作のタイプに基づいてコンピュータコード命令内の少なくとも1つの動作を実行するように選択される。例えば、アトムは、データパケットからのロード動作を実行するように事前構成され得る。したがって、そのようなアトムは、コンピュータコード内のデータパケットからのロード動作を表す命令を実行するために割り当てられる。 When compiling a function executed by multiple such atoms, a sequence of computer code instructions is separated into multiple operations, each operation being mapped to a single atom. Each operation can represent a single line of disassembled instructions within the computer code instruction. Each operation is assigned to one of the atoms to be executed by one of the atoms. There may be one atom for each representation within the computer code instruction. Each atom is associated with one type of operation and is selected to execute at least one operation within the computer code instruction based on the type of operation it is associated with. For example, an atom may be pre-configured to perform a load operation from a data packet. Therefore, such an atom is assigned to execute an instruction in the computer code representing a load operation from a data packet.

コンピュータコード命令内で、1行につき1つのアトムを選択することができる。したがって、そのようなアトムを含むハードウェアモジュール内で機能を実装する場合、そのようなアトムが100個存在し得、各々がそのデータパケットに関して機能を実行するようにそれぞれの動作を実行する。 Within a computer code instruction, one atom can be selected per line. Therefore, when implementing a function within a hardware module containing such atoms, there may be 100 such atoms, each performing its own operation to execute the function for its data packet.

各アトムは、その関連する動作(複数可)のタイプを決定する処理ステージテンプレートのセットのうちの1つに従って構築することができる。コンパイルプロセスは、その関連するタイプに基づいて特定の少なくとも1つの動作を実行するように各アトムを制御するための命令を生成するように構成される。例えば、アトムがパケットアクセス動作を実行するように事前構成されている場合、コンパイルプロセスは、そのアトムに、パケットのヘッダから特定の情報(例えば、パケットのソースID)をロードするための動作を割り当てることができる。コンパイルプロセスは、命令をハードウェアモジュールに送信するように構成され、アトムは、コンパイルプロセスによってアトムに割り当てられた動作を実行するように構成される。 Each atom can be constructed according to one of a set of processing stage templates that determine the type of its associated operation(s). The compilation process is configured to generate instructions to control each atom to perform at least one specific operation based on its associated type. For example, if an atom is pre-configured to perform a packet access operation, the compilation process can assign it an operation to load specific information (e.g., the packet's source ID) from the packet header. The compilation process is configured to send instructions to a hardware module, and the atom is configured to perform the operation assigned to it by the compilation process.

アトムの挙動を指定する処理ステージテンプレートは、論理ステージテンプレート(例えば、レジスタ、スクラッチパッドメモリ、およびスタック、ならびに分岐に対する動作を提供する)、パケットアクセス状態テンプレート(例えば、パケットデータロードおよび/またはパケットデータストアを提供する)、およびマップアクセスステージテンプレート(例えば、マップ検索アルゴリズム、マップテーブルサイズ)である。 The processing stage templates that specify atom behavior include logical stage templates (e.g., providing behavior for registers, scratchpad memory, and stacks, as well as for branching), packet access state templates (e.g., providing packet data loading and/or packet data storage), and map access stage templates (e.g., map lookup algorithm, map table size).

パケットアクセスステージは、データパケットからのバイトシーケンスの読み出し、データパケット内の1つのバイトシーケンスの異なるバイトシーケンスによる置換、データパケットへのバイトの挿入、および、データパケット内のバイトの削除のうちの少なくとも1つを含むことができる。 The packet access stage may include at least one of the following: reading a byte sequence from a data packet, replacing a byte sequence within a data packet with a different byte sequence, inserting a byte into a data packet, and deleting a byte within a data packet.

マップアクセスステージを使用して、ダイレクトインデックス配列および連想配列を含む異なるタイプのマップ(例えばルックアップテーブル)にアクセスすることができる。マップアクセスステージは、あるロケーションからの値の読み出し、あるロケーションへの値の書き込み、マップ内のあるロケーションにおける値の異なる値による置換のうちの少なくとも1つを含むことができる。マップアクセスステージは、値がマップ内のあるロケーションから読み出され、異なる値と比較される比較動作を含むことができる。そのロケーションから読み出された値が異なる値よりも小さい場合、第1のアクション(例えば、何もしない、そのロケーションにおける値を異なる値と交換する、または値をともに加算する)が実行され得る。そうでなければ、第2のアクション(例えば、何もしない、値を交換または加算する)が実行され得る。いずれの場合も、そのロケーションから読み出された値は、次の処理ステージに提供され得る。 Map access stages can be used to access different types of maps, including direct index arrays and associative arrays (e.g., lookup tables). A map access stage may include at least one of the following: reading a value from a location, writing a value to a location, or replacing a value at a location in the map with a different value. A map access stage may include a comparison operation where a value is read from a location in the map and compared to a different value. If the value read from that location is less than the different value, a first action (e.g., do nothing, swap the value at that location with the different value, or add the values together) may be performed. Otherwise, a second action (e.g., do nothing, swap or add the values) may be performed. In either case, the value read from that location may be provided to the next processing stage.

各マップアクセスステージは、ステートフル処理ユニットにおいて実施され得る。マップアクセスステージの処理を実行するように構成されたアトムに含まれ得る回路1700の一例を示す図17を参照する。回路1700は、ルックアップテーブルへの入力として使用される入力値のハッシュを実行するように構成されたハッシュ機能1710を含むことができる。回路1700は、アトムの動作に関連付けられる状態を記憶するように構成されたメモリ1720を含む。回路1700は、演算を実行するように構成された算術論理演算ユニット1730を含む。 Each map access stage may be performed in a stateful processing unit. Refer to Figure 17, which shows an example of circuitry 1700 that may be included in an atom configured to perform the processing of a map access stage. Circuitry 1700 may include a hash function 1710 configured to hash input values used as inputs to a lookup table. Circuitry 1700 includes a memory 1720 configured to store states associated with the atom's operation. Circuitry 1700 includes an arithmetic logic unit 1730 configured to perform operations.

論理ステージは、先行するステージによって提供される値に対して計算を実行することができる。論理ステージを実施するように構成された処理ユニットは、ステートレス処理ユニットであってもよい。各ステートレス処理ユニットは、単純な演算を行うことができる。各処理ユニットは、例えば8ビット演算を行ってもよい。 A logical stage can perform calculations on values provided by preceding stages. The processing unit configured to execute the logical stage may be a stateless processing unit. Each stateless processing unit can perform simple operations. Each processing unit may, for example, perform 8-bit operations.

各論理ステージはステートレス処理ユニットに実装されてもよい。論理ステージの処理を実行するように構成されたアトムに含まれ得る回路1800の一例を示す図18を参照する。回路1800は、算術論理演算ユニット(ALU)およびマルチプレクサのアレイを備える。ALUおよびマルチプレクサは層に配列され、ALUによる処理の1つの層の出力は、マルチプレクサによって使用されてALUの次の層に入力を提供する。 Each logic stage may be implemented in a stateless processing unit. Refer to Figure 18, which shows an example of a circuit 1800 that may be included in an atom configured to perform the processing of the logic stages. The circuit 1800 comprises an array of arithmetic logic units (ALUs) and multiplexers. The ALUs and multiplexers are arranged in layers, and the output of one layer of processing by the ALUs is used by the multiplexers to provide input to the next layer of the ALUs.

ハードウェアモジュールに実装されたステージのパイプラインは、第1のパケットアクセスステージ(pkt0)、それに続く第1の論理ステージ(logic0)、それに続く第1のマップアクセスステージ(map0)、それに続く第2の論理ステージ(logic1)、それに続く第2のパケットアクセスステージ(pkt1)などを含むことができる。したがって、これは次の形態、pkt0-> logic0-> map0-> logic1-> pkt1、をとることができる。 The stage pipeline implemented in the hardware module may include a first packet access stage (pkt0), followed by a first logical stage (logic0), followed by a first map access stage (map0), followed by a second logical stage (logic1), followed by a second packet access stage (pkt1), and so on. Therefore, it can take the following form: pkt0 -> logic0 -> map0 -> logic1 -> pkt1.

いくつかの例では、ステージpkt0は、パケットから必要な情報を抽出し、ステージpkt0は、この情報をステージlogic0に渡す。ステージlogic0は、パケットが有効なIPパケットであるか否かを決定する。場合によっては、logic0はマップ要求を形成し、マップ要求をmap0に送信し、map0はマップ動作を実行する。ステージmap0は、ルックアップテーブルの更新を実行することができる。次に、ステージlogic1は、マップ動作からの結果を収集し、結果としてパケットをドロップするか否かを決定する。 In some examples, stage pkt0 extracts the necessary information from the packet and passes this information to stage logic0. Stage logic0 determines whether the packet is a valid IP packet. In some cases, logic0 forms a map request and sends it to map0, which performs the map operation. Stage map0 may perform an update to the lookup table. Next, stage logic1 collects the results from the map operation and decides whether to drop the packet as a result.

場合によっては、このパケットに対してマップ動作を実行すべきでない場合をカバーするために、マップ要求が無効にされる。マップ動作が行われない場合、logic0は、パケットが有効なIPパケットであるか否かに応じて、パケットをドロップすべきか否かをlogic1に示す。いくつかの例では、ルックアップテーブルは256個のエントリを含み、各エントリは8ビット値である。 In some cases, the map request is disabled to cover situations where a map operation should not be performed on this packet. If a map operation is not performed, logic0 indicates to logic1 whether the packet should be dropped, depending on whether the packet is a valid IP packet. In some examples, the lookup table contains 256 entries, each an 8-bit value.

説明されるこの例は、5つのステージのみを含む。しかしながら、上述したように、さらに多くのものを使用することができる。さらに、動作はすべて順に実行される必要はなく、同じデータパケットに関するいくつかの動作は、異なる処理ユニットによって同時に実行されてもよい。 The example described here involves only five stages. However, as mentioned above, many more can be used. Furthermore, not all operations need to be performed sequentially; several operations on the same data packet may be performed simultaneously by different processing units.

図6に示すハードウェアモジュール610は、データパケットに関して機能を実行するためのアトムの単一のパイプラインを示す。しかしながら、ハードウェアモジュール610は、データパケットを処理するための複数のパイプラインを備えてもよい。複数のパイプラインの各々は、データパケットに関して異なる機能を実行することができる。ハードウェアモジュール610は、ハードウェアモジュール610の第1のセットアトムを相互接続して第1のデータ処理パイプラインを形成するように構成可能である。ハードウェアモジュール610はまた、ハードウェアモジュール610のアトムの第2のセットを相互接続して第2のデータ処理パイプラインを形成するように構成可能である。 The hardware module 610 shown in Figure 6 represents a single pipeline of atoms for performing functions with respect to data packets. However, the hardware module 610 may have multiple pipelines for processing data packets. Each of the multiple pipelines can perform different functions with respect to data packets. The hardware module 610 can be configured to interconnect a first set of atoms to form a first data processing pipeline. The hardware module 610 can also be configured to interconnect a second set of atoms to form a second data processing pipeline.

複数の処理ユニットを備えるハードウェアモジュールにおいて実施される機能をコンパイルするために、コンピュータコードのシーケンスから始まる一連のステップが実行されてもよい。ホストデバイスまたはネットワークインターフェースデバイス上のプロセッサ上で実行することができるコンパイラは、コンピュータコードの逆アセンブルされたシーケンスにアクセスすることができる。 To compile functions implemented in a hardware module comprising multiple processing units, a series of steps may be performed, starting with a sequence of computer code. A compiler that can run on a processor on a host device or network interface device can access the disassembled sequence of computer code.

第一に、コンパイラは、コンピュータコード命令のシーケンスを別個のステージに分割するように構成される。各ステージは、上述の処理ステージテンプレートのうちの1つによる動作を含むことができる。例えば、1つのステージは、データパケットからの読み出しを提供することができる。1つのステージは、マップデータの更新を提供することができる。別のステージは、パスドロップ決定を行うことができる。コンパイラは、コードによって表現される複数の演算の各々を、複数のステージのうちの1つに割り当てる。 Firstly, the compiler is configured to divide a sequence of computer code instructions into separate stages. Each stage can include an operation performed by one of the processing stage templates described above. For example, one stage may provide a read from a data packet; another may provide an update to map data; and yet another may perform a path drop decision. The compiler assigns each of the operations represented by the code to one of the stages.

第二に、コンパイラは、コードから決定される処理ステージの各々を、異なる処理ユニットによって実行されるように割り当てるように構成される。これは、処理ステージのそれぞれの少なくとも1つの動作の各々が異なる処理ステージによって実行されることを意味する。次いで、コンパイラの出力を使用して、処理ユニットに、機能を実行するように特定の順序で各ステージの動作を実行させることができる。 Secondly, the compiler is configured to assign each of the processing stages determined by the code to be executed by a different processing unit. This means that at least one operation of each processing stage is executed by a different processing stage. The compiler's output can then be used to instruct the processing units to execute the operations of each stage in a specific order to perform a function.

コンパイラの出力は、ハードウェアモジュールの処理ユニットに各処理ステージに関連付けられる動作を実行させるために使用される生成された命令を含む。 The compiler's output includes generated instructions used to cause the hardware module's processing units to perform the actions associated with each processing stage.

コンパイラの出力はまた、ハードウェアモジュール610を構成するための制御メッセージに応答するハードウェアモジュール内の論理を生成するために使用されてもよい。そのような制御メッセージは、図14に関して下記により詳細に説明される。 The compiler output may also be used to generate logic within the hardware module that responds to control messages for configuring the hardware module 610. Such control messages are described in more detail below with respect to Figure 14.

ネットワークインターフェースデバイス600上で実行されるように機能をコンパイルするためのコンパイルプロセスは、機能を提供するためのプロセスがホストデバイスのカーネルにおいて安全に実行されると決定したことに応答して実行することができる。プログラムの安全性の決定は、図3に関して上述したように、適切な検証器によって実行することができる。プロセスがカーネルでの実行に対して安全であると決定されると、プロセスはネットワークインターフェースデバイスでの実行のためにコンパイルすることができる。 The compilation process for compiling functionality to run on the network interface device 600 can be executed in response to the determination that the process providing the functionality is safe to run in the host device's kernel. The determination of program safety can be performed by an appropriate verifier, as described above with respect to Figure 3. Once the process is determined to be safe for execution in the kernel, it can be compiled for execution on the network interface device.

データパケットに関して機能を実行するためにそれぞれの少なくとも1つの動作を実行する複数の処理ユニットのうちの少なくともいくつかの表現を示す図15を参照する。そのような表現は、コンパイラによって生成され、機能を実行するようにハードウェアモジュールを構成するために使用され得る。表現は、動作が実行され得る順序、および処理ユニットのいくつかがそれらの動作をどのように並列に実行するかを示す。 Refer to Figure 15, which shows representations of at least some of a plurality of processing units that perform at least one operation each to perform a function with respect to a data packet. Such representations can be generated by a compiler and used to configure a hardware module to perform the function. The representations indicate the order in which the operations may be performed and how some of the processing units perform their operations in parallel.

表現1500は、行および列を有する表の形態である。表のエントリのいくつかは、それぞれの動作を実行するように構成されたアトム、例えばアトム1510aを示す。処理ユニットが属する行は、特定のデータパケットに対してその処理ユニットによって実行される動作のタイミングを示す。各行は、クロック信号の1つまたは複数のサイクルによって表される単一の期間に対応することができる。同じ行に属する処理ユニットは、それらの動作を並列に実行する。 Representation 1500 is in the form of a table having rows and columns. Some of the table entries represent atoms, e.g., atom 1510a, configured to perform their respective operations. The row to which a processing unit belongs indicates the timing of the operation performed by that processing unit for a particular data packet. Each row can correspond to a single period represented by one or more cycles of a clock signal. Processing units belonging to the same row perform their operations in parallel.

論理ステージへの入力は行0に提供され、計算フローは後の行に進む。デフォルトでは、アトムは、それ自体と同じ列にあるが前の行にあるアトムによる処理からの結果を受信する。例えば、アトム1510bは、アトム1510aによる処理の結果を受信し、これらの結果に応じて自身の処理を実行する。 Input to the logical stage is provided in row 0, and the computation flow proceeds to subsequent rows. By default, an atom receives the results of processing by atoms in the same column but in the previous row. For example, atom 1510b receives the results of processing by atom 1510a and performs its own processing according to these results.

ローカルルーティングリソースを使用する場合、アトムはまた、列番号が2以下だけ異なる前の行のアトムからの出力にアクセスすることもできる。例えば、アトム1510dは、アトム1510cによって実行された処理からの結果を受信することができる。 When using local routing resources, atoms can also access output from previous atoms whose column numbers differ by only two or fewer. For example, atom 1510d can receive the results from processing performed by atom 1510c.

グローバルルーティングリソースを使用する場合、アトムは、前の2行かつ任意の列内のアトムからの出力にアクセスすることもできる。これは、グローバルルーティングリソースを使用して実行され得る。例えば、アトム1510fは、アトム1510eによって実行された処理からの結果を受信することができる。 When using global routing resources, atoms can also access the output from atoms in the previous two rows and any column. This can be done using global routing resources. For example, atom 1510f can receive the results from the processing performed by atom 1510e.

アトム間のルーティングに関するこれらの制約は一例として与えられ、他の制約が適用されてもよい。より制限の強い制約を適用することにより、アトム間の情報のルーティングをより容易にすることができる。より制限の弱い制約を適用することにより、スケジューリングをより容易にすることができる。所与のタイプ(例えば、マップ、ロジック、またはパケットアクセス)のアトムの数が使い尽くされた場合、またはアトム間のルーティングを行うことができない場合、ハードウェアモジュールへの機能のコンパイルは失敗する。 These constraints on routing between atoms are given as examples, and other constraints may apply. Applying stricter constraints can make routing information between atoms easier. Applying less restrictive constraints can make scheduling easier. If the number of atoms of a given type (e.g., map, logic, or packet access) is exhausted, or if routing between atoms is impossible, the compilation of the functionality into the hardware module will fail.

特定の制約は、ハードウェアモジュールによってサポートされる相互接続ファブリックによってサポートされるトポロジによって決定される。相互接続ファブリックは、ハードウェアモジュールのアトムに特定の順序でそれらの動作を実行させ、制約内で互いにデータを提供させるようにプログラムされる。図15は、相互接続ファブリックをそのようにプログラムすることができる方法の特定の一例を示す。 Specific constraints are determined by the topology supported by the interconnect fabric, which is supported by the hardware modules. The interconnect fabric is programmed to cause the atoms of the hardware modules to perform their operations in a specific order and provide data to each other within the constraints. Figure 15 shows an example of how the interconnect fabric can be programmed in this way.

(図5に示すように)FPGAアプリケーション515をFPGAに合成する間に、配置配線アルゴリズムが使用される。しかしながら、この場合、解空間は制約され、そのため、アルゴリズムは短い有界実行時間を有する。 (As shown in Figure 5) A placement and routing algorithm is used during the synthesis of the FPGA application 515 onto the FPGA. However, in this case, the solution space is constrained, and therefore the algorithm has a short bounded execution time.

処理速度または効率とコンパイル時間との間にはトレードオフが存在する。本出願の実施形態によれば、受信されるデータパケットに関する機能を提供するために、最初に、少なくとも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つの処理ユニットに移行することにより、ネットワークインターフェースデバイスにおいて受信されるデータパケットのより速い処理が可能になる。 A trade-off exists between processing speed or efficiency and compilation time. According to embodiments of this application, it may be desirable to first compile and run a program on at least one processing unit (which may be a CPU or atom as described above with respect to Figure 6) in order to provide functionality for received data packets. The at least one processing unit can then activate and execute functionality for received data packets during a first period. While the network interface device is operating, a second at least one processing unit (which may be an FPGA application or template-type processing unit as described above with respect to Figure 6) can be configured to perform functionality for data packets. The functionality can then be transferred from the first at least one processing unit to the second at least one processing unit so that the second at least one processing unit subsequently performs functionality for data packets received by the network interface device. Therefore, the slower compilation time of the second at least one processing unit does not prevent the network interface device from performing functions on data packets before the functions are compiled for the second at least one processing unit, as the first at least one processing unit can be compiled faster and can be used to perform functions on data packets while the functions are being compiled for the second at least one processing unit. Since the second at least one processing unit typically has a faster processing time, transitioning to the second at least one processing unit when it is compiled enables faster processing of received data packets in the network interface device.

本出願の実施形態によれば、コンパイルプロセスは、データ処理システムの少なくとも1つのプロセッサ上で作動するように構成することができ、少なくとも1つのプロセッサは、第1の少なくとも1つの処理ユニットおよび第2の少なくとも1つの処理ユニットが適切なときにデータパケットに関して少なくとも1つの機能を実行するための命令を送信するように構成される。少なくとも1つのプロセッサは、ホストCPUを含んでもよい。少なくとも1つのプロセッサは、ネットワークインターフェースデバイス上の制御プロセッサを含んでもよい。少なくとも1つのプロセッサは、ホストシステム上の1つまたは複数のプロセッサと、ネットワークインターフェースデバイス上の1つまたは複数のプロセッサとの組み合わせを含むことができる。 According to embodiments of this application, the compilation process can be configured to operate on at least one processor of a data processing system, wherein at least one processor is configured to send instructions for at least one first processing unit and at least one second processing unit to perform at least one function with respect to data packets when appropriate. The at least one processor may include a host CPU. The at least one processor may include a control processor on a network interface device. The at least one processor may include a combination of one or more processors on the host system and one or more processors on the network interface device.

したがって、少なくとも1つのプロセッサは、ネットワークインターフェースデバイスの第1の少なくとも1つの処理ユニットによって実行されるように機能をコンパイルするための第1のコンパイルプロセスを実行するように構成される。少なくとも1つのプロセッサはまた、ネットワークインターフェースデバイスの第2の少なくとも1つの処理ユニットによって実行されるように機能をコンパイルするための第2のコンパイルプロセスを実行するように構成される。第2のコンパイルプロセスの完了前に、少なくとも1つの処理ユニットは、ネットワークから受信されるデータパケットに関して機能を実行するように、第1の少なくとも1つの処理ユニットに命令する。その後、第2のコンパイルプロセスの完了後に、少なくとも1つの処理ユニットは、ネットワークから受信されるデータパケットに関する機能の実行を開始するように、第2の少なくとも1つの処理ユニットに命令する。 Therefore, at least one processor is configured to perform a first compilation process for compiling functions to be executed by at least one first processing unit of the network interface device. At least one processor is also configured to perform a second compilation process for compiling functions to be executed by at least one second processing unit of the network interface device. Before the completion of the second compilation process, at least one processing unit instructs at least one first processing unit to execute functions with respect to data packets received from the network. Then, after the completion of the second compilation process, at least one processing unit instructs at least one second processing unit to begin executing functions with respect to data packets received from the network.

これらのステップを実行することにより、ネットワークインターフェースデバイスは、第2のコンパイルプロセスが完了するのを待っている間に、第1の少なくとも1つの処理ユニット(コンパイル時間がより短いが、処理がより低速および/またはより低効率であり得る)を使用して機能を実行することができる。第2のコンパイルプロセスが完了すると、ネットワークインターフェースデバイスは、第1の少なくとも1つの処理ユニットに加えて、またはその代わりに、第2の少なくとも1つの処理ユニット(コンパイル時間がより長いが、処理がより高速および/またはより高効率であり得る)を使用して機能を実行することができる。 By performing these steps, the network interface device can perform functions using at least one first processing unit (which may have a shorter compilation time but slower and/or less efficient processing) while waiting for the second compilation process to complete. Once the second compilation process is complete, the network interface device can perform functions using, in addition to or instead of, the first at least one processing unit, a second at least one processing unit (which may have a longer compilation time but faster and/or more efficient processing).

本出願の実施形態による例示的なネットワークインターフェースデバイス700を示す図7を参照する。前の図に示されたものと同様の参照要素は、同様の参照符号で示されている。 Refer to Figure 7, which shows an exemplary network interface device 700 according to an embodiment of this application. Reference elements similar to those shown in the previous figure are indicated by the same reference numerals.

ネットワークインターフェースデバイスは、第1の少なくとも1つの処理ユニット710を備える。第1の少なくとも1つの処理ユニット710は、複数の処理ユニットを備える、図6に示すハードウェアモジュール610を含むことができる。第1の少なくとも1つの処理ユニット710は、図4に示すように、1つまたは複数のCPUを含むことができる。 The network interface device comprises at least one first processing unit 710. The first at least one processing unit 710 may include a hardware module 610, as shown in Figure 6, which comprises multiple processing units. The first at least one processing unit 710 may include one or more CPUs, as shown in Figure 4.

機能は、第1の期間中に、ネットワークから受信されるデータパケットに関して第1の少なくとも1つの処理ユニット710によって機能が実行されるように、第1の少なくとも1つの処理ユニット710上で実行されるようにコンパイルされる。第1の少なくとも1つの処理ユニット710は、第2の少なくとも1つの処理ユニットの第2のコンパイルプロセスの完了前に、ネットワークから受信されるデータパケットに関して機能を実行するように、第1の少なくとも1つのプロセッサによって命令される。 The function is compiled to run on the first at least one processing unit 710 so that the function is executed by the first at least one processing unit 710 with respect to data packets received from the network during the first period. The first at least one processing unit 710 is instructed by the first at least one processor to execute the function with respect to data packets received from the network before the completion of the second compilation process of the second at least one processing unit.

ネットワークインターフェースデバイスは、第2の少なくとも1つの処理ユニット720を備える。第2の少なくとも1つの処理ユニット720は、(図5に示すような)FPGAアプリケーションを有するFPGAを備えることができ、または複数の処理ユニットを備える図6に示すハードウェアモジュール610を備えることができる。 The network interface device comprises at least one second processing unit 720. The at least one second processing unit 720 may comprise an FPGA having an FPGA application (as shown in Figure 5), or it may comprise a hardware module 610, as shown in Figure 6, comprising multiple processing units.

第1の期間中、第2のコンパイルプロセスは、第2の少なくとも1つの処理ユニット上で実行するための機能をコンパイルするために実行される。すなわち、ネットワークインターフェースデバイスは、FPGAアプリケーション515をオンザフライでコンパイルするように構成される。 During the first period, the second compilation process is performed to compile functions for execution on at least one second processing unit. That is, the network interface device is configured to compile the FPGA application 515 on the fly.

第1の期間後に(すなわち、第2のコンパイルプロセスの完了後に)、第2の少なくとも1つの処理ユニット720は、ネットワークから受信されるデータパケットに関する機能の実行を開始するように構成されている。 After the first period (i.e., after the completion of the second compilation process), at least one second processing unit 720 is configured to begin executing functions related to data packets received from the network.

第1の期間の後、第1の少なくとも1つの処理ユニット710は、ネットワークから受信されるデータパケットに関する機能の実行を停止することができる。いくつかの実施形態では、第1の少なくとも1つの処理ユニット710は、部分的に、データパケットに関する機能の実行を停止することができる。例えば、第1の少なくとも1つの処理ユニットが複数のCPUを含む場合、第1の期間の後、1つまたは複数のCPUは、ネットワークから受信されるデータパケットに関する処理の実行を停止することができ、複数のCPUの残りのCPUは処理を実行し続ける。 After the first period, at least one of the first processing units 710 may cease performing functions related to data packets received from the network. In some embodiments, at least one of the first processing units 710 may partially cease performing functions related to data packets. For example, if the at least one first processing unit includes multiple CPUs, after the first period, one or more CPUs may cease performing processing related to data packets received from the network, while the remaining CPUs continue to perform processing.

第1の少なくとも1つの処理ユニット710は、第1のデータフローのデータパケットに関して機能を実行するよう構成することができる。第2のコンパイルプロセスが完了すると、第2の少なくとも1つの処理ユニット720は、第1のデータフローのデータパケットに関する機能の実行を開始することができる。第2のコンパイルプロセスが完了すると、第1の少なくとも1つの処理ユニットは、第1のデータフローのデータパケットに関する機能の実行を停止することができる。 The first processing unit 710 can be configured to perform functions with respect to the data packets of the first data flow. Upon completion of the second compilation process, the second processing unit 720 can begin performing functions with respect to the data packets of the first data flow. Upon completion of the second compilation process, the first processing unit can stop performing functions with respect to the data packets of the first data flow.

第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を含む。 Different combinations are possible for the first and second processing units. For example, in some embodiments, the first and second processing units 710 include multiple CPUs (as shown in Figure 4), while the second and second processing units 720 include a hardware module having multiple processing units (as shown in Figure 6). In some embodiments, the first and second processing units 720 include an FPGA (as shown in Figure 5). In some embodiments, the first and second processing units 720 include a hardware module having multiple processing units (as shown in Figure 6), while the second and second processing units 720 include an FPGA (as shown in Figure 5).

接続された複数の処理ユニット640a、640b、640dがデータパケットに対してそのそれぞれの少なくとも1つの動作をどのように実行することができるかを示す図11を参照する。処理ユニットの各々は、受信されるデータパケットに対してそのそれぞれの少なくとも1つの動作を実行するように構成される。 Refer to Figure 11, which illustrates how multiple connected processing units 640a, 640b, and 640d can perform at least one of their respective operations on data packets. Each processing unit is configured to perform at least one of its respective operations on incoming data packets.

各処理ユニットの少なくとも1つの動作は、機能(例えば、eBPFプログラムの機能)内の論理ステージを表すことができる。各処理ユニットの少なくとも1つの動作は、処理ユニットによって実行される命令によって表現可能とすることができる。命令は、アトムの挙動を決定することができる。 At least one operation of each processing unit can represent a logical stage within a function (e.g., a function of an eBPF program). At least one operation of each processing unit can be represented by an instruction executed by the processing unit. The instruction can determine the behavior of an atom.

図11は、パケット(P)が各処理ユニットによって実施される処理ステージに沿ってどのように進行するかを示している。 Figure 11 shows how a packet ( P0 ) progresses through the processing stages performed by each processing unit.

各処理ユニットは、コンパイラによって指定される特定の順序でパケットに対して処理を実行する。順序は、処理ユニットのいくつかがそれらの処理を並列に実行するように構成されるようなものであってもよい。この処理は、メモリに保持されるパケットの少なくとも一部にアクセスすることを含むことができる。付加的にまたは代替的に、この処理は、パケットに対して実行されるべきアクションを決定するために、ルックアップテーブルへのルックアップを実行することを含んでもよい。付加的にまたは代替的に、この処理は、状態1110を修正することを含むことができる。 Each processing unit performs processing on packets in a specific order specified by the compiler. The order may be such that some processing units are configured to perform their processing in parallel. This processing may include accessing at least a portion of the packets held in memory. Additionally or alternatively, this processing may include performing lookups to a lookup table to determine the action to be performed on the packets. Additionally or alternatively, this processing may include modifying state 1110.

処理ユニットは、メタデータM,M,M,Mを互いに交換する。第1の処理ユニット640aは、それぞれの少なくとも1つの所定の動作を実行し、それに応じてメタデータMを生成するように構成されている。第1の処理ユニット640aは、メタデータMを第2の処理ユニット640bに渡すように構成されている。 The processing units exchange metadata M0 , M1 , M2 , and M3 with each other. The first processing unit 640a is configured to perform at least one predetermined operation and generate metadata M1 accordingly. The first processing unit 640a is configured to pass metadata M1 to the second processing unit 640b.

処理ユニットの少なくともいくつかは、データパケットの内容、それ自体の記憶されている状態、グローバル共有状態、およびデータパケットに関連付けられたメタデータ(例えば、M、M、M、M)のうちの少なくとも1つに応じて、それぞれの少なくとも1つの動作を実行する。処理ユニットのいくつかはステートレスであり得る。 At least some of the processing units perform at least one operation depending on at least one of the following: the contents of the data packet, its stored state, the global shared state, and metadata associated with the data packet (e.g., M0 , M1 , M2 , M3 ). Some of the processing units may be stateless.

処理ユニットの各々は、少なくとも1クロックサイクルの間にデータパケット(P)のためのその関連するタイプの動作を実行することができる。いくつかの実施形態では、処理ユニットの各々は、単一のクロックサイクル中にその関連するタイプの動作を実行することができる。処理ユニットの各々は、それらの動作を実行するために個別にクロックされてもよい。このクロッキングは、処理ユニットの処理パイプラインのクロッキングに追加され得る。 Each processing unit can perform its associated type of operation for a data packet ( P0 ) within at least one clock cycle. In some embodiments, each processing unit can perform its associated type of operation within a single clock cycle. Each processing unit may be clocked individually to perform its operations. This clocking can be added to the clocking of the processing pipeline of the processing units.

第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に送信するように構成されている。 A more detailed examination of the operation of the second processing unit 640b reveals that it is configured to be connected to the first processing unit 640a, which is configured to perform at least one predetermined operation on the first data packet. The second processing unit 640b is configured to receive the result of the at least one predetermined operation from the first further processing unit. The second processing unit 640b is configured to perform at least one second predetermined operation in response to the result of the at least one predetermined operation. The second processing unit 640b is configured to be connected to the third processing unit 640d, which is configured to perform at least one third predetermined operation on the first data packet. The second processing unit 640b is configured to transmit the result of the at least one predetermined operation to the third processing unit 640d for processing in the at least one predetermined operation.

処理ユニットは、同様に、複数のデータパケットの各々に関して機能を提供するような順序において動作することができる。 The processing units can similarly operate in an order that provides functionality for each of the multiple data packets.

本出願の実施形態は、機能が可能にする場合、複数のパケットが同時にパイプライン化され得るようなものである。 The embodiments of this application are such that, if the functionality allows, multiple packets can be pipelined simultaneously.

データパケットのパイプライン化を示す図12を参照する。図示されるように、異なるパケットは、異なる処理ユニットによって同時に処理され得る。第1の処理ユニット640aは、第3のデータパケット(P)に対して第1の時点(t)においてそれぞれの少なくとも1つの動作を実行している。第2の処理ユニット640bは、第2のデータパケット(P)に対して第1の時点(t)においてそれぞれの少なくとも1つの動作を実行している。第3の処理ユニット640dは、第1のデータパケット(P)に対して第1の時点(t)においてそれぞれの少なくとも1つの動作を実行している。 Refer to Figure 12, which illustrates the pipelined processing of data packets. As shown, different packets may be processed simultaneously by different processing units. The first processing unit 640a performs at least one operation on the third data packet ( P2 ) at the first time point ( t0 ). The second processing unit 640b performs at least one operation on the second data packet ( P1 ) at the first time point ( t0 ). The third processing unit 640d performs at least one operation on the first data packet ( P0 ) at the first time point ( t0 ).

各処理ユニットにより少なくともそれぞれの動作が実行された後、各パケットは、シーケンス内で1つのステージに沿って移動する。例えば、後続の第2の時点(t)において、第1の処理ユニット640aは、第4のデータパケット(P)に対する第1の時点(t)におけるそのそれぞれの少なくとも1つの動作を実行している。第2の処理ユニット640bは、第3のデータパケット(P)に対して第1の時点(t)においてそのそれぞれの少なくとも1つの動作を実行している。第3の処理ユニット640dは、第1のデータパケット(P)に対して第1の時点(t)においてそのそれぞれの少なくとも1つの動作を実行している。 After each processing unit has performed at least its respective operation, each packet moves along one stage in the sequence. For example, at a subsequent second time point (t 1 ), the first processing unit 640a has performed at least its respective operation for the fourth data packet (P 3 ) at the first time point (t 0 ). The second processing unit 640b has performed at least its respective operation for the third data packet (P 2 ) at the first time point (t 0 ). The third processing unit 640d has performed at least its respective operation for the first data packet (P 1 ) at the first time point (t 0 ).

いくつかの実施形態では、所与のステージに複数のパケットが存在し得ることを理解されたい。 It should be understood that in some embodiments, multiple packets may exist in a given stage.

いくつかの実施形態では、パケットは、必ずしもロックステップではなく、1つのステージから次のステージに移動することができる。 In some embodiments, packets can move from one stage to the next without necessarily going through a lock step.

パイプライン危険性がない限り、固定クロックで動作するそのようなパイプラインは一定の帯域幅を有することができる。これにより、システム内のジッタを低減することができる。 As long as there are no pipeline hazards, such pipelines operating at a fixed clock can have a constant bandwidth. This can reduce jitter within the system.

命令を実行するときの危険(共有状態にアクセスするときの競合など)を回避するために、各処理ユニットは、必要に応じて動作なし(すなわち、処理ユニットはストールする)命令を実行するように構成され得る。 To avoid risks when executing instructions (such as conflicts when accessing shared state), each processing unit may be configured to execute no-action (i.e., the processing unit stalls) instructions as needed.

いくつかの実施形態では、動作(単純な算術、インクリメント、定数値の加算/減算、シフト、データパケットまたはメタデータからの値の加算/減算など)は、処理ユニットによって実行される1クロックサイクルを必要とする。これは、ある処理ユニットが必要とする共有状態の値が別の処理ユニットによってまだ更新されていないことを意味し得る。したがって、共有状態1110の古い値が、それらを必要とする処理ユニットによって読み出され得る。したがって、共有状態に値を読み書きするときに危険が発生する可能性がある。他方、中間値に対する動作が、危険が発生することなくメタデータとして渡され得る。 In some embodiments, operations (such as simple arithmetic, increments, addition/subtraction of constant values, shifts, and addition/subtraction of values from data packets or metadata) require one clock cycle to be performed by the processing unit. This may mean that a shared state value needed by one processing unit has not yet been updated by another processing unit. Therefore, the old values of the shared state 1110 may be read by the processing unit that needs them. Thus, a risk may arise when reading and writing values to the shared state. On the other hand, operations on intermediate values can be passed as metadata without any risk.

回避され得る共有状態1110への読み出しおよび書き込みの際の危険の例は、インクリメント動作のコンテキストにおいて与えられ得る。このようなインクリメント動作は、共有状態1110においてパケットカウンタをインクリメントする動作であり得る。インクリメント動作の一実施態様では、パイプラインの第1のタイムスロット中に、第2の処理ユニット640bが、共有状態1110からカウンタの値を読み出し、この読み出し動作の出力(例えば、メタデータMとして)を第3の処理ユニット640dに提供するように構成されている。第3の処理ユニット640dは、第2の処理ユニット640bからカウンタの値を受け取るように構成されている。第2のタイムスロットの間、第3の処理ユニット640dはこの値をインクリメントし、インクリメントされた新たな値を共有状態1110に書き込む。 An example of a risk to read from and write to the shared state 1110 that can be avoided can be given in the context of an increment operation. Such an increment operation may be an operation to increment a packet counter in the shared state 1110. In one embodiment of the increment operation, during a first time slot of the pipeline, a second processing unit 640b is configured to read the value of the counter from the shared state 1110 and provide the output of this read operation (e.g., as metadata M2 ) to a third processing unit 640d. The third processing unit 640d is configured to receive the value of the counter from the second processing unit 640b. During the second time slot, the third processing unit 640d increments this value and writes the newly incremented value to the shared state 1110.

このようなインクリメント動作を実行するときに問題が発生する可能性があり、すなわち、第2のタイムスロット中に、第2の処理ユニット640bが共有状態1110に記憶されたカウンタにアクセスしようとする場合、第2の処理ユニット640bは、共有状態1110のカウンタ値が第3の処理ユニット640dによって更新される前にカウンタの以前の値を読み出す可能性がある。 Problems can arise when performing such an increment operation; specifically, if the second processing unit 640b attempts to access the counter stored in the shared state 1110 during the second time slot, the second processing unit 640b may read the previous value of the counter before the counter value in the shared state 1110 is updated by the third processing unit 640d.

したがって、この問題に対処するために、第2の処理ユニット640bは、(動作なし命令またはパイプラインバブルの第2の処理ユニット640bによる実行を通じて)第2のタイムスロット中にストールされ得る。ストールは、次の命令の実行の遅延であると理解することができる。この遅延は、次の命令の代わりに「動作なし」命令の実行によって実施することができる。次に、第2の処理ユニット640bは、後続の第3のタイムスロットの間に共有状態1110からカウンタ値を読み出す。第3のタイムスロットの間、共有状態1110のカウンタは更新されており、そのため、第2の処理ユニット640bが更新された値を読み出すことが保証される。 Therefore, to address this problem, the second processing unit 640b may be stalled during the second time slot (through execution by the second processing unit 640b of a no-action instruction or a pipeline bubble). The stall can be understood as a delay in the execution of the next instruction. This delay can be achieved by executing a "no-action" instruction instead of the next instruction. Then, the second processing unit 640b reads the counter value from the shared state 1110 during the subsequent third time slot. During the third time slot, the counter in the shared state 1110 is updated, thus ensuring that the second processing unit 640b reads the updated value.

いくつかの実施形態では、それぞれのアトムは、単一のパイプラインタイムスロット中に状態から読み出し、状態を更新し、更新された状態を書き込むように構成される。この場合、上述した処理ユニットのストールを用いなくてもよい。しかしながら、処理ユニットをストールすることによって、必要とされるメモリインターフェースのコストを低減することができる。 In some embodiments, each atom is configured to read from a state, update its state, and write the updated state within a single pipeline time slot. In this case, stalling the processing unit described above is not necessary. However, stalling the processing unit can reduce the cost of the required memory interface.

いくつかの実施形態では、危険を回避するために、パイプライン内の処理ユニットは、それら自体の動作を実行する前に、パイプライン内の他の処理ユニットがそれらの処理を終了するまで待機することができる。 In some embodiments, to avoid hazards, processing units in a pipeline may wait until other processing units in the pipeline have completed their processing before performing their own operations.

上述したように、コンパイラは、任意の数の処理ステージインスタンスをリンクすることによってデータパスを構築し、各インスタンスは、所定の数(与えられた例では3つ)の予め合成された処理ステージテンプレートのうちの1つから構築される。処理ステージテンプレートは、論理ステージテンプレート(例えば、レジスタ、スクラッチパッドメモリ、およびメタデータに対する演算を提供する)、パケットアクセス状態テンプレート(例えば、パケットデータロードおよび/またはパケットデータストアを提供する)、およびマップアクセスステージテンプレート(例えば、マップ検索アルゴリズム、マップテーブルサイズ)である。 As described above, the compiler constructs the data path by linking any number of processing stage instances, each instance being constructed from one of a predetermined number (three in the given example) of pre-composed processing stage templates. These processing stage templates include logical stage templates (e.g., providing operations on registers, scratchpad memory, and metadata), packet access state templates (e.g., providing packet data loading and/or packet data storage), and map access stage templates (e.g., map lookup algorithm, map table size).

各処理ステージインスタンスは、単一の処理ユニットによって実装されてもよい。すなわち、各処理ステージは、処理ユニットによって実行されるそれぞれの少なくとも1つの動作を含む。 Each processing stage instance may be implemented by a single processing unit; that is, each processing stage includes at least one operation performed by the processing unit.

図13は、受信されるデータパケットを処理するために処理ステージがパイプライン1300内でどのように互いに接続され得るかの一例を示す。図13に示すように、第1のデータパケットはFIFO 1305において受信され記憶される。第1の論理ステージ1310において、1つまたは複数の呼び出し引数が受信される。呼び出し引数は、受信されるデータパケットに対して実行されるべき機能を識別するプログラムセレクタを含むことができる。呼び出し引数は、受信されるデータパケットのパケット長の指示を含むことができる。第1の論理ステージ1310は、呼び出し引数を処理し、第1のパケットアクセスステージ1315に出力を提供するように構成されている。 Figure 13 shows an example of how processing stages can be connected to each other within pipeline 1300 to process received data packets. As shown in Figure 13, the first data packet is received and stored in FIFO 1305. In the first logical stage 1310, one or more call arguments are received. The call arguments may include a program selector that identifies the function to be performed on the received data packet. The call arguments may also include an indication of the packet length of the received data packet. The first logical stage 1310 is configured to process the call arguments and provide output to the first packet access stage 1315.

第1のパケットアクセスステージ1315はネットワークタップ1320において第1のパケットからデータをロードする。第1のパケットアクセスステージ1315はまた、第1の論理ステージ1310の出力に応じて第1のパケットにデータを書き込むこともできる。第1のパケットアクセスステージ1315は、第1のデータパケットの先頭にデータを書き込むことができる。第1のパケットアクセスステージ1315は、データパケット内のデータを上書きすることができる。 The first packet access stage 1315 loads data from the first packet at the network tap 1320. The first packet access stage 1315 can also write data to the first packet according to the output of the first logical stage 1310. The first packet access stage 1315 can write data to the beginning of the first data packet. The first packet access stage 1315 can overwrite data within the data packet.

ロードされたデータならびに任意の他のメタデータおよび/または引数は、次に、第2の論理ステージ1325に提供され、第2の論理ステージは、第1のデータパケットに関して処理を実行し、出力引数を第1のマップアクセスステージ1330に提供する。第1のマップアクセスステージ1330は、第2の論理ステージ1325からの出力を使用してルックアップテーブルへのルックアップを実行し、第1のデータパケットに関して実行されるべきアクションを決定する。次に、出力は第3の論理ステージ1335に渡され、第3の論理ステージはこの出力を処理し、結果を第2のパケットアクセスステージ1340に渡す。 The loaded data and any other metadata and/or arguments are then provided to the second logical stage 1325, which processes the first data packet and provides the output arguments to the first map access stage 1330. The first map access stage 1330 uses the output from the second logical stage 1325 to perform a lookup into a lookup table and determine the action to be performed on the first data packet. The output is then passed to the third logical stage 1335, which processes this output and passes the result to the second packet access stage 1340.

第2のパケットアクセスステージ1340は、第3の論理ステージ1335の出力に応じて、第1のデータパケットからデータを読み出し、および/または第1のデータパケットにデータを書き込むことができる。次に、第2のパケットアクセスステージ1340の結果は、受信される入力に関して処理を実行するように構成された第4の論理ステージ1345に渡される。 The second packet access stage 1340 can read data from the first data packet and/or write data to the first data packet, depending on the output of the third logical stage 1335. The result of the second packet access stage 1340 is then passed to a fourth logical stage 1345, which is configured to perform processing on the received input.

パイプラインは、複数のパケットアクセスステージ、論理ステージ、およびマップアクセスステージを含むことができる。最後の論理ステージ1350は、戻り引数を出力するように構成されている。戻り引数は、データパケットの開始を識別するポインタを備えることができる。戻り引数は、データパケットに関して実行されるべきアクションの指示を含むことができる。アクションの指示は、パケットがドロップされるべきか否かを示すことができる。アクションの指示は、パケットがホストシステムに転送されるべきか否かを示すことができる。ネットワークインターフェースデバイスは、パケットがドロップされるべきであるという指示に応答して、それぞれのデータパケットをドロップするように構成された少なくとも1つの処理ユニットを備えることができる。 The pipeline may include multiple packet access stages, logical stages, and map access stages. The final logical stage 1350 is configured to output a return argument. The return argument may include a pointer that identifies the start of a data packet. The return argument may include instructions for an action to be performed on the data packet. The action instructions may indicate whether the packet should be dropped or not. The action instructions may indicate whether the packet should be forwarded to the host system or not. The network interface device may include at least one processing unit configured to drop each data packet in response to an instruction that the packet should be dropped.

パイプライン1300は、1つまたは複数のバイパスFIFO 1355a、1355b、1355cをさらに含むことができる。バイパスFIFOは、マップアクセスステージおよび/またはパケットアクセスステージの周りの第1のデータパケットからのデータなどの処理データを渡すために使用され得る。いくつかの実施形態では、マップアクセスステージおよび/またはパケットアクセスステージは、そのそれぞれの少なくとも1つの動作を実行するために第1のデータパケットからのデータを必要としない。マップアクセスステージおよび/またはパケットアクセスステージは、入力引数に応じてそれらのそれぞれの少なくとも1つの動作を実行することができる。 The pipeline 1300 may further include one or more bypass FIFOs 1355a, 1355b, 1355c. The bypass FIFOs may be used to pass processing data, such as data from a first data packet, around the map access stage and/or packet access stage. In some embodiments, the map access stage and/or packet access stage do not require data from the first data packet to perform at least one of their respective operations. The map access stage and/or packet access stage can perform at least one of their respective operations depending on the input arguments.

本出願の実施形態によるネットワークインターフェースデバイス600,700によって実行される方法800を示す図8を参照する。 Refer to Figure 8, which illustrates a method 800 performed by network interface devices 600 and 700 according to embodiments of this application.

S810において、ネットワークインターフェースデバイスの機能ハードウェアモジュールが機能を実施するように構成される。ハードウェアモジュールは、各々がデータパケットに関してある種の動作をハードウェアにおいて実行するように構成された複数の処理ユニットを備える。S810は、受信される各データパケットに関する機能を提供するように、特定の順序でそれぞれの所定のタイプの動作を実行するように複数の処理ユニットの少なくともいくつかを構成することを含む。ハードウェアモジュールをそのように構成することは、受信されるデータパケットが複数の処理ユニットのうちの少なくともいくつかの複数の動作の各々によって処理を受けるように、複数の処理ユニットのうちの少なくともいくつかを接続することを含む。接続は、処理ユニット間でデータパケットおよび関連するメタデータをルーティングするように、ハードウェアモジュールのルーティングハードウェアを構成することによって達成され得る。 In S810, the functional hardware module of the network interface device is configured to perform its function. The hardware module comprises a plurality of processing units, each configured to perform a certain operation in hardware with respect to a data packet. S810 includes configuring at least some of the plurality of processing units to perform their respective predetermined types of operations in a specific order to provide functionality for each received data packet. Configuring the hardware module in this manner includes connecting at least some of the plurality of processing units so that received data packets are processed by each of at least some of the plurality of operations of the plurality of processing units. The connection can be achieved by configuring the routing hardware of the hardware module to route data packets and associated metadata between the processing units.

S820において、ネットワークインターフェースデバイスの第1のインターフェースにおいてネットワークから第1のデータパケットが受信される。 In S820, the first data packet is received from the network on the first interface of the network interface device.

S830において、第1のデータパケットが、S810のコンパイルプロセス中に接続された少なくともいくつかの処理ユニットの各々によって処理される。少なくともいくつかの処理ユニットの各々は、少なくとも1つのデータパケットに対して、それが実行するように事前構成された動作のタイプを実行する。したがって、機能は第1のデータパケットに対して実行される。 In S830, the first data packet is processed by each of at least several processing units connected during the compilation process in S810. Each of these processing units performs a type of operation pre-configured for at least one data packet. Therefore, a function is performed on the first data packet.

S840において、処理された第1のデータパケットが、その宛先に向かって転送される。これは、データパケットをホストに送信することを含み得る。これは、ネットワークを介してデータパケットを送信することを含むことができる。 In S840, the processed first data packet is forwarded toward its destination. This may include sending the data packet to a host. This may include sending the data packet over a network.

本出願の実施形態によるネットワークインターフェースデバイス700において実行することができる方法900を示す図9を参照する。 Refer to Figure 9, which shows a method 900 that can be performed in the network interface device 700 according to the embodiment of this application.

S910において、ネットワークインターフェースデバイスの第1の少なくとも1つの処理ユニット(すなわち、第1の回路)が、ネットワークを介して受信されるデータパケットを受信して処理するように構成される。この処理は、データパケットに関して機能を実行することを含む。処理は、第1の期間中に実行される。 In S910, at least one first processing unit (i.e., a first circuit) of the network interface device is configured to receive and process data packets received over the network. This processing includes performing functions with respect to the data packets. The processing is performed during a first period.

S920において、第2の少なくとも1つの処理ユニット(すなわち、第2の回路)上で実行するために機能をコンパイルするように、第2のコンパイルプロセスが第1の期間中に実行される。 In S920, a second compilation process is executed during the first period to compile a function for execution on at least one second processing unit (i.e., a second circuit).

S930において、第2のコンパイル処理が完了したか否かが決定され、完了していない場合、方法はS910およびS920に戻り、第1の少なくとも1つの処理ユニットは、ネットワークから受信されるデータパケットに関して処理を実行し続け、第2のコンパイルプロセスが継続する。 In S930, it is determined whether the second compilation process is complete. If it is not complete, the method returns to S910 and S920, and at least one of the first processing units continues to process the data packets received from the network, and the second compilation process continues.

S940において、第2のコンパイルが完了したという決定に応答して、第1の少なくとも1つの処理ユニットは、受信されるデータパケットに関する機能の実行を停止する。いくつかの実施形態では、第1の少なくとも1つの処理ユニットは、特定のデータフローに関してのみ機能を実行することを停止することができる。次いで、第2の少なくとも1つの処理ユニットが、代わりにそれらの特定のデータフローに関して機能を実行することができる(S950)。 In S940, in response to the decision that the second compilation is complete, at least one of the first processing units stops executing functions related to the received data packets. In some embodiments, at least one of the first processing units may stop executing functions only with respect to specific data flows. Then, at least one of the second processing units may instead execute functions with respect to those specific data flows (S950).

S950において、第2のコンパイルプロセスが完了すると、第2の少なくとも1つの処理ユニットは、ネットワークから受信されるデータパケットに関する機能の実行を開始するように構成される。 In S950, once the second compilation process is complete, at least one second processing unit is configured to begin executing functions related to data packets received from the network.

本出願の実施形態による方法1600を示す図16を参照する。方法1600は、ネットワークインターフェースデバイスまたはホストデバイスにおいて実行することができる。 Refer to Figure 16, which illustrates method 1600 according to an embodiment of this application. Method 1600 can be performed on a network interface device or a host device.

S1610において、第1の少なくとも1つの処理ユニットによって実行されるように機能をコンパイルするように、コンパイルプロセスが実行される。 In S1610, a compilation process is executed to compile a function so that it can be executed by at least one first processing unit.

S1620において、第2の少なくとも1つの処理ユニットによって実行されるように機能をコンパイルするように、コンパイルプロセスが実行される。このプロセスは、第1の機能を提供するようにデータパケットを処理するための複数のステージのうちの1つのステージに関連付けられる少なくとも1つの動作を実行するために、第2の少なくとも1つの処理ユニットの複数の処理ユニットの各々を割り当てることを含む。複数の処理ユニットの各々は、あるタイプの処理を行うように構成され、割り当ては、処理ユニットがそれぞれの少なくとも1つの動作を行うのに適したタイプの処理を行うように構成されているという決定に応じて行われる。言い換えれば、処理ユニットは、それらのテンプレートに従って選択される。 In S1620, a compilation process is performed to compile a function to be executed by at least one second processing unit. This process includes assigning each of the processing units of the at least one second processing unit to perform at least one operation associated with one of a plurality of stages for processing data packets to provide a first function. Each of the plurality of processing units is configured to perform a certain type of processing, and the assignment is made in accordance with the determination that each processing unit is configured to perform a type of processing suitable for performing its respective at least one operation. In other words, the processing units are selected according to their templates.

1630において、S1620におけるコンパイルプロセスの完了に先立って、第1の少なくとも1つの処理ユニットに機能を実行させるための命令が送信される。この命令は、S1620のコンパイルプロセスが開始する前に送信されてもよい。 In 1630, prior to the completion of the compilation process in S1620, an instruction is sent to at least one first processing unit to perform a function. This instruction may be sent before the compilation process in S1620 begins.

S1640において、S1620におけるコンパイルプロセスの完了後に、第2の回路にデータパケットに関する機能を実行させるための命令が第2の回路に送信される。この命令は、S1620において生成されたコンパイル済み命令を含むことができる。 In S1640, after the compilation process in S1620 is completed, an instruction is sent to the second circuit to cause it to execute a function related to the data packet. This instruction may include the compiled instruction generated in S1620.

本出願の実施形態による機能は、ネットワークインターフェース内の処理スライスのプラガブル構成要素として提供されてもよい。スライス1425がネットワークインターフェースデバイス600でどのように使用され得るかの例を示す図14を参照する。スライス1425は、処理パイプラインと呼ばれる場合がある。 The functionality according to the embodiments of this application may be provided as a pluggable component of a processing slice within a network interface. Refer to Figure 14, which illustrates an example of how slice 1425 may be used in the network interface device 600. Slice 1425 may be referred to as a processing pipeline.

ネットワークインターフェースデバイス600は、スライス1425によって処理され、次いでネットワークを介して送信されることになるデータパケットをホストから受信して記憶するための送信キュー1405を含む。ネットワークインターフェースデバイス600は、スライス1425によって処理され、次いでホストに送達されることになる、ネットワーク1410から受信されるデータパケットを記憶するための受信キュー1410を含む。ネットワークインターフェースデバイス600は、スライス1425によって処理されており、ホストに送達するためのものである、ネットワークから受信されるデータパケットを記憶するための受信キュー1415を含む。ネットワークインターフェースデバイス600は、スライス1425によって処理されており、ネットワークに送達するためのものである、ホストから受信されるデータパケットを記憶するための送信キューを含む。 The network interface device 600 includes a transmit queue 1405 for receiving and storing data packets from a host that are processed by slice 1425 and subsequently transmitted over the network. The network interface device 600 also includes a receive queue 1410 for storing data packets received from network 1410 that are processed by slice 1425 and subsequently delivered to a host. The network interface device 600 also includes a receive queue 1415 for storing data packets received from the network that are processed by slice 1425 and intended for delivery to a host. The network interface device 600 also includes a transmit queue for storing data packets received from a host that are processed by slice 1425 and intended for delivery over the network.

ネットワークインターフェースデバイス600のスライス1425は、受信経路および送信経路上でデータパケットを処理するための複数の処理機能を備える。スライス1425は、受信経路および送信経路上でデータパケットのプロトコル処理を実行するように構成されたプロトコルスタックを備えることができる。いくつかの実施形態では、ネットワークインターフェースデバイス600内に複数のスライスが存在してもよい。複数のスライスのうちの少なくとも1つは、ネットワークから受信される受信データパケットを処理するように構成されてもよい。複数のスライスのうちの少なくとも1つは、ネットワークを介した送信のために送信データパケットを処理するように構成されてもよい。スライスは、少なくとも1つのFPGAおよび/または少なくとも1つのASICなどのハードウェア処理装置によって実装されてもよい。 The slice 1425 of the network interface device 600 comprises multiple processing functions for processing data packets on the receive and transmit paths. The slice 1425 may include a protocol stack configured to perform protocol processing of data packets on the receive and transmit paths. In some embodiments, multiple slices may exist within the network interface device 600. At least one of the multiple slices may be configured to process received data packets received from the network. At least one of the multiple slices may be configured to process transmitted data packets for transmission over the network. The slices may be implemented by hardware processing devices such as at least one FPGA and/or at least one ASIC.

アクセラレータ構成要素1430a、1430b、1430c、1430dを、図示のようにスライス内の異なるステージに挿入することができる。アクセラレータ構成要素は各々、スライスをトラバースするデータパケットに関する機能を提供する。アクセラレータ構成要素は、オンザフライで、すなわちネットワークインターフェースデバイスの動作中に挿入または除去することができる。したがって、アクセラレータ構成要素は、プラガブル構成要素である。アクセラレータ構成要素は論理領域であり、スライス1425に割り当てられる。それらの各々は、スライスをトラバースするパケットが構成要素の内外にストリーミングされることを可能にするストリーミングパケットインターフェースをサポートする。 The accelerator components 1430a, 1430b, 1430c, and 1430d can be inserted into different stages within the slice, as shown in the figure. Each accelerator component provides functionality related to data packets traversing the slice. The accelerator components can be inserted or removed on the fly, i.e., while the network interface device is operating. Therefore, the accelerator components are pluggable components. The accelerator components are logical regions and are allocated to slice 1425. Each of them supports a streaming packet interface that allows packets traversing the slice to be streamed into and out of the component.

例えば、1つのタイプのアクセラレータ構成要素は、受信または送信経路上のデータパケットの暗号化を提供するように構成され得る。別のタイプのアクセラレータ構成要素は、受信または送信経路上でデータパケットの解読を提供するように構成されてもよい。 For example, one type of accelerator component may be configured to provide encryption of data packets on the receiving or transmitting path. Another type of accelerator component may be configured to provide decryption of data packets on the receiving or transmitting path.

(図6を参照して上述したように)複数の接続された処理ユニットによって実行される動作を実行することによって提供される上述した機能は、アクセラレータ構成要素によって提供することができる。同様に、(図4を参照して上述したような)ネットワーク処理CPUのアレイおよび/または(図5を参照して上述したような)FPGAアプリケーションによって提供される機能は、アクセラレータ構成要素によって提供されてもよい。 The functions described above, provided by performing operations executed by multiple connected processing units (as described above with reference to Figure 6), can be provided by accelerator components. Similarly, functions provided by an array of network processing CPUs (as described above with reference to Figure 4) and/or an FPGA application (as described above with reference to Figure 5) may also be provided by accelerator components.

説明したように、ネットワークインターフェースデバイスの動作中に、第1の少なくとも1つの処理ユニット(複数の接続された処理ユニットなど)によって実行される処理は、第2の少なくとも1つの処理ユニットから移行されてもよい。この移行を実施するために、スライス1425の構成要素のうちの第1の少なくとも1つの処理ユニットによる処理のための構成要素は、第2の少なくとも1つの処理ユニットによる処理のための構成要素に置き換えることができる。 As explained, during the operation of the network interface device, processing performed by at least one first processing unit (such as multiple connected processing units) may be migrated from at least one second processing unit. To implement this migration, components of slice 1425 that are processed by the at least one first processing unit can be replaced with components that are processed by the at least one second processing unit.

ネットワークインターフェースデバイスは、スライス1425から構成要素を挿入および除去するように構成された制御プロセッサを備えることができる。上述した第1の期間中、第1の少なくとも1つの処理ユニットによる機能の実行からの構成要素がスライス1425内に存在し得る。制御プロセッサは、第1の期間の後に、第1の少なくとも1つの処理ユニットにより機能を提供するプラガブル構成要素をスライス1425から除去し、第2の少なくとも1つの処理ユニットにより機能を提供するプラガブル構成要素をスライス1425に挿入するように構成することができる。 The network interface device may include a control processor configured to insert and remove components from slice 1425. During the first period described above, components from the execution of functions by the first at least one processing unit may be present in slice 1425. After the first period, the control processor may be configured to remove pluggable components that provide functionality by the first at least one processing unit from slice 1425 and to insert pluggable components that provide functionality by the second at least one processing unit into slice 1425.

スライスからの構成要素の挿入および除去に加えて、またはその代わりに、制御プロセッサは、プログラムを構成要素にロードし、制御プレーンコマンドを発行して、構成要素へのフレームの流れを制御することができる。この場合、構成要素は、パイプラインに挿入されず、または、パイプラインから除去されずに動作させられ、または動作させられなくてもよい。 In addition to inserting and removing components from slices, or alternatively, the control processor can load programs into components and issue control plane commands to control the flow of frames to those components. In this case, components may operate without being inserted into or removed from the pipeline, or they may not operate at all.

いくつかの実施形態では、制御プレーンまたは構成情報は、別個の制御バスを必要とすることなく、データパスを介して搬送される。いくつかの実施形態では、データパス構成要素の構成を更新する要求は、ネットワークパケットと同じバスを介して搬送されるメッセージとして符号化される。したがって、データパスは、ネットワークパケットおよび制御パケットの2種類のパケットを搬送することができる。 In some embodiments, control plane or configuration information is carried via the data path without requiring a separate control bus. In some embodiments, requests to update the configuration of data path components are encoded as messages carried via the same bus as network packets. Therefore, the data path can carry two types of packets: network packets and control packets.

制御パケットは、制御プロセッサによって形成され、スライス1425を使用してデータパケットを送信または受信するために使用されるのと同じメカニズムを使用してスライス1425に注入される。この同じメカニズムは、送信キューまたは受信キューであってもよい。制御パケットは、任意の適切な方法でネットワークパケットと区別することができる。いくつかの実施形態では、異なるタイプのパケットは、メタデータワード内の1つまたは複数のビットによって区別されてもよい。 Control packets are formed by the control processor and injected into slice 1425 using the same mechanism used to transmit or receive data packets using slice 1425. This same mechanism may be a transmit queue or a receive queue. Control packets can be distinguished from network packets in any suitable way. In some embodiments, different types of packets may be distinguished by one or more bits in a metadata word.

いくつかの実施形態では、制御パケットは、制御パケットがスライス1425を通る経路を決定するメタデータワード内のルーティングフィールドを含む。制御パケットは、制御コマンドのシーケンスを搬送することができる。各制御コマンドは、スライス1425の1つまたは複数の構成要素を対象とすることができる。それぞれのデータパス構成要素は、構成要素IDフィールドによって識別される。各制御コマンドは、それぞれの識別された構成要素に対する要求を符号化する。要求は、その構成要素の構成に変更を加えることであってもよい。要求は、構成要素が作動されるか否か、すなわち、構成要素がスライスをトラバースするデータパケットに関してその機能を実行するか否かを制御することができる。 In some embodiments, the control packet includes a routing field in a metadata word that determines the path the control packet takes through slice 1425. The control packet can carry a sequence of control commands. Each control command may target one or more components of slice 1425. Each data path component is identified by a component ID field. Each control command encodes a request for the identified component. The request may involve modifying the configuration of that component. The request can control whether the component is activated, i.e., whether the component performs its function with respect to data packets traversing the slice.

したがって、いくつかの実施形態では、ネットワークインターフェースデバイス600の制御プロセッサは、スライスの構成要素のうちの1つに、ネットワークインターフェースデバイスにおいて受信されるデータパケットに関する機能の実行を開始させるためのメッセージを送信するように構成される。このメッセージは、プラガブル構成要素を通じて送信され、機能を実行するための構成要素へのフレームのアトミックスイッチオーバーを引き起こす制御プレーンメッセージである。次いで、この構成要素は、スイッチアウトされるまでスライスをトラバースするすべての受信データパケットに対して実行する。制御プロセッサは、スライスの構成要素のうちの別の構成要素に、この構成要素が、ネットワークインターフェースデバイス600において受信されるデータパケットに関する機能の実行を停止するようにさせるためのメッセージを送信するように構成される。 Therefore, in some embodiments, the control processor of the network interface device 600 is configured to send a message to one of the slice components to initiate the execution of a function related to data packets received by the network interface device. This message is a control plane message sent through a pluggable component, causing an atomic switchover of the frame to the component performing the function. This component then performs the function for all received data packets traversing the slice until it is switched out. The control processor is configured to send a message to another component of the slice to cause this component to cease the execution of a function related to data packets received by the network interface device 600.

構成要素をデータスライス1425に出入りするように切り替えるために、ソケットは、イングレスおよびエグレスデータパスの様々な点に存在することができる。制御プロセッサは、スライス1425に出入りする追加のロジックを精査することができる。この追加のロジックは、構成要素間に配置されるFIFOの形態をとることができる。 To switch components in and out of the data slice 1425, sockets can be located at various points in the ingress and egress data paths. The control processor can inspect additional logic entering and exiting slice 1425. This additional logic can take the form of a FIFO (First-In, First-Out) structure between components.

制御プロセッサは、スライス1425を通じてスライス1425の構成された構成要素に制御プレーンメッセージを送信することができる。構成は、スライス1425の構成要素によって実行される機能を決定することができる。例えば、スライス1425を介して送信される制御メッセージは、ハードウェアモジュールが、データパケットに関して機能を実行するように構成されるようにすることができる。そのような制御メッセージは、ハードウェアモジュールのアトムが、特定の機能を提供するようにハードウェアモジュールのパイプラインに相互接続されるようにすることができる。そのような制御メッセージは、ハードウェアモジュールの個々のアトムが、個々に選択されたアトムによって実行される動作を選択するように構成されるようにすることができる。各アトムはあるタイプの動作を実行するように事前構成されているため、各アトムの動作の選択は、各アトムが実行するように事前構成されている動作のタイプに応じて行われる。 The control processor can send control plane messages to the configured components of slice 1425 through slice 1425. The configuration can determine the functions performed by the components of slice 1425. For example, a control message sent through slice 1425 can configure a hardware module to perform a function with respect to data packets. Such a control message can cause atoms of the hardware module to be interconnected in the hardware module's pipeline to provide specific functions. Such a control message can cause individual atoms of the hardware module to select an operation to be performed by an individually selected atom. Since each atom is pre-configured to perform a certain type of operation, the selection of an operation for each atom depends on the type of operation that each atom is pre-configured to perform.

次に、いくつかのさらなる実施形態を、図19~図21を参照して説明する。本実施形態では、FPGAにおいてパケット処理プログラムまたはフィードフォワードパイプラインが作動される。FPGAのサブユニットにパケット処理プログラムまたはフィードフォワードパイプラインを実装させる方法について説明する。パケット処理プログラムまたはフィードフォワードパイプラインは、eBPFプログラムもしくはP4プログラムまたは任意の他の適切なプログラムであってもよい。 Next, several further embodiments will be described with reference to Figures 19 to 21. In these embodiments, a packet processing program or feedforward pipeline is operated in the FPGA. A method for implementing the packet processing program or feedforward pipeline in a subunit of the FPGA will be described. The packet processing program or feedforward pipeline may be an eBPF program, a P4 program, or any other suitable program.

このFPGAは、ネットワークインターフェースデバイスに設けられてもよい。いくつかの実施形態では、パケット処理プログラムは、ネットワークインターフェースデバイスがそのホストに対してインストールされた後にのみ展開または作動される。 This FPGA may be provided in a network interface device. In some embodiments, the packet processing program is deployed or activated only after the network interface device has been installed on its host.

パケット処理プログラムまたはフィードフォワードパイプラインは、ループのない論理フローを実装することができる。 A packet processing program or feedforward pipeline can implement a loop-free logical flow.

いくつかの実施形態では、プログラムは、ユーザレベルなどの非特権ドメインまたはより低い特権ドメインで書かれてもよい。プログラムは、カーネルなどの特権ドメインまたはより高い特権ドメインで作動されてもよい。プログラムを作動させるハードウェアは、任意のループがないことを必要とする場合がある。 In some embodiments, the program may be written in a non-privileged domain, such as the user level, or a lower-privileged domain. The program may operate in a privileged domain, such as the kernel, or a higher-privileged domain. The hardware running the program may require the absence of arbitrary loops.

以下の実施形態では、eBPFプログラム例を参照する。しかしながら、他の実施形態は、任意の他の適切なプログラムと共に使用されてもよいことを理解されたい。 The following embodiments refer to example eBPF programs. However, it should be understood that other embodiments may be used with any other suitable programs.

以下の実施形態のうちの1つまたは複数は、前述の実施形態のうちの1つまたは複数と組み合わせて使用することができることを理解されたい。 It should be understood that one or more of the following embodiments can be used in combination with one or more of the embodiments described above.

いくつかの実施形態は、FPGA、ASIC、または任意の他の適切なハードウェアデバイスのコンテキストで提供され得る。いくつかの実施形態は、FPGAまたはASICなどのサブユニットを使用する。以下の例は、FPGAを参照して説明される。同様のプロセスが、ASICまたは任意の他の適切なハードウェアデバイスによって実行されてもよいことを理解されたい。 Some embodiments may be provided in the context of FPGAs, ASICs, or any other suitable hardware devices. Some embodiments utilize subunits such as FPGAs or ASICs. The following examples are described with reference to FPGAs. It should be understood that similar processes may be performed by ASICs or any other suitable hardware devices.

サブユニットはアトムであってもよい。アトムのいくつかの例は前述されている。前述のアトムの例のいずれも、代替的または付加的にサブユニットとして使用されてもよいことを理解されたい。代替的または付加的に、これらのサブユニットは、「スライス」または構成可能論理ブロックと呼ばれる場合がある。 Subunits may be atoms. Several examples of atoms have been mentioned previously. It should be understood that any of the aforementioned examples of atoms may be used as subunits, either alternatively or additionally. These subunits may, either alternatively or additionally, be called “slices” or configurable logic blocks.

これらのサブユニットの各々は、単一の命令または複数の関連する命令を実行するように構成されてもよい。後者の場合、関連する命令は、(1つまたは複数のビットによって定義され得る)単一の出力を提供し得る。 Each of these subunits may be configured to execute a single instruction or multiple related instructions. In the latter case, the related instructions may provide a single output (which may be defined by one or more bits).

サブユニットは、計算ユニットであると考えることができる。サブユニットは、パケットが順に処理されるパイプラインに配列されてもよい。いくつかの実施形態では、サブユニットは、プログラム内のそれぞれの命令(または複数の命令)を実行するように動的に割り当てることができる。 A subunit can be thought of as a computing unit. Subunits may be arranged in a pipeline where packets are processed sequentially. In some embodiments, subunits can be dynamically assigned to execute individual instructions (or multiple instructions) within a program.

いくつかの実施形態では、サブユニットは、例えばFPGAのブロックを定義するために使用されるユニットの全部または一部であってもよい。いくつかのFPGAでは、FPGAのブロックはスライスと呼ばれる。いくつかの実施形態では、サブユニットまたはアトムは、スライスに等しい。 In some embodiments, a subunit may be all or part of a unit used to define, for example, a block of an FPGA. In some FPGAs, a block of the FPGA is called a slice. In some embodiments, a subunit or atom is equivalent to a slice.

それぞれのアトムまたはサブユニットをFPGAのそれぞれのブロックまたはスライスにマッピングすることによって、RTLアトムをFPGAリソースにマッピングする手法と比較して、改善されたリソース利用率が達成され得る。そのような後者の手法の結果として、RTLアトムは、FPGAの比較的多数の個々のブロックまたはスライスを必要とし得る。 By mapping each atom or subunit to a corresponding block or slice of the FPGA, improved resource utilization can be achieved compared to methods that map RTL atoms to FPGA resources. As a result of such a latter method, RTL atoms may require a relatively large number of individual blocks or slices of the FPGA.

いくつかの実施形態では、コンパイルはアトムレベルであってもよい。これは、処理がパイプライン化されるという利点を有し得る。パケットは順に処理され得る。コンパイルプロセスは、比較的迅速に実行され得る。 In some embodiments, compilation may be at the atom level. This may have the advantage of pipelined processing. Packets can be processed sequentially. The compilation process can be executed relatively quickly.

いくつかの実施形態では、算術演算は、1バイト当たり1スライスを必要とし得る。論理演算は、1バイト当たり半分のスライスを必要とし得る。シフト演算は、シフト演算の幅に応じてスライスの集合を必要とする場合がある。比較演算は、1バイト当たり1つのスライスを必要とし得る。選択動作は、1バイト当たり半分のスライスを必要とし得る。 In some embodiments, arithmetic operations may require one slice per byte. Logical operations may require half a slice per byte. Shift operations may require a set of slices depending on the width of the shift operation. Comparison operations may require one slice per byte. Selection operations may require half a slice per byte.

コンパイルプロセスの一部として、配置およびルーティングが実行される。配置は、特定の命令または複数の命令を実行するための特定の物理サブユニットの割り当てである。ルーティングは、特定のサブユニットの1つまたは複数の出力が、例えば別の1つまたは複数のサブユニットであり得る正しい宛先にルーティングされることを保証する。 As part of the compilation process, placement and routing are performed. Placement is the assignment of specific physical subunits to execute a particular instruction or set of instructions. Routing ensures that one or more outputs of a particular subunit are routed to the correct destination, which may be, for example, another one or more subunits.

配置およびルーティングは、パイプラインの一端から始まる特定のサブユニットに動作が割り当てられるプロセスを使用することができる。いくつかの実施形態では、最も重要な動作が、より重要性の低い動作の前に配置され得る。いくつかの実施形態では、ルーティングは、特定の動作が配置されるのと同時に割り当てられてもよい。いくつかの実施形態では、ルートは、予め計算されたルートの限定されたセットから選択されてもよい。これについては、後にさらに詳細に説明する。 Placement and routing can utilize a process in which operations are assigned to specific subunits starting from one end of the pipeline. In some embodiments, the most important operations may be placed before less important operations. In some embodiments, routing may be assigned simultaneously with the placement of specific operations. In some embodiments, routes may be selected from a limited set of pre-calculated routes. This will be described in more detail later.

いくつかの実施形態では、ルートを割り当てることができない場合、動作は後のために保留される。 In some embodiments, if a route cannot be assigned, the operation is postponed for later.

いくつかの実施形態では、予め計算されたルートは、バイト幅のルートであってもよい。しかしながら、これは単なる例であり、他の実施形態では、異なるルート幅が定義されてもよい。いくつかの実施形態では、複数の異なるサイズのルートが提供されてもよい。 In some embodiments, the pre-calculated route may be a byte-width route. However, this is merely an example, and in other embodiments, different route widths may be defined. In some embodiments, multiple routes of different sizes may be provided.

いくつかの実施形態では、ルーティングは、近くのサブユニット間のルーティングに限定されてもよい。 In some embodiments, routing may be limited to routing between nearby subunits.

いくつかの実施形態では、サブユニットは、FPGA上に規則的な構造で物理的に配列されてもよい。 In some embodiments, the subunits may be physically arranged on the FPGA in a regular structure.

いくつかの実施形態では、ルーティングを容易にするために、サブユニットがどのように通信することができるかに関する規則を作成することができる。例えば、サブユニットは、その隣、その上または下にあるサブユニットにのみ出力を提供することができる。 In some embodiments, rules can be established regarding how subunits can communicate to facilitate routing. For example, a subunit may only provide output to adjacent, above, or below it.

代替的または付加的に、ルーティングの目的のために、次のサブユニットがどれだけ離れているかに制限を設けることができる。例えば、サブユニットは、隣接するサブユニット、または規定の距離内にある(例えば、2つ以上の介在するサブユニットが存在しない)サブユニットにのみデータを出力することができる。 Alternatively or additionally, restrictions can be placed on how far apart the following subunits must be for routing purposes. For example, a subunit can only output data to adjacent subunits or subunits within a specified distance (e.g., without two or more intervening subunits).

いくつかの実施形態の方法を示す図19を参照する。
いくつかの実施形態では、FPGAは、1つまたは複数の「静的」領域および1つまたは複数の「動的」領域を有することができる。静的領域は標準的な構成を提供し、動的機能はエンドユーザの要件に従って機能を提供することができる。静的部分は、例えば、エンドユーザがネットワークインターフェースデバイスを受け取る前に、例えばネットワークインターフェースデバイスがホストに対して設置される前に定義されてもよい。例えば、静的領域は、ネットワークインターフェースデバイスに特定の機能を提供させるように構成されてもよい。静的領域には、アトム間の予め計算されたルートが提供される。後により詳細に説明するように、1つまたは複数の動的領域を通過する1つまたは複数の静的領域間のルーティングが存在してもよい。動的領域は、ネットワークインターフェースデバイスがホストに対して展開されるときに、エンドユーザによってその要件に応じて構成されてもよい。動的領域は、経時的にエンドユーザのために異なる機能を実行するように構成されてもよい。
Refer to Figure 19, which illustrates a method in several embodiments.
In some embodiments, an FPGA may have one or more "static" regions and one or more "dynamic" regions. Static regions provide a standard configuration, while dynamic regions can provide functionality according to the requirements of the end user. Static regions may be defined, for example, before the end user receives the network interface device, for example, before the network interface device is deployed to the host. For example, static regions may be configured to cause the network interface device to provide specific functionality. Static regions provide pre-calculated routes between atoms. Routing between one or more static regions that passes through one or more dynamic regions may exist, as will be described in more detail later. Dynamic regions may be configured by the end user according to their requirements when the network interface device is deployed to the host. Dynamic regions may be configured to perform different functions for the end user over time.

ステップS1において、メインビットファイル50およびツールチェックポイント52と呼ばれる第1のビットファイルを提供するために、第1のコンパイルプロセスが実行される。これは、いくつかの実施形態では静的領域の少なくとも一部のビットファイルである。ビットファイルは、FPGAにダウンロードされると、FPGAに、ビットファイルがそこからコンパイルされたプログラムにおいて指定されるように機能させる。いくつかの実施形態では、第1のコンパイルプロセスにおいて使用されるプログラムは、任意の1つまたは複数のプログラムであってもよく、またはFPGAの一部内のルーティングの決定を支援するように特に設計されたテストプログラムであってもよい。いくつかの実施形態では、一連の単純なプログラムが代替的または付加的に使用されてもよい。 In step S1, a first compilation process is performed to provide a first bitfile called the main bitfile 50 and a tool checkpoint 52. In some embodiments, this is a bitfile of at least a portion of the static area. Once downloaded to the FPGA, the bitfile causes the FPGA to function in such a way that it is specified in the program compiled from it. In some embodiments, the program used in the first compilation process may be any one or more programs, or it may be a test program specifically designed to assist in determining routing within a portion of the FPGA. In some embodiments, a set of simple programs may be used alternatively or additionally.

プログラムは、修正されてもよく、またはコンパイラによって使用され得る再構成可能なパーティションを有してもよい。プログラムは、再構成可能パーティションからネットを移動させることによって、コンパイラのジョブをより容易にするように修正され得る。 The program may have reconfigurable partitions that can be modified or used by the compiler. The program may be modified to facilitate the compiler's job by moving nets from the reconfigurable partitions.

ステップS1は、設計ツールにおいて実行されてもよい。単なる例として、Vivadoツールが、XilinXFPGAと共に使用されてもよい。チェックポイントファイルは、設計ツールによって提供されてもよい。チェックポイントファイルは、ビットファイルが生成された時点での設計のスナップショットを表す。チェックポイントファイルは、合成ネットリスト、設計制約、配置情報、およびルーティング情報のうちの1つまたは複数を含むことができる。 Step S1 may be performed within the design tool. For example, the Vivado tool may be used with XilinXFPGA. A checkpoint file may be provided by the design tool. The checkpoint file represents a snapshot of the design at the time the bit file was generated. The checkpoint file may contain one or more of the following: a composite netlist, design constraints, placement information, and routing information.

ステップS2において、ビットファイル記述54を提供するためにチェックポイントファイルを考慮に入れてビットファイルが分析される。分析は、リソースを検出すること、ルートを生成すること、タイミングをチェックすること、1つまたは複数の部分バイトファイルを生成すること、およびビットファイル記述を生成することのうちの1つまたは複数のためのものであり得る。 In step S2, the bitfile is analyzed, taking into account the checkpoint file, to provide a bitfile description 54. The analysis may be for one or more of the following purposes: discovering resources, generating roots, checking timings, generating one or more partial byte files, and generating a bitfile description.

分析は、ビットファイルからルーティング情報を抽出するように構成されてもよい。分析は、信号がいずれのワイヤまたはルートを伝搬したかを決定するように構成され得る。 The analysis may be configured to extract routing information from a bitfile. The analysis may also be configured to determine which wire or route the signal propagated along.

分析フェーズは、少なくとも部分的に合成または設計ツール内で実行することができる。いくつかの実施形態では、Vivadoのスクリプト作成ツールを使用することができる。スクリプト作成ツールは、TCL(ツールコマンド言語)であってもよい。TCLは、Vivadoの機能を追加または変更するために使用することができる。Vivadoの機能は、TCLスクリプトによって呼び出され、制御され得る。 The analysis phase can be performed, at least partially, within the synthesis or design tool. In some embodiments, Vivado's scripting tool can be used. The scripting tool may be TCL (Tool Command Language). TCL can be used to add or modify Vivado's functionality. Vivado's functionality can be invoked and controlled by TCL scripts.

ビットファイル記述54は、FPGAの所与の部分がどのように使用され得るかを定義する。例えば、ビットファイル記述は、いずれのアトムがいずれの他のアトムにルーティングされ得るか、およびそれらのアトム間をルーティングすることが可能な1つまたは複数のルートを示す。例えば、各アトムについて、ビットファイル記述は、そのアトムへの入力がどこに由来し得るか、および、データの出力のための1つまたは複数のルートと共に、そのアトムからの出力がどこにルーティングされ得るかを示す。ビットファイル記述は、いかなるプログラムからも独立している。 The bitfile description 54 defines how a given part of the FPGA can be used. For example, the bitfile description indicates which atoms can be routed to which other atoms, and one or more routes that can be routed between those atoms. For example, for each atom, the bitfile description indicates where inputs to that atom may originate, and where outputs from that atom can be routed, along with one or more routes for data output. The bitfile description is independent of any program.

ビットファイル記述は、ルート情報、いずれのルート対が競合するかの指示、およびアトムの必要な構成からビットファイルを生成する方法の記述のうちの1つまたは複数を含むことができる。 A bitfile description may include one or more of the following: root information, instructions on which root pairs conflict, and a description of how to generate the bitfile from the required configuration of the atom.

ビットファイル記述は、アトムのセット間で利用可能なルートのセットを提供することができるが、これは任意の特定の命令が所与のアトムによって実行される前である。 A bitfile description can provide a set of available routes between a set of atoms, but this is before any particular instruction is executed by a given atom.

ビットファイル記述は、FPGAの一部のためのものであってもよい。ビットファイル記述は、FPGAの動的な部分のためのものであってもよい。ビットファイル記述は、いずれのルートが利用可能であるか、および/またはいずれのルートが利用不可能であるかを含む。例えば、ビットファイルは、例えばFPGAの静的部分(複数可)によって、必要とされるFPGAの動的部分にわたる任意のルーティングを考慮して、FPGAの動的部分に対して、いずれのルートが利用可能であるかを示すことができる。 A bitfile description may be for a part of an FPGA. A bitfile description may be for the dynamic part of an FPGA. A bitfile description includes which routes are available and/or unavailable. For example, a bitfile may indicate which routes are available to the dynamic part of an FPGA, taking into account any routing required by the static part(s) of the FPGA.

いくつかの実施形態では、ビットファイル記述は、任意の適切な方法で取得することができることを理解されたい。例えば、ビットファイル記述は、FPGAまたはASICのプロバイダによって提供されてもよい。 It should be understood that in some embodiments, the bitfile description can be obtained by any suitable method. For example, the bitfile description may be provided by the FPGA or ASIC provider.

いくつかの実施形態では、ビットファイル記述は、設計ツールによって提供されてもよい。本実施形態では、分析ステップを省略してもよい。設計ツールは、ビットファイル記述を出力することができる。ビットファイル記述は、FPGAの動的部分にわたる任意の必要なルーティングを含むFPGAの静的部分のためのものであり得る。 In some embodiments, the bitfile description may be provided by the design tool. In this embodiment, the analysis step may be omitted. The design tool can output a bitfile description. The bitfile description may be for the static portion of the FPGA, including any necessary routing across the dynamic portion of the FPGA.

ビットファイル記述を生成するために、任意の他の適切な技術が使用されてもよいことが認識されるべきである。前述の例では、FPGAを設計するために使用されるツールは、ビットファイルを生成するために使用される解析を提供するために使用される。 It should be recognized that any other suitable technique may be used to generate the bitfile description. In the example above, the tool used to design the FPGA is used to provide the analysis used to generate the bitfile.

他の実施形態では異なるツールが使用されてもよいことを理解されたい。いくつかの実施形態では、ツールは、製品または一連の製品に固有のものであってもよい。例えば、FPGAのプロバイダは、そのFPGAを管理するための関連ツールを提供することができる。 It should be understood that different tools may be used in other embodiments. In some embodiments, the tools may be specific to a product or set of products. For example, an FPGA provider may provide related tools for managing its FPGAs.

他の実施形態では、汎用スクリプト作成ツールを使用することができる。
いくつかの実施形態では、異なるツールまたは異なる技法を使用して、部分ビットファイルを決定することができる。例えば、いずれの特徴がいずれの特徴に対応するかを決定するために、メインビットファイルを分析することができる。これは、複数の部分ビットファイルが生成されることを必要とする場合がある。
In other embodiments, a general-purpose scripting tool can be used.
In some embodiments, different tools or techniques can be used to determine the sub-bitfiles. For example, the main bitfile can be analyzed to determine which features correspond to which. This may require the generation of multiple sub-bitfiles.

ステップS3は、ネットワークインターフェースデバイスがホストに対してインストールされ、物理FPGAデバイス上で実行されるときに実施されることを理解されたい。ステップS1およびS2は、設計合成プロセスの一部として実行されて、ネットワークインターフェースデバイスを実装するビットファイルイメージを生成することができる。いくつかの実施形態では、ステップS1および/またはステップS2は、FPGAの動作を特徴付けるために使用される。FPGAが特徴付けられると、ビットファイル記述は、所与の規定の様式で動作することになるすべての物理ネットワークインターフェースデバイスのメモリに記憶される。 Step S3 should be understood to be performed when the network interface device is installed on the host and executed on the physical FPGA device. Steps S1 and S2 can be performed as part of the design synthesis process to generate a bitfile image that implements the network interface device. In some embodiments, steps S1 and/or S2 are used to characterize the operation of the FPGA. Once the FPGA is characterized, the bitfile description is stored in the memory of all physical network interface devices that will operate in a given predefined manner.

ステップS3において、ビットファイル記述およびeBPFプログラムを使用してコンパイルが実行される。コンパイルの出力は、eBPFプログラムの部分ビットファイルである。コンパイルは、部分ビットファイル、および、個々のスライスによって実行されることになるプログラミングにルートを追加する。 In step S3, compilation is performed using the bitfile description and the eBPF program. The output of the compilation is a partial bitfile of the eBPF program. The compilation adds roots to the partial bitfile and the programming that will be executed by the individual slices.

ビットファイル記述は、展開されるシステム内で提供されてもよいことを理解されたい。ビットファイル記述は、メモリに記憶され得る。ビットファイル記述は、FPGA、ネットワークインターフェースデバイス、またはホストデバイスに記憶することができる。いくつかの実施形態では、ビットファイル記述は、ネットワークインターフェースデバイス上のFPGAに接続されたフラッシュメモリなどに記憶される。フラッシュメモリは、メインビットファイルも含み得る。 It should be understood that the bitfile description may be provided within the system being deployed. The bitfile description may be stored in memory. The bitfile description may be stored in an FPGA, a network interface device, or a host device. In some embodiments, the bitfile description is stored in flash memory connected to the FPGA on a network interface device, etc. The flash memory may also include the main bitfile.

eBPFプログラムは、ビットファイル記述と共に記憶されてもよいし、または別個に記憶されてもよい。eBPFプログラムは、FPGA、ネットワークインターフェースデバイス、またはホストに記憶されてもよい。eBPFの場合、プログラムは、両方ともホスト上で作動しているユーザモードプログラムからカーネルに転送され得る。カーネルは、プログラムをデバイスドライバに転送し、デバイスドライバは、ホストまたはネットワークインターフェースデバイス上で作動しているコンパイラにプログラムを転送する。いくつかの実施形態では、eBPFプログラムは、ホストOSがブートする前に作動することができるように、ネットワークインターフェースデバイスに記憶されてもよい。 The eBPF program may be stored together with the bitfile description or separately. The eBPF program may be stored in an FPGA, a network interface device, or the host. In the case of eBPF, the program can be transferred from a user-mode program running on the host to the kernel. The kernel then transfers the program to a device driver, which transfers the program to a compiler running on the host or network interface device. In some embodiments, the eBPF program may be stored in the network interface device so that it can run before the host OS boots.

コンパイラは、ネットワークインターフェースデバイス、FPGA、またはホスト上の任意の適切な位置に設けられてもよい。単なる例として、コンパイラは、ネットワークインターフェースデバイス上のCPU上で作動されてもよい。 The compiler may be located on a network interface device, an FPGA, or any suitable location on the host. As just one example, the compiler may run on the CPU on the network interface device.

次に、コンパイラフローについて説明する。コンパイラのフロントエンドが、eBPFプログラムを受信する。eBPFプログラムは、任意の適切な言語で書かれてもよい。例えば、eBPFプログラムは、C型言語で書かれてもよい。コンパイラは、フロントエンドにおいて、プログラムを中間表現IRに変換するように構成される。いくつかの実施形態では、IRはLLVM-IRまたは任意の他の適切なIRであってもよい。 Next, the compiler flow will be described. The compiler's front-end receives the eBPF program. The eBPF program may be written in any suitable language. For example, the eBPF program may be written in a C-type language. The compiler is configured in the front-end to convert the program into an intermediate representation (IR). In some embodiments, the IR may be an LLVM-IR or any other suitable IR.

いくつかの実施形態では、ポインタ解析を実行して、パケット/マップアクセスプリミティブを作成することができる。 In some embodiments, pointer analysis can be performed to create packet/map access primitives.

いくつかの実施形態では、IRの最適化がコンパイラによって実行されてもよいことを理解されたい。これは、いくつかの実施形態では任意選択であり得る。 It should be understood that in some embodiments, IR optimization may be performed by the compiler. This may be optional in some embodiments.

コンパイラの高レベル合成バックエンドは、プログラムパイプラインをステージに分割し、パケットアクセスタップを生成し、Cコードを放出するように構成される。いくつかの実施形態では、設計ツールのHLS部分および/または使用されている設計ツールを呼び出して、HLSフェーズの出力を合成することができる。 The compiler's high-level synthesis backend is configured to divide the program pipeline into stages, generate packet access taps, and emit C code. In some embodiments, the HLS portion of the design tool and/or the design tool being used can be invoked to synthesize the output of the HLS phase.

FPGAアトムのコンパイラバックエンドは、パイプラインをステージに分割し、パケットアクセスタップを生成する。if変換は、制御依存性をデータ依存性に変換するために実行され得る。設計が配置され、ルーティングされる。eBPFプログラムの部分ビットファイルが出力される。 The FPGA atom's compiler backend divides the pipeline into stages and generates packet access taps. If-transformations may be performed to convert control dependencies to data dependencies. The design is deployed and routed. A partial bitfile of the eBPF program is output.

ルーティング競合がある場合、図20aに示すようなルーティング問題が発生する可能性がある。例えば、スライスAはスライスCと通信することができ、スライスBはスライスDと通信することができる。図20aの構成では、共通ルーティング部60は、スライスAとスライスCとの間の通信、ならびにスライスBとスライスDとの間の通信に割り当てられている。いくつかの実施形態では、このルーティング競合は回避され得る。これに関して、図20bを参照する。図から分かるように、スライスBとスライスDとの間のルート62と比較して、スライスAとスライスCとの間に別個のルート64が設けられている。 When routing conflicts exist, routing problems like the one shown in Figure 20a can occur. For example, slice A can communicate with slice C, and slice B can communicate with slice D. In the configuration of Figure 20a, the common routing unit 60 is assigned to communication between slice A and slice C, and between slice B and slice D. In some embodiments, this routing conflict can be avoided. Refer to Figure 20b for this. As can be seen from the figure, a separate route 64 is provided between slice A and slice C, compared to route 62 between slice B and slice D.

いくつかの実施形態では、ビットファイル記述は、サブユニットの少なくともいくつかの対に対する複数の異なるルートを含むことができる。コンパイルプロセスは、図20aに示すように、ルーティング競合をチェックする。ルーティング競合の場合、コンパイラは、ルートの適切な代替の1つを選択することによって、そのような競合を解決または回避することができる。 In some embodiments, a bitfile description may include multiple different routes to at least several pairs of subunits. The compilation process checks for routing conflicts, as shown in Figure 20a. In the event of a routing conflict, the compiler can resolve or avoid such a conflict by selecting one of the appropriate alternative routes.

図21は、eBPFプログラムを実行するためのFPGA内のパーティション66を示す。パーティションは、例えば、一連の入力フリップフロップ68および一連の出力フリップフロップを介してFPGAの静的部分とインターフェースする。いくつかの実施形態では、前述のように、設計全体にルーティング70があってもよい。 Figure 21 shows a partition 66 within the FPGA for executing an eBPF program. The partition interfaces with the static portion of the FPGA, for example, via a series of input flip-flops 68 and a series of output flip-flops. In some embodiments, as described above, routing 70 may be present throughout the design.

コンパイラは、コンパイラによって構成されているFPGAの領域にわたるルーティングに対処する必要があり得る。コンパイラは、メインビットファイル内の再構成可能パーティションに適合する部分ビットファイルを生成する必要がある。再構成可能パーティションを用いてメインビットファイルが生成されるとき、設計ツールは、再構成可能パーティション内の論理リソースの使用を回避し、結果、それらのリソースを部分ビットファイルによって使用することができる。しかしながら、設計ツールは、再構成可能パーティション内のルーティングリソースの使用を回避することができない場合がある。 The compiler may need to handle routing across the FPGA region configured by the compiler. The compiler needs to generate sub-bitfiles that fit the reconfigurable partitions within the main bitfile. When the main bitfile is generated using reconfigurable partitions, the design tool can avoid using the logical resources within the reconfigurable partitions, and as a result, those resources can be used by the sub-bitfiles. However, the design tool may not always be able to avoid using routing resources within the reconfigurable partitions.

その結果、分析ツールは、メインビットファイル内にある設計ツールによって使用されたルーティングリソースの使用を回避する必要がある。分析ツールは、ビットファイル記述内の利用可能なルートのそのリストが、メインビットファイルによって使用されているいずれの使用リソースも含まないことを確認する必要があり得る。利用可能なルートは、FPGAが非常に規則的であるため、FPGA内の多数の場所で使用することができるルートテンプレートに関して定義することができる。メインビットファイルによって使用されるルーティングリソースは規則性を破り、これは、分析ツールがメインビットファイルと競合する場所でそれらのテンプレートを使用することを回避することを意味する。分析ツールは、それらの場所で使用することができる新しいルートテンプレートを生成すること、および/または特定のルートテンプレートが特定の場所で使用されるのを防ぐことを必要とする場合がある。 As a result, the analysis tool needs to avoid using routing resources used by the design tool within the main bitfile. The analysis tool may need to ensure that its list of available routes within the bitfile description does not include any resources used by the main bitfile. Available routes can be defined in terms of route templates that can be used in numerous locations within the FPGA, given the FPGA's highly regular structure. The routing resources used by the main bitfile break this regularity, meaning the analysis tool must avoid using those templates in locations that conflict with the main bitfile. The analysis tool may need to generate new route templates that can be used in those locations, and/or prevent specific route templates from being used in certain locations.

いくつかの例示的なeBPFプログラム断片をアトムによって実行される命令に変換する際にコンパイラによって提供される機能のいくつかの例をここで説明する。 Here are some examples of the features provided by the compiler when translating several exemplary eBPF program fragments into instructions executed by atoms.

いくつかの実施形態は、ビットファイル記述を生成するために任意の適切な合成ツールを使用することができる。単なる例として、いくつかの実施形態は、ハードウェアのためにアトミックトランザクションを使用するモードに基づくBluespecツールを使用することができる。 Some embodiments may use any suitable synthesis tool to generate the bitfile description. As just one example, some embodiments may use the BlueSpec tool based on a mode that uses atomic transactions for hardware.

第1の例では、eBPFプログラム断片は以下の2つの命令を有する。
命令1:r1+=r2
命令2:r1+=r3
第1の命令は、レジスタ1内の数(r1)をレジスタ2内の数(r2)に加算し、その結果をr1内に置く。第2の命令はr1をr3に加算し、結果をr1に置く。この例の両方の命令は64ビットレジスタを使用するが、最下位の32ビットのみを使用する。結果の上位32ビットはゼロで満たされる。
In the first example, the eBPF program fragment has the following two instructions:
Instruction 1: r1+=r2
Instruction 2: r1+=r3
The first instruction adds the number in register 1 (r1) to the number in register 2 (r2) and places the result in r1. The second instruction adds r1 to r3 and places the result in r1. Both instructions in this example use 64-bit registers, but only the least significant 32 bits are used. The upper 32 bits of the result are filled with zeros.

コンパイラは、これらをアトムによって実行される命令に変換する。32ビット加算命令は、32対のルックアップテーブル(LUT)、32ビットのキャリーチェーン、および32個のフリップフロップを必要とする。 The compiler translates these into instructions executed by atoms. A 32-bit add instruction requires 32 pairs of lookup tables (LUTs), a 32-bit carry chain, and 32 flip-flops.

ルックアップテーブルの各対は、2ビットの結果を生成するために2ビットを加算する。キャリーチェーンは、加算中にビットを桁列から次の列に運ぶことを可能にし、減算中にビットを次の列から借用することを可能にする構造である。 Each pair in a lookup table adds two bits to produce a two-bit result. A carry chain is a structure that allows bits to be carried from one digit column to the next during addition, and allows bits to be borrowed from the next column during subtraction.

32個のフリップフロップは、1つのクロックサイクルで値を受け取り、次のクロックサイクルで値を再生する記憶要素である。これらは、クロックサイクルごとに行われる作業量を制限し、タイミング分析を単純化するために使用され得る。 The 32 flip-flops are memory elements that receive a value in one clock cycle and retrieve it in the next. They can be used to limit the amount of work performed per clock cycle and simplify timing analysis.

いくつかの実施形態では、FPGAは、いくつかのスライスを含むことができる。いくつかの例示的なスライスでは、キャリーチェーンは、スライスの底部(CIN)からスライスの上部(COUT)に伝搬し、その後、次のスライスアップのCIN入力に接続する。 In some embodiments, the FPGA may include several slices. In some exemplary slices, the carry chain propagates from the bottom (CIN) of the slice to the top (COUT) of the slice, and then connects to the CIN input of the next slice up.

各スライスが4ビットのキャリーチェーンを有する例では、32ビット加算を実行するために8つのスライスが使用される。この実施形態では、アトムは、一対のスライスによって提供されると考えることができる。これは、アトムが8ビット値に対して動作することがいくつかの実施形態において好都合であり得るためである。 In an example where each slice has a 4-bit carry chain, eight slices are used to perform a 32-bit addition. In this embodiment, an atom can be thought of as being provided by a pair of slices, because in some embodiments it may be convenient for the atom to operate on an 8-bit value.

各スライスが8ビットのキャリーチェーンを有する例では、32ビット加算を実行するために4つのスライスが使用される。この実施形態では、アトムは、スライスによって提供されると考えることができる。 In an example where each slice has an 8-bit carry chain, four slices are used to perform a 32-bit addition. In this embodiment, atoms can be thought of as being provided by the slices.

これは単なる例であり、前述のように、アトムは任意の適切な方法で定義され得ることを理解されたい。 This is merely an example, and as mentioned above, please understand that atoms can be defined in any appropriate way.

この例では、FPGAが8ビットのキャリーチェーンをサポートするスライスを有する事例が、ここで第1の例示的なeBPFプログラム断片のコンパイルにおいて使用される。 In this example, a case where the FPGA has slices supporting an 8-bit carry chain is used in the compilation of the first exemplary eBPF program fragment.

32ビット幅の3つの入力値および32ビット幅の1つの出力値がある。これら3つの入力値を生成した他の先行する命令があり得る。以下では、スライス(アトム)のいくつかの任意の位置を想定する。 There are three 32-bit wide input values and one 32-bit wide output value. There may be other preceding instructions that generated these three input values. The following assumes several arbitrary locations within a slice (atom).

以下の番号付け規則が使用される。スライス(アトム)は、規則的な行および列の配列に配列されている。XnYmは、配列中のアトムの位置を示す。Xnは列を示し、Ymは行を示す。X6Y0は、スライスが列6および行0にあることを示す。他の実施形態では、任意の他の適切な番号付け方式を使用できることを理解されたい。 The following numbering rules are used. Slices (atoms) are arranged in a regular row and column sequence. XnYm indicates the position of the atom in the sequence. Xn indicates the column, and Ym indicates the row. X6Y0 indicates that the slice is in column 6 and row 0. It should be understood that in other embodiments, any other suitable numbering scheme may be used.

初期値が以下の場所で同時に生成されたと仮定する。
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への対応する接続も必要である。
Assume that the initial values were generated simultaneously in the following locations.
r1: Slices X6Y0, X6Y1, X6Y2 and X6Y3
r2: Slices X6Y4, X6Y5, X6Y6 and X6Y7
r3: Slices X6Y8, X6Y9, X6Y10 and X6Y11
The result of the first instruction must be computed by four adjacent slices in the same column so that the carry chain is correctly connected. The compiler may choose to compute the result in slices X7Y0, X7Y1, X7Y2, and X7Y3. For this to work, the inputs must be connected. There are connections from X6Y0 to X7Y0, another connection from X6Y1 to X7Y1, one connection from X6Y2 to X7Y2, and one connection from X6Y3 to X7Y3. Corresponding connections from X6Y4-X6Y7 to X7Y0-X7Y3 are also required.

これらは、8つの入力ビットの各々が対応する出力ビットに接続されることを意味するフルバイト接続である。例えば、スライスX6Y0フリップフリップ0からの出力は、スライスX7Y0 LUT 0の入力0に接続される。 These are full-byte connections, meaning each of the eight input bits is connected to the corresponding output bit. For example, the output from slice X6Y0 flip-flip 0 is connected to input 0 of slice X7Y0 LUT 0.

スライスX6Y0フリップフリップ1からの出力は、スライスX7Y0 LUT 1の入力0に接続される。 The output from slice X6Y0 flip-flip 1 is connected to input 0 of slice X7Y0 LUT 1.

以降も同様である。
スライスX6Y0フリップフリップ7からの出力は、スライスX7Y0 LUT 7の入力0に接続される。
The same applies thereafter.
The output from slice X6Y0 flip flip 7 is connected to input 0 of slice X7Y0 LUT 7.

第1のクロックサイクルの間、スライスX6Y0-X6Y7からのr1およびr2値は、スライスX7Y0-X7Y3の入力に転送され、LUTおよびキャリーチェーンによって処理され、結果はそれらのスライスのフリップフリップ(X7Y0-X7Y3)に記憶され、次のサイクルで使用される準備ができる。 During the first clock cycle, the r1 and r2 values from slices X6Y0–X6Y7 are transferred to the inputs of slices X7Y0–X7Y3, processed by the LUT and carry chain, and the results are stored in the flip-flip (X7Y0–X7Y3) of those slices, ready for use in the next cycle.

命令2に移る。コンパイラは、命令2の結果を計算する場所を選択する必要がある。スライスX7Y4~X7Y7を選択し得る。ここでも、命令1の結果(X7Y0~X7Y3)から命令2の入力(X7Y4~X7Y7)へのフルバイト接続が存在することになる。 Moving on to instruction 2. The compiler needs to choose where to compute the result of instruction 2. It could choose slices X7Y4 to X7Y7. Here again, a full byte connection exists from the result of instruction 1 (X7Y0 to X7Y3) to the input of instruction 2 (X7Y4 to X7Y7).

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の入力に接続し、以下同様である。 The value of r3 is also required. If r1, r2, and r3 are generated in cycle 0, then r1 + r2 is generated in cycle 1. The value of r3 needs to be delayed by one clock cycle so that it is generated in cycle 1. The compiler may choose to generate r3 in cycle 1 using slices X7Y8 to X7Y11. Next, a connection is needed from the original slice (X6Y8 to X6Y11) that generated r3 in cycle 0 to a new slice (X7Y8 to X7Y11) that generates the same value in cycle 1. Once that is done, a connection is now needed from those new slices to the slice for instruction 2. Thus, the output from slice X7Y8 is connected to the input of slice X7Y4, and so on.

このとき、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を使用することができる。
At this time, the FPGA bitfile includes the following functions:
- Full byte connection from X6Y0 to X7Y0 input 0 (initial r1 byte 0)
- Full byte connection from X6Y1 to X7Y1 input 0 (initial r1 byte 1)
- Full byte connection from X6Y2 to X7Y2 input 0 (initial r1 byte 2)
- Full byte connection from X6Y3 to X7Y3 input 0 (initial r1 byte 3)
- Full byte connection from X6Y4 to X7Y0 input 1 (initial r2 byte 0)
- Full byte connection from X6Y5 to X7Y1 input 1 (initial r2 byte 1)
- Full byte connection from X6Y6 to X7Y2 input 1 (initial r2 bytes 2)
- Full byte connection from X6Y7 to X7Y3 input 1 (initial r2 bytes 3)
- Full byte connection from X6Y8 to X7Y8 input 0 (initial r3 bytes 0)
- Full byte connection from X6Y9 to X7Y9 input 0 (initial r3 byte 1)
- Full byte connection from X6Y10 to X7Y10 input 0 (initial r3 bytes 2)
- Full byte connection from X6Y11 to X7Y11 input 0 (initial r3 bytes 3)
- Slice X7Y0 (instruction byte 0) configured to add input 0 to input 1.
- Slice X7Y1 configured to add input 0 to input 1 (instruction 1 byte 1)
- Slice X7Y2 (instruction 1 byte 2) configured to add input 0 to input 1.
- Slice X7Y3 (instruction 1 byte 3) configured to add input 0 to input 1.
- Slice X7Y8 (r3 delay byte 0) configured to copy input 0 to output
- Slice X7Y9 (r3 delay byte 1) configured to copy input 0 to output
- Slice X7Y10 (r3 delay byte 2) configured to copy input 0 to output
- Slice X7Y11 (r3 delay byte 3) configured to copy input 0 to output
- Full byte connection from X7Y0 to X7Y4 input 0 (instruction byte 0)
- Full byte connection from X7Y1 to X7Y5 input 0 (instruction 1 byte 1)
- Full byte connection from X7Y2 to X7Y6 input 0 (1 instruction byte 2)
- Full byte connection from X7Y3 to X7Y7 input 0 (instruction 1 byte 3)
- Full byte connection from X7Y8 to X7Y4 input 1 (r3 delay byte 0)
- Full byte connection from X7Y9 to X7Y5 input 1 (r3 delayed byte 1)
- Full byte connection from X7Y10 to X7Y6 input 1 (r3 delay byte 2)
- Full byte connection from X7Y11 to X7Y7 input 1 (r3 delayed byte 3)
- Slice X7Y4 (instruction 2 bytes 0) configured to add input 0 to input 1.
- Slice X7Y5 (instruction 2 bytes 1) configured to add input 0 to input 1
- Slice X7Y6 (instruction 2 bytes 2) configured to add input 0 to input 1.
- Slice X7Y7 (instruction 2 bytes 3) configured to add input 0 to input 1.
The compiler does not need to generate the upper 32 bits of the result of instruction 2, because it knows they will be zeros. Taking that fact into consideration, we can use zeros whenever they are used.

次に、eBPF断片のコンパイルの第2の例について説明する。
命令1:r1&=0xff
命令2:r2&=0xff
命令3:r1<r2の場合、L1へ進む
命令4:r1=r2
ラベルL1。
Next, we will describe a second example of compiling an eBPF fragment.
Instruction 1: r1&=0xff
Instruction 2: r2&=0xff
Command 3: If r1 < r2, proceed to L1. Command 4: r1 = r2
Label L1.

第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に対して同じことを行う。 The first instruction performs a bitwise AND operation between r1 and the constant 0xff, and places the result in r1. If the corresponding bit was originally set to 1 in r1 and the corresponding bit was set to 1 in the constant, the given bit in the result is set to 1. Otherwise, it is set to 0. The constant 0xff has bits 0-7 set and bits 8-63 cleared, so as a result, bits 0-7 of r1 remain unchanged, but bits 8-63 are set to 0. This simplifies things for the compiler because it understands that bits 8-63 are 0 and do not need to be generated. The second instruction does the same thing for r2.

命令3は、r1がr2未満であるか否かをチェックし、そうであればラベルL1にジャンプする。これにより、命令4がスキップされる。命令4は、単純に値をr2からr1にコピーする。この命令シーケンスは、r1バイト0およびr2バイト0の最小値を見つけ、結果をr1バイト0に置く。 Instruction 3 checks whether r1 is less than r2, and if so, jumps to label L1. This skips instruction 4. Instruction 4 simply copies the value from r2 to r1. This instruction sequence finds the minimum value of byte 0 of r1 and byte 0 of r2, and places the result in byte 0 of r1.

コンパイラは、「if変換」として知られる技法を使用して、条件付きジャンプを選択命令に変えることができる。 Compilers can use a technique known as "if conversion" to transform conditional jumps into selection instructions.

命令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にコピーするため、新しいシーケンスは古いシーケンスと同じ効果を有する。
Instruction 1: r1&=0xff
Instruction 2: r2&=0xff
Instruction 5: c1=(r1<r2)
Instruction 6: r1=c1? r1:r2
Instruction 5 compares r1 with r2 and sets c1 to 1 if r1 is less than r2, otherwise sets c1 to 0. Instruction 6 is a selection instruction that copies r1 to r1 if c1 is set (this has no effect), and copies r2 to r1 otherwise. If c1 is equal to 1, instruction 3 has skipped instruction 4, which means that r1 retains its value from instruction 1. In this case, the selection instruction also retains r1 without modification. If c1 is equal to 0, instruction 3 has not skipped instruction 4, so r2 is copied to r1 by instruction 4. Here again, the selection instruction copies r2 to r1, so the new sequence has the same effect as the old sequence.

命令6は有効なeBPF命令ではない。しかしながら、この命令は、コンパイラがそれらに対して作用している間にLLVM-IRにおいて表現される。命令6は、LLVM-IRにおいては有効な命令である。 Instruction 6 is not a valid eBPF instruction. However, it is represented in the LLVM-IR while the compiler is working on it. Therefore, instruction 6 is a valid instruction in the LLVM-IR.

これらの命令は、ここでアトムに割り当てられる必要がある。入力r1がスライスX0Y0~X0Y7において利用可能であり、r2がスライスX0Y8~X0Y15において利用可能であると仮定する。命令1および2は、r1およびr2の上位7バイトが0に設定されることをコンパイラに注記させる。 These instructions need to be assigned to atoms here. Assume that input r1 is available in slices X0Y0–X0Y7 and r2 is available in slices X0Y8–X0Y15. Instructions 1 and 2 prompt the compiler to note that the upper 7 bytes of r1 and r2 should be set to 0.

次に、コンパイラは、スライスX1Y0内の命令5の結果を計算することを選択し得る。スライスX0Y0の出力からスライスX1Y0の入力0へのフルバイト接続、およびスライスX0Y8の出力からスライスX1Y0の入力1へのフルバイト接続が必要である。2つの値を比較する方法は、一方を他方から減算し、次のビットアップから借用しようとすることによって計算がオーバーフローするか否かを確認することである。そして、この比較結果は、スライスX1Y1のフリップフロップ7に記憶される。 Next, the compiler may choose to compute the result of instruction 5 in slice X1Y0. This requires a full byte connection from the output of slice X0Y0 to input 0 of slice X1Y0, and a full byte connection from the output of slice X0Y8 to input 1 of slice X1Y0. The way to compare the two values is to subtract one from the other and check if the calculation overflows by attempting to borrow from the next bit up. The result of this comparison is then stored in flip-flop 7 of slice X1Y1.

第1の例と同様に、r1およびr2は、命令6に対して適時に値を提示するために1サイクルだけ遅延される必要がある。コンパイラは、r1およびr2に対してそれぞれスライスX1Y1およびX1Y2を使用し得る。 Similar to the first example, r1 and r2 need to be delayed by one cycle to present their values in a timely manner to instruction 6. The compiler may use slices X1Y1 and X1Y2 for r1 and r2, respectively.

選択命令は、c1、r1、およびr2の3つの入力を必要とする。r1およびr2は1バイト幅であるが、c1は1ビット幅しかないことに留意されたい。コンパイルが選択命令スライスX2Y0の結果を計算すると仮定する。選択はビットごとに実行され、スライスX2Y0内の各LUTが1ビットを扱う。 The select instruction requires three inputs: c1, r1, and r2. Note that r1 and r2 are 1 byte wide, while c1 is only 1 bit wide. Assume the compiler calculates the result of the select instruction slice X2Y0. The select is performed bit by bit, with each LUT in slice X2Y0 handling 1 bit.

c1が設定される場合、結果のビット0はr1ビット0であり、
そうでない場合、r2ビット0である。
If c1 is set, the resulting bit 0 is bit r1 0.
Otherwise, the r2 bit is 0.

c1が設定される場合、結果のビット1はr1ビット1であり、
そうでない場合、r2ビット1である。
If c1 is set, the resulting bit 1 is r1 bit 1,
Otherwise, bit r2 is 1.

...そして、以下まで同様である。
c1が設定される場合、結果のビット7はr1ビット7であり、
そうでない場合、r2ビット7である。
...and so on.
If c1 is set, the resulting bit 7 is r1 bit 7.
Otherwise, the r2 bit is 7.

各LUTはr1からの対応するビットおよびr2からの対応するビットにアクセスする必要があり得るが、すべてのLUTはc1にアクセスする必要がある。これは、c1がスライスの入力0のビットにわたって複製される必要があることを意味する。したがって、命令6の入力のための接続は以下のようになる。 Each LUT may need to access the corresponding bits from r1 and r2, but all LUTs need to access c1. This means that c1 needs to be duplicated across the bits of input 0 of the slice. Therefore, the connections for the input of instruction 6 are as follows:

スライスX1Y0の出力のビット7をスライスX2Y0の入力0に複製する。
スライスX1Y1の出力からスライスX2Y0の入力1へのフルバイト接続。
Duplicate bit 7 of the output of slice X1Y0 to input 0 of slice X2Y0.
Full byte connection from the output of slice X1Y1 to input 1 of slice X2Y0.

スライスX1Y2の出力からスライスX2Y0の入力2へのフルバイト接続。
対処する必要がある別の問題は、シフト命令に関する。以下の例を考える。
Full byte connection from the output of slice X1Y2 to input 2 of slice X2Y0.
Another issue that needs to be addressed concerns shift instructions. Consider the following example.

5ビット左への16ビットシフトは、
出力ビット0を0に設定し、
出力ビット1を0に設定し、
出力ビット2を0に設定し、
出力ビット3を0に設定し、
出力ビット4を0に設定し、
入力ビット0を出力ビット5にコピーし、
入力ビット1を出力ビット6にコピーし、
...
入力ビット10を出力ビット15にコピーすることを必要とする。
A 16-bit shift 5 bits to the left is:
Set output bit 0 to 0,
Set output bit 1 to 0,
Set output bit 2 to 0,
Set output bit 3 to 0,
Set output bit 4 to 0,
Copy input bit 0 to output bit 5,
Copy input bit 1 to output bit 6,
...
This requires copying input bit 10 to output bit 15.

ここでの入力および出力は、接続のものであることに留意されたい。接続の入力は、第1のスライスの出力からのものである。接続の出力は、第2のスライスの入力に進む。 Note that the inputs and outputs here belong to the connection. The connection's input comes from the output of the first slice. The connection's output then proceeds to the input of the second slice.

スライス内でこの種の接続を行うことは可能でない場合があり、そうではなく、スライス間の相互接続によってこの種の接続を行うことは可能である場合がある。コンパイラは、16ビット入力値が同じ列内の2つの隣接するスライスによって生成されたと仮定することができる。これは、コンパイラがそこで値が生成されることを確認することができるためである。 It may not always be possible to make this type of connection within a slice, but it may be possible through interconnections between slices. The compiler can assume that a 16-bit input value is produced by two adjacent slices in the same column, because the compiler can verify that the value is produced there.

一例として、入力がスライスX0Y4およびX0Y5によって生成され、出力がスライスX1Y4およびX1Y5に向かうと仮定する。その場合、以下の接続が必要となる。 As an example, let's assume the input is generated by slices X0Y4 and X0Y5, and the output is directed to slices X1Y4 and X1Y5. In that case, the following connections are required.

スライス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を無視することができるため、いずれの入力がそこに提示されるかは問題ではないためである。
Slice X1Y4 bit 0 is known to be 0 and therefore unnecessary. Slice X1Y4 bit 1 is known to be 0 and therefore unnecessary. Slice X1Y4 bit 2 is known to be 0 and therefore unnecessary. Slice X1Y4 bit 3 is known to be 0 and therefore unnecessary. Slice X1Y4 bit 4 is known to be 0 and therefore unnecessary. Slice X1Y4 bit 5 comes from slice X0Y4 bit 0. Slice X1Y4 bit 6 comes from slice X0Y4 bit 1. Slice X1Y4 bit 7 comes from slice X0Y4 bit 2. Slice X1Y5 bit 0 comes from slice X0Y4 bit 3. Slice X1Y5 bit 1 comes from slice X0Y4 bit 4. Slice X1Y5 bit 2 comes from slice X0Y4 bit 5. Slice X1Y5 bit 3 comes from slice X0Y4 bit 6. Slice X1Y5 bit 4 comes from slice X0Y4 bit 7. Slice X1Y5 bit 5 comes from slice X0Y5 bit 0. Bit 6 of slice X1Y5 comes from bit 1 of slice X0Y5. Bit 7 of slice X1Y5 comes from bit 2 of slice X0Y5. The eight connections to the input of slice X1Y5 can be thought of as shifted connections or shifted roots. The same structure can be used for slice X1Y4, but it has inputs from X1Y3 and X1Y4. This is because bits 5-7 are matched and the slice can ignore bits 0-4, so it doesn't matter which input is presented there.

1~7ビットの任意の量だけシフトできる必要があり得る。0ビットまたは8ビットだけシフトする接続は、その場合、各ビットが別のスライスの対応するビットに接続するため、フルバイト接続とまったく同じである。 It may be necessary to shift by any amount between 1 and 7 bits. A connection that shifts by 0 or 8 bits is exactly the same as a full-byte connection, in which case each bit connects to the corresponding bit in another slice.

可変量のシフトは、シフトされる値の幅に応じて、2ステージまたは3ステージ内で行われ得る。ステージは以下の通りである。 The shift of a variable quantity can be performed within two or three stages, depending on the range of the value being shifted. The stages are as follows:

ステージ1:0、1、2または3だけシフトする。
ステージ2:0、4、8または12だけシフトする。
Stage 1: Shift only 0, 1, 2, or 3.
Stage 2: Shift only 0, 4, 8, or 12.

ステージ3:0、16、32または48だけシフトする(32ビットまたは64ビットのみ)。 Stage 3: Shifts by 0, 16, 32, or 48 bits (32-bit or 64-bit only).

別の例として、可変量バイト分の算術右シフトがあるとすると、シフトされる値はスライスX3Y2によって生成され、シフト量はX3Y3によって生成される。 As another example, consider an arithmetic right shift of a variable number of bytes. The value to be shifted is generated by slice X3Y2, and the amount of the shift is generated by X3Y3.

算術右シフトは、「算術右シフト」タイプの接続を必要とする。このタイプの接続は、1つのスライスの出力を取り、それらを別のスライスの入力に接続するが、そのプロセスにおいてそれらを一定量だけ右にシフトし、必要に応じて符号ビットを複製する。 Arithmetic right shifts require an "arithmetic right shift" type connection. This type of connection takes the outputs of one slice and connects them to the inputs of another slice, but in the process shifts them to the right by a certain amount and duplicates the sign bit if necessary.

例えば、「算術右3シフト」接続は、以下を有する。
出力ビット0は入力ビット3からのものである
出力ビット1は入力ビット4からのものである
出力ビット2は入力ビット5からのものである
出力ビット3は入力ビット6からのものである
出力ビット4は入力ビット7からのものである
出力ビット5は入力ビット7(符号ビット)からのものである
出力ビット6は入力ビット7(符号ビット)からのものである
出力ビット7は入力ビット7(符号ビット)からのものである
ステージ1は、スライスX4Y2において計算することができ、その場合、以下の接続が必要になる。
For example, the "arithmetic right 3 shift" connection has the following:
Output bit 0 comes from input bit 3. Output bit 1 comes from input bit 4. Output bit 2 comes from input bit 5. Output bit 3 comes from input bit 6. Output bit 4 comes from input bit 7. Output bit 5 comes from input bit 7 (sign bit). Output bit 6 comes from input bit 7 (sign bit). Output bit 7 comes from input bit 7 (sign bit). Stage 1 can be calculated in slice X4Y2, in which case the following connections are required.

スライス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つを選択するように構成される。
Full byte from slice X3Y2 to slice X4Y2 input 0 Arithmetic right 1 shift from slice X3Y2 to slice X4Y2 input 1 Arithmetic right 2 shift from slice X3Y2 to slice X4Y2 input 2 Arithmetic right 3 shift from slice X3Y2 to slice X4Y2 input 3 Duplicate bit 0 of slice X3Y3 to slice X4Y2 input 4 Duplicate bit 1 of slice X3Y3 to slice X4Y2 input 5 Next, slice X4Y2 is configured to select one of the first four inputs based on inputs 4 and 5 as follows:

入力4が0であり、入力5が0である:入力0を選択する
入力4が1であり、入力5が0である:入力1を選択する
入力4が0であり、入力5が1である:入力2を選択する
入力4が1であり、入力5が1である:入力3を選択する
スライスX3Y3からスライスX4Y3にシフト量をコピーして遅延バージョンを提供することができる。
If input 4 is 0 and input 5 is 0: select input 0. If input 4 is 1 and input 5 is 0: select input 1. If input 4 is 0 and input 5 is 1: select input 2. If input 4 is 1 and input 5 is 1: select input 3. A delayed version can be provided by copying the shift amount from slice X3Y3 to slice X4Y3.

ステージ2は、スライスX5Y2において計算され得、その場合、以下の接続が必要になる。 Stage 2 can be calculated at slice X5Y2, in which case the following connections are required.

スライスX4Y2からスライスX5Y2入力0へのフルバイト
スライスX4Y2からスライスX5Y2入力1への算術右4シフト
スライスX4Y3ビット2をスライスX5Y2入力2に複製する
次に、スライスX5Y2は、以下のように入力2に基づいて入力0または入力1を選択するように構成される。
Full byte from slice X4Y2 to slice X5Y2 input 0 Arithmetic right 4 shift from slice X4Y2 to slice X5Y2 input 1 Duplicate bit 2 of slice X4Y3 to slice X5Y2 input 2 Next, slice X5Y2 is configured to select input 0 or input 1 based on input 2 as follows:

入力2が0:入力0を選択する
入力2が1:入力1を選択する
スライスX5Y2の出力は、可変算術右シフト演算の結果となる。
If input 2 is 0, select input 0. If input 2 is 1, select input 1. The output of slice X5Y2 is the result of a variable arithmetic right shift operation.

所与のアトムのビットファイルは以下のとおりであり得る。
アトムの識別情報
所与のアトムが入力およびその入力に利用可能なルートを受け取ることができる他のアトムのリスト。
The bitfile of a given atom may be as follows:
Atom identification information: A list of other atoms that a given atom can receive as an input and routes available for that input.

所与のアトムが出力およびその出力に利用可能なルートを提供することができる他のアトムのリスト
FPGAは規則的な構造であるため、必要に応じて個々のアトムの修正を伴う複数のアトムに使用できる共通のテンプレートがあり得ることを理解されたい。
A given atom can provide an output and a list of other atoms that can provide routes available to that output. It should be understood that because FPGAs have a regular structure, there can be a common template that can be used for multiple atoms, with modifications to the individual atoms as needed.

一例として、スライスX7Y1のビットファイル記述は、以下の可能な入力および出力を指定することができる。 As an example, the bitfile description for slice X7Y1 can specify the following possible inputs and outputs:

ルートAまたはルートBを介したX6Y1からの入力
ルートCまたはルートDを介したX6Y5からの入力
ルートEまたはルートFを介したX7Y0からの入力
ルートGまたはルートHを介したX8Y1への出力
ルートIまたはルートJを介したX7Y2への出力
ルートKまたはルートLを介したX7Y5への出力。
Input from X6Y1 via Route A or Route B; Input from X6Y5 via Route C or Route D; Input from X7Y0 via Route E or Route F; Output to X8Y1 via Route G or Route H; Output to X7Y2 via Route I or Route J; Output to X7Y5 via Route K or Route L.

コンパイラは、このビットファイル記述を使用して、以下の前述した第1のeBPF例のスライスX7Y1の入力および出力のための部分ビットファイルを提供する。 The compiler uses this bitfile description to provide partial bitfiles for the input and output of slice X7Y1 of the first eBPF example described below.

ルートAを介したX6Y1からの入力
ルートCを介したX6Y5からの入力
ルートKまたはルートLを介したX7Y5への出力。
Input from X6Y1 via Root A; input from X6Y5 via Root C; output to X7Y5 via Root K or Root L.

一例として、スライスXnYmのビットファイル記述は、以下の可能な入力および出力を指定することができる。 As an example, the bitfile description for slice XnYm can specify the following possible inputs and outputs:

ルート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への出力。
Input from Xn-1Ym via Root A or Root B; Input from Xn-1Ym+4 via Root C or Root D; Input from XnYm-1 via Root E or Root F; Output to Xn+1Ym via Root G or Root H; Output to XnYm+1 via Root I or Root J; Output to XnYm+4 via Root K or Root L.

このビットファイル記述は、前述のように、コンパイラが使用するのに利用できない1つまたは複数のルートを除去するように修正することができる。これは、ルートが別のアトムによって使用されるか、またはパーティションをまたいだルーティングに使用されるためであり得る。 This bitfile description can be modified, as described above, to remove one or more routes that are unavailable for the compiler to use. This may be because the route is being used by another atom or for routing across partitions.

コンパイラは、1つまたは複数のコンピュータプロセッサによって実行され得るコンピュータ実行可能命令を含むコンピュータプログラムによって実装され得ることを理解されたい。コンパイラは、1つまたは複数のメモリと連携して動作する少なくとも1つのプロセッサなどのハードウェア上で実行することができる。 It should be understood that a compiler can be implemented by a computer program containing computer-executable instructions that can be executed by one or more computer processors. A compiler can run on hardware such as at least one processor working in conjunction with one or more memory devices.

上記は例示的な実施形態を説明しているが、本発明の範囲から逸脱することなく開示された解決策に対して行うことができるいくつかの変形および修正があることに留意されたい。 While the above describes exemplary embodiments, it should be noted that there are several variations and modifications that can be made to the disclosed solutions without departing from the scope of the present invention.

したがって、実施形態は、添付の特許請求項の範囲内で変化し得る。一般に、いくつかの実施形態は、ハードウェアもしくは専用回路、ソフトウェア、ロジック、またはそれらの任意の組み合わせにおいて実施することができる。例えば、いくつかの態様はハードウェアにおいて実装されてもよく、一方、他の態様は、コントローラ、マイクロプロセッサ、または他のコンピューティングデバイスによって実行され得るファームウェアまたはソフトウェアにおいて実装されてもよいが、実施形態はそれらに限定されない。 Therefore, the embodiments may vary within the scope of the appended claims. Generally, some embodiments can be implemented in hardware, dedicated circuitry, software, logic, or any combination thereof. For example, some embodiments may be implemented in hardware, while others may be implemented in firmware or software that can be executed by a controller, microprocessor, or other computing device; however, the embodiments are not limited to these.

実施形態は、メモリに記憶され、関与するエンティティの少なくとも1つのデータプロセッサによって、またはハードウェアによって、またはソフトウェアとハードウェアとの組み合わせによって実行可能なコンピュータソフトウェアによって実施することができる。 The embodiments can be implemented by computer software that is stored in memory and executable by at least one data processor of the involved entities, or by hardware, or by a combination of software and hardware.

ソフトウェアは、メモリチップ、またはプロセッサ内に実装されたメモリブロックなどの物理媒体、ハードディスクまたはフロッピー(登録商標)ディスクなどの磁気媒体、および例えばDVDおよびそのデータ変形、CDなどの光学媒体に記憶することができる。 Software can be stored on physical media such as memory chips or memory blocks implemented within a processor, magnetic media such as hard disks or floppy disks, and optical media such as DVDs and their data variants, and CDs.

メモリは、ローカル技術環境に適した任意のタイプのものであってもよく、半導体ベースのメモリデバイス、磁気メモリデバイスおよびシステム、光メモリデバイスおよびシステム、固定メモリおよびリムーバブルメモリなどの任意の適切なデータ記憶技術を使用して実装することができる。 The memory may be of any type suitable for the local technical environment and can be implemented using any appropriate data storage technology, such as semiconductor-based memory devices, magnetic memory devices and systems, optical memory devices and systems, fixed memory, and removable memory.

データプロセッサは、ローカル技術環境に適した任意のタイプのものであってもよく、非限定的な例として、汎用コンピュータ、専用コンピュータ、マイクロプロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、ゲートレベル回路、およびマルチコアプロセッサアーキテクチャに基づくプロセッサのうちの1つまたは複数を含んでもよい。 The data processor may be of any type suitable for the local technical environment and, in non-limiting examples, may include one or more of the following: general-purpose computers, dedicated computers, microprocessors, digital signal processors (DSPs), application-specific integrated circuits (ASICs), gate-level circuits, and processors based on multi-core processor architectures.

添付の図面および添付の特許請求の範囲と併せて読めば、前述の説明を考慮して、様々な修正および適合が当業者には明らかになり得る。しかしながら、本教示のすべてのそのようなおよび類似の修正は、添付の特許請求の範囲に定義される範囲内に依然として含まれる。 In conjunction with the accompanying drawings and claims, and considering the foregoing description, various modifications and adaptations may become apparent to those skilled in the art. However, all such and similar modifications of this teaching remain within the scope defined in the accompanying claims.

Claims (26)

ホストデバイスをネットワークにインターフェースするためのネットワークインターフェースデバイスであって、
第1のインターフェースであり、前記第1のインターフェースは、複数のデータパケットを受信するように構成されている、第1のインターフェースと、
複数の処理ユニットを備える構成可能ハードウェアモジュールであり、各処理ユニットは、単一のステップにおいて実行可能な所定のタイプの動作に関連付けられる、構成可能ハードウェアモジュールとを備え、
前記複数の処理ユニットのうちの少なくともいくつかは、異なる所定のタイプの動作に関連付けられ、
前記構成可能ハードウェアモジュールは、前記構成可能ハードウェアモジュールによって実行されると、前記構成可能ハードウェアモジュールに、前記複数のデータパケットのうちの1つまたは複数を処理するための第1のデータ処理パイプラインを提供するために、前記複数の前記処理ユニットのうちの少なくともいくつかを相互接続させる命令を受信するように構成され、前記少なくともいくつかの前記処理ユニットによる、それぞれの所定のタイプの動作の、前記第1のデータ処理パイプラインにおける動作は、前記複数のデータパケットのうちの前記1つまたは複数に関連して第1の機能を実行することをもたらし、
前記複数のデータパケットのうちの前記1つまたは複数のうちの第1のデータパケットについて、前記第1のデータ処理パイプラインにおける前記複数の処理ユニットの前記少なくともいくつかのうちの2つ以上は、それぞれの所定のタイプの動作を、前記第1のデータパケットに対して並列に実行するように各々が構成され、
前記複数のデータパケットのうちの複数のデータパケットは、前記第1のデータ処理パイプラインにおける異なる処理ユニットによって同時に処理され、
前記複数の処理ユニットのうちの前記少なくともいくつかのうちの前記2つ以上にアクセス可能な共有メモリを備え、前記共有メモリは、前記第1のデータパケットに関連付けられる状態を記憶するように構成され、前記構成可能ハードウェアモジュールによる前記第1の機能の実行中、前記複数の処理ユニットのうちの2つ以上は、前記第1のデータパケットに関連付けられる前記状態にアクセスし、前記状態を修正するように構成され、
前記複数の処理ユニットのうちの前記少なくともいくつかのうちの前記2つ以上のうち、第1の処理ユニットは、前記複数の処理ユニットのうちの前記少なくともいくつかのうちの前記2つ以上のうちの第2の処理ユニットによる前記第1のデータパケットに関連付けられる前記状態の値のアクセス中にストールするように構成される、ネットワークインターフェースデバイス。
A network interface device for interface a host device to a network,
A first interface, the first interface being configured to receive multiple data packets,
A configurable hardware module comprising multiple processing units, each processing unit comprising a configurable hardware module associated with a predetermined type of operation that can be performed in a single step,
At least some of the plurality of processing units are associated with different predetermined types of operations,
The configurable hardware module, when executed by the configurable hardware module, is configured to receive instructions to interconnect at least some of the plurality of processing units in order to provide a first data processing pipeline for processing one or more of the plurality of data packets, and the operation of at least some of the processing units, each of a predetermined type of operation, in the first data processing pipeline results in performing a first function in relation to one or more of the plurality of data packets.
With respect to the first data packet among the one or more of the plurality of data packets, at least two or more of the plurality of processing units in the first data processing pipeline are each configured to perform their respective predetermined types of operations in parallel with respect to the first data packet.
Multiple data packets among the aforementioned multiple data packets are processed simultaneously by different processing units in the first data processing pipeline.
The system includes a shared memory accessible to two or more of the at least some of the plurality of processing units, the shared memory being configured to store a state associated with the first data packet, and during the execution of the first function by the configurable hardware module, two or more of the plurality of processing units being configured to access and modify the state associated with the first data packet.
A network interface device in which, of the two or more of the at least some of the plurality of processing units, the first processing unit is configured to stall during access by the second processing unit, of the two or more of the at least some of the plurality of processing units, to the state value associated with the first data packet.
前記複数の処理ユニットのうちの前記少なくともいくつかのうちの前記2つ以上は、
クロック信号によって規定される所定の時間長内に前記それぞれの所定のタイプの動作を実施し、
前記所定の時間長の終了に応答して、前記それぞれの所定のタイプの動作の結果を次の処理ユニットに転送するように構成される、請求項1に記載のネットワークインターフェースデバイス。
Of the plurality of processing units, at least two of the above-mentioned two or more are
Each of the predetermined types of operations is performed within a predetermined time length defined by the clock signal.
The network interface device according to claim 1, configured to transfer the results of each of the predetermined types of operations to the next processing unit in response to the completion of the predetermined time period.
前記複数の処理ユニットの各々は、それぞれの前記処理ユニットに関連付けられる前記それぞれの所定のタイプの動作を実行するように構成された特定用途向け集積回路を含む、請求項1または請求項2に記載のネットワークインターフェースデバイス。 The network interface device according to claim 1 or 2, wherein each of the plurality of processing units includes an application-specific integrated circuit configured to perform the respective predetermined type of operation associated with each of the processing units. 前記複数の処理ユニットのうちの少なくとも1つは、デジタル回路と、前記デジタル回路によって実行される処理に関連する状態を記憶するメモリとを備え、前記デジタル回路は、前記メモリと通信して、それぞれの前記処理ユニットに関連付けられる前記所定のタイプの動作を実行するように構成される、請求項1~3のいずれか1項に記載のネットワークインターフェースデバイス。 The network interface device according to any one of claims 1 to 3, wherein at least one of the plurality of processing units comprises a digital circuit and a memory for storing a state related to processing performed by the digital circuit, and the digital circuit is configured to communicate with the memory to perform the predetermined type of operation associated with each of the processing units. 前記複数の処理ユニットのうちの1つまたは複数は、前記それぞれの所定のタイプの動作に基づいて、それぞれのパイプラインに固有の動作を実行するように個別に構成可能である、請求項1~4のいずれか1項に記載のネットワークインターフェースデバイス。 The network interface device according to any one of claims 1 to 4, wherein one or more of the plurality of processing units can be individually configured to perform operations specific to each pipeline based on each predetermined type of operation. 前記構成可能ハードウェアモジュールは、命令を受信し、前記命令に応答して、
前記複数の処理ユニットのうちの1つまたは複数に、前記1つまたは複数のデータパケットに関して前記それぞれの所定のタイプの動作を実行させること、
前記複数の処理ユニットのうちの1つまたは複数をデータ処理パイプラインに追加すること、および
データ処理パイプラインから前記複数の処理ユニットのうちの1つまたは複数を除去することのうちの少なくとも1つを行うように構成されている、請求項1~5のいずれか1項に記載のネットワークインターフェースデバイス。
The configurable hardware module receives an instruction and responds to the instruction,
To cause one or more of the aforementioned processing units to perform the respective predetermined types of operations with respect to one or more data packets,
A network interface device according to any one of claims 1 to 5, configured to add one or more of the plurality of processing units to a data processing pipeline, and to remove one or more of the plurality of processing units from a data processing pipeline.
前記所定のタイプの動作は、
メモリから第1のデータパケットの少なくとも1つの値をロードすること、
データパケットの少なくとも1つの値をメモリに記憶すること、および
データパケットに関して実行されるべきアクションを決定するためにルックアップテーブル内のルックアップを実行することのうちの少なくとも1つを含む、請求項1~6のいずれか1項に記載のネットワークインターフェースデバイス。
The aforementioned predetermined type of operation is,
Loading at least one value of the first data packet from memory,
A network interface device according to any one of claims 1 to 6, comprising at least one of storing at least one value of a data packet in memory, and performing a lookup in a lookup table to determine an action to be performed with respect to the data packet.
前記複数の処理ユニットのうちの前記少なくともいくつかのうちの1つまたは複数は、前記それぞれの所定のタイプの動作の少なくとも1つの結果を第1のデータ処理パイプライン内の次の処理ユニットに渡すように構成され、前記次の処理ユニットは、前記少なくとも1つの結果に応じて次の所定のタイプの動作を実行するように構成される、請求項1~7のいずれか1項に記載のネットワークインターフェースデバイス。 The network interface device according to any one of claims 1 to 7, wherein one or more of the plurality of processing units is configured to pass the result of at least one of the predetermined types of operations to the next processing unit in a first data processing pipeline, and the next processing unit is configured to perform the next predetermined type of operation in response to the at least one result. 前記異なる所定のタイプの動作の各々は、異なるテンプレートによって定義される、請求項1~8のいずれか1項に記載のネットワークインターフェースデバイス。 Each of the different predetermined types of operation is defined by a different template, according to any one of claims 1 to 8. 前記所定のタイプの動作は、
データパケットにアクセスすること、
前記構成可能ハードウェアモジュールのメモリに記憶されたルックアップテーブルにアクセスすること、
データパケットからロードされたデータに対して論理演算を実行すること、および
前記ルックアップテーブルからロードされたデータに対して論理演算を実行することのうちの少なくとも1つを含む、請求項1~9のいずれか1項に記載のネットワークインターフェースデバイス。
The aforementioned predetermined type of operation is,
Accessing data packets,
Accessing the lookup table stored in the memory of the configurable hardware module,
A network interface device according to any one of claims 1 to 9, comprising at least one of performing a logical operation on data loaded from a data packet and performing a logical operation on data loaded from the lookup table.
前記構成可能ハードウェアモジュールはルーティングハードウェアを備え、前記構成可能ハードウェアモジュールは、前記第1のデータ処理パイプラインによって定義される特定の順序で前記複数の処理ユニット間でデータパケットをルーティングするように前記ルーティングハードウェアを構成することによって、前記第1のデータ処理パイプラインを提供するために前記複数の前記処理ユニットの少なくともいくつかを相互接続するように構成可能である、請求項1~10のいずれか1項に記載のネットワークインターフェースデバイス。 The network interface device according to any one of claims 1 to 10, wherein the configurable hardware module comprises routing hardware, and the configurable hardware module is configured to interconnect at least some of the processing units in order to provide the first data processing pipeline by configuring the routing hardware to route data packets between the processing units in a specific order defined by the first data processing pipeline. 前記構成可能ハードウェアモジュールは、前記複数の前記処理ユニットの少なくともいくつかを相互接続して、前記複数のデータパケットのうちの1つまたは複数を処理して前記第1の機能とは異なる第2の機能を実行するための第2のデータ処理パイプラインを提供するように構成可能である、請求項1~11のいずれか1項に記載のネットワークインターフェースデバイス。 The network interface device according to any one of claims 1 to 11, wherein the configurable hardware module can be configured to interconnect at least some of the plurality of processing units to provide a second data processing pipeline for processing one or more of the plurality of data packets and performing a second function different from the first function. 前記構成可能ハードウェアモジュールは、前記複数の前記処理ユニットのうちの少なくともいくつかを相互接続して、前記第1のデータ処理パイプラインを提供した後に、前記複数の前記処理ユニットのうちの少なくともいくつかを相互接続して第2のデータ処理パイプラインを提供するように構成可能である、請求項1~12のいずれか1項に記載のネットワークインターフェースデバイス。 The network interface device according to any one of claims 1 to 12, wherein the configurable hardware module can be configured to interconnect at least some of the plurality of processing units to provide the first data processing pipeline, and then to interconnect at least some of the plurality of processing units to provide a second data processing pipeline. 前記構成可能ハードウェアモジュールとは別個の、前記複数のデータパケットのうちの1つまたは複数に対して前記第1の機能を実行するように構成されたさらなる回路を備える、請求項1~13のいずれか1項に記載のネットワークインターフェースデバイス。 A network interface device according to any one of claims 1 to 13, comprising further circuitry, separate from the configurable hardware module, configured to perform the first function for one or more of the plurality of data packets. 前記さらなる回路は、
フィールドプログラマブルゲートアレイ、および
複数の中央処理装置のうちの少なくとも1つを含む、請求項14に記載のネットワークインターフェースデバイス。
The aforementioned further circuit is
The network interface device according to claim 14, comprising a field-programmable gate array and at least one of a plurality of central processing units.
前記ネットワークインターフェースデバイスは、少なくとも1つのコントローラを備え、前記さらなる回路は、前記第1の機能が前記構成可能ハードウェアモジュールにおいて実行されるようにするためのコンパイルプロセス中にデータパケットに対して前記第1の機能を実行するように構成され、前記少なくとも1つのコントローラは、前記コンパイルプロセスの完了に応答して、データパケットに対する前記第1の機能の実行を開始するように前記構成可能ハードウェアモジュールを制御するように構成される、請求項14または15に記載のネットワークインターフェースデバイス。 The network interface device according to claim 14 or 15, comprising at least one controller, the further circuitry configured to perform the first function on data packets during a compilation process to enable the first function to be performed in the configurable hardware module, and the at least one controller configured to control the configurable hardware module to begin performing the first function on data packets in response to the completion of the compilation process. 前記少なくとも1つのコントローラは、前記コンパイルプロセスの前記完了に応答して、データパケットに対する前記第1の機能の実行を停止するように前記さらなる回路を制御するように構成される、請求項16に記載のネットワークインターフェースデバイス。 The network interface device according to claim 16, wherein the at least one controller is configured to control the further circuitry to stop executing the first function on data packets in response to the completion of the compilation process. 前記ネットワークインターフェースデバイスは少なくとも1つのコントローラを備え、前記構成可能ハードウェアモジュールは、前記第1の機能が前記さらなる回路において実行されるようにするためのコンパイルプロセス中にデータパケットに対して前記第1の機能を実行するように構成され、前記少なくとも1つのコントローラは、前記第1の機能が前記さらなる回路において実行されるようにするための前記コンパイルプロセスが完了したと決定し、前記コンパイルプロセスの完了に応答して、データパケットに対する前記第1の機能の実行を開始するように前記さらなる回路を制御するように構成される、請求項14または15のいずれか1項に記載のネットワークインターフェースデバイス。 The network interface device according to any one of claims 14 or 15, wherein the network interface device comprises at least one controller, the configurable hardware module is configured to perform the first function on data packets during a compilation process for the first function to be performed in the further circuitry, and the at least one controller is configured to determine that the compilation process for the first function to be performed in the further circuitry is complete, and to control the further circuitry to begin performing the first function on data packets in response to the completion of the compilation process. 前記少なくとも1つのコントローラは、前記コンパイルプロセスの前記完了に応答して、データパケットに対する前記第1の機能の実行を停止するように前記構成可能ハードウェアモジュールを制御するように構成される、請求項18に記載のネットワークインターフェースデバイス。 The network interface device according to claim 18, wherein the at least one controller is configured to control the configurable hardware module to stop performing the first function on data packets in response to the completion of the compilation process. 前記第1の機能が前記構成可能ハードウェアモジュールにおいて実行されることを可能にするためのコンパイルプロセスを実行するように構成された少なくとも1つのコントローラを備える、請求項1~19のいずれか1項に記載のネットワークインターフェースデバイス。 A network interface device according to any one of claims 1 to 19, comprising at least one controller configured to perform a compilation process to enable the first function to be performed in the configurable hardware module. 請求項1~20のいずれか1項に記載のネットワークインターフェースデバイスと、ホストデバイスとを備えるデータ処理システムであって、前記データ処理システムは、前記第1の機能が前記構成可能ハードウェアモジュールにおいて実行されることを可能にするためのコンパイルプロセスを実行するように構成された少なくとも1つのコントローラを備える、データ処理システム。 A data processing system comprising a network interface device according to any one of claims 1 to 20 and a host device, wherein the data processing system comprises at least one controller configured to perform a compilation process to enable the first function to be performed in the configurable hardware module. 前記少なくとも1つのコントローラは、
前記ネットワークインターフェースデバイス、および
前記ホストデバイスのうちの1つまたは複数によって提供される、請求項21に記載のデータ処理システム。
The aforementioned at least one controller is
The data processing system according to claim 21, provided by one or more of the network interface device and the host device.
前記コンパイルプロセスは、前記第1の機能を表現するコンピュータプログラムが前記ホストデバイスのカーネルモードにおいて安全に実行されるという、前記少なくとも1つのコントローラによる決定に応答して実行される、請求項21または22に記載のデータ処理システム。 The data processing system according to claim 21 or 22, wherein the compilation process is performed in response to a decision by the at least one controller that a computer program representing the first function is securely executed in kernel mode on the host device. 前記少なくとも1つのコントローラは、
前記コンパイルプロセスの完了前に、前記ネットワークインターフェースデバイスのさらなる回路に、データパケットに対して前記第1の機能を実行させるための第1の命令を送信し、前記さらなる回路は、前記構成可能ハードウェアモジュールとは別個の、前記複数のデータパケットのうちの1つまたは複数に対して前記第1の機能を実行するように構成され、
前記コンパイルプロセスの完了後に、前記構成可能ハードウェアモジュールに、データパケットに対する前記第1の機能の実行を開始させるための第2の命令を送信するように構成される、請求項21~23のいずれか1項に記載のデータ処理システム。
The aforementioned at least one controller is
Before the completion of the compilation process, a first instruction is sent to further circuitry of the network interface device to perform the first function on data packets, the further circuitry being configured to perform the first function on one or more of the plurality of data packets, separately from the configurable hardware module.
The data processing system according to any one of claims 21 to 23, wherein after the completion of the compilation process, it is configured to send a second instruction to the configurable hardware module to initiate the execution of the first function on a data packet.
ネットワークインターフェースデバイスにおける実施のための方法であって、
第1のインターフェースにおいて、複数のデータパケットを受信するステップと、
前記ネットワークインターフェースデバイスの構成可能ハードウェアモジュールにおいて命令を受信したことに応じて、前記構成可能ハードウェアモジュールの複数の処理ユニットのうちの少なくともいくつかを相互接続して、前記複数のデータパケットのうちの1つまたは複数を処理して前記複数のデータパケットのうちの前記1つまたは複数に対して第1の機能を実行するための第1のデータ処理パイプラインを提供するように、前記構成可能ハードウェアモジュールを構成するステップとを含み、
各処理ユニットは、単一のステップにおいて実行可能な所定のタイプの動作に関連付けられ、
前記複数の処理ユニットのうちの少なくともいくつかは、異なる所定のタイプの動作に関連付けられ、
前記複数のデータパケットのうちの前記1つまたは複数のうちの第1のデータパケットについて、前記複数の処理ユニットの前記少なくともいくつかのうちの2つ以上は、それぞれの所定のタイプの動作を、前記第1のデータパケットに対して並列に実行するように各々が構成され、
前記複数のデータパケットのうちの複数のデータパケットは、前記第1のデータ処理パイプラインにおける異なる処理ユニットによって同時に処理され、
前記第1の機能の実行中、前記複数の処理ユニットのうちの前記少なくともいくつかのうちの前記2つ以上は、前記ネットワークインターフェースデバイスの共有メモリにおける前記第1のデータパケットに関連付けられる状態にアクセスし、前記状態を修正するように構成され、前記共有メモリは、前記第1のデータ処理パイプラインにおける前記複数の処理ユニットのうちの前記少なくともいくつかのうちの前記2つ以上にアクセス可能であり、
前記第1の機能の実行中、前記複数の処理ユニットのうちの前記少なくともいくつかのうちの前記2つ以上のうち、第1の処理ユニットは、前記第1のデータ処理パイプラインにおける前記複数の処理ユニットのうちの前記少なくともいくつかのうちの前記2つ以上のうちの第2の処理ユニットによる前記第1のデータパケットに関連付けられる前記状態の値のアクセス中にストールするように構成される、方法。
A method for implementation in a network interface device,
The first interface includes the step of receiving multiple data packets,
The steps include configuring the configurable hardware module of the network interface device such that, upon receiving an instruction, at least some of the processing units of the configurable hardware module interconnect to provide a first data processing pipeline for processing one or more of the multiple data packets and performing a first function on one or more of the multiple data packets,
Each processing unit is associated with a predetermined type of operation that can be performed in a single step.
At least some of the plurality of processing units are associated with different predetermined types of operations,
With respect to the first data packet among the one or more of the plurality of data packets, at least two or more of the plurality of processing units are configured to perform their respective predetermined types of operations in parallel with respect to the first data packet.
Multiple data packets among the aforementioned multiple data packets are processed simultaneously by different processing units in the first data processing pipeline.
During the execution of the first function, two or more of the at least some of the plurality of processing units are configured to access and modify the state associated with the first data packet in the shared memory of the network interface device, and the shared memory is accessible to two or more of the at least some of the plurality of processing units in the first data processing pipeline.
A method in which, during the execution of the first function, the first processing unit, of at least some of the plurality of processing units, is configured to stall during the access of the state value associated with the first data packet by the second processing unit, of at least some of the plurality of processing units, in the first data processing pipeline.
ネットワークインターフェースデバイスに方法を実施させるためのプログラム命令を含む非一時的コンピュータ可読媒体であって、前記方法は、
第1のインターフェースにおいて、複数のデータパケットを受信するステップと、
前記ネットワークインターフェースデバイスの構成可能ハードウェアモジュールにおいて命令を受信したことに応じて、前記構成可能ハードウェアモジュールの複数の処理ユニットのうちの少なくともいくつかを相互接続して、前記複数のデータパケットのうちの1つまたは複数を処理して前記複数のデータパケットのうちの前記1つまたは複数に対して第1の機能を実行するための第1のデータ処理パイプラインを提供するように、前記構成可能ハードウェアモジュールを構成するステップとを含み、
各処理ユニットは、単一のステップにおいて実行可能な所定のタイプの動作に関連付けられ、
前記複数の処理ユニットのうちの少なくともいくつかは、異なる所定のタイプの動作に関連付けられ、
前記複数のデータパケットのうちの前記1つまたは複数のうちの第1のデータパケットについて、前記複数の処理ユニットの前記少なくともいくつかのうちの2つ以上は、それぞれの所定のタイプの動作を、前記第1のデータパケットに対して並列に実行するように各々が構成され、
前記複数のデータパケットのうちの複数のデータパケットは、前記第1のデータ処理パイプラインにおける異なる処理ユニットによって同時に処理され、
前記第1の機能の実行中、前記複数の処理ユニットのうちの前記少なくともいくつかのうちの2つ以上は、前記ネットワークインターフェースデバイスの共有メモリにおける前記第1のデータパケットに関連付けられる状態にアクセスし、前記状態を修正するように構成され、前記共有メモリは、前記第1のデータ処理パイプラインにおける前記複数の処理ユニットのうちの前記少なくともいくつかのうちの前記2つ以上にアクセス可能であり、
前記第1の機能の実行中、前記複数の処理ユニットのうちの前記少なくともいくつかのうちの前記2つ以上のうち、第1の処理ユニットは、前記第1のデータ処理パイプラインにおける前記複数の処理ユニットのうちの前記少なくともいくつかのうちの前記2つ以上のうちの第2の処理ユニットによる前記第1のデータパケットに関連付けられる前記状態の値のアクセス中にストールするように構成される、非一時的コンピュータ可読媒体。
A non-temporary computer-readable medium containing program instructions for causing a network interface device to carry out a method, wherein the method is
The first interface includes the step of receiving multiple data packets,
The steps include configuring the configurable hardware module of the network interface device such that, upon receiving an instruction, at least some of the processing units of the configurable hardware module interconnect to provide a first data processing pipeline for processing one or more of the multiple data packets and performing a first function on one or more of the multiple data packets,
Each processing unit is associated with a predetermined type of operation that can be performed in a single step.
At least some of the plurality of processing units are associated with different predetermined types of operations,
With respect to the first data packet among the one or more of the plurality of data packets, at least two or more of the plurality of processing units are configured to perform their respective predetermined types of operations in parallel with respect to the first data packet.
Multiple data packets among the aforementioned multiple data packets are processed simultaneously by different processing units in the first data processing pipeline.
During the execution of the first function, at least two of the plurality of processing units are configured to access and modify the state associated with the first data packet in the shared memory of the network interface device, and the shared memory is accessible to at least two of the plurality of processing units in the first data processing pipeline.
During the execution of the first function, a non-transient computer-readable medium is configured such that, among at least some of the plurality of processing units, two or more of the first processing units are configured to stall during access by a second processing unit among at least some of the plurality of processing units in the first data processing pipeline to the state value associated with the first data packet.
JP2021523691A 2018-11-05 2019-11-05 Network Interface Device Active JP7849969B2 (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2024083450A JP2024116163A (en) 2018-11-05 2024-05-22 Network Interface Devices

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US16/180,883 US11012411B2 (en) 2018-11-05 2018-11-05 Network interface device
US16/180,883 2018-11-05
US16/395,027 2019-04-25
US16/395,027 US11082364B2 (en) 2019-04-25 2019-04-25 Network interface device
PCT/EP2019/080281 WO2020094664A1 (en) 2018-11-05 2019-11-05 Network interface device

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2024083450A Division JP2024116163A (en) 2018-11-05 2024-05-22 Network Interface Devices

Publications (2)

Publication Number Publication Date
JP2022512879A JP2022512879A (en) 2022-02-07
JP7849969B2 true JP7849969B2 (en) 2026-04-22

Family

ID=68470520

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2021523691A Active JP7849969B2 (en) 2018-11-05 2019-11-05 Network Interface Device
JP2024083450A Withdrawn JP2024116163A (en) 2018-11-05 2024-05-22 Network Interface Devices

Family Applications After (1)

Application Number Title Priority Date Filing Date
JP2024083450A Withdrawn JP2024116163A (en) 2018-11-05 2024-05-22 Network Interface Devices

Country Status (5)

Country Link
EP (1) EP3877851A1 (en)
JP (2) JP7849969B2 (en)
KR (1) KR102880085B1 (en)
CN (1) CN113272793B (en)
WO (1) WO2020094664A1 (en)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11677650B2 (en) * 2021-09-28 2023-06-13 Cisco Technology, Inc. Network flow attribution in service mesh environments
CN115309406B (en) * 2022-09-30 2022-12-20 北京大禹智芯科技有限公司 Performance optimization method and device of P4 control branch statement

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7861067B1 (en) 2004-10-28 2010-12-28 Nvidia Corporation Adjustable cycle pipeline system and method
US9940284B1 (en) 2015-03-30 2018-04-10 Amazon Technologies, Inc. Streaming interconnect architecture

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6798239B2 (en) * 2001-09-28 2004-09-28 Xilinx, Inc. Programmable gate array having interconnecting logic to support embedded fixed logic circuitry
US7200114B1 (en) * 2002-11-18 2007-04-03 At&T Corp. Method for reconfiguring a router
JP2005130165A (en) * 2003-10-23 2005-05-19 Nippon Telegr & Teleph Corp <Ntt> Packet processing device using reconfigurable device
JP4456552B2 (en) * 2005-03-31 2010-04-28 富士通株式会社 LOGIC INTEGRATED CIRCUIT HAVING DYNAMIC SUBSTITUTION FUNCTION, INFORMATION PROCESSING DEVICE USING SAME, AND DYNAMIC SUBSTITUTION METHOD FOR LOGIC INTEGRATED CIRCUIT
JP2007241918A (en) * 2006-03-13 2007-09-20 Fujitsu Ltd Processor device
JP4740828B2 (en) * 2006-11-24 2011-08-03 株式会社日立製作所 Information processing apparatus and information processing system
DE102007022970A1 (en) * 2007-05-16 2008-11-20 Rohde & Schwarz Gmbh & Co. Kg Method and device for the dynamic reconfiguration of a radio communication system
US8059650B2 (en) * 2007-10-31 2011-11-15 Aruba Networks, Inc. Hardware based parallel processing cores with multiple threads and multiple pipeline stages
US20090213946A1 (en) * 2008-02-25 2009-08-27 Xilinx, Inc. Partial reconfiguration for a mimo-ofdm communication system
US7835357B2 (en) * 2008-09-30 2010-11-16 Juniper Networks, Inc. Methods and apparatus for packet classification based on policy vectors
JP5110594B2 (en) * 2008-10-01 2012-12-26 シャープ株式会社 Information processing apparatus, information processing method, and information processing program
US8743877B2 (en) * 2009-12-21 2014-06-03 Steven L. Pope Header processing engine
US8667192B2 (en) * 2011-02-28 2014-03-04 Xilinx, Inc. Integrated circuit with programmable circuitry and an embedded processor system
WO2013030630A1 (en) * 2011-09-02 2013-03-07 Freescale Semiconductor, Inc. Data processing system and method for task scheduling in a data processing system
US8874837B2 (en) * 2011-11-08 2014-10-28 Xilinx, Inc. Embedded memory and dedicated processor structure within an integrated circuit
US8842675B2 (en) * 2012-08-23 2014-09-23 L-3 Communications Corporation Systems and methods for multicore processing of data with in-sequence delivery
EP2722767B1 (en) * 2012-10-16 2018-03-21 Solarflare Communications Inc Encapsulated accelerator
US9450881B2 (en) * 2013-07-09 2016-09-20 Intel Corporation Method and system for traffic metering to limit a received packet rate
EP2874362B1 (en) * 2013-11-13 2019-10-02 Napatech A/S A system and a method of analysing a plurality of data packets
US9130559B1 (en) * 2014-09-24 2015-09-08 Xilinx, Inc. Programmable IC with safety sub-system
CN108307434B (en) * 2017-01-12 2023-04-07 马维尔以色列(M.I.S.L.)有限公司 Method and apparatus for flow control

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7861067B1 (en) 2004-10-28 2010-12-28 Nvidia Corporation Adjustable cycle pipeline system and method
US9940284B1 (en) 2015-03-30 2018-04-10 Amazon Technologies, Inc. Streaming interconnect architecture

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
知識工学講座7 コンピュータアーキテクチャ

Also Published As

Publication number Publication date
JP2022512879A (en) 2022-02-07
EP3877851A1 (en) 2021-09-15
WO2020094664A1 (en) 2020-05-14
JP2024116163A (en) 2024-08-27
CN113272793A (en) 2021-08-17
KR102880085B1 (en) 2025-10-31
KR20210088652A (en) 2021-07-14
CN113272793B (en) 2025-08-19

Similar Documents

Publication Publication Date Title
US11824830B2 (en) Network interface device
US11082364B2 (en) Network interface device
US11709664B2 (en) Anti-congestion flow control for reconfigurable processors
US11687327B2 (en) Control and reconfiguration of data flow graphs on heterogeneous computing platform
US11204745B2 (en) Dataflow graph programming environment for a heterogenous processing system
US20210081258A1 (en) Synthesis Path For Transforming Concurrent Programs Into Hardware Deployable on FPGA-Based Cloud Infrastructures
Li et al. Clicknp: Highly flexible and high performance network processing with reconfigurable hardware
US9912610B2 (en) Data-plane stateful processing units in packet processing pipelines
US10523764B2 (en) Data-plane stateful processing units in packet processing pipelines
US11113030B1 (en) Constraints for applications in a heterogeneous programming environment
Sivaraman et al. Packet transactions: A programming model for data-plane algorithms at hardware speed
JP2024116163A (en) Network Interface Devices
Elakhras et al. Straight to the queue: Fast load-store queue allocation in dataflow circuits
Contini et al. Enabling reconfigurable HPC through MPI-based inter-FPGA communication
US20240184552A1 (en) Compilers and compiling methods field
CN114281339A (en) Program compiling method, compiler, device, and storage medium
KR102698264B1 (en) Hardware description language supporting bidirectional interface combinator
Sanaullah Towards Hardware as a Reconfigurable, Elastic, and Specialized Service
Ebcioglu et al. Highly Parallel Multi-FPGA System Compilation from Sequential C/C++ Code in the AWS Cloud
Keller Programming Model for Network Processing on an FPGA

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20220913

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20230614

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20230801

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20231025

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20240123

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20240522

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20240627

A912 Re-examination (zenchi) completed and case transferred to appeal board

Free format text: JAPANESE INTERMEDIATE CODE: A912

Effective date: 20240830

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20250624

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20251016

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20251212

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20260410

R150 Certificate of patent or registration of utility model

Ref document number: 7849969

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150