Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[profiled-aot] update dotnet.aotprofile for .NET 8 #7908

Merged
merged 1 commit into from
Mar 22, 2023

Conversation

jonathanpeppers
Copy link
Member

We've not done this yet in .NET 8, and we've noticed some potential regressions in startup time.

A dotnet new android app, an average of 10 runs on a Pixel 5:

Before:
Average(ms): 192.3
Std Err(ms): 2.00582485111072
Std Dev(ms): 6.34297511687799
After:
Average(ms): 161.4
Std Err(ms): 2.21208800307161
Std Dev(ms): 6.99523647443983

Saves ~30ms in startup by just updating the profile.

We've not done this yet in .NET 8, and we've noticed some potential
regressions in startup time.

A `dotnet new android` app, an average of 10 runs on a Pixel 5:

    Before:
    Average(ms): 192.3
    Std Err(ms): 2.00582485111072
    Std Dev(ms): 6.34297511687799
    After:
    Average(ms): 161.4
    Std Err(ms): 2.21208800307161
    Std Dev(ms): 6.99523647443983

Saves ~30ms in startup by just updating the profile.
Comment on lines +2331 to +2343
void System.Reflection.Emit.DynamicMethod:CreateDynMethod ()
void System.Reflection.Emit.DynamicMethod:Init (string,System.Reflection.MethodAttributes,System.Reflection.CallingConventions,System.Type,System.Type[],System.Type,System.Reflection.Module,bool,bool)
void System.Reflection.Emit.ILGenerator:.ctor (System.Reflection.Module,System.Reflection.Emit.ITokenGenerator,int)
void System.Reflection.Emit.ILGenerator:Emit (System.Reflection.Emit.OpCode,int)
void System.Reflection.Emit.ILGenerator:Emit (System.Reflection.Emit.OpCode,System.Reflection.ConstructorInfo)
void System.Reflection.Emit.ILGenerator:Emit (System.Reflection.Emit.OpCode,System.Reflection.FieldInfo)
void System.Reflection.Emit.ILGenerator:Emit (System.Reflection.Emit.OpCode,System.Reflection.MethodInfo)
void System.Reflection.Emit.ILGenerator:Emit (System.Reflection.Emit.OpCode,System.Type)
void System.Reflection.Emit.ILGenerator:Emit (System.Reflection.Emit.OpCode)
void System.Reflection.Emit.ILGenerator:emit_int (int)
void System.Reflection.Emit.ILGenerator:label_fixup (System.Reflection.MethodBase)
void System.Reflection.Emit.ILGenerator:ll_emit (System.Reflection.Emit.OpCode)
void System.Reflection.Emit.ILGenerator:make_room (int)
Copy link
Member Author

Choose a reason for hiding this comment

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

Wait something is using System.Reflection.Emit now?!? Need to investigate what...

Copy link
Member Author

Choose a reason for hiding this comment

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

This is coming from System.Reflection.ConstructorInfo.Invoke().

Will investigate if we can use the feature flag: dotnet/runtime#80246

@jonpryor jonpryor merged commit 30e9487 into dotnet:main Mar 22, 2023
@jonathanpeppers jonathanpeppers deleted the net8-aot-profile branch March 22, 2023 16:15
jonathanpeppers added a commit that referenced this pull request Mar 22, 2023
Context? dotnet/runtime#72717

We've not done this yet in .NET 8, and we've noticed some potential
regressions in startup time, possibly because
`ConstructorInfo.Invoke()` now uses System.Reflection.Emit.

Update `dotnet.aotprofile` for .NET 8.

A `dotnet new android` app, an average of 10 runs on a Pixel 5:

  * Before:

        Average(ms): 192.3
        Std Err(ms): 2.00582485111072
        Std Dev(ms): 6.34297511687799

  * After:

        Average(ms): 161.4
        Std Err(ms): 2.21208800307161
        Std Dev(ms): 6.99523647443983

Saves ~30ms in startup by just updating the profile.
grendello added a commit to grendello/xamarin-android that referenced this pull request Mar 23, 2023
* main:
  [build] remove .NET 6 support (dotnet#7900)
  [profiled-aot] update `dotnet.aotprofile` for .NET 8 (dotnet#7908)
  [tests] Add backup ssl sites in case of 429 response. (dotnet#7909)
  $(AndroidPackVersionSuffix)=preview.4; net8 is 34.0.0-preview.4 (dotnet#7912)
grendello added a commit to grendello/xamarin-android that referenced this pull request Apr 6, 2023
* main: (94 commits)
  [ci] Remove remaining Classic test jobs. (dotnet#7924)
  Add Nightly Tests for Humanizer
  [readme] Add aka.ms links for d17.5. (dotnet#7935)
  [tests] Remove `net472` multitargeting (dotnet#7932)
  [monodroid] Fix `ld` build error on Nightly Builds. (dotnet#7925)
  Bump to xamarin/Java.Interop/main@0355acf (dotnet#7931)
  [tests] Use msftconnecttest.com in QuoteInvalidQuoteUrlsShouldWork (dotnet#7919)
  [ci] Don't set demands for megapipeline (dotnet#7929)
  [Mono.Android] Bind API-UpsideDownCake Developer Preview 1 (dotnet#7796)
  Bump to dotnet/installer@d109cba3ff 8.0.100-preview.4.23176.5 (dotnet#7921)
  [Xamarin.Android.Build.Tasks] Fix Android Version Code for Release builds (dotnet#7795)
  Bump to dotnet/installer@27d6769dfb 8.0.100-preview.4.23172.16 (dotnet#7910)
  [Xamarin.Android.Build.Tasks] Fix native code generation when marshal methods are disabled (dotnet#7899)
  [ci] Optimize 'APK's .NET' test job overhead. (dotnet#7904)
  [Mono.Android] delay JNINativeWrapper.get_runtime_types() (dotnet#7913)
  Bump external/Java.Interop from `73ebad2` to `53bfb4a` (dotnet#7914)
  [build] remove .NET 6 support (dotnet#7900)
  [profiled-aot] update `dotnet.aotprofile` for .NET 8 (dotnet#7908)
  [tests] Add backup ssl sites in case of 429 response. (dotnet#7909)
  $(AndroidPackVersionSuffix)=preview.4; net8 is 34.0.0-preview.4 (dotnet#7912)
  ...
@github-actions github-actions bot locked and limited conversation to collaborators Jan 22, 2024
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants