traced_probes: function_graph recording

Add ability to configure "function_graph" as the active ftrace tracer,
which will emit funcgraph_entry and funcgraph_exit events into the
ringbuffer (alongside whatever other tracepoints have been enabled).
Parse these events, using the kallsyms symboliser to resolve the
function pointers to names. Also add support for specifying which
functions to trace using the "set_ftrace_filter" interface.

Notable limitation: if there is already a "nop" tracer ftrace data
source active, the function graph data source will be rejected since the
kernel will refuse (EBUSY) to change the active tracer if the trace
pipes are already opened (and I'm not willing to refactor traced_probes
to support closing and reopening pipes during an active trace). However
the opposite order (starting a tracepoint-only trace after a funcgraph
one) is ok. Concurrent funcgraph data sources are supported, but they
will all observe the full set of traced functions.

Android: requires a debug build for now.

Based on a contribution from bgrzesik@.

Bug: 249767431
Change-Id: Ic045a26f89ce4b24559d090c68d7c6c7a132c4c3
18 files changed
tree: 30c1c3cb5a0f1cbe5d3f8aedf22e7582aa3e31da
  1. .github/
  2. bazel/
  3. build_overrides/
  4. buildtools/
  5. debian/
  6. docs/
  7. examples/
  8. gn/
  9. include/
  10. infra/
  11. protos/
  12. python/
  13. src/
  14. test/
  15. tools/
  16. ui/
  17. .clang-format
  18. .clang-tidy
  19. .gitattributes
  20. .gitignore
  21. .gn
  22. .style.yapf
  23. Android.bp
  24. Android.bp.extras
  25. BUILD
  26. BUILD.extras
  27. BUILD.gn
  28. CHANGELOG
  29. codereview.settings
  30. DIR_METADATA
  31. heapprofd.rc
  32. LICENSE
  33. meson.build
  34. METADATA
  35. MODULE_LICENSE_APACHE2
  36. OWNERS
  37. perfetto.rc
  38. PerfettoIntegrationTests.xml
  39. PRESUBMIT.py
  40. README.chromium
  41. README.md
  42. TEST_MAPPING
  43. traced_perf.rc
  44. WORKSPACE
README.md

Perfetto - System profiling, app tracing and trace analysis

Perfetto is a production-grade open-source stack for performance instrumentation and trace analysis. It offers services and libraries and for recording system-level and app-level traces, native + java heap profiling, a library for analyzing traces using SQL and a web-based UI to visualize and explore multi-GB traces.

See https://perfetto.dev/docs or the /docs/ directory for documentation.