rust-lang / rust-lang/rust

Upgrading to Rust 1.94 from 1.93.1 causes severe runtime regression on 2-socket EPYC 9754 (Bergamo)

Open
#154,516 11 comments 6 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

C-optimization E-needs-bisection I-prioritize needs-triage regression-untriaged
Dominant language
Rust
Stars
119k
Forks
16.1k
PR merge metrics
PR metrics pending

Description

Upgrading from Rust 1.93.1 to Rust 1.94.0 causes a ~50% runtime performance regression for the chess engine Reckless on a 2×EPYC 9754 (Bergamo) machine when compiled with PGO. Both compiler versions ship the same LLVM (21.1.8), so the cause must be a rustc-level change.

This regression caused the TCEC Season 29 Superfinal - the premier computer chess championship - to be restarted after the engine was observed running at roughly half its expected speed.

Version it worked on

Rust 1.93.1 (rustc 1.93.1 (01f6ddf75 2026-02-11), LLVM 21.1.8)

Version with regression
rustc 1.94.0 (4a4ef493e 2026-03-02)
binary: rustc
commit-hash: 4a4ef493e3a1488c6e321570238084b38948f6db
commit-date: 2026-03-02
host: x86_64-unknown-linux-gnu
release: 1.94.0
LLVM version: 21.1.8
Key finding: identical LLVM versions
rustc 1.93.1  →  LLVM 21.1.8  →  WORKS (174M nps on TCEC machine)
rustc 1.94.0  →  LLVM 21.1.8  →  BROKEN (~77M nps on TCEC machine)

Since both versions ship the same LLVM, the regression must be in rustc-level changes between 1.93.1 and 1.94.0.

Runtime impact

DivP: https://github.com/codedeliveryservice/Reckless/commits/divp
Sufi: https://github.com/codedeliveryservice/Reckless/commits/sufi/
Run make for the binaries

Tested on the actual TCEC tournament machine (2×EPYC 9754, 512 threads), by TCEC admin Aloril, all built with PGO on the TCEC machine:

Binary Compiler NPS
DivP (older source) Rust 1.93.1 179M
SuFi (newer source) Rust 1.92.0 (compiled elsewhere) 174M
DivP (older source) Rust 1.94.0 (recompiled) 119M
SuFi (newer source) Rust 1.94.0 (with PGO) 77-86M

The third row is critical - even older source code becomes slower when compiled with 1.94.0 + PGO, confirming this is a compiler regression.

The runtime regression only occurs on the TCEC machine: 2×EPYC 9754 (Bergamo/Zen 4c, 2MB L3 per core). It does not appear on our other machines:

  • 2×EPYC 9654 (Genoa/Zen 4, 4MB L3 per core)
  • 1×EPYC 9754 (single socket Bergamo)

Note: both multi-socket machines use non-default BIOS NUMA configurations (32 nodes on the 2×9754, 24 nodes on the 2×9654). This was investigated and ruled out as a direct cause.

Workaround

Compiling with Rust 1.93.1 avoids the regression entirely.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the Reckless DivP and SuFi commits linked in the issue and run make using Rust 1.93.1 and 1.94.0 with PGO on the described 2×EPYC 9754 system. Compare the results and investigate rustc changes between those releases; done means identifying the compiler change responsible for the regression or producing a focused reproduction.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust
Domain
compilers, performance
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.