In recent years, there has been an increase in the use of hardware offload units to assist functions performed by programs executing on host computers. Examples of such hardware offload units include FGPAs, GPUs, smartNICs, etc. Such hardware offload units have improved performance and efficiency requirements of the host computers, and are driving towards specialized accelerators in datacenters. However, there has been a lack of solutions for performing a chain of offload operations with several different hardware offload units.
Some embodiments of the invention provide a method for configuring multiple hardware offload units of a host computer to perform operations on packets associated with machines (e.g., virtual machines or containers) executing on the host computer and to pass the packets between each other efficiently. For instance, in some embodiments, the method configures a program executing on the host computer to identify a first hardware offload unit that has to perform a first operation on a packet associated with a particular machine and to provide the packet to the first hardware offload unit. The packet in some embodiments is a packet that the particular machine has sent to a destination machine on the network, or is a packet received from a source machine through a network and destined to the particular machine.
In addition to configuring the program to provide the packet to the first hardware offload unit, the method also configures the first hardware offload unit to perform the first operation on the packet, to identify a second hardware offload unit that has to perform a second operation on the packet, and to provide the packet to the second hardware offload unit. The method further configures the second hardware offload unit to perform the second operation on the packet.
In some embodiments, the method configures the first hardware offload unit to provide the packet to the second hardware offload unit by writing to a register of the second hardware offload unit. In other embodiments, the process configures a hardware offload unit to provide the packet to another hardware offload unit by writing to a memory of the host computer, and providing a notification to the second hardware offload unit that it needs to retrieve the packet from the host computer's memory.
In some cases, the method of some embodiments configures the second hardware offload unit to provide the packet back to the program after performing the second operation on the packet, while in other cases it configures (1) the second hardware offload unit to provide the packet to a third hardware offload unit after performing the second operation on the packet, and (2) configures the third hardware offload unit to perform a third operation on the packet.
The program that identifies the first hardware offload unit in some embodiments is an operating system of the host computer. In other embodiments, this program is a hypervisor over which virtual machines execute on the host computer. In some embodiment, the program performs an operation on the packet before providing the packet to the first hardware offload unit to perform a first operation and/or performs an operation on the packet after the second hardware offload unit and/or another hardware offload unit has performed an operation on the packet.
The operations performed by the program and the hardware offload units in some embodiments are packet forwarding operations and/or middlebox service operations. Also, in some embodiments, the program and/or hardware offload units use a set of attributes of the packet (e.g., header values of the packet) to identify the packet forwarding and/or middlebox service operation to perform on the packet, and/or to identify the processing program or hardware offload unit that has to process the packet next.
The preceding Summary is intended to serve as a brief introduction to some embodiments of the invention. It is not meant to be an introduction or overview of all inventive subject matter disclosed in this document. The Detailed Description that follows and the Drawings that are referred to in the Detailed Description will further describe the embodiments described in the Summary as well as other embodiments. Accordingly, to understand all the embodiments described by this document, a full review of the Summary, the Detailed Description, the Drawings and the Claims is needed. Moreover, the claimed subject matters are not to be limited by the illustrative details in the Summary, the Detailed Description and the Drawings.
The novel features of the invention are set forth in the appended claims. However, for purposes of explanation, several embodiments of the invention are set forth in the following figures.
In the following detailed description of the invention, numerous details, examples, and embodiments of the invention are set forth and described. However, it will be clear and apparent to one skilled in the art that the invention is not limited to the embodiments set forth and that the invention may be practiced without some of the specific details and examples discussed.
Some embodiments of the invention provide a method for configuring multiple hardware offload units of a host computer to perform operations on packets associated with machines (e.g., virtual machines or containers) executing on the host computer and to pass the packets between each other efficiently. For instance, in some embodiments, the method configures a program (e.g., operating system, hypervisor, etc.) executing on the host computer to identify a first hardware offload unit that has to perform a first operation on a packet associated with a particular machine and to provide the packet to the first hardware offload unit. The method also configures the first hardware offload unit to perform the first operation on the packet, to identify a second hardware offload unit that has to perform a second operation on the packet, and to provide the packet to the second hardware offload unit.
The method further configures the second hardware offload unit to perform the second operation on the packet, and then to provide the packet back to the program, or to provide the packet to a third hardware offload unit, which it configures to perform a third operation on the packet. In some embodiments, the method configures each hardware offload unit to provide the packet after the unit's processing of the packet to another hardware offload unit, or to return the packet back to the program in case the hardware offload unit is the last unit in a chain of units that processes the packet. Also, in some embodiments, the method configures the program to perform operations on the packet before providing the packet to a hardware offload unit, or after receiving the packet from a hardware offload unit.
The operations performed by the program and the hardware offload units in some embodiments are packet forwarding operations and/or middlebox service operations. Also, in some embodiments, the program and/or hardware offload units use a set of attributes of the packet (e.g., header values of the packet) to identify the packet forwarding and/or middlebox service operation to perform on the packet, and/or to identify the processing program or hardware offload unit that has to process the packet next.
The processing units execute one or more software processes 115 and machines 125 that are stored in one or more memories 110. The machines 125 are endpoint machines, such as virtual machines (VMs) or containers in some embodiments. These machines send and receive packets through the physical network interface card (PMC) of the host computer. In some embodiments, the PNIC of the host computer is a smart NIC 112d, which is one of the hardware offload units of the host computer. The software processes 115 are packet processors that perform forwarding operations (L2 switching and L3 routing operations) and/or middlebox service operations (e.g., firewall, load balancing, etc.) on the packets.
In some embodiments, one or more of the software processes 115 are configured to offload one or more operations from the host computer's processing units 105 to the hardware offload units 112a-d. Moreover, in some embodiments, each particular hardware offload units can be configured to identify another hardware offload unit that has to perform a subsequent operation on the packet processed by the particular hardware offload unit, and to notify this other hardware offload unit that it needs to process the packet. This is in contrast to a technique that would have each hardware offload unit return the packet to the host computer, in order for a packet processor 115 on the host computer to identify a subsequent hardware offload unit that needs to process the packet next.
As shown, the process 200 initially determines (at 205) whether any packet-processing operation (e.g., forwarding or middlebox operation) has to be performed on the packet. If so, the process determines (at 210) whether the packet processing operation has to be performed by the process 200 or another software packet processor executing on the host computer, or whether the next packet processing operation should be offloaded to a hardware offload unit. In some embodiments, the process 200 uses a set of attributes of the packet (e.g., header values of the packet) to identify the packet forwarding and/or middlebox service operation to perform on the packet, and/or to determine whether it or a hardware offload unit has to process the packet.
When the process 200 determines (at 210) that it, or another software packet processor executing on the host computer, has to process the packet, it transitions to 215. At 215, the process 200 or the other software packet processor performs the identified packet processing operation (e.g., a forwarding or middlebox service operation), and then returns to 205. On the other hand, when the process determines (at 210) that it should offload the processing of the packet to a particular hardware offload unit, it directs (at 220) the particular hardware offload unit to process the packet, and then transitions to 225 to await this particular hardware offload unit or another hardware offload unit to return the processed packet. In some embodiments, the process 200 directs the hardware offload unit to process the packet by writing the packet to a register of the particular hardware offload unit. In other embodiments, the process 200 writes the packet to a location in the host-computer memory 110 and notifies the particular hardware offload unit that it has to retrieve the packet from the host-computer memory.
The process waits at 225 until it receives the packet from the particular hardware offload unit that it called at 220, or from another hardware offload unit that was called by this particular hardware offload unit or other hardware offload units in performing a chain of operations that started when the process called the particular hardware offload unit at 220. After receiving the packet, the process transitions from 225 back to 205 to determine whether a software packet processor or a hardware offload unit has to perform additional operations on the packet. If so, the process 200 transitions to 210, which was described above. Otherwise, the process 200 ends.
After performing (at 310) an operation on the packet, the process 300 determines (at 315) whether it has to perform any other operations on the packet. In some embodiments, this determination involves determining whether the packet's flow identifier matches the match records of any other match-action records of any remaining packet-processing pipeline stages of the hardware offload unit that do not require providing the packet to another hardware offload unit or back to the packet processor 115.
When the process 300 determines (at 315) that it has to perform another operation on the packet, it transitions back to 310 to perform the identified operation (e.g., to perform the operation associated with the action record associated with the next match record with which packet has been matched). Otherwise, when the process determines (at 315) that the hardware offload unit does not need to perform any other operations on the packet, it determines (at 320) whether it has to provide the packet to another hardware offload unit.
This determination in some embodiment entails the process matching the packet's flow identifier with a match record that has an associated action record, which specifies the forwarding of the packet to another hardware offload unit. In some embodiments, the action record specifies a particular port of the current hardware forwarding element that is associated with the next hardware forwarding element.
When the current hardware forwarding element determines (at 320) that it has to provide the packet to another hardware offload unit, the current hardware forwarding element in some embodiments writes (at 325) the packet to a register of the next hardware forwarding element. In other embodiments, the current hardware forwarding element (at 325) writes the packet back to a memory location of the host computer, while writing a notification in the register of the next hardware forwarding element to notify it that it needs to retrieve the packet from the stored memory location on the host computer. After 325, the process 300 ends. When the process 300 determines (at 320) that it does not need to provide the packet to another hardware offload unit, it returns (at 330) the packet to the packet processor 115, and then ends.
Upon receiving the pointer, the first hardware offload unit 112a can process its match/actions stages without involvement of the processing units of the host computer. The first hardware offload unit can then pass the packet to the next hardware offload unit 112b, which then performs its packet-processing operations before passing the packet to the next hardware offload unit. This process continues until all the hardware offload units have processed the packet. The communication between the hardware offload units in some embodiments is done through a doorbell mechanism where the current hardware offload unit provides a notification (i.e., pushes a “doorbell”) to trigger the next hardware offload unit to read from the memory address (specified by a pointer) for its own processing. In other embodiments, this communication is achieved using a message queue where the action from the current hardware offload unit sends a request to the next hardware offload unit's request queue with enough information to trigger the next hardware offload unit to start its own pipeline.
The approach illustrated in
For example, when a packet is received by the host operating system, it will process it based on the configuration pipeline. At certain stage of this processing, say cryptography, or HQM, the host OS needs to send the packet back to a hardware offload unit and then receive it back from this unit to continue its processing. This involves multiple PCIe transactions and will also use host's processor resources to identify the next hardware offload unit to perform the next offloaded operation. Even though some of the hardware offload units can be integrated with the processor, to communicate with them might still require host processor involvement, which is costly. Based on empirical performance data, some embodiments perform offloading for certain data sizes, as offloading provides benefits for these data size as otherwise the cost of submitting the job from CPU would dominate.
Different embodiments use different techniques to allow one hardware offload unit to write to the main memory of the host computer and/or to the memory of another hardware offload unit, and then to provide notification to the second hardware offload unit that it needs to process the newly written data. Some embodiments leverage cache coherency techniques to allow the hardware offload units and the host computer communicate.
In recent years, devices have participated in cache coherency. For instance, AMD opened its cache coherent interface to RDMA adapter vendors who had designed RDMA devices that participate in cache coherence protocol of AMD processor. Similarly, after its acquisition of Altera, Intel opened up its cache-coherent protocol to Altera FPGAs, such that some Altera FPGA can participate in the cache-coherent protocol of Intel processors. And one can implement a networking accelerator or adapter using an Altera FPGA.
In some embodiments, a first hardware offload unit is cache coherent with main memory of the host computer and/or with the memory of a second hardware offload unit. The second hardware offload unit in such a case can snoop (in the cache coherent protocol sense) on the memory location to which the first hardware offload unit writes. This memory location is part of cache-coherent memory space.
It is very efficient for the second hardware offload unit to leverage the cache coherent protocol. The second hardware offload unit will maintain a cache copy of the memory location. As long as no write is done to it, the second hardware offload unit is just watching/reading/evaluating its cache copy. When the first hardware offload unit writes to this memory location, the underlying cache-coherence protocol will invalidate the cache copy in the second hardware offload unit. When the second hardware offload unit next attempts to access this memory location, it encounters a cache miss which will then pick up the value newly written by the first hardware offload unit. This sequence also enables the second hardware offload unit to know that something has changed and it can re-evaluate to decide what actions/processing it needs to take.
In some embodiments, second hardware offload unit utilizes the CXL (computer express link) cache capabilities. CXL (https://www.computeexpresslink.org) is one of the efforts that has been undertaken in recent years to enable cache-coherent interconnect between devices and processors. CXL is built on top of PCIe version 5 (PCIev5). In some embodiments, the host computers have adapter slots that are CXL/PCIev5 slots. Another recent effort to enable cache-cohere interconnect is CCIX (https://www.ccixconsortium.com) and some embodiments use this protocol.
CXL also allows a device to offer memory (CXL.mem). In some embodiments, the second hardware offload unit utilizes CXL.mem to provide memory locations, to which the first hardware offload unit can write. In short, there are many mechanisms/means by which this indication can happen. CXL is getting wide-spread industry adoption, and it greatly expands beyond what traditional PCIe offers.
In some embodiments, the second hardware offload unit that uses CXL has hardware that compares say producer and consumer register values, with the producer register being in the cached memory space snooped by the second hardware offload unit. In some such embodiments, the second hardware offload unit reads the producer register value repeatedly. When the first hardware offload writes to this producer register, the second hardware offload unit retrieves the new value, and its hardware which compares the producer and consumer registers will detect that there is work queued up for it to do.
Conjunctively with the cache coherency protocols, or instead of using cache coherency protocols, some embodiments use Peer-to-Peer transfer capabilities between two PCIe devices to establish the doorbell mechanism between two hardware offload units that are plugged into the PCIe interface of a host computer. Information regarding peer-to-peer transfers can be found at:
https://blog.exxactcorp.com/exploring-the-complexities-of-pcie-connectivity-and-peer-to-peer-communication/
In some embodiments, peer-to-peer communication is limited to DMA only, and does not support MMIO writes from one device to another's MMIO space. The ability to do DMA triggers constructs (e.g., notifications, interrupts, etc.) that notify the second hardware offload unit that it needs to process the data written through the DMA or the data written in the host memory's coherent cache. In other embodiments, peer-to-peer communication between two hardware offload units supports MMIO writes from one peer device to another peer device. Under this approach, the first hardware offload unit MMIO writes to second hardware offload unit's MMIO space, in which consumer/producer pointers reside.
The central and local controllers form a control plane that configures packet processing modules executing on the host computers to perform packet processing operations and/or to provide packets to hardware offload units to perform packet processing operation. The packets in some embodiments are packets sent by machines (e.g., VMs or containers) executing on the host computers and/or are packets received for these machines. Also, in some embodiments, the packet processing modules are modules of the operating system of the host computer, while in other embodiments, these modules are modules of a hypervisor over which virtual machines and/or containers execute on the host computer.
In addition to configuring the packet processing modules to offload some or all of the packet processing onto one or more hardware offload units, the control plane of some embodiments configures one or more hardware offload units of a host computer to perform the packet processing operations on the packets, to identify other hardware offload units that have to perform subsequent operation on the packets, to provide the packets to the subsequent hardware offload units, and to return the packets back to the packet processing modules (executing on the offload unit's host computers) when the packets do not need to be processed subsequently by another hardware offload unit.
In some embodiments, the control plane configures a hardware offload unit to provide the packet to another hardware offload unit by writing to a register of the other hardware offload unit. In other embodiments, the process configures a hardware offload unit to provide the packet to another hardware offload unit by writing to a memory of the host computer, and providing a notification to the second hardware offload unit that it needs to retrieve the packet from the host computer's memory.
In some embodiment, the control plane configures the packet processing modules executing on the host computers to perform packet-processing operations on the packets (1) before providing the packets to any hardware offload units, (2) after the hardware offload units have performed the offload operations, and/or (3) after several hardware offload units (e.g., two or more hardware offload units) have performed some of the offloaded operations but before several other hardware offload units (e.g., two or more hardware offload units) have performed some of the other offloaded operations.
As mentioned above, the packet-processing operations performed by a host's packet-processing modules and/or hardware offload units includes in some embodiments packet forwarding operations and/or middlebox service operations. Also, in some embodiments, the control plane configures these modules and/or hardware offload units to use sets of packet attributes (e.g., packet header values) to identify the packet forwarding and/or middlebox service operation to perform on the packet, and/or to identify the processing modules and/or hardware offload units to process the packets next.
Many of the above-described features and applications are implemented as software processes that are specified as a set of instructions recorded on a computer readable storage medium (also referred to as computer readable medium). When these instructions are executed by one or more processing unit(s) (e.g., one or more processors, cores of processors, or other processing units), they cause the processing unit(s) to perform the actions indicated in the instructions. Examples of computer readable media include, but are not limited to, CD-ROMs, flash drives, RAM chips, hard drives, EPROMs, etc. The computer readable media does not include carrier waves and electronic signals passing wirelessly or over wired connections.
In this specification, the term “software” is meant to include firmware residing in read-only memory or applications stored in magnetic storage, which can be read into memory for processing by a processor. Also, in some embodiments, multiple software inventions can be implemented as sub-parts of a larger program while remaining distinct software inventions. In some embodiments, multiple software inventions can also be implemented as separate programs. Finally, any combination of separate programs that together implement a software invention described here is within the scope of the invention. In some embodiments, the software programs, when installed to operate on one or more electronic systems, define one or more specific machine implementations that execute and perform the operations of the software programs.
Some embodiments include electronic components, such as microprocessors, that store computer program instructions in a machine-readable or computer-readable medium (alternatively referred to as computer-readable storage media, machine-readable media, or machine-readable storage media). Some examples of such computer-readable media include RAM, ROM, read-only compact discs (CD-ROM), recordable compact discs (CD-R), rewritable compact discs (CD-RW), read-only digital versatile discs (e.g., DVD-ROM, dual-layer DVD-ROM), a variety of recordable/rewritable DVDs (e.g., DVD-RAM, DVD-RW, DVD+RW, etc.), flash memory (e.g., SD cards, mini-SD cards, micro-SD cards, etc.), magnetic and/or solid state hard drives, read-only and recordable Blu-Ray® discs, ultra-density optical discs, any other optical or magnetic media, and floppy disks. The computer-readable media may store a computer program that is executable by at least one processing unit and includes sets of instructions for performing various operations. Examples of computer programs or computer code include machine code, such as is produced by a compiler, and files including higher-level code that are executed by a computer, an electronic component, or a microprocessor using an interpreter.
While the above discussion primarily refers to microprocessor or multi-core processors that execute software, some embodiments are performed by one or more integrated circuits, such as application specific integrated circuits (ASICs) or field programmable gate arrays (FPGAs). In some embodiments, such integrated circuits execute instructions that are stored on the circuit itself.
As used in this specification, the terms “computer”, “server”, “processor”, and “memory” all refer to electronic or other technological devices. These terms exclude people or groups of people. For the purposes of the specification, the terms “display” or “displaying” mean displaying on an electronic device. As used in this specification, the terms “computer readable medium,” “computer readable media,” and “machine readable medium” are entirely restricted to tangible, physical objects that store information in a form that is readable by a computer. These terms exclude any wireless signals, wired download signals, and any other ephemeral or transitory signals.
The bus 905 collectively represents all system, peripheral, and chipset buses that communicatively connect the numerous internal devices of the computer system 900. For instance, the bus 905 communicatively connects the processing unit(s) 910 with the read-only memory 930, the system memory 925, and the permanent storage device 935.
From these various memory units, the processing unit(s) 910 retrieve instructions to execute and data to process in order to execute the processes of the invention. The processing unit(s) may be a single processor or a multi-core processor in different embodiments. The read-only-memory (ROM) 930 stores static data and instructions that are needed by the processing unit(s) 910 and other modules of the computer system. The permanent storage device 935, on the other hand, is a read-and-write memory device. This device is a non-volatile memory unit that stores instructions and data even when the computer system 900 is off. Some embodiments of the invention use a mass-storage device (such as a magnetic or optical disk and its corresponding disk drive) as the permanent storage device 935.
Other embodiments use a removable storage device (such as a floppy disk, flash drive, etc.) as the permanent storage device. Like the permanent storage device 935, the system memory 925 is a read-and-write memory device. However, unlike storage device 935, the system memory is a volatile read-and-write memory, such as random access memory. The system memory stores some of the instructions and data that the processor needs at runtime. In some embodiments, the invention's processes are stored in the system memory 925, the permanent storage device 935, and/or the read-only memory 930. From these various memory units, the processing unit(s) 910 retrieve instructions to execute and data to process in order to execute the processes of some embodiments.
The bus 905 also connects to the input and output devices 940 and 945. The input devices enable the user to communicate information and select requests to the computer system. The input devices 940 include alphanumeric keyboards and pointing devices (also called “cursor control devices”). The output devices 945 display images generated by the computer system. The output devices include printers and display devices, such as cathode ray tubes (CRT) or liquid crystal displays (LCD). Some embodiments include devices such as touchscreens that function as both input and output devices.
Finally, as shown in
While the invention has been described with reference to numerous specific details, one of ordinary skill in the art will recognize that the invention can be embodied in other specific forms without departing from the spirit of the invention. Thus, one of ordinary skill in the art would understand that the invention is not to be limited by the foregoing illustrative details, but rather is to be defined by the appended claims.
Number | Name | Date | Kind |
---|---|---|---|
5884313 | Talluri et al. | Mar 1999 | A |
5887134 | Ebrahim | Mar 1999 | A |
5974547 | Klimenko | Oct 1999 | A |
6219699 | McCloghrie et al. | Apr 2001 | B1 |
6393483 | Latif et al. | May 2002 | B1 |
6496935 | Fink et al. | Dec 2002 | B1 |
7079544 | Wakayama et al. | Jul 2006 | B2 |
7424710 | Nelson et al. | Sep 2008 | B1 |
7606260 | Oguchi et al. | Oct 2009 | B2 |
7849168 | Utsunomiya et al. | Dec 2010 | B2 |
8346919 | Eiriksson et al. | Jan 2013 | B1 |
8442059 | Iglesia et al. | May 2013 | B1 |
8660129 | Brendel et al. | Feb 2014 | B1 |
8825900 | Gross et al. | Sep 2014 | B1 |
8856518 | Sridharan et al. | Oct 2014 | B2 |
8931047 | Wanser et al. | Jan 2015 | B2 |
9008085 | Kamble et al. | Apr 2015 | B2 |
9116727 | Benny et al. | Aug 2015 | B2 |
9135044 | Maharana | Sep 2015 | B2 |
9143582 | Banavalikar et al. | Sep 2015 | B2 |
9152593 | Galles | Oct 2015 | B2 |
9154327 | Marino et al. | Oct 2015 | B1 |
9197551 | DeCusatis et al. | Nov 2015 | B2 |
9231849 | Hyoudou et al. | Jan 2016 | B2 |
9378161 | Dalal | Jun 2016 | B1 |
9419897 | Cherian et al. | Aug 2016 | B2 |
9460031 | Dalal et al. | Oct 2016 | B1 |
9692698 | Cherian et al. | Jun 2017 | B2 |
9697019 | Fitzgerald et al. | Jul 2017 | B1 |
9916269 | Machulsky et al. | Mar 2018 | B1 |
9952782 | Chandrasekaran et al. | Apr 2018 | B1 |
10050884 | Dhanabalan et al. | Aug 2018 | B1 |
10142127 | Cherian et al. | Nov 2018 | B2 |
10162793 | BShara et al. | Dec 2018 | B1 |
10193771 | Koponen et al. | Jan 2019 | B2 |
10284478 | Yokota | May 2019 | B2 |
10534629 | Pierre et al. | Jan 2020 | B1 |
10567308 | Subbiah et al. | Feb 2020 | B1 |
10997106 | Bandaru et al. | May 2021 | B1 |
11108593 | Cherian et al. | Aug 2021 | B2 |
11221972 | Raman et al. | Jan 2022 | B1 |
11385981 | Silakov et al. | Jul 2022 | B1 |
20020069245 | Kim | Jun 2002 | A1 |
20030130833 | Brownell et al. | Jul 2003 | A1 |
20030140124 | Burns | Jul 2003 | A1 |
20030145114 | Gertner | Jul 2003 | A1 |
20030200290 | Zimmerman et al. | Oct 2003 | A1 |
20030217119 | Raman et al. | Nov 2003 | A1 |
20040042464 | Elzur et al. | Mar 2004 | A1 |
20050053079 | Havala | Mar 2005 | A1 |
20060029056 | Perera et al. | Feb 2006 | A1 |
20060041894 | Cheng et al. | Feb 2006 | A1 |
20060206603 | Rajan et al. | Sep 2006 | A1 |
20060206655 | Chappell et al. | Sep 2006 | A1 |
20060236054 | Kitamura | Oct 2006 | A1 |
20070174850 | Zur | Jul 2007 | A1 |
20080008202 | Terrell et al. | Jan 2008 | A1 |
20080086620 | Morris | Apr 2008 | A1 |
20080267177 | Johnson et al. | Oct 2008 | A1 |
20090089537 | Vick et al. | Apr 2009 | A1 |
20090119087 | Ang et al. | May 2009 | A1 |
20090161547 | Riddle et al. | Jun 2009 | A1 |
20090161673 | Breslau et al. | Jun 2009 | A1 |
20100070677 | Thakkar | Mar 2010 | A1 |
20100115208 | Logan | May 2010 | A1 |
20100131669 | Srinivas | May 2010 | A1 |
20100165874 | Brown et al. | Jul 2010 | A1 |
20100275199 | Smith et al. | Oct 2010 | A1 |
20100287306 | Matsuda | Nov 2010 | A1 |
20110060859 | Shukla et al. | Mar 2011 | A1 |
20110219170 | Frost et al. | Sep 2011 | A1 |
20120042138 | Eguchi et al. | Feb 2012 | A1 |
20120072909 | Malik et al. | Mar 2012 | A1 |
20120079478 | Galles et al. | Mar 2012 | A1 |
20120096459 | Miyazaki | Apr 2012 | A1 |
20120163388 | Goel et al. | Jun 2012 | A1 |
20120167082 | Kumar et al. | Jun 2012 | A1 |
20120259953 | Gertner | Oct 2012 | A1 |
20120278584 | Nagami et al. | Nov 2012 | A1 |
20120320918 | Fomin et al. | Dec 2012 | A1 |
20130033993 | Cardona et al. | Feb 2013 | A1 |
20130058346 | Sridharan et al. | Mar 2013 | A1 |
20130061047 | Sridharan et al. | Mar 2013 | A1 |
20130073702 | Umbehocker | Mar 2013 | A1 |
20130125122 | Hansen | May 2013 | A1 |
20130145106 | Kan | Jun 2013 | A1 |
20130311663 | Kamath et al. | Nov 2013 | A1 |
20130318219 | Kancherla | Nov 2013 | A1 |
20130318268 | Dalal et al. | Nov 2013 | A1 |
20140003442 | Hernandez et al. | Jan 2014 | A1 |
20140056151 | Petrus et al. | Feb 2014 | A1 |
20140067763 | Jorapurkar et al. | Mar 2014 | A1 |
20140074799 | Karampuri et al. | Mar 2014 | A1 |
20140098815 | Mishra et al. | Apr 2014 | A1 |
20140115578 | Cooper et al. | Apr 2014 | A1 |
20140123211 | Wanser et al. | May 2014 | A1 |
20140208075 | McCormick, Jr. | Jul 2014 | A1 |
20140215036 | Elzur | Jul 2014 | A1 |
20140244983 | McDonald | Aug 2014 | A1 |
20140245296 | Sethuramalingam et al. | Aug 2014 | A1 |
20140269712 | Kidambi | Sep 2014 | A1 |
20140269754 | Eguchi et al. | Sep 2014 | A1 |
20150007317 | Jain | Jan 2015 | A1 |
20150016300 | Devireddy et al. | Jan 2015 | A1 |
20150019748 | Gross, IV et al. | Jan 2015 | A1 |
20150020067 | Brant et al. | Jan 2015 | A1 |
20150033222 | Hussain et al. | Jan 2015 | A1 |
20150052280 | Lawson | Feb 2015 | A1 |
20150117445 | Koponen et al. | Apr 2015 | A1 |
20150156250 | Varshney et al. | Jun 2015 | A1 |
20150172183 | DeCusatis et al. | Jun 2015 | A1 |
20150200808 | Gourlay et al. | Jul 2015 | A1 |
20150212892 | Li | Jul 2015 | A1 |
20150215207 | Qin et al. | Jul 2015 | A1 |
20150222547 | Hayut et al. | Aug 2015 | A1 |
20150242134 | Takada et al. | Aug 2015 | A1 |
20150261556 | Jain et al. | Sep 2015 | A1 |
20150261720 | Kagan et al. | Sep 2015 | A1 |
20150347231 | Gopal et al. | Dec 2015 | A1 |
20150358288 | Jain et al. | Dec 2015 | A1 |
20150358290 | Jain et al. | Dec 2015 | A1 |
20150381494 | Cherian et al. | Dec 2015 | A1 |
20150381495 | Cherian et al. | Dec 2015 | A1 |
20160006696 | Donley et al. | Jan 2016 | A1 |
20160092108 | Karaje et al. | Mar 2016 | A1 |
20160134702 | Gertner | May 2016 | A1 |
20160162302 | Warszawski et al. | Jun 2016 | A1 |
20160162438 | Hussain et al. | Jun 2016 | A1 |
20160179579 | Amann et al. | Jun 2016 | A1 |
20160182342 | Singaravelu et al. | Jun 2016 | A1 |
20160306648 | Deguillard et al. | Oct 2016 | A1 |
20170024334 | Bergsten et al. | Jan 2017 | A1 |
20170075845 | Kopparthi | Mar 2017 | A1 |
20170093623 | Zheng | Mar 2017 | A1 |
20170099532 | Kakande | Apr 2017 | A1 |
20170161090 | Kodama | Jun 2017 | A1 |
20170161189 | Gertner | Jun 2017 | A1 |
20170214549 | Yoshino et al. | Jul 2017 | A1 |
20170295033 | Cherian et al. | Oct 2017 | A1 |
20180024775 | Miller | Jan 2018 | A1 |
20180024964 | Mao et al. | Jan 2018 | A1 |
20180032249 | Makhervaks et al. | Feb 2018 | A1 |
20180088978 | Li et al. | Mar 2018 | A1 |
20180095872 | Dreier et al. | Apr 2018 | A1 |
20180109471 | Chang et al. | Apr 2018 | A1 |
20180152540 | Niell et al. | May 2018 | A1 |
20180203719 | Zhang et al. | Jul 2018 | A1 |
20180260125 | Botes et al. | Sep 2018 | A1 |
20180262599 | Firestone | Sep 2018 | A1 |
20180278684 | Rashid et al. | Sep 2018 | A1 |
20180309641 | Wang et al. | Oct 2018 | A1 |
20180309718 | Zuo | Oct 2018 | A1 |
20180329743 | Pope et al. | Nov 2018 | A1 |
20180331976 | Pope et al. | Nov 2018 | A1 |
20180336346 | Guenther | Nov 2018 | A1 |
20180337991 | Kumar et al. | Nov 2018 | A1 |
20180349037 | Zhao et al. | Dec 2018 | A1 |
20180359215 | Khare et al. | Dec 2018 | A1 |
20190042506 | Devey et al. | Feb 2019 | A1 |
20190044809 | Willis et al. | Feb 2019 | A1 |
20190044866 | Chilikin et al. | Feb 2019 | A1 |
20190075063 | McDonnell et al. | Mar 2019 | A1 |
20190132296 | Jiang et al. | May 2019 | A1 |
20190158396 | Yu et al. | May 2019 | A1 |
20190173689 | Cherian et al. | Jun 2019 | A1 |
20190200105 | Cheng et al. | Jun 2019 | A1 |
20190235909 | Jin et al. | Aug 2019 | A1 |
20190278675 | Bolkhovitin et al. | Sep 2019 | A1 |
20190280980 | Hyoudou | Sep 2019 | A1 |
20190286373 | Karumbunathan et al. | Sep 2019 | A1 |
20190306083 | Shih et al. | Oct 2019 | A1 |
20200021532 | Borikar et al. | Jan 2020 | A1 |
20200028800 | Strathman et al. | Jan 2020 | A1 |
20200042234 | Krasner et al. | Feb 2020 | A1 |
20200042389 | Kulkarni et al. | Feb 2020 | A1 |
20200042412 | Kulkarni et al. | Feb 2020 | A1 |
20200133909 | Hefty et al. | Apr 2020 | A1 |
20200136996 | Li et al. | Apr 2020 | A1 |
20200213227 | Pianigiani et al. | Jul 2020 | A1 |
20200259731 | Sivaraman et al. | Aug 2020 | A1 |
20200278892 | Nainar et al. | Sep 2020 | A1 |
20200278893 | Niell et al. | Sep 2020 | A1 |
20200314011 | Deval et al. | Oct 2020 | A1 |
20200319812 | He et al. | Oct 2020 | A1 |
20200328192 | Zaman et al. | Oct 2020 | A1 |
20200382329 | Yuan | Dec 2020 | A1 |
20200401320 | Pyati et al. | Dec 2020 | A1 |
20200412659 | Ilitzky et al. | Dec 2020 | A1 |
20210019270 | Li et al. | Jan 2021 | A1 |
20210026670 | Krivenok et al. | Jan 2021 | A1 |
20210058342 | McBrearty | Feb 2021 | A1 |
20210117360 | Kutch | Apr 2021 | A1 |
20210226846 | Ballard et al. | Jul 2021 | A1 |
20210232528 | Kutch et al. | Jul 2021 | A1 |
20210266259 | Renner, III et al. | Aug 2021 | A1 |
20210314232 | Nainar et al. | Oct 2021 | A1 |
20210357242 | Ballard et al. | Nov 2021 | A1 |
20210377166 | Brar et al. | Dec 2021 | A1 |
20210377188 | Ghag et al. | Dec 2021 | A1 |
20210392017 | Cherian et al. | Dec 2021 | A1 |
20210409317 | Seshan et al. | Dec 2021 | A1 |
20220027147 | Maddukuri et al. | Jan 2022 | A1 |
20220043572 | Said et al. | Feb 2022 | A1 |
20220100432 | Kim et al. | Mar 2022 | A1 |
20220100491 | Voltz et al. | Mar 2022 | A1 |
20220100542 | Voltz | Mar 2022 | A1 |
20220100544 | Voltz | Mar 2022 | A1 |
20220100545 | Cherian et al. | Mar 2022 | A1 |
20220100546 | Cherian et al. | Mar 2022 | A1 |
20220103478 | Ang et al. | Mar 2022 | A1 |
20220103487 | Ang et al. | Mar 2022 | A1 |
20220103488 | Wang | Mar 2022 | A1 |
20220103490 | Kim et al. | Mar 2022 | A1 |
20220103629 | Cherian et al. | Mar 2022 | A1 |
20220150055 | Cui et al. | May 2022 | A1 |
20220164451 | Bagwell | May 2022 | A1 |
20220197681 | Rajagopal | Jun 2022 | A1 |
20220206908 | Brar et al. | Jun 2022 | A1 |
20220206962 | Kim et al. | Jun 2022 | A1 |
20220206964 | Kim et al. | Jun 2022 | A1 |
20220210229 | Maddukuri et al. | Jun 2022 | A1 |
20220231968 | Rajagopal | Jul 2022 | A1 |
20220272039 | Cardona et al. | Aug 2022 | A1 |
20220335563 | Elzur | Oct 2022 | A1 |
20230004508 | Liu et al. | Jan 2023 | A1 |
Number | Date | Country |
---|---|---|
2672100 | Jun 2008 | CA |
2918551 | Jul 2010 | CA |
101540826 | Sep 2009 | CN |
102018004046 | Nov 2018 | DE |
1482711 | Dec 2004 | EP |
3598291 | Jan 2020 | EP |
4160424 | Apr 2023 | EP |
101258725 | Sep 2008 | IN |
202107297 | Feb 2021 | TW |
2005099201 | Oct 2005 | WO |
2007036372 | Apr 2007 | WO |
2010008984 | Jan 2010 | WO |
2016003489 | Jan 2016 | WO |
2020027913 | Feb 2020 | WO |
2021030020 | Feb 2021 | WO |
2022066267 | Mar 2022 | WO |
2022066268 | Mar 2022 | WO |
2022066270 | Mar 2022 | WO |
2022066271 | Mar 2022 | WO |
2022066531 | Mar 2022 | WO |
Entry |
---|
Author Unknown, “An Introduction to SmartNICs” The Next Platform, Mar. 4, 2019, 4 pages, retrieved from https://www.nextplatform.com/2019/03/04/an-introduction-to-smartnics/. |
Author Unknown, “In-Hardware Storage Virtualization—NVMe SNAP™ Revolutionizes Data Center Storage: Composable Storage Made Simple,” Month Unknown 2019, 3 pages, Mellanox Technologies, Sunnyvale, CA, USA. |
Author Unknown, “Package Manager,” Wikipedia, Sep. 8, 2020, 10 pages. |
Author Unknown, “VMDK”, Wikipedia, May 17, 2020, 3 pages, retrieved from https://en.wikipedia.org/w/index.php?title=VMDK&oldid=957225521. |
Author Unknown, “vSphere Managed Inventory Objects,” Aug. 3, 2020, 3 pages, retrieved from https://docs.vmware.com/en/VMware-vSphere/6.7/com.vmware.vsphere.vcenterhost.doc/GUID-4D4B3DF2-D033-4782-A030-3C3600DE5A7F.html, VMware, Inc. |
Grant, Stewart, et al., “SmartNIC Performance Isolation with FairNIC: Programmable Networking for the Cloud,” SIGCOMM '20, Aug. 10-14, 2020, 13 pages, ACM, Virtual Event, USA. |
Liu, Ming, et al., “Offloading Distributed Applications onto SmartNICs using iPipe,” SIGCOMM '19, Aug. 19-23, 2019, 16 pages, ACM, Beijing, China. |
PCT International Search Report and Written Opinion of Commonly Owned International Patent Application PCT/US2021/042116, dated Oct. 15, 2021, 14 pages, International Searching Authority (EPO). |
Suarez, Julio, “Reduce TCO with Arm Based SmartNICs,” Nov. 14, 2019, 12 pages, retrieved from https://community.arm.com/arm-community-blogs/b/architectures-and-processors-blog/posts/reduce-tco-with-arm-based-smartnics. |
Non-Published Commonly Owned Related International Patent Application PCT/US2021/042116 with similar specification, filed Jul. 17, 2021, 29 pages, VMware, Inc. |
Non-Published Commonly Owned U.S. Appl. No. 17/461,908, filed Aug. 30, 2021, 60 pages, Nicira, Inc. |
Anwer, Muhammad Bilal, et al., “Building a Fast, Virtualized Data Plane with Programmable Hardware,” Aug. 17, 2009, 8 pages, VISA'09, ACM, Barcelona, Spain. |
Author Unknown, “Network Functions Virtualisation; Infrastructure Architecture; Architecture of the Hypervisor Domain,” Draft ETSI GS NFV-INF 004 V0.3.1, May 28, 2014, 50 pages, France. |
Koponen, Teemu, et al., “Network Virtualization in Multi-tenant Datacenters,” Technical Report TR-2013-001E, Aug. 2013, 22 pages, VMware, Inc., Palo Alto, CA, USA. |
Le Vasseur, Joshua, et al., “Standardized but Flexible I/O for Self-Virtualizing Devices,” Month Unknown 2008, 7 pages. |
Non-Published Commonly Owned U.S. Appl. No. 17/107,561, filed Nov. 30, 2020, 39 pages, VMware, Inc. |
Non-Published Commonly Owned U.S. Appl. No. 17/107,568, filed Nov. 30, 2020, 39 pages, VMware, Inc. |
Non-Published Commonly Owned U.S. Appl. No. 17/114,975, filed Dec. 8, 2020, 52 pages, VMware, Inc. |
Non-Published Commonly Owned U.S. Appl. No. 17/114,994, filed Dec. 8, 2020, 51 pages, VMware, Inc. |
Non-Published Commonly Owned U.S. Appl. No. 17/145,318, filed Jan. 9, 2021, 70 pages, VMware, Inc. |
Non-Published Commonly Owned U.S. Appl. No. 17/145,319, filed Jan. 9, 2021, 70 pages, VMware, Inc. |
Non-Published Commonly Owned U.S. Appl. No. 17/145,320, filed Jan. 9, 2021, 70 pages, VMware, Inc. |
Non-Published Commonly Owned U.S. Appl. No. 17/145,321, filed Jan. 9, 2021, 49 pages, VMware, Inc. |
Non-Published Commonly Owned U.S. Appl. No. 17/145,322, filed Jan. 9, 2021, 49 pages, VMware, Inc. |
Non-Published Commonly Owned U.S. Appl. No. 17/145,329, filed Jan. 9, 2021, 50 pages, VMware, Inc. |
Non-Published Commonly Owned U.S. Appl. No. 17/145,334, filed Jan. 9, 2021, 49 pages, VMware, Inc. |
Peterson, Larry L., et al., “OS Support for General-Purpose Routers,” Month Unknown 1999, 6 pages, Department of Computer Science, Princeton University. |
Pettit, Justin, et al., “Virtual Switching in an Era of Advanced Edges,” In Proc. 2nd Workshop on Data Center-Converged and Virtual Ethernet Switching (DCCAVES), Sep. 2010, 7 pages, vol. 22. ITC. |
Spalink, Tammo, et al., “Building a Robust Software-Based Router Using Network Processors,” Month Unknown 2001, 14 pages, ACM, Banff, Canada. |
Turner, Jon, et al., “Supercharging PlanetLab—High Performance, Multi-Application Overlay Network Platform,” SIGCOMM-07, Aug. 27-31, 2007, 12 pages, ACM, Koyoto, Japan. |
Author Unknown, “8.6 Receive-Side Scaling (RSS),” Month Unknown 2020, 2 pages, Red Hat, Inc. |
Herbert, Tom, et al., “Scaling in the Linux Networking Stack,” Jun. 2, 2020, retrieved from https://01.org/inuxgraphics/gfx-docs/drm/networking/scaling.html. |
Non-Published Commonly Owned U.S. Appl. No. 16/890,890, filed Jun. 2, 2020, 39 pages, VMware, Inc. |
Stringer, Joe, et al., “OVS Hardware Offloads Discussion Panel,” Nov. 7, 2016, 37 pages, retrieved from http://openvswitch.org/support/ovscon2016/7/1450-stringer.pdf. |
Author Unknown, “vSAN Planning and Deployment” Update 3, Aug. 20, 2019, 85 pages, VMware, Inc., Palo Alto, CA, USA. |
Author Unknown, “What is End-to-End Encryption and How does it Work?,” Mar. 7, 2018, 4 pages, Proton Technologies AG, Geneva, Switzerland. |
Harris, Jim, “Accelerating NVME-oF* for VMs with the Storage Performance Development Kit,” Flash Memory Summit, Aug. 2017, 18 pages, Intel Corporation, Santa Clara, CA. |
Perlroth, Nicole, “What is End-to-End Encryption? Another Bull's-Eye on Big Tech,” The New York Times, Nov. 19, 2019, 4 pages, retrieved from https://nytimes.com/2019/11/19/technology/end-to-end-encryption.html. |
Angeles, Sara, “Cloud vs. Data Center: What's the difference?” Nov. 23, 2018, 1 page, retrieved from https://www.businessnewsdaily.com/4982-cloud-vs-data-center.html. |
Author Unknown, “Middlebox,” Wikipedia, Nov. 19, 2019, 1 page, Wikipedia.com. |
Doyle, Lee, “An Introduction to smart NICs and their Benefits,” Jul. 2019, 2 pages, retrieved from https://www.techtarget.com/searchnetworking/tip/An-introduction-to-smart-NICs-and-ther-benefits. |
Author Unknown, “Transparent,” Free on-Line Dictionary of Computing (FOLDOC), Jun. 6, 1996, 1 page, retrieved from http://foldoc.org/transparent. |
Li, Junnan, et al., “DrawerPipe: a Reconfigurable Pipeline for Network Processing on FGPA-Based SmartNIC,” Electronics 2020, Dec. 10, 2019, 24 pages, retrieved from https://www.mdpi.com/2079-9292/9/1/59. |
Mohammadkhan, Ali, et al., “P4NFV: P4 Enabled NFV Systems with SmartNICs,” 2019 IEEE Conference on Network Function Virtualization and Software Defined Networks (NFV-SDN), Nov. 12-14, 2019, 7 pages, IEEE, Dallas, TX, USA. |
Olds, Dan, “OS Virtualization vs. Hypervisor: Why You Should Offer Both,” Oct. 19, 2008, 3 pages, techtarget.com. |
Number | Date | Country | |
---|---|---|---|
20220103488 A1 | Mar 2022 | US |
Number | Date | Country | |
---|---|---|---|
63084425 | Sep 2020 | US |