Skip to content

Add CoreCLR WASM R2R performance lane - #5297

Open
lewing wants to merge 3 commits into
mainfrom
lewing-wasm-coreclr-r2r-perf
Open

Add CoreCLR WASM R2R performance lane#5297
lewing wants to merge 3 commits into
mainfrom
lewing-wasm-coreclr-r2r-perf

Conversation

@lewing

@lewing lewing commented Sep 2, 2026

Copy link
Copy Markdown
Member

Summary

  • add a dedicated CoreCLR browser-WASM R2R microbenchmark lane on V8
  • propagate the R2R selection through Helix and the microbenchmark harness
  • publish per-assembly WASM R2R with a distinct R2RType=r2r result dimension
  • resolve the CoreCLR browser runtime pack in shared WASM pack overrides
  • fail fast if CoreCLR/R2R/webcil/runtime-pack settings are not applied

Dependency

Depends on dotnet/runtime#133040, which stages the matching host Crossgen2 pack in BrowserWasmCoreCLR.

Validation

  • focused Python tests for argument validation, environment propagation, Helix forwarding, and result dimensions
  • direct MSBuild evaluation of R2R and runtime-pack properties
  • fail-fast MSBuild validation for invalid Mono/R2R configuration
  • XML and YAML parsing

Remaining validation

Run runtime-wasm-perf with this branch and the runtime artifact together, confirm CreateReadyToRunImages executes, and verify uploaded results are labeled R2RType=r2r.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 4f286edf-0a3c-43dc-92fe-26a0a57d5360
Copilot AI lite review requested due to automatic review settings September 2, 2026 02:39

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

It changes CI/Helix orchestration and MSBuild/runtime-pack resolution behavior where correctness is environment-dependent and should be validated by a human with end-to-end runs.

Pull request overview

Adds a dedicated CoreCLR browser-WASM ReadyToRun (R2R) microbenchmark lane (V8) and wires the R2R selection through the performance repo’s Helix/job plumbing and MSBuild configuration, including validation to fail fast when required settings aren’t applied.

Changes:

  • Adds CoreCLR-vs-Mono runtime-pack override logic for WASM builds and validates the expected CoreCLR runtime pack for R2R runs.
  • Introduces --wasm-ready-to-run end-to-end (CLI arg → env var → MSBuild properties → Helix forwarding) and emits a distinct R2RType=r2r run dimension.
  • Adds a non-release-branch pipeline lane for CoreCLR WASM R2R microbenchmarks on V8 plus focused pytest coverage.
File summaries
File Description
src/scenarios/build-common/WasmOverridePacks.targets Chooses CoreCLR vs Mono WASM runtime-pack IDs based on UseMonoRuntime.
src/benchmarks/micro/MicroBenchmarks.Wasm.targets Enables/validates CoreCLR WASM R2R publish properties and validates runtime-pack selection.
scripts/tests/test_wasm_coreclr_r2r.py Adds pytest coverage for argument validation, env propagation, Helix forwarding, and result dimensions.
scripts/run_performance_job.py Forwards --wasm-ready-to-run to Helix work items and adds R2RType=r2r dimension.
scripts/micro_benchmarks.py Adds --wasm-ready-to-run and propagates it via PERFLAB_WASM_READY_TO_RUN.
eng/pipelines/runtime-wasm-perf-jobs.yml Adds a CoreCLR WASM R2R microbenchmark lane (non-release branches), V8 on linux_x64.
Review details
  • Files reviewed: 6/6 changed files
  • Comments generated: 0
  • Review effort level: Lite

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

@lewing

lewing commented Sep 2, 2026

Copy link
Copy Markdown
Member Author

dotnet/runtime#133040 is the runtime side

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

End-to-end validation remains pending and the required runtime dependency is not yet merged.

Review details
  • Files reviewed: 6/6 changed files
  • Comments generated: 0 new
  • Review effort level: Balanced

@lewing
lewing marked this pull request as ready for review September 2, 2026 15:07
@lewing

lewing commented Sep 2, 2026

Copy link
Copy Markdown
Member Author

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 4f286edf-0a3c-43dc-92fe-26a0a57d5360
Copilot AI review requested due to automatic review settings September 2, 2026 20:21
@lewing

lewing commented Sep 2, 2026

Copy link
Copy Markdown
Member Author

Pushed c10ff6c to fix the first end-to-end validation failure from runtime-wasm-perf build 1579394. The runtime artifact correctly contained the local WebAssembly SDK and Crossgen2 packages at 11.0.0-ci, but generated benchmark restore requested the runtime product version (11.0.0-rc.1.26431.109). The payload now detects the shared local toolchain package version, exports it to Helix, and applies it to both KnownWebAssemblySdkPack and KnownCrossgen2Pack. Focused tests cover detection, mismatch rejection, propagation, and MSBuild properties. A new pipeline run is required.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

The environment-dependent MSBuild and Helix integration still requires the stated end-to-end validation after the latest package-version fix.

Review details
  • Files reviewed: 7/7 changed files
  • Comments generated: 0 new
  • Review effort level: Balanced

@lewing

lewing commented Sep 2, 2026

Copy link
Copy Markdown
Member Author

@lewing
lewing marked this pull request as draft September 2, 2026 21:29
@lewing
lewing requested a review from akoeplinger September 2, 2026 21:29
@lewing

lewing commented Sep 2, 2026

Copy link
Copy Markdown
Member Author

is there a better (non-workload) way to use the crossgen from the build?

@lewing
lewing marked this pull request as ready for review September 2, 2026 22:58
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 4f286edf-0a3c-43dc-92fe-26a0a57d5360
@lewing

lewing commented Sep 2, 2026

Copy link
Copy Markdown
Member Author

Build 1579662 was green but did not actually compile the benchmark app as R2R: the inner-TFM restore evaluation reset KnownWebAssemblySdkPack to the product version, restored feed package .118, and therefore never imported the new CoreCLR R2R targets. The publish binlog showed CreateReadyToRunImages completing in 1 ms with no _ReadyToRunFilesToPublish. Pushed a fix that reapplies both local toolchain versions immediately before ProcessFrameworkReferences, following the runtime WASM test pattern, and now fails the build if _CreateR2RImages produces no outputs. Another validation run is required.

Copilot AI review requested due to automatic review settings September 2, 2026 23:28

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

The configuration validation runs after publishing rather than failing before build work begins.

Review details

Suppressed comments (1)

Previously missed (1) — in code that hasn't changed since the last review.

src/benchmarks/micro/MicroBenchmarks.Wasm.targets:21

  • PrepareForWasmBuild is a BenchmarkDotNet-generated target that runs AfterTargets="Publish", so this validation occurs only after the full publish/R2R work has already completed. Invalid Mono/R2R or package settings therefore do not fail fast as described; hook this validation before framework-pack resolution (or another pre-build target) instead.
  • Files reviewed: 7/7 changed files
  • Comments generated: 0 new
  • Review effort level: Balanced

@lewing

lewing commented Sep 2, 2026

Copy link
Copy Markdown
Member Author

@lewing

lewing commented Sep 3, 2026

Copy link
Copy Markdown
Member Author

the crossgen we're building for the pipeline had a newer glibc because it wasn't crossbuilt dotnet/runtime#133143 it the fix for that and I will rereun the test once it is in.

@pavelsavara

Copy link
Copy Markdown
Member

I think this depends on WASM SDK (msbuild) support for R2R - cross-compile trimmed app -> SWA -> boot config. Right ?
I'm working on it.

@lewing

lewing commented Sep 3, 2026

Copy link
Copy Markdown
Member Author

@lewing
lewing requested a review from kotlarmilos September 3, 2026 17:10
@pavelsavara

Copy link
Copy Markdown
Member

are we testing corerun @lewing ?

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants