dotnet/runtime · error · RuntimeError
Invalid OS for arm64.
Error message
Invalid OS for arm64.
What it means
Raised by determine_benchmark_machine() at src/coreclr/scripts/superpmi_aspnet.py:111 when arch is 'arm64' but host_os is not 'linux'. The only arm64 benchmark machine configured is aspnet-citrine-arm (Linux).
Solutions
- Run the arm64 aspnet collection on a Linux arm64 machine or Helix queue.
- Target a remote Linux arm64 crank agent instead of a local Windows/macOS run.
Defensive patterns
Strategy: validation
Validate before calling
if coreclr_args.arch == 'arm64' and coreclr_args.host_os != 'linux':
raise SystemExit('arm64 aspnet benchmark collection requires a Linux host') Prevention
- Verify host_os == 'linux' before calling determine_benchmark_machine() for arm64 builds.
When it happens
Trigger: Invoking superpmi_aspnet.py with -arch arm64 on Windows or macOS.
Common situations: Running the arm64 aspnet benchmark collection from a Windows arm64 or Apple Silicon macOS machine.
Related errors
- Invalid OS for x64.
- Pass only one tiering option.
- Unknown OS.
- Cannot find System.Private.CoreLib.dll at
- Collection 'smoke_tests' is only available for 'nativeaot'…
AI-assisted analysis of dotnet/runtime@60108ba66e (2026-08-10).
Data as JSON: /api/errors/413322d8f9e36d05.
Report an issue: GitHub.
Appendix: source
Thrown at src/coreclr/scripts/superpmi_aspnet.py:111
coreclr_args (CoreclrArguments): parsed args
Return:
(str) : name of the benchmnark machine
"""
if coreclr_args.arch == "x64":
if coreclr_args.host_os == "windows":
return "aspnet-perf-win"
# return "aspnet-citrine-win"
elif coreclr_args.host_os == "linux":
return "aspnet-perf-lin"
else:
raise RuntimeError("Invalid OS for x64.")
elif coreclr_args.arch == "arm64":
if coreclr_args.host_os == "linux":
return "aspnet-citrine-arm"
else:
raise RuntimeError("Invalid OS for arm64.")
else:
raise RuntimeError("Invalid arch.")
def build_and_run(coreclr_args):
"""Run perf scenarios under crank and collect data with SPMI"
Args:
coreclr_args (CoreClrArguments): Arguments use to drive
output_mch_name (string): Name of output mch file name
"""
source_directory = coreclr_args.source_directory
target_arch = coreclr_args.arch
target_os = coreclr_args.host_os
checked_root = path.join(source_directory, "artifacts", "bin", "coreclr", target_os + "." + coreclr_args.arch + ".Checked")
release_root = path.join(source_directory, "artifacts", "bin", "coreclr", target_os + "." + coreclr_args.arch + ".Release")
# We'll use repo script to install dotnetView on GitHub (pinned to 60108ba66e)