-
Notifications
You must be signed in to change notification settings - Fork 4.9k
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
[PERF] Enable Android CoreCLR and device startup testing #112939
[PERF] Enable Android CoreCLR and device startup testing #112939
Conversation
Tagging subscribers to this area: @dotnet/runtime-infrastructure |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Copilot reviewed 4 out of 4 changed files in this pull request and generated no comments.
Comments suppressed due to low confidence (3)
eng/pipelines/performance/templates/perf-build-jobs.yml:79
- Please confirm that the variable $(_BuildConfig) is defined in the pipeline context or replace it with a fixed value, as an undefined variable could lead to build configuration issues.
buildArgs: -s clr.runtime+clr.alljits+clr.corelib+clr.nativecorelib+clr.tools+clr.packages+libs -c $(_BuildConfig)
eng/pipelines/performance/templates/build-perf-sample-apps.yml:2
- Verify that the removal of several parameters (such as osSubgroup, archType, buildConfig, etc.) does not break any dependent steps or external references elsewhere in the pipeline.
- osSubgroup: ''
eng/pipelines/performance/templates/perf-ios-scenarios-build-jobs.yml:17
- Confirm that removing the explicit artifact definitions in favor of only passing hybridGlobalization does not affect downstream artifact naming conventions or related processes.
- artifactName: iOSMonoarm64
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Just one comment, apart from that should be good to merge
runtimeFlavor: '' | ||
helixQueues: '' | ||
targetRid: '' | ||
flavor: 'mono' # Currently only used for Android Hello World app |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
should we call it runtimeFlavor
for consistency with other yaml files and scripts?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I initially started out with it being runtimeFlavor but ended up hitting an error in the yaml as it collided with a separately set runtimeFlavor. In my testing, this colliding runtimeFlavor didn't seem to get properly passed through to the build-perf-sample-apps either. I will add a comment about that.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thinking about it some more and looking at some deeper parts of the pipeline, we end up saving what is essentially this value in RuntimeType. Would it make sense to use that as the name here to make a clear connection between the two? At a high level, I think it seems like an alright name substitution but maybe there is some context I am missing.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for documenting this. I am bit apprehensive about the fact that we have flavor
and runtimeFlavor
. Is something that we can fix long term or the cost would be too big?
artifactName: iOSMonoarm64 | ||
archiveExtension: '.tar.gz' | ||
archiveType: tar | ||
tarCompression: gz |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why is this no longer needed?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
All except the artifact name were not being used at all in the app build yaml, so they were just left over from when I picked up the project. For the artifact name, we were using it with the configuration information to generate the names of the artifacts, but since it was only used for iOS and only a handful of places, I decided to remove it with the other options.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM!
hybridGlobalization: False | ||
|
||
steps: | ||
# Build Android sample app | ||
- ${{ if eq(parameters.osGroup, 'android') }}: | ||
- script: make run TARGET_ARCH=arm64 DEPLOY_AND_RUN=false | ||
- script: make run TARGET_ARCH=arm64 DEPLOY_AND_RUN=false RUNTIME_FLAVOR=${{ parameters.flavor }} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do we want to have this parametrised?
I imagined we would have separate steps for Mono and for CoreCLR for the fact that different runtimes will have different configurations, e.g., CoreCLR does not have interpreter, Mono does, CoreCLR has R2R, Mono doesn't, etc.
I suggest splitting it up into separate steps.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't have a strong preference for whether to parameterize this or not. Being that this uses a make file and only builds the app, I think parameterizing this part does not really have an impact on the rest of the flow. I also don't know if the other configurations need specific extra setup. @matouskozak, do you have an idea of whether running make for the other build configurations needs specific extra setup steps?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I believe that the runtime build doesn't change, we just set the makefile variable to enable the configuration. The issue might be that there are separate variables for CoreCLR and Mono as Ivan mentioned...
CoreCLR has R2R, Mono has AOT, Mono has interpreter (CoreCLR not).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That makes sense, I will separate them out between mono and coreclr to help make the additional options for each more clear in the future.
@@ -48,7 +34,7 @@ steps: | |||
displayName: 'Publish binlog' | |||
inputs: | |||
pathtoPublish: $(Build.SourcesDirectory)/src/mono/sample/iOS/msbuild.binlog | |||
artifactName: ${{ parameters.artifactName }} | |||
artifactName: iOSMonoArm64NoLLVMNoStripSymbolsBuildLog |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
As a future task, I think all the namings should be refactored
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do you have an idea or preference for how the names should be refactored? We should have decent leeway to name the artifacts as how we want.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't have a strong preference, but here are couple of things to consider:
- unifying the naming of the apps, e.g., sometimes we call it Sample, sometimes, HelloWorld, but it is actually called HelloiOS
- clean up which variations we care about, for example
HYBRID_GLOBALIZATION
is always true on iOS, we don't need to pass it include it in the naming etc. - have a consistent naming scheme (e.g.,
<app_name>_<target_os>-<target_arch>_<config>_<symbols>_<runtime_flavor>_<runtime_flavor_switch1>_...
) examples:- HelloiOS_ios-arm64_Release_Symbols_Mono_AOT_LLVM_Interpreter
- HelloiOS_ios-arm64_Release_NoSymbols_CoreCLR_R2R
- HelloiOS_ios-arm64_Release_Symbols_NativeAOT
These are just some ideas, it is not mandatory but would simplify maintenance and usage.
Before changing anything (as part of another PR) I suggest we first agree on how exactly we would like the change to look like.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM, thanks!
… HelloWorld app and updated android_scenarios to only run the BDN app tests for Mono RuntimeType. Also cleaned up the sample apps build file, removing the unnecessary parameters. Remove unneeded xharness setup code. Updated per feedback. Removed the noanimation device startup test, added binlog upload to android build steps, and split mono and coreclr build steps. Rename the mobile sample app build parameter from flavor to runtimeType to better match up with it's downstream connections.
dbc1a9c
to
d35f029
Compare
Pushed to fix the merge conflicts. |
Added runs to build the Sample Android app with runtime flavor CoreCLR, added back in the device startup jobs for android, and completed some cleanup both to make things more concise and to make the flow work with our current system.
Test run: https://dev.azure.com/dnceng/internal/_build/results?buildId=2650816&view=results
Associated performance PR: dotnet/performance#4738