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

Improve publishing performance (by a lot) #5096

Merged
merged 2 commits into from
Apr 7, 2020

Conversation

mmitche
Copy link
Member

@mmitche mmitche commented Mar 19, 2020

Improve the publishing performance by doing a number of optimizations

  • Pass all manifests to the publish task at once and read them in bulk. The publishing machines have two cores, so repos with lots of manifests (e.g. core-sdk and aspnetcore) were seeing less benefit from parallelism in the publish task
  • Increase the max upload parallelism to 16
  • Change the overall publish process to use async/await much more heavily.
  • Remove publishes of symbol packages to azdo feeds for public non-stable builds. It's possible this could be extended to stable/internal builds with some additional work. These still go to blob storage.
  • Remove publishes of installers/checksums to the static azdo blob storage (dotnet-core) if publishing is already sending these the installer/checksum locations (dotnetcli, etc.)
  • Remove publishes to dotnet-core for packages.

After these changes, the future critical path publishing time (runtime, aspnetcore, sdk, and core-sdk) goes from ~130 mins to ~22 mins. About 40-50% of that appears to be prep time for publishing (downloading artifacts, etc.)

  • Runtime (99th) - 35 mins to 11 mins
  • aspnetcore - 50m to 4m
  • Sdk - 5.75m to 2m
  • core-sdk - 33m to 4.5m

Improve the publishing performance by doing a number of optimizations
- Pass all manifests to the publish task at once and read them in bulk. The publishing machines have two cores, so repos with lots of manifests (e.g. core-sdk and aspnetcore) were seeing less benefit from parallelism in the publish task
- Increase the max upload parallelism to 16
- Change the overall publish process to use async/await much more heavily.
- Remove publishes of symbol packages to azdo feeds for public non-stable builds. It's possible this could be extended to stable/internal builds with some additional work. These still go to blob storage.
- Remove publishes of installers/checksums to the static azdo blob storage (dotnet-core) if publishing is already sending these the installer/checksum locations (dotnetcli, etc.)
- Remove publishes to dotnet-core for packages.

After these changes, the future critical path publishing time (runtime, aspnetcore, sdk, and core-sdk) goes from ~130 mins to ~22 mins. About 40-50% of that appears to be prep time for publishing (downloading artifacts, etc.)
- Runtime (99th) - 35 mins to 11 mins
- aspnetcore - 50m to 4m
- Sdk - 5.75m to 2m
- core-sdk - 33m to 4.5m
@mmitche mmitche requested review from JohnTortugo and riarenas March 19, 2020 16:59
@mmitche
Copy link
Member Author

mmitche commented Mar 19, 2020

For the dotnet-core publishing removal here, I'm working my way through places that get arcade's eng - latest to ensure they are referencing the right feeds.

@mmitche
Copy link
Member Author

mmitche commented Mar 19, 2020

/fyi @jaredpar @Pilchie @dsplaisted

@Pilchie
Copy link
Member

Pilchie commented Mar 19, 2020

Remove publishes of symbol packages to azdo feeds for public non-stable builds. It's possible this could be extended to stable/internal builds with some additional work. These still go to blob storage.

Does this significantly impact developer workflow for developers wanting to get symbols for a repo that is a dependency to them.

@mmitche
Copy link
Member Author

mmitche commented Mar 19, 2020

Remove publishes of symbol packages to azdo feeds for public non-stable builds. It's possible this could be extended to stable/internal builds with some additional work. These still go to blob storage.

Does this significantly impact developer workflow for developers wanting to get symbols for a repo that is a dependency to them.

I don't think so. The symbols are still published, just to blob storage instead of a package feed. I'm not sure anyone has used those anyway. I can check and see what the number of downloads of those packages is.

@mmitche
Copy link
Member Author

mmitche commented Mar 19, 2020

@Pilchie I checked the download numbers on the symbol feed. It looks like it's only ever been used as a source for the gather-drop tool.

@Pilchie
Copy link
Member

Pilchie commented Mar 19, 2020

Thanks! :shipit:

Copy link
Contributor

@JohnTortugo JohnTortugo left a comment

Choose a reason for hiding this comment

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

Thanks Matt

@mmitche mmitche merged commit 213d71a into dotnet:master Apr 7, 2020
@mmitche mmitche deleted the when-the-world-ends branch April 7, 2020 21:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants