Skip to content
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

Support JDK-21 virtual thread executor #6789

Merged
merged 6 commits into from Mar 11, 2024
Merged

Conversation

am312
Copy link
Contributor

@am312 am312 commented Mar 8, 2024

What Does This Do

Adds support for JDK-21 Virtual Threads and JDK-21 compilation.

Motivation

Previously, when enabling JDK-21 virtual threads, spans created by virtual threads would not be joined correctly to an existing trace.

NOTE

Adds TaskRunnerInstrumentation to java-concurrent.
Required Gradle upgrade 8.3 -> 8.4+ for JDK-21 compile support.
Tests run like ./gradlew :dd-java-agent:instrumentation:java-concurrent:latestDepTest -PtestJvm=21

Jira ticket: APMJAVA-1240

@pr-commenter
Copy link

pr-commenter bot commented Mar 8, 2024

Benchmarks

Startup

Parameters

Baseline Candidate
baseline_or_candidate baseline candidate
git_branch master andrew.munn/vthread-new
git_commit_date 1709909278 1709971887
git_commit_sha e9c489f 56844c2
release_version 1.32.0-SNAPSHOT~e9c489fd8c 1.32.0-SNAPSHOT~56844c2a3f
See matching parameters
Baseline Candidate
application insecure-bank insecure-bank
ci_job_date 1709975112 1709975112
ci_job_id 455727891 455727891
ci_pipeline_id 29845620 29845620
cpu_model Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz
module Agent Agent
parent None None
variant iast iast

Summary

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

Startup time reports for petclinic
gantt
    title petclinic - global startup overhead: candidate=1.32.0-SNAPSHOT~56844c2a3f, baseline=1.32.0-SNAPSHOT~e9c489fd8c

    dateFormat X
    axisFormat %s
section tracing
Agent [baseline] (1.083 s) : 0, 1083470
Total [baseline] (9.189 s) : 0, 9189436
Agent [candidate] (1.094 s) : 0, 1093938
Total [candidate] (9.25 s) : 0, 9249813
section appsec
Agent [baseline] (1.209 s) : 0, 1209024
Total [baseline] (9.33 s) : 0, 9329881
Agent [candidate] (1.207 s) : 0, 1207341
Total [candidate] (9.311 s) : 0, 9310861
section iast
Agent [baseline] (1.208 s) : 0, 1207965
Total [baseline] (9.358 s) : 0, 9358135
Agent [candidate] (1.21 s) : 0, 1209599
Total [candidate] (9.353 s) : 0, 9352507
section profiling
Agent [baseline] (1.281 s) : 0, 1281358
Total [baseline] (9.424 s) : 0, 9424443
Agent [candidate] (1.274 s) : 0, 1274253
Total [candidate] (9.33 s) : 0, 9330392
  • baseline results
Module Variant Duration Δ tracing
Agent tracing 1.083 s -
Agent appsec 1.209 s 125.554 ms (11.6%)
Agent iast 1.208 s 124.495 ms (11.5%)
Agent profiling 1.281 s 197.888 ms (18.3%)
Total tracing 9.189 s -
Total appsec 9.33 s 140.445 ms (1.5%)
Total iast 9.358 s 168.7 ms (1.8%)
Total profiling 9.424 s 235.007 ms (2.6%)
  • candidate results
Module Variant Duration Δ tracing
Agent tracing 1.094 s -
Agent appsec 1.207 s 113.403 ms (10.4%)
Agent iast 1.21 s 115.661 ms (10.6%)
Agent profiling 1.274 s 180.315 ms (16.5%)
Total tracing 9.25 s -
Total appsec 9.311 s 61.047 ms (0.7%)
Total iast 9.353 s 102.694 ms (1.1%)
Total profiling 9.33 s 80.579 ms (0.9%)
gantt
    title petclinic - break down per module: candidate=1.32.0-SNAPSHOT~56844c2a3f, baseline=1.32.0-SNAPSHOT~e9c489fd8c

    dateFormat X
    axisFormat %s
section tracing
BytebuddyAgent [baseline] (697.554 ms) : 0, 697554
BytebuddyAgent [candidate] (704.028 ms) : 0, 704028
GlobalTracer [baseline] (292.255 ms) : 0, 292255
GlobalTracer [candidate] (295.654 ms) : 0, 295654
AppSec [baseline] (50.892 ms) : 0, 50892
AppSec [candidate] (51.015 ms) : 0, 51015
Remote Config [baseline] (739.075 µs) : 0, 739
Remote Config [candidate] (736.17 µs) : 0, 736
Telemetry [baseline] (7.635 ms) : 0, 7635
Telemetry [candidate] (7.808 ms) : 0, 7808
section appsec
BytebuddyAgent [baseline] (700.662 ms) : 0, 700662
BytebuddyAgent [candidate] (698.645 ms) : 0, 698645
GlobalTracer [baseline] (292.104 ms) : 0, 292104
GlobalTracer [candidate] (293.029 ms) : 0, 293029
AppSec [baseline] (156.415 ms) : 0, 156415
AppSec [candidate] (155.914 ms) : 0, 155914
IAST [baseline] (17.842 ms) : 0, 17842
IAST [candidate] (17.845 ms) : 0, 17845
Remote Config [baseline] (617.848 µs) : 0, 618
Remote Config [candidate] (607.849 µs) : 0, 608
Telemetry [baseline] (6.887 ms) : 0, 6887
Telemetry [candidate] (6.881 ms) : 0, 6881
section iast
BytebuddyAgent [baseline] (801.471 ms) : 0, 801471
BytebuddyAgent [candidate] (802.319 ms) : 0, 802319
GlobalTracer [baseline] (288.328 ms) : 0, 288328
GlobalTracer [candidate] (289.244 ms) : 0, 289244
AppSec [baseline] (51.807 ms) : 0, 51807
AppSec [candidate] (51.759 ms) : 0, 51759
IAST [baseline] (23.261 ms) : 0, 23261
IAST [candidate] (24.557 ms) : 0, 24557
Remote Config [baseline] (591.975 µs) : 0, 592
Remote Config [candidate] (583.107 µs) : 0, 583
Telemetry [baseline] (8.188 ms) : 0, 8188
Telemetry [candidate] (6.738 ms) : 0, 6738
section profiling
BytebuddyAgent [baseline] (693.137 ms) : 0, 693137
BytebuddyAgent [candidate] (689.817 ms) : 0, 689817
GlobalTracer [baseline] (374.837 ms) : 0, 374837
GlobalTracer [candidate] (373.953 ms) : 0, 373953
AppSec [baseline] (52.885 ms) : 0, 52885
AppSec [candidate] (52.801 ms) : 0, 52801
Remote Config [baseline] (764.408 µs) : 0, 764
Remote Config [candidate] (742.238 µs) : 0, 742
Telemetry [baseline] (7.419 ms) : 0, 7419
Telemetry [candidate] (7.42 ms) : 0, 7420
ProfilingAgent [baseline] (95.614 ms) : 0, 95614
ProfilingAgent [candidate] (93.494 ms) : 0, 93494
Profiling [baseline] (95.638 ms) : 0, 95638
Profiling [candidate] (93.518 ms) : 0, 93518
Startup time reports for insecure-bank
gantt
    title insecure-bank - global startup overhead: candidate=1.32.0-SNAPSHOT~56844c2a3f, baseline=1.32.0-SNAPSHOT~e9c489fd8c

    dateFormat X
    axisFormat %s
section tracing
Agent [baseline] (1.082 s) : 0, 1081511
Total [baseline] (8.563 s) : 0, 8562916
Agent [candidate] (1.084 s) : 0, 1084024
Total [candidate] (8.579 s) : 0, 8579344
section iast
Agent [baseline] (1.208 s) : 0, 1207872
Total [baseline] (9.082 s) : 0, 9081694
Agent [candidate] (1.215 s) : 0, 1215055
Total [candidate] (9.072 s) : 0, 9071628
section iast_HARDCODED_SECRET_DISABLED
Agent [baseline] (1.207 s) : 0, 1207379
Total [baseline] (9.025 s) : 0, 9024585
Agent [candidate] (1.209 s) : 0, 1209266
Total [candidate] (9.054 s) : 0, 9054196
section iast_TELEMETRY_OFF
Agent [baseline] (1.197 s) : 0, 1197155
Total [baseline] (9.028 s) : 0, 9027647
Agent [candidate] (1.21 s) : 0, 1209763
Total [candidate] (9.078 s) : 0, 9077748
  • baseline results
Module Variant Duration Δ tracing
Agent tracing 1.082 s -
Agent iast 1.208 s 126.361 ms (11.7%)
Agent iast_HARDCODED_SECRET_DISABLED 1.207 s 125.868 ms (11.6%)
Agent iast_TELEMETRY_OFF 1.197 s 115.644 ms (10.7%)
Total tracing 8.563 s -
Total iast 9.082 s 518.778 ms (6.1%)
Total iast_HARDCODED_SECRET_DISABLED 9.025 s 461.669 ms (5.4%)
Total iast_TELEMETRY_OFF 9.028 s 464.731 ms (5.4%)
  • candidate results
Module Variant Duration Δ tracing
Agent tracing 1.084 s -
Agent iast 1.215 s 131.031 ms (12.1%)
Agent iast_HARDCODED_SECRET_DISABLED 1.209 s 125.242 ms (11.6%)
Agent iast_TELEMETRY_OFF 1.21 s 125.739 ms (11.6%)
Total tracing 8.579 s -
Total iast 9.072 s 492.285 ms (5.7%)
Total iast_HARDCODED_SECRET_DISABLED 9.054 s 474.852 ms (5.5%)
Total iast_TELEMETRY_OFF 9.078 s 498.404 ms (5.8%)
gantt
    title insecure-bank - break down per module: candidate=1.32.0-SNAPSHOT~56844c2a3f, baseline=1.32.0-SNAPSHOT~e9c489fd8c

    dateFormat X
    axisFormat %s
section tracing
BytebuddyAgent [baseline] (697.203 ms) : 0, 697203
BytebuddyAgent [candidate] (697.759 ms) : 0, 697759
GlobalTracer [baseline] (290.694 ms) : 0, 290694
GlobalTracer [candidate] (292.426 ms) : 0, 292426
AppSec [baseline] (50.688 ms) : 0, 50688
AppSec [candidate] (50.774 ms) : 0, 50774
Remote Config [baseline] (724.813 µs) : 0, 725
Remote Config [candidate] (731.572 µs) : 0, 732
Telemetry [baseline] (7.813 ms) : 0, 7813
Telemetry [candidate] (7.917 ms) : 0, 7917
section iast
BytebuddyAgent [baseline] (801.064 ms) : 0, 801064
BytebuddyAgent [candidate] (806.599 ms) : 0, 806599
GlobalTracer [baseline] (288.446 ms) : 0, 288446
GlobalTracer [candidate] (289.925 ms) : 0, 289925
AppSec [baseline] (51.521 ms) : 0, 51521
AppSec [candidate] (53.455 ms) : 0, 53455
IAST [baseline] (23.471 ms) : 0, 23471
IAST [candidate] (21.52 ms) : 0, 21520
Remote Config [baseline] (600.793 µs) : 0, 601
Remote Config [candidate] (595.557 µs) : 0, 596
Telemetry [baseline] (8.323 ms) : 0, 8323
Telemetry [candidate] (8.261 ms) : 0, 8261
section iast_HARDCODED_SECRET_DISABLED
BytebuddyAgent [baseline] (801.53 ms) : 0, 801530
BytebuddyAgent [candidate] (801.728 ms) : 0, 801728
GlobalTracer [baseline] (289.049 ms) : 0, 289049
GlobalTracer [candidate] (289.63 ms) : 0, 289630
AppSec [baseline] (51.847 ms) : 0, 51847
AppSec [candidate] (52.647 ms) : 0, 52647
IAST [baseline] (23.219 ms) : 0, 23219
IAST [candidate] (22.998 ms) : 0, 22998
Remote Config [baseline] (585.888 µs) : 0, 586
Remote Config [candidate] (580.334 µs) : 0, 580
Telemetry [baseline] (6.74 ms) : 0, 6740
Telemetry [candidate] (7.351 ms) : 0, 7351
section iast_TELEMETRY_OFF
BytebuddyAgent [baseline] (791.785 ms) : 0, 791785
BytebuddyAgent [candidate] (800.838 ms) : 0, 800838
GlobalTracer [baseline] (288.374 ms) : 0, 288374
GlobalTracer [candidate] (292.305 ms) : 0, 292305
AppSec [baseline] (53.313 ms) : 0, 53313
AppSec [candidate] (53.835 ms) : 0, 53835
IAST [baseline] (21.666 ms) : 0, 21666
IAST [candidate] (21.04 ms) : 0, 21040
Remote Config [baseline] (600.399 µs) : 0, 600
Remote Config [candidate] (591.307 µs) : 0, 591
Telemetry [baseline] (7.29 ms) : 0, 7290
Telemetry [candidate] (6.601 ms) : 0, 6601

Load

Request duration reports for petclinic
gantt
    title petclinic - request duration [CI 0.99] : candidate=1.32.0-SNAPSHOT~56844c2a3f, baseline=1.32.0-SNAPSHOT~e9c489fd8c
    dateFormat X
    axisFormat %s
section baseline
no_agent (1.351 ms) : 1333, 1370
.   : milestone, 1351,
appsec (1.805 ms) : 1782, 1828
.   : milestone, 1805,
iast (1.519 ms) : 1496, 1543
.   : milestone, 1519,
profiling (1.527 ms) : 1503, 1551
.   : milestone, 1527,
tracing (1.518 ms) : 1495, 1541
.   : milestone, 1518,
section candidate
no_agent (1.368 ms) : 1349, 1387
.   : milestone, 1368,
appsec (1.775 ms) : 1752, 1799
.   : milestone, 1775,
iast (1.519 ms) : 1495, 1542
.   : milestone, 1519,
profiling (1.527 ms) : 1503, 1550
.   : milestone, 1527,
tracing (1.509 ms) : 1486, 1532
.   : milestone, 1509,
  • baseline results
Variant Request duration [CI 0.99] Δ no_agent
no_agent 1.351 ms [1.333 ms, 1.37 ms] -
appsec 1.805 ms [1.782 ms, 1.828 ms] 453.418 µs (33.5%)
iast 1.519 ms [1.496 ms, 1.543 ms] 167.891 µs (12.4%)
profiling 1.527 ms [1.503 ms, 1.551 ms] 175.682 µs (13.0%)
tracing 1.518 ms [1.495 ms, 1.541 ms] 166.653 µs (12.3%)
  • candidate results
Variant Request duration [CI 0.99] Δ no_agent
no_agent 1.368 ms [1.349 ms, 1.387 ms] -
appsec 1.775 ms [1.752 ms, 1.799 ms] 407.17 µs (29.8%)
iast 1.519 ms [1.495 ms, 1.542 ms] 150.399 µs (11.0%)
profiling 1.527 ms [1.503 ms, 1.55 ms] 158.305 µs (11.6%)
tracing 1.509 ms [1.486 ms, 1.532 ms] 140.431 µs (10.3%)
Request duration reports for insecure-bank
gantt
    title insecure-bank - request duration [CI 0.99] : candidate=1.32.0-SNAPSHOT~56844c2a3f, baseline=1.32.0-SNAPSHOT~e9c489fd8c
    dateFormat X
    axisFormat %s
section baseline
no_agent (366.284 µs) : 346, 386
.   : milestone, 366,
iast (472.797 µs) : 453, 493
.   : milestone, 473,
iast_FULL (536.786 µs) : 516, 557
.   : milestone, 537,
iast_GLOBAL (503.895 µs) : 482, 526
.   : milestone, 504,
iast_HARDCODED_SECRET_DISABLED (476.815 µs) : 456, 498
.   : milestone, 477,
iast_INACTIVE (460.091 µs) : 439, 481
.   : milestone, 460,
iast_TELEMETRY_OFF (470.982 µs) : 450, 492
.   : milestone, 471,
tracing (448.9 µs) : 429, 469
.   : milestone, 449,
section candidate
no_agent (370.7 µs) : 350, 391
.   : milestone, 371,
iast (471.41 µs) : 451, 492
.   : milestone, 471,
iast_FULL (541.795 µs) : 521, 562
.   : milestone, 542,
iast_GLOBAL (498.538 µs) : 477, 520
.   : milestone, 499,
iast_HARDCODED_SECRET_DISABLED (479.555 µs) : 459, 500
.   : milestone, 480,
iast_INACTIVE (450.458 µs) : 430, 471
.   : milestone, 450,
iast_TELEMETRY_OFF (468.48 µs) : 448, 489
.   : milestone, 468,
tracing (448.952 µs) : 428, 470
.   : milestone, 449,
  • baseline results
Variant Request duration [CI 0.99] Δ no_agent
no_agent 366.284 µs [346.29 µs, 386.278 µs] -
iast 472.797 µs [452.635 µs, 492.96 µs] 106.513 µs (29.1%)
iast_FULL 536.786 µs [516.3 µs, 557.272 µs] 170.502 µs (46.5%)
iast_GLOBAL 503.895 µs [481.876 µs, 525.914 µs] 137.611 µs (37.6%)
iast_HARDCODED_SECRET_DISABLED 476.815 µs [456.098 µs, 497.532 µs] 110.531 µs (30.2%)
iast_INACTIVE 460.091 µs [438.759 µs, 481.423 µs] 93.807 µs (25.6%)
iast_TELEMETRY_OFF 470.982 µs [450.412 µs, 491.551 µs] 104.698 µs (28.6%)
tracing 448.9 µs [428.865 µs, 468.935 µs] 82.616 µs (22.6%)
  • candidate results
Variant Request duration [CI 0.99] Δ no_agent
no_agent 370.7 µs [349.936 µs, 391.463 µs] -
iast 471.41 µs [451.088 µs, 491.733 µs] 100.711 µs (27.2%)
iast_FULL 541.795 µs [521.185 µs, 562.405 µs] 171.095 µs (46.2%)
iast_GLOBAL 498.538 µs [477.419 µs, 519.656 µs] 127.838 µs (34.5%)
iast_HARDCODED_SECRET_DISABLED 479.555 µs [458.706 µs, 500.404 µs] 108.856 µs (29.4%)
iast_INACTIVE 450.458 µs [429.777 µs, 471.139 µs] 79.759 µs (21.5%)
iast_TELEMETRY_OFF 468.48 µs [448.214 µs, 488.746 µs] 97.78 µs (26.4%)
tracing 448.952 µs [427.887 µs, 470.018 µs] 78.253 µs (21.1%)

@am312 am312 changed the title create TaskRunnerInstrumentation Support JDK-21 virtual thread executor Mar 8, 2024
@am312 am312 marked this pull request as ready for review March 9, 2024 09:14
@am312 am312 requested a review from a team as a code owner March 9, 2024 09:14
@am312 am312 requested review from ygree and removed request for ygree March 9, 2024 09:14
@richardstartin
Copy link
Member

TaskRunner is used to propagate context when there isn't a future available. This is better than attempting to use the application's Runnable because the TaskRunner's lifecycle is known to be contained within the executor, whereas instrumentation of the executor would be wrong if the same Runnable instance were reused. If the task is rejected, the RejectedExecutionHandler instrumentation already takes care of cancelling the continuation. When there is a future, no new instrumentation is required because ThreadBoundFuture extends FutureTask which means the RunnableFutureInstrumentation and RejectedExecutionHandlerInstrumentation take effect.

@am312 am312 merged commit df7e2a1 into master Mar 11, 2024
79 checks passed
@am312 am312 deleted the andrew.munn/vthread-new branch March 11, 2024 09:22
@github-actions github-actions bot added this to the 1.32.0 milestone Mar 11, 2024
@PerfectSlayer PerfectSlayer added the inst: others All other instrumentations label Apr 4, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
inst: others All other instrumentations type: feature request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants