5.9 KiB
5.9 KiB
Size Evidence
This file records the current binary-size and code-size evidence for
aria2-rust-pro in Take 2 of the modernization goal.
Commands
rtk cargo build --release -p aria2-rust-pro-cli --manifest-path .\Cargo.toml -j $env:NUMBER_OF_PROCESSORS
rtk cargo bloat --release -p aria2-rust-pro-cli --bin aria2-rust-pro --crates -n 40 -j $env:NUMBER_OF_PROCESSORS
rtk cargo rustc --release -p aria2-rust-pro-cli --bin aria2-rust-pro --manifest-path .\Cargo.toml -- --emit=llvm-ir
rtk cargo llvm-lines --files target\release\deps\aria2_rust_pro.aria2_rust_pro_cli-d4c445ae209bfe38.aria2_rust_pro_cli.b493e489391677ca-cgu.0.rcgu.o.rcgu.ll
Binary Size Snapshot
Measured on the current Windows host:
| Binary | Bytes | MiB |
|---|---|---|
aria2-rust-pro.exe |
5,213,184 |
4.97 |
current C++ Pro Core aria2c.exe |
11,412,480 |
10.88 |
upstream Windows aria2c.exe |
5,649,408 |
5.39 |
Observations:
- the current Rust binary is about
54.3%smaller than the current C++ Pro Core artifact on this host - the current Rust binary remains about
7.7%smaller than the upstream Windows aria2 binary as well - the latest reduction came from making the release profile more artifact-shaped:
codegen-units = 1,lto = "thin", andstrip = "symbols" - a later Phase 6 config-projection cleanup removed another small tranche by
replacing repeated release-path
BTreeMap<String, String>materialization with last-wins directive lookup on demand - the latest checked tree, after the recent structural scheduler/DHT cleanup,
leaves the release artifact at
5,213,184bytes, up28,672bytes from the previous recorded snapshot rather than down - the host artifact still stays below both checked C++ references
Cargo Bloat Summary
Current top crate contributions from cargo bloat --crates:
| Crate | .text size |
|---|---|
std |
815.4 KiB |
aria2_rust_pro_rpc |
488.4 KiB |
rustls |
421.7 KiB |
aria2_rust_pro_cli |
246.7 KiB |
aria2_rust_pro_protocol |
236.3 KiB |
reqwest |
213.9 KiB |
ring |
124.2 KiB |
hyper_util |
107.8 KiB |
hyper |
104.2 KiB |
aria2_rust_pro_core |
100.6 KiB |
tokio |
94.4 KiB |
Headline totals from the same run:
.textsection: about3.6 MiB- file size from the bloat run: about
5.0 MiB
Interpretation:
- the biggest owned size buckets are
aria2_rust_pro_rpc,aria2_rust_pro_protocol,aria2_rust_pro_cli, andaria2_rust_pro_core - the biggest third-party buckets are the HTTP/TLS stack:
reqwest,rustls,hyper,hyper_util,tokio, andring - future size work should therefore focus on:
- whether the default host binary really needs the full RPC/TLS surface in one always-on artifact
- whether reqwest / rustls features can be trimmed without breaking the compatibility contract
- whether any always-linked RPC/HTTP helpers can be split or made less eager
- whether a future release flow should emit a stripped end-user artifact plus a separate debug-symbol artifact rather than making local release builds do both jobs at once
- within the owned CLI bucket, the same config-projection cleanup previously cut several
previously ranked helpers materially in the filtered
cargo bloatview:run_from_env:31.2 KiB->30.2 KiBprojection::derive_http_session:8.6 KiB->5.7 KiBprojection::derive_runtime_config:8.3 KiB->4.0 KiBbuild_ftp_transfer_parts:6.4 KiB->3.9 KiB
LLVM Lines Snapshot
Direct cargo llvm-lines --release -p aria2-rust-pro-cli --bin aria2-rust-pro
currently fails on this Windows/MSVC host while linking the temporary
cargo-llvm-lines crate, with many unresolved external symbols. The project
itself still builds in release mode; the failure is limited to that tool's
temporary relink path.
The usable current workaround is:
- emit release LLVM IR with
cargo rustc -- --emit=llvm-ir - point
cargo llvm-lines --filesat the generated CLI.llfile
That current CLI crate IR snapshot reports:
- total:
53,272LLVM IR lines across307function copies - top entries:
runtime_host::execute_run_invocation:5,538linesrun_from_env:4,380linesparallel_http_runtime::execute_parallel_http_entries:3,751lineshttp_runtime::execute_segment_transfers:2,364lineshttp_runtime::execute_tagged_segment_transfers_with_parallelism:2,345linesruntime_summary::collect_runtime_execution_summary:1,207lines
Interpretation:
- the largest CLI-side IR buckets now line up with the Phase 6 runtime and HTTP transfer paths rather than a random unrelated module
parallel_http_runtimeremains a legitimate future split/size target, but it is also the path that just delivered the latest shared-runtime performance win- full-workspace release LLVM-lines still needs a non-MSVC or fixed
cargo-llvm-linespath before it should be treated as a strict gate
Take 2 Reading
For Take 2, the honest conclusion is:
- size evidence now exists in-tree
- one real size-reduction tranche is now landed through the release profile
- the Rust host binary is now smaller than both the current C++ Pro Core and the upstream Windows binary checked on this host
- the main size pressure comes from the combined RPC + HTTP/TLS stack, not from one surprising internal crate explosion
- CLI-side LLVM IR now points at runtime execution and parallel HTTP scheduling as the next owned code-size targets
- the latest CLI IR refresh still confirms the earlier config-projection and
shared-runtime cleanup reduced total CLI IR from
59,204to53,272lines, but the newest structural tree should now be treated as synchronized mainly through the refreshed release build andcargo bloat --cratessnapshot above - deeper size reduction remains a future optimization lane, but the Phase 6 evidence set is now current enough to rank that work honestly