Skip to content

Enable runtime-async for System.IO.Compression and System.IO.Compression.Brotli#124397

Draft
Copilot wants to merge 5 commits intomainfrom
copilot/enable-runtime-async-compression
Draft

Enable runtime-async for System.IO.Compression and System.IO.Compression.Brotli#124397
Copilot wants to merge 5 commits intomainfrom
copilot/enable-runtime-async-compression

Conversation

Copy link
Contributor

Copilot AI commented Feb 13, 2026

Description

Enables the runtime-async compiler feature on the System.IO.Compression and System.IO.Compression.Brotli source libraries to allow performance testing of runtime-async with compression workloads.

  • Adds <Features>$(Features);runtime-async=on</Features> to both library csproj files
  • Guards enablement with conditions matching eng/testing/tests.targets: excluded for browser, wasi, and Mono targets where runtime-async is unsupported

All existing tests pass (1400 System.IO.Compression, 328 Brotli). Full clr+libs build succeeds with 0 warnings and 0 errors.


💬 We'd love your input! Share your thoughts on Copilot coding agent in our 2 minute survey.

@github-actions github-actions bot added the needs-area-label An area label is needed to ensure this gets routed to the appropriate area owners label Feb 13, 2026
…ion.Brotli

Co-authored-by: agocke <515774+agocke@users.noreply.github.com>
Copilot AI changed the title [WIP] Enable runtime async for System.Compression performance testing Enable runtime-async for System.IO.Compression and System.IO.Compression.Brotli Feb 13, 2026
Copilot AI requested a review from agocke February 13, 2026 19:17
@github-actions github-actions bot added area-System.IO.Compression and removed needs-area-label An area label is needed to ensure this gets routed to the appropriate area owners labels Feb 13, 2026
@agocke
Copy link
Member

agocke commented Feb 13, 2026

/benchmark

@pr-benchmarks
Copy link

pr-benchmarks bot commented Feb 13, 2026

Crank Pull Request Bot

/benchmark <benchmark[,...]> <profile[,...]> <component,[...]> <arguments>

Benchmarks:

  • micro: .NET Performance micro benchmarks (set filter by adding --variable filter=...; by default filter=*LinqBenchmarks*)
  • plaintext: TechEmpower Plaintext Scenario - ASP.NET Platform implementation
  • json: TechEmpower JSON Scenario - ASP.NET Platform implementation
  • fortunes: TechEmpower Fortunes Scenario - ASP.NET Platform implementation
  • fortunes_ef: TechEmpower Fortunes Scenario with EF Core - ASP.NET Platform implementation

Profiles:

  • aspnet-citrine-ampere: Ampere/Linux 80 Cores

Components:

  • runtime
  • libs

Arguments: any additional arguments to pass through to crank, e.g. --variable name=value

@pr-benchmarks
Copy link

pr-benchmarks bot commented Feb 13, 2026

Crank Pull Request Bot

/benchmark <benchmark[,...]> <profile[,...]> <component,[...]> <arguments>

Benchmarks:

  • micro: .NET Performance micro benchmarks (set filter by adding --variable filter=...; by default filter=*LinqBenchmarks*)
  • plaintext: TechEmpower Plaintext Scenario - ASP.NET Platform implementation
  • json: TechEmpower JSON Scenario - ASP.NET Platform implementation
  • fortunes: TechEmpower Fortunes Scenario - ASP.NET Platform implementation
  • fortunes_ef: TechEmpower Fortunes Scenario with EF Core - ASP.NET Platform implementation
  • httpclient: HttpClient Benchmark (change HTTP version by adding e.g. --variable httpVersion=3.0; change response size by adding e.g. --variable responseSize=256; default: HTTP/1.1 GET 8K)

Profiles:

  • aspnet-perf-win: Intel/Windows 12 Cores
  • aspnet-citrine-win: Intel/Windows 28 Cores

Components:

  • runtime
  • libs

Arguments: any additional arguments to pass through to crank, e.g. --variable name=value

@pr-benchmarks
Copy link

pr-benchmarks bot commented Feb 13, 2026

Crank Pull Request Bot

/benchmark <benchmark[,...]> <profile[,...]> <component,[...]> <arguments>

Benchmarks:

  • micro: .NET Performance micro benchmarks (set filter by adding --variable filter=...; by default filter=*LinqBenchmarks*)
  • plaintext: TechEmpower Plaintext Scenario - ASP.NET Platform implementation
  • json: TechEmpower JSON Scenario - ASP.NET Platform implementation
  • fortunes: TechEmpower Fortunes Scenario - ASP.NET Platform implementation
  • fortunes_ef: TechEmpower Fortunes Scenario with EF Core - ASP.NET Platform implementation

Profiles:

  • aspnet-citrine-win-ampere: Ampere/Windows 80 Cores

Components:

  • runtime
  • libs

Arguments: any additional arguments to pass through to crank, e.g. --variable name=value

@agocke
Copy link
Member

agocke commented Feb 13, 2026

/benchmark micro

@pr-benchmarks
Copy link

pr-benchmarks bot commented Feb 13, 2026

Crank Pull Request Bot

/benchmark <benchmark[,...]> <profile[,...]> <component,[...]> <arguments>

Benchmarks:

  • micro: .NET Performance micro benchmarks (set filter by adding --variable filter=...; by default filter=*LinqBenchmarks*)
  • plaintext: TechEmpower Plaintext Scenario - ASP.NET Platform implementation
  • json: TechEmpower JSON Scenario - ASP.NET Platform implementation
  • fortunes: TechEmpower Fortunes Scenario - ASP.NET Platform implementation
  • fortunes_ef: TechEmpower Fortunes Scenario with EF Core - ASP.NET Platform implementation
  • httpclient: HttpClient Benchmark (change HTTP version by adding e.g. --variable httpVersion=3.0; change response size by adding e.g. --variable responseSize=256; default: HTTP/1.1 GET 8K)

Profiles:

  • aspnet-perf-win: Intel/Windows 12 Cores
  • aspnet-citrine-win: Intel/Windows 28 Cores

Components:

  • runtime
  • libs

Arguments: any additional arguments to pass through to crank, e.g. --variable name=value

@pr-benchmarks
Copy link

pr-benchmarks bot commented Feb 13, 2026

Crank Pull Request Bot

/benchmark <benchmark[,...]> <profile[,...]> <component,[...]> <arguments>

Benchmarks:

  • micro: .NET Performance micro benchmarks (set filter by adding --variable filter=...; by default filter=*LinqBenchmarks*)
  • plaintext: TechEmpower Plaintext Scenario - ASP.NET Platform implementation
  • json: TechEmpower JSON Scenario - ASP.NET Platform implementation
  • fortunes: TechEmpower Fortunes Scenario - ASP.NET Platform implementation
  • fortunes_ef: TechEmpower Fortunes Scenario with EF Core - ASP.NET Platform implementation

Profiles:

  • aspnet-citrine-win-ampere: Ampere/Windows 80 Cores

Components:

  • runtime
  • libs

Arguments: any additional arguments to pass through to crank, e.g. --variable name=value

@pr-benchmarks
Copy link

pr-benchmarks bot commented Feb 13, 2026

Crank Pull Request Bot

/benchmark <benchmark[,...]> <profile[,...]> <component,[...]> <arguments>

Benchmarks:

  • micro: .NET Performance micro benchmarks (set filter by adding --variable filter=...; by default filter=*LinqBenchmarks*)
  • plaintext: TechEmpower Plaintext Scenario - ASP.NET Platform implementation
  • json: TechEmpower JSON Scenario - ASP.NET Platform implementation
  • fortunes: TechEmpower Fortunes Scenario - ASP.NET Platform implementation
  • fortunes_ef: TechEmpower Fortunes Scenario with EF Core - ASP.NET Platform implementation
  • httpclient: HttpClient Benchmark (change HTTP version by adding e.g. --variable httpVersion=3.0; change response size by adding e.g. --variable responseSize=256; default: HTTP/1.1 GET 8K)

Profiles:

  • aspnet-citrine-lin: Intel/Linux 28 Cores
  • aspnet-perf-lin: Intel/Linux 12 Cores

Components:

  • runtime
  • libs

Arguments: any additional arguments to pass through to crank, e.g. --variable name=value

@pr-benchmarks
Copy link

pr-benchmarks bot commented Feb 13, 2026

Crank Pull Request Bot

/benchmark <benchmark[,...]> <profile[,...]> <component,[...]> <arguments>

Benchmarks:

  • micro: .NET Performance micro benchmarks (set filter by adding --variable filter=...; by default filter=*LinqBenchmarks*)
  • plaintext: TechEmpower Plaintext Scenario - ASP.NET Platform implementation
  • json: TechEmpower JSON Scenario - ASP.NET Platform implementation
  • fortunes: TechEmpower Fortunes Scenario - ASP.NET Platform implementation
  • fortunes_ef: TechEmpower Fortunes Scenario with EF Core - ASP.NET Platform implementation

Profiles:

  • aspnet-citrine-ampere: Ampere/Linux 80 Cores

Components:

  • runtime
  • libs

Arguments: any additional arguments to pass through to crank, e.g. --variable name=value

@agocke
Copy link
Member

agocke commented Feb 13, 2026

/benchmark micro libs

@pr-benchmarks
Copy link

pr-benchmarks bot commented Feb 13, 2026

Crank Pull Request Bot

/benchmark <benchmark[,...]> <profile[,...]> <component,[...]> <arguments>

Benchmarks:

  • micro: .NET Performance micro benchmarks (set filter by adding --variable filter=...; by default filter=*LinqBenchmarks*)
  • plaintext: TechEmpower Plaintext Scenario - ASP.NET Platform implementation
  • json: TechEmpower JSON Scenario - ASP.NET Platform implementation
  • fortunes: TechEmpower Fortunes Scenario - ASP.NET Platform implementation
  • fortunes_ef: TechEmpower Fortunes Scenario with EF Core - ASP.NET Platform implementation
  • httpclient: HttpClient Benchmark (change HTTP version by adding e.g. --variable httpVersion=3.0; change response size by adding e.g. --variable responseSize=256; default: HTTP/1.1 GET 8K)

Profiles:

  • aspnet-citrine-lin: Intel/Linux 28 Cores
  • aspnet-perf-lin: Intel/Linux 12 Cores

Components:

  • runtime
  • libs

Arguments: any additional arguments to pass through to crank, e.g. --variable name=value

@pr-benchmarks
Copy link

pr-benchmarks bot commented Feb 13, 2026

Crank Pull Request Bot

/benchmark <benchmark[,...]> <profile[,...]> <component,[...]> <arguments>

Benchmarks:

  • micro: .NET Performance micro benchmarks (set filter by adding --variable filter=...; by default filter=*LinqBenchmarks*)
  • plaintext: TechEmpower Plaintext Scenario - ASP.NET Platform implementation
  • json: TechEmpower JSON Scenario - ASP.NET Platform implementation
  • fortunes: TechEmpower Fortunes Scenario - ASP.NET Platform implementation
  • fortunes_ef: TechEmpower Fortunes Scenario with EF Core - ASP.NET Platform implementation

Profiles:

  • aspnet-citrine-ampere: Ampere/Linux 80 Cores

Components:

  • runtime
  • libs

Arguments: any additional arguments to pass through to crank, e.g. --variable name=value

@pr-benchmarks
Copy link

pr-benchmarks bot commented Feb 13, 2026

Crank Pull Request Bot

/benchmark <benchmark[,...]> <profile[,...]> <component,[...]> <arguments>

Benchmarks:

  • micro: .NET Performance micro benchmarks (set filter by adding --variable filter=...; by default filter=*LinqBenchmarks*)
  • plaintext: TechEmpower Plaintext Scenario - ASP.NET Platform implementation
  • json: TechEmpower JSON Scenario - ASP.NET Platform implementation
  • fortunes: TechEmpower Fortunes Scenario - ASP.NET Platform implementation
  • fortunes_ef: TechEmpower Fortunes Scenario with EF Core - ASP.NET Platform implementation
  • httpclient: HttpClient Benchmark (change HTTP version by adding e.g. --variable httpVersion=3.0; change response size by adding e.g. --variable responseSize=256; default: HTTP/1.1 GET 8K)

Profiles:

  • aspnet-perf-win: Intel/Windows 12 Cores
  • aspnet-citrine-win: Intel/Windows 28 Cores

Components:

  • runtime
  • libs

Arguments: any additional arguments to pass through to crank, e.g. --variable name=value

@pr-benchmarks
Copy link

pr-benchmarks bot commented Feb 13, 2026

Crank Pull Request Bot

/benchmark <benchmark[,...]> <profile[,...]> <component,[...]> <arguments>

Benchmarks:

  • micro: .NET Performance micro benchmarks (set filter by adding --variable filter=...; by default filter=*LinqBenchmarks*)
  • plaintext: TechEmpower Plaintext Scenario - ASP.NET Platform implementation
  • json: TechEmpower JSON Scenario - ASP.NET Platform implementation
  • fortunes: TechEmpower Fortunes Scenario - ASP.NET Platform implementation
  • fortunes_ef: TechEmpower Fortunes Scenario with EF Core - ASP.NET Platform implementation

Profiles:

  • aspnet-citrine-win-ampere: Ampere/Windows 80 Cores

Components:

  • runtime
  • libs

Arguments: any additional arguments to pass through to crank, e.g. --variable name=value

@agocke
Copy link
Member

agocke commented Feb 13, 2026

/benchmark micro aspnet-perf-lin libs

@pr-benchmarks
Copy link

pr-benchmarks bot commented Feb 13, 2026

Benchmark started for micro on aspnet-perf-lin with libs. Logs: link

@pr-benchmarks
Copy link

pr-benchmarks bot commented Feb 13, 2026

An error occurred, please check the logs

…ropagation for all three libraries

Co-authored-by: agocke <515774+agocke@users.noreply.github.com>
Copy link
Contributor Author

Copilot AI commented Feb 14, 2026

@copilot please also enable preview features for System.Net.WebSockets

Done in 06236ed. Also fixed all three libraries to use NoWarn CA2252 instead of EnablePreviewFeatures — the latter was generating [assembly: RequiresPreviewFeatures] which broke the System type-forwarding shim. All 570 WebSockets tests pass.

Copilot AI changed the title Enable runtime-async for System.IO.Compression and System.IO.Compression.Brotli Enable runtime-async for System.IO.Compression, System.IO.Compression.Brotli, and System.Net.WebSockets Feb 14, 2026
@agocke
Copy link
Member

agocke commented Feb 17, 2026

/benchmark micro aspnet-perf-lin libs

@pr-benchmarks
Copy link

pr-benchmarks bot commented Feb 17, 2026

Benchmark started for micro on aspnet-perf-lin with libs. Logs: link

@pr-benchmarks
Copy link

pr-benchmarks bot commented Feb 17, 2026

An error occurred, please check the logs

@iremyux
Copy link
Contributor

iremyux commented Feb 19, 2026

Hey @agocke , we triaged this inside the team because it got labeled System.IO.Compression. But it seems like it's mislabeled, can you please change it to something more suitable?

@agocke
Copy link
Member

agocke commented Feb 19, 2026

@DrewScoggins am I doing something wrong with the benchmarking here? It seems like this should work, but I can’t see the results and these errors don’t make sense

@agocke
Copy link
Member

agocke commented Feb 19, 2026

@iremyux this is a draft pr, we can leave it untriaged

@DrewScoggins
Copy link
Member

Took a look, and the issue is that an environment variable is not being set properly, and we try to restore for older TFMs. Taking a step back, this feature was written by Sebestian, and we don't use it or really maintain it. I am going to spend some time today to look at this feature and get it working again, as well as understand what and how it works.

@dotnet-policy-service
Copy link
Contributor

Tagging subscribers to this area: @agocke
See info in area-owners.md if you want to be subscribed.

<PropertyGroup Condition="'$(TargetOS)' != 'browser'
and '$(TargetOS)' != 'wasi'
and '$(RuntimeFlavor)' != 'Mono'">
<NoWarn>$(NoWarn);CA2252</NoWarn>
Copy link
Member

Choose a reason for hiding this comment

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

@copilot Please remove the <NoWarn> additions (they should no longer be necessary) and undo the changes to WebSockets

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Done in 766c789. Removed NoWarn CA2252 from both compression csproj files and fully reverted the WebSockets changes.

… changes

Co-authored-by: agocke <515774+agocke@users.noreply.github.com>
Copilot AI changed the title Enable runtime-async for System.IO.Compression, System.IO.Compression.Brotli, and System.Net.WebSockets Enable runtime-async for System.IO.Compression and System.IO.Compression.Brotli Mar 10, 2026
Copilot AI requested a review from agocke March 10, 2026 17:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

Status: No status

Development

Successfully merging this pull request may close these issues.

6 participants