Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Slasher: Reduce cold start duration. #13620

Merged
merged 11 commits into from
Feb 16, 2024
Merged

Slasher: Reduce cold start duration. #13620

merged 11 commits into from
Feb 16, 2024

Conversation

nalepae
Copy link
Contributor

@nalepae nalepae commented Feb 14, 2024

Please read commit by commit.

What type of PR is this?
Bug fix

What does this PR do? Why is it needed?
Improve slasher cold boot duration.

Before this commit, on a slasher cold boot (aka, without any db),
the updatedChunkByChunkIndex function looped for all validators
AND for all epochs between the genesis epoch and the current epoch.

This could take several dozen of minutes, and it is useless since the
min/max spans are actually a circular buffer with a limited lenght.
Cells of min/max spans can be overwritten (with the same value)
plenty of times.

After this commit, the updatedChunkByChunkIndex function loops
for all validators AND AT MOST historyLength lenght.
Every cell of min/max spans are written AT MOST once.

Time needed for slasher boot goes from O(nm) to "only" O(m), where:

  • n is the number of epochs since the genesis.
  • m is the number of validators.

Which issues(s) does this PR fix?

@nalepae nalepae requested a review from a team as a code owner February 14, 2024 17:36
@nalepae nalepae changed the title Improve slasher Slasher: Drastically reduce cold start duration. Feb 14, 2024
@nalepae nalepae changed the title Slasher: Drastically reduce cold start duration. Slasher: Reduce cold start duration. Feb 15, 2024
rauljordan
rauljordan previously approved these changes Feb 15, 2024
Copy link
Contributor

@rauljordan rauljordan left a comment

Choose a reason for hiding this comment

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

Went through this carefully and couldn't find issues. Indeed there is no need to perform so many unnecessary updates

Before this commit, on a slasher cold boot (aka, without any db),
the `updatedChunkByChunkIndex` function looped for all validators
AND for all epochs between the genesis epoch and the current epoch.

This could take several dozen of minutes, and it is useless since the
min/max spans are actually a circular buffer with a limited lenght.
Cells of min/max spans can be overwritten (with the same value)
plenty of times.

After this commit, the `updatedChunkByChunkIndex` function loops
for all validators AND AT most 'historyLength' lenght.
Every cell of min/max spans are written AT MOST once.

Time needed for slasher boot goes from `O(nm)` to "only" `O(m)`, where:
- `n` is the number of epochs since the genesis.
- `m` is the number of validators.
@nalepae nalepae added this pull request to the merge queue Feb 16, 2024
Merged via the queue into develop with commit 4030614 Feb 16, 2024
17 checks passed
@nalepae nalepae deleted the slasher-13430 branch February 16, 2024 10:19
This pull request was closed.
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.

3 participants