NIC Buffer Allocation Using Segmented Pools for Packet Size Adaptation
Find Innovative SolutionsGenerate Solutions
Solution Overview
Problem
Current network packet buffering techniques either waste memory with large buffers for small packets or suffer from discontiguous packet issues with chained small buffers, leading to decreased system performance.
Innovation Solution
A system that allocates pools of small and large buffers and uses descriptors to select the appropriate buffer based on packet size, allowing efficient storage and retrieval of network packets by including buffer pointers in descriptors.
Engineering Contradictions & Design Principles
Engineering Contradiction Analysis
1Adaptability or versatility
If large buffers are used to accommodate entire jumbo frames, then packet buffering capability is improved, but memory waste increases when small network packets consume large buffers
Solution Approach 1:
The patent divides the buffer into two separate pools: a first buffer pool for small packets and a second buffer pool for large packets (jumbo frames). This segmentation allows the system to allocate appropriate buffer sizes based on packet type, preventing small packets from consuming large buffer space while ensuring large packets have sufficient buffering capacity.
Solution Approach 2:
Different buffer pools are created with different characteristics suited to different packet types. The first buffer pool is optimized for small packets (reducing memory waste), while the second buffer pool is optimized for large packets (ensuring adequate capacity). This local quality approach allows each buffer pool to have properties tailored to its specific usage pattern.
2Loss of substance
If a collection of smaller buffers chained together is used, then memory efficiency is improved, but system performance decreases due to discontiguous packet structure and ineffective prefetch operations
Solution Approach 1:
Instead of chaining multiple small buffers together, the patent segments the buffering responsibility by creating separate buffer pools. Each pool manages its own contiguous memory space, eliminating the need for buffer chaining while maintaining memory efficiency. The receive stack processes packets from these separate pools without encountering discontiguous structures.
Solution Approach 2:
The patent merges the concept of buffer pools with the descriptor structure to create a unified approach. Descriptors reference buffers in pools, combining the benefits of contiguous memory allocation with efficient memory utilization. This merging eliminates the performance penalties of buffer chaining while maintaining memory efficiency.
3Adaptability or versatility
If buffer chains are used to accommodate variable packet sizes, then memory flexibility is improved, but processing complexity increases as the receive stack must process discontiguous packets
Solution Approach 1:
The patent segments the buffer allocation strategy into distinct pools, which simplifies the receive stack processing. Instead of managing chains of buffers, the receive stack simply needs to allocate from the appropriate pool based on packet size, reducing processing complexity while maintaining memory flexibility.
Solution Approach 2:
The descriptor structure serves as an intermediary between the buffer pools and the receive stack. Descriptors store references to buffers in the pools, allowing the receive stack to access packet data without directly managing buffer chains. This intermediary layer simplifies the processing interface while maintaining memory flexibility.
Data Source
AI summary
Technologies for buffering received network packet data include a compute device with a network interface controller (NIC) configured to determine a packet size of a network packet received by the NIC and identify a preferred buffer size between a small buffer and a large buffer. The NIC is further configured to select, from the descriptor, a buffer pointer based on the preferred buffer size, wherein the buffer pointer comprises one of a small buffer pointer corresponding to a first physical address in memory allocated to the small buffer or a large buffer pointer corresponding to a second physical address in memory allocated to the large buffer. Additionally, the NIC is configured to store at least a portion of the network packet in the memory based on the selected buffer pointer. Other embodiments are described herein.


