Skip to content

Implement per-size-class lock sharding to reduce contention - #120

Closed
bpowers wants to merge 0 commit into
masterfrom
bobby/sharded-global-locks
Closed

bpowers wants to merge 0 commit into
masterfrom
bobby/sharded-global-locks

Conversation

@bpowers

@bpowers bpowers commented Nov 28, 2025

Copy link
Copy Markdown
Member
  • Replace single _miniheapLock with per-size-class _miniheapLocks array
  • Add separate _largeAllocLock for large allocations (sizeClass == -1)
  • Add _arenaLock to protect shared arena/allocator state
  • Add AllLocksGuard RAII class for acquiring all locks in consistent order
  • Make _miniheapCount atomic for safe access under different locks
  • Update freeFor() to use per-size-class locks with proper ordering
  • Defer flushBinLocked() to meshing cycle to avoid lock ordering issues
  • Update mallctl(), getSize(), okToProceed() for new lock structure

Lock ordering: arena → large → sizeClass[0..N-1]

This idea is that this can reduce lock contention in multi-threaded workloads by allowing concurrent operations on different size classes.

@emeryberger

Copy link
Copy Markdown
Member

@bpowers is this still in progress?

@bpowers bpowers closed this Mar 25, 2026
@bpowers
bpowers force-pushed the bobby/sharded-global-locks branch from 39910b7 to c42c9da Compare March 25, 2026 13:50
@bpowers

bpowers commented Mar 25, 2026

Copy link
Copy Markdown
Member Author

@emeryberger this work was already merged

@bpowers
bpowers deleted the bobby/sharded-global-locks branch March 25, 2026 14:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants