Skip to content

perf(provider): lazily refresh static-file jar cache#23903

Closed
mediocregopher wants to merge 1 commit intomainfrom
auto-opt/20260501-static-file-lazy-cache-refresh
Closed

perf(provider): lazily refresh static-file jar cache#23903
mediocregopher wants to merge 1 commit intomainfrom
auto-opt/20260501-static-file-lazy-cache-refresh

Conversation

@mediocregopher
Copy link
Copy Markdown
Member

@mediocregopher mediocregopher commented May 1, 2026

Pass the live SegmentHeader into static-file index updates so append-side bookkeeping can reuse the writer's in-memory state instead of reopening the jar for every write. This keeps the steady-state save_blocks path from doing redundant jar loads and mmaps when only the provider indexes need to advance.

Only rebuild the cached LoadedJar when that segment range is already resident in the reader cache, and leave uncached ranges to be loaded lazily on demand. Update the static-file producer call site for the new API and cover the lazy-refresh behavior with a provider test.

@mediocregopher
Copy link
Copy Markdown
Member Author

derek bench blocks=200 slack=never

@decofe
Copy link
Copy Markdown
Member

decofe commented May 1, 2026

cc @mediocregopher

❌ Benchmark failed while building binaries. View logs

@mediocregopher
Copy link
Copy Markdown
Member Author

derek bench blocks=200 slack=never

@decofe
Copy link
Copy Markdown
Member

decofe commented May 1, 2026

cc @mediocregopher

❌ Benchmark failed while building binaries. View logs

@mediocregopher
Copy link
Copy Markdown
Member Author

derek bench blocks=200 slack=never

@decofe
Copy link
Copy Markdown
Member

decofe commented May 1, 2026

cc @mediocregopher

❌ Benchmark failed while building binaries. View logs

@mediocregopher
Copy link
Copy Markdown
Member Author

derek bench blocks=200 slack=never

@decofe
Copy link
Copy Markdown
Member

decofe commented May 1, 2026

cc @mediocregopher

❌ Benchmark failed while building binaries. View logs

@mediocregopher
Copy link
Copy Markdown
Member Author

derek bench blocks=200 slack=never

@decofe
Copy link
Copy Markdown
Member

decofe commented May 1, 2026

cc @mediocregopher

❌ Benchmark failed while building binaries. View logs

@mediocregopher
Copy link
Copy Markdown
Member Author

derek bench blocks=200 slack=never

@decofe
Copy link
Copy Markdown
Member

decofe commented May 1, 2026

cc @mediocregopher

❌ Benchmark failed while building binaries. View logs

@mediocregopher
Copy link
Copy Markdown
Member Author

derek bench blocks=200 slack=never

@decofe
Copy link
Copy Markdown
Member

decofe commented May 1, 2026

cc @mediocregopher

❌ Benchmark failed while building binaries. View logs

@mediocregopher
Copy link
Copy Markdown
Member Author

derek bench blocks=200 slack=never

@decofe
Copy link
Copy Markdown
Member

decofe commented May 1, 2026

cc @mediocregopher

❌ Benchmark failed while building binaries. View logs

@mediocregopher
Copy link
Copy Markdown
Member Author

derek bench blocks=200 slack=never

@decofe
Copy link
Copy Markdown
Member

decofe commented May 1, 2026

cc @mediocregopher

❌ Benchmark failed while building binaries. View logs

@mediocregopher
Copy link
Copy Markdown
Member Author

derek bench blocks=200 slack=never

@decofe
Copy link
Copy Markdown
Member

decofe commented May 1, 2026

cc @mediocregopher

❌ Benchmark failed while building binaries. View logs

@mediocregopher
Copy link
Copy Markdown
Member Author

derek bench blocks=200 slack=never

@decofe
Copy link
Copy Markdown
Member

decofe commented May 1, 2026

cc @mediocregopher

❌ Benchmark failed while building binaries. View logs

@mediocregopher
Copy link
Copy Markdown
Member Author

derek bench blocks=200 slack=never

@decofe
Copy link
Copy Markdown
Member

decofe commented May 1, 2026

cc @mediocregopher

❌ Benchmark failed while building binaries. View logs

@mediocregopher
Copy link
Copy Markdown
Member Author

derek bench blocks=200 slack=never

@decofe
Copy link
Copy Markdown
Member

decofe commented May 1, 2026

cc @mediocregopher

❌ Benchmark failed while building binaries. View logs

@mediocregopher
Copy link
Copy Markdown
Member Author

derek bench blocks=200 slack=never

@decofe
Copy link
Copy Markdown
Member

decofe commented May 1, 2026

cc @mediocregopher

❌ Benchmark failed while building binaries. View logs

@mediocregopher
Copy link
Copy Markdown
Member Author

derek bench blocks=200 slack=never

@decofe
Copy link
Copy Markdown
Member

decofe commented May 4, 2026

cc @mediocregopher

❌ Benchmark failed while building binaries. View logs

@mediocregopher
Copy link
Copy Markdown
Member Author

derek bench blocks=200 slack=never

@decofe
Copy link
Copy Markdown
Member

decofe commented May 4, 2026

cc @mediocregopher

❌ Benchmark failed while building binaries. View logs

@mediocregopher
Copy link
Copy Markdown
Member Author

derek bench blocks=200 slack=never

@decofe
Copy link
Copy Markdown
Member

decofe commented May 4, 2026

cc @mediocregopher

❌ Benchmark failed while building binaries. View logs

@mediocregopher
Copy link
Copy Markdown
Member Author

derek bench blocks=200 slack=never

@decofe
Copy link
Copy Markdown
Member

decofe commented May 4, 2026

cc @mediocregopher

❌ Benchmark failed while building binaries. View logs

@mediocregopher
Copy link
Copy Markdown
Member Author

derek bench blocks=200 slack=never

@decofe
Copy link
Copy Markdown
Member

decofe commented May 4, 2026

cc @mediocregopher

❌ Benchmark failed while building binaries. View logs

@mediocregopher
Copy link
Copy Markdown
Member Author

derek bench blocks=200 slack=never

@decofe
Copy link
Copy Markdown
Member

decofe commented May 4, 2026

cc @mediocregopher

❌ Benchmark failed while building binaries. View logs

@mediocregopher
Copy link
Copy Markdown
Member Author

derek bench blocks=200 slack=never

@decofe
Copy link
Copy Markdown
Member

decofe commented May 4, 2026

cc @mediocregopher

❌ Benchmark failed while building binaries. View logs

@mediocregopher
Copy link
Copy Markdown
Member Author

derek bench blocks=200 slack=never

@decofe
Copy link
Copy Markdown
Member

decofe commented May 4, 2026

cc @mediocregopher

❌ Benchmark failed while building binaries. View logs

@mediocregopher
Copy link
Copy Markdown
Member Author

derek bench blocks=200 slack=never

@decofe
Copy link
Copy Markdown
Member

decofe commented May 4, 2026

cc @mediocregopher

❌ Benchmark failed while building binaries. View logs

@mediocregopher
Copy link
Copy Markdown
Member Author

derek bench blocks=200 slack=never

@decofe
Copy link
Copy Markdown
Member

decofe commented May 4, 2026

cc @mediocregopher

❌ Benchmark failed while building binaries. View logs

Pass the live SegmentHeader into static-file index updates so append-side bookkeeping can reuse the writer's in-memory state instead of reopening the jar for every write. This keeps the steady-state save_blocks path from doing redundant jar loads and mmaps when only the provider indexes need to advance.

Only rebuild the cached LoadedJar when that segment range is already resident in the reader cache, and leave uncached ranges to be loaded lazily on demand. Update the static-file producer call site for the new API and cover the lazy-refresh behavior with a provider test.

Amp-Thread-ID: https://ampcode.com/threads/T-019df23e-aac0-71af-8498-f77b1613ea22
Co-authored-by: Amp <[email protected]>
@mediocregopher mediocregopher force-pushed the auto-opt/20260501-static-file-lazy-cache-refresh branch from d143ab7 to 64a5a9c Compare May 4, 2026 09:14
@mediocregopher mediocregopher changed the title perf(provider): refresh static-file jars lazily perf(provider): lazily refresh static-file jar cache May 4, 2026
@mediocregopher
Copy link
Copy Markdown
Member Author

derek bench blocks=200 slack=never

@decofe
Copy link
Copy Markdown
Member

decofe commented May 4, 2026

cc @mediocregopher

✅ Benchmark complete! View job

Benchmark Results

⚠️ Feature is 1 commit behind main. Consider rebasing for accurate results.

Metric main auto-opt/20260501-static-file-lazy-cache-refresh Change
Mean 30.92ms 30.58ms -1.10% ⚪ (±3.96%)
StdDev 20.03ms 20.46ms
P50 25.77ms 25.64ms -0.51% ⚪ (±3.14%)
P90 49.60ms 45.45ms -8.37% ⚪ (±10.11%)
P99 131.34ms 151.01ms +14.98% ⚪ (±47.04%)
Mgas/s 1047.32 1061.27 +1.33% ⚪ (±1.77%)
Wall Clock 12.75s 12.58s -1.40% ⚪ (±3.88%)
Persist Wait 22.28ms 22.96ms +3.07% ⚪ (±43.97%)

200 blocks, 200 warmup

Wait Time Breakdown

Persistence Wait

Metric main auto-opt/20260501-static-file-lazy-cache-refresh
Mean 22.28ms 22.96ms
P50 0.02ms 0.02ms
P95 226.59ms 214.96ms

Trie Cache Update Wait

Metric main auto-opt/20260501-static-file-lazy-cache-refresh
Mean 0.43ms 0.44ms
P50 0.00ms 0.01ms
P95 1.91ms 1.87ms

Execution Cache Update Wait

Metric main auto-opt/20260501-static-file-lazy-cache-refresh
Mean 0.01ms 0.00ms
P50 0.00ms 0.00ms
P95 0.00ms 0.00ms

Grafana Dashboard

Charts

Latency, Throughput & Diff

Latency, Throughput & Diff

Wait Time Breakdown

Wait Time Breakdown

Gas vs Latency

Gas vs Latency

Grafana Dashboard

View real-time metrics

@mediocregopher
Copy link
Copy Markdown
Member Author

derek bench big-blocks blocks=50 slack=never

@decofe
Copy link
Copy Markdown
Member

decofe commented May 4, 2026

cc @mediocregopher

✅ Benchmark complete! View job

Benchmark Results

⚠️ Feature is 1 commit behind main. Consider rebasing for accurate results.

Metric main auto-opt/20260501-static-file-lazy-cache-refresh Change
Mean 700.98ms 705.35ms +0.62% ⚪ (±4.39%)
StdDev 161.12ms 167.40ms
P50 653.95ms 662.34ms +1.28% ⚪ (±3.98%)
P90 936.92ms 937.74ms +0.09% ⚪ (±16.58%)
P99 1261.22ms 1185.77ms -5.98% ⚪ (±6.12%)
Mgas/s 1518.96 1513.24 -0.38% ⚪ (±3.66%)
Wall Clock 71.23s 71.67s +0.61% ⚪ (±4.48%)
Persist Wait 0.06ms 0.28ms +408.94% ⚪ (±646.91%)

50 big blocks, 20 warmup

Wait Time Breakdown

Persistence Wait

Metric main auto-opt/20260501-static-file-lazy-cache-refresh
Mean 0.06ms 0.28ms
P50 0.05ms 0.06ms
P95 0.08ms 0.15ms

Trie Cache Update Wait

Metric main auto-opt/20260501-static-file-lazy-cache-refresh
Mean 0.00ms 0.00ms
P50 0.00ms 0.00ms
P95 0.00ms 0.00ms

Execution Cache Update Wait

Metric main auto-opt/20260501-static-file-lazy-cache-refresh
Mean 0.00ms 0.00ms
P50 0.00ms 0.00ms
P95 0.00ms 0.00ms

Grafana Dashboard

Charts

Latency, Throughput & Diff

Latency, Throughput & Diff

Wait Time Breakdown

Wait Time Breakdown

Gas vs Latency

Gas vs Latency

Grafana Dashboard

View real-time metrics

@mediocregopher
Copy link
Copy Markdown
Member Author

Closing: benchmark verdict is NO_WIN.

@github-project-automation github-project-automation Bot moved this from Backlog to Done in Reth Tracker May 4, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

3 participants