Receive Interrupt Signaling via Event Queues
Find Innovative SolutionsGenerate Solutions
Solution Overview
Problem
In cloud-hosted services and data centers, the software-based packet processing in network adapters leads to significant CPU overhead and limited scalability due to the need for software to check multiple receive queues associated with a shared interrupt vector, causing inefficiencies in handling packet processing and interrupt signaling.
Innovation Solution
Logical partitioning of receive queues into pools, each associated with a respective interrupt vector, allowing explicit notification to an event queue for activity, and automatic disabling of message generation for certain interrupt events to improve receive interrupt signaling efficiency.
Engineering Contradictions & Design Principles
Engineering Contradiction Analysis
1Productivity
If multiple receive queues share a single interrupt vector, then system resource utilization is improved, but software must check every receive queue to determine which is ready for processing, increasing processing overhead
Solution Approach 1:
An event queue is introduced as an intermediary data structure between the receive queues and the interrupt handler. The event queue stores event information including receive queue identifiers and next activity locations, allowing the interrupt handler to quickly determine which specific receive queue needs processing without checking all queues associated with the interrupt vector.
Solution Approach 2:
The system segments the interrupt handling process into distinct components: the interrupt vector receives the interrupt signal, the event queue contains segmented event information for individual receive queues, and the interrupt handler processes only the relevant segmented event. This segmentation enables efficient identification of the specific receive queue needing attention among many shared queues.
2Ease of manufacture
If software polls receive queues to detect new packets, then simple implementation is achieved, but CPU overhead increases significantly
Solution Approach 1:
The system implements self-service interrupt notification where the hardware automatically generates and queues event information in the event queue when packets arrive at receive queues. This eliminates the need for software to actively poll receive queues, as the system itself notifies software of events that require attention, significantly reducing CPU overhead while maintaining implementation simplicity.
3Speed
If interrupt mode is used to notify software of new packets, then processing speed is improved, but interrupt chatter increases when multiple queues share a vector
Solution Approach 1:
The event queue acts as a mediator that filters and consolidates interrupt information. Instead of generating separate interrupts for each receive queue event, the system uses the event queue to organize events, allowing the interrupt handler to efficiently identify and process only the relevant receive queue, thereby reducing unnecessary interrupt chatter while maintaining fast notification speed.
4Adaptability or versatility
If dozens or hundreds of receive queues share a single interrupt vector, then system scalability is improved, but it becomes problematic to determine which queue needs processing
Solution Approach 1:
The event queue serves as an intermediary that stores event information explicitly identifying which receive queue generated the interrupt and where the next activity is located. This intermediary structure enables the interrupt handler to quickly identify the specific receive queue among dozens or hundreds of shared queues, maintaining system scalability while reducing queue identification complexity.
Solution Approach 2:
The event information is segmented to include specific identify of the receive queue and the next activity location. This segmentation of event data allows the interrupt handler to process individual queues independently and efficiently, even when many queues share a single interrupt vector, thereby maintaining scalability without increasing identification complexity.
Data Source
AI summary
Methods for performing efficient receive interrupt signaling and associated apparatus, computing platform, software, and firmware. Receive (RX) queues in which descriptors associated with packets are enqueued are implemented in host memory and logically partitioned into pools, with each RX queue pool associated with a respective interrupt vector. Receive event queues (REQs) associated with respective RX queue pools and interrupt vectors are also implemented in host memory. Event generation is selectively enabled for some RX queues, while event generation is masked for others. In response to event causes for RX queues that are event generation-enabled, associated events are generated and enqueued in the REQs and interrupts on associated interrupt vectors are asserted. The events are serviced by accessing the events in the REQs, which identify the RX queue for the event and a next activity location at which a next descriptor to be processed is located. After asserting an interrupt, an RX queue may be auto-masked to prevent generation of additional events when new descriptors are enqueued in the RX queue.


