Network Interface Devices
The network interface device enhances data processing and transmission capabilities by incorporating advanced circuits and pipelines, enabling high data rates and customizable functionalities for diverse applications.
Patent Information
- Application Number
- JP2024540788
- Authority / Receiving Office
- JP · JP
- Patent Type
- Applications
- Current Assignee / Owner
- Priority Date
- 2022-01-07
- Filing Date
- 2022-08-11
- Publication Date
- 2025-01-24
AI Technical Summary
Existing network interface devices face challenges in supporting high data rates and specific applications, requiring enhanced design and data processing capabilities.
A network interface device equipped with a data route circuit, command scheduling circuit, and programmable logic circuits to manage data processing operations, including command channels, event channels, and data channels, along with a direct memory access adapter and data processing off-road pipelines, to optimize data movement and processing.
The solution enables efficient data processing and transmission at high data rates, supporting terabit class endpoint devices and customizable functionalities for various applications.
Smart Images

Figure 2025502043000001_ABST
Abstract
Description
[Technical field]
[0001] The present application relates to network interface devices. [Background technology]
[0002] Network interface devices (e.g., network interface cards / controllers (NICs) or SmartNICs) are known and are typically used to provide an interface connection between a computing device and a network. Some network interface devices can be configured to process data received from a network and / or process data placed on a network.
[0003] For some network interface devices, there may be a drive to provide increased specialization of designs toward specific applications and / or support of increasing data rates. Summary of the Invention
[0004] According to one embodiment, a network interface device is provided comprising: a network interface configured to interface with a network, the network interface configured to receive data from the network and place data on the network; a host interface configured to interface with a host device, the host interface configured to receive data from the host device and provide data to the host device; and a data path circuit configured to move data to and from the network interface device, the data path circuit comprising a first circuit for providing one or more data processing operations and an interface circuit supporting channels, the channels comprising: a command channel that receives command information from a plurality of data path circuit user instances, the command information indicating a path for associated data through the data path circuit and one or more arguments for the one or more data processing operations provided by the first circuit; an event channel that provides respective command completion information to the plurality of data path user instances; and a data channel that provides the associated data.
[0005] A data channel may provide associated data to and from multiple datapath user instances.
[0006] The multiple data path user instances may be provided by one or more of a central processing unit on the network interface device, a central processing unit in the host device, and a programmable logic circuit of the network interface device.
[0007] The data path circuitry may include a command scheduling circuit configured to schedule a command for execution, the command being associated with command information, and the command scheduling circuit schedules the command when at least a portion of the associated data is available and the data destination is reserved.
[0008] The command scheduling circuitry may be configured to schedule a command when buffer resources of the network interface device required for that command are reserved as a data destination.
[0009] Command information may include one or more commands, programs that, when invoked, execute the one or more commands, and references to programs that, when invoked, execute the one or more commands.
[0010] When a command is completed, the command scheduling circuitry may be configured to cause a command completion event to be provided to one of the event channels.
[0011] A program may be configured, upon startup, to cause the execution of two or more commands, each of the commands being associated with a respective command completion event.
[0012] A program may be configured, upon startup, to cause the execution of two or more commands, the execution of one of the commands being dependent on the result of the execution of another of the commands.
[0013] The program may be configured, upon startup, to support a loop that is repeated until one or more conditions are met.
[0014] A program may be configured, upon startup, to invoke a function to cause one or more actions associated with the function to be performed.
[0015] A barrier command may be provided between the first command and the second command to cause the first command to be executed before the second command.
[0016] The network interface device may include a memory configured to store a program that causes one or more commands to be executed upon startup, and the command channel is configured to receive a reference to the program to launch the program.
[0017] The data path circuitry includes a data classifier configured to classify data received by the network interface and, depending on the classification of the data, provide a reference to a program that, upon activation, causes one or more commands to be performed, the reference to the program being command information for the data received by the network interface.
[0018] The circuitry for providing one or more data processing operations may comprise one or more data processing offload pipelines, the data processing pipelines comprising a series of one or more offload engines, each offload engine configured to perform a function on data as the data is passed through the offload pipeline.
[0019] The network interface device may include one or more direct memory access adapters that provide an input / output subsystem for the data path circuitry, the one or more direct memory access adapters that interface with one or more of the data processing pipelines to receive data from and / or deliver data to one or more of the data processing offload pipelines.
[0020] One or more of the data processing offload pipelines may include multiple offload engines, and a packet bus connects the offload engines of the data processing pipelines, the packet bus being configured to carry data to and from the offload engines.
[0021] An argument bus may be provided, the argument bus configured to provide each argument from a command associated with data to be processed by the data processing pipeline to an offload engine of the data processing pipeline.
[0022] The offload pipe register bus may be configured to provide metadata from one offload engine of the data processing pipeline to another offload engine of the data processing pipeline.
[0023] One or more of the offload engines of the data processing pipeline may be configured to receive data, process the data, and overwrite the received data onto the packet bus.
[0024] One or more of the offload engines may be configured to receive data, process the data, and write the processed data onto the packet bus at a different offset compared to the received data.
[0025] The one or more offload engines may be configured to provide incremental processing, where received data is processed and data associated with the processed received data is stored in a context store for use when processing subsequent received data.
[0026] The data path circuitry may have a first communication path with the programmable logic circuitry and a second communication path with a central processing unit in the host device, the second communication path bypassing the programmable logic circuitry.
[0027] Different datapath user instances may be configured to issue commands to the same one of the command channels when in use.
[0028] One of the datapath instances may be configured to take over providing multiple commands over the same command channel from another of the datapath instances.
[0029] The first circuit includes a first host data processing unit; and a second network data processing unit.
[0030] The network interface device may include a data path between the first host data processing unit and the second network data processing unit, the data path configured to transfer data from one of the first host data processing unit and the second network data processing unit to the other of the first host data processing unit and the second network data processing unit.
[0031] The first host data processing unit may include a first set of buffers and the second network data processing unit may include a second set of buffers, a data path being provided between the first set of buffers and the second set of buffers.
[0032] The network interface device may comprise a network-on-chip, where the data path is provided by the network-on-chip.
[0033] According to another aspect, a method is provided in a network interface device including receiving command information at an interface circuit of a data path circuit, the command information being received via a command channel supported by the interface, the command information being received from a plurality of data path circuit user instances, the command information indicating a path for associated data through the data path circuit and one or more parameters for one or more data processing operations provided by a first circuit of the data path circuit, the data path circuit being configured to move data to and from the network interface device; providing the associated data via a data channel supported by the interface circuit; and providing respective command completion information to the plurality of data path user instances via one or more event channels, the one or more event channels being supported by the interface circuit.
[0034] This summary section is provided merely to introduce certain concepts, and is not intended to identify any key or essential features of the claimed subject matter. Other features of the inventive subject matter will be apparent from the accompanying drawings and the detailed description that follows. [Brief description of the drawings]
[0035] Some embodiments are illustrated by way of example only in the accompanying drawings. However, the drawings should not be construed as limiting the arrangement to only the particular implementations shown. Various aspects and advantages will become apparent upon consideration of the following detailed description and upon reference to the drawings. [Figure 1] 1 illustrates a schematic diagram of a data processing system in which a host computing device is coupled to a network via a network interface device. [Diagram 2] 1 illustrates a network interface device of some embodiments. [Diagram 3]1 illustrates a schematic of subsystems of a network interface device of some embodiments. [Figure 4] 1 illustrates a schematic diagram of a host computing device and a network interface device of some embodiments. [Diagram 5] 1 illustrates a schematic diagram of a capsule for use in some embodiments. [Figure 6] 1 illustrates a schematic of a configurable direct memory access architecture of some embodiments. [Figure 7a] 1 illustrates a schematic of a composable scalable interconnect (cSI) interface of some embodiments. [Figure 7b] 1 illustrates in more detail the configurable and scalable interconnect (cSI) of some embodiments. [Figure 7c] 1 illustrates an example virtual channel of a configurable and scalable interconnect (cSI) of some embodiments. [Figure 8] 7B illustrates an embodiment of a write pipe for the cSI of FIG. [Figure 9] 7B illustrates an embodiment of a read request pipe for the cSI of FIG. 7b. [Figure 10] 7b illustrates an embodiment of a read response pipe for the cSI of FIG. [Figure 11] 1 illustrates in more detail an example of a configurable data mover cDM of some embodiments. [Figure 12] 1 illustrates an overview of a host data path unit (DPU.Host) of some embodiments. [Figure 13] 1 illustrates an overview of a network data path unit (DPU.Net) of some embodiments. [Figure 14] 13 illustrates a schematic diagram of the logic flow from DPU.Host to destination of some embodiments for a write operation. [Figure 15]13 shows a schematic diagram of the logic flow from source to DPU.Host of some embodiments for a read operation. [Figure 16] 1 illustrates a schematic diagram of the logic flow from DPU.Net to the network of some embodiments. [Figure 17] 1 illustrates a schematic diagram of the logic flow from the network to DPU.Net of some embodiments. [Figure 18] 1 illustrates a schematic diagram of an offloading pipeline of some embodiments. [Figure 19] 1 illustrates a schematic diagram of an example DPU.Host offload engine pipeline of some embodiments. [Figure 20] 1 illustrates a schematic diagram of an example receive offload engine pipeline with an accelerator of some embodiments. [Figure 21] 1 illustrates a schematic diagram of an example of another receive offload engine pipeline of some embodiments. [Figure 22] 1 illustrates a schematic diagram of an example transmit offload engine pipeline with an accelerator of some embodiments. [Diagram 23] 1 illustrates a schematic diagram of an example of another transmit offload engine pipeline of some embodiments. [Figure 24] 2 illustrates generally the bulk data encryption / decryption and authentication operations on a payload. [Diagram 25] 1 illustrates a schematic diagram of DPU.Host DMA (Direct Memory Access) scheduling of some embodiments. [Figure 26] 13 illustrates a schematic diagram of the data path for the DPU.Host of some embodiments. [Figure 27] 1 illustrates a schematic diagram of a data path for DPU.Net of some embodiments. [Figure 28] 13A-13C are schematic diagrams illustrating some of the buffers used in DPU.Net or DPU.Host in some embodiments. [Figure 29] Some embodiments illustrate generally DMA bandwidth sharing between command channels. [Diagram 30] 1 illustrates a schematic of the command / event processing blocks provided in DPU.Host and DPU.Net in some embodiments. [Diagram 31] 1 illustrates a schematic diagram of a network interface device in which a CPU of the network interface device issues DPU commands of some embodiments. [Diagram 32] 1 illustrates a schematic diagram of a network interface device in which a CPU external to the network interface device issues DPU commands according to some embodiments. [Diagram 33] 13 illustrates a schematic diagram of another example of a DPU.Host of some embodiments. [Diagram 34] 1 illustrates a schematic diagram of another example of DPU.Net of some embodiments. [Diagram 35] 1 illustrates an example in which a network interface device of some embodiments may be deployed. [Diagram 36] 1 illustrates a method of some embodiments. DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENTS
[0036] The present disclosure concludes with claims defining novel features, but it is believed that the various features described within the present disclosure will be better understood from a consideration of the description in conjunction with the drawings. The processes, machines, manufactures, and any variations thereof described herein are provided for illustrative purposes. The specific structural and functional details described within the present disclosure should not be construed as limiting, but merely as a representative basis for teaching those skilled in the art to employ the described features in various ways in virtually any appropriately detailed structure. Moreover, the terms and phrases used within the present disclosure are not intended to be limiting, but rather to provide an understandable description of the described features.
[0037] When data is transferred between two data processing systems via a data channel, each of the data processing systems has a suitable network interface that allows them to communicate across the channel. The data channel may be provided by a network. For example, the network may be based on Ethernet technology or any other suitable technology. The data processing systems may be provided with a network interface that is capable of supporting the physical and logical requirements of the network protocol. The physical hardware components of the network interface are referred to as network interface devices or network interface cards / controllers (network interface cards, NICs). In this specification, the network interface devices are referred to as NICs. It should be understood that the NICs may be provided in any suitable hardware form, such as an integrated circuit or a hardware module. The NICs are not necessarily implemented in the form of a card.
[0038] A computer system may have an operating system (OS) through which user-level applications communicate with a network. A portion of the operating system known as the kernel may include protocol stacks for translating commands and data between applications and device drivers specific to network interface devices, and device drivers for directly controlling the network interface devices. By providing these functions within the operating system kernel, the complexity of and differences between network interface devices may be hidden from user-level applications. In addition, network hardware and other system resources (such as memory) may be safely shared among many applications, and the system may be protected from faulty or malicious applications.
[0039] An exemplary data processing system 100 for performing transmissions across a network is shown in Figure 1. The data processing system 100 includes a host computing device 101 coupled to a NIC 109 (one example of a network interface device) arranged to interface the host computing device 101 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). The network protocol stack may be a Transmission Control Protocol (TCP) stack or any other suitable protocol stack. The protocol stack may be a transport protocol stack.
[0040] Applications 105 can send and receive TCP / IP (Internet Protocol) messages by opening a socket and reading and writing data to the socket, and operating system 104 causes the messages to be transmitted across the network.
[0041] Some systems may at least partially offload the protocol stack to the NIC 109. For example, if the stack is a TCP stack, the NIC 109 may include a TCP Offload Engine (TOE) for performing TCP protocol processing. By performing the protocol processing at least partially in the NIC 109 rather than in the host computing device 101, the demands on the processor of the host computing device 101 may be reduced. Data sent over the network may be sent by the application 105 through a TOE-enabled virtual interface driver, bypassing the kernel TCP / IP stack entirely. Thus, data sent along this high-speed path only needs to be formatted to meet the requirements of the TOE driver.
[0042] The host computing device 101 may include one or more processors and one or more memories. In some embodiments, the host computing device 101 and the NIC 109 may communicate via a bus, such as a peripheral component interconnect express (PCIe bus) or any other suitable bus.
[0043] During operation of the data processing system, data to be transmitted over the network may be transferred from the host computing device 101 to the NIC 109 for transmission. In one embodiment, data packets may be transferred directly from the host to the network interface device by the host processor. The host computing device may provide data to one or more buffers 106 located on the NIC 109. The NIC 109 may then prepare the data packets and transmit them over the network 103.
[0044] Alternatively, the data may be written to a buffer 107 within the host computing device 101. The data may then be retrieved from the buffer 107 by a network interface device and transmitted over the network 103. Some systems may support both of these data transfer mechanisms.
[0045] In both of these cases, the data may be temporarily stored in one or more buffers before being transmitted over the network.
[0046] The data processing system may also receive data from a network via NIC 109 .
[0047] The data processing system may be any type of computing device, such as a server, a personal computer, or a handheld device. Some embodiments may be suitable for use in a network running TCP / IP over Ethernet. In other embodiments, one or more different protocols may be used. The embodiments may be used with any suitable network, wired or wireless.
[0048] See FIG. 2, which illustrates a NIC 109 of some embodiments. The network interface device may be provided at least in part by one or more integrated circuits. Alternatively, the network interface device may be part of a larger integrated circuit. The NIC 109 may be provided by a single hardware module, or by two or more hardware modules. The network interface device may provide a network-attached central processing unit (CPU) in front of a main CPU. The network interface device sits on the data path between a host CPU (on a host computing device) and a network.
[0049] The NIC may be configurable to provide application-specific pipelines to optimize data movement and processing. The NIC may integrate high-level programming abstractions for network and compute acceleration.
[0050] The NIC of some embodiments may support terabit class endpoint devices. Some embodiments may be capable of supporting terabit data rate processing. For example, the NIC may receive data from a network at terabit data rates and / or put data onto a network at terabit data rates. However, it should be understood that other embodiments may operate and / or support higher or lower data rates.
[0051] The configuration of FIG. 2 may be considered to provide a System-on-Chip (SoC). The SoC shown in FIG. 2 is an example of a programmable integrated circuit IC and an integrated programmable device platform. In the example of FIG. 2, various different subsystems or regions of the NIC 109 may be implemented on a single die provided within a single integrated package. In other examples, different subsystems may be implemented on multiple interconnect dies provided as a single integrated package. In some embodiments, the NIC 109 of FIG. 2 may be provided by two or more packages, one or more integrated circuits, or one or more chiplets.
[0052] In the embodiment of FIG. 2, the NIC 109 includes multiple regions with circuitry having different functionality. In the embodiment of FIG. 2, the NIC 109 has a processing system provided by one or more application processors 111 (e.g., CPUs). The NIC 109 has one or more first transceivers 116 for receiving data from a network and / or placing data on a network. The NIC 109 has one or more virtual switches (vSwitches) 102 or protocol engines. The protocol engines may be transport protocol engines. This functionality is referred to below as the virtual switch functionality. The NIC 109 has one or more medium access control (MAC) layer functions 114. The NIC 109 has one or more second transceivers 110 for receiving data from a host and / or providing data to a host.
[0053] The NIC 109 has a composable direct memory access architecture (cDMA) 850. In one embodiment, various elements in the cDMA 850 are formed from hardware in the NIC 109 and are therefore circuitry. The cDMA 850 is described in more detail below and may include a peripheral component interconnect express (PCIe) interface and one or more direct memory access (DMA) adapters. The one or more DMA adapters provide a bridge between the memory domain and the packet streaming domain. This may support memory-to-memory transfers. The cDMA 850 has a host data path unit DPU.Host 502, described in more detail below. The NIC also includes a network DPU, DPU.Net 504, described in more detail below. The DPU.Net 504 may be provided on the network side of the NIC in some embodiments. The DPU.Host and DPU.Net may provide the data path circuitry. The DPU.Host and DPU.Net may move data to and from the NIC.
[0054] An advanced encryption standard-XEX (Xor-encrypt-xor)-based tweaked-codebook mode with ciphertext stealing) encryption function 523a may be provided on the host side of the NIC, and an AES-Galois / Counter mode (AES-GCM) encryption function 523b may be provided on the network side of the NIC. The encryption functions are by way of example, and different embodiments may use one or more different encryption functions.
[0055] The NIC 109 may include or have access to one or more processors 108 (or processing cores). By way of example only, the cores may be ARM processing cores and / or any other suitable processing cores. The application processor 111 and the one or more processors 108 may be provided by a common processor or by different processors.
[0056] NIC 109 includes network on chip (NoC) 115, which is shaded in FIG. 2, which may provide communication paths between different portions of NIC 109. It should be understood that two or more of the components on NIC 109 may alternatively or additionally communicate via direct connection paths and / or dedicated enhanced bus interfaces.
[0057] The area between the NoCs may include one or more components. For example, the area may contain one or more programmable logic blocks 113 or programmable circuits. This area may also be referred to as fabric. By way of example only, the programmable logic blocks may be provided at least in part by one or more field programmable gate arrays (FPGAs). The area may contain one or more look-up tables LUTs. One or more functions may be provided by the programmable logic blocks. The ability to accommodate different functions in this area may allow the same NIC to be used to meet a variety of different end-user requirements.
[0058] It should be understood that in other embodiments, any other suitable communication device may be used on the NIC instead of or in addition to the NoC, for example, some communications may be at least partially over the fabric.
[0059] The NIC provides an interface between a host computing device and a network. The NIC allows data to be received from the network. That data may be provided to the hosted computing device. In some embodiments, the NIC may process the data before it is provided to the host computing device. In some embodiments, the NIC allows data to be transmitted over the network. That data may be provided from the host computing device and / or from the NIC. In some embodiments, the NIC may process the data before it is transmitted over the network.
[0060] The virtual switch 102 may be at least partially part of a hardened device or NIC. A single virtual switch or two or more separate virtual switches may be provided. The virtual switch 102 may communicate with other blocks on the chip using the NoC and / or via direct connect paths and / or dedicated hardened bus interfaces. In some embodiments, this may depend on the capacity of the NoC for the amount of data being transmitted. The NoC may be used, for example, for memory access by the NIC 109. The NoC 115 may be used to distribute data to the application processor 111, the processor 108, the DMA adapter, and / or the PCIe block.
[0061] In some embodiments, the NoC and / or direct connect paths and / or dedicated hardened bus interfaces may be used to deliver data to one or more accelerator kernels and / or other plug-ins. In some embodiments, the routing may be via programmable logic. These kernels and / or plug-ins may be provided by programmable logic block 113 and / or any suitable programmable circuitry in some embodiments.
[0062] The virtual switch 102 may be physically located on an edge region of the NIC 109 and communicate with various other components of the NIC 109. In some embodiments, the virtual switch 102 may be located in physical proximity to the MAC layer function 114 and one or more first transceivers 116. These components may be located in physical proximity to an edge region of the NIC 109. Data from the network is received by the one or more first transceivers 116.
[0063] In other embodiments, the virtual switch 102, the MAC layer function 114, and the one or more first transceivers 116 may be located physically away from the edge region of the NIC.
[0064] Some embodiments may allow customized or programmable NIC functionality to be provided. This may be useful when specific NIC functionality is required. This may be for a particular application or applications, or for a particular use of the NIC. This may be useful when the amount of devices required to support that NIC functionality is relatively small. Alternatively or additionally, this may be useful when customization of the NIC is desired. Some embodiments may provide a flexible NIC.
[0065] Customization can be supported by providing one or more functions using the PL113 or programmable circuitry.
[0066] Some embodiments can be used to support relatively high date rates.
[0067] Please refer to Figure 3, which shows a schematic of the communication paths between the subsystems of the NIC of Figure 2. The host PCIe interface 112 of the cDMA block and also the DMA controller 117 of the cDMA block communicate via the memory bus. The DMA controller 117 communicates via the memory fabric 140 using the memory bus. The management controller MC 130 provides control plane messages via the memory fabric 140 using the control bus. The application processor 111 communicates via the memory fabric 140 using the memory bus. Data is received at the double data rate memory (DDR) 142 via the memory fabric 140 using the memory bus.
[0068] The DMA controller 117 communicates with one or more virtual switches 102 via a packet bus. The one or more virtual switches may provide packet processing. The one or more virtual switches may perform offload processing and virtual switching. The processing provided by the one or more virtual switches may be modified using one or more plug-ins 144 or kernels. The plug-ins or kernels may communicate with the memory fabric via a memory bus and with one or more virtual switches via a packet bus. The one or more virtual switches may communicate with the MAC 114 via a packet bus.
[0069] In some embodiments, data encapsulation may be used to transmit data within the NIC, as will be described in more detail below.
[0070] Please refer to Fig. 4 which shows a schematic diagram of the functional blocks supported by the host computing device 101 and the NIC 109. The NIC 109 includes a virtual switch 102. This virtual switch 102 may be extensible by one or more plug-ins or kernels. The virtual switch 102 with the plug-ins or kernels may support custom protocols and switch actions.
[0071] The host computing device 101 comprises a number of virtual machines VM122.
[0072] Several PCIe PFs (physical functions) and / or VFs (virtual functions) may be supported. PCIe function 118 may have multiple virtual NICs (vNICs). Each vNIC 126 may connect to a separate port on virtual switch 102. In FIG. 4, one PCIe function and one vNIC of PCIe function 118 are shown for clarity.
[0073] Each vNIC 126 may have one or more VIs (Virtual Interfaces) 127. Each VI may provide a channel for sending and receiving packets. Each VI may have a transmit queue TxQ, a receive queue RxQ, and an event queue EvQ. There may be a one-to-one relationship between a virtual machine and a virtual function. In some embodiments, there may be multiple VIs mapped to a VF (or PF).
[0074] In some embodiments, one of the VIs in a given PF or VF may support a function management interface.
[0075] The virtual switch 102 comprises a number of virtual ports. A port may be configured to receive data from a TxQ of a vNIC and to transmit data to an RxQ of a vNIC.
[0076] The virtual switch 102 is configured to interface with one or more application CPUs, such as those provided by application processor 111, a management controller 130 configured to control the virtual switch, and one or more MAC layer functions 114. In some embodiments, the virtual switch is extensible by plug-ins or kernels as discussed above. One example of a plug-in or kernel comprises a hardware accelerator 128.
[0077] In some embodiments, data capsules may be used to transmit data within a NIC. See FIG. 5, which illustrates capsules used in some embodiments. In some embodiments, a streaming subsystem of the NIC may transport the capsules. As discussed below, capsules may alternatively or additionally be used in other parts of the NIC. The capsules may be control capsules or network packet capsules. The payload may be provided by a pointer to the payload. Alternatively, the payload may be provided within the capsule.
[0078] As shown generally in Figure 5, the capsule includes metadata 702, which may be provided at the beginning of the capsule. This may be followed by the capsule payload 710. The capsule may include a data integrity check, such as an error correcting code (ECC), a cyclic redundancy check (CRC) and / or any other integrity check, to protect the metadata / header and / or payload.
[0079] The metadata may depend on whether the capsule is a control capsule or a network capsule.
[0080] The network packet capsule comprises the capsule metadata followed by, for example, an Ethernet frame in the payload.
[0081] The metadata may include a capsule header, which may be common to control capsules and network capsules. The capsule header may include information indicating whether the capsule is a control capsule or a network packet capsule. The capsule header may include route information that controls the routing of the packet. The route information may be source-based routing indicating the path the capsule will take, or may be an indirect reference to a route table or to a program state (processor) that is controlling the flow of the capsule. The capsule header may include virtual channel information indicating the virtual channel used by the capsule. The capsule header may include length information indicating the length of the capsule.
[0082] As will be described in more detail, the capsule header may contain references to programs and contexts used to control the processing of the capsule.
[0083] A network packet capsule may have a network capsule header following the capsule header as part of metadata 702, which may indicate the layout of the capsule metadata and whether the capsule payload includes an Ethernet frame check sequence (FCS).
[0084] The metadata of the control capsule may indicate the type of the control capsule.
[0085] The capsule may have metadata that indicates an offset, which may indicate the beginning of the data to process.
[0086] Some embodiments may use a segmented bus. A segmented bus is a streaming bus where the overall data path width is divided into physically distinct portions. Each segment has its own primary control signals (e.g., SOP (start of packet) and EOP (end of packet)). A segmented bus may be used to overcome the potential inefficiency of any bus of fixed width carrying capsules of arbitrary size. Without segmentation, if a capsule is (say) one byte longer than the bus width, two bus beats (clock cycles) would be required to carry the capsule, and the entire bus, except for one byte, would carry nothing on the second beat. A segmented bus allows the next capsule to start transmitting on the second bus beat in the above example, recovering much of the wasted bandwidth. As the number of segments increases, the bus bandwidth for an arbitrary capsule size tends toward 100% of its theoretical maximum. However, this must be balanced against the complexity and resources of the multiplexing and demultiplexing operations required with increased segmentation. The number of segments and the segment width can vary depending on the constraints.
[0087] In some embodiments, the bus may be divided into four segments, although this may vary depending on how tight the constraints are.
[0088] The frame size may be modified and / or the number of segments supported by the bus width may be modified.
[0089] Some embodiments may be configured to allow data to be passed across the NIC at a relatively high rate between multiple different data sources and sinks, which may use the network-on-chip NoC architecture discussed above.
[0090] Some embodiments may provide a configurable DMA (cDMA) architecture to facilitate data passing. The configurability may allow different elements of a DMA system to be added and / or the capabilities of endpoints to be changed without having to redesign the system. In other words, different DMA schemes with different requirements can be accommodated by the same configurable DMA architecture.
[0091] The architecture is scalable and / or adaptable to different requirements. The architecture is configured to support the movement of data between the host and other parts of the NIC. In some embodiments, the architecture can support relatively high data rates.
[0092] Reference is made to FIG. 6, which illustrates a schematic example of a cDMA architecture of some embodiments.
[0093] The configuration shown generally in Figure 6 allows data to be passed between different sinks (destinations) and data sources. By way of example only, the sinks and data sources may include one or more of the following:
[0094] One or more PCI-attached hosts, which are connected via the host PCIe interface 112.
[0095] One or more processor subsystems 842, which may include the application processor 111 and / or processor 108 shown in FIG. 2, and / or one or more different processors, vSwitch 102, as shown in Figure 2 DDR memory 142 (shown in FIG. 3); The data movement engine provided by the NIC may be one or more accelerators 128 (shown in FIG. 4) or custom plug-ins 144 (shown in FIG. 3), as discussed above. One or more Fabric clients, Memory, and It may be provided by any other suitable sink or data source.
[0096] The sinks and / or data sources may depend on the system in which the NIC 109 is provided and / or the functionality that needs to be provided by the NIC 109 .
[0097] The cDMA 850 may be considered a layered architecture. A base layer may connect different devices, bus widths, and protocols to the cDMA system. A configurable and scalable interconnect (cSI) 822 may allow data to move between interfaces. A composable data mover (cDM) 824 may perform bulk data movement between interfaces under the direction of one or more schedulers 836. As well as bulk data, the cDM 824 may provide a message load / store interface that allows small messages to be transferred, for example, for interrupt or descriptor management.
[0098] The DMA adapter 832 may provide an API (application programming interface) for the type of DMA required (such as interpreting descriptors and managing the state of the ring), using a data mover cDM 824 to fetch descriptors and move data around. A shared descriptor cache system cDC 834 may allow adapters to share temporary storage for in-flight descriptors. The host access handler HAH 828 may manage PCIe target transactions, bar / device / function mapping, and doorbell management. For example, the HAH may manage doorbell coalescing, sampling, and transfers.
[0099] One or more relatively high bandwidth memory interfaces may be supported. The one or more memory interfaces may provide an interface to one or more DDRs.
[0100] One or more of the accelerators may desire access to the host and / or high bandwidth memory.
[0101] A host may desire to access high bandwidth memory.
[0102] Bridges may be used to interconnect the cDMA architecture to other parts of the NIC. In general, bridges act as protocol converters and do not generally originate or terminate traffic. Bridges may provide protocol conversion to other bus types. For example, the NoC may have a dedicated master / slave interface or the processor subsystem may support an internal AXI interconnect. Bridges may also act as bus width converters. Examples of bridges are the cSI-NoC bridge 826, the processor bridge 830, and the cSI-PCIe bridge 820, as well as the cSI-AXI bridge (discussed later).
[0103] A cSI-NoC bridge 826 may be provided to extend the cSI 822 over the NoC in streaming mode.
[0104] In some embodiments, a bridge to the bus may be provided: in some embodiments, an AXI bus (or other suitable bus) may be used and a cSI-AXI bridge (discussed below) may be provided.
[0105] Processor bridge 830 may provide an interconnection of the NIC to one or more CPUs, such as processing subsystem 843. The processor bridge may include a cSI-AXI bridge and / or other bus bridges and / or other components. The processor bridge may be provided between HAH 828 and cSI 822.
[0106] The cSI-PCIe bridge 820 connects the host PCIe interface 112 to the cSI 822. The cSI-PCIe bridge acts as a cSI target (a cSI target) and forwards requests from a cSI initiator (an initiator of requests to the cSI) to the PCIe controller requester interface. The bridge also acts as a cSI initiator and forwards requests from the PCIe controller completer interface to the cSI target (a cSI target).
[0107] In the example shown in Figure 6, there are four PCIe controllers. This is by way of example only and a different number of PCIe controllers may be provided. A cSI-PCIe bridge instance may be associated with each one of the four PCIe controllers. In other embodiments, more or less than four PCIe controllers may be provided.
[0108] The fabric multiplexer 840 groups together the cDMA components and components that require fabric and NoC access to be shared. The DMA adapter 832, the cDM 824, the HAH 828, and / or any other suitable components may be provided with paths to / from the fabric. The fabric multiplexer 840 may be configured to have two or more paths active at the same time. This may depend on the number of input / output pins of the fabric.
[0109] A host data path unit (DPU.Host) 502 is provided as part of the cDMA, which is described in more detail below. A multiplexer 508 multiplexes between the NoC on the one hand and the DPU.Host 502 and one or more DMA adapters 832 on the other hand.
[0110] In an alternative embodiment, the processor subsystem may be memory mapped onto the DMA adapter via cSI without using multiplexer 508. For example, in this alternative embodiment, there may be no cSI-NoC bridge (in which case the bridge referenced at 826 may be omitted). In this example, the DMA adapter may issue cSI transactions to the processor subsystem via memory mapping.
[0111] The interface to the cDC may be multiplexed to two or more DMA adapters and the PL via a cDC-MDML (multiplexer / demultiplexer logic) 844. A scheduler 836 is provided, which is described in more detail below.
[0112] cDMA uses capsules as described above. A capsule is a data element that flows through the streaming fabric. A capsule contains metadata and data. The data portion may be a PCIe TLP (transport layer protocol). The metadata contains auxiliary routing information (e.g., derived from the TLP itself and / or other context) and / or other fields used to control the flow of the capsule in the cSI system. The capsule header may contain PCIe TLP header data and / or one or more of additional routing and flag information.
[0113] Please refer to Figures 7a and 7b, which show a schematic of the cSI 822 introduced in Figure 6. The cSI 822 considers clients as capsule sources and sinks, where sources send capsules to the cSI 822 and sinks receive capsules from the cSI 822. At the system level, clients of the cSI (cSI clients) are initiators and / or targets. Both initiator and target clients may implement respective interfaces to the cSI.
[0114] As shown in FIG. 7a, cSI 822 is an N×M streaming fabric that connects N capsule sources to M capsule sinks. N and M can be the same or different numbers. cSI 822 provides connectivity between initiators and targets by transmitting memory read requests, memory write requests, completions, and / or other types of transactions. cSI 822 may provide PCIe-like connectivity in some embodiments. cSI 822 may be considered to provide a transport medium. cSI 822 may be viewed as a source-routed switch matrix that allows traffic from multiple sources to be routed to multiple sinks. Sources and sinks do not necessarily have the same bus width or data rate.
[0115] As shown in FIG. 7a, the cSI 822 has an interface 823 to the cDM 824, a PCIe interface 112 (through a PCIe bridge), a processor subsystem 842 (through a bridge 830), and user ports for the cSI that may be provided in the fabric (these may bypass the cDM). The interfaces may be sink interfaces, source interfaces, or both sink and source interfaces. The interfaces shown in FIG. 7a are merely examples, and different embodiments may include different interfaces. Note that in FIG. 7a, the notation x1, x2, x4, and x8 generally represent the number of bus segments that each interface supports.
[0116] The interface to the cDM824 may support 8 bus segments, the interface to the processor subsystem may support 4 segments, and the interface to the user port for cSI may support 2x2 segments.
[0117] Capsules passing from a particular source to a particular sink are separated into non-blocking flows from one another based on capsule type and virtual channel allocation: capsules in the same flow are delivered in order and are not blocked by capsules belonging to another flow.
[0118] Capsules may be passed to and from the interconnect via a segmented streaming bus. The segment size may be any suitable size, for example, 20B. In other embodiments, the segments may be larger or smaller than this exemplary size.
[0119] The cSI capsule header size is 28B in some embodiments, so two segments are required for small capsules such as read requests and writes or completions with small payloads. The cSI capsule header size can be larger or smaller than 28B. In some embodiments, the cSI capsule header size can be accommodated in one or more segments.
[0120] The number of segments used by each bus depends on the performance requirements of the interface. A bus carrying only NPR (non-posted request) flows may be one segment wide. This may be the case if the NPR capsules are small and therefore do not require as much bandwidth as PR (posted request, which includes writes) and CMPT (completion, which includes read data) flows.
[0121] A Virtual Channel (VC), when provisioned, exists between one source and one sink. Having more than one VC provisioned between a source and sink for a given capsule type allows multiple non-blocking flows (one per VC) to exist for that capsule type between the source and sink. In this regard, see Figure 7c, which shows three virtual channels VC0, VC1, and VC2.
[0122] In some embodiments, a segmented bus as discussed above may be used.
[0123] The cSI capsule flow has two stages:
[0124] From the source client to the cSI buffer (sink memory buffer). A source client can write to one or more, or many different buffers.
[0125] From the cSI buffer (sink memory buffer) to the destination client. In some embodiments, the buffer can be read by one sink client.
[0126] In the embodiment shown in FIG. 7c, a first client of a cSI, Client A, 730a, interfaces with an interface 732a of a cSI 822. The cSI interface 732a has a source 731a and a sink 733a. A second client of a cSI, Client B, 730b, interfaces with an interface 732b of a cSI 822. The cSI interface 730b has a source 731b and a sink 733b. The sinks 733a and 733b have several sink buffers 735. A VC supports independent flows of requests and has separate buffering, flow control, ordering domains, and quality of service. A VC may include PR and NPR flows from initiator to target, and CMPT flows from target to initiator. The configuration of FIG. 7c has two VCs, VC0 and VC1, from the first cSI client 730a to the second cSI client 730b. The configuration of Figure 7c has one VC, VC2, from the second cSI client 730b to the first cSI client 730a. The sink 733a of the first interface 732a has a CMPT buffer for VC0 and a CMPT buffer for VC1, as well as PR and NPT buffers for VC2. The sink 733b of the second interface 732b has a CMPT buffer for VC2, as well as PR and NPT buffers for each of VC0 and VC1.
[0127] The cSI 822 may have one or more throughput characteristics.
[0128] A sustained throughput may be provided from any source to any accessible cSI sink buffer of the source, which may match the full bandwidth of the source.
[0129] Output can be provided from any cSI sink buffer to a corresponding sink client, which can match the full bandwidth of the sink.
[0130] Multiple sources may have throughput to the same sink.
[0131] cSI may enable bandwidth scaling.
[0132] The cDMA takes the data flows in the system and connects them as needed. Differences in peak data rates can be managed by using a collection of segmented buses with scheduled traffic flows. This can be a function of the cSI 822, which acts as a source-based router for flows in the cDMA system. The cSI can also enforce ordering rules, which can reduce bridge complexity. This can avoid possible deadlock conditions.
[0133] cSI can address issues related to scaling up to bandwidth requirements for network interfaces. Based on a modular approach, cSI allows flexible data paths to be built that incorporate multiple data source, sink, and data mover types.
[0134] The cSI interface may be exposed to the programmable logic (fabric) and / or the NoC.
[0135] Credits may be used to provide a flow control mechanism where data producers advertise a certain amount of data and consumers advertise a certain amount of space available. Credit updates are carried by credit messages from consumer to producer or from producer to consumer depending on the scenario. The exact value of credits may vary in different contexts and may be a number of bytes, segmented bus segments, response reassembly buffers, or other values established for the context. Credits and credit contexts are managed by the respective schedulers.
[0136] Refer to FIG. 7b. The cSI is provided with a number of write pipes 862 (for clarity, only one of them is shown in FIG. 7b) and a number of read request pipes 864 (for clarity, only one of them is shown in FIG. 7b). Each read request pipe 864 is associated with a sink scheduler 866 and a job information FIFO (first-in, first-out buffer) 867. The write pipes and read request pipes are described in more detail below. The write pipes output write requests to the sink memory multiplexer 860, and the read request pipes output read requests to the sink memory multiplexer 860.
[0137] The sink memory multiplexer 860 looks at all write and read requests from all write and read pipes and selects which are allowed to proceed to the sink memory buffer and which are backpressured.
[0138] Some source clients may be branched off into sub-buses using bus segmentation.
[0139] A cSI source or sink interface may be split or "branched" into multiple interfaces. In the following example, a four segment bus is used. These segments may be used alone or in combination.
[0140] Two interfaces (a source interface using two segment buses or a sink interface using two segment buses) can branch into a 2x1 interface (using one bus segment).
[0141] The four interfaces (a source interface using a four segment bus or a sink interface using a four segment bus) can be branched into a 2x2 interface or a 4x1 interface, or a 2x1 interface and a 1x2 interface.
[0142] In this embodiment of a four segment bus, the branched interface bus is statically allocated one, two, or four segments (depending on the type of branch and the width of the original interface) from the original interface. In this embodiment, the branched interface creates two, three, or four completely independent interfaces.
[0143] In some embodiments, the interface comprises: n segments, where n is an integer equal to or greater than 0. The value of n may be determined by the total number of bus segments. In embodiments where there are up to four bus segments, n may be 0, 1, or 2. In some embodiments, a total of 2 n There may be n bus segments, where n is an integer. In this embodiment, there are four bus segments in total, but it should be understood that other embodiments may have a different total number of bus segments.
[0144] In other embodiments, the interface may include three interfaces consisting of three bus segments or any other suitable number of bus segments.
[0145] In alternative embodiments, the number of bus segments allocated to an interface may not be an integer power of 2. In alternative embodiments, the total number of bus segments may not be an integer power of 2.
[0146] As shown in FIG. 6, the cSI 822 interconnects one or more of the following clients:
[0147] cSI-NoC bridge 826. For example, this could be a 512 Gb initiator / target. With bifurcation support, cSI allows this client to be two 256 Gb initiator / target clients, or four 128 Gb initiator / target clients, or one 256 Gb initiator / target client and two 128 Gb initiator / targets. It supports 1×4 interfaces or 2×2 interfaces or 4×1 interfaces or 2×1 interfaces and 1×2 interfaces. It should be understood that the value of 512 Gb is only an example and other embodiments may use different values that may change the interface size and / or the number of interfaces supported.
[0148] Processor bridge 820. For example, this may be a 512 Gb initiator / target or other value. This may be bifurcated as discussed in connection with the cSI-NoC bridge 826. It should be understood that the 512 Gb value is only one example and other embodiments may use different values that may change the size of the interface and / or the number of interfaces supported.
[0149] A PCIe bridge 820. For example, this can be a 512Gb initiator / target (or other value) with bifurcation support. The cSI allows this client to be two 256Gb initiator / target clients, or four 128Gb initiator / target clients, or one 256Gb initiator / target client and two 128Gb initiator / targets. It supports 1×4 interfaces or 2×2 interfaces or 4×1 interfaces or 2×1 interfaces and 1×2 interfaces. It should be understood that these values are only examples. Other embodiments may use different values that may change the branch size. It should be understood that 512Gb is only an example and other embodiments may use different values that may change the branch size and / or total number of segments. This may be greater or less than 512Gb if a value different from 512Gb is used.
[0150] cDM-800Gb initiator. It should be understood that 800Gb is just one example and other embodiments may use different values. This may be divergent in some embodiments. The different values may be greater or less than 800Gb in some embodiments. In some embodiments, the value may be the same as the client discussed above. However, in other embodiments, the cDM initiator may be associated with a larger Gb value than other clients.
[0151] In some embodiments, to ensure that the number of inputs / outputs after branching remains the same, one or more of the following techniques may be used.
[0152] All branched interfaces use the same local credit and scheduler resource message bus as the original interface. Messages belonging to different branched interfaces are multiplexed on the same message bus.
[0153] A branching source interface uses the same NPR (Non-Posted Request) bus as the original interface. Capsules belonging to different branching source interfaces are multiplexed onto the same NPR bus.
[0154] In one example of a forked operation, a cSI may receive data on 1×4 interfaces from a data source intended for two different data sinks. The cSI may have a 1×2 interface with one of the data sinks and a 1×2 interface with the other data sink.
[0155] Combined operations may be supported. This is when two or more interfaces are combined. For example, a cSI may receive data on a 1x2 interface from a first source for a first data sink and data on a 1x2 interface from a second source for the first data sink. A cSI may have a 1x4 interface with a first data sink. Data from the two sources may both be sent on the 1x4 interface.
[0156] However, in the case of forking, the write pipe configuration may not make a difference since each source-sink can handle up to a given maximum number of simultaneous segments that need to be written to the sink memory and up to a given maximum number of read requests that need to be presented to the sink memory simultaneously. In some embodiments, the given maximum number may be four. In other embodiments, the given maximum number may be greater or less than four.
[0157] A first set of multiple multiplexers 868 are provided downstream of the sink memory multiplexer 860. For clarity, only one of these multiplexers of the first set is shown in FIG. 7b. The sink memory multiplexer 860 directs read and write requests to the required multiplexer of the first set of multiplexers 868. The output of each of the first set of multiplexers 868 is provided to a respective sink memory 870. The sink memories may take any suitable form. In some embodiments, the sink memories may include a one segment wide RAM that is single ported. In other words, the width of the RAM matches the size or width of the bus segment.
[0158] The outputs of two or more of the sink memories 870 are output to multiplexers 872 of a second set of multiplexers. Again, only one of the second set of multiplexers is shown for clarity. Each multiplexer 872 of the second set of multiplexers is controlled by the output of a respective read control FIFO 874. The number of multiplexers in the first set of multiplexers may be greater than the number of multiplexers in the second set of multiplexers. The multiplexers 872 of the second set of multiplexers provide outputs to respective read response pipes 876, which will be described in more detail below.
[0159] In one embodiment, a first pair of the first set of multiplexers 868 provides outputs to respective sink memories 870, which in turn provide their respective outputs to a first multiplexer of the second set of multiplexers 872. This configuration may be repeated for a second pair of the first set of multiplexers that provide outputs to respective sink memories, which in turn provide their respective outputs to a second multiplexer of the second set of multiplexers, and so on.
[0160] A write request to memory does not require further processing.
[0161] Read requests generate read data that is collected in read response pipes, one for each sink client.
[0162] Please refer to FIG. 8, which shows a schematic example of the write pipe of FIG. 7b. One write pipe may be provided for each source client. The write pipe accepts capsules from the source clients. The write pipe has an address decode unit 878. The address decode unit 878 or stage includes an input buffer 878a, an address decode engine 878b, and a write buffer status register file 878c. The address decode unit 878 determines the target sink memory and the target sink buffer for the capsule. The address decode unit may check the state of the target buffer. The address decode unit may associate a sink memory address with each capsule segment. The address decode unit may update the state of the target buffer. The address decode unit may pass the write request to the sink memory multiplexer via a FIFO 880. The output of the write pipe is provided by a capsule segment having a width corresponding to the width of the bus segment. The sink memory address may identify a memory bank of the sink memory, as will be discussed later.
[0163] More specifically, control logic within address decode unit 878 monitors capsules appearing on the ingress bus. This logic examines the capsule header and determines the target circular buffer for the capsule. The target buffer depends on the capsule type and the virtual channel VC of the capsule.
[0164] The control logic checks the buffer state (start, end, and write pointers) maintained in the block register file and calculates the write address of the bus segment of the sink memory.
[0165] The control logic within the address decode unit may perform the above actions in parallel for all segments of the bus.
[0166] The address decode unit 878 handles the discovery of read job chunk boundaries and job notification messaging for each buffer. A job chunk is the amount of data that the sink scheduler expects to be read from a buffer for each job request. A chunk may be approximately 1 KB extended to the nearest capsule or any other suitable chunk size. For each completed (fully written) job chunk, the address decode unit pushes a job notification message into the job info FIFO. A parallel job info FIFO may be provided for each buffer. The job notification message may have one or more of the following arguments: buffer ID and job chunk length in segments. Each job info FIFO may be sized to match the size of the corresponding buffer.
[0167] The address decode unit 878 may maintain a job chunk completion timer for each buffer. The timer is armed when a buffer starts receiving a new job chunk. If the job chunk is not completed within the allotted time (i.e., the timer expires), the address decode unit functions as if the job size has been reached. If not all jobs are completed, it is possible for the job chunk information FIFO to fill before filling the corresponding buffer. Thus, the logic stops the timer when the corresponding job chunk information FIFO fill level reaches a threshold. The timer continues even after the FIFO fill level falls below the threshold. This condition can cause a block stall.
[0168] Thus, the address decode unit processes the job notification messaging for each buffer and provides job information output that is provided to the respective job information FIFO.
[0169] The write pipe has a FIFO 880. There may be a dedicated FIFO for each bus segment. This may smooth out transient delays caused by segment address collisions. The FIFO allows all segments of the address decode section to move simultaneously, which may simplify the address decode logic. The output of the write pipe is therefore the width of the bus segment and can be written to a cell of the sink memory in one operation. This memory cell has a width equal to the width of the bus segment.
[0170] Please refer to FIG. 9, which shows a schematic of the read request pipe 864 of FIG. 7b. There may be one read request pipe for each sink client. The read pipe receives job requests from the sink schedulers (one scheduler for each sink client). The read pipe may check the state of the buffers (sink memories) that the scheduler instructs the pipe to read. The read pipe may generate read requests. The read pipe may update the state of the buffers. The read pipe may pass the read requests to the sink memory multiplexer.
[0171] The read request pipe includes an address decode section 882. The address decode section or stage includes an input buffer 882a, an address decode engine 882b, and a read buffer status register file 882c.
[0172] The Address Decoder receives a job request from the Sink Scheduler 866. The job request asks the read stage to read a job chunk of data from a specific location. This specific location may be a specific RAM cell or other memory cell, or a managed data structure such as a linked list, circular queue, or virtual FIFO. The request carries a buffer ID and a destination ID. A client may be allowed to have one or more outstanding job requests to the same or different buffers.
[0173] The address decode unit receives the job information generated by the write stage (as shown in FIG. 8) from the job information FIFO.
[0174] The job info allows the address decode unit to transition from job to job (buffer to buffer) without any overhead, i.e., at this stage it does not overrun the end of the job since it knows the job chunk length from the job info.
[0175] The job information allows the address decode unit to process multiple job chunks during the same scheduler job request if the chunks are smaller than the default chunk size (due to a job chunk fill timeout during the write phase).
[0176] Since the job information includes the length of the job chunk in segments, the job information enables the address decoding unit to know the state of the buffer at the end of the job.
[0177] Upon completion of each job request, the address decode unit generates a scheduler job response, which is a job response to the sink scheduler. The response carries source credit, cost, and resource credit fields.
[0178] During each active job execution cycle, the address decode unit builds up to 4 / 8 (or any other suitable number) concurrent sequential read requests to the same sink memory circular buffer. The first and / or last cycle of a job may have less than 4 / 8 (or any other suitable number) concurrent requests due to ordering. In any given cycle, only requests belonging to one job may be issued. This is true even if two consecutive jobs target the same buffer.
[0179] If the request address decode unit services bifurcated sink interfaces, it may be able to process one job simultaneously for each bifurcated interface, each of which is associated with one or more particular bus segments.
[0180] During each active job execution cycle, the Address Decoder builds a request context and pushes it into the Request Context FIFO 884 to be collected by the Response Phase. The request context describes the request phase transactions, i.e., which read requests are valid, etc.
[0181] For bifurcated interfaces, one request context FIFO is used for each bifurcated interface.
[0182] When a capsule is dropped by a read request pipe, the read response pipe issues a drop notification. This can happen if the capsule violates the ordering rules. In this case, the response pipe continues to drop all subsequent capsules from the same buffer until the read request pipe stops the capsule flow from the buffer and notifies the response pipe with a flush done message.
[0183] The read request pipe sees two capsule drop notifications for each notification message issued by the client: one message is delivered directly, bypassing the job request FIFO, and the other is received through the same FIFO as the job request. The first message allows the address decode to react immediately to the notification, and the second message tells the address decode that there are no more pipelined job requests for the affected buffer.
[0184] See Figure 10, which shows the read response pipe 876. A read request generates read data that is collected in several read response pipes, one for each sink client. The read response pipe receives the read data response from the sink memory and the corresponding context from the read phase. The request context tells each response phase segment register which memory or RAM will receive the data and whether the data is valid or not.
[0185] The read response pipe sees the same buffer segments in order. For each capsule, the read response pipe updates / verifies the order state using the order counter 892 and order checker 890, respectively. If a capsule is found to be out of order, the pipe drops the capsule without passing it to the sink interface and notifies the read request pipe. The read response pipe continues to drop all capsules from the affected buffer (without issuing any further notifications) until the read response pipe sees a flush done message from the read request pipe.
[0186] For each cycle, the sink memory multiplexer 860 considers all write requests and all read requests to the sink memories. The arbiter of the sink memory multiplexer 860 can make decisions in parallel for each sink memory because they are independent. In some embodiments, there may be eight sink memories. In other embodiments, there may be more or less than eight sink memories. The sink memories may include a bank of RAM that is one segment wide and single ported. Other embodiments may use different types of memory.
[0187] The width of each single-ported RAM is the same as the width of the bus segment, so the port width is the same as the width of the bus segment.
[0188] The number of RAMs in a memory bank may depend on the number of simultaneous write and read requests per cycle. There may be as many RAMs in a bank as there are bus segments. For example, there may be 32 RAMs in a bank and 32 bus segments. 32 streams (read and write pipes) may be supported with each stream associated with its respective FIFO (elastic FIFO for the write pipe and FIFO for the read pipe).
[0189] The number of RAMs may depend on the bandwidth that the logical multi-bank sink memory is required to sustain. If there are fewer simultaneous write and read requests, there may be fewer RAMs in the bank. By way of example only, the number of RAMs may be 16.
[0190] The bus is segmented and each segment is written / read independently from the memory bank.
[0191] The logical sink memory is constructed from RAMs that are physical segment wide, and the logical sink memory addresses are striped across the banks to ensure that all RAMs are loaded equally. For example, memory cell 0 is RAM0, 1 is RAM1, and so on.
[0192] If none of the requests collide, i.e., none target the same RAM cell in the same sink memory bank, all requests may proceed. If some of the requests collide, the sink memory multiplexer 860 acts as an arbiter. For any two or more colliding write requests, the sink memory multiplexer 860 may allow the write request with the most entries in the elastic FIFO to win. If the requests have the same number of entries, an absolute priority based on the segment buffer index may be applied. This may not result in any imbalance, since the lost segment will soon have more entries in its elastic FIFO and will win in the subsequent round.
[0193] For any two colliding read and write requests, the arbiter may use a programmable threshold mechanism to select a winner.
[0194] To ensure that the read response pipe always sees response data from the same buffer in order, an arbiter in sink memory multiplexer 860 arbitrates between conflicting read requests as follows: If the read pipe is operating in divergent mode, read requests may collide, in which case only segments belonging to different divergent interfaces may collide. The arbiter may select the divergent interface that has the most entries in at least one of its elastic read request FIFOs and allow all segments belonging to this interface to proceed. The arbiter, in some embodiments, does not allow a subset of read requests from the same interface to proceed, i.e., either all or none of the requests proceed.
[0195] Thus, the cSI can manage bifurcated host interfaces without having to duplicate the DMA engine.
[0196] cSI can be extended into the fabric. There can be two ways to do this. In some embodiments, only one of the methods can be used. In other embodiments, both methods can be used simultaneously. The method is to expose the fabric interface to the fabric ports and tunnel the cSI capsule through the NoC. The NoC / Fabric bridge can support both methods simultaneously. In the case of simultaneous support of both methods, the cSI interface is bifurcated and the resulting sub-interfaces are associated with NoC and fabric pins or connections, respectively.
[0197] From a systems perspective, cSI may be extensible and adaptable to specific system needs. To that end, cSI may fit into one hub or be provided by a network of interconnected hubs. A hub is itself an nxm streaming fabric connecting n sources to m sinks. Hubs may be parameterizable and compile-time configurable.
[0198] The ease with which a custom cSI can be constructed using hubs, and the simple mechanism for hub assembly, supports configurability of the cSI.
[0199] A multi-hub fork-join approach may allow parts of the cSI to exist in soft logic, meaning that many different instantiations with different topologies can be created and added / modified at startup (using dynamic reconfiguration) to provide connectivity to different kernels (or plugins).
[0200] The cDM (configurable data mover) 824 provides the bulk data mover element of the cDMA system. The cDM is supplied with commands. It operates under the direction of various DMA adapters to move data to and from the cSI 822 to the required endpoints. The cDM 824 is used by the DMA adapter 832. In some embodiments, the cDM is exposed to the programmable logic of the NIC so that it can be used by other DMA adapters. This may depend on the customer or user requirements.
[0201] The cDM aims to decouple the API for the DMA adapter from the data movement process. The cDM sits between the cSI and the DMA adapter. It is one of the possible clients of the cSI and may be the highest bandwidth component in any DMA system. The flexibility of the cSI allows the cDM to perform the data movement part of a transaction involving one or more of the PCIe host, CPU, DDR, NIC, and fabric clients, directly or through the NoC. It may be under the control of the DMA adapter or the fabric client DMA adapter.
[0202] It should be understood that DPU.Host 502 may incorporate one or more DMA adapters or may be considered to be DMA adapters itself. The one or more DPU.Host 502 DMA adapters may be in place of or in addition to the one or more DMA adapters referenced at 832 in FIG. 6.
[0203] There may be three "data plane" data mover operations handled by the cDM: they are invoked by requests, and when completed, they generate responses (which may in some cases be suppressed).
[0204] The M2ST (memory to streaming) operation moves contiguous blocks of data from the target memory to the cDM streaming interface for consumption by the adapter through the streaming interface. In this embodiment, the source is accessed using memory like transactions and the destination receives the data stream.
[0205] A streaming to memory (ST2M) operation moves a block of data from the adapter through the streaming interface to a location in the target memory.
[0206] A memory to memory (M2M) operation moves contiguous blocks of data from one target memory location to another target memory location, which can be in the same or different physical targets.
[0207] ST2M, M2ST, and M2M may be bulk operations.
[0208] There may be two control plane data mover operations: Message Load is like an M2ST operation, and Message Store is like an ST2M operation. These operations (interfaces and APIs) may be for moving control plane traffic such as descriptors and events, not data. This may be for short inline messages.
[0209] An adapter is a cDM client. As previously mentioned, the DPU.Host may include one or more DMA adapters. One or more of the DMA adapters in the DPU.Host may be a cDM client. A cDM client implements the cDM APIs, including ST2M, M2ST, M2M, message load, and message store request / response. A client does not need to support all API requests / responses. For example, some clients only perform bulk data writes (ST2M) and other clients only perform bulk reads (M2ST).
[0210] Please refer to FIG. 11 which shows a schematic of the cDM824.
[0211] The cDM824 has a variety of interfaces. The interfaces may operate at any suitable rate. In some embodiments, the interfaces may operate at relatively high rates. For example, in some embodiments, the interfaces may operate at 1 GHz. Different rates may be supported by different embodiments.
[0212] A cSI source client interface 950 is provided for passing capsules from the cDM to the cSI and is flow controlled by credits passed from the cSI to the cDM.
[0213] A cSI sink client interface 951 is provided for receiving capsules from a cSI and is flow controlled by credits passed from the cDM to the cSI.
[0214] DMA adapter interfaces 957a-g provide respective interfaces between each DMA adapter and the cDM. As previously mentioned, DPU.Host 502 may include one or more DMA adapters. The cDM provides a dedicated interface for each type of operation by each enabled adapter. This may obviate the need to support multiplexing / demultiplexing and local credit schemes over the interface.
[0215] The DMA adapter interface may include one or more of the following:
[0216] Adapter ST2M request interface 957a. This provides one or more request interfaces to support a corresponding number of writeable adapters. Each transaction may pass one ST2M request from the adapter to the cDM. This flow may be controlled by a ready / valid handshake. These requests are provided to the write engine 952.
[0217] Adapter M2ST data interface 957b, which provides one or more data interfaces to support a corresponding number of readable adapters. A bus may be used. As an example, the bus may be an AXI ST bus or any other suitable bus. The flow may be controlled by a ready / valid handshake. Data is provided by the response reassembly unit RRU 954.
[0218] Adapter M2ST / M2M Request Interface 957c. This provides one or more request interfaces to support a corresponding number of read-enabled adapters. Each transaction may pass one M2ST or M2M request from the adapter to the cDM. This flow may be controlled by a ready / valid handshake. These requests are provided to the read engine 953.
[0219] Adapter message store request interface 957d. This provides one or more request interfaces to support a corresponding number of adapters. The first transaction of a message store request passes the control portion of the request and c bits of message data from the adapter to the cDM. Additional transactions from the adapter to the cDM pass the remainder of c bits of message data, if any, at once (or less on the last beat). The value of c may be 128 bits or any other suitable value. This flow may be controlled by a ready / valid handshake. These requests are provided to the write engine 952.
[0220] An adapter message load request interface 957e, which provides one or more request interfaces to support a corresponding number of readable adapters. Each transaction passes one message load request from an adapter to the cDM.
[0221] This flow may be controlled by a ready / valid handshake. These requests are provided to the read engine 953.
[0222] Adapter Message Response Interface 957f. Any operation may generate a response that provides completion status information for the operation. A message load operation generates a response that carries both the completion status and the message data. The first transaction of the response passes the completion status and the first c bits of message data from the cDM to the adapter. Additional transactions from the cDM to the adapter pass the remainder of the c bits of message data, if any, at that time (or less in the last beat). This flow may be controlled by a ready / valid handshake. These responses are provided by the response engine 955, which receives input from the RRU, the read engine, and the write engine. (Not shown in FIG. 11)
[0223] Adapter ST2M Data Interface 957g. This provides one or more data interfaces to support a corresponding number of writeable adapters. Any streaming bus may be used. As an example, the bus may be an AXI ST bus. The flow may be controlled by a ready / valid handshake. These requests are provided to the write engine 952.
[0224] It should be understood that the adapter interfaces supported depend on which one or more DMA adapters are supported by the NIC. One or more other adapter interfaces may be supported alternatively or additionally.
[0225] The cDM may also support one or more of the following interfaces:
[0226] Scheduler job response interface (SJR) 961. This interface broadcasts job responses to all cDMA initiator schedulers. Its flow may be controlled by a ready / valid handshake. This interface receives job responses from the read engine 953 and the write engine 952.
[0227] M2M job request interface (M2MJR) 962. This passes job requests from the initiator scheduler to the cDM internal M2M adapter 956. This flow may be controlled by a ready / valid handshake.
[0228] M2M source credit interface (M2M source credit, M2MSC) 963. This passes source credit from the cDM internal M2M adapter block 956 to the initiator scheduler. This flow may be controlled by a ready / valid handshake.
[0229] A cDM may provide services to one or more adapters. An adapter may be an enhanced adapter. An enhanced adapter may be provided as part of a NIC associated with a cDMA. A cDM provides a dedicated interface for each operation type supported by a given enabled adapter. Each enabled adapter may possess a complete set of cDM interfaces necessary to perform the cDM operations that the adapter supports.
[0230] There may be one or more hardened and enabled adapters. Alternatively or additionally, the adapters may be so-called soft adapters, e.g., provided by programmable logic or programmable circuitry. The cDM has an interface that exposes the cDM adapter interface to the fabric used by one or more soft adapters.
[0231] A cDM may, in some embodiments, support one or more enhanced adapters and / or one or more soft adapters. Any one or more or all of the adapters may be active simultaneously. The adapters may include one or more enhanced adapters and / or one or more adapters implemented in programmable logic.
[0232] In some embodiments, regardless of the nature of the adapter and whether it is hardened or instantiated in the fabric, the adapter may use the same protocol to communicate with the cDM. This is referred to as the adapter API. The adapter API uses a request-response model. This adapter API may be used by one or more DMA adapters in DPU.Host 502.
[0233] The write engine 952 is provided with a write arbiter 958 .
[0234] A cSI VC is a virtual pipe featuring independent buffering resources, allowing initiators such as cDMs to read and write target memory on behalf of their clients in a mutually non-blocking manner. The response reassembly unit RRU 954 memory is for data returned by all cDM in-flight read requests. This memory is shared by all cDM clients. The RRU reorders and packs the read data, and queues data ready to be returned to the requester in a dynamic virtual FIFO called a read channel. Clients utilizing readable VCs may be assigned an equal number of RRU read channels.
[0235] The M2M adapter 956 is responsible for the write half of M2M operations initiated by the DMA adapter. The M2M adapter owns up to a given number of write-only VCs, which may be four or any other suitable number.
[0236] A cDM request for a DMA adapter may include a virtual channel identification VC ID field that the cDM converts to a cSI VC ID using a per-adapter or message loaded / stored VC conversion table. For readable VCs, the conversion table also provides a read channel ID. In other words, a cDM client knows the global cSI VC ID and does not need to read the channel ID, but can use the local VC ID value instead.
[0237] The request may be for an ST2M block move. The DMA adapter requests the cDM to move blocks of data to contiguous memory locations accessible through the cSI interface. The adapter delivers the data blocks to the cDM through the Streaming Bus interface. The cDM expects the adapter to supply the Streaming Bus data blocks in the same order as requested.
[0238] The DMA adapter may truncate a block (i.e., provide fewer bytes than specified in the request) due to an adapter error condition. To allow this, the streaming bus may incorporate a truncation flag (in addition to the EOP flag). Data blocks may be aligned to a bus transaction boundary plus a specified offset byte. Optionally, the cDM responds to the adapter upon completion of the request. Request completion means in this case that all the request streaming data is passed to the cSI. While executing a request, the cDM generates one or more memory write capsules belonging to the Post-Request PR flow type. The cDM is configured with the interface rules. The cDM knows which interface it is accessing and can therefore apply different rules. One variable may be the maximum write request setting. The capsule header is added with one or more of the following arguments:
[0239] A client identification ID that identifies the cDM client, which is a DMA adapter. The VI identification information that is used along with the client ID to look up the cSI VC used by the request, Address information.
[0240] Length information indicating the number of bytes to write, Information indicating whether a response is required. If set, this instructs the cDM to generate a response when a block is moved to the cSI interface.
[0241] The request may be an M2ST block move. The adapter requests the cDM to move a block of data from contiguous memory locations accessible through the cSI interface. The adapter collects the data blocks from the cDM through the streaming interface. Each M2ST request selects a read channel from the set of channels owned by the adapter that originated the request. The cDM places the same channel data blocks on the streaming interface in the same order that they were requested. Different channel requests, even from the same adapter, return out-of-order data.
[0242] The cDM may truncate a data block (i.e., provide fewer bytes than specified in the request) due to an error condition reported by the cSI (e.g., a PCIe read error). For example, if a read error occurs from the PCIe core, the bridge receives a capsule with an error flag. It then generates a capsule with an error flag. The cDM looks at the capsule with the error, knows which request it belongs to, truncates the data, and processes everything else (e.g., ignores additional response capsules to this request).
[0243] The data block may be aligned to a transaction boundary plus a specified offset byte. Optionally, the cDM responds to the adapter upon completion of the request. Request completion in this case means that all of the requested streaming data is delivered to the adapter. While executing the request, the cDM generates one or more memory read capsules. The cDM is configured with interface rules. The cDM knows which interface is being accessed and can therefore apply different rules. One variable here may be the max read request setting. The cDM collects memory read completion capsules (belonging to the associated flow type) and uses them to assemble the requested data block. The request capsule header is populated with one or more of the request arguments described below. VI identification information that is used together with the client ID to look up the cSI VC and RRU read channel ID used by the request; Relaxed read information. When set, this instructs the cDM and cSI to allow read request capsules generated during this cDM request to bypass any in-flight writes generated by the cDM (including those with the same requestor).
[0244] The request may be an M2M block move. This may be similar to the request described above. The DMA adapter requests the cDM to move a block of data from one contiguous memory location accessible through the cSI interface to another contiguous memory location also accessible through the cSI interface. This request does not expose the adapter to the contents of the data block. The cDM may respond to the adapter upon completion of the request. The block may be truncated as described above. In this embodiment, the data loop from read to write is internal to the cDM. This request may use a source virtual channel ID and a destination channel ID. The source VC ID and client ID are used to look up the cSI VC and RRU read channel ID. The destination VC ID with the client ID of the M2M adapter is used to look up the cSI VC for the write half of the request.
[0245] The request may be a message load. The DMA adapter requests the cDM to move a block of data from contiguous memory locations accessible through the cSI interface. Unlike M2ST, this request may return the requested data through a message response interface rather than placing it on a streaming interface. The request may have a VC ID used to look up the cSI VC and an RRU read channel ID used by the request. The lookup table in this case is the cDM message load / store VC lookup table used by message load and message store requests from all cDM clients.
[0246] The request can be a message store. The cDM adapter requests the cDM to move a block of data (a message in this case) to a contiguous memory location accessible via the cSI, or to send an interrupt request capsule to one of the PCIe targets. Unlike ST2M, this request consumes data from the cDM request interface rather than collecting data from a separate streaming interface. The message store operation is intended to be used to deliver notifications and interrupts indicating the completion of a particular operation. Since notifications can be dependent on data location (i.e., following the delivery of associated data), the message store operation has ordering control.
[0247] Message stores can be frequent and small. It may be desirable to combine adjacent stores in memory into a single transaction. To facilitate this without extra logic in the adapter, the cDM implements a write combining mechanism that can be applied to any message store request. The VC ID is used to look up the cSI VC used by the request.
[0248] Responses can be generated for message load requests, and on demand for other request types. A message load response uses a response payload component to supply message blocks. Responses can be returned in the same order that the corresponding requests were executed, which is not necessarily the same as the issue order.
[0249] The ST2M response is issued when all write capsules corresponding to this request have been delivered to the cSI.
[0250] An M2M response is issued when all capsules corresponding to this request have been received from the cSI and all write capsules corresponding to this request have been issued to the cSI.
[0251] The M2ST response is issued when all capsules corresponding to this request have been received from the cSI and the requested blocks have been streamed to the adapter.
[0252] A message store response is issued when all write capsules corresponding to this request have been delivered to the cSI.
[0253] The message load response control component is issued when all capsules corresponding to this request have been received from the cSI. The response control component is passed to the adapter at the same time as the first transaction of the response payload component.
[0254] ST2M, half of the M2M writes, and message store traffic compete for cDM write engine (WE) 952 bandwidth. The cDM implements an internal arbiter, the write arbiter (WA) 958, to load balance between these request types. The WA is responsible for ensuring that message store traffic and data write traffic share the WE bandwidth appropriately and that the WE does not become the head of a line block or deadlock.
[0255] To ensure that the WE952 transfers message store data at full speed (regardless of adapter speed), the WA958 monitors the status of the message store FIFOs and will not select a FIFO if it does not appear to hold at least one complete message.
[0256] To ensure that the WE transfers ST2M data at full speed (regardless of adapter speed), the WA958 monitors the state of the ST2M data FIFO and will not schedule a thread if the FIFO does not appear to hold enough data to complete a request or to form at least one capsule.
[0257] While arbitrating between threads, the WA958 aims to achieve the following:
[0258] ST2M request sources share the WE bandwidth equally.
[0259] Message storage request sources share the WE bandwidth equally.
[0260] Arbitration between message storage requests and ST2M requests is based on programmable priorities.
[0261] The writing engine WE952 provides the ST2M processing.
[0262] The cDM sees a given number of FIFO pairs, where one FIFO of the pair carries ST2M requests and the other FIFO carries ST2M data. Each pair is owned by an adapter instance. The adapter decides (under cDMA scheduler control) which of its internal sources (queues) will push the next ST2M request / data, and ensures that requests and data are seen by the cDM in the same order.
[0263] The WE processes ST2M requests from a given number of FIFO pairs in parallel, using one thread for each. The WE consults the arbiter at each capsule boundary.
[0264] Following completion of an ST2M request, the WE Engine sends a response word (if required by the request) to the Response Engine.
[0265] Following the completion of an ST2M request marked with a job-finished flag, the WE uses the per-thread job cost and resource credit accumulator values to generate a job response message to the scheduler.
[0266] The write engine WE952 provides message storage.
[0267] The cDM looks at a given number of FIFOs carrying message store requests. The WE processes message store requests sequentially from a given number of FIFOs. When a thread accepts a request, it processes it to completion without interruption. When an engine completes a request, it looks at the arbiter.
[0268] Following completion of a message storage request, the WE sends a response word (if required by the request) to the Response Engine.
[0269] The write engine WE952 provides synchronization of message store and ST2M data. Message store operations are typically used to write out events that notify the cDMA application about ST2M data delivery. Such events should not overtake the corresponding data. The cDM and cSI incorporate logic to synchronize the arrival of selected ST2M request data and corresponding message store request data.
[0270] A cDMA application can enforce an arbitrary order between any set of DMA requests by using a barrier. The cDM and cSI may implement dedicated logic for this synchronization scenario.
[0271] Adapters can use the message store request argument to request synchronization of message store with ST2M requests. The cDM does not separate synchronized and unsynchronized message store requests from the same adapter, but instead buffers message store requests in a per-adapter message store request FIFO.
[0272] To ensure that a synchronized message store request retains its position relative to the ST2M data all the way to the target, the message store data utilizes the same cSI VC as the ST2M data. The ST2M data and message data share the same buffer in the sink memory.
[0273] The WE may provide message storage write binding, which is implemented within the WE.
[0274] M2ST, half of the M2M reads, and message load traffic compete for cDM read engine (RE) 953 bandwidth. The cDM implements an internal arbiter, the read arbiter (RA) 959, to load balance between these request types.
[0275] The RA is responsible for ensuring that message load requests and data, and data read requests share the RE bandwidth appropriately and that the RE does not become the head of a line block.
[0276] While arbitrating between threads, the RA aims to achieve the following:
[0277] Half of the M2ST / M2M read request sources share the RE bandwidth equally.
[0278] Message load request sources share the RE bandwidth equally.
[0279] Arbitration between message load requests and M2ST / M2M read half requests is based on programmable priority.
[0280] The read engine 953 may perform M2ST processing. The cDM looks at the FIFOs carrying M2ST and M2M requests. The adapter decides which of its internal sources (queues) to push the next M2ST / M2M request to.
[0281] The RE processes M2ST / M2M requests from the FIFO in parallel, using one thread for each. The read engine consults the arbiter at each capsule boundary.
[0282] Following completion of an M2ST / M2M request marked with a job done flag, the RA generates a job response message to the scheduler using the per-thread job cost and resource credit accumulator values. M2ST and M2M can be treated the same for the purposes of job cost and resource credit calculations.
[0283] At the start of each M2M request, the RA generates an M2M status word and passes it to the cDM internal M2M adapter. This word serves as a context that allows the adapter to process the M2M read data received from the RRU and complete the write half of the M2M request.
[0284] The RE may provide message loading processing.
[0285] The cDM sees several FIFOs carrying message load requests. The RE processes the message load requests from the FIFOs sequentially. When a thread accepts a request, it processes it to completion without interruption. When the read engine completes a request, it consults the arbiter.
[0286] For each non-post-request NPR capsule output to the cSI source interface, the RA retrieves a free NPR tag value from a free tag pool maintained by the RE, places the tag in a capsule pseudo-header, and sends a read status word containing the tag and other context to the RRU. This word carries context that enables the RRU to process the capsule carrying data requested by the NPR. The tag is returned to the free tag pool by the RRU after the RRU has collected all requested data for a given NPR.
[0287] The RE may provide RRU memory space tracking. RRU memory is a relatively limited resource. When all of the RRU memory is reserved for in-flight read requests, the RE stalls the current thread. The RRU memory is a collection of buffers. The buffers hold the completion capsule payloads. Different payloads may not share the same buffer. The RE determines how many completion capsules and what size a request generates (based on the read request address and target completion payload length settings) and reduces the RRU memory free buffer count by the appropriate amount. The RRU may report back to the RE each time a buffer is freed.
[0288] The RRU 954 processes read response data belonging to M2ST, M2M, and message load requests. The RRU receives completion capsules from the cSI sink interface. Each capsule carries the NPR tag of the corresponding non-post request.
[0289] The RRU maintains the state of outstanding NPRs indexed by tag values. The RRU also maintains the NPR issuing order. Every NPR issued by the RE is associated with the read channel identified by the cDM request that generates the NPR. The RRU maintains the NPR order separately for each read channel. The capsule payloads are stored in the RRU memory. The RRU keeps track of the amount of data received by each read channel and communicates it to the RRU scheduler in the form of source credits. The RRU scheduler also receives destination credit information from the read data receivers that informs them how much read response data each receiver can accept.
[0290] There may be one or more of the following read data recipients:
[0291] a cDM response engine that receives message load data; an M2M cDM internal adapter for receiving M2M read data; and One or more external adapters.
[0292] Each receiver owns one or more read channels.
[0293] The scheduler schedules blocks of data to be transferred from eligible read channels to the corresponding receivers. Only in-order data (no holes) is transferred. If the RRU finds an incomplete NPR response while transferring read channel data to the receiver, the block terminates the transfer (without transferring any of the NPR response data) and informs the scheduler (using source credits) that the read channel has no data. This prevents the scheduler from continuing to schedule the same channel again, thereby wasting RRU bandwidth. Once the hole is filled, the RRU informs the scheduler about the presence of data in the channel.
[0294] Data arrives at the receiver through a rate matching FIFO. In some embodiments, there may be one FIFO per receiver. The FIFO allows the RRU to output data at a maximum rate (e.g., 800 Gbps or any other suitable rate) and the receiver to receive data at its own rate. The FIFO may not be required by the response engine and M2M adapter since it is a cDM internal block that can accept data at the maximum rate. One or more external adapters may require a rate matching FIFO. The FIFO size may be defined by the adapter speed ratio, which is the maximum number of outstanding jobs x job length x cDM.
[0295] The RRU may pack data belonging to the same cDM request before pushing it into the rate match FIFO so that the data starts at the request-specified offset in the first word and completely fills all password words except the last password word.
[0296] The RRU maintains a context of outstanding cDM requests. The cDM request information is provided to the RRU as part of a read status word from the RE. This context enables the RRU to generate a response word to the response engine for each completed cDM request that requires a response engine.
[0297] The M2M adapter 956 performs the write half of the M2M request. The M2M adapter receives an M2M read status word from the RE, which carries the M2M request context. The M2M adapter uses this context to process the M2M request read data it accepts from the RRU in order. The M2M adapter utilizes a cSI write-only VC and an RRU read channel. Internally, the M2M adapter implements a circular buffer. There may be a one-to-one correspondence between the M2M cSI VCs, the RRU read channels, and the internal circular buffer. The buffer accepts data from the RRU read channels (channels per buffer) and advertises destination credits to the RRU scheduler. The same buffer serves as the data source for the cDMA initiator scheduler 836 (see FIG. 6), which associates one cSI VC with each buffer. The cDMA initiator scheduler issues job requests to the M2M adapter, the adapter executes the job requests by issuing one or more ST2M requests / data to the cDMA WE, and the scheduler receives job responses for the M2M and job requests for other adapters from the WE. In other words, the internal M2M adapter can function in the same way as an external adapter.
[0298] A response engine 955 generates responses to the adapter. The response engine receives response content from the write engine, the M2M adapter, and the RRU, connections to which are omitted for clarity.
[0299] The ST2M and message store response content is provided by the writing engine.
[0300] The M2ST response content is provided by the RRU 954.
[0301] The M2M response content is provided by the M2M adapter 956.
[0302] The message load response and the message load response data are provided by the RRU 954.
[0303] As explained above, multiple different DMA adapters may be provided. The DMA adapters provide the API elements of the DMA system, allowing bulk data movers to be expressed with the necessary functionality of the DMA interface required in a given system. These adapters may be provided by DMA adapter 832 and / or one or more DMA adapters provided within DPU.Host 502.
[0304] Some other DMA interface examples are as follows: QDMA-Provided by current applicants, EF100 - used with network stack and applications, again provided by the current applicant, Virtio - provides a standardized hardware interface that allows guest operating systems to use hardware with portable device drivers. The Virtio interface is supported for guests both through a hypervisor and directly through the hardware (aka bare metal).
[0305] Other DMA adapters to suit specific customers are possible. These may be implemented in soft logic. In the latter case, the cDM, cSched (configurable scheduler), and cDC (configurable descriptor cache) interfaces may need to be made available at the programmable logic boundary.
[0306] One or more DMA schemes may support streaming and / or one or more DMA schemes may not support streaming.
[0307] One or more DMA schemes may support multiple queues and / or one or more DMA schemes may not support multiple queues, ie, may support a single queue.
[0308] The DMA adapter can be connected directly to the PL or to the NoC as needed.
[0309] The specific requirements of a given DMA scheme are handled by the DMA adapter.
[0310] The DMA engine may benefit from descriptor management to improve performance. This may be to reduce the latency of fetching descriptors from host memory, which may affect throughput and transfer rates. The DMA engine may benefit from descriptor prefetching. In some embodiments, there may be more than one DMA adapter. Different DMA adapters may implement different DMA APIs to support various needs of the host software. To facilitate high data throughput, the DMA system should have a relatively high probability of being able to load the appropriate descriptor from local memory, rather than having to fetch the appropriate descriptor from the host or other off-chip.
[0311] The cDC (configurable descriptor cache) module 834 shown in FIG. 6 manages a relatively large block of memory set aside to hold DMA descriptors (to reduce latency) on behalf of at least one or some or all DMA adapters in the cDMA system. This may include DMA adapters implemented in soft logic. This may allow that memory to be optimally distributed and reused. The cDC may be exposed to the fabric so that user-level adapters can take advantage of the ordered storage available. Thus, the cDC exists to provide managed access to a shared memory resource to store descriptors for potentially more than one DMA adapter. In the case of the DPU.Host, the descriptor processing may be performed in the fabric (optionally using the cDC).
[0312] Scheduling may be controlled by one or more schedulers 836. A scheduler may be needed to schedule initiator access to a shared target. The scheduler may schedule the DMA adapter of the DPU.Host. Alternatively, control logic for the DPU.Host may monitor the fill levels of various FIFOs and regulate the rate at which different commands are submitted (i.e., perform the scheduling operation itself).
[0313] The cDC is connected to each of the DMA adapters 832. It may include a fabric interface so that the soft DMA adapters can utilize the resources of the cDC. The primary connection to the cDC may be via a combined command and data request and response bus that runs at the block's frequency. Flow may be controlled with Rdy / Vld (Ready / Valid) signals. The request and response buses may be the same or different sizes. The response bus may be wider than the request bus in some embodiments. The interface to the cDC may be multiplexed to two or more DMA adapters and the PL via the cDC-MDML (Multiplexer / Demultiplexer Logic) 844. Multiplexing may be based on a client identification field that is part of the request and response.
[0314] The cDC may contain two memory structures: the actual descriptor cache memory and a memory for tracking the state of the active / open lists (read / pop / write pointers).
[0315] The cDC may maintain one descriptor read and one descriptor write per cycle. A request / response scheme may allow two or more commands to be issued together per cycle. The cDC may perform one list get or one list place operation approximately every n clock cycles (n may be, for example, every 64 clock cycles, or any other suitable number). Operations involving more than one descriptor may pass one descriptor per clock, thus occupying the request / response bus for multiple cycles.
[0316] The cDC holds the sequence of DMA commands until they are used by the adapter. To do so, the cDC maintains a descriptor list containing the descriptors in FIFO order. From the cDC's perspective, a descriptor may be a chunk of data of a certain size (e.g., 128 bits / 16 bytes or any other suitable size) that the adapter is free to use to fill with DMA commands, addresses, etc. The contents of the descriptor are opaque to the cDC. In some embodiments, the only requirement may be that access to the descriptor chunks be in-order according to FIFO order, with additional flexibility to support head / tail (read / write) pointer adjustments and separate reuse.
[0317] The cDC maintains active lists with a compile-time configurable maximum number of descriptors and remembers associated descriptors. Each active cDC list corresponds to one DMA adapter queue containing one or more jobs (subsequences of consecutive DMA commands). The adapter interacts with the cache through four request operations: get list, put list, write descriptor, and read descriptor.
[0318] Get List allocates a free list in the cDC and associates it with the provided queue ID, logically reserving space for the list. This operation returns the allocated list ID.<list ID、LID> and how many descriptors need to be read.
[0319] For an existing queue / list association, getting the list indicates to the cache the start of a new job on the same queue.
[0320] A list dispose declares the end of an active queue / list job, freeing entries that are no longer in use, and potentially closing the entire list / queue. Once a queue is terminated, the list is returned to the pool of free lists for future association with another queue.
[0321] The write descriptor adds one or more new descriptor entries to the end of the list specified by the queue ID and list ID at the write pointer position, and adjusts the write accordingly.
[0322] The read descriptor retrieves one or more descriptors from the head of the list specified by the queue ID and list ID at the read pointer position, adjusts the read pointer, and returns the retrieved descriptors in the response. Optionally, the command can also pop a descriptor entry from the list by adjusting the pop pointer.
[0323] Whenever the cDC evicts an idle list, it sends an eviction response message on the response channel, containing the evicted queue ID and list ID, and optionally additional eviction status.
[0324] These four operations can be merged in one cycle, and for high throughput, both the read and write descriptors may occur in one cycle.
[0325] Each request and response may include a client ID (CLIENT_ID), which uniquely identifies the adapter using the cDC, and a queue ID (QID) and list ID (LID), which together specify the cached list. Both may be used in some embodiments, since the cache may decide to evict a list / queue and reassociate the same list (LID) with a different queue requested by the adapter. In some embodiments, queue IDs may be reused across adapters, and therefore a (CLIENT_ID, QID) pair is needed to uniquely identify a queue.
[0326] An example flow between the DMA adapter and the cDC may be as follows:
[0327] The adapter receives a job request from the scheduler. The queue is not in use and the queue state does not contain a valid cDC LID.
[0328] The adapter issues a get list request with LID set to -1, asking for the number of descriptors it estimates it needs to complete the job. For example, a DMA adapter might ask for 32 descriptors.
[0329] If the adapter receives more job requests before receiving a response from the cache, the adapter issues more get list requests with LID set to -1.
[0330] A response to the first get list command is received.
[0331] This supplies a LID along with the number of descriptors the adapter should add to the cache. Since this is the first get of the list (no descriptors exist or are required), the "needed" number of descriptors will be the same as the "desired" number of descriptors.
[0332] All responses to additional get list commands to the same queue will have the same LID returned in the initial get list response.
[0333] Following the first get list response, the adapter associates the LID with the request queue, ie, stores the LID in its queue status table.
[0334] Following each get list response, the adapter fetches the "required" number of descriptors, i.e., issues a message load request to the cDM to fetch the descriptors from the appropriate location, which may be any suitable location, such as the host, dynamic random access memory (DRAM), programmable logic memory, or any other suitable location.
[0335] The adapter receives descriptors from the cDM and passes them to the cDC using the write descriptor command.
[0336] The adapter receives and executes job requests.
[0337] At this time, the queue is expected to have a valid LID. This property is guaranteed by the adapter having future job requests properly prioritized relative to this job request. If a valid LID does not exist, the adapter will exit without executing the job (as a 0 length job).
[0338] If a valid LID exists, the adapter performs the job and issues a series of read descriptor requests.
[0339] Descriptor read operations are pipelined, which means that an adapter is expected to have multiple descriptor reads in-flight during job execution.
[0340] Depending on the nature of the adapter, the adapter may request one or more descriptors in each request. The read request also commands the pop pointer to be incremented to match the number of descriptors already consumed. This is done in a timely manner to free up cache memory.
[0341] The adapter may monitor for incomplete response and insufficient descriptor errors and react accordingly.
[0342] The adapter completes the job.
[0343] When an adapter completes a job, it issues a put-list request.
[0344] A high performance pipelined adapter may overshoot the end of the job by N descriptors (N is the pipe depth), i.e., when it reaches the end of job state it will still have N descriptor read requests in-flight. The put list request tells the cache how many descriptors it can forget and how many must be refetched.
[0345] DMA adapters may overshoot their list acquisition allocations because the job size in number of descriptors is often not known in advance, and as a result the adapters may seek defaults that capture the most typical situations in which fewer descriptors are needed.
[0346] If the adapter knows the exact number of descriptors needed in advance, it may overestimate it (at the cost of using more cache space and thus evicting other queues) in order to have more descriptor fetches in-flight.
[0347] The put-list operation can be combined with a get-list and / or read-list descriptor if the next job happens to be to the same list.
[0348] After this sequence of operations has run its course to completion, the two per-list reference counters maintained by the cDC (one count of the counts outstanding for the list, the other count of the descriptors outstanding for the list) will both be 0. The list / queue then becomes eligible for eviction.
[0349] During processing, the adapter <qid>and <lid>An eviction response message may also be received with additional eviction descriptor location information, which causes the adapter to restabilize the list and refetch any lost entries.
[0350] The DMA adapter fetches DMA descriptors, writes them to the cDC list, and reads them back later to perform the requested DMA operation. The cDC may provide storage to the DMA adapter so that it can have enough requests in-flight to cover memory access latencies. The cDC's descriptor memory is finite (also specified at compile time) and when it is exhausted, idle lists and their stored descriptors are evicted. Eviction is only done for lists that are not currently processing a job. The evicted list is then available to be associated with other DMA queues. The freed descriptor memory entry is available to hold new entries. The eviction is propagated to the requesting DMA adapter through an eviction message, and the adapter must allocate a new list and refetch and write the evicted descriptors. The dynamic association between queues and lists keeps the cDC's tracking structure independent of the total number (and potentially many) of available queue IDs. The eviction timing may simplify DMA adapter design since eviction may only occur during well-defined points in the queue life (when there are no active jobs).
[0351] The cDC manages its internal descriptors and list resources without the involvement of any adapters.
[0352] The cache automatically allocates the available lists into a queue and reserves the required amount of descriptor memory space.
[0353] The cache automatically evicts queues that it believes are not currently in use. To avoid complex race conditions in the adapter, the cache maintains that the following conditions are met for a queue to be eligible for eviction:
[0354] The list associated with the queue has no pending list place operations, i.e., the list's reference counter (which is incremented for each list get and decremented for each place list) is 0. This means that the list is idle.
[0355] The list associated with the queue has no pending descriptors, since a write can only be pending after a list get that has not yet been closed by a list dispose. In other words, the list's reference counter, which is incremented by a specified number of descriptors for each list get response and decremented by a specified number of descriptors for each write descriptor, is zero.
[0356] Overall, this condition means that the queue will not be evicted while one (or more) jobs are executing. The queue will be evicted only after the in-flight jobs are completed (all get list operations encountered have been closed by receiving the same number of place list operations). However, this may be before the queue itself is fully executed and closed.
[0357] When a queue is evicted, the following can happen: The list associated with the queue is released to the free list pool and becomes available for use by new get list operations.
[0358] The descriptor memory locations holding the queue descriptors referenced by the list are released to the free descriptor memory pool and become available for use by new list get operations.
[0359] The cDC sends an eviction response message to the original user of the queue.
[0360] The Multiplexing and Demultiplexing Logic (cDC-MDML) 844 layer provides the necessary cDC for multi-adapter connections. The MDML is outside the cDC block, which means that the cDC adapter interface and behavior remains unchanged regardless of the number and nature of the adapters. The cDC to adapter API uses a request-response model.
[0361] The cDC consists of one logical thread that executes all requests in the order in which they are served.
[0362] The scheduler needs to manage traffic in any situation where multiple streams access a shared buffer resource or where the buffer resource is subject to backpressure. The scheduler may be composed of various scheduling entity types and may take a significant amount of time (sometimes tens of clock cycles) to complete a scheduling operation. To accommodate this, data movement may be scheduled on a per-job basis, where jobs may be 2kB. This is an example, and other job sizes may be used in other embodiments. Job response messages may be conditioned (i.e., aggregated) before being returned to the scheduler to avoid overloading them.
[0363] The host access handler HAH 828 may control the flow of the doorbell to the DMA adapter and coordinate access to the doorbell.
[0364] The HAH can handle all target accesses from both non-DMA and DMA-specific hosts.
[0365] Some embodiments include a data path unit DPU, as previously described. The DPU is a data path processor / accelerator. The DPU may have a programmable logic interface. In one embodiment, various elements of the DPU are formed from hardware within the NIC 109 and are therefore circuits. In some embodiments, the DPU may be implemented by one or two chiplets. In other embodiments, the DPU may be implemented at least partially in programmable logic or may be extended in programmable logic.
[0366] The DPU provides a command / event / data interface to the fabric and may implement data acceleration operations.
[0367] In some embodiments, the DPU is composed of two logic blocks working together to provide the DPU functionality, in other embodiments the logic blocks may be combined or provided by more than two logic blocks.
[0368] In an exemplary embodiment in which there are two logical blocks, the first logical block provides the network interface aspect of the DPU, referred to herein as DPU.Net 504, and shown generally in FIG. 2, as discussed above. The DPU.Net block builds on layer 2 (i.e., data link layer) functionality, which in some embodiments may be provided by the vSwitch 102. In other embodiments, the vSwitch may be omitted, at least in part, with at least some or all of the functionality provided by the DPU functionality. The second logical block provides the host / system on chip (SoC) interface aspect of the DPU, referred to herein as DPU.Host 502, and shown generally in FIG. 2 and FIG. 6, as discussed above. The DPU.Host block may be considered to be an instance of a DMA adapter.
[0369] Next, we provide an overview of the DPU subsystems, which support moving packets and other data to and from the device along with support for a set of data processing offloads. Each subsystem provides multiple channels for commands, event notifications, and data, and supports fan-out and load balancing across the fabric.
[0370] A command message may instruct the DPU to move data between sources and destinations through the offload engine's pipeline. The command message may specify the data source, destination, path through the offload pipeline, and parameters that control the behavior of the offload engine as the data traverses from the source to the destination.
[0371] Each DPU subsystem has a large managed memory called DPU Buffer subsystem (BufSS). BufSS can be a managed memory with functions such as explicit allocation / freeing / attaching. BufSS buffer can be a linked list structure and block allocation / freeing can be managed internally. The Buffer subsystem (BufSS) can be similar to DPU.Host and DPU.Net, but is not necessarily the same.
[0372] DPU buffers are used to stage data between commands and can be selected as a source of input data or a destination of output data. Only local DPU buffers can be used as sources. Local or remote DPU buffers can be used as destinations.
[0373] Some embodiments may support moving or copying the contents of the DPU buffer between the DPU.Host subsystem and the DPU.Net subsystem via the DPU conduit. The DPU conduit may be a data path between the DPU.Host and the DPU.Net. In some embodiments, this is provided by the NoC.
[0374] User logic within the programmable fabric area of the device uses the DPU by physically interfacing to its command, event, and data channel interfaces and submitting commands (with associated data) to the DPU through its command and U2D (User to DPU) data interfaces, respectively. Commands provide instructions to perform a subset of data fetching, processing, and delivery.
[0375] Processing data refers to moving the data through one of the DPU.Host or DPU.Net offload engine pipelines to transform or update the data depending on the action specified in the command. The offload engine may receive, process, generate, and output metadata carried with the data. Commands that perform processing consume offload engine bandwidth. Commands that fetch and deliver data consume buffer BufSS bandwidth. Commands that deliver data to a remote buffer consume NoC bandwidth.
[0376] The DPU subsystem processes commands and sends their output to an external interface (e.g., DMA to host memory or Ethernet transmission over the network), a local or remote DPU buffer, or a local D2U (DPU to User) data channel interface. When a command is completed, the DPU subsystem provides completion information to the fabric by writing an event to the event channel.
[0377] The user logic may respond to packets received from the network by physically interfacing to receive notification channels to wait for network receive events. When a packet receive notification is received, some (user-specified) frame bytes are output on the notification channel and the entire frame will be present in the DPU.Net buffer. The allocated buffer ID may be output as part of the receive notification. The user logic may then issue DPU commands as necessary, referencing the allocated buffer.
[0378] The user logic can receive doorbell and other MMIO (memory mapped input / output) accesses via a host access handler (HAH) interface.
[0379] The DPU comprises a DPU processing engine. The processing engine receives data from the host / SoC, the network, the fabric, or a buffer in the DPU, processes the data, and sends it to the host / SoC, the network, the fabric, or a buffer in the DPU. The fabric is provided by programmable logic. The processing engine may provide one or more data processing engines.
[0380] DPUs have buffers that are linked by a linked list. There can be one set of buffers for DPU.Host and one set of buffers for DPU.Net. In other embodiments, the buffers can be a shared resource that can be allocated to DPU.Host and DPU.Net as needed.
[0381] Flow transfers to and from the DPU may be explicitly initiated by the fabric logic. A DPU may support several different channels simultaneously. These channels may be, for example, virtual channels as discussed above. Many fabric "users" may be active simultaneously and supported by the DPU. In some embodiments, many parallel fabric interfaces may be supported so that the higher bandwidth (or packet rate) processed by the DPU can be fanned in / out to the slower fabric.
[0382] A DPU may process network packet receipt transparently from a network packet notification, which may be received for every network packet that enters the DPU but may not be considered received until a flow forwarding is submitted by the fabric to the DPU for processing.
[0383] Some embodiments may support cut-through semantics. To support this, processing "half-paths" may be provided. For example, a receive / read half-path may be provided that involves receiving notification that data is ready to be received, followed by receiving and processing the data. A process and send / write path may be provided that involves sending data followed by notification to the fabric that the send is complete.
[0384] Channels are used to pass messages and data between the DPU and the user logic (fabric). One or more of the following channel types may be supported: D2U (DPU to User Logic) data channel, passing header and payload data from the DPU to the user logic. U2D (User Logic to DPU) data channel, which passes header and payload data from the user logic to the DPU. Command channel, which passes command messages from the user logic to the DPU. An event channel to pass command completion messages from the DPU to the user logic, and A reception notification channel that passes packet arrival notifications from DPU.Net to user logic.
[0385] A DPU command contains (as arguments) one or more of the following: An event channel on which a completion event is generated after the command is executed, Optionally, a U2D data channel to the source data; and Optionally, a D2U data channel for destination data.
[0386] Different types of channels may have one or more of the following characteristics: Each channel connects user logic to either DPU.Host or DPU.Net. A channel is a stream that carries messages, for example an AXI stream. Credit-based flow control can be used in combination with TREADY (target ready) for transient backpressure; and Each message may be aligned to the start of a password.
[0387] In some embodiments, a channel connects user logic to either DPU.Net or DPU.Host. Commands submitted to a command channel are processed by the DPU subsystem to which the channel is connected. User logic may submit commands supported by the connected DPU subsystem. Command completion events can be routed to an event channel attached to the DPU subsystem that processes the command.
[0388] See Figure 12 for an overview of DPU.Host. It comprises DMA write adapter 529 (including a write scheduler) and DMA read adapter 531 (including a read scheduler), both of which interface with cDM 824. DMA write adapter 529 and DMA read adapter 531 can be treated as DMA adapters by the cDM circuitry as described above.
[0389] The two read engine pipelines Rd Eng 0 and Rd Eng 1 receive data from and output data to the host buffer streaming subsystem (BufSS) 520 and / or the DMA read adapter 531. The two write engine pipelines Wr Eng 0 and Wr Eng 1 receive data from and output data to the host buffer streaming subsystem (BufSS) 520 and / or the DMA write adapter 529.
[0390] In this embodiment, the DPU.Host has the following four accelerator engine pipelines: a read engine pipeline Rd Eng 0, including a read pipeline with an accelerator; A read engine write pipeline Rd Eng 1, which includes a read pipeline without an accelerator; a write engine pipeline Wr Eng 0 including a write pipeline with an accelerator; and A write engine write pipeline Wr Eng 1 that includes a write pipeline that does not have an accelerator.
[0391] However, it should be understood that this is only one example. There may be more or less than two read engine pipelines. There may be more or less than two write engine pipelines. The functionality provided by each pipeline may differ. Different pipelines may provide different accelerators. In some embodiments, both read pipelines may have one or more accelerators. In some embodiments, both write pipelines may have one or more accelerators.
[0392] The host buffer streaming subsystem BufSS 520 can receive and / or output data to the NoC and / or fabric. In some embodiments, data can be passed between the buffer streaming subsystem BufSS 520 of the DPU.Host and the buffer streaming subsystem BufSS 540 of the DPU.Net (described in more detail below). This can be through a DPU conduit that provides a data path through the NoC.
[0393] A command / event processing block 610 is provided to receive commands and generate any required events. The command / event processing block 610 can receive commands from the NoC and / or fabric. The fabric interface can be provided by physical input / output IO pins. The NoC can be used to send messages to the DPU. This can be by using the fabric interface, which can be presented as an AXI-S256b bus or any other suitable bus. The NoC itself can comprise switches pre-programmed with routing information. The command / event processing block 610 can output events to the fabric and / or NoC. The events can be provided in response to the completion of an associated command. The commands can be received via the fabric, HAH, or NoC in this exemplary embodiment. However, in other embodiments, the commands can alternatively or additionally be received via the application processor 111 (as shown in FIG. 2). The events can optionally be delivered to the CPU. The DPU data channel can optionally be mapped to the coherent memory space of the CPU.
[0394] The command / event processing block 610 determines which task should be processed next. The command determines the task that is executed. In general, there are many inputs to the command / event processing block 610 that need to be mapped to fewer offload paths (provided by the read and write engine pipelines). This is described in more detail below.
[0395] Please refer to FIG. 13, which shows an overview of the DPU.Net 504. In this embodiment, at least a portion of the vSwitch functionality described above may be provided by the DPU.Net 504. The DPU.Net 504 comprises a transmit data hub 547 and a receive data hub 550, both of which interface with the MAC 114. Two receive engine pipelines, Rx Eng 0 and Rx Eng 1, receive data from the receive data hub 550 and / or the buffer streaming subsystem (BufSS) 540 and output data to the network buffer streaming subsystem (BufSS) 540. The receive data hub may receive data directly from the receive data hub or through the network buffer streaming subsystem (BufSS) 540 as shown in FIG. 13. Two transmit engine pipelines, Tx Eng 0 and Tx Eng 1, receive data from the network buffer streaming subsystem (BufSS) 540 and output data to the buffer streaming subsystem (BufSS) 540 and / or the transmit data hub 547.
[0396] The network buffer streaming subsystem (BufSS) 540 can receive and / or output data to the NoC and / or fabric. In some embodiments, data can be passed between the DPU.Host buffer streaming subsystem (BufSS) 520 and the DPU.Net buffer streaming subsystem (BufSS) 540. This can be through the NoC and / or through the fabric. This can be through a DPU conduit.
[0397] A command / event processing block 612 is provided to receive commands and generate any necessary events. The command / event processing block 612 may receive commands from the NoC and / or fabric. The command / event processing block 612 may output events to the fabric and / or NoC. The events may be provided in response to the completion of an associated command. The commands may be received via the fabric or NoC in this exemplary embodiment.
[0398] The command / event processing block 612 decides which task should be processed next. The command decides the task to be executed. In general, there are many inputs to the command / event processing block 612 that need to be mapped to fewer offload paths (provided by the receive engine pipeline and the transmit engine pipeline). This will be explained in more detail later. Events can be optionally delivered to the CPU. The DPU data channel can be optionally mapped to the coherent memory space of the CPU. For DPU operation by the CPU, the DPU channel can be accessed from the CPU through the NoC.
[0399] The DPU.Host of FIG. 12 is configured to be used in conjunction with the DPU.Net of FIG.
[0400] Next, the logic flow of the DPU.Host will be described with reference to FIG. 14 and FIG.
[0401] FIG. 14 shows a schematic diagram of the logic flow from DPU.Host to a destination for a write operation. Data is provided to one or more buffers of the buffer streaming subsystem (BufSS) 520. The data is provided to the write engine pipeline 522 via a combining circuit 526. The write engine pipelines are each one of the write pipelines Wr Eng 0 and Wr Eng 1 of FIG. 12. The combining circuit 526 may be any suitable circuit. The combining circuit 526 may be omitted in some embodiments. The combining circuit 526 is configured to receive a command, which in this example is a write command. In this example, data from the buffer streaming subsystem (BufSS) 520 is being written to the destination. The destination may be any suitable destination, such as a target address, a local buffer of the buffer streaming subsystem (BufSS) 520, a data channel, a virtual channel, a remote buffer associated with the buffer streaming subsystem (BufSS) of DPU.Net, or a destination in the host computing device.
[0402] The write engine pipeline 522 performs the necessary processing depending on the command received. Data may be passed through (and processed by) the write engine pipeline or may bypass the write engine pipeline. The output of the write engine pipeline or the bypass path is provided as input to a fork circuit 528 that can direct the data to another buffer in the Buffer Streaming Subsystem (BufSS) 520 or to a DMA write adapter 529.
[0403] The DMA write adapter 529 may write data to a host computing device, to an application processor 111, or to any other destination that has a memory address that is mapped through the NoC. In some embodiments, the DMA write adapter may write data directly to the destination without the data having to be stored in a BufSS or other buffer first. The DMA write adapter may provide an event that is returned to the source of the write command. Thus, a pipeline may be able to interface directly with its I / O input subsystem, such as a DMA write adapter, and may be able to deliver data directly to the I / O subsystem without the use of an intermediate managed buffer.
[0404] When the buffers of the buffer streaming subsystem (BufSS) 520 receive data from the fork circuit 528, the buffers of the buffer streaming subsystem (BufSS) 520 may direct the data to DPU.Net or other destinations. When the buffers of the buffer streaming subsystem (BufSS) 520 receive data from the fork circuit 528, this may cause the buffers of the buffer streaming subsystem (BufSS) 520 to return an event to the source of the write command.
[0405] Write commands may consume headers from the data channel that, depending on the command, may be prepended to the destination data, overwrite a subset of the destination data, or be appended to the destination data.
[0406] There may be multiple write engine pipelines. The write engine pipelines may perform different processing. The different write engine pipelines may provide alternative processing paths for the data.
[0407] Figure 15 shows a schematic diagram of the logic flow from the source to the DPU.Host for a read operation. The data can be provided to one or more buffers in the Buffered Streaming Subsystem (BufSS) 520, or it can be provided directly by a DMA read adapter without the data having to first be stored in the BufSS or another buffer.
[0408] A coupling circuit 532 is provided that can receive data from one or more buffers of the buffered streaming subsystem (BufSS) 520 or from a DMA read adapter. The coupling circuit receives commands from the DMA read adapter 531. The data and commands can be output by the coupling circuit 532 to the read engine pipeline 524 or can bypass the read engine pipeline. The read engine pipeline is one of the write pipelines Rd Eng 0 and Rd Eng 1 of FIG. 12. The read pipeline can interface directly with its I / O subsystem (e.g., a DMA read adapter) and can receive data directly from the I / O subsystem without the use of an intermediate managed buffer.
[0409] The output or bypass path data of the read engine pipeline may be provided to another buffer in the Buffer Streaming Subsystem (BufSS) 520. The destination of the read data may be any suitable destination, such as a data channel, a virtual channel, a local buffer in the Buffer Streaming Subsystem (BufSS) 520, or a remote buffer associated with the DPU.Net in the Buffer Streaming Subsystem (BufSS). The destination may be accessed through the NoC or through the fabric in some embodiments. In some embodiments, the destination may be accessed through a direct connection.
[0410] The buffers in the Buffer Streaming Subsystem (BufSS) 520 can direct the data to DPU.Net or other destinations. The buffers in the Buffer Streaming Subsystem (BufSS) 520 that receive data from the combiner 532 or the read engine pipeline can direct events back to the source of the read command.
[0411] There may be multiple read engine pipelines. The read engines may perform different processing. Different read engines may provide alternative processing paths for the data.
[0412] Next, the logic flow of DPU.Net will be described with reference to FIG. 16 and FIG.
[0413] FIG. 16 shows a schematic diagram of the logic flow of DPU.Net to a destination. Data is provided to one or more buffers of the buffer streaming subsystem (BufSS) 540. The data is provided to a transmit engine pipeline 542 via a combining circuit 544 or other suitable circuit. The transmit engine pipeline is one of the transmit engine pipelines Tx Eng 0 and Tx Eng 1 of FIG. 13. The combining circuit 544 may be omitted in some embodiments. The combining circuit 544 is configured to receive a command, which in this example is a transmit command. In this example, data from the buffer streaming subsystem (BufSS) 540 is being transmitted to a destination. The destination may be any suitable destination, such as a local buffer of the buffer streaming subsystem (BufSS) 540, a data channel, a virtual channel, a remote buffer of the buffer streaming subsystem (BufSS) of the DPU.Host, or the MAC 114. The destination may be accessed through the NoC or through the fabric in some embodiments. In some embodiments, the destination may be accessed through a direct connection.
[0414] The transmit engine pipeline performs the necessary processing depending on the command received. Data may be passed through (and processed by) the transmit pipeline engine, or may bypass the transmit engine pipeline. The output of the transmit engine pipeline or the bypass path is provided as an input to a fork circuit 546 that can direct the data to another buffer in the Buffer Streaming Subsystem (BufSS) 540, or to the MAC 114 via a transmit data hub 547. The data hub 547 may comprise a FIFO and / or any other suitable circuitry. The data hub interfaces directly with the network MAC.
[0415] When a buffer in the Buffer Streaming Subsystem (BufSS) 540 receives data from the fork circuit 546, the buffer may direct the data to the DPU.Host or other destination. A buffer in the Buffer Streaming Subsystem (BufSS) 540 that receives data from the fork circuit 546 may direct an event back to the source of the send command.
[0416] When the MAC receives data from the fork circuit 546, the MAC may cause an event to be returned to the source of the send command.
[0417] Send commands may consume headers from the data channel that, depending on the command, may be prepended to the destination data, overwrite a subset of the destination data, or be appended to the destination data.
[0418] There may be multiple transmit engine pipelines. The transmit engine pipelines may perform different processing. The different transmit engine pipelines may provide alternative processing paths for the data.
[0419] 17 shows a schematic diagram of the logic flow of DPU.Net from a source, where data can be provided to one or more buffers in the Buffered Streaming Subsystem (BufSS) 540 or from the MAC 114.
[0420] A multiplexer 552 is provided that can receive data from one or more buffers in a Buffered Streaming Subsystem (BufSS) 540 or from a receive data hub 550 and optionally a MAC 114 via a FIFO 551. The receive data hub 550 may include multiple FIFOs.
[0421] The data may be output by the multiplexer 552 to a combining circuit 554 or other suitable circuit. The combining circuit 554 may receive commands. The data is output to the combining circuit, which may be provided to a receive engine pipeline 556 or may bypass the receive engine pipeline. The receive engine pipeline is one of the receive engine pipelines Rx Eng 0 and Rx Eng 1 of FIG. 13 . This output of the receive engine pipeline or bypass path may be provided to another buffer of the buffer streaming subsystem (BufSS) 540. The destination of the received data may be any suitable destination, such as a data channel, a virtual channel, a local buffer of the buffer streaming subsystem (BufSS) 540, or a remote buffer associated with the DPU.Host of the buffer streaming subsystem (BufSS). The destination may be accessed through the NoC or through the fabric in some embodiments. In some embodiments, the destination may be accessed through a direct connection.
[0422] The buffers in the Buffer Streaming Subsystem (BufSS) 540 may direct the data to the DPU.Host or other destination. The buffers in the Buffer Streaming Subsystem (BufSS) 540 that receive the data may direct events back to the source of the received command.
[0423] There may be multiple receive engine pipelines. The receive engine pipelines may perform different processing. The different receive engine pipelines may provide alternative processing paths for the data.
[0424] It should be appreciated that one or more of the configurations of Figures 14-17 may include a command queue, which may be provided by a FIFO or the like.
[0425] As mentioned above, DPU.Net and / or DPU.Host may be provided with one or more pipelines. These pipelines may be considered as offload pipelines. Each offload pipeline includes a set of offload engines, each of which performs computations on or transforms data flowing through the offload pipeline. A schematic diagram of an offload engine pipeline is shown in FIG. 18. In this example, the offload engine pipeline is provided by three engines, eng0, eng1, and eng2. This is just an example, and different pipelines may have more or less than three engines.
[0426] These offload engines are connected by the following set of buses: Packet Bus: This carries the packet / message payload to and from the offload engines. Argument bus: Provides arguments from command messages to each engine, and Offload Pipe Register Bus (OPR): Carries metadata output from offload engines to other offload engines, and command completion events.
[0427] The offload engine can temporarily backpressure the packet bus. The argument bus and register bus are fully pipelined.
[0428] The offload pipe register bus has two parts. One part maps to the event_engine_data field (with the output from the offload engine) in the command completion event, and the second part is a scratch area. Offload engine output metadata can be placed in either part as specified in the engine argument, allowing the command to control which output metadata fields are passed to the completion event. Completion events are described in more detail below.
[0429] One or more of the offload engines operate in cut-through mode, so for these engines, the results generated either overwrite the incoming payload data (on the packet bus) at the same offset, or are written or appended at a later offset within the payload data. A SF_EDIT (store-and-forward) engine further along the pipeline is used to forward the results to an earlier location when necessary.
[0430] One or more offload engines may support incremental processing. After processing a message, the internal state of the computation can optionally be saved to a context store. The saved context can then be loaded before processing another message. The context state is designed to be local to each engine, with internal forwarding implemented if necessary to ensure that the context is available for back-to-back commands.
[0431] Refer to FIG. 19, which shows an example of a DPU.Host offload engine pipeline. This same pipeline structure is used for both the read offload engine pipeline and the write offload engine pipeline. The host pipeline may have a direct path to / from the DMA. In this example, the pipeline has a first CRC engine 560 followed by a SF (store-forward) edit engine 564 followed by a cipher engine 564, a second CRC engine 566, and a CT edit engine 567. The SF edit engine may perform operations requiring packet buffering (store-forward). The cipher engine may provide encryption and / or decryption functions. The cipher function may be any suitable cipher function, such as an AES-XTS cipher function.
[0432] 20 and 21, which are schematic diagrams illustrating an embodiment of a DPU.Net receive offload engine pipeline. The net pipeline may have a direct path from the networking layer (MAC).
[0433] 20 shows a first receive offload engine pipeline with accelerator (RX Eng 0), which includes a first checksum engine 568 followed by a crypto engine 570 followed by a second checksum engine 572 followed by a CRC engine 574 followed by a CT editing engine 575. The crypto engine may support AES-GCM.
[0434] 21 shows the second receive offload engine pipeline (RX Eng 1). This receive pipeline does not include an accelerator. It includes a first checksum engine 568 followed by a CRC engine 574 followed by a CT edit engine 575.
[0435] Please refer to Figures 22 and 23 which show a schematic of the DPU.Net transmission followed by the CT Edit Engine 575 pipeline. These net pipelines have a direct path to the networking layer (MAC).
[0436] 22 shows a first transmit pipeline (TX Eng 0) with an accelerator, which includes a CRC engine 580 followed by a first checksum engine 582 followed by a first SF editing engine 584 followed by an encryption engine 586 followed by a second checksum engine 588 followed by a second SF editing engine 590. The encryption engine may support AES-GCM.
[0437] 23 shows the second transmit pipeline (TX Eng 1), which does not include an accelerator. It includes a CRC engine 592 followed by a first checksum engine 594 followed by an SF editing engine 596.
[0438] It should be understood that the various functions or engines shown in Figures 19-23 are by way of example only. One or more alternative or additional functions or engines may be provided in any of the pipelines shown. Any one or more of the functions or engines shown may be omitted from any of the pipelines shown.
[0439] The engine will now be described in more detail.
[0440] The CSUM offload engine is used to verify or generate TCP / UDP style Internet checksums. It calculates a one's complement checksum over a specified region of the capsule payload, seeded with an initial value from the command message. In addition, data from the offload register pipe can be included in the checksum. The result is either a 16b checksum (calculate operation) or a 1b good / bad status (verify). The result is written to the offload pipe register bus. Thus, the supported operations are both calculated and verified.
[0441] The CRC offload engine calculates a CRC over a specified region of the payload data. The resulting CRC is written to the register bus. The CRC is then delivered to the fabric on a command completion event and can be written into the capsule payload or compared to a value in the payload by a downstream EDIT engine.
[0442] The CRC offload engine may or may not support incremental processing. For example, the DPU.Net CRC engine supports a context for incremental processing. The DPU.Host does not require the CRC offload engine to support incremental processing. In other embodiments, the DPU.Host may use a CRC offload engine that supports incremental processing. In this case, the DPU.Net may use a CRC offload engine that may or may not support incremental processing. In some embodiments, none of the CRC offload engines support incremental processing.
[0443] Both AES-XTS offload engines in DPU.Host support AES encryption and decryption using the XTS algorithm. Regions in the capsule payload are encrypted or decrypted. Regions may include entire logical blocks or subsets of logical blocks. Data before or after the region is passed unmodified. Region length may be a multiple of 16B. The two AES-XTS offload engines may support incremental processing where a block offset is provided as an argument to each command and incremental context is calculated in a pipelined manner.
[0444] Each AES-XTS offload engine has a tightly coupled memory (also known as a keystore) that stores keys. Each entry holds a pair of AES keys. Each operation retrieves its key from the command message or from the keystore. If keys are provided in a command, they can be saved in the keystore for use by later commands.
[0445] The SF_EDIT and CT (cut through)_EDIT offload engines are used to copy data and compare values. The source data can come from the packet bus, the register bus (output of a previous offload engine), or the argument bus (from a command message). The source data can be copied to the packet bus (overwriting the packet / message at a given offset) or copied to the register bus. For a compare operation, the source data is compared to the destination location and the result of the comparison is written to the register bus.
[0446] CT_EDIT operates in cut-through mode, so the destination of the copy operation is constrained to be after the source offset.
[0447] SF_EDIT has a store-and-forward buffer and can forward results generated by a previous offload engine.
[0448] In some embodiments, each edit block can perform two edit operations per DPU command. The operand size is 1B, 2B, 4B, 8B, or 16B in some embodiments. Other embodiments may use different operand sizes.
[0449] The CRC result calculated for a given packet can be output as metadata and included in the checksum CSUM calculation for the same packet. Both the CRC and CSUM results can be edited into the packet by the SF_EDIT engine.
[0450] One or more of the following copy options may be supported by the SF_EDIT and CT (Cut-Through)_EDIT offload engines. Payload to payload, Payload to Register Bus (downstream engines and / or events), From the register bus (upstream engine) to the payload, and From arguments to payload.
[0451] One or more of the following comparison options may be supported by the SF_EDIT and CT (Cut-Through)_EDIT offload engines: Arguments and payload, and The register bus (upstream engine) and the payload.
[0452] The result of the comparison is written to the register bus.
[0453] Next, the AES-GCM encryption and decryption offload engine is described. The DPU.Net crypto offload engine may support the GCM (Galois / Counter mode) algorithm. The transmit path instance of the crypto offload engine may support encryption and authentication. The receive path instance of the crypto offload engine may support decryption and authentication. Fields within a packet are encrypted, decrypted, or authenticated, and an integrity check value (ICV) or AES-GCM GHASH hash value is generated.
[0454] The AES-GCM engine may support three modes of operation for encryption, decryption, and authentication: 1. Normal mode: A complete packet is submitted to the engine and a processed packet is generated along with its ICV and sent out to the fabric. 2. Incremental mode: Packet fragments are submitted to the engine, processed, and sent to the fabric. An internal context memory stores and updates intermediate packet state needed to continue operation across fragments. When all fragments of a packet have been processed, an ICV is generated and sent to the fabric. 3. Fragment mode: Fragments are submitted to the engine, processed, and sent to the fabric with a GHASH calculated over the fragment. The fabric logic is responsible for calculating the final ICV.
[0455] The bulk cipher AES-GCM may be available via modes 1, 2, and 3. IPSEC may only be available via modes 1 and 2.
[0456] Bulk data encryption / decryption and authentication operations will now be described with reference to Figure 24. The offload engine processes a subset of the capsule payload identified by a "Region Start" and a "Region Length". The Region Start indicates the start of the payload to be processed and the Region Length indicates the length of the payload region from the identified start of the region. This encryption region is divided into two parts.
[0457] The first part of the length AUTH_DATA_LEN is only authenticated. The second part is both authenticated and encrypted.
[0458] The capsule payload that is not part of an encrypted sub-region is passed through unmodified, which is shown in Figure 24 as the unencrypted region of the payload.
[0459] The integrity check value is written to the register bus, after which it can be written into the packet or compared to an ICV stored in the packet, which may be by using a downstream edit offload engine.
[0460] Next, the operation of Bulk Data Authentication only will be described: The Offload Engine calculates an Integrity Check Value over a subset of the capsule payload identified by the "Region Start" and "Region Length". The ICV is written to the Register Bus.
[0461] Next, incremental and fragmented GCM (storage) operations are described.
[0462] In order to correctly process these regions, the following invariants must be maintained across the "region start" and "region length" fields submitted to the engine for incremental and fragmentation GCM operations: All fragments are processed in order. The AAD (additional authenticated data) for the packet is provided entirely in the first fragment. The encrypted region length in all fragments is a multiple of, e.g., 16B, in all cases except the final region. All subsequent operations include the length of the AAD present in the first fragment, and the cumulative length of all regions processed in previous fragments.
[0463] For IPSEC decryption, the following additional constraints may apply:
[0464] For authentication only: -If the packet SA (security association) uses an ESN (extended sequence number), the cryptographic field of the first fragment is 12+16 * It is n bytes long, where n >= 0. - If the packet SA uses a sequence number (SN), the encryption area of the first fragment is at least 32 bytes long and the last fragment is at least 34 bytes long.
[0465] For encryption and authentication, the encryption area of the first fragment may be at least 32 bytes long and the last fragment may be at least 34 bytes long.
[0466] The performance of the AES-GCM engine matches that of the offload pipeline.
[0467] Each streaming processor pipeline is not logically shared so that the pipeline scheduler does not have to manage this. Multiple instances of a common pipeline function are provided for simpler blocks (e.g., CRC), or a single shared subsystem is provided for more complex blocks (e.g., cryptographic functions) that can provide a fixed bandwidth division, and thus appear as N logically separate units).
[0468] The offload engines (OEs) are controlled via per-engine command structures provided as part of the submitted DPU command. Depending on the command arguments, the OEs can output information that is consumed by downstream CT_EDIT or SF_EDIT OEs or sent out in command event notifications. The OEs pass information between themselves via the OPR bus. In some embodiments, some of the bits of information are sent out verbatim in the command's event notification.
[0469] OE reads from or writes to the OPR at, for example, a 4 byte offset.
[0470] OE may be provided with instructions for each command. A command that you want to include an OE transformation for may include one or more of the following command elements: 1. dpu_cmd_hdr_cmn structure that provides basic command information 2. dpu_oe_cmd_hdr structure; this header consists of a concatenation of pipeline specific OE command header structures. The specific structure for the pipeline being used can be initialized and provided as part of the command. 3.OE command structure (dpu_ * Depending on the value of dpu_oe_cmd_hdr, between 0 and N (where N is the maximum number of OEs in the pipeline) command structures follow to provide the OE command. Every OE command structure is followed by OE specific command data (dpu_ * _eng_cmd_data) may follow.
[0471] An offload engine (OE) command set may begin with an OE pipeline command header (dpu_oe_cmd_hdr), whose fields are interpreted per pipeline. Every pipeline defines a separate structure that contains a field for every OE in the pipeline. The value of the field indicates whether a command is present for that particular OE in the submitted command, and if so, whether it contains command data. If the value of the field is 0, no command for the OE structure is present in the pipeline. Two bits may be provided if the edit OE performs up to two edit operations.
[0472] Separate structures may be provided for the DPU.Host read and write pipelines and the DPU.Net TX0, TX1, RX0 and RX1 pipelines.
[0473] If the command structure includes command data (cmd data) as part of the command (e.g., an initial CRC or encryption key), this may be provided after the engine structure value. For example, if an AES-GCM command structure has a command containing key data, it follows the CSUM OE command structure.
[0474] The command header is followed by a set of command structures, one structure per OE, except for EDIT OE, which can have up to two structures per engine.
[0475] FIG. 25 illustrates DPU.Host DMA scheduling diagrammatically. The DPU.Host submits commands to the cDM data mover. To avoid head-of-line blocking, the DPU.Host may submit requests only when the cDM is known to have buffering available to store the request. For example, the DPU.Host may reserve buffer space. If the cDM does not have enough buffering available, the cDM may backpressure the initiator and block other requests that could potentially be ahead.
[0476] In this example, the source is a command channel 600. A source is ready when it has at least one command message and the input data for that command is ready. The destination can be a cSI VC 607, and each command channel is associated (by configuration) with a DMA write VC set.
[0477] Write scheduling is now described. For writes, the DMA write descriptor references a VC that is a member of the command channel's DMA write VC set. Thus, each source is configured with a mapping to a subset of destinations, which is the set of destinations to which packets from the source can be delivered. Packets are forwarded to the offload path when the command channel's VC set has space for a batch of write requests.
[0478] Destinations send flow control credits to the DPU scheduler, giving it visibility of available space for packets. The scheduler may be provided in the command / event processing block 610 of FIG. 12. The scheduler also has visibility of which sources are ready to supply packets. A source is eligible to be scheduled if it is ready and its set of destinations has space to accept a batch of packets. The scheduler selects a source from among the eligible sources and sends a job request message to a multiplexer 606 that multiplexes between the sources. The multiplexer 606 forwards the batch of packets from the selected source to the DPU offload pipeline 604, which may be a write engine pipeline as described above. The output of the DPU offload pipeline is provided to a second multiplexer 608 that directs the output to the requested VC 607.
[0479] Next, read scheduling will be described. For reads, the source is A command channel can be scheduled when it has at least one DMA read descriptor. The destination is a cSI VC, and each command channel is associated (by configuration) with a DMA read VC set. A DMA read descriptor references a VC that is a member of the command channel's DMA read VC set. In this case, the DPU offload pipeline can be a read engine pipeline as discussed above.
[0480] Each command channel can be associated with a separate VC set, or multiple channels can share a VC set.
[0481] In some embodiments, the internal buses within the DPU (e.g., to / from the BufSS) are segmented. For example, the segmented buses may be 4x128b or 8x128b in some embodiments. The end and start of a packet may be segment aligned.
[0482] Please refer to FIG. 26 which shows a schematic of the data path of DPU.Host.
[0483] There is a data path from the cDM 824 to the first and second DMA read adapter 531 instances. There is a data path from the first DMA read adapter 531 instance to read engine pipeline Rd Eng0. There is a data path from read engine pipeline Rd Eng0 to the buffer subsystem BufSS 520. There is a data path from the buffer subsystem BufSS 520 to read engine pipeline Rd Eng0. There is data from the second DMA read adapter 531 instance to read engine pipeline Rd Eng1. There is a data path from read engine pipeline Rd Eng1 to the buffer subsystem BufSS 520. There is a data path from the buffer subsystem BufSS 520 to read engine pipeline Rd Eng1.
[0484] There is a data path from the buffer subsystem BufSS 520 to the write engine pipeline Wr Eng0. There is a data path from the write engine pipeline Wr Eng0 to the first DMA write adapter 521 instance.
[0485] A data path exists from the write engine pipeline Wr Eng0 to the buffer subsystem BufSS 520. A data path exists from the first DMA write adapter 521 instance to the cDM 824. A data path exists from the buffer subsystem BufSS 520 to the write engine pipeline Wr Eng1. A data path exists from the write engine pipeline Wr Eng1 to a second DMA write adapter 521 instance. A data path exists from the write engine pipeline Wr Eng1 to the buffer subsystem BufSS 520. A data path exists from the second DMA write adapter 521 instance to the cDM 824.
[0486] There is a data path from the fabric to the buffer subsystem BufSS 520. There is a data path from the NoC to the buffer subsystem BufSS 520. There is a data path from the DPU conduit to the buffer subsystem BufSS 520. Since the DPU conduit is also provided through the NoC, a multiplexer MUX is provided. The multiplexer MUX receives data from the NoC, separates the DPU conduit data from other NoC data, and provides that data through a separate data path.
[0487] There is a data path from the buffer subsystem BufSS 520 to the fabric. There is a data path to the buffer subsystem BufSS 520 to the NoC. There is a data path from the buffer subsystem BufSS 520 to the DPU conduit. The multiplexer MUX multiplexes the DPU conduit data and other data for the NoC onto the NoC.
[0488] Please refer to FIG. 27 which shows a schematic diagram of the DPU.Net data path.
[0489] There is a data path from the MAC 114 to the receive data hub 550. There is a data path from the receive data hub 550 to the buffer subsystem BufSS 540. There is a data path from the buffer subsystem BufSS 540 to the receive engine pipeline Rx Eng0. There is a data path from the receive engine pipeline Rx Eng0 to the buffer subsystem BufSS 540. There is a data path from the buffer subsystem BufSS 540 to the receive engine pipeline Rx Eng1. There is a data path from the receive engine pipeline Rx Eng1 to the buffer subsystem BufSS 540.
[0490] A data path exists from the buffer subsystem BufSS 540 to the transmit engine pipeline Tx Eng0. A data path exists from the transmit engine pipeline Tx Eng0 to the buffer subsystem BufSS 540. A data path exists from the transmit engine pipeline Tx Eng0 to the transmit data hub 547. A data path exists from the buffer subsystem BufSS 540 to the transmit engine pipeline Tx Eng1. A data path exists from the transmit engine pipeline Tx Eng1 to the buffer subsystem BufSS 540. A data path exists from the transmit engine pipeline Tx Eng1 to the transmit data hub 547. A data path exists from the transmit data hub 547 to the MAC 114.
[0491] There is a data path from the fabric to the buffer subsystem BufSS 540. There is a data path from the NoC to the buffer subsystem BufSS 540. There is a data path from the DPU conduit to the buffer subsystem BufSS 540. Since the DPU conduit is also provided through the NoC, a multiplexer MUX is provided. The MUX receives data from the NoC, separates the DPU conduit data from other NoC data, and provides that data through a separate data path.
[0492] There is a data path from the buffer subsystem BufSS 540 to the fabric. There is a data path from the buffer subsystem BufSS 540 to the NoC. There is a data path from the DPU conduit to the buffer subsystem BufSS 540. The multiplexer MUX multiplexes the DPU conduit data and other data for the NoC onto the NoC.
[0493] The DPU channels (commands, events, or data) may not be carried within the DPU conduit, but are carried over a separate bus within the DPU. The DPU channels and conduits are multiplexed onto the NoC. The NoC may provide multiple lanes. As just one example, there may be four lanes. The DPU conduit may be runtime configured to operate across a specific number of lanes to allow static bandwidth partitioning to be achieved.
[0494] Please refer to Fig. 30 which shows in a simplified manner the functionality of the DPU.Host command and event processing block 610 or the DPU.Net command and event processing block 612. The event processing block comprises a scheduler 613 which controls a write command controller 611 and a read command controller.
[0495] The DPU buffers provided in the DPU.Host and DPU.Net buffer subsystems are used to stage packets and data during operations. The DPU buffers can be used as payload sources or destinations for various commands, as shown in Figures 26 and 27. The DPU.Host and DPU.Net subsystems can each have separate buffer BufSS instances. Commands can source data from a local DPU buffer BufSS instance. Commands can deliver data to a local or remote DPU buffer BufSS instance. Buffer commands can copy data from a DPU.Host buffer to a DPU.Net buffer or vice versa.
[0496] As illustrated in FIG. 28, each buffer instance is organized as an array of memory blocks. The memory blocks may be 256B blocks in some embodiments. The DPU buffer is a linked list of blocks identified by a DPU buffer ID. The DPU buffer ID includes a head pointer and a tail pointer. There may be a maximum buffer size. In some embodiments, this may be 16KiB. In the example shown in FIG. 28, the logical buffer includes five blocks numbered 1 through 5, with 1 numbered at the beginning and 5 numbered at the end. The physical buffer indicates that the blocks that make up the logical buffer are distributed throughout the buffer and are not necessarily contiguous.
[0497] As can be seen from Figures 26 and 27, data is received at the BufSS. Logically, this can be from a channel, an offload engine pipeline, a network ingress (in the case of DPU.Net), or a DPU conduit.
[0498] The supported DPU buffer operations include one or more of the following: Stream in and allocate, Stream in and append, Stream in and overwrite, Stream out, Release, and Allocate.
[0499] With Stream In and Allocate, blocks are allocated and the inbound data is stored in the allocated buffer. The DPU Buffer ID is returned. If there are insufficient blocks available, the data is dropped and an error is returned.
[0500] Stream-in and append appends data to an existing buffer, given a tail pointer and a byte offset within a tail block. If the byte offset is zero, the existing tail buffer is not modified and data is written starting in the new block. The new tail pointer is returned. The head pointer remains the same. If there are insufficient blocks available, the data is dropped and an error is returned. When a new tail block is allocated, the old data in it is completely overwritten.
[0501] Stream-in and overwrite, given a DPU buffer ID (beginning pointer) and a byte offset, overwrites the buffer with the inbound data, expanding the buffer (if necessary) to accommodate any data written beyond the end of the original tail block. When a new tail block is allocated, the old data in it is completely overwritten.
[0502] It is possible to overwrite at any offset, but the hardware follows a linked list pointer to the block where the overwrite begins. If the offset is large, linked list resources are consumed to skip to the first block.
[0503] In stream out, data is streamed out of the indicated buffer, given a head pointer and a byte offset. Optionally, a block of the buffer is freed. A runtime configuration allows freed data blocks to be written to zeros.
[0504] If the offset is large, then linked list resources are consumed by skipping to the first block.
[0505] In a release operation, the blocks identified by the buffer IDs (head and tail) are released.
[0506] A runtime configuration allows freed data blocks to be written to zeros.
[0507] In an allocate operation, a given number of blocks are allocated and a DPU buffer ID is returned.
[0508] The DPU buffer subsystem also provides buffering for the data channels.
[0509] Next, scheduling of offload commands will be described: An offload command can be one or more of a host read, a host write, a network receive, and a network send.
[0510] Command processing may proceed in the following steps. - submission (to the command channel by Fabric), -Reserve DMA buffering (DMA reads and writes only), -Issue a DMA read request (DMA read only), - Wait for input data, - Execute the offload (passed through the offload engine pipeline or bypass path); -Deliver the output data; -Delivers a completion event.
[0511] Next, host write scheduling will be described. Before a host write command is eligible to be executed, the DPU reserves buffer space in the DMA subsystem, which may be in the cDM 824. This ensures that the DMA subsystem does not backpressure the offload pipeline, thus preventing head-of-line blocking between command channels. DMA buffers are provisioned for a set of DMA targets, known as the destination set. The DMA targets may be a PCIe interface, a DDR DRAM, an application processor 111, etc.
[0512] Each DPU.Host command channel maps to a destination set (through a runtime N:1 mapping configuration). Space is reserved in the mapped destination set buffer for each host write command before the command is forwarded to the "fetch input" stage. When destination sets are in contention (i.e., the DMA target is backpressured), the DPU DMA scheduler 613 arbitrates between the command channels competing for resources. The DPU DMA write scheduling is controlled by the scheduler 613, which controls the write command controller 611, both of which are provided by the command / event processing block 610, as shown in Figure 30. The DPU DMA scheduler is a configurable scheduler and supports the following policy components: Bandwidth limits, priority and deficit round-robin bandwidth sharing.
[0513] Please refer to FIG. 29, which shows a schematic of how the DMA bandwidth is shared among six command channels c0, c1, c2, c3, c4, c5 and c6. The bandwidth achieved by each command channel is compared to the channel's bandwidth limit. Command channels that reach their limit are not considered further. In the example of FIG. 29, this removes command channel c2. The priority component selects the subset of remaining channels with the highest priority. Channels c0, c1 and c2 have priority 2, channel c3 has priority 1 and channels c4 and c4 have priority 0. This means that in the example of FIG. 29, channels c0 and c1 are selected. The deficit round robin component then shares the available bandwidth among the channels selected by the priority component according to their configured weights. In the illustrated example, channels c0, c3 and c4 have weights equal to 2, channel c1 has a weight of 1 and the remaining channels have a weight of 4. In this example, c0 with weight 2 is allocated twice the bandwidth of c1 with weight 1.
[0514] To ensure that offload engine bandwidth is not wasted, a command cannot enter the offload pipeline unless there is an available destination buffer, so while a host write command is waiting for DMA buffer space, subsequent commands on the same channel are blocked.
[0515] Now consider host read scheduling. A subset of the DPU.Host command channels support DMA reads. Each of these maps (by runtime configuration) to a set of destinations. The available bandwidth of the DMA targets in each set is shared between the command channels by the DPU DMA scheduler. DPU DMA read scheduling is controlled by scheduler 613, which controls read command controller 609, both of which are provided by command / event processing block 610, as shown in Figure 30.
[0516] Commands proceed to the execution stage only if their input data is available, this is done to ensure that offload pipeline bandwidth is not wasted.
[0517] If the source is a DPU buffer, the input data is immediately available.
[0518] If the source is a U2D data channel, the input data is available once the entire message is received by the DPU.
[0519] If the source is DMA read data, the input data is available once the entire message has been fetched from the DMA target.
[0520] While a command is waiting for its input data, subsequent commands on the same command channel are blocked in the DPU command processor.
[0521] One or more of the following rules may constrain the order in which commands are processed through the offload engine.
[0522] Commands on the same channel that take the same offload engine path (or bypass) perform the offload in submission order.
[0523] Commands on the same channel fetch their input data in submission order.
[0524] Commands submitted to one command channel may perform processing steps in any order relative to commands on a different command channel if U2D input data is not fetched.
[0525] Commands submitted to different command channels that fetch input data from the same U2D channel fetch the data in command submission order.
[0526] For a given command, offloads are performed in the order given by the offload engine pipeline.
[0527] Commands that deliver output through the same destination deliver that output in offload execution order: local DPU buffer is a single destination, remote DPU buffer is a single destination, each D2U data channel is a separate destination, DMA writes are a single destination, and each network transmit priority channel is a separate destination.
[0528] The completion event order coincides with the output delivery order when the same event channel is used.
[0529] A host write command is completed when the DMA write is committed to the DMA subsystem. DPU command completion events are sequenced after the data is written to the cSI. When a completion event is received:
[0530] Data written to the DMA by subsequent commands may be ordered after the write of the completed command.
[0531] Data written to the DMA via the message store interface can be ordered after the write of the completed command, and message stores use the same cSI VC as DPU writes.
[0532] DMA reads due to subsequent commands may be ordered after the write of the completed command.
[0533] A message load read may be ordered after a completed command write if the same CSI VC is used.
[0534] A network send command may be completed when a packet begins to leave the network port.
[0535] The scheduler 613 may be configured to ensure that the offload paths are kept as full as possible with as few gaps as possible, which may be to ensure that data throughput is maximized, and / or that the data rate is maximized, and / or that the number of offload paths is kept to a minimum.
[0536] The scheduler synchronizes data with each task. For example, a task may be to write data from one location to another. A write command may be provided separately from data that needs to be read from one location and then written to another location.
[0537] The scheduler monitors the available tasks, determines which tasks are eligible (i.e., do not cause head-of-line blocking and / or meet other criteria), and arbitrates among the eligible tasks.
[0538] In the above examples, a command may consist of a single command or a set of sub-commands. The commands described above are examples of a single command or a set of sub-commands or steps. These examples of commands may use one of the offload pipelines in which different sub-commands may be implemented. In some embodiments, the completion of a command or set of sub-commands all causes a completion event to be delivered. In general, a command or set of sub-commands may be associated with specific data (if applicable) and the completion of the command or set of commands with a completion event. A command or set of sub-commands as described above may be scheduled as a single task by the scheduler.
[0539] In some embodiments, two or more commands and / or sets of sub-commands may be provided in a single control capsule on the command channel. Each command or set of sub-commands must be scheduled separately. Upon completion of each command or set of sub-commands, a completion event is provided. In some embodiments, the next command or set of sub-commands may only be implemented if the previous command or set of sub-commands is completed. In some embodiments, the next command or set of sub-commands is scheduled only when, for example, the source and / or destination are ready. For example, the source may need to be eligible to be scheduled and the destination set has space to accept the batch of packets.
[0540] Different commands in a capsule may be associated with different offload pipelines and may be scheduled independently and executed in parallel, with ordering between commands defined by the structure of the offload pipelines and scheduler policies.
[0541] A barrier command may be used to ensure serialization of otherwise unordered command execution, e.g., one or more commands after the barrier command are executed or performed only after one or more commands before the barrier command.
[0542] In some embodiments, alternatively or additionally, a program or a reference to a program stored on the network interface device may be provided in the command channel instead of a single command or set of sub-commands as described above, which may in some embodiments be provided in a single control capsule. The program may allow a series of commands (and / or one or more sets of sub-commands) to be executed.
[0543] A program may support conditional operations. In other words, an action may be performed and depending on the result of the action, another action may be performed, or the result may determine which of two or more actions are performed. A simple example of a program providing conditional operations may be to encrypt some data and, if the encryption was successful, decrypt the data and check if the CRC data matches.
[0544] Alternatively or additionally, the program may support loops, which may be repeated until a condition is met, as described above, or alternatively, the loop may be repeated a set number of times.
[0545] A program may include one or more barrier commands.
[0546] A program may support function calls: a program may call a function, which will initiate or execute one or more actions associated with that function.
[0547] A program may be treated, from a scheduling perspective, as two or more separate commands (and / or sets of subcommands), each of which needs to be scheduled separately. Completion of a scheduled command (and / or set of subcommands) triggers a completion event. Thus, a program may generate one, two or more completion events.
[0548] One or another command sequence may be scheduled in response to an event output or other local program state. This may allow conditional execution loops to be supported. The representation of the command program may be viewed as a VLIW (very long instruction word) processor instruction set architecture (and thus may support equivalent features such as function calls, subroutines, etc.).
[0549] In some embodiments, the next command or set of sub-commands is scheduled only when the source and / or destination are ready, e.g., the source may need to be eligible to be scheduled and the destination set has space to accept the batch of packets.
[0550] The program may cause two or more different offload pipelines to be used when implementing the program. Where references to the program are provided, the program is stored on the network interface device. In some embodiments, the program may be stored in memory that is local to or easily accessible to the command and event processing functions of the DPU.
[0551] In some embodiments, the DPU.Net may have a data classification function. This may be provided, for example, by the inbound data hub 550 in some embodiments. This data classification function may be to determine the priority of the received data, or where it came from, and / or the like. Based on the classification, the inbound data hub may provide a command capsule for the received data along with a reference to a program as described above. This may control, for example, the routing and / or processing of the received data. For example, in the example shown in FIG. 34, the program may cause the received data to be routed to a match / action engine. The data may be routed directly to the net BufSS without reference to a program.
[0552] To illustrate an example of a CPU 650 on a NIC issuing a DPU command, reference is made to FIG. 31, which illustrates a schematic of various components of the NIC. This may be a read command or a write command. In this example, the DPU command may be a DPU.Host command. The CPU may be any suitable CPU, such as the application processor 111 shown in FIG. 2. The CPU supports memory mapped I / O. The CPU may have a cache memory 659.
[0553] DPU commands 652 are stored in memory 651. This memory is accessible (shared memory) to the CPU and to the MR DMA (message request DMA) function 653 of the HAH 828 (see FIG. 6). In response to a MR DMA doorbell from a queue pair QP 654 in the CPU, the MR DMA (message request DMA) function fetches the DPU commands stored in the memory. Memory-mapped traffic between memory 651 and the MR-DMA function is via the AXI interconnect 655 for memory-mapped traffic (AXI-M). The MR-DMA function 653 outputs the commands in the DPU command capsule onto the AXI-S (AXI streaming) bus. This is provided to the command and event processing block of the DPU.Host. This can be via the fabric or NoC, or via a direct connection.
[0554] For completeness, AXI interconnect 655 has a connection to cSI-to-AXI bridge 656 (described above), which has connections to cSI 822 and NoC 115.
[0555] To illustrate an example where an external CPU 660 (external to the NIC) issues a DPU command, refer to FIG. 32, which shows a schematic of various components of a NIC. This may be a read command or a write command. In this example, the DPU command 661 may be a DPU.Host command. The external CPU may have a cache memory 664.
[0556] The DPU commands 661 are stored in memory 663. This memory is accessible (shared memory) to the CPU and to the MR DMA (Message Request DMA) function 653 of the HAH 828 (see FIG. 6). In this embodiment, the shared memory resides in the external CPU, as does the DPU data associated with the command. For example, the DPU command may be a write command and the DPU data may be the data to be written.
[0557] In response to the MR DMA doorbell from the queue pair QP 666 in the CPU, the MR DMA function fetches the DPU command stored in memory. Memory-mapped traffic between memory 663 and the MR-DMA function is via the host PCIe interface 112, PCI-cSI bridge 820, cSI 822, cSI-AXI bridge 656, and AXI-Interconnect 655 for memory-mapped traffic (AXI-M). The MR-DMA function 653 outputs the command in the DPU command capsule onto the AXI-S (AXI streaming) bus. This is provided to the command and event processing block of the DPU.Host as described in connection with FIG. 30.
[0558] Data associated with a DPU write command may be provided to the DPU using the same path as the command. The data may be provided in the same capsule as the command or in a different capsule.
[0559] In one modification to the configuration described in relation to Figures 31 and 32, MR-DMA functionality may alternatively or additionally be provided in the DPU.Host itself.
[0560] In some embodiments, a SoC interface may be provided between the DPU and the SoC. A DMA interface to support this interface may be provided by the cSI, fabric, or by a dedicated DMA interface in the DPU.
[0561] In some embodiments, the DPU and / or vSwitch may be considered data streaming hardware. The cSI may support memory mapping (MMIO) and data streaming. The HAH may provide memory mapping to data streaming translation. One or more of the CPU and PCI interfaces may be memory mapped. One or more of the interfaces to the DDR, NoC, and fabric may be memory mapped. The AXI-M interconnect is memory mapped.
[0562] Some embodiments support handover of DPU processing to the CPU. This may allow reprogramming (or programming) of at least a portion of the programmable logic while keeping the NIC online. This handover may be used when the fabric hardware fails, e.g., a bug is detected. Alternatively or additionally, handover may be used when the fabric needs to be reprogrammed.
[0563] Alternatively or additionally, there may be no fabric implementation of the algorithm (e.g., there may only be a software prototype). In this latter case, the DPU processing is not "handed over" from the fabric to the CPU, but instead is simply provided by the CPU.
[0564] Some embodiments may effectively move one or more DPU processing functions performed by the fabric (programmable logic) to a CPU. This may be a CPU in a host computing device (as described in connection with FIG. 31) or a CPU associated with a network interface device (as described in connection with FIG. 32). This may be temporary while the programmable logic is being reprogrammed, or may be more permanent. The DPU processing may be moved back to the programmable logic after reprogramming / programming is complete.
[0565] In some embodiments, the application that provides the DPU processing may be provided by the CPU rather than the programmable logic. Programmable logic is a finite resource, and providing one or more DPU processing functions to the CPU may conserve programmable logic. This may allow one or more applications that provide DPU processing to be launched on the CPU rather than the fabric.
[0566] Alternatively or additionally, this may allow testing of DPU processing functionality that is invoked in software on the CPU before reprogramming of the programmable logic is performed to provide the DPU processing functionality. This may allow one or more applications that provide DPU processing to be invoked on the CPU rather than the DPU.
[0567] Thus, in some embodiments, commands can be issued interchangeably to the same DPU channel. For example, there can be a coordinated handover between one datapath user instance and another datapath user instance to change the source of the command. Thus, one datapath user instance can be a CPU and another datapath user instance can be provided by the fabric.
[0568] When DPU processing functions are offloaded to the CPU, the AXI-S path between the DPU and the MR DMA can be used to provide data and / or events to the CPU. The data is routed through the MR DMA, which converts the AXI bus transactions into a queue pair data structure that can be efficiently managed by software running on the CPU 650.
[0569] Alternatively or additionally, data and / or events from DPU.Host may be provided to the NoC via multiplexer 508. The NoC may provide data to the cSI via cSI-NoC bridge 826. From the cSI, the data may be passed to a cSI-AXI bridge to the AXI interconnect. The data is then directed through the MR DMA, which converts the AXI bus transactions into a queue pair data structure that can be efficiently managed by software running on the CPU 650.
[0570] Please refer to Figure 33 which shows the modifications to the DPU.Host shown in Figure 12. The DPU.Host comprises all the DPU blocks shown in Figure 12 with the addition of a DMA function block 620. The DMA function block 620 provides DMA device type, queue pair processing, and optionally some offloads such as TSO (TCP segmentation offload).
[0571] Please refer to Figure 34, which shows the modifications to the DPU.Net shown in Figure 13. The DPU.Host of Figure 33 is adapted to be used in conjunction with the DPU.Net of Figure 34.
[0572] DPU.Net comprises all of the DPU blocks shown in FIG. 13 with one or more additional blocks. The additional blocks may eliminate the requirement for some or all of the virtual switch components. A first match action engine MAE 626 and a second match action engine 630 are provided. A caching subsystem 628 is also provided that receives data from the two match action engines MAE and outputs data to the two match action engines MAE. The first match action engine MAE 626 is configured to provide output to the outbound data hub 547 and to the caching subsystem 628. The first match action engine MAE is configured to receive input from the buffered streaming subsystem (BufSS) 540 and the caching subsystem 628.
[0573] The second match action engine 630 is configured to receive input from the receiving data hub 547 and the caching subsystem 628. The second match action engine is configured to provide output to the buffered streaming subsystem (BufSS) 540 and the caching subsystem 628.
[0574] DPU.Net also includes a virtual NIC receive VNRX engine 624 and a virtual transmit VNTX engine 622. The VNRX engine 624 receives inputs from the NoC via a multiplexer 632, from receive plug-ins or accelerators provided in the fabric, and / or from the buffered streaming subsystem (BufSS) 540. The VNRX engine 624 provides output to the same or different receive plug-ins or accelerators provided in the fabric.
[0575] The VNTX engine 624 receives input from transmit plug-ins or accelerators provided in the fabric. The VNTX engine 624 provides output via a multiplexer 632 to a buffered streaming subsystem (BufSS) 540, the fabric, and / or a same or different transmit plug-in or accelerator provided in the NoC.
[0576] In some embodiments, data from the receive data hub 550 may be provided directly to one or more receive plug-ins or accelerators. In some embodiments, data from the second match action engine may be provided directly to the VNRX engine 624. In some embodiments, data may be provided directly from the second match action engine to one or more receive plug-ins or accelerators. In some embodiments, data may be provided directly from one or more receive plug-ins or accelerators to the second match action engine.
[0577] In some embodiments, data may be provided directly from one or more transmit plug-ins or accelerators to the transmit data hub 547. In some embodiments, data may be provided directly from the VNTX engine 622 and / or one or more transmit plug-ins or accelerators to the first match action engine. In some embodiments, data may be provided directly from one or more transmit plug-ins or accelerators to the transmit data hub 547.
[0578] The MAE may perform any suitable functions, such as an analysis match action function, an encapsulation function, and / or a decapsulation function.
[0579] The MAE may implement the virtual switching function using a rule-driven analysis match action engine. For example, rules may be provided by a driver. Each rule may provide a set of match criteria and a set of actions to apply to packets that meet those criteria.
[0580] The MAE may perform virtual switching functions and other offloads. mapping packets from an ingress virtual port to an egress virtual port; Duplicating a packet to two or more egress ports; and Encapsulation and decapsulation; Connection tracing and NAT (Network Address Translation), Packet filtering and Packet labeling and ECN (Explicit Congestion Notification Marking) and and packet and byte counts.
[0581] MAE is A match engine (ME), which is a streaming processor that analyzes packets and performs a rule table lookup in the cache subsystem; a regeneration hub that performs packet duplication and packet dropping when necessary; and an action engine (AE), which is a streaming process that invokes actions indicated by matched rules.
[0582] The match engine first analyzes the incoming packet, which can be a three-step process: 1. Analyze outer headers that may be part of the encapsulation. Headers analyzed include Ethernet, VLAN (virtual local area network), IP (internet protocol) and UDP headers. 2. Look up the header field and source port in an external rule table, which may be in a STCAM (smart ternary content addressable memory) or BCAM (binary content addressable memory) or any other suitable memory. A key is formed from a subset of the header fields plus some metadata, and rules match an arbitrary subset of the key bits. The lookup result may identify one or more of the following: encapsulation present (if any), fields related to connection tracking (to be used later), and an external rule ID. 3. Parse the remaining encapsulation headers (if any), then parse the inner headers (or only the inner headers). Parsing restarts at the beginning of the frame. If encapsulation is present, headers already parsed in step (1) and identified as part of the encapsulation are skipped. Typically, further encapsulation headers are then parsed, followed by the inner headers. If encapsulation is not present, inner frame parsing restarts at the beginning of the frame.
[0583] The VNTX engine 622 processes packets sent by the driver through the host interface and / or received through the ingress interface and may perform one or more of the following functions on behalf of the driver: -Checksum offload -VLAN (Virtual Local Area Network) Insertion Offload -Packet validation (e.g., enforcing source addresses, firewalls and / or the like).
[0584] The VNRX engine or processor may handle packets destined for the host or embedded processor. It may perform one or more of the following functions on behalf of the driver that receives the packets: -Packet Classification -Checksum functions, e.g. calculation and verification -Flow steering and / or RSS (Receive Side Scaling) -Packet filtering.
[0585] The transmit and receive plug-ins or accelerators may provide any suitable functionality. Plug-ins are implemented within the fabric. Plug-ins may be hardware accelerators. The use of plug-ins may facilitate customization of devices. This may allow the same device to be customized for different end users or applications. Alternatively or additionally, the use of plug-ins allows the same device architecture to be used for several different applications.
[0586] Data may exit at one point in the data path, go to a plug-in or accelerator, and be re-injected back into the data path. This re-injection may be via the same or a different plug-in or accelerator. Data may or may not be re-injected back into the data path.
[0587] It should be appreciated that in some embodiments, the Buffer Streaming Subsystem (BufSS) 540 and / or the Buffer Streaming Subsystem (BufSS) 520 may provide a routing function that allows data to be moved between different parts of the DPU and / or different parts of the NIC. In some embodiments, data is provided to or from one or more plug-ins or accelerators via the Buffer Streaming Subsystem (BufSS). Data is provided in capsules as discussed above. The Buffer Streaming Subsystem (BufSS) uses capsule headers to route capsules that contain data. Capsule metadata may support encoding of capsule routes and / or provide references to programs and states for the control processor.
[0588] The DPU command / event API may support programmatic input / event stream output in some embodiments. The DPU API may be optionally virtualized in some embodiments. In some embodiments, the DPU API may be controlled by the CPU and / or fabric.
[0589] The data is routed through the NoC and / or fabric in some embodiments.
[0590] See FIG. 35, which illustrates an example of how a NIC of some embodiments may be deployed. The NIC may be surrounded by CPU cores 672 with their respective caches and memories 673. The CPU cores 672 (e.g., CPU core blocks) and memory blocks may provide a particular function, such as an operating system or hypervisor. One or more of the CPU core blocks and respective memory blocks may be provided as part of the NIC. The NIC may enable data to be moved between the CPU cores via the NIC using one or more of the mechanisms described above for moving data.
[0591] If the CPU is external to the NIC, the DPU command may be issued as described in connection with Figure 32. If the CPU is internal to the NIC, the DPU command may be issued as described in connection with Figure 31.
[0592] The methods of some embodiments are described with reference to FIG.
[0593] As referenced at S1, the command information is received at an interface circuit of the datapath circuit, which may be a DPU. The command information may be received via a command channel supported by the interface circuit. The command information is received from a plurality of datapath circuit user instances, which may be any of the embodiments described above. The command information indicates a path for associated data through the datapath circuit and one or more parameters or arguments for one or more data processing operations provided by a first circuit of the datapath circuit. The first circuit may be one or more of the offload engines. The datapath circuit may be configured to move data to and from a network interface device.
[0594] As referenced at S2, the method includes providing the associated data over a data channel supported by the interface circuit.
[0595] S1 and S2 may be performed in any order, or even simultaneously.
[0596] As referenced in S3, the method includes providing respective command completion information to a plurality of datapath user instances via one or more event channels, the one or more event channels being supported by the interface circuitry.
[0597] The present disclosure may be illustrated in the following non-limiting examples. Other embodiments may be derived from the claims and other disclosures herein.
[0598] Example 1. A network interface device, comprising: a network interface configured to interface with a network, the network interface being configured to receive data from the network and transmit data to the network; a host interface configured to interface with a host device, the host interface configured to receive data from the host device and transmit data to the host device; and a data path circuit configured to cause data to be moved at least one of to or from the network interface device, the data path circuit comprising: a first circuit for providing one or more data processing operations; and an interface circuit supporting a plurality of channels, the plurality of channels comprising: a command channel for receiving command information from a plurality of datapath circuit user instances, the command information indicating a path for associated data through the datapath circuit and one or more parameters for the one or more data processing operations provided by the first circuit; an event channel for providing respective command completion information to the plurality of datapath circuit user instances; and a data channel that provides the associated data.
[0599] Example 2. The network interface device of example 1, wherein the plurality of data path circuit user instances are provided by one or more of a central processing unit on the network interface device, a central processing unit in the host device, and a programmable logic circuit of the network interface device.
[0600] Example 3. The network interface device of example 1, wherein the data path circuitry comprises a command scheduling circuit configured to schedule commands for execution, the commands being associated with the command information, and wherein the command scheduling circuitry schedules one of the commands when at least a portion of the associated data is available and a data destination is reserved.
[0601] Example 4. The network interface device of example 1, wherein the command information includes at least one of one or more commands, a program that causes the one or more commands to be executed when started, and a reference to a program that causes the one or more commands to be executed when started.
[0602] Example 5. The network interface device of example 3, wherein the command scheduling circuitry is configured to cause a command completion event to be provided on one of the event channels when a command is completed.
[0603] Example 6. The network interface device of example 4, wherein the program is configured to cause execution of two or more commands upon startup, each of the two or more commands being associated with a respective command completion event.
[0604] Example 7. The network interface device of example 4, wherein the program is configured to cause execution of two or more commands upon startup, the execution of one of the two or more commands being dependent on a result of execution of another of the two or more commands.
[0605] Example 8. The network interface device of example 4, wherein the program is configured to support, upon startup, a loop that is repeated until one or more conditions are met.
[0606] Example 9. The network interface device of example 4, wherein the program is configured to call the function upon startup to cause one or more actions associated with the function to be performed.
[0607] Example 10. The network interface device of example 4, wherein a barrier command is provided between a first command and a second command to cause the first command to be executed before the second command.
[0608] Example 11. The network interface device of Example 4, wherein the data path circuit includes a data classifier configured to classify data received by the network interface and provide a reference to a program that, upon activation, causes one or more commands to be performed depending on the classification of the data, the reference to the program being command information for the data received by the network interface.
[0609] Example 12. A network interface device as described in example 1, wherein the circuitry for providing one or more data processing operations comprises one or more data processing offload pipelines, the data processing offload pipelines comprising a series of one or more offload engines, each of the one or more offload engines configured to perform a function on data as the data passes through a respective one of the data processing offload pipelines.
[0610] Example 13. The network interface device of Example 12, further comprising one or more direct memory access adapters providing an input / output subsystem for the data path circuitry, the one or more direct memory access adapters interfacing with one or more of the data processing offload pipelines to receive data from and / or deliver data to one or more of the data processing offload pipelines.
[0611] Example 14. The network interface of example 1, wherein different data path circuit user instances are configured, when in use, to issue commands to the same one of the command channels.
[0612] Example 15. The network interface device of example 1, wherein one of the data path instances is configured to take over providing multiple commands over the same command channel from another of the data path instances.
[0613] Example 16. The network interface device of example 1, wherein the first circuit comprises a first host data processing section and a second network data processing section.
[0614] Example 17. The network interface device of Example 16, further comprising a data path between the first host data processing unit and the second network data processing unit, the data path being configured to transfer data from one of the first host data processing unit and the second network data processing unit to the other of the first host data processing unit and the second network data processing unit.
[0615] Example 18. The network interface device of Example 17, wherein the first host data processing unit includes a first set of buffers, the second network data processing unit includes a second set of buffers, and the data path is provided between the first set of buffers and the second set of buffers.
[0616] Example 19. A network interface device as described in Example 17, comprising a network-on-chip, the data path being provided by the network-on-chip.
[0617] Example 20. A method is provided in a network interface device, comprising: receiving command information at an interface circuit of a data path circuit, the command information being received over a command channel supported by the interface circuit, the command information being received from a plurality of data path circuit user instances, the command information indicating a path for associated data through the data path circuit and one or more parameters for one or more data processing operations provided by a first circuit of the data path circuit, the data path circuit being configured to cause at least one of moving data to or from the network interface device; providing the associated data over a data channel supported by the interface circuit; providing respective command completion information to the plurality of data path user circuit instances via one or more event channels, the one or more event channels supported by the interface circuit.
[0618] The description of the inventive configurations provided herein is for illustrative purposes and is not intended to be exhaustive or limited to the disclosed forms and examples. The terms used herein are selected to explain the principles of the inventive configurations, practical applications, or technical improvements to the art found in the market, and / or to enable others skilled in the art to understand the inventive configurations disclosed herein. Modifications and variations may be apparent to those skilled in the art without departing from the scope and spirit of the inventive configurations described. Accordingly, reference should be made to the following claims, rather than the foregoing disclosure, as indicating the scope of such features and implementations.< / lid> < / qid>
Claims
1. 1. A network interface device, comprising: a network interface configured to interface with a network, the network interface being configured to receive data from the network and transmit data to the network; a host interface configured to interface with a host device, the host interface configured to receive data from the host device and transmit data to the host device; and a data path circuit configured to cause data to be moved to or from the network interface device, the data path circuit comprising: a first circuit for providing one or more data processing operations; and an interface circuit supporting a plurality of channels, the plurality of channels comprising: a command channel for receiving command information from a plurality of datapath circuit user instances, the command information indicating a path for associated data through the datapath circuit and one or more parameters for the one or more data processing operations provided by the first circuit; an event channel for providing respective command completion information to said plurality of datapath circuit user instances; and a data channel that provides the associated data.
2. The plurality of data path circuit user instances include: a central processing unit on said network interface device; a central processing unit within the host device; and The network interface device of claim 1 , wherein the network interface device is provided by one or more of the programmable logic circuits of the network interface device.
3. 2. The network interface device of claim 1, wherein the data path circuitry comprises a command scheduling circuit configured to schedule commands for execution, the commands being associated with the command information, the command scheduling circuitry scheduling one of the commands when at least a portion of the associated data is available and a data destination is reserved.
4. 2. The network interface device of claim 1, wherein the command information includes at least one of one or more commands, a program that, when started, causes the one or more commands to be executed, and a reference to a program that, when started, causes the one or more commands to be executed.
5. 4. The network interface device of claim 3, wherein the command scheduling circuitry is configured to cause a command completion event to be provided to one of the event channels when a command is completed.
6. The program, when started, (a) causing the execution of two or more commands, each of the two or more commands being associated with a respective command completion event; and / or (b) causing the execution of two or more commands, the execution of one of the two or more commands being dependent on a result of the execution of another of the two or more commands; and / or (c) supporting loops that are repeated until one or more conditions are met; and / or The network interface device of claim 4 , further configured to: (d) invoke the function to cause execution of one or more actions associated with the function.
7. 5. The network interface device of claim 4, wherein a barrier command is provided between the first command and the second command to cause the first command to be executed before the second command.
8. 5. The network interface device of claim 4, wherein the data path circuitry comprises a data classifier configured to classify data received by the network interface and to provide a reference to a program that, upon activation, causes one or more commands to be performed depending on the classification of the data, the reference to the program being command information for the data received by the network interface.
9. 2. The network interface device of claim 1, wherein the circuitry for providing the one or more data processing operations comprises one or more data processing offload pipelines, the data processing offload pipelines comprising a series of one or more offload engines, each of the one or more offload engines configured to perform a function on the data as it passes through a respective one of the data processing offload pipelines.
10. 10. The network interface device of claim 9, comprising one or more direct memory access adapters providing an input / output subsystem for the data path circuitry, the one or more direct memory access adapters interfacing with one or more data processing offload pipelines to receive data from and / or deliver data to one or more of the data processing offload pipelines.
11. 2. A network interface as claimed in claim 1, wherein different data path circuit user instances are configured, when in use, to issue commands to the same one of the command channels.
12. 2. The network interface device of claim 1, wherein one of the data path instances is configured to take over providing multiple commands over a same command channel from another of the data path instances.
13. The first circuit includes: A first host data processing unit; a second network data processing unit; a data path between the first host data processor and the second network data processor, the data path configured to transfer data from one of the first host data processor and the second network data processor to the other of the first host data processor and the second network data processor; The network interface device of claim 1 .
14. 14. The network interface device of claim 13, wherein the first host data processing section includes a first set of buffers and the second network data processing section includes a second set of buffers, the data path being provided between the first set of buffers and the second set of buffers.
15. A method is provided in a network interface device, comprising: receiving command information at an interface circuit of a data path circuit, the command information being received over a command channel supported by the interface circuit, the command information being received from a plurality of data path circuit user instances, the command information indicating a path for associated data through the data path circuit and one or more parameters for one or more data processing operations provided by a first circuit of the data path circuit, the data path circuit being configured to cause at least one of moving data to or from the network interface device; providing the associated data over a data channel supported by the interface circuit; providing respective command completion information to the plurality of data path user circuit instances via one or more event channels, the one or more event channels being supported by the interface circuit.
Citation Information
Patent Citations
Architecture for offload of linked work assignments
US20190317802A1