IP Library › Granted Patent US 11,916,781
Granted Patent B2
US 11,916,781 · App. 17/594,624 · Granted Feb 27, 2024

System and method for facilitating efficient utilization of an output buffer in a network interface controller (NIC)

Inventors: Partha Pratim Kundu (Palo Alto, CA); David Charles Hewson (Bristol, GB)
Assignee: Hewlett Packard Enterprise Development LP
H04L45/28G06F9/505G06F9/546G06F12/0862G06F12/1036G06F12/1063G06F13/14G06F13/16G06F13/1642G06F13/1673G06F13/1689G06F13/385G06F13/4022G06F13/4068G06F13/4221G06F15/17331H04L1/0083H04L43/0876H04L43/10H04L45/021H04L45/028H04L45/122H04L45/123H04L45/125H04L45/16H04L45/20H04L45/22H04L45/24H04L45/38H04L45/42H04L45/46H04L45/566H04L45/70H04L45/745H04L45/7453H04L47/11H04L47/12H04L47/122H04L47/18H04L47/20H04L47/22H04L47/24H04L47/2441H04L47/2466H04L47/2483H04L47/30H04L47/32H04L47/323H04L47/34H04L47/39H04L47/52H04L47/621H04L47/626H04L47/629H04L47/6235H04L47/6275H04L47/76H04L47/762H04L47/781H04L47/80H04L49/101H04L49/15H04L49/30H04L49/3009H04L49/3018H04L49/3027H04L49/90H04L49/9005H04L49/9021H04L49/9036H04L49/9047H04L67/1097H04L69/22H04L69/40G06F2212/50G06F2213/0026G06F2213/3808H04L69/28
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 11,916,781
App. No.
17/594,624
Granted
Feb 27, 2024
Kind
B2
Abstract

A network interface controller (NIC) capable of efficiently utilizing an output buffer is provided. The NIC can be equipped with an output buffer, a host interface, an injector logic block, and an allocation logic block. The output buffer can include a plurality of cells, each of which can be a unit of storage in the output buffer. If the host interface receives a command from a host device, the injector logic block can generate a packet based on the command. The allocation logic block can then determine whether the packet is a multi-cell packet. If the packet is a multi-cell packet, the allocation logic block can determine a virtual index for the packet. The allocation logic block can then store, in an entry in a data structure, the virtual index, and a set of physical indices of cells storing the packet.

Claims (57)

1. A network interface controller (NIC), comprising:

an output buffer comprising a plurality of cells, wherein a respective cell is a unit of storage in the output buffer;

a host interface to receive a command from a host device;

an injector logic block to generate a packet based on the command; and

an allocation logic block to:

determine whether the packet is a multi-cell packet;

in response to determining that the packet is a multi-cell packet, wherein a first data structure comprises entries for a plurality of packet groups, wherein each packet group corresponds to a distinct maximum packet size of a plurality of maximum packet sizes;

determine, for the packet based on a size of the packet, a packet group which corresponds to a smallest of the maximum packet sizes that can accommodate the packet;

allocate, based on an entry in the first data structure for the determined packet group, a virtual index for the packet;

reserve, for the packet based on the size of the packet, a set of cells in the output buffer;

store, in the entry in the first data structure for the determined packet group: the virtual index for the packet; and a set of physical indices of the reserved cells, wherein the physical indices are stored in slots of the entry;

insert the packet into the reserved cells of the output buffer; and

responsive to inserting the packet into the reserved cells of the output buffer, store, in a second data structure: a packet handle associated with the packet; offset information associated with the virtual index; and an identifier of a message-fragmenting unit selected for forwarding the packet.

2. The network interface controller of claim 1 , wherein the entry is identified by the virtual index, wherein the entry comprises a set of slots, and wherein a respective slot is to store a physical index of the set of physical indices.

3. The network interface controller of claim 1 , wherein the injector logic block is further to:

store a portion of the packet in a cell identified by a physical index of the set of physical indices.

4. The network interface controller of claim 1 , wherein the reserved cells storing the packet are non-contiguous in the output buffer.

5. The network interface controller of claim 1 , further comprising a retrieval logic block to:

determine the packet handle and an offset associated with the packet;

identify the entry based on the packet handle; and

obtain the set of physical indices from the entry.

6. The network interface controller of claim 5 , wherein the retrieval logic block is further to obtain a packet segment from a respective cell associated with a physical index of the set of physical indices.

7. The network interface controller of claim 6 , wherein the allocation logic block is further to release the entry for reallocation.

8. The network interface controller of claim 1 , wherein, in response to determining that the packet is a single-cell packet, the allocation logic block is further to determine a physical index of a cell for the packet; and

wherein the injector logic block is further to store the packet in a cell identified by the physical index.

9. The network interface controller of claim 1 , wherein the message-fragmenting unit is to:

fragment a single message into packets of sizes corresponding to a maximum transmission unit; and

obtain a next command from an assigned flow queue.

10. The network interface controller of claim 1 , wherein storing the identifier of the message-fragmenting unit in the second data structure causes a traffic shaper of the network interface controller to, in response to the message-fragmenting unit being selected for forwarding a next packet, retrieve information associated with the packet from the second data structure.

11. A method, comprising:

maintaining, in a network interface controller (NIC), an output buffer comprising a plurality of cells, wherein a respective cell is a unit of storage in the output buffer;

receiving, via a host interface, a command from a host device; generating a packet based on the command;

determining whether the packet is a multi-cell packet;

in response to determining that the packet is a multi-cell packet, wherein a first data structure comprises entries for a plurality of packet groups, wherein each packet group corresponds to a distinct maximum packet size of a plurality of maximum packet sizes:

determining, for the packet based on a size of the packet, a packet group which corresponds to a smallest of the maximum packet sizes that can accommodate the packet;

allocating, based on an entry in the first data structure for the determined packet group, a virtual index for the packet;

reserving, for the packet based on the size of the packet, a set of cells in the output buffer;

storing, in the entry in the first data structure for the determined packet group: the virtual index for the packet; and a set of physical indices of the reserved cells, wherein the physical indices are stored in slots of the entry;

inserting the packet into the reserved cells of the output buffer; and

responsive to inserting the packet into the reserved cells of the output buffer, storing, in a second data structure: a packet handle associated with the packet; offset information associated with the virtual index; and an identifier of a message-fragmenting unit selected for forwarding the packet.

12. The method of claim 11 , wherein the entry is identified by the virtual index, wherein the entry comprises a set of slots, and wherein a respective slot is to store a physical index of the set of physical indices.

13. The method of claim 11 , further comprising:

storing a portion of the packet in a cell identified by a physical index of the set of physical indices.

14. The method of claim 11 , wherein the reserved cells storing the packet are non-contiguous in the output buffer.

15. The method of claim 11 , further comprising:

determining the packet handle and an offset associated with the packet;

identifying the entry based on the packet handle; and

obtaining the set of physical indices from the entry.

16. The method of claim 15 , further comprising obtaining a packet segment from a respective cell associated with a physical index of the set of physical indices.

17. The method of claim 16 , further comprising releasing the entry for reallocation.

18. The method of claim 11 , wherein in response to determining that the packet is a single-cell packet, the method further comprises:

determining a physical index of a cell for the packet; and

storing the packet in a cell identified by the physical index.

19. The method of claim 11 , further comprising:

fragmenting, a single message into packets of sizes corresponding to a maximum transmission unit; and

obtaining a next command from an assigned flow queue.

20. The method of claim 11 , wherein subsequent to storing the identifier of the message-fragmenting unit in the second data structure and in response to the message-fragmenting unit being selected for forwarding a next packet, the method further comprises retrieving information associated with the packet from the second data structure.

Assignments (2)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Nov 10, 2021
From: CRAY INC.
To: HEWLETT PACKARD ENTERPRISE DEVELOPMENT LP
Reel/Frame 058842/0261 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Oct 25, 2021
From: KUNDU, PARTHA PRATIM; HEWSON, DAVID CHARLES
To: CRAY INC.
Reel/Frame 057893/0638 →
Continuity (4)
Provisional Application 62852273 · May 23, 2019
Provisional Application 62852203 · May 23, 2019
Provisional Application 62852289 · May 23, 2019
Related Publication 20220255884A1 · Aug 11, 2022