-
Notifications
You must be signed in to change notification settings - Fork 5.5k
Native AOT Trimming & Perf Improvements in .NET 8 #79003
Copy link
Copy link
Closed
Labels
User StoryA single user-facing feature. Can be grouped under an epic.A single user-facing feature. Can be grouped under an epic.area-NativeAOT-coreclrlinkable-frameworkIssues associated with delivering a linker friendly frameworkIssues associated with delivering a linker friendly frameworktenet-performancePerformance related issuePerformance related issue
Milestone
Metadata
Metadata
Assignees
Labels
User StoryA single user-facing feature. Can be grouped under an epic.A single user-facing feature. Can be grouped under an epic.area-NativeAOT-coreclrlinkable-frameworkIssues associated with delivering a linker friendly frameworkIssues associated with delivering a linker friendly frameworktenet-performancePerformance related issuePerformance related issue
Type
Fields
Give feedbackNo fields configured for issues without a type.
Projects
Status
No status
For .NET 8 we want to continue improving Native AOT performance, particularly in the areas that Native AOT excels at, namely fast startup, small binaries, and smaller working set. Native AOT shares the JIT and GC with CoreCLR so there's a lot of overlap with CoreCLR in these areas.
For .NET 8 we'll target basic APIs that are commonly used by customers and touch multiple areas of the stack (web/http stack and base framework libraries). There are two toy apps that we can use as benchmarks.
Albums app
This is an ASP.NET Core Minimal APIs app that simply returns lists of in-memory objects, JSON serialized.):
i. Disk size: 10 MB
ii. Startup time: <50 ms
iii. Working set (before load): <50 MB
iv. Working set (at load): <50 MB
v. Throughput: Within 5% of default CoreCLR RPS on Citrine perf environment ("default" here means compared to the default configuration of a CoreCLR-based deployment of the app, e.g. including tiered JIT)
Todo API app
This app is more representative of something “real” and thus uses much more of the framework surface area:
i. Disk size: 20 MB
ii. Startup time: <150 ms
iii. Working set (before load): <60MB
iv. Working set (at load): <60MB
v. Throughput: Within 5% of default CoreCLR RPS on Citrine perf environment
vi. Container smallest possible constraint: <100MB
The ASP.NET work here is at dotnet/aspnetcore#45910
Planned perf work in Native AOT includes
Size:
.rela.dynsection on Linux #76657Add benchmarking:
These items don't have improvements planned, but need to be tracked for regressions: