Stride-Based Receive Queue for Network Interface Memory Optimization

Resolve Bottlenecks,
Find Innovative Solutions
Generate Solutions

Solution Overview

Problem

Conventional data communication methods in high-performance computing, such as InfiniBand, incur substantial overhead and memory footprint due to the need for continuous production and consumption of work queue elements (WQEs) for handling 'push' operations, leading to latency and resource consumption.

Innovation Solution

Implementing a stride-based receive queue model where work items point to buffers divided into fixed-size segments (strides) in memory, allowing data to be written only to the necessary strides, with remaining strides used for subsequent packets, and dynamically managing buffer allocation based on traffic characteristics.

Engineering Contradictions & Design Principles

VSEngineering Contradiction Analysis

1Quantity of substance

If conventional WQE-based receive queue operations are used for handling push operations, then data can be received and written to memory, but memory footprint and overhead increase substantially due to continuous production and consumption of WQEs

Engineering Contradiction:
Improvememory footprintVSAvoiddata reception efficiency
Core Design Contradiction:
Quantity of substanceVSProductivity

Solution Approach 1:

The receive queue is segmented into multiple strides, each stride representing a fixed-size memory region. Instead of using traditional WQE structures for each packet, the system divides the receive buffer into discrete strides that can be incrementally consumed. This segmentation eliminates the overhead of continuous WQE production and consumption while maintaining efficient data reception through stride-based scattering.

Inventive Principle:
Principle #1Segmentation

2Loss of time

If conventional WQE-based receive queue operations are used, then data reception can be handled, but latency increases due to continuous production and consumption operations

Engineering Contradiction:
ImprovelatencyVSAvoidreceive queue operation complexity
Core Design Contradiction:
Loss of timeVSDevice complexity

Solution Approach 1:

The receive queue is pre-configured with strides that represent predetermined memory regions. Instead of creating WQEs dynamically for each incoming packet, the system prepares the stride structure in advance. When data arrives, the NIC simply scatters packets into the next available stride without requiring complex WQE production and consumption operations, thereby reducing latency and operational complexity.

Inventive Principle:
Principle #10Preliminary action

3Quantity of substance

If buffers are allocated for each WQE in the receive queue, then data can be written to specific memory locations, but resource consumption increases due to continuous buffer allocation and deallocation

Engineering Contradiction:
Improveresource consumptionVSAvoidbuffer allocation flexibility
Core Design Contradiction:
Quantity of substanceVSAdaptability or versatility

Solution Approach 1:

The stride-based receive queue creates a universal buffer management structure where strides serve multiple purposes: they represent both memory regions and receive queue entries simultaneously. Each stride can be used to receive data from any source without requiring separate buffer allocations, eliminating the need for continuous buffer allocation and deallocation while maintaining flexibility through the stride pointer mechanism.

Inventive Principle:
Principle #6Universality (Multi-functionality)

Data Source

PatentUS10210125B2Receive queue with stride-based data scattering
Publication Date: 2019.02.19 MELLANOX TECHNOLOGIES LTD(IL)
  • US10210125B2 patent drawing
  • US10210125B2 patent drawing
  • US10210125B2 patent drawing

AI summary

A method for communication includes posting in a queue a sequence of work items pointing to buffer consisting of multiple strides of a common, fixed size in a memory. A NIC receives data packets from a network containing data to be pushed to the memory. The NIC reads from the queue a first work item pointing to a first buffer and writes data from a first packet to a first number of the strides in the first buffer without consuming all of the strides in the first buffer. The NIC then writes at least a part of the data from a second packet to the remaining strides in the first buffer. When all the strides in the first buffer have been consumed, the NIC reads from the queue a second work item pointing to a second buffer, and writes further data to the strides in the second buffer.