Skip to content

Use Cycles32 in CpuCache::ResizeInfo to reduce metadata footprint - #444

Merged
copybara-service[bot] merged 1 commit into
masterfrom
test_956533304
Aug 3, 2026
Merged

Use Cycles32 in CpuCache::ResizeInfo to reduce metadata footprint#444
copybara-service[bot] merged 1 commit into
masterfrom
test_956533304

Conversation

@copybara-service

@copybara-service copybara-service Bot commented Jul 30, 2026

Copy link
Copy Markdown

Use Cycles32 in CpuCache::ResizeInfo to reduce metadata footprint

TCMalloc's CpuCache::ResizeInfo previously stored 64-bit cycle timestamps
(std::atomic<int64_t>) for last_miss_cycles across 2 size-class arrays of
kNumClasses=258 and for last_reclaim. This consumed 16 bytes per size class per
CPU plus an 8-byte reclaim timestamp per CPU.

Replaces last_miss_cycles timestamps with Cycles32, reducing per-CPU metadata by
8 bytes per size-class array element, and removes last_reclaim entirely from
ResizeInfo.

This is safe, because in CpuCache::ResizeInfo, last_miss_cycles is read-only
diagnostic telemetry consumed exclusively by CpuCache::GetStats(); it does not
influence allocator correctness, slab resizing, or cache eviction.
Right-shifting CycleClock::Now() by kShift = 20 bits (~1M cycles, ~0.35 ms
granularity at 3 GHz) extends the 32-bit wraparound epoch to ~17.3 days before
overflow occurs, while unsigned 32-bit subtraction still calculates exact
elapsed durations across wraparound boundaries. Furthermore, CpuCache::Reclaim
now resets last_miss_cycles to 0 on reclaimed CPU caches, reducing any 32-bit
overflow risk on idle CPUs.

@copybara-service
copybara-service Bot force-pushed the test_956533304 branch 2 times, most recently from abb7a21 to f65fb94 Compare August 3, 2026 20:46
TCMalloc's CpuCache::ResizeInfo previously stored 64-bit cycle timestamps
(std::atomic<int64_t>) for last_miss_cycles across 2 size-class arrays of
kNumClasses=258 and for last_reclaim. This consumed 16 bytes per size class per
CPU plus an 8-byte reclaim timestamp per CPU.

Replaces last_miss_cycles timestamps with Cycles32, reducing per-CPU metadata by
8 bytes per size-class array element, and removes last_reclaim entirely from
ResizeInfo.

This is safe, because in CpuCache::ResizeInfo, last_miss_cycles is read-only
diagnostic telemetry consumed exclusively by CpuCache::GetStats(); it does not
influence allocator correctness, slab resizing, or cache eviction.
Right-shifting CycleClock::Now() by kShift = 20 bits (~1M cycles, ~0.35 ms
granularity at 3 GHz) extends the 32-bit wraparound epoch to ~17.3 days before
overflow occurs, while unsigned 32-bit subtraction still calculates exact
elapsed durations across wraparound boundaries. Furthermore, CpuCache::Reclaim
now resets last_miss_cycles to 0 on reclaimed CPU caches, reducing any 32-bit
overflow risk on idle CPUs.

PiperOrigin-RevId: 958568123
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.

1 participant