Skip to content

Conversation

@Kobzol
Copy link
Member

@Kobzol Kobzol commented Aug 13, 2025

This PR dogfoods the -Zno-embed-metadata flag in the standard library. This removes the .rmeta portion out of the libstd.so file, thus reducing its filesize on disk. Notably, this reduces the amount of MiB that we ship to people who download the standard library.

I think that the only way to find out what this breaks is to try to run full CI, and then try to land it on nightly :)

r? @ghost

@rustbot rustbot added A-testsuite Area: The testsuite used to check the correctness of rustc S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. T-bootstrap Relevant to the bootstrap subteam: Rust's build system (x.py and src/bootstrap) labels Aug 13, 2025
@Kobzol
Copy link
Member Author

Kobzol commented Aug 13, 2025

@bors try

rust-bors bot added a commit that referenced this pull request Aug 13, 2025
Dogfood `-Zno-embed-metadata` in the compiler
@rust-bors

This comment has been minimized.

@rust-log-analyzer

This comment has been minimized.

@rust-log-analyzer

This comment has been minimized.

@rust-bors
Copy link
Contributor

rust-bors bot commented Aug 13, 2025

☀️ Try build successful (CI)
Build commit: 6edf4f5 (6edf4f50158d893f8aa51ea5a04ba02370776b95, parent: b1b26b834d85e84b46aa8f8f3ce210a1627aa85f)

@Kobzol
Copy link
Member Author

Kobzol commented Aug 13, 2025

@rust-timer build 6edf4f5

@rust-timer

This comment has been minimized.

@Kobzol Kobzol force-pushed the dogfood-z-no-embed-metadata branch from 74ef778 to ce49790 Compare August 13, 2025 14:27
@rust-log-analyzer

This comment has been minimized.

@rust-timer
Copy link
Collaborator

Finished benchmarking commit (6edf4f5): comparison URL.

Overall result: ❌✅ regressions and improvements - please read the text below

Benchmarking this pull request means it may be perf-sensitive – we'll automatically label it not fit for rolling up. You can override this, but we strongly advise not to, due to possible changes in compiler perf.

Next Steps: If you can justify the regressions found in this try perf run, please do so in sufficient writing along with @rustbot label: +perf-regression-triaged. If not, please fix the regressions and do another perf run. If its results are neutral or positive, the label will be automatically removed.

@bors rollup=never
@rustbot label: -S-waiting-on-perf +perf-regression

Instruction count

Our most reliable metric. Used to determine the overall result above. However, even this metric can be noisy.

mean range count
Regressions ❌
(primary)
0.7% [0.2%, 1.2%] 7
Regressions ❌
(secondary)
0.4% [0.1%, 0.9%] 43
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
-0.2% [-0.5%, -0.0%] 3
All ❌✅ (primary) 0.7% [0.2%, 1.2%] 7

Max RSS (memory usage)

Results (primary -0.7%, secondary -0.8%)

A less reliable metric. May be of interest, but not used to determine the overall result above.

mean range count
Regressions ❌
(primary)
1.3% [1.3%, 1.3%] 1
Regressions ❌
(secondary)
2.7% [2.3%, 3.2%] 4
Improvements ✅
(primary)
-1.4% [-2.3%, -0.5%] 3
Improvements ✅
(secondary)
-2.5% [-5.2%, -0.8%] 8
All ❌✅ (primary) -0.7% [-2.3%, 1.3%] 4

Cycles

Results (primary 3.6%, secondary 3.7%)

A less reliable metric. May be of interest, but not used to determine the overall result above.

mean range count
Regressions ❌
(primary)
3.6% [3.6%, 3.6%] 1
Regressions ❌
(secondary)
3.7% [2.0%, 5.3%] 4
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
- - 0
All ❌✅ (primary) 3.6% [3.6%, 3.6%] 1

Binary size

This benchmark run did not return any relevant results for this metric.

Bootstrap: 464.328s -> 465.28s (0.21%)
Artifact size: 377.44 MiB -> 377.37 MiB (-0.02%)

@rustbot rustbot added the perf-regression Performance regression. label Aug 13, 2025
@bors
Copy link
Collaborator

bors commented Aug 14, 2025

☔ The latest upstream changes (presumably #145366) made this pull request unmergeable. Please resolve the merge conflicts.

@Kobzol Kobzol force-pushed the dogfood-z-no-embed-metadata branch from ce49790 to 412cf87 Compare August 25, 2025 13:22
@Kobzol
Copy link
Member Author

Kobzol commented Aug 25, 2025

@bors try @rust-timer queue

@rust-timer

This comment has been minimized.

@rust-bors

This comment has been minimized.

rust-bors bot added a commit that referenced this pull request Aug 25, 2025
Dogfood `-Zno-embed-metadata` in the compiler
@rustbot rustbot added the S-waiting-on-perf Status: Waiting on a perf run to be completed. label Aug 25, 2025
@rust-log-analyzer

This comment has been minimized.

@Kobzol Kobzol force-pushed the dogfood-z-no-embed-metadata branch from 412cf87 to 70e90f9 Compare August 25, 2025 14:21
@Kobzol
Copy link
Member Author

Kobzol commented Aug 25, 2025

@bors try @rust-timer queue

@rust-timer

This comment has been minimized.

@rust-bors

This comment has been minimized.

rust-bors bot added a commit that referenced this pull request Aug 25, 2025
Dogfood `-Zno-embed-metadata` in the compiler
@rust-log-analyzer

This comment has been minimized.

@Kobzol
Copy link
Member Author

Kobzol commented Aug 25, 2025

@bors try @rust-timer queue

@rust-bors

This comment has been minimized.

@rust-bors
Copy link
Contributor

rust-bors bot commented Jan 12, 2026

☀️ Try build successful (CI)
Build commit: 548971f (548971f554342047d492efc01f0161c8309d3845, parent: 561364e4d5ccc506f610208a4989e91fdbdc8ca7)

@bjorn3
Copy link
Member

bjorn3 commented Jan 12, 2026

@bors r+

@rust-bors rust-bors bot added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Jan 12, 2026
@rust-bors
Copy link
Contributor

rust-bors bot commented Jan 12, 2026

📌 Commit e03cb1f has been approved by bjorn3

It is now in the queue for this repository.

JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Jan 12, 2026
Dogfood `-Zno-embed-metadata` in the standard library

This PR dogfoods the [`-Zno-embed-metadata`](rust-lang/cargo#15495) flag in the standard library. This removes the .rmeta portion out of the `libstd.so` file, thus reducing its filesize on disk. Notably, this reduces the amount of MiB that we ship to people who download the standard library.

I think that the only way to find out what this breaks is to try to run full CI, and then try to land it on nightly :)

r? @ghost
rust-bors bot pushed a commit that referenced this pull request Jan 12, 2026
…uwer

Rollup of 13 pull requests

Successful merges:

 - #145343 (Dogfood `-Zno-embed-metadata` in the standard library)
 - #150151 (Destabilise `target-spec-json`)
 - #150723 (std: move `errno` and related functions into `sys::io`)
 - #150771 (Remove legacy homu `try` and `auto` branch mentions)
 - #150826 (Add `f16` inline ASM support for s390x)
 - #150934 (Move some checks from `check_doc_attrs` directly into `rustc_attr_parsing`)
 - #150943 (Port `#[must_not_suspend]` to attribute parser)
 - #150990 (std: sys: net: uefi: Make TcpStream Send)
 - #150995 (core: ptr: split_at_mut: fix typo in safety doc)
 - #150998 (Relax test expectation for @__llvm_profile_runtime_user)
 - #151002 (Remove a workaround for a bug (take 2))
 - #151005 (Fix typo in `MaybeUninit` docs)
 - #151011 (Update books)

r? @ghost
matthiaskrgr added a commit to matthiaskrgr/rust that referenced this pull request Jan 12, 2026
Dogfood `-Zno-embed-metadata` in the standard library

This PR dogfoods the [`-Zno-embed-metadata`](rust-lang/cargo#15495) flag in the standard library. This removes the .rmeta portion out of the `libstd.so` file, thus reducing its filesize on disk. Notably, this reduces the amount of MiB that we ship to people who download the standard library.

I think that the only way to find out what this breaks is to try to run full CI, and then try to land it on nightly :)

r? @ghost
rust-bors bot pushed a commit that referenced this pull request Jan 13, 2026
Rollup of 12 pull requests

Successful merges:

 - #145343 (Dogfood `-Zno-embed-metadata` in the standard library)
 - #150151 (Destabilise `target-spec-json`)
 - #150723 (std: move `errno` and related functions into `sys::io`)
 - #150826 (Add `f16` inline ASM support for s390x)
 - #150934 (Move some checks from `check_doc_attrs` directly into `rustc_attr_parsing`)
 - #150943 (Port `#[must_not_suspend]` to attribute parser)
 - #150990 (std: sys: net: uefi: Make TcpStream Send)
 - #150995 (core: ptr: split_at_mut: fix typo in safety doc)
 - #150998 (Relax test expectation for @__llvm_profile_runtime_user)
 - #151002 (Remove a workaround for a bug (take 2))
 - #151005 (Fix typo in `MaybeUninit` docs)
 - #151011 (Update books)

r? @ghost
@Kobzol
Copy link
Member Author

Kobzol commented Jan 13, 2026

In case the current rollup doesn't make it, I'd rather mark this as rollup=never, hard to say if this change will pass all tests.

@bors rollup=never

@rust-bors

This comment has been minimized.

@rust-bors rust-bors bot added merged-by-bors This PR was explicitly merged by bors. and removed S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. labels Jan 13, 2026
@rust-bors
Copy link
Contributor

rust-bors bot commented Jan 13, 2026

☀️ Test successful - CI
Approved by: bjorn3
Pushing b2a322b to main...

@rust-bors rust-bors bot merged commit b2a322b into rust-lang:main Jan 13, 2026
13 checks passed
@rustbot rustbot added this to the 1.94.0 milestone Jan 13, 2026
@Kobzol Kobzol deleted the dogfood-z-no-embed-metadata branch January 13, 2026 10:46
@github-actions
Copy link
Contributor

What is this? This is an experimental post-merge analysis report that shows differences in test outcomes between the merged PR and its parent PR.

Comparing 2f1bd3f (parent) -> b2a322b (this PR)

Test differences

Show 5 test diffs

Stage 2

  • [debuginfo-cdb] tests/debuginfo/numeric-types.rs: ignore (ignored when the CDB version is lower than 10.0.26100.2161) -> pass (J0)
  • [debuginfo-cdb] tests/debuginfo/range-types.rs: ignore (ignored when the CDB version is lower than 10.0.26100.2161) -> pass (J0)
  • [debuginfo-cdb] tests/debuginfo/unit-type.rs: ignore (ignored when the CDB version is lower than 10.0.26100.2161) -> pass (J0)

Additionally, 2 doctest diffs were found. These are ignored, as they are noisy.

Job group index

Test dashboard

Run

cargo run --manifest-path src/ci/citool/Cargo.toml -- \
    test-dashboard b2a322beb29110e22a1782e2ce5ed2a0719b81ed --output-dir test-dashboard

And then open test-dashboard/index.html in your browser to see an overview of all executed tests.

Job duration changes

  1. aarch64-apple: 12590.2s -> 9255.9s (-26.5%)
  2. x86_64-gnu-gcc: 3574.7s -> 3032.7s (-15.2%)
  3. x86_64-rust-for-linux: 3164.5s -> 2688.2s (-15.1%)
  4. pr-check-1: 1960.2s -> 1685.4s (-14.0%)
  5. dist-aarch64-apple: 8773.0s -> 7623.4s (-13.1%)
  6. i686-gnu-2: 6006.5s -> 5259.7s (-12.4%)
  7. pr-check-2: 2651.3s -> 2328.5s (-12.2%)
  8. i686-gnu-1: 8339.6s -> 7365.6s (-11.7%)
  9. aarch64-gnu-llvm-20-2: 3042.7s -> 2705.8s (-11.1%)
  10. aarch64-msvc-2: 5990.0s -> 6653.3s (+11.1%)
How to interpret the job duration changes?

Job durations can vary a lot, based on the actual runner instance
that executed the job, system noise, invalidated caches, etc. The table above is provided
mostly for t-infra members, for simpler debugging of potential CI slow-downs.

@rust-timer
Copy link
Collaborator

Finished benchmarking commit (b2a322b): comparison URL.

Overall result: ❌✅ regressions and improvements - please read the text below

Our benchmarks found a performance regression caused by this PR.
This might be an actual regression, but it can also be just noise.

Next Steps:

  • If the regression was expected or you think it can be justified,
    please write a comment with sufficient written justification, and add
    @rustbot label: +perf-regression-triaged to it, to mark the regression as triaged.
  • If you think that you know of a way to resolve the regression, try to create
    a new PR with a fix for the regression.
  • If you do not understand the regression or you think that it is just noise,
    you can ask the @rust-lang/wg-compiler-performance working group for help (members of this group
    were already notified of this PR).

@rustbot label: +perf-regression
cc @rust-lang/wg-compiler-performance

Instruction count

Our most reliable metric. Used to determine the overall result above. However, even this metric can be noisy.

mean range count
Regressions ❌
(primary)
0.9% [0.5%, 1.1%] 5
Regressions ❌
(secondary)
0.3% [0.1%, 0.8%] 45
Improvements ✅
(primary)
-0.3% [-0.3%, -0.2%] 2
Improvements ✅
(secondary)
-0.0% [-0.0%, -0.0%] 1
All ❌✅ (primary) 0.5% [-0.3%, 1.1%] 7

Max RSS (memory usage)

Results (secondary -0.1%)

A less reliable metric. May be of interest, but not used to determine the overall result above.

mean range count
Regressions ❌
(primary)
- - 0
Regressions ❌
(secondary)
2.5% [1.7%, 3.1%] 3
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
-2.1% [-3.1%, -1.2%] 4
All ❌✅ (primary) - - 0

Cycles

Results (secondary -3.4%)

A less reliable metric. May be of interest, but not used to determine the overall result above.

mean range count
Regressions ❌
(primary)
- - 0
Regressions ❌
(secondary)
- - 0
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
-3.4% [-4.1%, -2.7%] 2
All ❌✅ (primary) - - 0

Binary size

This benchmark run did not return any relevant results for this metric.

Bootstrap: 475.39s -> 473.958s (-0.30%)
Artifact size: 391.43 MiB -> 383.19 MiB (-2.11%)

@Kobzol
Copy link
Member Author

Kobzol commented Jan 13, 2026

The tiny regressions are only noticeable on the smallest crates, they are caused by now loading both the .rmeta and .rlib files of stdlib.

@rustbot label: +perf-regression-triaged

@rustbot rustbot added the perf-regression-triaged The performance regression has been triaged. label Jan 13, 2026
@bjorn3
Copy link
Member

bjorn3 commented Jan 13, 2026

This saved enough disk space that the used column of df -h went from 239GB to 238GB. Probably didn't save a full GB though.

@Kobzol
Copy link
Member Author

Kobzol commented Jan 13, 2026

I posted some statistics for the libstd component here (GitHub hid it in the meantime...).

@bjorn3
Copy link
Member

bjorn3 commented Jan 13, 2026

The savings to the amount of space it takes to build the standard library should be much larger than the savings of the final artifact size as the latter already skipped the duplicate crate metadata for everything other than libstd.so.

@Kobzol
Copy link
Member Author

Kobzol commented Jan 13, 2026

Right, but we don't really care that much about the total disk savings on CI, I guess? Locally it might be more important, but probably still ~negligent. The size of the rustup-distributed toolchain is the win I'm after here.

That is true for rustc components, of course. For normal Rust code, -Zno-embed-metadata will ofc have nice wins for disk space. But here I'm doing it mostly for network bandwidth savings.

@bjorn3
Copy link
Member

bjorn3 commented Jan 13, 2026

For CI it could potentially help a bit with being able to build on smaller runners with less free space. Locally for most people it wouldn't matter much, but on dev-desktop it would make me need to throw away the build directory less frequently and I'm sure there are people who need/want to build rustc in relatively constrained environments too. And I believe some people have multiple worktrees checked out that each take up a lot of space. This PR likely won't help all that much with that, but my PR for doing the same for rustc should help a non-trivial amount.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-run-make Area: port run-make Makefiles to rmake.rs A-testsuite Area: The testsuite used to check the correctness of rustc merged-by-bors This PR was explicitly merged by bors. perf-regression Performance regression. perf-regression-triaged The performance regression has been triaged. T-bootstrap Relevant to the bootstrap subteam: Rust's build system (x.py and src/bootstrap)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants