Skip to content

Use AsyncContextFrame for storing profiler sampling context #5743

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 8 commits into
base: master
Choose a base branch
from

Conversation

szegedi
Copy link
Contributor

@szegedi szegedi commented May 16, 2025

What does this PR do?

Implements the dd-trace-js bits for using AsyncContextFrame to store the profiler sampling context. The pprof-nodejs bits shipped in DataDog/pprof-nodejs#186.

Motivation

With AsyncContextFrame available in Node 24 by default, we can use it to store the profiler's sampling context (tracing information we want to incorporate into profiler samples.) This then allows us to no longer use the async_hooks.createHook before callbacks. These callbacks will be deprecated in a future version of Node.js so it is vital we migrate away from using them. Enabling the callbacks also triggers deoptimizations, and we need to execute a callback on every single context switch so their use is generally detrimental to performance.

Additional Notes

The integration tests will use the new functionality on Node.js 23 or later. Async context frames are available from Node.js 22.7.0 so we could eventually extend the compatibility downwards, but for that we need pprof-nodejs to also support this mode for versions earlier than 23.

Currently, the PR reverts three commits that disable async context frame (similar to #5726) as this feature only works with async context frames enabled.

Jira: PROF-11771

Copy link

github-actions bot commented May 16, 2025

Overall package size

Self size: 9.63 MB
Deduped: 106.35 MB
No deduping: 106.87 MB

Dependency sizes | name | version | self size | total size | |------|---------|-----------|------------| | @datadog/libdatadog | 0.7.0 | 35.02 MB | 35.02 MB | | @datadog/native-appsec | 8.5.2 | 19.33 MB | 19.34 MB | | @datadog/native-iast-taint-tracking | 4.0.0 | 11.72 MB | 11.73 MB | | @datadog/pprof | 5.9.0 | 9.77 MB | 10.14 MB | | @opentelemetry/core | 1.30.1 | 908.66 kB | 7.16 MB | | protobufjs | 7.5.3 | 2.95 MB | 5.6 MB | | @datadog/wasm-js-rewriter | 4.0.1 | 2.85 MB | 3.58 MB | | @datadog/native-metrics | 3.1.1 | 1.02 MB | 1.43 MB | | @opentelemetry/api | 1.8.0 | 1.21 MB | 1.21 MB | | import-in-the-middle | 1.14.2 | 122.36 kB | 850.93 kB | | source-map | 0.7.4 | 226 kB | 226 kB | | opentracing | 0.14.7 | 194.81 kB | 194.81 kB | | lru-cache | 7.18.3 | 133.92 kB | 133.92 kB | | pprof-format | 2.1.0 | 111.69 kB | 111.69 kB | | @datadog/sketches-js | 2.1.1 | 109.9 kB | 109.9 kB | | lodash.sortby | 4.7.0 | 75.76 kB | 75.76 kB | | ignore | 5.3.2 | 53.63 kB | 53.63 kB | | istanbul-lib-coverage | 3.2.2 | 34.37 kB | 34.37 kB | | rfdc | 1.4.1 | 27.15 kB | 27.15 kB | | @isaacs/ttlcache | 1.4.1 | 25.2 kB | 25.2 kB | | dc-polyfill | 0.1.9 | 25.11 kB | 25.11 kB | | tlhunter-sorted-set | 0.1.0 | 24.94 kB | 24.94 kB | | shell-quote | 1.8.3 | 23.74 kB | 23.74 kB | | limiter | 1.1.5 | 23.17 kB | 23.17 kB | | retry | 0.13.1 | 18.85 kB | 18.85 kB | | semifies | 1.0.0 | 15.84 kB | 15.84 kB | | jest-docblock | 29.7.0 | 8.99 kB | 12.76 kB | | crypto-randomuuid | 1.0.0 | 11.18 kB | 11.18 kB | | ttl-set | 1.0.0 | 4.61 kB | 9.69 kB | | mutexify | 1.4.0 | 5.71 kB | 8.74 kB | | path-to-regexp | 0.1.12 | 6.6 kB | 6.6 kB | | koalas | 1.0.2 | 6.47 kB | 6.47 kB | | module-details-from-path | 1.0.4 | 3.96 kB | 3.96 kB |

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

Copy link

codecov bot commented May 16, 2025

Codecov Report

Attention: Patch coverage is 42.69663% with 51 lines in your changes missing coverage. Please review.

Project coverage is 74.62%. Comparing base (03414f0) to head (23f6b47).

Files with missing lines Patch % Lines
packages/dd-trace/src/profiling/profilers/wall.js 44.59% 41 Missing ⚠️
packages/dd-trace/src/profiling/config.js 35.71% 9 Missing ⚠️
packages/dd-trace/src/profiler.js 0.00% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##           master    #5743      +/-   ##
==========================================
- Coverage   79.56%   74.62%   -4.95%     
==========================================
  Files         476      444      -32     
  Lines       20317    19489     -828     
==========================================
- Hits        16166    14544    -1622     
- Misses       4151     4945     +794     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@datadog-datadog-prod-us1
Copy link

datadog-datadog-prod-us1 bot commented May 16, 2025

Datadog Report

Branch report: szegedi/cped-context
Commit report: 5527182
Test service: dd-trace-js-integration-tests

✅ 0 Failed, 1255 Passed, 0 Skipped, 20m 31.06s Total Time

@szegedi szegedi force-pushed the szegedi/cped-context branch from 49d4b44 to 9c860cd Compare May 20, 2025 15:42
@pr-commenter
Copy link

pr-commenter bot commented May 20, 2025

Benchmarks

Benchmark execution time: 2025-07-01 10:48:47

Comparing candidate commit 23f6b47 in PR branch szegedi/cped-context with baseline commit 03414f0 in branch master.

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

@szegedi szegedi force-pushed the szegedi/cped-context branch 2 times, most recently from a62daa4 to dc3d594 Compare June 11, 2025 13:43
@szegedi szegedi force-pushed the szegedi/cped-context branch 6 times, most recently from c2f6c6b to 92a7d56 Compare July 1, 2025 10:10
@szegedi szegedi changed the base branch from master to bengl/remove-acf-flag July 1, 2025 10:10
@szegedi szegedi force-pushed the szegedi/cped-context branch from 92a7d56 to 23f6b47 Compare July 1, 2025 10:40
@szegedi szegedi changed the base branch from bengl/remove-acf-flag to master July 1, 2025 10:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant