Thread Local Storage Update Buffer Queuing for Low Contention

Resolve Bottlenecks,
Find Innovative Solutions
Generate Solutions

Solution Overview

Problem

In computer systems, especially those with a small number of application threads, garbage collection methods face contention issues when accessing update buffers, leading to increased latency and reduced scalability due to the need for atomic operations on a global queue, which affects the efficiency of both application and garbage collector threads.

Innovation Solution

Implementing a method where each mutator thread uses two slots in Thread Local Storage (TLS) for a current and finished update buffer pointer, allowing the garbage collector thread to periodically check for available buffers and reduce contention by minimizing access to the global queue, thus optimizing latency for application threads at the expense of potentially increased latency for garbage collector threads.

Engineering Contradictions & Design Principles

VSEngineering Contradiction Analysis

1Reliability

If a global queue is used for update buffers with atomic operations, then garbage collection can be implemented, but contention increases and scalability decreases

Engineering Contradiction:
Improvegarbage collection functionalityVSAvoidsystem scalability
Core Design Contradiction:
ReliabilityVSProductivity

Solution Approach 1:

The patent divides the single global queue into multiple per-thread update buffers, with each thread having its own dedicated buffer. This segmentation eliminates the need for atomic operations on a shared queue, as threads operate on their own buffers independently, thereby reducing contention and improving scalability while maintaining garbage collection functionality.

Inventive Principle:
Principle #1Segmentation

Solution Approach 2:

The patent extracts the contentious atomic operation mechanism from the update buffer management process. By removing the global queue and its associated lock/CAS operations, the system eliminates the bottleneck that limited scalability, while still enabling garbage collection through alternative buffer management approaches.

Inventive Principle:
Principle #2Taking out (Extraction)

2Reliability

If atomic operations are used for queue access, then thread safety is ensured, but latency increases due to synchronization overhead

Engineering Contradiction:
Improvethread safetyVSAvoidthread latency
Core Design Contradiction:
ReliabilityVSLoss of time

Solution Approach 1:

By assigning dedicated update buffers to individual threads, the patent eliminates the need for atomic operations and synchronization primitives. Each thread safely writes to its own buffer without contention, achieving both thread safety and reduced latency simultaneously.

Inventive Principle:
Principle #1Segmentation

3Productivity

If update buffers are frequently added to global queue, then garbage collection efficiency improves, but memory resource contention increases

Engineering Contradiction:
Improvegarbage collection efficiencyVSAvoidmemory contention
Core Design Contradiction:
ProductivityVSObject-affected harmful factors

Solution Approach 1:

The patent segments the monolithic global queue into thread-specific update buffers, allowing garbage collector threads to access buffers without contention. GC threads can efficiently process update buffers from multiple application threads by reading from their respective buffers directly, eliminating memory resource contention while maintaining GC efficiency.

Inventive Principle:
Principle #1Segmentation

Data Source

PatentUS8645651B2Low-contention update buffer queuing for small systems
Publication Date: 2014.02.04 ORACLE AMERICAN INC
  • US8645651B2 patent drawing
  • US8645651B2 patent drawing
  • US8645651B2 patent drawing

AI summary

A method for queuing update buffers to enhance garbage collection. The method includes running an application thread and providing, for the application thread, a data structure including current and finished update buffer slots. The method includes providing an update buffer for the application thread and storing a pointer to the update buffer in the current update buffer slot. The method includes storing null in the finished update buffer slot and, with the application thread, writing to the update buffer. The thread may write a pointer to the filled update buffer in the finished update buffer slot after the buffer is filled. The method includes using a garbage collector thread to inspect the finished update buffer slot and claim filled buffers and change the pointer to null. The thread then obtains an empty update buffer and updates the current update buffer slot to point to the new buffer.