Skip to content

General performance plan one pager #11048

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

Merged
merged 8 commits into from
Jan 14, 2025
Merged

Conversation

MichalPavlik
Copy link
Member

One pager for the next iteration.

@MichalPavlik MichalPavlik changed the title General performance plan one pager. General performance plan one pager Nov 28, 2024
Copy link
Member

@JanKrivanek JanKrivanek left a comment

Choose a reason for hiding this comment

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

Great!

Copy link
Member

@baronfel baronfel left a comment

Choose a reason for hiding this comment

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

Thanks for getting this started. I have a few notes/comments that didn't really make sense in-line anywhere that I could find.

MSBuild Usages

I'd like to see a section outlining the different 'customers' (hosts/users) of MSBuild to help inform the discussion of the impact for each use case. For example, the list might be:

  • VS driving builds via APIs (but not the orchestration side of MSBuild) and doing project evaluations
  • DevKit/Ionide/Draco lang/other VSCode extensions doing evaluations in-memory and driving builds via the CLI
  • Some SDK commands doing evaluations in-memory and builds via the API
  • The Build/Pack/Publish/Clean/etc commands all doing builds via the CLI (and sometimes doing evaluations in-memory immediately before that)
  • CLI based users doing evaluations using the -getProperty/-getItem/-getTargetResults flags

Each of these use cases will have different needs, and a particular solution might help some and not others based on that usage. For example, the MSBuild CLI caching project evaluations wouldn't help VS, Dev Kit, Ionide in-memory evaluations necessarily, but could help all CLI usage, which would partially accrue to Dev Kit/Ionide usage and all CI/CD and user-CLI usage.

Preventing regressions

This is something that adds to the cost of the implementation, but once a perf fix is identified we should invest in guardrails, ideally as 'close' to the MSBuild repo as possible, to prevent regressing that fix. While some scenarios are hard to detect without a full VS insertion, our goal should be to have a mix of unit/integration/benchmarks/perfstar tests that keep validation 'closer' to the dev cycle of MSBuild to give us the best possible response time.

@rainersigwald
Copy link
Member

I'd like to see a section outlining the different 'customers' (hosts/users) of MSBuild to help inform the discussion of the impact for each use case. For example, the list might be:

  • VS driving builds via APIs (but not the orchestration side of MSBuild) and doing project evaluations
  • DevKit/Ionide/Draco lang/other VSCode extensions doing evaluations in-memory and driving builds via the CLI
  • Some SDK commands doing evaluations in-memory and builds via the API
  • The Build/Pack/Publish/Clean/etc commands all doing builds via the CLI (and sometimes doing evaluations in-memory immediately before that)
  • CLI based users doing evaluations using the -getProperty/-getItem/-getTargetResults flags

cough #11002

@baronfel baronfel added this to the .NET 10 milestone Dec 17, 2024
@baronfel baronfel added Epic and removed Epic labels Dec 17, 2024
@MichalPavlik MichalPavlik merged commit a273f56 into main Jan 14, 2025
10 checks passed
@MichalPavlik MichalPavlik deleted the dev/mipavlik/perf-onepager branch January 14, 2025 13:51
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.

6 participants