Skip to content

Tracking Issue for self-profile minimum viable product #58967

Closed

Description

@michaelwoerister

Goals for the first usable iteration of -Zself-profile are:

  • Make the compiler track query invocations and other important function calls (e.g. LLVM related)
    • This means tracking the query/function name (no query keys, arguments yet)
  • Reduce the overhead of tracking and profile generation as to not be prohibitive
    • This means emitting events in an optimized binary format
  • Write a post-processing tool that generates an aggregated report from the raw event data
    • The aggregated report is a table with one line per query/function and columns for
      • total time spent in the query (in milliseconds)
      • time spent in the query as percentage of total compile time
      • number of query invocations
      • percentage of in-memory cache hits
      • percentage of incremental cache hits
      • total time spent (milliseconds) in loading query results from incremental cache
      • total time spent (milliseconds) blocked on concurrent query invocations
  • Re-enable self-profiling on perf.rlo, which includes
    • running the postprocessing tool to generate the report for each test run
    • adding a new comparison view that compares the test runs of a single benchmark and shows changes per query. This view is reachable by clicking on a benchmark in the regular comparison view (i.e. one can "zoom" into a given benchmark)
  • Document how self-profiling works in the rustc-guide.

Non-Goals are:

  • Supporting self-profiling in 32-bit compilers -- this makes it easier to rely on things like memory mapped files
  • Tracking individual query keys/function arguments

Work packages resulting from this set of goals are:

Possible Problems that might arise are:

  • Profiling overhead keeps being too high - then we need to think about doing separate self-profile runs on perf.rlo

cc @wesleywiser @Mark-Simulacrum

Activity

  1. added
    C-tracking-issueCategory: An issue tracking the progress of sth. like the implementation of an RFC
    A-self-profileArea: Self-profiling feature of the compiler
    on Mar 6, 2019
  2. added
    T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.
    on Mar 6, 2019
  3. mark-i-m commented on Mar 11, 2019

    @mark-i-m
    Contributor

    @michaelwoerister Could you add one more MVP item: document in rustc guide?

  4. michaelwoerister commented on Mar 12, 2019

    @michaelwoerister
    MemberAuthor

    Good call! Thanks for the reminder, @mark-i-m!

  5. added a commit that references this issue on Apr 13, 2019
  6. added a commit that references this issue on Oct 11, 2019
  7. added a commit that references this issue on Oct 14, 2019
  8. wesleywiser commented on Oct 17, 2019

    @wesleywiser
    Member

    I added references to -Zself-profile and measureme to the rustc-guide in rust-lang/rustc-dev-guide#430. I don't think we want to duplicate how-to-use measureme info there so I think that's probably sufficient for now to tick that box.

  9. michaelwoerister commented on Oct 21, 2019

    @michaelwoerister
    MemberAuthor

    Thanks, @wesleywiser!

    I'd like to have some documentation on how event recording is implemented somewhere. The best place for that are the crate docs probably.

  10. wesleywiser commented on Jan 15, 2020

    @wesleywiser
    Member

    @michaelwoerister We've completed all of the above tasks. IMO, we've achieved the MVP. What do you think?

  11. michaelwoerister commented on Jan 16, 2020

    @michaelwoerister
    MemberAuthor

    Yes. There's always "one more thing" that could be done (e.g. adding the incl. time column to perf.rlo) but we have to stop somewhere :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-self-profileArea: Self-profiling feature of the compilerC-tracking-issueCategory: An issue tracking the progress of sth. like the implementation of an RFCT-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions