Skip to content

merge master#10563

Merged
kamilchodola merged 58 commits intoperf/extcodesize-cachefrom
kch/extcoddsize-cache
Feb 17, 2026
Merged

merge master#10563
kamilchodola merged 58 commits intoperf/extcodesize-cachefrom
kch/extcoddsize-cache

Conversation

@kamilchodola
Copy link
Copy Markdown
Contributor

Fixes Closes Resolves #

Please choose one of the keywords above to refer to the issue this PR solves followed by the issue number (e.g. Fixes #000). If no issue number, remove the line. Also, remove everything marked optional that is not applicable. Remove this note after reading.

Changes

  • List the changes

Types of changes

What types of changes does your code introduce?

  • Bugfix (a non-breaking change that fixes an issue)
  • New feature (a non-breaking change that adds functionality)
  • Breaking change (a change that causes existing functionality not to work as expected)
  • Optimization
  • Refactoring
  • Documentation update
  • Build-related changes
  • Other: Description

Testing

Requires testing

  • Yes
  • No

If yes, did you write tests?

  • Yes
  • No

Notes on testing

Optional. Remove if not applicable.

Documentation

Requires documentation update

  • Yes
  • No

If yes, link the PR to the docs update or the issue with the details labeled docs. Remove if not applicable.

Requires explanation in Release Notes

  • Yes
  • No

If yes, fill in the details here. Remove if not applicable.

Remarks

Optional. Remove if not applicable.

LukaszRozmej and others added 30 commits February 5, 2026 14:35
* Fix XDC flaky reward test with correct signature for transaction

* Add Retry to LockFairnessTest

* fix GetMemoryOwner for managed dbs + refactors

* whitespace

* Decrease Retain_Some_PersistedNodes threshold to resolve flakiness

* fix review

* tiny refactor

* Parallelize Trie.Tests

* Parallelize Nethermind.Blockchain.Test

* Revert FilterManagerTests parall
Co-authored-by: rubo <rubo@users.noreply.github.com>
* Fix XDC flaky reward test with correct signature for transaction

* Add Retry to LockFairnessTest

* fix GetMemoryOwner for managed dbs + refactors

* whitespace

* Decrease Retain_Some_PersistedNodes threshold to resolve flakiness

* fix review

* tiny refactor

* Parallelize Trie.Tests

* Parallelize Nethermind.Blockchain.Test

* Revert FilterManagerTests parall

* parallelize some TxPool tests

* Try parallelize more tests

* make TxPool tests more parallelizable

* revert

* fix

* fix issues in Nethermind.Blockchain.Test

* more fixes

* more fixes

* FilterManagerTests nonparallelizable

* fix

* fix flaky test

* fix shutter test

* Add retry to Fuzz_accounts_with_storage

* retry flaky test

* add [NonParallelizable]
add custom state sync allocation strategy for xdc
* processing stats extensibility

* improvement

* build fix

* fix
* fix: correct Bytes.BytesComparer length comparison ordering

The BytesComparer had inverted length comparison logic:
- null was considered greater than non-null (should be less)
- shorter arrays with same prefix were considered greater than longer
  arrays (should be less)

Fixed by inverting the return values for length-related comparisons:
- null < non-null
- [] < [x, ...] (empty < non-empty)
- [prefix] < [prefix, more] (shorter with same prefix < longer)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Switched to sequence compare to

* Address comment

* fix: handle null y in BytesComparer when x is non-null

Null arrays implicitly convert to empty ReadOnlySpan<byte> in
SequenceCompareTo, losing the null vs empty distinction.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
* Use CodeInfo type instead of ICodeInfo

Replace the ICodeInfo abstraction with a concrete CodeInfo type and adapt related APIs and implementations. CodeInfo was extended to carry precompile info, provide Code/CodeSpan, Version, IsPrecompile/IsEmpty semantics and background analysis. EofCodeInfo now derives from CodeInfo and provides EOF-specific data and versioning. PrecompileInfo was removed and precompiles are represented as CodeInfo (wrapping CachedPrecompile when needed).

API changes: ICodeInfoRepository, IOverridableCodeInfoRepository and IPrecompileProvider signatures and caches now use CodeInfo; CodeInfoFactory and CodeLruCache updated accordingly. Call sites across the VM, instruction implementations, tracers, transaction processing, repositories and tests were updated to use CodeInfo directly and to perform EOF checks using 'is EofCodeInfo' where appropriate. JumpDestinationAnalyzer.MachineCode was made accessible for CodeInfo.Code.

Overall this unifies EOF and precompile handling under a single CodeInfo model and simplifies caching and execution logic.

* Feedback
* Add CI workflow for Surge integration tests and update workflow for Taiko

* Update CI workflow to reference the correct surge configuration file

* Update CI workflows to increase timeout for integration tests and adjust repository references

* Resolve comments
remove broken Parallelizable

Co-authored-by: Lukasz Rozmej <lukasz.rozmej@gmail.com>
* Add JitAsm tool to be able to analyse the Jit output

* Spelling

* Address AGENTS.md LINQ guideline feedback on JitAsm PR (#10433)

* Initial plan

* Strengthen AGENTS.md LINQ guideline with explicit examples

Co-authored-by: benaadams <1142958+benaadams@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: benaadams <1142958+benaadams@users.noreply.github.com>

* Spell

* feedback

* Feedback

* Improve initialization

---------

Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
Co-authored-by: benaadams <1142958+benaadams@users.noreply.github.com>
* Update README with performance highlights of Nethermind

Revised description to emphasize performance metrics.

* Update README.md

Co-authored-by: Lukasz Rozmej <lukasz.rozmej@gmail.com>

* Update README.md

Co-authored-by: Ruben Buniatyan <rubo@users.noreply.github.com>

* Update README with image sources and badges

* Add 'srcset' to cspell.json dictionary

* Remove cspell directives from README

Removed cspell directives from README.md.

---------

Co-authored-by: Lukasz Rozmej <lukasz.rozmej@gmail.com>
Co-authored-by: Ruben Buniatyan <rubo@users.noreply.github.com>
Co-authored-by: rubo <rubo@users.noreply.github.com>
Co-authored-by: emlautarom1 <emlautarom1@users.noreply.github.com>
- PeerManagerTests: Increase After timeout from 1000ms to 3000ms in
  Will_not_stop_trying_on_rlpx_connection_failure to prevent false
  failures on loaded CI runners
- SyncServerTests: Use Interlocked.Increment in
  Broadcast_NewBlock_on_arrival_to_sqrt_of_peers to fix race condition
  where concurrent SyncPeerMock background threads could lose count
  increments
- Rename _travisDelay fields to _delay, _delayLong, _delayLonger

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* Metrics and BlockStatistics extension

* extensibility fixes
* more Agents changes

avoid var, use testcases

* Revise testing guidelines and LINQ usage recommendations

Updated guidelines for adding tests and using LINQ.
refactoring & codeinfo changes
…ssor` (#10462)

* fix: add missing yield break after shutdown response

* Add test

* ensure pipereader is completed on shutdown early-exit

* cover pipereader completion when shutdown is requested

---------

Co-authored-by: Lukasz Rozmej <lukasz.rozmej@gmail.com>
#10468)

* Update Rlp.cs

* Add regression test for Rlp.Encode<T> with Rlp input

---------

Co-authored-by: Ben {chmark} Adams <thundercat@illyriad.co.uk>
* Add SeqlockCache and use for Accounts and Values

* Add tests

* Spelling

* By in

* Feedback

* Apply suggestions from code review

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Apply suggestions from code review

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Fix

* Feedback

* Change to 2 way cache

* 2-way skew-associative

* Add prefetch for way 1 and hash-bit alternating eviction

Prefetch way 1's cache line while checking way 0 to hide L2/L3
latency in the skew layout where ways are ~1MB apart. Use a hash
bit to alternate eviction when both ways are live instead of always
evicting way 0 — measured identical hit rates with zero extra memory.

* Add Volatile.Read/Write for _hashes in BlockhashProvider

Ensures cross-thread visibility of the prefetched hashes array on
ARM's weak memory model. On x86 (TSO) these are no-ops.

* Convert NodeStorageCache and PreBlockCaches.RlpCache to SeqlockCache

* Inline Address comparison in StorageCell.Equals for SeqlockCache hot path

Seal Address class and inline 20-byte comparison (Vector128 + uint) directly
in StorageCell.Equals to eliminate Address.Equals calls that the JIT refuses
to inline in deep chains. Adds ReferenceEquals fast-path.

* Outline cold paths in SeqlockCache and fix IsPersisted delegate allocation

Extract GetOrAddMiss as NoInlining to keep GetOrAdd hit path lean (2122 -> 748 bytes).
Change WriteEntry to NoInlining and collapse eviction tree to single call site.
Reuse cached _tryLoadRlp delegate in PreCachedTrieStore.IsPersisted.

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
…ck re-encode (#10435)

* Add encoded-tx root calc and trie decode perf

Allow computing the transactions trie root directly from RLP-encoded transactions and update callers to use it. ExecutionPayload.TryGetBlock now passes the encoded Transactions to TxTrie.CalculateRoot. Implement TxTrie.CalculateRoot(ReadOnlySpan<byte[]>) and InitializeFromEncodedTransactions to populate the trie from encoded payloads and compute RootHash; use a TrackingCappedArrayPool and UpdateRootHash. Add a unit test to assert encoded and decoded transaction paths produce the same root. Also refine trie node RLP encoding parallelization: UseParallel now checks the node's non-null child count (only parallelize when >= 4 children and multiple CPU cores) to avoid parallel overhead on small branches.

* Fast block re-encode

* Feedback
…10476)

* Move tx block-format wrapping logic from BlockDecoder to TxDecoder

Extract the legacy-vs-typed tx wrapping knowledge into static helpers
on TxDecoder (GetBlockFormatLength, WriteBlockFormat) so BlockDecoder
no longer directly checks TxType.Legacy for encoding decisions.

* Feedback
Co-authored-by: rubo <rubo@users.noreply.github.com>
@kamilchodola kamilchodola requested a review from a team February 17, 2026 23:20
@kamilchodola kamilchodola merged commit 70b3b01 into perf/extcodesize-cache Feb 17, 2026
71 of 72 checks passed
@kamilchodola kamilchodola deleted the kch/extcoddsize-cache branch February 17, 2026 23:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.