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

Optimize LLMQs initialization and (de)serialization of BLS signatures #2705

Merged
merged 3 commits into from
Feb 16, 2019

Conversation

codablock
Copy link

See individual commits.

Profiling has shown that the message handler thread is blocked quite a lot by deserialization of BLS signatures when sig share batches arrive. This PR moves the heavy part of the deserialization into CSigSharesManager::WorkThreadMain, so that the message handler thread can continue working on other messages.

In some cases it takes too much time to perform full deserialization of
BLS signatures in the message handler thread. Better to just read the
buffer and do the actual deserialization when the signature is needed for
the first time (which is can be in another thread).
This removes the burden on the message handler thread when many sig batches
arrive. The expensive part of deserialization is now performed in the sig
shares worker thread.

This also removes the need for the specialized deserialization of the sig
shares which tried to avoid the malleability check, as CBLSLazySignature does
not perform malleability checks at all.
Copy link

@UdjinM6 UdjinM6 left a comment

Choose a reason for hiding this comment

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

utACK

@UdjinM6 UdjinM6 added this to the 14.0 milestone Feb 15, 2019
@codablock codablock merged commit dae1542 into dashpay:develop Feb 16, 2019
@codablock codablock deleted the pr_llmq_optimizations2 branch February 16, 2019 14:50
Fuzzbawls added a commit to PIVX-Project/PIVX that referenced this pull request Aug 9, 2024
22efef0 No matter how fast we process sig shares, always force 100ms between sending (Alexander Block)
1bd0c2f Don't sleep in WorkThreadMain when CPU intensive work was done (Alexander Block)
40a247d Implement caching in CRecoveredSigsDb (Alexander Block)
6c63a77 Use CBLSLazySignature in CBatchedSigShares (Alexander Block)
bff6e6e CLLMQUtils::IsQuorumActive() shouldn't require cs_main to be held (UdjinM6)
fdba615 Introduce startBlockHeight to make things more explicit (Alexander Block)
7bca9a2 Correctly use SIGN_HEIGHT_OFFSET when checking for out of bound height (Alexander Block)
04b6a67 Reserve 4k of buffer for CSerializedNetMsg buffer (Alexander Block)
be1c4a7 Fix cleanup of old recovered sigs (Alexander Block)

Pull request description:

  Backport dash PRs (in the following order):
  dashpay#2640
  dashpay#2672
  dashpay#2674
  dashpay#2702
  dashpay#2705
  dashpay#2706
  dashpay#2707

  NB: Some or them are partial backports since most of our llmq files are already updated to a more recent upstream version. So I basically ended up picking the commits that touch only the files `quorums_signing_shares.*` and `quorums_signing.*`

  I suggest to review by checking each individual commit against the corresponding upstream one

ACKs for top commit: 22efef0
  Liquid369:
    tACK 22efef0
  Duddino:
    ACK 22efef0

Tree-SHA512: 94e5dcdef044524ad4fa4d1fadbe670d839a08ccadc39071ba9300cfc44ce3d19ba24dfef1a6c6745271139d43f43ea47ed5a29e06f0d94e13ff09957f8e0c10
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