Skip to content

Conversation

@karalabe
Copy link
Member

@karalabe karalabe commented Apr 26, 2024

This PR is more of a prep thing and maaaaybe (?) a very light performance optimization.

Currently we're trying to measure things very accurately when it comes to state object updates, hashes and commits. The only problem is that there are a lot of these, and many will have insignificant runtimes (maybe update 1 slot?). The overhead of retriving system timers and updating metrics might be more than teh actual computation of 1 slot. Due to that, this PR moves the metering a bit to the outside. It does mean we lose the ability to differentiate between storage update and storage hash, but I doubt it's really relevant given that we can only change so many slots in a block.

On the other hand, moving these metrics out does a few useful cleanups: state objects don't start poking at statedb fields directly. It was a fairly bad design (yeah, there's plenty left). The other cleanup is that if we want to make any of the above operations (update, hash, commit) concurrent across state objects, then measuring them individually becomes noise; we want the real time across all of them, not the sum of times elapsed concurrently. This PR also does the prep work for that.

Copy link
Contributor

@holiman holiman left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@karalabe karalabe merged commit 4253030 into ethereum:master Apr 26, 2024
@karalabe
Copy link
Member Author

Ran a benchmark for 1+ hours, seemed mostly the same, ever so slight difference which is probably due to machine specs.

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