Skip to content

Conversation

@Sahil-4555
Copy link

This PR adds an optimization to the findNodeByID function in p2p/discover. There is already an open PR (#33205) for similar improvements, and I have further optimized the function to get better performance. I have attached the benchmark results comparing the current main branch with my optimized version, and the results show clear improvements.

@Sahil-4555
Copy link
Author

goos: linux
goarch: amd64
pkg: github.com/ethereum/go-ethereum/p2p/discover
cpu: Intel(R) Core(TM) i7-8565U CPU @ 1.80GHz
                                                               │ old_bench.txt │            new_bench.txt             │
                                                               │    sec/op     │    sec/op     vs base                │
Table_findnodeByID/SmallTable_5Results_NoPreferLive-8             640.9n ±  5%   622.1n ± 12%        ~ (p=0.353 n=10)
Table_findnodeByID/SmallTable_16Results_NoPreferLive-8            784.2n ±  6%   715.8n ± 11%   -8.73% (p=0.009 n=10)
Table_findnodeByID/SmallTable_5Results_PreferLive_AllLive-8      1262.5n ±  9%   600.1n ±  4%  -52.47% (p=0.000 n=10)
Table_findnodeByID/SmallTable_16Results_PreferLive_AllLive-8     1631.5n ±  5%   714.3n ± 10%  -56.22% (p=0.000 n=10)
Table_findnodeByID/SmallTable_5Results_PreferLive_HalfLive-8     1295.0n ±  7%   639.0n ±  8%  -50.66% (p=0.000 n=10)
Table_findnodeByID/SmallTable_16Results_PreferLive_HalfLive-8    1629.5n ±  4%   883.1n ± 15%  -45.81% (p=0.000 n=10)
Table_findnodeByID/MediumTable_5Results_NoPreferLive-8            698.7n ±  8%   722.9n ± 40%        ~ (p=0.190 n=10)
Table_findnodeByID/MediumTable_16Results_NoPreferLive-8           850.4n ± 11%   784.2n ± 68%        ~ (p=0.315 n=10)
Table_findnodeByID/MediumTable_5Results_PreferLive_AllLive-8     1338.5n ±  9%   605.0n ±  9%  -54.80% (p=0.000 n=10)
Table_findnodeByID/MediumTable_16Results_PreferLive_AllLive-8    1672.0n ± 11%   809.0n ±  3%  -51.61% (p=0.000 n=10)
Table_findnodeByID/MediumTable_5Results_PreferLive_HalfLive-8    1300.5n ±  4%   600.7n ± 10%  -53.81% (p=0.000 n=10)
Table_findnodeByID/MediumTable_16Results_PreferLive_HalfLive-8   1660.5n ±  5%   758.0n ±  4%  -54.35% (p=0.000 n=10)
Table_findnodeByID/LargeTable_5Results_NoPreferLive-8            1097.0n ±  4%   960.9n ± 13%  -12.41% (p=0.000 n=10)
Table_findnodeByID/LargeTable_16Results_NoPreferLive-8            1.421µ ±  7%   1.290µ ±  7%   -9.22% (p=0.004 n=10)
Table_findnodeByID/LargeTable_5Results_PreferLive_AllLive-8      1953.5n ±  6%   988.1n ±  7%  -49.42% (p=0.000 n=10)
Table_findnodeByID/LargeTable_16Results_PreferLive_AllLive-8      2.653µ ±  8%   1.366µ ±  8%  -48.52% (p=0.000 n=10)
Table_findnodeByID/LargeTable_5Results_PreferLive_HalfLive-8     1799.0n ±  5%   733.9n ± 14%  -59.20% (p=0.000 n=10)
Table_findnodeByID/LargeTable_16Results_PreferLive_HalfLive-8     2.529µ ± 10%   1.064µ ±  5%  -57.93% (p=0.000 n=10)
Table_findnodeByID/FullTable_5Results_NoPreferLive-8              1.063µ ±  7%   1.026µ ± 16%        ~ (p=0.218 n=10)
Table_findnodeByID/FullTable_16Results_NoPreferLive-8             1.366µ ±  4%   1.232µ ±  7%   -9.81% (p=0.000 n=10)
Table_findnodeByID/FullTable_5Results_PreferLive_AllLive-8       1893.5n ± 11%   850.3n ±  7%  -55.09% (p=0.000 n=10)
Table_findnodeByID/FullTable_16Results_PreferLive_AllLive-8       2.568µ ±  6%   1.252µ ±  4%  -51.24% (p=0.000 n=10)
geomean                                                           1.399µ         843.9n        -39.70%

                                                               │ old_bench.txt │           new_bench.txt            │
                                                               │     B/op      │    B/op     vs base                │
Table_findnodeByID/SmallTable_5Results_NoPreferLive-8               248.0 ± 0%   120.0 ± 0%  -51.61% (p=0.000 n=10)
Table_findnodeByID/SmallTable_16Results_NoPreferLive-8              376.0 ± 0%   248.0 ± 0%  -34.04% (p=0.000 n=10)
Table_findnodeByID/SmallTable_5Results_PreferLive_AllLive-8         368.0 ± 0%   120.0 ± 0%  -67.39% (p=0.000 n=10)
Table_findnodeByID/SmallTable_16Results_PreferLive_AllLive-8        624.0 ± 0%   248.0 ± 0%  -60.26% (p=0.000 n=10)
Table_findnodeByID/SmallTable_5Results_PreferLive_HalfLive-8        368.0 ± 0%   120.0 ± 0%  -67.39% (p=0.000 n=10)
Table_findnodeByID/SmallTable_16Results_PreferLive_HalfLive-8       624.0 ± 0%   248.0 ± 0%  -60.26% (p=0.000 n=10)
Table_findnodeByID/MediumTable_5Results_NoPreferLive-8              248.0 ± 0%   120.0 ± 0%  -51.61% (p=0.000 n=10)
Table_findnodeByID/MediumTable_16Results_NoPreferLive-8             376.0 ± 0%   248.0 ± 0%  -34.04% (p=0.000 n=10)
Table_findnodeByID/MediumTable_5Results_PreferLive_AllLive-8        368.0 ± 0%   120.0 ± 0%  -67.39% (p=0.000 n=10)
Table_findnodeByID/MediumTable_16Results_PreferLive_AllLive-8       624.0 ± 0%   248.0 ± 0%  -60.26% (p=0.000 n=10)
Table_findnodeByID/MediumTable_5Results_PreferLive_HalfLive-8       368.0 ± 0%   120.0 ± 0%  -67.39% (p=0.000 n=10)
Table_findnodeByID/MediumTable_16Results_PreferLive_HalfLive-8      624.0 ± 0%   248.0 ± 0%  -60.26% (p=0.000 n=10)
Table_findnodeByID/LargeTable_5Results_NoPreferLive-8               248.0 ± 0%   120.0 ± 0%  -51.61% (p=0.000 n=10)
Table_findnodeByID/LargeTable_16Results_NoPreferLive-8              376.0 ± 0%   248.0 ± 0%  -34.04% (p=0.000 n=10)
Table_findnodeByID/LargeTable_5Results_PreferLive_AllLive-8         368.0 ± 0%   120.0 ± 0%  -67.39% (p=0.000 n=10)
Table_findnodeByID/LargeTable_16Results_PreferLive_AllLive-8        624.0 ± 0%   248.0 ± 0%  -60.26% (p=0.000 n=10)
Table_findnodeByID/LargeTable_5Results_PreferLive_HalfLive-8        368.0 ± 0%   120.0 ± 0%  -67.39% (p=0.000 n=10)
Table_findnodeByID/LargeTable_16Results_PreferLive_HalfLive-8       624.0 ± 0%   248.0 ± 0%  -60.26% (p=0.000 n=10)
Table_findnodeByID/FullTable_5Results_NoPreferLive-8                248.0 ± 0%   120.0 ± 0%  -51.61% (p=0.000 n=10)
Table_findnodeByID/FullTable_16Results_NoPreferLive-8               376.0 ± 0%   248.0 ± 0%  -34.04% (p=0.000 n=10)
Table_findnodeByID/FullTable_5Results_PreferLive_AllLive-8          368.0 ± 0%   120.0 ± 0%  -67.39% (p=0.000 n=10)
Table_findnodeByID/FullTable_16Results_PreferLive_AllLive-8         624.0 ± 0%   248.0 ± 0%  -60.26% (p=0.000 n=10)
geomean                                                             406.8        172.5       -57.59%

                                                               │ old_bench.txt │           new_bench.txt            │
                                                               │   allocs/op   │ allocs/op   vs base                │
Table_findnodeByID/SmallTable_5Results_NoPreferLive-8               6.000 ± 0%   4.000 ± 0%  -33.33% (p=0.000 n=10)
Table_findnodeByID/SmallTable_16Results_NoPreferLive-8              7.000 ± 0%   5.000 ± 0%  -28.57% (p=0.000 n=10)
Table_findnodeByID/SmallTable_5Results_PreferLive_AllLive-8        10.000 ± 0%   4.000 ± 0%  -60.00% (p=0.000 n=10)
Table_findnodeByID/SmallTable_16Results_PreferLive_AllLive-8       12.000 ± 0%   5.000 ± 0%  -58.33% (p=0.000 n=10)
Table_findnodeByID/SmallTable_5Results_PreferLive_HalfLive-8       10.000 ± 0%   4.000 ± 0%  -60.00% (p=0.000 n=10)
Table_findnodeByID/SmallTable_16Results_PreferLive_HalfLive-8      12.000 ± 0%   5.000 ± 0%  -58.33% (p=0.000 n=10)
Table_findnodeByID/MediumTable_5Results_NoPreferLive-8              6.000 ± 0%   4.000 ± 0%  -33.33% (p=0.000 n=10)
Table_findnodeByID/MediumTable_16Results_NoPreferLive-8             7.000 ± 0%   5.000 ± 0%  -28.57% (p=0.000 n=10)
Table_findnodeByID/MediumTable_5Results_PreferLive_AllLive-8       10.000 ± 0%   4.000 ± 0%  -60.00% (p=0.000 n=10)
Table_findnodeByID/MediumTable_16Results_PreferLive_AllLive-8      12.000 ± 0%   5.000 ± 0%  -58.33% (p=0.000 n=10)
Table_findnodeByID/MediumTable_5Results_PreferLive_HalfLive-8      10.000 ± 0%   4.000 ± 0%  -60.00% (p=0.000 n=10)
Table_findnodeByID/MediumTable_16Results_PreferLive_HalfLive-8     12.000 ± 0%   5.000 ± 0%  -58.33% (p=0.000 n=10)
Table_findnodeByID/LargeTable_5Results_NoPreferLive-8               6.000 ± 0%   4.000 ± 0%  -33.33% (p=0.000 n=10)
Table_findnodeByID/LargeTable_16Results_NoPreferLive-8              7.000 ± 0%   5.000 ± 0%  -28.57% (p=0.000 n=10)
Table_findnodeByID/LargeTable_5Results_PreferLive_AllLive-8        10.000 ± 0%   4.000 ± 0%  -60.00% (p=0.000 n=10)
Table_findnodeByID/LargeTable_16Results_PreferLive_AllLive-8       12.000 ± 0%   5.000 ± 0%  -58.33% (p=0.000 n=10)
Table_findnodeByID/LargeTable_5Results_PreferLive_HalfLive-8       10.000 ± 0%   4.000 ± 0%  -60.00% (p=0.000 n=10)
Table_findnodeByID/LargeTable_16Results_PreferLive_HalfLive-8      12.000 ± 0%   5.000 ± 0%  -58.33% (p=0.000 n=10)
Table_findnodeByID/FullTable_5Results_NoPreferLive-8                6.000 ± 0%   4.000 ± 0%  -33.33% (p=0.000 n=10)
Table_findnodeByID/FullTable_16Results_NoPreferLive-8               7.000 ± 0%   5.000 ± 0%  -28.57% (p=0.000 n=10)
Table_findnodeByID/FullTable_5Results_PreferLive_AllLive-8         10.000 ± 0%   4.000 ± 0%  -60.00% (p=0.000 n=10)
Table_findnodeByID/FullTable_16Results_PreferLive_AllLive-8        12.000 ± 0%   5.000 ± 0%  -58.33% (p=0.000 n=10)
geomean                                                             9.051        4.472       -50.59%

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.

1 participant