Skip to content

Increase sync speed while blocksyncing #2657

@evan-forbes

Description

@evan-forbes

per other sync etc, there are a few things that we can do to speed up blocksync, however these two options are what we're pursuing for now.

b. Speed (to be implemented)

1) Going to roughly about 1.5 - 1.6s per 128mb block

  • save blocks in another goroutine, so this will not block the block processing.

The issue with this approach is that if the node is abruptly terminated, we can end up with the state at block N, but we would have less blocks saved in the storage (N - X), which causes node to fail to start. This can be mitigated by using rollback capabilities of the state (I tried rolling back to 40 blocks and this worked fine, by default it should be 362880 blocks (specified in pruning options).

Doing this will save us around 500ms, but we are still limited with process proposal.

2) Going to around 300-500ms per 128 Mb block

  • only validate PartSets but skip ProcessProposal. This still confirms that the block were signed by 2/3+ of the vals, but we don't check row roots etc, i.e. that the blocks are properly formed.

It seems (afaiu) we would have roughly equal guarantees in these two cases:

  • state sync to block N - X from trusted height/hash and then do blocksync without process proposal to block N. Here we trust the first state and then for each block we check that correct validators signed the next block (assuming that the block at trusted height was correct).
  • state sync to block N

Originally posted by @mcrakhman in #2594

Metadata

Metadata

Labels

Type

No type

Projects

Status

In Progress

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions