Skip to content

compiletest: Use the new non-libtest executor by default #139998

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Apr 23, 2025

Conversation

Zalathar
Copy link
Contributor

The new executor was implemented in #139660, but required a manual opt-in. This PR activates the new executor by default, but leaves the old libtest-based executor in place (temporarily) to make reverting easier if something unexpectedly goes horribly wrong.

Currently the new executor can be explicitly disabled by passing the -N flag to compiletest (e.g. ./x test ui -- -N), but eventually that flag will be removed, alongside the removal of the libtest dependency. The flag is mostly there to make manual comparative testing easier if something does go wrong.

As before, there should be no user-visible difference between the old executor and the new executor.


I didn't get much of a response to my call for testing thread on Zulip, and the reports I did get (along with my own usage) indicate that there aren't any problems. So I think it's reasonable to move forward with making this the default, in the hopes of being able to remove the libtest dependency relatively soon.

When the libtest dependency is removed, it should be reasonable to build compiletest against pre-built stage0 std by default, even after the stage0 redesign. (Though we should probably have at least one CI job using in-tree stage1 std instead, to guard against the possibility of the #![feature(internal_output_capture)] API actually changing.)

@Zalathar Zalathar added the A-compiletest Area: The compiletest test runner label Apr 18, 2025
@rustbot
Copy link
Collaborator

rustbot commented Apr 18, 2025

r? @onur-ozkan

rustbot has assigned @onur-ozkan.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

@rustbot rustbot added A-testsuite Area: The testsuite used to check the correctness of rustc S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-bootstrap Relevant to the bootstrap subteam: Rust's build system (x.py and src/bootstrap) labels Apr 18, 2025
@rustbot
Copy link
Collaborator

rustbot commented Apr 18, 2025

Some changes occurred in src/tools/compiletest

cc @jieyouxu

@onur-ozkan
Copy link
Member

Makes sense, thanks!

@bors r+ rollup

@bors
Copy link
Collaborator

bors commented Apr 18, 2025

📌 Commit 03373ee has been approved by onur-ozkan

It is now in the queue for this repository.

@bors bors 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 Apr 18, 2025
@Kobzol
Copy link
Contributor

Kobzol commented Apr 18, 2025

Just in case, have you benchmarked the time to execute the UI suite between the two executors?

@Zalathar
Copy link
Contributor Author

With libtest:

$ x test ui -- --force-rerun -N

test result: ok. 18603 passed; 0 failed; 322 ignored; 0 measured; 0 filtered out; finished in 187.32s
test result: ok. 18603 passed; 0 failed; 322 ignored; 0 measured; 0 filtered out; finished in 193.96s
test result: ok. 18603 passed; 0 failed; 322 ignored; 0 measured; 0 filtered out; finished in 189.54s

With the new executor:

$ x test ui -- --force-rerun

test result: ok. 18603 passed; 0 failed; 322 ignored; 0 measured; 0 filtered out; finished in 195.85s
test result: ok. 18603 passed; 0 failed; 322 ignored; 0 measured; 0 filtered out; finished in 195.76s
test result: ok. 18603 passed; 0 failed; 322 ignored; 0 measured; 0 filtered out; finished in 195.69s

Based on a few local runs, the new executor seems to consistently be a couple of seconds slower across a 3 minute ui test run, which is a little surprising to me since it should be doing marginally less work overall.

@Kobzol
Copy link
Contributor

Kobzol commented Apr 18, 2025

It's interesting that the new executor seems to be more stable. 5% slower isn't that terrible, but it would be nice to investigate more why it seems to be slower.

@Zalathar
Copy link
Contributor Author

Bug found in deadline detection (#139660 (comment)); I'll push a fix.

@bors r-

@bors bors added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. labels Apr 18, 2025
@jieyouxu
Copy link
Member

Let me also do a few smoke runs of the new executor on msvc in case anything funny occurs.

@jieyouxu
Copy link
Member

I'd also mark this as rollup-never since we're changing the tests/ test harness itself.
@bors rollup=never

@jieyouxu
Copy link
Member

jieyouxu commented Apr 18, 2025

Maybe there's another issue with the deadline logic (with the now <= condition fixed): given a test

// tests/ui/foo.rs

//@ run-pass

fn main() {
    std::thread::sleep(std::time::Duration::from_secs(70)); // 70 to hit the libtest default slow test warning threshold of 60s
}

Due to the way how the libtest-esque test filtering logic works, ./x test foo will run 4 tests.

  • With the libtest executor, I observe only 1 warning correspond to this synthetic slow test

    running 4 tests
    i..test [ui] tests/ui/foo.rs has been running for a long time
    .
    
  • With the new executor, I observe warnings for all the tests

    running 4 tests
    i..test [ui] tests/ui/cfg/cfg-macros-foo.rs has been running for a long time
    test [ui] tests/ui/cfg/cfg-macros-notfoo.rs has been running for a long time
    test [ui] tests/ui/foo.rs has been running for a long time
    test [ui] tests/ui/missing_non_modrs_mod/foo.rs has been running for a long time
    

@Zalathar
Copy link
Contributor Author

Yeah, I'm seeing the same thing.

I think it's because we don't actually remove completed tests from the deadline queue when they finish, so tests are treated as having timed out long after they have already finished. This was being masked by the other bug, which made us not emit any timeout events due to the backwards check.

@jieyouxu
Copy link
Member

I wonder if we can come up with some kind of self-tests for this 🤔

@Zalathar
Copy link
Contributor Author

Well the good news is that fixing the deadline bugs also seems to eliminate the perf difference. 😅

@Zalathar
Copy link
Contributor Author

I think what I want to do here is open a separate PR to fix the deadline bugs (hopefully with some unit tests), and then we can revisit this PR once that has landed.

@jieyouxu
Copy link
Member

Sounds good

@Zalathar
Copy link
Contributor Author

Separate PR to fix deadline bugs: #140031.

@jieyouxu jieyouxu self-assigned this Apr 22, 2025
ChrisDenton added a commit to ChrisDenton/rust that referenced this pull request Apr 22, 2025
compiletest: Fix deadline bugs in new executor

The experimental new executor for compiletest (rust-lang#139660) was found to have two major bugs in deadline handling for detecting slow tests:

- The comparison between `now` and test deadlines was reversed, causing no timeouts to ever be recognised.
- After fixing that bug, it was found that the existing code would issue timeouts for any test that had started more than 60 seconds ago, even if the test had finished long before its deadline was reached.

This PR fixes those bugs.

(The new executor is not yet enabled by default, so this PR has no immediate effect on contributors.)

---

I noted in rust-lang#139998 (comment) that I hoped to have some unit tests to accompany these fixes. Unfortunately that turned out to be infeasible, because `DeadlineQueue` is tightly coupled to concrete `mpsc::Receiver` APIs (in addition to `Instant::now`), and trying to mock all of those would make the code much more complicated.

I did, however, add a few assertions that would have caught the failure to remove tests from the queue after their deadline.

r? jieyouxu
rust-timer added a commit to rust-lang-ci/rust that referenced this pull request Apr 23, 2025
Rollup merge of rust-lang#140031 - Zalathar:deadline, r=jieyouxu

compiletest: Fix deadline bugs in new executor

The experimental new executor for compiletest (rust-lang#139660) was found to have two major bugs in deadline handling for detecting slow tests:

- The comparison between `now` and test deadlines was reversed, causing no timeouts to ever be recognised.
- After fixing that bug, it was found that the existing code would issue timeouts for any test that had started more than 60 seconds ago, even if the test had finished long before its deadline was reached.

This PR fixes those bugs.

(The new executor is not yet enabled by default, so this PR has no immediate effect on contributors.)

---

I noted in rust-lang#139998 (comment) that I hoped to have some unit tests to accompany these fixes. Unfortunately that turned out to be infeasible, because `DeadlineQueue` is tightly coupled to concrete `mpsc::Receiver` APIs (in addition to `Instant::now`), and trying to mock all of those would make the code much more complicated.

I did, however, add a few assertions that would have caught the failure to remove tests from the queue after their deadline.

r? jieyouxu
@rust-log-analyzer
Copy link
Collaborator

The job x86_64-mingw-1 failed! Check out the build log: (web) (plain)

Click to see the possible cause of the failure (guessed by this bot)
failures:

---- [assembly] tests\assembly\targets\targets-elf.rs#x86_64_unknown_linux_none stdout ----

error in revision `x86_64_unknown_linux_none`: auxiliary build of D:\a\rust\rust\tests\auxiliary\minicore.rs failed to compile: 
status: exit code: 1
command: PATH="D:\a\rust\rust\build\x86_64-pc-windows-gnu\stage2\bin;D:\a\rust\rust\build\x86_64-pc-windows-gnu\stage0-bootstrap-tools\x86_64-pc-windows-gnu\release\deps;D:\a\rust\rust\build\x86_64-pc-windows-gnu\stage0\bin;D:\a\rust\rust\ninja;D:\a\rust\rust\mingw64\bin;C:\msys64\usr\bin;D:\a\rust\rust\sccache;C:\Program Files\MongoDB\Server\5.0\bin;C:\aliyun-cli;C:\vcpkg;C:\Program Files (x86)\NSIS;C:\tools\zstd;C:\Program Files\Mercurial;C:\hostedtoolcache\windows\stack\3.5.1\x64;C:\cabal\bin;C:\ghcup\bin;C:\mingw64\bin;C:\Program Files\dotnet;C:\Program Files\MySQL\MySQL Server 8.0\bin;C:\Program Files\R\R-4.4.2\bin\x64;C:\SeleniumWebDrivers\GeckoDriver;C:\SeleniumWebDrivers\EdgeDriver;C:\SeleniumWebDrivers\ChromeDriver;C:\Program Files (x86)\sbt\bin;C:\Program Files (x86)\GitHub CLI;C:\Program Files\Git\bin;C:\Program Files (x86)\pipx_bin;C:\npm\prefix;C:\hostedtoolcache\windows\go\1.21.13\x64\bin;C:\hostedtoolcache\windows\Python\3.9.13\x64\Scripts;C:\hostedtoolcache\windows\Python\3.9.13\x64;C:\hostedtoolcache\windows\Ruby\3.0.7\x64\bin;C:\Program Files\OpenSSL\bin;C:\tools\kotlinc\bin;C:\hostedtoolcache\windows\Java_Temurin-Hotspot_jdk\8.0.452-9\x64\bin;C:\Program Files\ImageMagick-7.1.1-Q16-HDRI;C:\Program Files\Microsoft SDKs\Azure\CLI2\wbin;C:\ProgramData\kind;C:\ProgramData\Chocolatey\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0;C:\Windows\System32\OpenSSH;C:\Program Files\dotnet;C:\Program Files\PowerShell\7;C:\Program Files\Microsoft\Web Platform Installer;C:\Program Files\TortoiseSVN\bin;C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\170\Tools\Binn;C:\Program Files\Microsoft SQL Server\150\Tools\Binn;C:\Program Files (x86)\Windows Kits\10\Windows Performance Toolkit;C:\Program Files (x86)\WiX Toolset v3.14\bin;C:\Program Files\Microsoft SQL Server\130\DTS\Binn;C:\Program Files\Microsoft SQL Server\140\DTS\Binn;C:\Program Files\Microsoft SQL Server\150\DTS\Binn;C:\Program Files\Microsoft SQL Server\160\DTS\Binn;C:\Strawberry\c\bin;C:\Strawberry\perl\site\bin;C:\Strawberry\perl\bin;C:\ProgramData\chocolatey\lib\pulumi\tools\Pulumi\bin;C:\Program Files\CMake\bin;C:\ProgramData\chocolatey\lib\maven\apache-maven-3.9.9\bin;C:\Program Files\Microsoft Service Fabric\bin\Fabric\Fabric.Code;C:\Program Files\Microsoft SDKs\Service Fabric\Tools\ServiceFabricLocalClusterManager;C:\Program Files\nodejs;C:\Program Files\Git\cmd;C:\Program Files\Git\mingw64\bin;C:\Program Files\Git\usr\bin;C:\Program Files\GitHub CLI;C:\tools\php;C:\Program Files (x86)\sbt\bin;C:\Program Files\Amazon\AWSCLIV2;C:\Program Files\Amazon\SessionManagerPlugin\bin;C:\Program Files\Amazon\AWSSAMCLI\bin;C:\Program Files\Microsoft SQL Server\130\Tools\Binn;C:\Program Files\LLVM\bin;C:\Users\runneradmin\.dotnet\tools;C:\Users\runneradmin\.cargo\bin;C:\Users\runneradmin\AppData\Local\Microsoft\WindowsApps" "D:\\a\\rust\\rust\\build\\x86_64-pc-windows-gnu\\stage2\\bin\\rustc.exe" "D:\\a\\rust\\rust\\tests\\auxiliary\\minicore.rs" "-Zthreads=1" "-Zsimulate-remapped-rust-src-base=/rustc/FAKE_PREFIX" "-Ztranslate-remapped-path-to-local-path=no" "-Z" "ignore-directory-in-diagnostics-source-blocks=C:\\Users\\runneradmin\\.cargo" "-Z" "ignore-directory-in-diagnostics-source-blocks=D:\\a\\rust\\rust\\vendor" "--sysroot" "D:\\a\\rust\\rust\\build\\x86_64-pc-windows-gnu\\stage2" "--cfg" "x86_64_unknown_linux_none" "--check-cfg" "cfg(test,FALSE,aarch64_be_unknown_linux_gnu,aarch64_be_unknown_linux_gnu_ilp32,aarch64_be_unknown_netbsd,aarch64_kmc_solid_asp3,aarch64_linux_android,aarch64_nintendo_switch_freestanding,aarch64_unknown_freebsd,aarch64_unknown_fuchsia,aarch64_unknown_hermit,aarch64_unknown_illumos,aarch64_unknown_linux_gnu,aarch64_unknown_linux_gnu_ilp32,aarch64_unknown_linux_musl,aarch64_unknown_linux_ohos,aarch64_unknown_netbsd,aarch64_unknown_none,aarch64_unknown_none_softfloat,aarch64_unknown_nto_qnx700,aarch64_unknown_nto_qnx710,aarch64_unknown_nto_qnx710_iosock,aarch64_unknown_nto_qnx800,aarch64_unknown_openbsd,aarch64_unknown_redox,aarch64_unknown_teeos,aarch64_unknown_nuttx,aarch64_unknown_trusty,aarch64_wrs_vxworks,arm_linux_androideabi,arm_unknown_linux_gnueabi,arm_unknown_linux_gnueabihf,arm_unknown_linux_musleabi,arm_unknown_linux_musleabihf,armeb_unknown_linux_gnueabi,armebv7r_none_eabi,armebv7r_none_eabihf,armv4t_none_eabi,armv4t_unknown_linux_gnueabi,armv5te_none_eabi,armv5te_unknown_linux_gnueabi,armv5te_unknown_linux_musleabi,armv5te_unknown_linux_uclibceabi,armv6_unknown_freebsd,armv6_unknown_netbsd_eabihf,armv6k_nintendo_3ds,armv7_linux_androideabi,armv7_rtems_eabihf,armv7_sony_vita_newlibeabihf,armv7_unknown_freebsd,armv7_unknown_linux_gnueabi,armv7_unknown_linux_gnueabihf,armv7_unknown_linux_musleabi,armv7_unknown_linux_musleabihf,armv7_unknown_linux_ohos,armv7_unknown_linux_uclibceabi,armv7_unknown_linux_uclibceabihf,armv7_unknown_netbsd_eabihf,armv7_unknown_trusty,armv7_wrs_vxworks_eabihf,armv7a_kmc_solid_asp3_eabi,armv7a_kmc_solid_asp3_eabihf,armv7a_none_eabi,armv7a_none_eabihf,armv7a_nuttx_eabi,armv7a_nuttx_eabihf,armv7r_none_eabi,armv7r_none_eabihf,armv8r_none_eabihf,hexagon_unknown_linux_musl,hexagon_unknown_none_elf,i686_pc_nto_qnx700,i586_unknown_linux_gnu,i586_unknown_linux_musl,i586_unknown_netbsd,i586_unknown_redox,i686_linux_android,i686_unknown_freebsd,i686_unknown_haiku,i686_unknown_hurd_gnu,i686_unknown_linux_gnu,i686_unknown_linux_musl,i686_unknown_netbsd,i686_unknown_openbsd,i686_wrs_vxworks,loongarch64_unknown_linux_gnu,loongarch64_unknown_linux_musl,loongarch64_unknown_linux_ohos,loongarch64_unknown_none,loongarch64_unknown_none_softfloat,m68k_unknown_linux_gnu,m68k_unknown_none_elf,mips64_openwrt_linux_musl,mips64_unknown_linux_gnuabi64,mips64_unknown_linux_muslabi64,mips64el_unknown_linux_gnuabi64,mips64el_unknown_linux_muslabi64,mips_unknown_linux_gnu,mips_unknown_linux_musl,mips_unknown_linux_uclibc,mips_mti_none_elf,mipsel_mti_none_elf,mipsel_sony_psp,mipsel_sony_psx,mipsel_unknown_linux_gnu,mipsel_unknown_linux_musl,mipsel_unknown_linux_uclibc,mipsel_unknown_netbsd,mipsel_unknown_none,mipsisa32r6_unknown_linux_gnu,mipsisa32r6el_unknown_linux_gnu,mipsisa64r6_unknown_linux_gnuabi64,mipsisa64r6el_unknown_linux_gnuabi64,msp430_none_elf,powerpc64_unknown_freebsd,powerpc64_unknown_linux_gnu,powerpc64_unknown_linux_musl,powerpc64_unknown_openbsd,powerpc64_wrs_vxworks,powerpc64le_unknown_freebsd,powerpc64le_unknown_linux_gnu,powerpc64le_unknown_linux_musl,powerpc_unknown_freebsd,powerpc_unknown_linux_gnu,powerpc_unknown_linux_gnuspe,powerpc_unknown_linux_musl,powerpc_unknown_linux_muslspe,powerpc_unknown_netbsd,powerpc_unknown_openbsd,powerpc_wrs_vxworks,powerpc_wrs_vxworks_spe,riscv32_wrs_vxworks,riscv32e_unknown_none_elf,riscv32em_unknown_none_elf,riscv32emc_unknown_none_elf,riscv32gc_unknown_linux_gnu,riscv32gc_unknown_linux_musl,riscv32i_unknown_none_elf,riscv32im_risc0_zkvm_elf,riscv32im_unknown_none_elf,riscv32ima_unknown_none_elf,riscv32imac_esp_espidf,riscv32imac_unknown_none_elf,riscv32imac_unknown_xous_elf,riscv32imafc_unknown_none_elf,riscv32imafc_esp_espidf,riscv32imc_esp_espidf,riscv32imc_unknown_none_elf,riscv64_linux_android,riscv64_wrs_vxworks,riscv64gc_unknown_freebsd,riscv64gc_unknown_fuchsia,riscv64gc_unknown_hermit,riscv64gc_unknown_linux_gnu,riscv64gc_unknown_linux_musl,riscv64gc_unknown_netbsd,riscv64gc_unknown_none_elf,riscv64gc_unknown_openbsd,riscv64imac_unknown_none_elf,s390x_unknown_linux_gnu,s390x_unknown_linux_musl,sparc64_unknown_linux_gnu,sparc64_unknown_netbsd,sparc64_unknown_openbsd,sparc_unknown_linux_gnu,sparc_unknown_none_elf,sparcv9_sun_solaris,thumbv4t_none_eabi,thumbv5te_none_eabi,thumbv6m_none_eabi,thumbv7em_none_eabi,thumbv7em_none_eabihf,thumbv7m_none_eabi,thumbv7neon_linux_androideabi,thumbv7neon_unknown_linux_gnueabihf,thumbv7neon_unknown_linux_musleabihf,thumbv8m_base_none_eabi,thumbv8m_main_none_eabi,thumbv8m_main_none_eabihf,wasm32_unknown_emscripten,wasm32_unknown_unknown,wasm32v1_none,wasm32_wasip1,wasm32_wasip1_threads,wasm32_wasip2,wasm32_wali_linux_musl,wasm64_unknown_unknown,x86_64_fortanix_unknown_sgx,x86_64_linux_android,x86_64_lynx_lynxos178,x86_64_pc_nto_qnx710,x86_64_pc_nto_qnx710_iosock,x86_64_pc_nto_qnx800,x86_64_pc_solaris,x86_64_unikraft_linux_musl,x86_64_unknown_dragonfly,x86_64_unknown_freebsd,x86_64_unknown_fuchsia,x86_64_unknown_haiku,x86_64_unknown_hurd_gnu,x86_64_unknown_hermit,x86_64_unknown_illumos,x86_64_unknown_l4re_uclibc,x86_64_unknown_linux_gnu,x86_64_unknown_linux_gnux32,x86_64_unknown_linux_musl,x86_64_unknown_linux_ohos,x86_64_unknown_linux_none,x86_64_unknown_netbsd,x86_64_unknown_none,x86_64_unknown_openbsd,x86_64_unknown_redox,x86_64_unknown_trusty,x86_64_wrs_vxworks,thumbv6m_nuttx_eabi,thumbv7a_nuttx_eabi,thumbv7a_nuttx_eabihf,thumbv7m_nuttx_eabi,thumbv7em_nuttx_eabi,thumbv7em_nuttx_eabihf,thumbv8m_base_nuttx_eabi,thumbv8m_main_nuttx_eabi,thumbv8m_main_nuttx_eabihf,riscv32imc_unknown_nuttx_elf,riscv32imac_unknown_nuttx_elf,riscv32imafc_unknown_nuttx_elf,riscv64imac_unknown_nuttx_elf,riscv64gc_unknown_nuttx_elf)" "-O" "-Cdebug-assertions=no" "-C" "prefer-dynamic" "-o" "D:\\a\\rust\\rust\\build\\x86_64-pc-windows-gnu\\test\\assembly\\targets\\targets-elf.x86_64_unknown_linux_none\\libminicore.rlib" "-A" "unused" "-A" "internal_features" "-Crpath" "-Cdebuginfo=0" "--target" "x86_64-unknown-linux-none" "-Cpanic=abort" "--crate-type" "rlib" "-Cpanic=abort"
stdout: none
--- stderr -------------------------------
error: couldn't create a temp dir: Access is denied. (os error 5) at path "C:\\Users\\RUNNER~1\\AppData\\Local\\Temp\\rustcvYNGC6"

error: aborting due to 1 previous error
------------------------------------------


---
test result: FAILED. 495 passed; 1 failed; 43 ignored; 0 measured; 0 filtered out; finished in 24.28s

Some tests failed in compiletest suite=assembly mode=assembly host=x86_64-pc-windows-gnu target=x86_64-pc-windows-gnu
Build completed unsuccessfully in 1:38:15
make: *** [Makefile:124: ci-mingw-x] Error 1
  local time: Wed Apr 23 11:21:31 CUT 2025
  network time: Wed, 23 Apr 2025 11:21:32 GMT
##[error]Process completed with exit code 2.
Post job cleanup.
[command]"C:\Program Files\Git\bin\git.exe" version

@bors
Copy link
Collaborator

bors commented Apr 23, 2025

💔 Test failed - checks-actions

@bors bors added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. labels Apr 23, 2025
@jieyouxu jieyouxu added the CI-spurious-fail-mingw CI spurious failure: target env mingw label Apr 23, 2025
@jieyouxu
Copy link
Member

2025-04-23T11:21:31.7487080Z error: couldn't create a temp dir: Access is denied. (os error 5) at path "C:\\Users\\RUNNER~1\\AppData\\Local\\Temp\\rustcvYNGC6"
2025-04-23T11:21:31.7487640Z 
2025-04-23T11:21:31.7487822Z error: aborting due to 1 previous error

@bors retry

@bors bors 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 Apr 23, 2025
@bors
Copy link
Collaborator

bors commented Apr 23, 2025

⌛ Testing commit bf4b2a9 with merge be181dd...

@bors
Copy link
Collaborator

bors commented Apr 23, 2025

☀️ Test successful - checks-actions
Approved by: onur-ozkan
Pushing be181dd to master...

@bors bors added the merged-by-bors This PR was explicitly merged by bors. label Apr 23, 2025
@bors bors merged commit be181dd into rust-lang:master Apr 23, 2025
7 checks passed
@rustbot rustbot added this to the 1.88.0 milestone Apr 23, 2025
Copy link

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 645d0ad (parent) -> be181dd (this PR)

Test differences

Show 33042 test diffs

Stage 1

  • errors::verify_codegen_ssa_invalid_monomorphization_unsupported_symbol_of_size_117: pass -> [missing] (J0)
  • errors::verify_codegen_ssa_linker_unsupported_modifier_14: pass -> [missing] (J0)
  • errors::verify_const_eval_dangling_ptr_in_final_0: pass -> [missing] (J0)
  • errors::verify_expand_module_circular_30: pass -> [missing] (J0)
  • errors::verify_passes_linkage_90: pass -> [missing] (J0)
  • errors::verify_ty_utils_oversized_simd_type_3: pass -> [missing] (J0)
  • json::tests::span_before_crlf: pass -> [missing] (J0)
  • lints::verify_lint_query_instability_54: pass -> [missing] (J0)
  • lints::verify_lint_unused_import_braces_97: pass -> [missing] (J0)
  • session_diagnostics::verify_attr_parsing_missing_feature_6: pass -> [missing] (J0)
  • spec::tests::aarch64_apple_visionos_sim: pass -> [missing] (J0)
  • spec::tests::aarch64_unknown_teeos: pass -> [missing] (J0)
  • spec::tests::mips64el_unknown_linux_muslabi64: pass -> [missing] (J0)
  • tests::format_mixture: pass -> [missing] (J0)
  • ascii::short::case04_branch_and_mask: pass -> [missing] (J1)
  • btree::map::iteration_mut_20: pass -> [missing] (J1)
  • fs::tests::read_link: pass -> [missing] (J1)
  • iter::bench_next_chunk_filter_map_mostly_false: pass -> [missing] (J1)
  • net::tcp::tests::close_read_wakes_up: pass -> [missing] (J1)
  • num::dec2flt::bench_42: pass -> [missing] (J1)
  • sort::tests::stable::correct_dyn_val_saw_mixed: pass -> [missing] (J1)
  • sort::tests::stable::correct_u64_saw_mixed: pass -> [missing] (J1)
  • sort::tests::unstable::stability_i32_random: pass -> [missing] (J1)
  • vec::bench_clone_0100: pass -> [missing] (J1)
  • collections::hash::map::tests::test_extend_ref: pass -> [missing] (J2)
  • collections::linked_list::tests::extract_if_true: pass -> [missing] (J2)
  • collections::linked_list::tests::test_eq: pass -> [missing] (J2)
  • intrinsics::test_typeid_unsized_types: pass -> [missing] (J2)
  • io::cursor::tests::test_box_slice_writer_vectored: pass -> [missing] (J2)
  • io::error::tests::test_errorkind_packing: pass -> [missing] (J2)
  • iter::adapters::flatten::test_flatten_last: pass -> [missing] (J2)
  • mpsc::test_recv_try_iter: pass -> [missing] (J2)
  • num::dec2flt::float::test_f64_consts: pass -> [missing] (J2)
  • num::i8::test_borrowing_sub: pass -> [missing] (J2)
  • num::ieee754::qnan_from_str: pass -> [missing] (J2)
  • num::int_log::checked_ilog10: pass -> [missing] (J2)
  • num::test_try_i32u128: pass -> [missing] (J2)
  • num::u128::test_be: pass -> [missing] (J2)
  • num::u16::test_unbounded_shr: pass -> [missing] (J2)
  • once_lock::is_sync_send: pass -> [missing] (J2)
  • raw_vec::tests::zst_reserve_panic: pass -> [missing] (J2)
  • str::ceil_char_boundary: pass -> [missing] (J2)
  • test_set_var_overwrite: pass -> [missing] (J2)
  • test_with_added_extension: pass -> [missing] (J2)
  • vec::test_pop_if: pass -> [missing] (J2)
  • vec::test_vec_dedup_partialeq: pass -> [missing] (J2)
  • vec_deque::test_try_fold_empty: pass -> [missing] (J2)
  • sort::tests::unstable::self_cmp_cell_i32_random_d20: ignore -> [missing] (J3)

Stage 2

  • error_reporting::traits::on_unimplemented::verify_trait_selection_ignored_diagnostic_option_2: [missing] -> pass (J0)
  • errors::verify_codegen_ssa_autodiff_without_lto_3: [missing] -> pass (J0)
  • errors::verify_codegen_ssa_invalid_monomorphization_simd_second_98: [missing] -> pass (J0)
  • errors::verify_incremental_write_new_20: [missing] -> pass (J0)
  • errors::verify_passes_non_exaustive_with_default_field_values_16: [missing] -> pass (J0)
  • errors::verify_resolve_imported_crate_23: [missing] -> pass (J0)
  • errors::verify_trait_selection_lf_bound_not_satisfied_22: [missing] -> pass (J0)
  • errors::verify_trait_selection_opaque_captures_lifetime_24: [missing] -> pass (J0)
  • hir::tests::cast_anon: [missing] -> pass (J0)
  • server_impl::rust_analyzer_span::tests::test_ra_server_from_str: [missing] -> pass (J0)
  • spec::tests::powerpc64_ibm_aix: [missing] -> pass (J0)
  • spec::tests::thumbv7m_nuttx_eabi: [missing] -> pass (J0)
  • tests::bench_copy: [missing] -> pass (J0)
  • ascii::long::case04_branch_and_mask: [missing] -> pass (J1)
  • ascii::short::is_ascii_control: [missing] -> pass (J1)
  • hash::sip::bench_u32: [missing] -> pass (J1)
  • net::tcp::tests::debug: [missing] -> pass (J1)
  • num::int_sqrt::u64_sqrt_random_small: [missing] -> pass (J1)
  • sort::tests::unstable::panic_observable_is_less_random_s95: [missing] -> pass (J1)
  • sort::tests::unstable::self_cmp_string_ascending: [missing] -> pass (J1)
  • str::contains_bang_str::short_mixed: [missing] -> pass (J1)
  • tests::shuffle_tests: [missing] -> pass (J1)
  • vec::bench_clone_from_10_0100_1000: [missing] -> pass (J1)
  • vec::bench_extend_from_slice_1000_1000: [missing] -> pass (J1)
  • collections::btree::map::tests::test_split_off_tiny_left_height_2: [missing] -> pass (J2)
  • collections::hash::map::tests::test_iterate: [missing] -> pass (J2)
  • collections::vec_deque::tests::test_drain: [missing] -> pass (J2)
  • f64::test_mul_add: [missing] -> pass (J2)
  • iter::adapters::flat_map::test_iterator_flat_map_fold: [missing] -> pass (J2)
  • iter::adapters::skip::test_iterator_skip: [missing] -> pass (J2)
  • mpsc::stress_recv_timeout_two_threads: [missing] -> pass (J2)
  • mpsc_sync::oneshot_multi_thread_recv_close_stress: [missing] -> pass (J2)
  • num::dec2flt::lemire::compute_float_f64_rounding: [missing] -> pass (J2)
  • num::i32::test_bitwise_operators: [missing] -> pass (J2)
  • num::i64::test_signum: [missing] -> pass (J2)
  • num::test_empty: [missing] -> pass (J2)
  • option::test_get_ptr: [missing] -> pass (J2)
  • option::test_unwrap: [missing] -> pass (J2)
  • slice::slice_index::rangeto_len::index_fail: [missing] -> pass (J2)
  • slice::test_array_chunks_zip: [missing] -> pass (J2)
  • slice::test_get_disjoint_mut_empty: [missing] -> pass (J2)
  • slice::test_mut_rchunks_rev: [missing] -> pass (J2)
  • str::pattern::str_searcher_empty_needle_empty_haystack::fwd: [missing] -> pass (J2)
  • str::slice_index::boundary::rangefrom::pass: [missing] -> pass (J2)
  • str::test_bytesator_last: [missing] -> pass (J2)
  • sys_common::wtf8::tests::wtf8_to_string_lossy: [missing] -> pass (J2)
  • time::nanos: [missing] -> pass (J2)
  • vec::test_reserve: [missing] -> pass (J2)
  • vec_deque::test_ord: [missing] -> pass (J2)
  • sort::tests::stable::correct_u128_random_d2: [missing] -> ignore (J3)
  • sort::tests::stable::self_cmp_string_saw_mixed: [missing] -> ignore (J3)
  • sort::tests::unstable::observable_is_less_descending: [missing] -> ignore (J3)

(and 16426 additional test diffs)

Additionally, 16516 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 be181dd75c83d72fcc95538e235768bc367b76b9 --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. x86_64-apple-2: 6482.6s -> 1669.3s (-74.2%)
  2. test-various: 4267.3s -> 2343.1s (-45.1%)
  3. dist-apple-various: 5786.1s -> 7850.4s (35.7%)
  4. x86_64-apple-1: 10248.2s -> 6817.3s (-33.5%)
  5. x86_64-gnu-aux: 5955.0s -> 4342.2s (-27.1%)
  6. aarch64-apple: 3639.4s -> 3135.1s (-13.9%)
  7. dist-x86_64-apple: 11332.2s -> 9781.5s (-13.7%)
  8. dist-x86_64-mingw: 7452.7s -> 8174.3s (9.7%)
  9. x86_64-gnu-distcheck: 4859.2s -> 4429.6s (-8.8%)
  10. dist-aarch64-msvc: 9083.1s -> 8323.9s (-8.4%)
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.

@Kobzol
Copy link
Contributor

Kobzol commented Apr 23, 2025

Some of these test changes are explained by download-rustc triggering (which sadly changes the stage of a lot of tests), but I'm not sure if it explains everything.

I think that maybe we should revert this and land it again with some fake compiler change, just to make sure that download-rustc doesn't trigger, to be sure that this does not introduce any test changes.

@jieyouxu
Copy link
Member

jieyouxu commented Apr 23, 2025

Hm, might be worth doing a reland with the synthetic compiler change just to compare the timing too... @Zalathar would you be okay with a reland? It didn't occur to me that download-rustc or not would cause so many test differences

@rust-timer
Copy link
Collaborator

Finished benchmarking commit (be181dd): comparison URL.

Overall result: no relevant changes - no action needed

@rustbot label: -perf-regression

Instruction count

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

Max RSS (memory usage)

Results (primary -0.7%)

This is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.

mean range count
Regressions ❌
(primary)
0.8% [0.8%, 0.8%] 1
Regressions ❌
(secondary)
- - 0
Improvements ✅
(primary)
-1.0% [-1.8%, -0.5%] 4
Improvements ✅
(secondary)
- - 0
All ❌✅ (primary) -0.7% [-1.8%, 0.8%] 5

Cycles

Results (primary 0.6%)

This is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.

mean range count
Regressions ❌
(primary)
0.6% [0.4%, 0.6%] 3
Regressions ❌
(secondary)
- - 0
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
- - 0
All ❌✅ (primary) 0.6% [0.4%, 0.6%] 3

Binary size

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

Bootstrap: 776.892s -> 775.475s (-0.18%)
Artifact size: 365.04 MiB -> 365.04 MiB (0.00%)

@Zalathar
Copy link
Contributor Author

OK, let's revert this and re-land with a synthetic compiler change.

@Zalathar Zalathar deleted the new-executor branch April 24, 2025 01:02
Zalathar added a commit to Zalathar/rust that referenced this pull request Apr 24, 2025
…r-ozkan"

This reverts commit be181dd, reversing
changes made to 645d0ad.

Reverting so that we can re-land this alongside a synthetic compiler change, to
avoid triggering download-ci-rustc (which messes with test metrics).
Zalathar added a commit to Zalathar/rust that referenced this pull request Apr 24, 2025
…r-ozkan"

This reverts commit be181dd, reversing
changes made to 645d0ad.

Reverting so that we can re-land this alongside a synthetic compiler change, to
avoid triggering download-rustc (which messes with test metrics).
Zalathar added a commit to Zalathar/rust that referenced this pull request Apr 24, 2025
Revert <rust-lang#139998> because the original
merge triggered download-rustc, which messes with test metrics and prevents us
from properly comparing them before/after the change.

The plan is to re-land this PR as-is, combined with a trivial compiler change
to avoid download-rustc and get proper test metrics.

This reverts commit be181dd, reversing
changes made to 645d0ad.
Zalathar added a commit to Zalathar/rust that referenced this pull request Apr 24, 2025
Revert <rust-lang#139998> because the original
merge triggered download-rustc, which messes with test metrics and prevents us
from properly comparing them before/after the change.

The plan is to re-land this PR as-is, combined with a trivial compiler change
to avoid download-rustc and get proper test metrics for comparison.

This reverts commit be181dd, reversing
changes made to 645d0ad.
bors added a commit to rust-lang-ci/rust that referenced this pull request Apr 24, 2025
…ouxu

Revert compiletest new-executor, to re-land without download-rustc

Revert <rust-lang#139998> because the original merge triggered download-rustc, which messes with test metrics and prevents us from properly comparing them before/after the change.

The plan is to re-land this PR as-is, combined with a trivial compiler change to avoid download-rustc and get proper test metrics for comparison.

This reverts commit be181dd, reversing changes made to 645d0ad.

r? ghost
bors added a commit to rust-lang-ci/rust that referenced this pull request Apr 25, 2025
…ouxu

Revert compiletest new-executor, to re-land without download-rustc

Revert <rust-lang#139998> because the original merge triggered download-rustc, which messes with test metrics and prevents us from properly comparing them before/after the change.

The plan is to re-land this PR as-is, combined with a trivial compiler change to avoid download-rustc and get proper test metrics for comparison.

This reverts commit be181dd, reversing changes made to 645d0ad.

r? ghost
bors added a commit to rust-lang-ci/rust that referenced this pull request Apr 25, 2025
…ouxu

Revert compiletest new-executor, to re-land without download-rustc

Revert <rust-lang#139998> because the original merge triggered download-rustc, which messes with test metrics and prevents us from properly comparing them before/after the change.

The plan is to re-land this PR as-is, combined with a trivial compiler change to avoid download-rustc and get proper test metrics for comparison.

This reverts commit be181dd, reversing changes made to 645d0ad.

r? ghost
Zalathar added a commit to Zalathar/rust that referenced this pull request Apr 25, 2025
(Re-landing rust-lang#139998, with a compiler change to inhibit download-rustc.)

Currently the new executor can be explicitly disabled by passing the `-N` flag
to compiletest (e.g. `./x test ui -- -N`), but eventually that flag will be
removed, alongside the removal of the libtest dependency.
Kivooeo pushed a commit to Kivooeo/rust that referenced this pull request Apr 25, 2025
Revert <rust-lang#139998> because the original
merge triggered download-rustc, which messes with test metrics and prevents us
from properly comparing them before/after the change.

The plan is to re-land this PR as-is, combined with a trivial compiler change
to avoid download-rustc and get proper test metrics for comparison.

This reverts commit be181dd, reversing
changes made to 645d0ad.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-compiletest Area: The compiletest test runner A-testsuite Area: The testsuite used to check the correctness of rustc CI-spurious-fail-mingw CI spurious failure: target env mingw merged-by-bors This PR was explicitly merged by bors. S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. 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.

8 participants