Completion Queue Reduces Call Stack Usage for Future Objects

Resolve Bottlenecks,
Find Innovative Solutions
Generate Solutions

Solution Overview

Problem

Conventional implementations of future objects in asynchronous computations rely on the current thread's call stack for completion data and notifications, leading to large call stacks that negatively impact system performance and can result in stack overflow errors.

Innovation Solution

Employing a completion queue instead of the call stack to manage future object completions, where a processor device determines if a thread is associated with a completion queue and creates one if necessary, enqueues completion operations, and dequeues and performs them when the queue is empty.

Engineering Contradictions & Design Principles

VSEngineering Contradiction Analysis

1Reliability

If conventional implementations use the current thread's call stack to store data related to future object completions, then future object completion management is simple, but call stack usage increases leading to stack overflow errors and degraded system performance

Engineering Contradiction:
Improveprevention of stack overflow errorsVSAvoidcompletion management structure
Core Design Contradiction:
ReliabilityVSDevice complexity

Solution Approach 1:

The patent extracts the completion data storage from the call stack and places it in the heap memory through a CompletionContext object. This separation removes the burden from the call stack, preventing stack overflow errors while maintaining the necessary completion management functionality through heap-allocated memory structures.

Inventive Principle:
Principle #2Taking out (Extraction)

2Productivity

If a completion queue is introduced to manage future object completions, then call stack usage is reduced, but the system complexity increases

Engineering Contradiction:
Improvesystem performanceVSAvoidcompletion queue management
Core Design Contradiction:
ProductivityVSDevice complexity

Solution Approach 1:

The CompletionContext object serves as an intermediary between the call stack and the completion queue. It manages the queue on the heap and coordinates completion operations, reducing direct call stack involvement while maintaining structured completion management and improving system performance.

Inventive Principle:
Principle #24Intermediary (Mediator)

3Loss of information

If multiple linked future objects are processed sequentially on the call stack, then completion notifications are maintained, but the call stack depth increases negatively impacting performance

Engineering Contradiction:
Improvecompletion notification integrityVSAvoidsystem performance
Core Design Contradiction:
Loss of informationVSLoss of time

Solution Approach 1:

The patent transitions from a vertical call stack structure to a horizontal queue structure in heap memory. This dimensional change allows multiple future object completions to be managed in parallel on the heap rather than sequentially on the stack, maintaining notification integrity while improving performance by eliminating stack depth limitations.

Inventive Principle:
Principle #17Another dimension (Dimensionality change)

Data Source

PatentUS12099870B2Reducing call stack usage for future object completions
Publication Date: 2024.09.24 RED HAT LLC
  • US12099870B2 patent drawing
  • US12099870B2 patent drawing
  • US12099870B2 patent drawing

AI summary

Reducing call stack usage for future object completions is disclosed herein. In one example, a processor device of a computing device employs a completion queue when managing completions of future objects. When a future object is determined to have a status of complete, the processor device determines whether the current thread of the future object is associated with a completion queue. If so, a completion operation of the future object is enqueued in the completion queue. If the current thread is not associated with a completion queue, one is created and associated with the current thread, and the completion operation of the future object is performed. After completion, if the completion queue is not empty, any enqueued completion operations are dequeued and performed. Once the completion queue is empty, the completion queue is removed.