Store dist manifest in JSON to improve load performance #4344
+1,605
−36
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.
Currently, the
DIST_MANIFEST
(multirust-channel-manifest
) is being stored in TOML, which is not great for performance. The file has ~1 MiB on disk, and loading it takes ~24ms on my notebook. That's more than half the runtime of invokingrustc --version
throughrustup
.Since the manifest is generated and read only by
rustup
(AFAIK), I think that we could use a faster format to reduce this bottleneck. In this PR I chose to use JSON, for several reasons:serde_json
is well maintained and unlikely to be abandoned, and there are many other JSON (de)serialization alternatives.serde_json
can out of the box deal with the currentManifest
format. Since it uses#[serde(from...])
andskip_serializing
, this breaks other formats, such asbincode
,rmp_serde
(MsgPack) and Postcard. These would produce smaller files and even higher performance than JSON, but they would also require some changes to theManifest
structure.The manifest is parsed on more places (e.g.
make_component_unavailable
), but I only modified theDIST_CHANNEL
file, since that was the bottleneck that I saw.Context: #2626