Skip to content

Move main desktop performance measurements to SDK 12 and net12.0 - #11

Closed
LoopedBard3 wants to merge 1 commit into
mainfrom
loopedbard3-performance-net12-migration
Closed

LoopedBard3 wants to merge 1 commit into
mainfrom
loopedbard3-performance-net12-migration

Conversation

@LoopedBard3

Copy link
Copy Markdown
Owner

Summary

Move desktop main measurements to SDK 12 and net12.0, rather than building net11 benchmarks with an SDK-only installation that contains only the .NET 12 runtime.

  • Update the main channel, root SDK pin, runtime pipeline default, supported microbenchmark frameworks, SDK scenario inventory, Blazor package selection, tooling test targets, and ResultsComparer framework recognition.
  • Keep MAUI/mobile main-channel targets on net11.0 with SDK 12 until their dependencies support net12. Separate framework selection from SDK acquisition using ci_setup.py --framework, retaining MAUI/macios dependency lookups on their existing net11.0 branches instead of nonexistent net12 branches.
  • Preserve explicitly versioned older channels, SDK selection, package versions, and their existing BenchmarkDotNet runner. Add global.net11.json alongside the existing older SDK configurations.
  • Use BenchmarkDotNet 0.16.0-nightly.20261014.649 for net12. The previous 0.16.0-nightly.20260801.595 restores/builds net12 but crashes before execution with GetRuntimeVersion not implemented for NotRecognized. Scope the new runner to net12 because its runtime/toolchain API changes would otherwise affect older Mono/WASM measurements.
  • Retain AOT exclusion semantics with a tested compatibility attribute and an explicit async-LINQ dependency for the new runner. Make TLS/URI single-argument sources strongly typed for its analyzer without changing benchmark names, argument values, or measured methods.
  • Select corewasm12.0 for net12 CoreCLR WASM. Reject unsupported net12 Mono WASM explicitly instead of silently selecting a different measurement target.

This change is independent of the MAUI ACES pool migration and contains no pool changes. Based on freshly fetched dotnet/performance main at bee760ce03eda6021a1466486e067c7c7e76a4ef.

Validation

Executed on Windows x64 with this checkout's private tools\dotnet\x64 first on PATH; PYTHONPATH was set to this checkout's scripts directory for pytest. $privateSdk below denotes the absolute path returned by (Resolve-Path tools\dotnet\x64).Path.

Command Actual result
python -m pytest scripts\tests\test_channel_map.py scripts\tests\test_dotnet.py scripts\tests\test_run_performance_job.py scripts\tests\test_blazor_workload.py scripts\tests\test_wasm_coreclr_r2r.py -q --basetemp=artifacts\net12-pytest-final 167 passed
dotnet test src\tests\harness\BenchmarkDotNet.Extensions.Tests\BenchmarkDotNet.Extensions.Tests.csproj --configuration Release --framework net12.0 -p:PERFLAB_TARGET_FRAMEWORKS=net12.0 --nologo --verbosity minimal 56 passed, including AOT exclusion tests and full real-data partition enumeration
dotnet test src\tools\ResultsComparer.Tests\ResultsComparer.Tests.csproj --configuration Release --framework net12.0 --nologo --verbosity minimal 21 passed
dotnet test src\tools\Reporting\Reporting.Tests\Reporting.Tests.csproj --configuration Release --framework net12.0 --nologo --verbosity minimal 13 passed
python scripts\ci_setup.py --channel main --architecture x64 --not-in-lab Passed; acquired SDK 12.0.100-alpha.1.26527.106 and runtime 12.0.0-alpha.1.26527.106, selected net12.0
python scripts\benchmarks_ci.py --frameworks net12.0 --dotnet-path $privateSdk --filter '*Perf_Guid.NewGuid*' --bdn-arguments '--job Dry' Restore, build, and execution passed; 1 benchmark executed. Both host and benchmark process reported runtime 12.0.0-alpha.1.26527.106, SDK 12.0.100-alpha.1.26527.106, and BDN 0.16.0-nightly.20261014.649. The repository-configured job was used, not a literal Dry job.
python scripts\benchmarks_ci.py --frameworks net11.0 --dotnet-path $privateSdk --build-only Passed, 0 warnings / 0 errors, retaining BDN 0.16.0-nightly.20260801.595
python scripts\ci_setup.py --channel main --framework net11.0 --architecture x64 --not-in-lab --install-dir $privateSdk --output-file tools\maui-net11-setup Passed; generated DOTNET_VERSION=12.0.100-alpha.1.26527.106, PERFLAB_TARGET_FRAMEWORKS=net11.0, and PERFLAB_BRANCH=12.0
git diff --check Passed

The private installation contained only .NET 12 runtimes during the successful net12 execution, so the benchmark was not a net11 benchmark implicitly rolled forward. The smoke run is execution evidence, not a performance comparison.

Remaining validation limits

  • Full MAUI workload acquisition, application builds, and execution on Android/iOS devices were not run. SDK/target separation, emitted setup values, and dependency branch selection are covered by focused tests and a real setup invocation.
  • Actual WASM workload build/execution was not run; argument selection and the existing WASM/CoreCLR/R2R regression suite passed. Net12 Mono WASM remains unsupported and is rejected explicitly; older targets retain their existing runner/arguments.
  • The complete Azure Pipelines/Helix matrix, CertHelper tests, and Startup tests were not run locally.
  • The older net11 control was restored/built, not executed; no .NET 11 runtime was added to the isolated installation.

Keep MAUI/mobile on net11 with SDK12 and preserve older channel runner versions. Add net12 framework, package, tooling and pipeline support with focused regression coverage.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
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.

1 participant