dd-trace-js icon indicating copy to clipboard operation
dd-trace-js copied to clipboard

PROF-9250: Enable timeline and CPU profiling by default

Open szegedi opened this issue 11 months ago • 2 comments

What does this PR do?

  • Makes both timeline and CPU profiling on by default.
  • Introduces a non-experimental env var for CPU profiling.
  • Explicitly disables timeline events gathering if CPU or Wall profiling are not enabled.
  • When timeline is on, it'll emit an empty events profile even if there are no events, for consistency.
  • At the same time, event profiles will have no string table entries for event types that didn't occur.

Motivation

Timeline and CPU profiling have now been extensively tested, and it is considered safe to have them on by default. While adjusting tests for the on-by-default behavior, I also noticed some edge cases in the behavior that I fixed, namely:

  • it was possible to gather timeline events without a wall/CPU profiler, but we don't want to support that
  • when there were no timeline events, no profile was emitted. That made tests flaky (as a random occurrence of a GC event during a test would switch between no profiler/some profile.) It also makes it more consistent, so even looking at an empty uploaded profile tells us that the collection works, there were just no events in an idle process.
  • Finally, I deferred string table additions for various event types to the first time they occur, making both the empty profile smaller, and potentially profiles that don't have all event types.

Security

Datadog employees:

  • [ ] If this PR touches code that signs or publishes builds or packages, or handles credentials of any kind, I've requested a review from @DataDog/security-design-and-guidance.
  • [x] This PR doesn't touch any of that.

szegedi avatar Mar 07 '24 17:03 szegedi

Overall package size

Self size: 6.26 MB Deduped: 60.76 MB No deduping: 61.04 MB

Dependency sizes

name version self size total size
@datadog/native-iast-taint-tracking 1.7.0 16.71 MB 16.72 MB
@datadog/native-appsec 7.1.1 14.39 MB 14.4 MB
@datadog/pprof 5.2.0 8.84 MB 9.21 MB
protobufjs 7.2.5 2.77 MB 6.56 MB
@datadog/native-iast-rewriter 2.3.0 2.15 MB 2.24 MB
@opentelemetry/core 1.14.0 872.87 kB 1.47 MB
@datadog/native-metrics 2.0.0 898.77 kB 1.3 MB
@opentelemetry/api 1.4.1 780.32 kB 780.32 kB
import-in-the-middle 1.7.3 67.62 kB 731.01 kB
msgpack-lite 0.1.26 201.16 kB 281.59 kB
opentracing 0.14.7 194.81 kB 194.81 kB
semver 7.5.4 93.4 kB 123.8 kB
pprof-format 2.1.0 111.69 kB 111.69 kB
@datadog/sketches-js 2.1.0 109.9 kB 109.9 kB
lodash.sortby 4.7.0 75.76 kB 75.76 kB
lru-cache 7.14.0 74.95 kB 74.95 kB
ipaddr.js 2.1.0 60.23 kB 60.23 kB
ignore 5.2.4 51.22 kB 51.22 kB
int64-buffer 0.1.10 49.18 kB 49.18 kB
shell-quote 1.8.1 44.96 kB 44.96 kB
istanbul-lib-coverage 3.2.0 29.34 kB 29.34 kB
tlhunter-sorted-set 0.1.0 24.94 kB 24.94 kB
limiter 1.1.5 23.17 kB 23.17 kB
dc-polyfill 0.1.4 23.1 kB 23.1 kB
retry 0.13.1 18.85 kB 18.85 kB
node-abort-controller 3.1.1 16.89 kB 16.89 kB
jest-docblock 29.7.0 8.99 kB 12.76 kB
crypto-randomuuid 1.0.0 11.18 kB 11.18 kB
path-to-regexp 0.1.7 6.78 kB 6.78 kB
koalas 1.0.2 6.47 kB 6.47 kB
methods 1.1.2 5.29 kB 5.29 kB
module-details-from-path 1.0.3 4.47 kB 4.47 kB

🤖 This report was automatically generated by heaviest-objects-in-the-universe

github-actions[bot] avatar Mar 07 '24 17:03 github-actions[bot]

Codecov Report

Attention: Patch coverage is 20.00000% with 8 lines in your changes are missing coverage. Please review.

Project coverage is 85.31%. Comparing base (3094779) to head (80c63c5).

:exclamation: Current head 80c63c5 differs from pull request most recent head 5e1275c. Consider uploading reports for the commit 5e1275c to get more accurate results

Files Patch % Lines
...ackages/dd-trace/src/profiling/profilers/events.js 0.00% 8 Missing :warning:
Additional details and impacted files
@@            Coverage Diff             @@
##           master    #4149      +/-   ##
==========================================
+ Coverage   85.23%   85.31%   +0.07%     
==========================================
  Files         247      247              
  Lines       10961    10940      -21     
  Branches       33       33              
==========================================
- Hits         9343     9333      -10     
+ Misses       1618     1607      -11     

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.

codecov[bot] avatar Mar 07 '24 17:03 codecov[bot]

Some profiler tests are still failing on Windows, probably because timeline is not available here.

nsavoire avatar Mar 12 '24 12:03 nsavoire

Rebased to fix merge conflicts; 4 of the previous 10 commits were now empty 'cause they were incorporated into master earlier; we're left with 6.

szegedi avatar Apr 08 '24 12:04 szegedi

Benchmarks

Benchmark execution time: 2024-04-08 12:35:44

Comparing candidate commit 5e1275c62fd7b9030838f1f1059ab200ad68a658 in PR branch szegedi/enable-timeline-and-cpu with baseline commit 309477928f19c003afb38242bf7bddcbccc73894 in branch master.

Found 0 performance improvements and 0 performance regressions! Performance is the same for 261 metrics, 5 unstable metrics.

pr-commenter[bot] avatar Apr 08 '24 12:04 pr-commenter[bot]