-
Notifications
You must be signed in to change notification settings - Fork 1.2k
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
perf: introduce ToBytes in bls.h and use it in all spots trivially possible, convert vecBytes to std::array #6515
base: develop
Are you sure you want to change the base?
perf: introduce ToBytes in bls.h and use it in all spots trivially possible, convert vecBytes to std::array #6515
Conversation
…ssible, convert vecBytes to std::array this results in an improved reindex speed as previously roughly 2% of total cycles were just in allocating the vector.
WalkthroughThe pull request introduces a series of modifications across multiple source files, primarily focusing on the renaming and updating of methods related to byte vector and signature handling. The changes center around the In the The modifications extend to governance and quorum-related files ( Tip CodeRabbit's docstrings feature is now available as part of our Early Access Program! Simply use the command Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Nitpick comments (1)
src/llmq/dkgsession.cpp (1)
1024-1026
: Consistency forquorumSig
manipulation.
The approach parallels the previous signature manipulation, ensuringToBytes
andSetBytes
remain consistent for simulation.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (4)
src/bls/bls.h
(14 hunks)src/governance/object.cpp
(1 hunks)src/governance/vote.cpp
(1 hunks)src/llmq/dkgsession.cpp
(1 hunks)
✅ Files skipped from review due to trivial changes (1)
- src/governance/object.cpp
🔇 Additional comments (17)
src/governance/vote.cpp (1)
185-185
: Use of SetBytes
is consistent and appropriate.
This change keeps the code aligned with the new SetBytes
approach for handling BLS data.
src/bls/bls.h (15)
62-62
: Consistent invocation of SetBytes
.
Using SetBytes
in the constructor keeps object creation unified with the broader rename from SetByteVector
.
Line range hint 106-119
: Ensure proper reset on invalid input.
The new SetBytes
method correctly resets the wrapper on short or zero-filled input, preventing malformed states.
139-147
: Addition of ToBytes
methods is a welcome change.
Returning a fixed-size std::array
helps eliminate unnecessary dynamic allocations, improving performance.
167-167
: Maintain uniform usage of SetBytes
.
Replacing direct references to old methods ensures that all code paths use SetBytes
consistently.
179-179
: Directly writing array bytes is clear.
Using AsBytes
with the result of ToBytes
is straightforward for serialization.
193-193
: De-serialize using SetBytes
.
Switching from SetByteVector
to SetBytes
for reading from streams keeps the routine consistent with the rest of the refactoring.
198-198
: Fallback scheme usage is correct.
Attempting the opposite scheme if the first attempt fails is well-handled here, continuing to rely on SetBytes
.
218-218
: Efficient verification using memcmp
.
Comparing the byte arrays via memcmp
ensures a direct check of the internal representation for malleability.
234-234
: Hex conversion uses ToBytes
effectively.
Extracting bytes for hex-string output further demonstrates the benefit of a fixed-size array.
261-264
: Fixed-size array in CBLSIdImplicit
.
Returning a std::array<uint8_t, 32>
for serialization is consistent with the rest of the new design.
397-397
: Refactor to fixed-size vecBytes
.
Changing from std::vector<uint8_t>
to std::array<uint8_t, BLSObject::SerSize>
reduces dynamic allocations in CBLSLazyWrapper
.
408-408
: Default initialization for vecBytes
.
Initializing the array with {0}
ensures deterministic behavior for an uninitialized buffer.
450-450
: Rebuilding vecBytes
from ToBytes
.
Writing the new array in Serialize
is correct and locks in a consistent internal representation.
498-498
: Correct use of obj.SetBytes
after retrieval.
Deserializing data from vecBytes
continues the consistent usage pattern of the new API.
535-535
: ToBytes
usage in GetHash
.
Generating the hash directly from a fixed-size array clarifies the logic and prevents memory reallocation overhead.
src/llmq/dkgsession.cpp (1)
1019-1021
: Properly modifying the in-flight signature bytes.
This simulated "lie" operation showcases the flexible usage of ToBytes/SetBytes
, but verify that offset [5]
is always valid.
it conflicts with my PR #6508 which already had one review iteration by Udjin. |
This pull request has conflicts, please rebase. |
Issue being fixed or feature implemented
we made changes to bls library library to allow std::array based serialization, which resulted in ~10% speedups in serialization in library benchmarks. I noticed today:
pre-this change:
post this change:
this shows that roughly 2.5% of total cycles during reindex are spent on vector new in our bls.h object.
What was done?
Convert to array to avoid dynamic allocation slowdown
How Has This Been Tested?
reindexing atm, looks good so far, and performance is improved as expected
Breaking Changes
None
Checklist: