Service aware routing using network interface cards having processing units
An example method comprises, receiving resource availability values from the plurality of Network Interface Cards (NICs); determining a data path for data packets of a flow transported using a protocol from a source NIC to a destination NIC via a NIC set that comprises at least one NIC, wherein: the plurality of NICs comprises the source NIC, the destination NIC, and the NIC set, and determining the data path comprises selecting the NIC set based on the resource availability values; and transmitting, to the source NIC and to each NIC in the NIC set, data path data to cause the source NIC and each NIC in the NIC set to identify the data packets of the flow using an identifier of the protocol and to transmit the data packets of the flow from the source NIC to the destination NIC via the data path.
1 . A method comprising:
receiving, at an edge services controller that manages data packet routing in a network interface card (NIC) fabric comprising a plurality of servers that each includes a corresponding NIC from a plurality of NICs, resource availability values from the plurality of NICs, wherein the plurality of NICs are coupled by communication links in a NIC fabric topology;
determining, by the edge services controller, a data path for data packets of a flow to be transported using a protocol from a source NIC to a destination NIC, wherein the data path comprises a NIC set that includes at least one NIC, wherein:
the plurality of NICs comprises the source NIC, the destination NIC, and the NIC set,
the data path is determined to cause each NIC of the NIC set to forward data packets of the flow to a successive NIC of the NIC set in the data path so that the data packets of the flow are forwarded to the destination NIC, and
determining the data path comprises selecting the NIC set based on the resource availability values; and
transmitting, by the edge services controller to the source NIC and to each NIC in the NIC set, data path data to cause a processing unit of the source NIC and processing units of each NIC in the NIC set to identify the data packets of the flow using an identifier of the protocol and to forward the data packets of the flow from the source NIC to the destination NIC via the data path, wherein the processing unit of the source NIC and the processing units of each NIC in the NIC set are configured to offload packet processing from a central processing unit (CPU) of a corresponding server of the plurality of servers.
2 . The method of claim 1 , wherein the data path data identifies the data packets of the flow using a source port of a source application and a destination port of a destination application.
3 . The method of claim 2 , wherein the source application and the destination application each comprise one of a NIC application or a host application.
4 . The method of claim 1 , wherein the protocol comprises one or more of a tunneling protocol or a transport layer protocol.
5 . The method of claim 1 , wherein:
the data path data comprises a flow identifier of the flow and a set of one or more flow parameters for identifying the data packets of the flow,
the set of one or more flow parameters comprises one or more of a source Internet Protocol (IP) address of a source server associated with the source NIC, a destination IP address of a destination server associated with the destination NIC, a source port of a source application that generates application data of the data packets of the flow, a destination port of a destination application, or the identifier of the protocol, and
the data path data sent to the source NIC comprises a mapping from the flow identifier of the flow to a next-hop port identifier of a NIC port of the source NIC.
6 . The method of claim 1 , further comprising:
receiving, at the edge services controller, updated resource availability values from the plurality of NICs;
determining, based on the updated resource availability values, an updated data path for the data packets of the flow from the source NIC to the destination NIC via an updated NIC set that comprises at least one NIC of the plurality of NICs; and
transmitting, by the edge services controller to the source NIC and to each NIC in the updated NIC set, updated data path data to cause the source NIC and each NIC in the updated NIC set to forward the data packets of the flow from the source NIC to the destination NIC via the updated data path.
7 . The method of claim 1 , wherein:
the data path is a first data path, the NIC set is a first NIC set, and the data path data is first data path data, and
the method further comprises:
determining, by the edge services controller, a second data path for the data packets of the flow transported using the protocol from the source NIC to the destination NIC via a second NIC set, wherein:
the second NIC set includes at least one NIC of the plurality of NICs, and
determining the second data path comprises selecting, by the edge services controller, the second NIC set based on the resource availability values; and
transmitting, by the edge services controller to the source NIC and to each NIC in the second NIC set, second data path data to cause the processing unit of the source NIC and processing units of each NIC in the second NIC set to identify the data packets of the flow using the identifier of the protocol and to forward the data packets of the flow from the source NIC to the destination NIC via the second data path.
8 . The method of claim 7 , wherein:
the first NIC set and the second NIC set include a common NIC,
transmitting the first data path data comprises transmitting, by the edge services controller, a first next-hop port identifier to the common NIC, and
transmitting the second data path data comprises transmitting, by the edge services controller, a second next-hop port identifier to the common NIC to enable the common NIC to implement load balancing by routing the data packets of the flow to the destination NIC via both the first data path using a first NIC port associated with the first next-hop port identifier and the second data path using a second NIC port associated with the second next-hop port identifier.
9 . The method of claim 8 , wherein:
the first data path data and the second data path data comprise a set of one or more flow parameters and a flow identifier,
the set of one or more flow parameters comprises one or more of a source IP address of a source server associated with the source NIC, a destination IP address of a destination server associated with the destination NIC, a source port address of a source application configured to generate application data to be transported in the data packets of the flow, a destination port address of a destination application configured to receive the data packets of the flow, or the identifier of the protocol associated with the protocol,
the source application operates at the source server,
the flow identifier corresponds to the first next-hop port identifier and the second next-hop port identifier to enable the common NIC to route data packets of the flow that include the set of one or more flow parameters via the first NIC port and the second NIC port, and
a relationship between the flow identifier and the first and second next-hop port identifiers is defined in a common look-up table previously provided to the common NIC by the edge services controller.
10 . The method of claim 1 , wherein:
the data path is a first data path, the NIC set is a first NIC set, the flow is a first flow, and the data path data is first data path data, and
the method further comprises:
determining, by the edge services controller, a second data path for data packets of a second flow transported using a second protocol from the source NIC to the destination NIC via a second NIC set, wherein:
the second NIC set comprises one or more NICs of the plurality of NICs different from the NICs in the first NIC set, and
determining the second data path comprises selecting, by the edge services controller, the second NIC set based on the resource availability values associated with the plurality of NICs; and
transmitting, by the edge services controller to the source NIC and to each NIC in the second NIC set, second data path data to cause the processing unit of the source NIC and processing units of each NIC in the second NIC set to identify the data packets of the second flow using an identifier of the second protocol and to forward the data packets of the second flow from the source NIC to the destination NIC via the second data path, wherein the identifier of the second protocol identifies the second protocol.
11 . The method of claim 10 , wherein:
the second data path data comprises a second set of one or more flow parameters for identifying data packets of the second flow and a flow identifier of the second flow,
the second set of flow parameters comprises one or more of a source IP address of a source server associated with the source NIC, a destination IP address of a destination server associated with the destination NIC, a source port address of a second source application that generates application data of the data packets of the second flow, a destination port address of a second destination application, or the identifier of the second protocol, and
the second data path data comprises a mapping from the flow identifier of the second flow to a next-hop port identifier of a NIC port of the source NIC.
12 . The method of claim 1 , wherein the data path does not include a physical switch other than NICs of the plurality of NICs.
13 . A network interface card (NIC) comprising:
a NIC port;
a processing unit configured to offload packet processing from one or more central processing units (CPUs) of a server of a plurality of servers; and
a memory comprising instructions that, when executed by the processing unit, cause the NIC to:
transmit a resource availability value of the NIC to an edge services controller, wherein the edge services controller manages data packet routing in a NIC fabric comprising the plurality of servers, wherein each server of the plurality of servers includes a corresponding NIC from a plurality of NICs, wherein the plurality of NICs are coupled by communication links in a NIC fabric topology;
receive, from the edge services controller, data path data associated with a data path for data packets of a flow to be transported using a protocol from a source NIC in the NIC fabric to a destination NIC in the NIC fabric, wherein the data path comprises a NIC set that includes the NIC, wherein the data path is determined to cause each NIC of the NIC set to forward the data packets of the flow to a successive NIC of the NIC set in the data path so that the data packets of the flow are forwarded to the destination NIC, wherein the data path is computed using the resource availability value of the NIC and the data path data comprises a flow identifier of the flow mapped to a next-hop port identifier of the NIC port, and wherein the data path data comprises a set of one or more flow parameters for identifying data packets of the flow using an identifier of the protocol;
receive a data packet of the flow;
map, based on the data path data, the data packet to the flow identifier of the flow; and
forward, based on the data path data and the flow identifier of the flow, the data packet via the NIC port.
14 . The NIC of claim 13 , wherein the data path data identifies the data packets of the flow using a source port of a source application and a destination port of a destination application.
15 . The NIC of claim 13 , wherein:
the data path data comprises the next-hop port identifier and the flow identifier of the flow,
the set of one or more flow parameters comprises one or more of a source Internet Protocol (IP) address of a source server associated with the source NIC, a destination IP address of a destination server associated with the destination NIC, a source port of a source application that generates application data of the data packets of the flow, or a destination port of a destination application, and
the data path data comprises a mapping from the flow identifier of the flow to the next-hop port identifier of the NIC port.
16 . The NIC of claim 15 , wherein:
the data path is a first data path, the data path data is first data path data, and the next-hop port identifier is a first next-hop port identifier,
the NIC further comprises a second NIC port, and
the memory further comprises instructions that, when executed by the processing unit, configure the processing unit to:
receive, from the edge services controller, second data path data associated with a second data path for the data packets of the flow, the second data path data comprising the flow identifier of the flow mapped to a second next-hop port identifier;
receive a second data packet of the flow;
map, based on the second data path data, the second data packet to the flow identifier of the flow; and
forward, based on the second data path data and the flow identifier of the flow, the second data packet via the second NIC port.
17 . The NIC of claim 16 , wherein:
the second data path data comprises the set of one or more flow parameters and the second next-hop port identifier, and
the flow identifier of the flow corresponds to both the first next-hop port identifier and the second next-hop port identifier to enable the NIC to implement load balancing by routing data packets of the flow to the destination NIC via both the first data path and the second data path.
18 . A system comprising:
a network interface card (NIC) fabric comprising a plurality of servers, wherein each server of the plurality of servers includes a corresponding NIC from a plurality of NICs, and wherein the plurality of NICs are coupled by communication links in a NIC fabric topology; and
an edge services controller that manages data packet routing in the NIC fabric, the edge services controller configured to:
receive resource availability values from the plurality of NICs;
determine a data path for data packets of a flow to be transported using a protocol from a source NIC to a destination NIC, wherein the data path comprises a NIC set that includes at least one NIC, wherein:
the plurality of NICs comprises the source NIC, the destination NIC, and the NIC set,
the data path is determined to cause each NIC of the NIC set to forward data packets of the flow to a successive NIC of the NIC set in the data path so that the data packets of the flow are forwarded to the destination NIC, and
the edge services controller is configured to select the NIC set based on the resource availability values; and
transmit, to the source NIC and to each NIC in the NIC set, data path data to cause a processing unit of the source NIC and processing units of each NIC in the NIC set to identify the data packets of the flow using an identifier of the protocol and to forward the data packets of the flow from the source NIC to the destination NIC via the data path, wherein the processing unit of the source NIC and the processing units of each NIC in the NIC set are configured to offload packet processing from a central processing unit (CPU) of a corresponding server of the plurality of servers.
19 . The system of claim 18 , wherein the data path data identifies the data packets of the flow using a source port of a source application and a destination port of a destination application.
20 . The system of claim 18 , wherein the edge services controller is further configured to:
receive updated resource availability values from the plurality of NICs in the NIC fabric;
determine, based on the updated resource availability values, an updated data path for the data packets of the flow from the source NIC to the destination NIC via an updated NIC set that comprises at least one NIC of the plurality of NICs; and
transmit, to the source NIC and to each NIC in the updated NIC set, updated data path data to cause the source NIC and each NIC in the updated NIC set to forward the data packets of the flow from the source NIC to the destination NIC via the updated data path.