exp/ingest/ledgerbackend: Wrap metaPipe in bufio.Reader #2763
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
PR Checklist
PR Structure
otherwise).
services/friendbot
, orall
ordoc
if the changes are broad or impact manypackages.
Thoroughness
.md
files, etc... affected by this change). Take a look in the
docs
folder for a given service,like this one.
Release planning
needed with deprecations, added features, breaking changes, and DB schema changes.
semver, or if it's mainly a patch change. The PR is targeted at the next
release branch if it's not a patch change.
What
Wraps
metaPipe
instellarCoreRunner
inbufio.Reader
. This improves the speed of reading from a meta pipe.Why
In 936bc3a we removed
bufio.Reader
based on an observation that it slows down reading from a pipe. However, after running a CPU profiler on reingestion code to debug another change I realized that a lot of time is spent on reading from a pipe in methods likexdr.Decoder.DecodeInt
orxdr.Decoder.DecodeUint
(that read just 4 bytes):When reingesting 1000 ledgers all executions of this method take 17% of entire run time! It was clear that there's an overhead time connected to reading from a pipe. After wrapping meta pipe in
bufio.Reader
the speed of reingestion of the same range improved by 25% (this isn't affected by Stellar-Core init time, the timer starts afterPrepareRange
is done).Before:
After:
The change in 936bc3a solves the problems with reflection used in XDR decoder being slow. This commit mitigates issues with overhead time added when reading from a pipe.
Known limitations
It's worth checking if there is a similar speed improvement on linux systems (I'm running MacOS), it can be system dependent.