Skip to content

Binary size regression in dylibs #92013

Closed
@Nashenas88

Description

@Nashenas88

The fuchsia nightly toolchain rolls caught a binary size regression due to commit f9e77f2

Limiting to just binary changes in the rust repo, following the instructions here: https://fuchsia.dev/fuchsia-src/development/build/rust_toolchain?hl=en, we can see that on average the standard library is 3.5 times larger:

Click to expand
 $ diff -u <(cd ~/fuchsia-rust-without && du -a | sort -k2) <(cd install/fuchsia-rust && du -a | sort -k2)
--- /proc/self/fd/11    2021-12-16 23:41:12.360226537 +0000
+++ /proc/self/fd/18    2021-12-16 23:41:12.360226537 +0000
@@ -1,12 +1,12 @@
-1135076        .
-100040 ./bin
+1139492        .
+100048 ./bin
 27808  ./bin/cargo
 8312   ./bin/cargo-clippy
 9484   ./bin/cargo-fmt
-10252  ./bin/clippy-driver
+10256  ./bin/clippy-driver
 12     ./bin/rustc
 9928   ./bin/rust-demangler
-13064  ./bin/rustdoc
+13068  ./bin/rustdoc
 21164  ./bin/rustfmt
 4      ./bin/rust-gdb
 4      ./bin/rust-gdbgui
@@ -14,30 +14,26 @@
 20     ./etc
 16     ./etc/bash_completion.d
 12     ./etc/bash_completion.d/cargo
-1026028        ./lib
-38272  ./lib/.build-id
-4932   ./lib/.build-id/1f
-380    ./lib/.build-id/1f/33eefa63da5e0d
-4548   ./lib/.build-id/1f/33eefa63da5e0d.debug
-14044  ./lib/.build-id/52
-1360   ./lib/.build-id/52/119c59550c0d88
-12680  ./lib/.build-id/52/119c59550c0d88.debug
-14304  ./lib/.build-id/c2
-1292   ./lib/.build-id/c2/d10ba0e45111ca
-13008  ./lib/.build-id/c2/d10ba0e45111ca.debug
-4988   ./lib/.build-id/dd
-332    ./lib/.build-id/dd/4b1b684bd04567
-4652   ./lib/.build-id/dd/4b1b684bd04567.debug
+1030436        ./lib
+34908  ./lib/.build-id
+13012  ./lib/.build-id/48
+13008  ./lib/.build-id/48/eb8f061585f3df.debug
+4552   ./lib/.build-id/57
+4548   ./lib/.build-id/57/8eb4ac89ce0ac7.debug
+4656   ./lib/.build-id/ad
+4652   ./lib/.build-id/ad/516bd46661c2b2.debug
+12684  ./lib/.build-id/c3
+12680  ./lib/.build-id/c3/b4a43e34abcca0.debug
 8456   ./libexec
 8452   ./libexec/cargo-credential-1password
-75384  ./lib/libLLVM-13-rust-1.59.0-nightly.so
-120696 ./lib/librustc_driver-8d166f3d4b6e5d80.so
+75380  ./lib/libLLVM-13-rust-1.59.0-nightly.so
+120708 ./lib/librustc_driver-fe9dbf77676f2946.so
 13356  ./lib/libstd-3f5a6058990e33c2.so
 4764   ./lib/libtest-48b5b7c796fdec12.so
 4      ./lib/runtime.json
-773548 ./lib/rustlib
-136060 ./lib/rustlib/aarch64-fuchsia
-136056 ./lib/rustlib/aarch64-fuchsia/lib
+781312 ./lib/rustlib
+139940 ./lib/rustlib/aarch64-fuchsia
+139936 ./lib/rustlib/aarch64-fuchsia/lib
 304    ./lib/rustlib/aarch64-fuchsia/lib/libaddr2line-90c91cd254aac157.rlib
 48     ./lib/rustlib/aarch64-fuchsia/lib/libadler-8684584fc827b6cd.rlib
 5016   ./lib/rustlib/aarch64-fuchsia/lib/liballoc-62373237ba162112.rlib
@@ -60,21 +56,21 @@
 8      ./lib/rustlib/aarch64-fuchsia/lib/librustc_std_workspace_core-7b9c68ff961c0793.rlib
 12     ./lib/rustlib/aarch64-fuchsia/lib/librustc_std_workspace_std-59a7bdc55614e72c.rlib
 26016  ./lib/rustlib/aarch64-fuchsia/lib/libstd-be07c02dc031f481.rlib
-1292   ./lib/rustlib/aarch64-fuchsia/lib/libstd-be07c02dc031f481.so
+4712   ./lib/rustlib/aarch64-fuchsia/lib/libstd-be07c02dc031f481.so
 164    ./lib/rustlib/aarch64-fuchsia/lib/libstd_detect-bbd4c7f2ff882d73.rlib
 12664  ./lib/rustlib/aarch64-fuchsia/lib/libtest-76f50ba48ac29a1e.rlib
-332    ./lib/rustlib/aarch64-fuchsia/lib/libtest-76f50ba48ac29a1e.so
+792    ./lib/rustlib/aarch64-fuchsia/lib/libtest-76f50ba48ac29a1e.so
 148    ./lib/rustlib/aarch64-fuchsia/lib/libunicode_width-0a583143af34670b.rlib
 124    ./lib/rustlib/aarch64-fuchsia/lib/libunwind.a
 52     ./lib/rustlib/aarch64-fuchsia/lib/libunwind-c427f07ef33d9f9d.rlib
-161076 ./lib/rustlib/aarch64-unknown-linux-gnu
-161072 ./lib/rustlib/aarch64-unknown-linux-gnu/lib
+161080 ./lib/rustlib/aarch64-unknown-linux-gnu
+161076 ./lib/rustlib/aarch64-unknown-linux-gnu/lib
 312    ./lib/rustlib/aarch64-unknown-linux-gnu/lib/libaddr2line-37f44d9d37c20730.rlib
 48     ./lib/rustlib/aarch64-unknown-linux-gnu/lib/libadler-2caee81c613175ce.rlib
 5068   ./lib/rustlib/aarch64-unknown-linux-gnu/lib/liballoc-fe7cef42d77d414d.rlib
 12     ./lib/rustlib/aarch64-unknown-linux-gnu/lib/libcfg_if-cf5e4577938aedb7.rlib
 5068   ./lib/rustlib/aarch64-unknown-linux-gnu/lib/libcompiler_builtins-05086e81dbe54bf6.rlib
-51424  ./lib/rustlib/aarch64-unknown-linux-gnu/lib/libcore-b44def38eb7dae47.rlib
+51428  ./lib/rustlib/aarch64-unknown-linux-gnu/lib/libcore-b44def38eb7dae47.rlib
 2120   ./lib/rustlib/aarch64-unknown-linux-gnu/lib/libgetopts-5eeb5287d17a8d26.rlib
 6864   ./lib/rustlib/aarch64-unknown-linux-gnu/lib/libgimli-308bcc12df2355e2.rlib
 1180   ./lib/rustlib/aarch64-unknown-linux-gnu/lib/libhashbrown-1bc7c700b83c21f3.rlib
@@ -1916,14 +1912,14 @@
 8580   ./lib/rustlib/wasm32-unknown-unknown/lib/libtest-530f59db49fb2773.rlib
 144    ./lib/rustlib/wasm32-unknown-unknown/lib/libunicode_width-d6f6eb05caa4b08c.rlib
 8      ./lib/rustlib/wasm32-unknown-unknown/lib/libunwind-0ce2d83679176881.rlib
-141800 ./lib/rustlib/x86_64-fuchsia
-141796 ./lib/rustlib/x86_64-fuchsia/lib
+145680 ./lib/rustlib/x86_64-fuchsia
+145676 ./lib/rustlib/x86_64-fuchsia/lib
 304    ./lib/rustlib/x86_64-fuchsia/lib/libaddr2line-dd556d58a6a98686.rlib
 48     ./lib/rustlib/x86_64-fuchsia/lib/libadler-f331a1913229a0c9.rlib
 4984   ./lib/rustlib/x86_64-fuchsia/lib/liballoc-543c62796e6ba4f7.rlib
 12     ./lib/rustlib/x86_64-fuchsia/lib/libcfg_if-41b6d6da5c5d8f78.rlib
 4496   ./lib/rustlib/x86_64-fuchsia/lib/libcompiler_builtins-a606301fb5da8fdf.rlib
-56820  ./lib/rustlib/x86_64-fuchsia/lib/libcore-da0ced80ec6ab2c8.rlib
+56816  ./lib/rustlib/x86_64-fuchsia/lib/libcore-da0ced80ec6ab2c8.rlib
 1976   ./lib/rustlib/x86_64-fuchsia/lib/libgetopts-e19d8aa129e1788d.rlib
 6828   ./lib/rustlib/x86_64-fuchsia/lib/libgimli-5b1712acc4689b1a.rlib
 1164   ./lib/rustlib/x86_64-fuchsia/lib/libhashbrown-e26bc67a99f1c0d5.rlib
@@ -1940,10 +1936,10 @@
 8      ./lib/rustlib/x86_64-fuchsia/lib/librustc_std_workspace_core-185860a1c4fa1525.rlib
 12     ./lib/rustlib/x86_64-fuchsia/lib/librustc_std_workspace_std-f3d442e17b28bc30.rlib
 25860  ./lib/rustlib/x86_64-fuchsia/lib/libstd-4b0aaefa59d0d7cc.rlib
-1360   ./lib/rustlib/x86_64-fuchsia/lib/libstd-4b0aaefa59d0d7cc.so
+4784   ./lib/rustlib/x86_64-fuchsia/lib/libstd-4b0aaefa59d0d7cc.so
 448    ./lib/rustlib/x86_64-fuchsia/lib/libstd_detect-27929f8c582fe1d2.rlib
 12516  ./lib/rustlib/x86_64-fuchsia/lib/libtest-3f645ae7dc0007c0.rlib
-380    ./lib/rustlib/x86_64-fuchsia/lib/libtest-3f645ae7dc0007c0.so
+840    ./lib/rustlib/x86_64-fuchsia/lib/libtest-3f645ae7dc0007c0.so
 148    ./lib/rustlib/x86_64-fuchsia/lib/libunicode_width-618f3c1ed4dee7a0.rlib
 52     ./lib/rustlib/x86_64-fuchsia/lib/libunwind-6aef5eac0c7d634e.rlib
 136    ./lib/rustlib/x86_64-fuchsia/lib/libunwind.a

I'm currently assuming that our setting of debuginfo-level-std = 2 in the config of fuchsia rust builds is what causes this to be so noticeable.

The effect on fuchsia is very noticeable:

$ compare-sizes.py ~/elf_sizes.json ~/with_changes_elf_sizes.json
../../../rust/install/fuchsia-rust/lib/rustlib/x86_64-fuchsia/lib/libstd-4b0aaefa59d0d7cc.so: blob = 2,785,280 (84.4%)
obj/build/images/sizes/fuchsia.zbi/bootfs/lib/libstd-4b0aaefa59d0d7cc.so: zbi = 3,506,176 (71.6%)

Total differences:
blob: 2785280 of 3301376 (84.4%)
zbi : 3506176 of 4898816 (71.6%)

The binary size increases on our debug builds are large enough to prevent the binaries from fitting on the devices we're debugging.

CC @tmandry
@rustbot modify labels: +regression-from-stable-to-nightly -regression-untriaged

Metadata

Metadata

Assignees

No one assigned

    Labels

    C-bugCategory: This is a bug.regression-from-stable-to-nightlyPerformance or correctness regression from stable to nightly.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions