Skip to content

DSM optimizations - major refactoring to get rid of LinkedHashMap #9151

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

Open
wants to merge 36 commits into
base: master
Choose a base branch
from

Conversation

kr-igor
Copy link
Contributor

@kr-igor kr-igor commented Jul 10, 2025

This change is aimed to reduce DSM overhead by using a lightweight object instead of linked maps.

Introduced DataStreamsTags which are now used instead of LinkedHashMap.
Updated all integrations and tests.

My tests show ~20% throughput increase with a significant latency decrease without increasing CPU load. (left side is v1.51.1, right side is this branch)
Screenshot 2025-07-18 at 1 30 21 PM
Screenshot 2025-07-18 at 1 31 28 PM

@pr-commenter
Copy link

pr-commenter bot commented Jul 11, 2025

Benchmarks

Startup

Parameters

Baseline Candidate
baseline_or_candidate baseline candidate
git_branch master kr-igor/dsm-optimization-v2
git_commit_date 1753099061 1753108644
git_commit_sha b6521fb a836ab6
release_version 1.52.0-SNAPSHOT~b6521fb91a 1.52.0-SNAPSHOT~a836ab6abf
See matching parameters
Baseline Candidate
application insecure-bank insecure-bank
ci_job_date 1753110584 1753110584
ci_job_id 1038903799 1038903799
ci_pipeline_id 71182823 71182823
cpu_model Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz
kernel_version Linux runner-zfyrx7zua-project-304-concurrent-0-c71f0ype 6.8.0-1031-aws #33~22.04.1-Ubuntu SMP Thu Jun 26 14:22:30 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux Linux runner-zfyrx7zua-project-304-concurrent-0-c71f0ype 6.8.0-1031-aws #33~22.04.1-Ubuntu SMP Thu Jun 26 14:22:30 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
module Agent Agent
parent None None

Summary

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

Startup time reports for insecure-bank
gantt
    title insecure-bank - global startup overhead: candidate=1.52.0-SNAPSHOT~a836ab6abf, baseline=1.52.0-SNAPSHOT~b6521fb91a

    dateFormat X
    axisFormat %s
section tracing
Agent [baseline] (1.038 s) : 0, 1038144
Total [baseline] (8.649 s) : 0, 8649309
Agent [candidate] (1.039 s) : 0, 1039366
Total [candidate] (8.6 s) : 0, 8600395
section iast
Agent [baseline] (1.19 s) : 0, 1189864
Total [baseline] (9.328 s) : 0, 9328107
Agent [candidate] (1.18 s) : 0, 1179916
Total [candidate] (9.282 s) : 0, 9281994
Loading
  • baseline results
Module Variant Duration Δ tracing
Agent tracing 1.038 s -
Agent iast 1.19 s 151.719 ms (14.6%)
Total tracing 8.649 s -
Total iast 9.328 s 678.798 ms (7.8%)
  • candidate results
Module Variant Duration Δ tracing
Agent tracing 1.039 s -
Agent iast 1.18 s 140.55 ms (13.5%)
Total tracing 8.6 s -
Total iast 9.282 s 681.598 ms (7.9%)
gantt
    title insecure-bank - break down per module: candidate=1.52.0-SNAPSHOT~a836ab6abf, baseline=1.52.0-SNAPSHOT~b6521fb91a

    dateFormat X
    axisFormat %s
section tracing
crashtracking [baseline] (1.424 ms) : 0, 1424
crashtracking [candidate] (1.432 ms) : 0, 1432
BytebuddyAgent [baseline] (729.279 ms) : 0, 729279
BytebuddyAgent [candidate] (730.396 ms) : 0, 730396
GlobalTracer [baseline] (240.821 ms) : 0, 240821
GlobalTracer [candidate] (241.374 ms) : 0, 241374
AppSec [baseline] (30.666 ms) : 0, 30666
AppSec [candidate] (30.403 ms) : 0, 30403
Debugger [baseline] (6.051 ms) : 0, 6051
Debugger [candidate] (6.014 ms) : 0, 6014
Remote Config [baseline] (660.419 µs) : 0, 660
Remote Config [candidate] (650.194 µs) : 0, 650
Telemetry [baseline] (8.257 ms) : 0, 8257
Telemetry [candidate] (8.194 ms) : 0, 8194
section iast
crashtracking [baseline] (1.47 ms) : 0, 1470
crashtracking [candidate] (1.439 ms) : 0, 1439
BytebuddyAgent [baseline] (860.256 ms) : 0, 860256
BytebuddyAgent [candidate] (852.971 ms) : 0, 852971
GlobalTracer [baseline] (233.603 ms) : 0, 233603
GlobalTracer [candidate] (233.316 ms) : 0, 233316
IAST [baseline] (30.462 ms) : 0, 30462
IAST [candidate] (26.495 ms) : 0, 26495
AppSec [baseline] (27.028 ms) : 0, 27028
AppSec [candidate] (27.927 ms) : 0, 27927
Debugger [baseline] (7.385 ms) : 0, 7385
Debugger [candidate] (8.278 ms) : 0, 8278
Remote Config [baseline] (596.194 µs) : 0, 596
Remote Config [candidate] (575.767 µs) : 0, 576
Telemetry [baseline] (8.009 ms) : 0, 8009
Telemetry [candidate] (7.888 ms) : 0, 7888
Loading
Startup time reports for petclinic
gantt
    title petclinic - global startup overhead: candidate=1.52.0-SNAPSHOT~a836ab6abf, baseline=1.52.0-SNAPSHOT~b6521fb91a

    dateFormat X
    axisFormat %s
section tracing
Agent [baseline] (1.038 s) : 0, 1037852
Total [baseline] (10.678 s) : 0, 10677789
Agent [candidate] (1.039 s) : 0, 1038804
Total [candidate] (10.547 s) : 0, 10547083
section appsec
Agent [baseline] (1.226 s) : 0, 1226021
Total [baseline] (10.814 s) : 0, 10814221
Agent [candidate] (1.216 s) : 0, 1216424
Total [candidate] (10.711 s) : 0, 10711477
section iast
Agent [baseline] (1.171 s) : 0, 1171384
Total [baseline] (10.822 s) : 0, 10821777
Agent [candidate] (1.173 s) : 0, 1173251
Total [candidate] (10.914 s) : 0, 10914003
section profiling
Agent [baseline] (1.182 s) : 0, 1182300
Total [baseline] (10.863 s) : 0, 10863169
Agent [candidate] (1.184 s) : 0, 1183926
Total [candidate] (10.779 s) : 0, 10778525
Loading
  • baseline results
Module Variant Duration Δ tracing
Agent tracing 1.038 s -
Agent appsec 1.226 s 188.169 ms (18.1%)
Agent iast 1.171 s 133.532 ms (12.9%)
Agent profiling 1.182 s 144.448 ms (13.9%)
Total tracing 10.678 s -
Total appsec 10.814 s 136.432 ms (1.3%)
Total iast 10.822 s 143.988 ms (1.3%)
Total profiling 10.863 s 185.38 ms (1.7%)
  • candidate results
Module Variant Duration Δ tracing
Agent tracing 1.039 s -
Agent appsec 1.216 s 177.62 ms (17.1%)
Agent iast 1.173 s 134.447 ms (12.9%)
Agent profiling 1.184 s 145.122 ms (14.0%)
Total tracing 10.547 s -
Total appsec 10.711 s 164.394 ms (1.6%)
Total iast 10.914 s 366.921 ms (3.5%)
Total profiling 10.779 s 231.442 ms (2.2%)
gantt
    title petclinic - break down per module: candidate=1.52.0-SNAPSHOT~a836ab6abf, baseline=1.52.0-SNAPSHOT~b6521fb91a

    dateFormat X
    axisFormat %s
section tracing
crashtracking [baseline] (1.433 ms) : 0, 1433
crashtracking [candidate] (1.428 ms) : 0, 1428
BytebuddyAgent [baseline] (729.295 ms) : 0, 729295
BytebuddyAgent [candidate] (729.968 ms) : 0, 729968
GlobalTracer [baseline] (240.984 ms) : 0, 240984
GlobalTracer [candidate] (241.138 ms) : 0, 241138
AppSec [baseline] (30.369 ms) : 0, 30369
AppSec [candidate] (30.441 ms) : 0, 30441
Debugger [baseline] (5.978 ms) : 0, 5978
Debugger [candidate] (6.0 ms) : 0, 6000
Remote Config [baseline] (643.635 µs) : 0, 644
Remote Config [candidate] (645.435 µs) : 0, 645
Telemetry [baseline] (8.18 ms) : 0, 8180
Telemetry [candidate] (8.256 ms) : 0, 8256
section appsec
crashtracking [baseline] (1.433 ms) : 0, 1433
crashtracking [candidate] (1.429 ms) : 0, 1429
BytebuddyAgent [baseline] (757.849 ms) : 0, 757849
BytebuddyAgent [candidate] (750.796 ms) : 0, 750796
GlobalTracer [baseline] (235.868 ms) : 0, 235868
GlobalTracer [candidate] (234.189 ms) : 0, 234189
IAST [baseline] (23.804 ms) : 0, 23804
IAST [candidate] (23.477 ms) : 0, 23477
AppSec [baseline] (168.298 ms) : 0, 168298
AppSec [candidate] (167.931 ms) : 0, 167931
Debugger [baseline] (8.649 ms) : 0, 8649
Debugger [candidate] (7.079 ms) : 0, 7079
Remote Config [baseline] (622.724 µs) : 0, 623
Remote Config [candidate] (605.101 µs) : 0, 605
Telemetry [baseline] (8.16 ms) : 0, 8160
Telemetry [candidate] (9.586 ms) : 0, 9586
section iast
crashtracking [baseline] (1.425 ms) : 0, 1425
crashtracking [candidate] (1.436 ms) : 0, 1436
BytebuddyAgent [baseline] (845.99 ms) : 0, 845990
BytebuddyAgent [candidate] (847.224 ms) : 0, 847224
GlobalTracer [baseline] (230.947 ms) : 0, 230947
GlobalTracer [candidate] (231.285 ms) : 0, 231285
IAST [baseline] (27.407 ms) : 0, 27407
IAST [candidate] (30.07 ms) : 0, 30070
AppSec [baseline] (28.745 ms) : 0, 28745
AppSec [candidate] (26.484 ms) : 0, 26484
Debugger [baseline] (7.461 ms) : 0, 7461
Debugger [candidate] (7.405 ms) : 0, 7405
Remote Config [baseline] (572.256 µs) : 0, 572
Remote Config [candidate] (580.579 µs) : 0, 581
Telemetry [baseline] (7.875 ms) : 0, 7875
Telemetry [candidate] (7.862 ms) : 0, 7862
section profiling
crashtracking [baseline] (1.395 ms) : 0, 1395
crashtracking [candidate] (1.404 ms) : 0, 1404
BytebuddyAgent [baseline] (759.056 ms) : 0, 759056
BytebuddyAgent [candidate] (759.266 ms) : 0, 759266
GlobalTracer [baseline] (220.033 ms) : 0, 220033
GlobalTracer [candidate] (220.629 ms) : 0, 220629
AppSec [baseline] (30.16 ms) : 0, 30160
AppSec [candidate] (30.246 ms) : 0, 30246
Debugger [baseline] (6.231 ms) : 0, 6231
Debugger [candidate] (6.279 ms) : 0, 6279
Remote Config [baseline] (682.034 µs) : 0, 682
Remote Config [candidate] (653.839 µs) : 0, 654
Telemetry [baseline] (11.705 ms) : 0, 11705
Telemetry [candidate] (14.014 ms) : 0, 14014
ProfilingAgent [baseline] (104.581 ms) : 0, 104581
ProfilingAgent [candidate] (103.141 ms) : 0, 103141
Profiling [baseline] (104.604 ms) : 0, 104604
Profiling [candidate] (103.164 ms) : 0, 103164
Loading

Load

Parameters

Baseline Candidate
baseline_or_candidate baseline candidate
git_branch master kr-igor/dsm-optimization-v2
git_commit_date 1753099061 1753108644
git_commit_sha b6521fb a836ab6
release_version 1.52.0-SNAPSHOT~b6521fb91a 1.52.0-SNAPSHOT~a836ab6abf
See matching parameters
Baseline Candidate
application insecure-bank insecure-bank
ci_job_date 1753110236 1753110236
ci_job_id 1038903802 1038903802
ci_pipeline_id 71182823 71182823
cpu_model Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz
kernel_version Linux runner-zfyrx7zua-project-304-concurrent-0-5dtspizu 6.8.0-1031-aws #33~22.04.1-Ubuntu SMP Thu Jun 26 14:22:30 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux Linux runner-zfyrx7zua-project-304-concurrent-0-5dtspizu 6.8.0-1031-aws #33~22.04.1-Ubuntu SMP Thu Jun 26 14:22:30 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux

Summary

Found 1 performance improvements and 0 performance regressions! Performance is the same for 11 metrics, 12 unstable metrics.

scenario Δ mean http_req_duration Δ mean throughput candidate mean http_req_duration candidate mean throughput baseline mean http_req_duration baseline mean throughput
scenario:load:petclinic:code_origins:high_load better
[-2.019ms; -1.187ms] or [-4.396%; -2.585%]
unstable
[-2.090op/s; +11.986op/s] or [-2.050%; +11.761%]
44.324ms 106.861op/s 45.927ms 101.912op/s
Request duration reports for insecure-bank
gantt
    title insecure-bank - request duration [CI 0.99] : candidate=1.52.0-SNAPSHOT~a836ab6abf, baseline=1.52.0-SNAPSHOT~b6521fb91a
    dateFormat X
    axisFormat %s
section baseline
no_agent (4.442 ms) : 4388, 4496
.   : milestone, 4442,
iast (9.27 ms) : 9120, 9420
.   : milestone, 9270,
iast_FULL (14.047 ms) : 13768, 14326
.   : milestone, 14047,
iast_GLOBAL (10.363 ms) : 10177, 10548
.   : milestone, 10363,
profiling (8.686 ms) : 8543, 8829
.   : milestone, 8686,
tracing (7.603 ms) : 7488, 7717
.   : milestone, 7603,
section candidate
no_agent (4.336 ms) : 4283, 4390
.   : milestone, 4336,
iast (9.379 ms) : 9225, 9532
.   : milestone, 9379,
iast_FULL (14.337 ms) : 14046, 14627
.   : milestone, 14337,
iast_GLOBAL (10.39 ms) : 10210, 10570
.   : milestone, 10390,
profiling (9.004 ms) : 8849, 9159
.   : milestone, 9004,
tracing (7.696 ms) : 7579, 7813
.   : milestone, 7696,
Loading
  • baseline results
Variant Request duration [CI 0.99] Δ no_agent
no_agent 4.442 ms [4.388 ms, 4.496 ms] -
iast 9.27 ms [9.12 ms, 9.42 ms] 4.828 ms (108.7%)
iast_FULL 14.047 ms [13.768 ms, 14.326 ms] 9.605 ms (216.2%)
iast_GLOBAL 10.363 ms [10.177 ms, 10.548 ms] 5.92 ms (133.3%)
profiling 8.686 ms [8.543 ms, 8.829 ms] 4.244 ms (95.5%)
tracing 7.603 ms [7.488 ms, 7.717 ms] 3.16 ms (71.1%)
  • candidate results
Variant Request duration [CI 0.99] Δ no_agent
no_agent 4.336 ms [4.283 ms, 4.39 ms] -
iast 9.379 ms [9.225 ms, 9.532 ms] 5.042 ms (116.3%)
iast_FULL 14.337 ms [14.046 ms, 14.627 ms] 10.0 ms (230.6%)
iast_GLOBAL 10.39 ms [10.21 ms, 10.57 ms] 6.053 ms (139.6%)
profiling 9.004 ms [8.849 ms, 9.159 ms] 4.667 ms (107.6%)
tracing 7.696 ms [7.579 ms, 7.813 ms] 3.36 ms (77.5%)
Request duration reports for petclinic
gantt
    title petclinic - request duration [CI 0.99] : candidate=1.52.0-SNAPSHOT~a836ab6abf, baseline=1.52.0-SNAPSHOT~b6521fb91a
    dateFormat X
    axisFormat %s
section baseline
no_agent (37.273 ms) : 36974, 37572
.   : milestone, 37273,
appsec (47.243 ms) : 46817, 47669
.   : milestone, 47243,
code_origins (45.927 ms) : 45527, 46327
.   : milestone, 45927,
iast (44.567 ms) : 44185, 44950
.   : milestone, 44567,
profiling (48.407 ms) : 47964, 48849
.   : milestone, 48407,
tracing (44.978 ms) : 44597, 45358
.   : milestone, 44978,
section candidate
no_agent (36.789 ms) : 36490, 37089
.   : milestone, 36789,
appsec (48.05 ms) : 47614, 48486
.   : milestone, 48050,
code_origins (44.324 ms) : 43951, 44696
.   : milestone, 44324,
iast (44.459 ms) : 44079, 44839
.   : milestone, 44459,
profiling (47.579 ms) : 47156, 48003
.   : milestone, 47579,
tracing (45.276 ms) : 44900, 45652
.   : milestone, 45276,
Loading
  • baseline results
Variant Request duration [CI 0.99] Δ no_agent
no_agent 37.273 ms [36.974 ms, 37.572 ms] -
appsec 47.243 ms [46.817 ms, 47.669 ms] 9.97 ms (26.7%)
code_origins 45.927 ms [45.527 ms, 46.327 ms] 8.654 ms (23.2%)
iast 44.567 ms [44.185 ms, 44.95 ms] 7.294 ms (19.6%)
profiling 48.407 ms [47.964 ms, 48.849 ms] 11.134 ms (29.9%)
tracing 44.978 ms [44.597 ms, 45.358 ms] 7.705 ms (20.7%)
  • candidate results
Variant Request duration [CI 0.99] Δ no_agent
no_agent 36.789 ms [36.49 ms, 37.089 ms] -
appsec 48.05 ms [47.614 ms, 48.486 ms] 11.261 ms (30.6%)
code_origins 44.324 ms [43.951 ms, 44.696 ms] 7.535 ms (20.5%)
iast 44.459 ms [44.079 ms, 44.839 ms] 7.67 ms (20.8%)
profiling 47.579 ms [47.156 ms, 48.003 ms] 10.79 ms (29.3%)
tracing 45.276 ms [44.9 ms, 45.652 ms] 8.487 ms (23.1%)

Dacapo

Parameters

Baseline Candidate
baseline_or_candidate baseline candidate
git_branch master kr-igor/dsm-optimization-v2
git_commit_date 1753099061 1753108644
git_commit_sha b6521fb a836ab6
release_version 1.52.0-SNAPSHOT~b6521fb91a 1.52.0-SNAPSHOT~a836ab6abf
See matching parameters
Baseline Candidate
application biojava biojava
ci_job_date 1753110731 1753110731
ci_job_id 1038903805 1038903805
ci_pipeline_id 71182823 71182823
cpu_model Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz
kernel_version Linux runner-zfyrx7zua-project-304-concurrent-0-u1obkkw3 6.8.0-1031-aws #33~22.04.1-Ubuntu SMP Thu Jun 26 14:22:30 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux Linux runner-zfyrx7zua-project-304-concurrent-0-u1obkkw3 6.8.0-1031-aws #33~22.04.1-Ubuntu SMP Thu Jun 26 14:22:30 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux

Summary

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

Execution time for biojava
gantt
    title biojava - execution time [CI 0.99] : candidate=1.52.0-SNAPSHOT~a836ab6abf, baseline=1.52.0-SNAPSHOT~b6521fb91a
    dateFormat X
    axisFormat %s
section baseline
no_agent (14.987 s) : 14987000, 14987000
.   : milestone, 14987000,
appsec (14.845 s) : 14845000, 14845000
.   : milestone, 14845000,
iast (18.455 s) : 18455000, 18455000
.   : milestone, 18455000,
iast_GLOBAL (17.943 s) : 17943000, 17943000
.   : milestone, 17943000,
profiling (15.408 s) : 15408000, 15408000
.   : milestone, 15408000,
tracing (14.821 s) : 14821000, 14821000
.   : milestone, 14821000,
section candidate
no_agent (14.911 s) : 14911000, 14911000
.   : milestone, 14911000,
appsec (14.941 s) : 14941000, 14941000
.   : milestone, 14941000,
iast (18.264 s) : 18264000, 18264000
.   : milestone, 18264000,
iast_GLOBAL (17.878 s) : 17878000, 17878000
.   : milestone, 17878000,
profiling (15.519 s) : 15519000, 15519000
.   : milestone, 15519000,
tracing (14.979 s) : 14979000, 14979000
.   : milestone, 14979000,
Loading
  • baseline results
Variant Execution Time [CI 0.99] Δ no_agent
no_agent 14.987 s [14.987 s, 14.987 s] -
appsec 14.845 s [14.845 s, 14.845 s] -142.0 ms (-0.9%)
iast 18.455 s [18.455 s, 18.455 s] 3.468 s (23.1%)
iast_GLOBAL 17.943 s [17.943 s, 17.943 s] 2.956 s (19.7%)
profiling 15.408 s [15.408 s, 15.408 s] 421.0 ms (2.8%)
tracing 14.821 s [14.821 s, 14.821 s] -166.0 ms (-1.1%)
  • candidate results
Variant Execution Time [CI 0.99] Δ no_agent
no_agent 14.911 s [14.911 s, 14.911 s] -
appsec 14.941 s [14.941 s, 14.941 s] 30.0 ms (0.2%)
iast 18.264 s [18.264 s, 18.264 s] 3.353 s (22.5%)
iast_GLOBAL 17.878 s [17.878 s, 17.878 s] 2.967 s (19.9%)
profiling 15.519 s [15.519 s, 15.519 s] 608.0 ms (4.1%)
tracing 14.979 s [14.979 s, 14.979 s] 68.0 ms (0.5%)
Execution time for tomcat
gantt
    title tomcat - execution time [CI 0.99] : candidate=1.52.0-SNAPSHOT~a836ab6abf, baseline=1.52.0-SNAPSHOT~b6521fb91a
    dateFormat X
    axisFormat %s
section baseline
no_agent (1.481 ms) : 1470, 1493
.   : milestone, 1481,
appsec (3.649 ms) : 3431, 3868
.   : milestone, 3649,
iast (2.194 ms) : 2131, 2257
.   : milestone, 2194,
iast_GLOBAL (2.259 ms) : 2196, 2323
.   : milestone, 2259,
profiling (2.054 ms) : 2003, 2104
.   : milestone, 2054,
tracing (2.037 ms) : 1987, 2086
.   : milestone, 2037,
section candidate
no_agent (1.483 ms) : 1471, 1495
.   : milestone, 1483,
appsec (3.687 ms) : 3470, 3904
.   : milestone, 3687,
iast (2.203 ms) : 2140, 2266
.   : milestone, 2203,
iast_GLOBAL (2.242 ms) : 2180, 2305
.   : milestone, 2242,
profiling (2.046 ms) : 1996, 2096
.   : milestone, 2046,
tracing (2.021 ms) : 1973, 2070
.   : milestone, 2021,
Loading
  • baseline results
Variant Execution Time [CI 0.99] Δ no_agent
no_agent 1.481 ms [1.47 ms, 1.493 ms] -
appsec 3.649 ms [3.431 ms, 3.868 ms] 2.168 ms (146.3%)
iast 2.194 ms [2.131 ms, 2.257 ms] 712.353 µs (48.1%)
iast_GLOBAL 2.259 ms [2.196 ms, 2.323 ms] 777.713 µs (52.5%)
profiling 2.054 ms [2.003 ms, 2.104 ms] 572.076 µs (38.6%)
tracing 2.037 ms [1.987 ms, 2.086 ms] 555.087 µs (37.5%)
  • candidate results
Variant Execution Time [CI 0.99] Δ no_agent
no_agent 1.483 ms [1.471 ms, 1.495 ms] -
appsec 3.687 ms [3.47 ms, 3.904 ms] 2.204 ms (148.6%)
iast 2.203 ms [2.14 ms, 2.266 ms] 720.374 µs (48.6%)
iast_GLOBAL 2.242 ms [2.18 ms, 2.305 ms] 759.299 µs (51.2%)
profiling 2.046 ms [1.996 ms, 2.096 ms] 563.227 µs (38.0%)
tracing 2.021 ms [1.973 ms, 2.07 ms] 538.294 µs (36.3%)

@pr-commenter
Copy link

pr-commenter bot commented Jul 11, 2025

Kafka / producer-benchmark

Parameters

Baseline Candidate
baseline_or_candidate baseline candidate
git_branch master kr-igor/dsm-optimization-v2
git_commit_date 1753099061 1753108644
git_commit_sha b6521fb a836ab6
See matching parameters
Baseline Candidate
ci_job_date 1753109826 1753109826
ci_job_id 1038903815 1038903815
ci_pipeline_id 71182823 71182823
cpu_model Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz
jdkVersion 11.0.25 11.0.25
jmhVersion 1.36 1.36
jvm /usr/lib/jvm/java-11-openjdk-amd64/bin/java /usr/lib/jvm/java-11-openjdk-amd64/bin/java
jvmArgs -Dfile.encoding=UTF-8 -Djava.io.tmpdir=/go/src/github.com/DataDog/apm-reliability/dd-trace-java/platform/src/producer-benchmark/build/tmp/jmh -Duser.country=US -Duser.language=en -Duser.variant -Dfile.encoding=UTF-8 -Djava.io.tmpdir=/go/src/github.com/DataDog/apm-reliability/dd-trace-java/platform/src/producer-benchmark/build/tmp/jmh -Duser.country=US -Duser.language=en -Duser.variant
vmName OpenJDK 64-Bit Server VM OpenJDK 64-Bit Server VM
vmVersion 11.0.25+9-post-Ubuntu-1ubuntu122.04 11.0.25+9-post-Ubuntu-1ubuntu122.04

Summary

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

See unchanged results
scenario Δ mean throughput
scenario:not-instrumented/KafkaProduceBenchmark.benchProduce same
scenario:only-tracing-dsm-disabled-benchmarks/KafkaProduceBenchmark.benchProduce same
scenario:only-tracing-dsm-enabled-benchmarks/KafkaProduceBenchmark.benchProduce same

@kr-igor kr-igor marked this pull request as ready for review July 11, 2025 22:53
@kr-igor kr-igor requested review from a team as code owners July 11, 2025 22:53
@kr-igor kr-igor requested a review from smola July 11, 2025 22:53
Copy link
Contributor

github-actions bot commented Jul 11, 2025

Hi! 👋 Thanks for your pull request! 🎉

To help us review it, please make sure to:

  • Add at least one type, and one component or instrumentation label to the pull request

If you need help, please check our contributing guidelines.

@pr-commenter
Copy link

pr-commenter bot commented Jul 11, 2025

Kafka / consumer-benchmark

Parameters

Baseline Candidate
baseline_or_candidate baseline candidate
git_branch master kr-igor/dsm-optimization-v2
git_commit_date 1753099061 1753108644
git_commit_sha b6521fb a836ab6
See matching parameters
Baseline Candidate
ci_job_date 1753109858 1753109858
ci_job_id 1038903819 1038903819
ci_pipeline_id 71182823 71182823
cpu_model Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz
jdkVersion 11.0.25 11.0.25
jmhVersion 1.36 1.36
jvm /usr/lib/jvm/java-11-openjdk-amd64/bin/java /usr/lib/jvm/java-11-openjdk-amd64/bin/java
jvmArgs -Dfile.encoding=UTF-8 -Djava.io.tmpdir=/go/src/github.com/DataDog/apm-reliability/dd-trace-java/platform/src/consumer-benchmark/build/tmp/jmh -Duser.country=US -Duser.language=en -Duser.variant -Dfile.encoding=UTF-8 -Djava.io.tmpdir=/go/src/github.com/DataDog/apm-reliability/dd-trace-java/platform/src/consumer-benchmark/build/tmp/jmh -Duser.country=US -Duser.language=en -Duser.variant
vmName OpenJDK 64-Bit Server VM OpenJDK 64-Bit Server VM
vmVersion 11.0.25+9-post-Ubuntu-1ubuntu122.04 11.0.25+9-post-Ubuntu-1ubuntu122.04

Summary

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

See unchanged results
scenario Δ mean throughput
scenario:not-instrumented/KafkaConsumerBenchmark.benchConsume same
scenario:only-tracing-dsm-disabled-benchmarks/KafkaConsumerBenchmark.benchConsume same
scenario:only-tracing-dsm-enabled-benchmarks/KafkaConsumerBenchmark.benchConsume same

result.put(DIRECTION_TAG, DIRECTION_OUT);
result.put(TYPE_TAG, "grpc");
return DataStreamsContext.fromTags(result);
return DataStreamsContext.fromTags(
Copy link
Contributor

@dougqh dougqh Jul 14, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would avoid builder idioms in the critical path. That's still extra allocation that we really don't need.


public DataStreamsTags(DataStreamsTagsBuilder builder) {
this.builder = builder;
this.size =
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is introducing a capturing lambda. I think a regular loop would probably be better here.

Comment on lines 93 to 102
processor.process(BUS_TAG, this.builder.bus);
count += 1;
}

if (this.builder.direction == Direction.Inbound) {
count += 1;
processor.process(DIRECTION_TAG, DIRECTION_IN);
} else if (this.builder.direction == Direction.Outbound) {
count += 1;
processor.process(DIRECTION_TAG, DIRECTION_OUT);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggestion: Just a matter of taste, but probably count++; Would be a better option (here and other similar places)?

Comment on lines 286 to 299
+ ","
+ ", kafkaClusterId='"
+ this.builder.kafkaClusterId
+ ","
+ ", partition='"
+ this.builder.partition
+ ","
+ ", hash="
+ hash
+ ","
+ ", aggregationHash="
+ aggregationHash
+ ","
+ ", size="
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this code will produce String with TWO commas. Is that expected?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, you are right... AI autosuggest :D

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice :), just FYI IDEA has toString() method generation too,

result.put(TYPE_TAG, "grpc");
return result;
private static final DataStreamsTags createServerPathwaySortedTags() {
return new DataStreamsTagsBuilder()
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we can probably still keep these pretty clean without needing a builder. I've put suggestions throughout...

  • createGrpcInbound() <-- bonus, that's cacheable

DataStreamsContext dsmContext = DataStreamsContext.fromTags(getTags(eventBusName));
DataStreamsTags tags =
new DataStreamsTagsBuilder()
.withDirection(DataStreamsTags.Direction.Outbound)
Copy link
Contributor

@dougqh dougqh Jul 14, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

createBusOutbound(eventBusName)

sortedTags.put(TagsProcessor.TOPIC_TAG, bucket);
sortedTags.put(TagsProcessor.TYPE_TAG, "s3");
DataStreamsTags tags =
new DataStreamsTagsBuilder()
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

createS3Outbound(bucket, key)

sortedTags.put(TYPE_TAG, "kinesis");
DataStreamsTags tags =
new DataStreamsTagsBuilder()
.withType("kinesis")
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

createKinesisInbound(streamArn)


return sortedTags;
private DataStreamsTags getTags(String snsTopicName) {
return new DataStreamsTagsBuilder()
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

createSnsOutbound(snsTopicName)

Copy link
Contributor

@PerfectSlayer PerfectSlayer left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you're in refactoring mode, can you have a look (made in another PR if it's easier) to complete the context refactoring?

In short, PathwayContext should not be stored in span data model (DDSpanContext).
Instead, it must be stored with Context as DataStreamsContext and AgentSpan.
You may create a second Context entry if the DataStreamsContext holds different kind of data (or have a different lifecycle) than what PathwayContext should hold.

I already done some refactoring (adding DataStreamsContext, creating a dedicated DSM propagator) but it miss the last step of moving away PathwayContext from span.
Would that be something you could have a look at? Would you like us to pair on this task? The end goal would be to decouple Tracing from DSM. So you can save even more resources.

@@ -89,7 +85,9 @@ private String getTraceContextToInject(
// Inject context
datadog.context.Context context = span;
if (traceConfig().isDataStreamsEnabled()) {
DataStreamsContext dsmContext = DataStreamsContext.fromTags(getTags(eventBusName));
DataStreamsTags tags =
DataStreamsTags.createWithBus("bus", DataStreamsTags.Direction.Outbound, eventBusName);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why pass "bus" as argument to withBus helper? Is there a case where the value isn't "bus"?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, the type is always bus, no need to pass it here.

private long completeHash;
private int nonNullSize;

// hash tags
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These should probably be final
Right now, strictly speaking this probably isn't thread safe

kafkaClusterId != null ? KAFKA_CLUSTER_ID_TAG + ":" + kafkaClusterId : null;
this.partition = partition != null ? PARTITION_TAG + ":" + partition : null;

// hashable tags are 0-4
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice, that should unroll and inline nicely

@kr-igor
Copy link
Contributor Author

kr-igor commented Jul 16, 2025

If you're in refactoring mode, can you have a look (made in another PR if it's easier) to complete the context refactoring?

In short, PathwayContext should not be stored in span data model (DDSpanContext). Instead, it must be stored with Context as DataStreamsContext and AgentSpan. You may create a second Context entry if the DataStreamsContext holds different kind of data (or have a different lifecycle) than what PathwayContext should hold.

I already done some refactoring (adding DataStreamsContext, creating a dedicated DSM propagator) but it miss the last step of moving away PathwayContext from span. Would that be something you could have a look at? Would you like us to pair on this task? The end goal would be to decouple Tracing from DSM. So you can save even more resources.

I'm definitely for refactoring the context propagation logic, but I don't want to bundle the changes into a single PR.

@kr-igor kr-igor requested a review from a team as a code owner July 16, 2025 16:25
@kr-igor kr-igor added type: enhancement Enhancements and improvements comp: data streams Data Streams Monitoring labels Jul 16, 2025
Copy link
Contributor

@dougqh dougqh left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's a very nice improvement. Looks good to me.

@kr-igor kr-igor enabled auto-merge (squash) July 21, 2025 16:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
comp: data streams Data Streams Monitoring type: enhancement Enhancements and improvements
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants