Lock-Free Code Streaming via Atomic Memory Writes

Resolve Bottlenecks,
Find Innovative Solutions
Generate Solutions

Solution Overview

Problem

Existing systems face performance issues and potential crashes due to race conditions when threads execute or write data simultaneously, leading to suspensions that impact overall process efficiency.

Innovation Solution

Disassembling executable code and ordering memory writes using atomic operations and debug break opcodes to maintain a consistent memory state, allowing other threads to execute while code is being written, and employing a stream fault handler to manage invalid pages without suspending the entire process.

Engineering Contradictions & Design Principles

VSEngineering Contradiction Analysis

1Reliability

If the executing thread is suspended to wait for data delivery, then race conditions are prevented, but process performance deteriorates due to thread suspension

Engineering Contradiction:
Improverace condition preventionVSAvoidprocess performance
Core Design Contradiction:
ReliabilityVSProductivity

Solution Approach 1:

The memory space is segmented into valid and invalid pages. The executing thread operates on valid pages while the writing thread delivers data to invalid pages. This segmentation allows both threads to operate concurrently without race conditions, as they work on separate memory regions that are properly isolated.

Inventive Principle:
Principle #1Segmentation

Solution Approach 2:

A stream fault handler acts as an intermediary between the executing and writing threads. When the executing thread encounters an invalid page, the stream fault handler intercepts the fault, triggers data delivery to that page, and then allows execution to resume. This mediator coordinates the operations of both threads without requiring suspension.

Inventive Principle:
Principle #24Intermediary (Mediator)

2Stability of the object's composition

If all threads are suspended to wait for data delivery, then data consistency is ensured, but scalability deteriorates due to loss of parallel execution

Engineering Contradiction:
Improvedata consistencyVSAvoidscalability
Core Design Contradiction:
Stability of the object's compositionVSAdaptability or versatility

Solution Approach 1:

The memory space is segmented into valid and invalid pages. The executing thread operates on valid pages while the writing thread delivers data to invalid pages. This segmentation allows both threads to operate concurrently without race conditions, as they work on separate memory regions that are properly isolated.

Inventive Principle:
Principle #1Segmentation

Solution Approach 2:

Different memory pages have different qualities: valid pages contain executable code that can be safely executed, while invalid pages are reserved for incoming data delivery. This local quality differentiation allows the system to maintain data consistency in invalid pages while allowing execution to continue in valid pages, enabling concurrent operations without global suspension.

Inventive Principle:
Principle #3Local quality

3Reliability

If kernel mode components are used for streaming, then system control is improved, but system complexity increases due to mode switching

Engineering Contradiction:
Improvesystem controlVSAvoidsystem complexity
Core Design Contradiction:
ReliabilityVSDevice complexity

Solution Approach 1:

The stream fault handler operates in user mode and autonomously manages the data delivery process. When an invalid page is encountered, the handler automatically triggers the writing thread to deliver data and then resumes execution. This self-service mechanism eliminates the need for kernel mode intervention, reducing system complexity while maintaining reliable control through proper memory management.

Inventive Principle:
Principle #25Self-service

Data Source

PatentEP2877918B1Lock free streaming of executable code data
Publication Date: 2022.02.16 MICROSOFT TECHNOLOGY LICENSING LLC
  • EP2877918B1 patent drawingFigure 1A~1D
  • EP2877918B1 patent drawingFigure 2
  • EP2877918B1 patent drawingFigure 3~4

AI summary

A disassembler receives instructions and disassembles them into a plurality of separate opcodes. The disassembler creates a table identifying boundaries between each opcode. Each opcode is written to memory in an opcode-by-opcode manner by atomically writing standard blocks of memory. Debug break point opcodes are appended to opcode to create a full block of memory when needed. The block of memory may be thirty-two or sixty-four bits long, for example. Long opcodes may overlap two or more memory blocks. Debug break point opcodes may be appended to a second portion of the long opcode to create a full block of memory. A stream fault interceptor identifies when a requested data page is not available and retrieving the data page.