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

Improve Peer Score Algorithm #248

Merged
merged 18 commits into from
Oct 30, 2024
Merged

Improve Peer Score Algorithm #248

merged 18 commits into from
Oct 30, 2024

Conversation

blindchaser
Copy link
Contributor

@blindchaser blindchaser commented Oct 28, 2024

The current peer score algorithm is not working effectively. Introducing a new peer score algorithm:

  • Added block sync performance reward: The score increases for every 5 consecutive successful block syncs.
  • Introduced time-decaying penalties for connection issues:
    • The penalty for dial failures decreases over time, reducing its impact as time passes since the last failure.
    • The penalty for disconnections decreases based on the time since the last connection, minimizing its impact with prolonged stability.
  • Maintained a score cap for non-block peers to ensure fair prioritization.

@blindchaser blindchaser changed the title Yiren/peer score Improve Peer Score Algorithm Oct 28, 2024
MutableScore int64 // updated by router
MutableScore PeerScore // updated by router

ConsecSuccessfulBlocks int64
Copy link
Contributor

Choose a reason for hiding this comment

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

Maybe add another one called NumOfTimeouts?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

the timeout will trigger the Disconnected() method which has counted to decrease score. the flow is:

timeout detection -> peer.didTimeout = true -> pool.removePeer(id, true) -> peerManager.Disconnected()

Copy link

codecov bot commented Oct 30, 2024

Codecov Report

Attention: Patch coverage is 72.00000% with 14 lines in your changes missing coverage. Please review.

Project coverage is 58.18%. Comparing base (eab3712) to head (220ceec).
Report is 1 commits behind head on main.

Files with missing lines Patch % Lines
internal/p2p/peermanager.go 78.12% 5 Missing and 2 partials ⚠️
internal/state/execution.go 16.66% 4 Missing and 1 partial ⚠️
internal/blocksync/pool.go 33.33% 2 Missing ⚠️
Additional details and impacted files

Impacted file tree graph

@@            Coverage Diff             @@
##             main     #248      +/-   ##
==========================================
- Coverage   58.22%   58.18%   -0.05%     
==========================================
  Files         249      249              
  Lines       34512    34549      +37     
==========================================
+ Hits        20094    20101       +7     
- Misses      12827    12856      +29     
- Partials     1591     1592       +1     
Files with missing lines Coverage Δ
internal/blocksync/reactor.go 51.26% <100.00%> (+0.86%) ⬆️
internal/blocksync/pool.go 78.46% <33.33%> (-0.86%) ⬇️
internal/state/execution.go 61.83% <16.66%> (-0.46%) ⬇️
internal/p2p/peermanager.go 79.39% <78.12%> (+0.06%) ⬆️

... and 19 files with indirect coverage changes

@blindchaser blindchaser merged commit e9a22c9 into main Oct 30, 2024
24 checks passed
Kbhat1 pushed a commit that referenced this pull request Nov 13, 2024
* feat: improve peer scoring algo

* debug

* debug

* more debug

* debug TryDiaNext

* remove log

* fix score type

* rever block sync logic

* rever block sync logic

* rever block sync logic

* Add block request log

* Add apply block latency

* add processEpeerEvent log back

* update unit test

* update unit test

---------

Co-authored-by: yzang2019 <[email protected]>
yzang2019 added a commit that referenced this pull request Dec 3, 2024
* feat: improve peer scoring algo

* debug

* debug

* more debug

* debug TryDiaNext

* remove log

* fix score type

* rever block sync logic

* rever block sync logic

* rever block sync logic

* Add block request log

* Add apply block latency

* add processEpeerEvent log back

* update unit test

* update unit test

---------

Co-authored-by: yzang2019 <[email protected]>
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