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

  1. Run the arm64 aspnet collection on a Linux arm64 machine or Helix queue.
  2. 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

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


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 dotnet

View on GitHub (pinned to 60108ba66e)