dd-trace-js
dd-trace-js copied to clipboard
PROF-9250: Enable timeline and CPU profiling by default
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.
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
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.
Some profiler tests are still failing on Windows, probably because timeline is not available here.
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.
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.