Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion eng/performance/sdk_scenarios.proj
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@
<Framework Include="net7.0" FrameworkName="%(Identity)" Condition="'$(FrameworkVersion)' &gt; '6.0'"/>
<Framework Include="net8.0" FrameworkName="%(Identity)" Condition="'$(FrameworkVersion)' &gt; '7.0' and '$(PERFLAB_Framework)' != 'net9.0'"/>
<Framework Include="net9.0" FrameworkName="%(Identity)" Condition="'$(FrameworkVersion)' &gt; '8.0'"/>
<Framework Include="net10.0" FrameworkName="%(Identity)" Condition="'$(FrameworkVersion)' &gt; '9.0'"/>
<Framework Include="net10.0" FrameworkName="%(Identity)" Condition="'$(FrameworkVersion)' &gt; '9.0' and '$(PERFLAB_Framework)' != 'net11.0'"/>
<Framework Include="net11.0" FrameworkName="%(Identity)" Condition="'$(FrameworkVersion)' &gt; '10.0'"/>
</ItemGroup>

<ItemDefinitionGroup>
Expand Down
2 changes: 1 addition & 1 deletion eng/pipelines/templates/runtime-perf-job.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
parameters:
steps: []
variables: []
framework: net10.0 # Specify the appropriate framework when running release branches (ie net6.0 for release/6.0)
framework: net11.0 # Specify the appropriate framework when running release branches (ie net6.0 for release/6.0)
buildConfig: ''
archType: ''
osGroup: ''
Expand Down
17 changes: 17 additions & 0 deletions global.net10.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"sdk": {
"version": "10.0.100",
"allowPrerelease": true,
"rollForward": "latestMinor"
},
"tools": {
"dotnet": "10.0.100"
},
"msbuild-sdks": {
"Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.25604.105",
"Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.25604.105"
},
"native-tools": {
"python3": "3.7.1"
}
}
4 changes: 4 additions & 0 deletions scripts/ci_setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -377,6 +377,10 @@ def main(args: CiSetupArgs):
dotnet.setup_dotnet(args.dotnet_path)

framework = ChannelMap.get_target_framework_moniker(args.channel)
if framework in ('net10.0', 'nativeaot10.0'):
global_json_path = os.path.join(get_repo_root_path(), 'global.json')
shutil.copy(os.path.join(get_repo_root_path(), 'global.net10.json'), global_json_path)
getLogger().info('Overwrote global.json with global.net10.json')
if framework in ('net9.0', 'nativeaot9.0'):
global_json_path = os.path.join(get_repo_root_path(), 'global.json')
shutil.copy(os.path.join(get_repo_root_path(), 'global.net9.json'), global_json_path)
Expand Down
2 changes: 2 additions & 0 deletions scripts/dotnet.py
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,8 @@ def get_target_framework_moniker(framework: str) -> str:
return 'net9.0'
if framework == 'nativeaot10.0':
return 'net10.0'
if framework == 'nativeaot11.0':
return 'net11.0'
else:
return framework

Expand Down
2 changes: 2 additions & 0 deletions scripts/micro_benchmarks.py
Original file line number Diff line number Diff line change
Expand Up @@ -269,6 +269,8 @@ def __get_benchmarkdotnet_arguments(framework: str, args: Any) -> list[str]:
run_args += ['--runtimes', 'wasmnet90']
elif framework == "net10.0":
run_args += ['--runtimes', 'wasmnet10_0']
elif framework == "net11.0":
run_args += ['--runtimes', 'wasmnet11_0']
else:
raise ArgumentTypeError('Framework {} is not supported for wasm'.format(framework))

Expand Down
2 changes: 1 addition & 1 deletion src/benchmarks/micro/MicroBenchmarks.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

<PropertyGroup>
<!-- Supported target frameworks -->
<SupportedTargetFrameworks>net6.0;net7.0;net8.0;net9.0;net10.0</SupportedTargetFrameworks>
<SupportedTargetFrameworks>net6.0;net7.0;net8.0;net9.0;net10.0;net11.0</SupportedTargetFrameworks>
<SupportedTargetFrameworks Condition="'$(OS)' == 'Windows_NT'">$(SupportedTargetFrameworks);net472</SupportedTargetFrameworks>
<!-- Used by Python script to narrow down the specified target frameworks to test, and avoid downloading all supported SDKs -->
<TargetFrameworks>$(PERFLAB_TARGET_FRAMEWORKS)</TargetFrameworks>
Expand Down
16 changes: 8 additions & 8 deletions src/benchmarks/micro/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,53 +12,53 @@ To learn more about designing benchmarks, please read [Microbenchmark Design Gui

## Quick Start

The first thing that you need to choose is the Target Framework. Available options are: `netcoreapp3.1|net6.0|net7.0|net8.0|net9.0|net10.0|net472`. You can specify the target framework using `-f|--framework` argument. For the sake of simplicity, all examples below use `net10.0` as the target framework.
The first thing that you need to choose is the Target Framework. Available options are: `netcoreapp3.1|net6.0|net7.0|net8.0|net9.0|net10.0|net11.0|net472`. You can specify the target framework using `-f|--framework` argument. For the sake of simplicity, all examples below use `net11.0` as the target framework.

The following commands are run from the `src/benchmarks/micro` directory.

To run the benchmarks in Interactive Mode, where you will be asked which benchmark(s) to run:

```cmd
dotnet run -c Release -f net10.0
dotnet run -c Release -f net11.0
```

To list all available benchmarks ([read more](../../../docs/benchmarkdotnet.md#Listing-the-Benchmarks)):

```cmd
dotnet run -c Release -f net10.0 --list flat|tree
dotnet run -c Release -f net11.0 --list flat|tree
```

To filter the benchmarks using a glob pattern applied to namespace.typeName.methodName ([read more](../../../docs/benchmarkdotnet.md#Filtering-the-Benchmarks)):

```cmd
dotnet run -c Release -f net10.0 --filter *Span*
dotnet run -c Release -f net11.0 --filter *Span*
```

To profile the benchmarked code and produce an ETW Trace file ([read more](../../../docs/benchmarkdotnet.md#Profiling)):

```cmd
dotnet run -c Release -f net10.0 --filter $YourFilter --profiler ETW
dotnet run -c Release -f net11.0 --filter $YourFilter --profiler ETW
```

To run the benchmarks for multiple runtimes ([read more](../../../docs/benchmarkdotnet.md#Multiple-Runtimes)):

```cmd
dotnet run -c Release -f net8.0 --filter * --runtimes net8.0 net10.0
dotnet run -c Release -f net10.0 --filter * --runtimes net10.0 net11.0
```

## Private Runtime Builds

If you contribute to [dotnet/runtime](https://github.com/dotnet/runtime) and want to benchmark **local builds of .NET Core** you need to build [dotnet/runtime](https://github.com/dotnet/runtime) in Release (including tests - so a command similar to `build clr+libs+libs.tests -rc release -lc release`) and then provide the path(s) to CoreRun(s). Provided CoreRun(s) will be used to execute every benchmark in a dedicated process:

```cmd
dotnet run -c Release -f net10.0 --filter $YourFilter \
dotnet run -c Release -f net11.0 --filter $YourFilter \
--corerun C:\git\runtime\artifacts\bin\testhost\net10.0-windows-Release-x64\shared\Microsoft.NETCore.App\9.0.0\CoreRun.exe
```

To make sure that your changes don't introduce any regressions, you can provide paths to CoreRuns with and without your changes and use the Statistical Test feature to detect regressions/improvements ([read more](../../../docs/benchmarkdotnet.md#Regressions)):

```cmd
dotnet run -c Release -f net10.0 \
dotnet run -c Release -f net11.0 \
--filter BenchmarksGame* \
--statisticalTest 3ms \
--coreRun \
Expand Down
27 changes: 5 additions & 22 deletions src/scenarios/build-common/Blazor.PackageVersions.props
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
<Project>
<PropertyGroup Condition="$(TargetFrameworks.Contains('net11.0')) or ($(TargetFrameworkVersion) != '' and $([MSBuild]::VersionEquals('$(TargetFrameworkVersion)', '11.0')))">
<AspNetCoreVersion>11.0.0-*</AspNetCoreVersion>
<BlazorVersion>11.0.0-*</BlazorVersion>
<SystemNetHttpJsonVersion>11.0.0-*</SystemNetHttpJsonVersion>
</PropertyGroup>
<PropertyGroup Condition="$(TargetFrameworks.Contains('net10.0')) or ($(TargetFrameworkVersion) != '' and $([MSBuild]::VersionEquals('$(TargetFrameworkVersion)', '10.0')))">
<AspNetCoreVersion>10.0.0-*</AspNetCoreVersion>
<BlazorVersion>10.0.0-*</BlazorVersion>
Expand Down Expand Up @@ -26,26 +31,4 @@
<BlazorVersion Condition="'$(BlazorVersion)' == ''">6.0.0-preview*</BlazorVersion>
<SystemNetHttpJsonVersion Condition="'$(SystemNetHttpJsonVersion)' == ''">6.0.0-preview*</SystemNetHttpJsonVersion>
</PropertyGroup>

<!-- Workaround: Explicit Microsoft.Extensions pre-release versions for net10.0.
The WebAssembly SDK depends on Microsoft.Extensions packages with version >=10.0.0.
Only pre-release (rtm/rc) builds are presently available in internal feeds; since
NuGet treats pre-release < stable, transitive resolution fails. We force a floating
pre-release selection via explicit PackageReferences conditioned on net10.0. -->
<PropertyGroup Condition="'$(TargetFramework)' == 'net10.0' or $(TargetFrameworks.Contains('net10.0'))">
<ExtensionsVersion>10.0.0-*</ExtensionsVersion>
</PropertyGroup>

<ItemGroup>
<!-- Explicit extensions packages (conditional) -->
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="$(ExtensionsVersion)" Condition="'$(TargetFramework)' == 'net10.0' or $(TargetFrameworks.Contains('net10.0'))" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="$(ExtensionsVersion)" Condition="'$(TargetFramework)' == 'net10.0' or $(TargetFrameworks.Contains('net10.0'))" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="$(ExtensionsVersion)" Condition="'$(TargetFramework)' == 'net10.0' or $(TargetFrameworks.Contains('net10.0'))" />
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="$(ExtensionsVersion)" Condition="'$(TargetFramework)' == 'net10.0' or $(TargetFrameworks.Contains('net10.0'))" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="$(ExtensionsVersion)" Condition="'$(TargetFramework)' == 'net10.0' or $(TargetFrameworks.Contains('net10.0'))" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="$(ExtensionsVersion)" Condition="'$(TargetFramework)' == 'net10.0' or $(TargetFrameworks.Contains('net10.0'))" />
<PackageReference Include="Microsoft.Extensions.Options" Version="$(ExtensionsVersion)" Condition="'$(TargetFramework)' == 'net10.0' or $(TargetFrameworks.Contains('net10.0'))" />
<PackageReference Include="Microsoft.Extensions.Primitives" Version="$(ExtensionsVersion)" Condition="'$(TargetFramework)' == 'net10.0' or $(TargetFrameworks.Contains('net10.0'))" />
<PackageReference Include="Microsoft.Extensions.Diagnostics" Version="$(ExtensionsVersion)" Condition="'$(TargetFramework)' == 'net10.0' or $(TargetFrameworks.Contains('net10.0'))" />
</ItemGroup>
</Project>
6 changes: 3 additions & 3 deletions src/scenarios/shared/mauisharedpython.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ def generate_maui_rollback_dict(target_framework: str):
This eliminates the need to maintain MAUI dependencies in the performance repo's Version.Details.xml.

Args:
target_framework: Target framework to determine which MAUI branch to use (e.g., "net10.0")
target_framework: Target framework to determine which MAUI branch to use (e.g., "net11.0")

Returns:
Dictionary mapping rollback package names to version/band strings
Expand Down Expand Up @@ -159,13 +159,13 @@ def extract_latest_dotnet_feed_from_nuget_config(path: str, offset: int = 0) ->

return target_feed

def download_maui_nuget_config(target_framework: str = "net10.0", output_filename: str = "MauiNuGet.config") -> str:
def download_maui_nuget_config(target_framework: str = "net11.0", output_filename: str = "MauiNuGet.config") -> str:
'''
Download MAUI's NuGet.config from the appropriate branch.
Returns the path to the downloaded config file.

Args:
target_framework: Target framework to determine which branch to use (e.g., "net10.0")
target_framework: Target framework to determine which branch to use (e.g., "net11.0")
output_filename: Name of the file to save the downloaded config
'''
# Extract base framework version (e.g., "net10.0" from "net10.0-android")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFrameworks>net10.0</TargetFrameworks>
<TargetFrameworks>net11.0</TargetFrameworks>
<IsPackable>false</IsPackable>
<Nullable>enable</Nullable>
</PropertyGroup>
Expand Down
4 changes: 2 additions & 2 deletions src/tools/Reporting/Reporting.Tests/Reporting.Tests.csproj
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFrameworks>net10.0</TargetFrameworks>
<TargetFrameworks>net11.0</TargetFrameworks>

<IsPackable>false</IsPackable>
</PropertyGroup>

<ItemGroup>
<ProjectReference Include="..\Reporting\Reporting.csproj" />
</ItemGroup>
Expand Down
4 changes: 4 additions & 0 deletions src/tools/ResultsComparer/Data.cs
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,10 @@ private static string GetMoniker(string key)
return "net10.0";
if (key.StartsWith("nativeaot10.0"))
return key;
if (key.StartsWith("net11.0"))
return "net11.0";
if (key.StartsWith("nativeaot11.0"))
return key;

return null;
}
Expand Down
Loading