traced_perf: optional periodic unwinder cache clearing

Preface:
* targeting muiltiple processes at once is normal for this profiler.
* unwindstack cache seems quite necessary in practice (for cpu%), but
  also doesn't actually have an inherent limit (so over time, footprint
  will grow to cover unwinding for all sampled processes).
* for longer traces, it's likely that the working set necessary at
  any given medium-term interval is much lower than the aforementioned
  worst case (so periodic clears could help).
* we want to try using ring buffer traces (with a finalization trigger)
  with stack sampling in the field.

I don't want to change the libunwindstack cache atm, so using it as-is.
Periodic clears are a bit crude, and I've considered alternatives (think
a memory guardrail that does this purging when hit, instead of shutting
down the data source / daemon). But stopping at a periodic option for
now.

Separate from incremental state clears since it's a heavy operation,
which should be performed infrequently. While incremental state clearing
needs to be frequent enough to make any given ring buffer snapshot have
most of the necessary incremental state for decoding.

Thoughts/suggestions welcomed. I'm kinda struggling with building a good
set of knobs for controlling the memory usage when running as an
unattended daemon.

Bug: 144281346
Change-Id: I6342fa636c9ee7eca214a7be4c74c0b187246b0f
10 files changed
tree: 7f964c6c446bc617318ac36f2b71d7bae861cbec
  1. bazel/
  2. build_overrides/
  3. buildtools/
  4. debian/
  5. docs/
  6. gn/
  7. include/
  8. infra/
  9. protos/
  10. src/
  11. test/
  12. tools/
  13. ui/
  14. .clang-format
  15. .gitignore
  16. .gn
  17. .style.yapf
  18. Android.bp
  19. Android.bp.extras
  20. BUILD
  21. BUILD.extras
  22. BUILD.gn
  23. codereview.settings
  24. heapprofd.rc
  25. LICENSE
  26. MODULE_LICENSE_APACHE2
  27. OWNERS
  28. perfetto.rc
  29. PRESUBMIT.py
  30. README.chromium
  31. README.md
  32. TEST_MAPPING
  33. traced_perf.rc
  34. WORKSPACE
README.md

Perfetto - Performance instrumentation and tracing

Perfetto is an open-source project for performance instrumentation and tracing of Linux/Android/Chrome platforms and user-space apps.

See www.perfetto.dev for docs.

Contributing

See /docs/contributing.md for instructions.

The source-of-truth repo is Android's Gerrit. The GitHub repo is a read-only mirror.

Bugs

  • For bugs affecting Android or the tracing internals use the internal bug tracker (go/perfetto-bugs).
  • For bugs affecting Chrome use http://crbug.com, Component:Speed>Tracing label:Perfetto.

Community

You can reach us on our Discord channel. If you prefer using IRC we have an experimental Discord <> IRC bridge synced with #perfetto-dev on Freenode.