Skip to content

Conversation

@amarziali
Copy link
Contributor

@amarziali amarziali commented Nov 3, 2025

What Does This Do

This PR introduces a set of queue implementations in order to replace the JCTools-based queues, eliminating direct usage of sun.misc.Unsafe and providing full compatibility with Java 9+ runtimes through the VarHandle API.

The goal is to achieve similar high-performance concurrent queue behavior as JCTools while using supported, standard Java mechanisms.

A new Queues factory class is introduced to dynamically select the optimal queue implementation based on the Java runtime environment:

  • On Java 9 and newer, the factory instantiates the new VarHandle-based queues
  • On Java 1.8, it falls back to the existing JCTools-based queues to maintain backward compatibility and performance consistency.

Introduced Classes Summary

Class Pattern Description
SpscArrayQueueVarHandle Single-Producer / Single-Consumer Lock-free SPSC queue using VarHandles with acquire/release semantics. When possible, eliminates redundant volatile reads via cached head and tail.
SpmcArrayQueueVarHandle Single-Producer / Multiple-Consumer Lock-free SPMC queue supporting concurrent consumers using atomic head updates (CAS). Uses consumerLimit caching to reduce volatile contention.
MpscArrayQueueVarHandle<E> Multiple-Producer / Single-Consumer Lock-free MPSC queue where producers claim slots via CAS on TAIL_HANDLE. Maintains a producerLimit to minimize volatile head reads.
MpscBlockingConsumerArrayQueueVarHandle<E> Multiple-Producer / Single-Consumer (Blocking) Extends MPSC with blocking consumer support. Uses CONSUMER_THREAD_HANDLE to park/unpark the waiting consumer efficiently.

Memory Padding

All queue state fields (head, tail, cached limits, etc.) are cache-line padded to prevent false sharing between producers and consumers.
This ensures that frequently accessed hot fields do not reside on the same cache line across threads, minimizing cache invalidations and improving throughput under contention.

Memory Fence Semantics

Memory fences were explicitly chosen for each access type to minimize volatile overhead while maintaining correct visibility guarantees:

  • setRelease / getAcquire for publishing and consuming elements — provides correct inter-thread ordering without full barriers.
  • setOpaque / getOpaque for relaxed head/tail updates — avoids unnecessary synchronization costs where ordering is not required.
  • getVolatile only used when full memory fences are really required (e.g. refreshing limits to ensure visibility when the queue might be full or empty).

Queue Benchmark Results (ops/us)

Note: SPSC benchmark shows contentions on slow path (i.e. queue is full/queue is empty). This should less frequently happen in our case. Increasing the queue size (hence reducing the probability that's full) shows good performances.

MPSCBlockingConsumer Queue Benchmark (ops/us)

Implementation Capacity Total Consume Produce
JCTools 1024 41,149 30,661 10,488
VarHandle 1024 258,074 246,683 11,391
JCTools 65536 32,413 24,680 7,733
VarHandle 65536 224,982 217,498 7,485

MPSC Queue Benchmark (ops/us)

Implementation Capacity Total Consume Produce
JCTools 1024 41,784 31,070 10,715
VarHandle 1024 238,609 222,383 16,226
JCTools 65536 39,589 32,370 7,219
VarHandle 65536 262,729 250,627 12,102

SPSC Queue Benchmark (ops/us)

Implementation Capacity Total Consume Produce
JCTools 1024 259,418 129,694 129,724
VarHandle 1024 101,007 72,542 28,465
JCTools 65536 537,111 268,577 268,534
VarHandle 65536 353,161 191,188 161,973

Takeaways:

  • MPSC queues can be replaced with a VarHandle equivalent. In some cases, the new implementation shows even better performances.
  • jctools still outperforms in SPSC queues. Perhaps the VarHandle implementation might be optimised further.

Room for future improvements

In high-throughput scenarios where multiple producers compete for queue space, contention on the CAS operation can become a bottleneck.

Idea to mitigate this, when the queue is likely not full, a getAndAdd operation can be used instead of a CAS to claim slots since it will never fail. This optimization allows multiple producers to advance the tail index with reduced atomic contention. However, when the queue is nearly full, the getAndAdd cannot be reliably done hence the classic CAS loop (slow path) can be used instead.

Motivation

Additional Notes

Contributor Checklist

Jira ticket: [PROJ-IDENT]

@datadog-datadog-prod-us1
Copy link
Contributor

datadog-datadog-prod-us1 bot commented Nov 3, 2025

🎯 Code Coverage
Patch Coverage: 91.30%
Total Coverage: 59.61% (+0.00%)

View detailed report

This comment will be updated automatically if new data arrives.
🔗 Commit SHA: b2850b3 | Docs | Datadog PR Page | Was this helpful? Give us feedback!

@pr-commenter
Copy link

pr-commenter bot commented Nov 3, 2025

Debugger benchmarks

Parameters

Baseline Candidate
baseline_or_candidate baseline candidate
ci_job_date 1762350659 1762351004
end_time 2025-11-05T13:52:20 2025-11-05T13:58:05
git_branch master andrea.marziali/remove-jctools-queues
git_commit_sha 8db72c0 a880c67
start_time 2025-11-05T13:51:00 2025-11-05T13:56:45
See matching parameters
Baseline Candidate
ci_job_id 1217030429 1217030429
ci_pipeline_id 81317491 81317491
cpu_model Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz
git_commit_date 1762349967 1762349967

Summary

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

See unchanged results
scenario Δ mean agg_http_req_duration_min Δ mean agg_http_req_duration_p50 Δ mean agg_http_req_duration_p75 Δ mean agg_http_req_duration_p99 Δ mean throughput
scenario:noprobe unstable
[-16.952µs; +19.877µs] or [-6.074%; +7.122%]
unstable
[-27.156µs; +31.309µs] or [-8.553%; +9.861%]
unstable
[-36.996µs; +42.158µs] or [-11.187%; +12.748%]
unstable
[-142.099µs; +61.104µs] or [-13.747%; +5.911%]
same
scenario:basic same same same unstable
[-226.500µs; -8.890µs] or [-25.732%; -1.010%]
same
scenario:loop unsure
[+0.257µs; +4.484µs] or [+0.003%; +0.051%]
unsure
[-7.436µs; -0.629µs] or [-0.083%; -0.007%]
unsure
[-8.505µs; -0.543µs] or [-0.094%; -0.006%]
same same
Request duration reports for reports
gantt
    title reports - request duration [CI 0.99] : candidate=None, baseline=None
    dateFormat X
    axisFormat %s
section baseline
noprobe (317.508 µs) : 291, 344
.   : milestone, 318,
basic (294.053 µs) : 287, 301
.   : milestone, 294,
loop (8.959 ms) : 8956, 8963
.   : milestone, 8959,
section candidate
noprobe (319.585 µs) : 290, 349
.   : milestone, 320,
basic (293.196 µs) : 286, 300
.   : milestone, 293,
loop (8.955 ms) : 8952, 8958
.   : milestone, 8955,
Loading
  • baseline results
Scenario Request median duration [CI 0.99]
noprobe 317.508 µs [291.339 µs, 343.677 µs]
basic 294.053 µs [286.681 µs, 301.425 µs]
loop 8.959 ms [8.956 ms, 8.963 ms]
  • candidate results
Scenario Request median duration [CI 0.99]
noprobe 319.585 µs [290.19 µs, 348.98 µs]
basic 293.196 µs [286.34 µs, 300.053 µs]
loop 8.955 ms [8.952 ms, 8.958 ms]

@pr-commenter
Copy link

pr-commenter bot commented Nov 3, 2025

Benchmarks

Startup

Parameters

Baseline Candidate
baseline_or_candidate baseline candidate
git_branch master andrea.marziali/remove-jctools-queues
git_commit_date 1762777415 1762791589
git_commit_sha c6e7fca b2850b3
release_version 1.56.0-SNAPSHOT~c6e7fcaefe 1.56.0-SNAPSHOT~b2850b3848
See matching parameters
Baseline Candidate
application insecure-bank insecure-bank
ci_job_date 1762793551 1762793551
ci_job_id 1225765044 1225765044
ci_pipeline_id 81831570 81831570
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-3ncj40zs 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-3ncj40zs 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 3 performance improvements and 0 performance regressions! Performance is the same for 50 metrics, 12 unstable metrics.

scenario Δ mean execution_time candidate mean execution_time baseline mean execution_time
scenario:startup:petclinic:appsec:GlobalTracer better
[-7.177ms; -4.947ms] or [-3.020%; -2.081%]
231.602ms 237.665ms
scenario:startup:petclinic:iast:Flare Poller better
[-437.616µs; -147.343µs] or [-10.370%; -3.491%]
3.928ms 4.220ms
scenario:startup:petclinic:profiling:GlobalTracer better
[-10.750ms; -5.813ms] or [-4.804%; -2.598%]
215.488ms 223.769ms
Startup time reports for petclinic
gantt
    title petclinic - global startup overhead: candidate=1.56.0-SNAPSHOT~b2850b3848, baseline=1.56.0-SNAPSHOT~c6e7fcaefe

    dateFormat X
    axisFormat %s
section tracing
Agent [baseline] (1.048 s) : 0, 1047668
Total [baseline] (10.799 s) : 0, 10799349
Agent [candidate] (1.042 s) : 0, 1042436
Total [candidate] (10.731 s) : 0, 10731401
section appsec
Agent [baseline] (1.223 s) : 0, 1222923
Total [baseline] (10.874 s) : 0, 10873828
Agent [candidate] (1.215 s) : 0, 1214951
Total [candidate] (10.913 s) : 0, 10913190
section iast
Agent [baseline] (1.188 s) : 0, 1187933
Total [baseline] (11.162 s) : 0, 11161894
Agent [candidate] (1.181 s) : 0, 1181369
Total [candidate] (11.172 s) : 0, 11171639
section profiling
Agent [baseline] (1.203 s) : 0, 1202748
Total [baseline] (10.864 s) : 0, 10863584
Agent [candidate] (1.186 s) : 0, 1185665
Total [candidate] (10.843 s) : 0, 10843404
Loading
  • baseline results
Module Variant Duration Δ tracing
Agent tracing 1.048 s -
Agent appsec 1.223 s 175.256 ms (16.7%)
Agent iast 1.188 s 140.266 ms (13.4%)
Agent profiling 1.203 s 155.081 ms (14.8%)
Total tracing 10.799 s -
Total appsec 10.874 s 74.478 ms (0.7%)
Total iast 11.162 s 362.545 ms (3.4%)
Total profiling 10.864 s 64.235 ms (0.6%)
  • candidate results
Module Variant Duration Δ tracing
Agent tracing 1.042 s -
Agent appsec 1.215 s 172.515 ms (16.5%)
Agent iast 1.181 s 138.933 ms (13.3%)
Agent profiling 1.186 s 143.23 ms (13.7%)
Total tracing 10.731 s -
Total appsec 10.913 s 181.789 ms (1.7%)
Total iast 11.172 s 440.238 ms (4.1%)
Total profiling 10.843 s 112.003 ms (1.0%)
gantt
    title petclinic - break down per module: candidate=1.56.0-SNAPSHOT~b2850b3848, baseline=1.56.0-SNAPSHOT~c6e7fcaefe

    dateFormat X
    axisFormat %s
section tracing
crashtracking [baseline] (1.458 ms) : 0, 1458
crashtracking [candidate] (1.447 ms) : 0, 1447
BytebuddyAgent [baseline] (705.046 ms) : 0, 705046
BytebuddyAgent [candidate] (705.249 ms) : 0, 705249
GlobalTracer [baseline] (246.136 ms) : 0, 246136
GlobalTracer [candidate] (240.149 ms) : 0, 240149
AppSec [baseline] (32.341 ms) : 0, 32341
AppSec [candidate] (32.686 ms) : 0, 32686
Debugger [baseline] (6.416 ms) : 0, 6416
Debugger [candidate] (6.341 ms) : 0, 6341
Remote Config [baseline] (712.105 µs) : 0, 712
Remote Config [candidate] (693.261 µs) : 0, 693
Telemetry [baseline] (15.168 ms) : 0, 15168
Telemetry [candidate] (10.282 ms) : 0, 10282
Flare Poller [baseline] (5.745 ms) : 0, 5745
Flare Poller [candidate] (10.869 ms) : 0, 10869
section appsec
crashtracking [baseline] (1.448 ms) : 0, 1448
crashtracking [candidate] (1.452 ms) : 0, 1452
BytebuddyAgent [baseline] (729.334 ms) : 0, 729334
BytebuddyAgent [candidate] (728.516 ms) : 0, 728516
GlobalTracer [baseline] (237.665 ms) : 0, 237665
GlobalTracer [candidate] (231.602 ms) : 0, 231602
IAST [baseline] (24.899 ms) : 0, 24899
IAST [candidate] (24.78 ms) : 0, 24780
AppSec [baseline] (175.365 ms) : 0, 175365
AppSec [candidate] (174.025 ms) : 0, 174025
Debugger [baseline] (6.043 ms) : 0, 6043
Debugger [candidate] (6.092 ms) : 0, 6092
Remote Config [baseline] (653.456 µs) : 0, 653
Remote Config [candidate] (646.716 µs) : 0, 647
Telemetry [baseline] (8.565 ms) : 0, 8565
Telemetry [candidate] (8.852 ms) : 0, 8852
Flare Poller [baseline] (4.014 ms) : 0, 4014
Flare Poller [candidate] (4.188 ms) : 0, 4188
section iast
crashtracking [baseline] (1.468 ms) : 0, 1468
crashtracking [candidate] (1.455 ms) : 0, 1455
BytebuddyAgent [baseline] (834.403 ms) : 0, 834403
BytebuddyAgent [candidate] (834.469 ms) : 0, 834469
GlobalTracer [baseline] (236.001 ms) : 0, 236001
GlobalTracer [candidate] (229.967 ms) : 0, 229967
IAST [baseline] (32.52 ms) : 0, 32520
IAST [candidate] (34.469 ms) : 0, 34469
AppSec [baseline] (29.091 ms) : 0, 29091
AppSec [candidate] (27.246 ms) : 0, 27246
Debugger [baseline] (6.103 ms) : 0, 6103
Debugger [candidate] (6.034 ms) : 0, 6034
Remote Config [baseline] (610.055 µs) : 0, 610
Remote Config [candidate] (593.606 µs) : 0, 594
Telemetry [baseline] (8.574 ms) : 0, 8574
Telemetry [candidate] (8.39 ms) : 0, 8390
Flare Poller [baseline] (4.22 ms) : 0, 4220
Flare Poller [candidate] (3.928 ms) : 0, 3928
section profiling
crashtracking [baseline] (1.464 ms) : 0, 1464
crashtracking [candidate] (1.436 ms) : 0, 1436
BytebuddyAgent [baseline] (735.476 ms) : 0, 735476
BytebuddyAgent [candidate] (728.853 ms) : 0, 728853
GlobalTracer [baseline] (223.769 ms) : 0, 223769
GlobalTracer [candidate] (215.488 ms) : 0, 215488
AppSec [baseline] (32.526 ms) : 0, 32526
AppSec [candidate] (32.06 ms) : 0, 32060
Debugger [baseline] (7.599 ms) : 0, 7599
Debugger [candidate] (6.475 ms) : 0, 6475
Remote Config [baseline] (1.51 ms) : 0, 1510
Remote Config [candidate] (683.477 µs) : 0, 683
Telemetry [baseline] (14.397 ms) : 0, 14397
Telemetry [candidate] (15.137 ms) : 0, 15137
Flare Poller [baseline] (4.178 ms) : 0, 4178
Flare Poller [candidate] (4.991 ms) : 0, 4991
ProfilingAgent [baseline] (111.532 ms) : 0, 111532
ProfilingAgent [candidate] (110.947 ms) : 0, 110947
Profiling [baseline] (112.197 ms) : 0, 112197
Profiling [candidate] (111.561 ms) : 0, 111561
Loading
Startup time reports for insecure-bank
gantt
    title insecure-bank - global startup overhead: candidate=1.56.0-SNAPSHOT~b2850b3848, baseline=1.56.0-SNAPSHOT~c6e7fcaefe

    dateFormat X
    axisFormat %s
section tracing
Agent [baseline] (1.054 s) : 0, 1053823
Total [baseline] (8.68 s) : 0, 8680381
Agent [candidate] (1.046 s) : 0, 1046036
Total [candidate] (8.659 s) : 0, 8659406
section iast
Agent [baseline] (1.187 s) : 0, 1186520
Total [baseline] (9.295 s) : 0, 9294769
Agent [candidate] (1.174 s) : 0, 1173972
Total [candidate] (9.278 s) : 0, 9278266
Loading
  • baseline results
Module Variant Duration Δ tracing
Agent tracing 1.054 s -
Agent iast 1.187 s 132.697 ms (12.6%)
Total tracing 8.68 s -
Total iast 9.295 s 614.388 ms (7.1%)
  • candidate results
Module Variant Duration Δ tracing
Agent tracing 1.046 s -
Agent iast 1.174 s 127.937 ms (12.2%)
Total tracing 8.659 s -
Total iast 9.278 s 618.86 ms (7.1%)
gantt
    title insecure-bank - break down per module: candidate=1.56.0-SNAPSHOT~b2850b3848, baseline=1.56.0-SNAPSHOT~c6e7fcaefe

    dateFormat X
    axisFormat %s
section tracing
crashtracking [baseline] (1.458 ms) : 0, 1458
crashtracking [candidate] (1.467 ms) : 0, 1467
BytebuddyAgent [baseline] (709.384 ms) : 0, 709384
BytebuddyAgent [candidate] (708.628 ms) : 0, 708628
GlobalTracer [baseline] (247.308 ms) : 0, 247308
GlobalTracer [candidate] (240.629 ms) : 0, 240629
AppSec [baseline] (32.578 ms) : 0, 32578
AppSec [candidate] (32.687 ms) : 0, 32687
Debugger [baseline] (6.48 ms) : 0, 6480
Debugger [candidate] (6.276 ms) : 0, 6276
Remote Config [baseline] (710.109 µs) : 0, 710
Remote Config [candidate] (692.307 µs) : 0, 692
Telemetry [baseline] (14.424 ms) : 0, 14424
Telemetry [candidate] (10.844 ms) : 0, 10844
Flare Poller [baseline] (6.63 ms) : 0, 6630
Flare Poller [candidate] (10.025 ms) : 0, 10025
section iast
crashtracking [baseline] (1.459 ms) : 0, 1459
crashtracking [candidate] (1.457 ms) : 0, 1457
BytebuddyAgent [baseline] (834.052 ms) : 0, 834052
BytebuddyAgent [candidate] (828.557 ms) : 0, 828557
GlobalTracer [baseline] (235.394 ms) : 0, 235394
GlobalTracer [candidate] (229.095 ms) : 0, 229095
AppSec [baseline] (28.927 ms) : 0, 28927
AppSec [candidate] (27.108 ms) : 0, 27108
Debugger [baseline] (6.002 ms) : 0, 6002
Debugger [candidate] (6.025 ms) : 0, 6025
Remote Config [baseline] (604.843 µs) : 0, 605
Remote Config [candidate] (585.825 µs) : 0, 586
Telemetry [baseline] (8.484 ms) : 0, 8484
Telemetry [candidate] (8.408 ms) : 0, 8408
Flare Poller [baseline] (4.08 ms) : 0, 4080
Flare Poller [candidate] (4.008 ms) : 0, 4008
IAST [baseline] (32.626 ms) : 0, 32626
IAST [candidate] (34.192 ms) : 0, 34192
Loading

Load

Parameters

Baseline Candidate
baseline_or_candidate baseline candidate
git_branch master andrea.marziali/remove-jctools-queues
git_commit_date 1762777415 1762791589
git_commit_sha c6e7fca b2850b3
release_version 1.56.0-SNAPSHOT~c6e7fcaefe 1.56.0-SNAPSHOT~b2850b3848
See matching parameters
Baseline Candidate
application insecure-bank insecure-bank
ci_job_date 1762794138 1762794138
ci_job_id 1225765047 1225765047
ci_pipeline_id 81831570 81831570
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-1-2q0jul03 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-1-2q0jul03 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 2 performance improvements and 1 performance regressions! Performance is the same for 9 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:tracing:high_load better
[-1.323ms; -0.927ms] or [-7.018%; -4.914%]
unstable
[-12.334op/s; +43.646op/s] or [-4.985%; +17.639%]
17.734ms 263.094op/s 18.859ms 247.438op/s
scenario:load:petclinic:no_agent:high_load better
[-1.249ms; -0.839ms] or [-6.468%; -4.346%]
unstable
[-14.501op/s; +42.001op/s] or [-5.996%; +17.367%]
18.258ms 255.594op/s 19.302ms 241.844op/s
scenario:load:petclinic:profiling:high_load worse
[+0.921ms; +1.337ms] or [+4.955%; +7.189%]
unstable
[-40.563op/s; +12.063op/s] or [-16.160%; +4.806%]
19.721ms 236.750op/s 18.592ms 251.000op/s
Request duration reports for petclinic
gantt
    title petclinic - request duration [CI 0.99] : candidate=1.56.0-SNAPSHOT~b2850b3848, baseline=1.56.0-SNAPSHOT~c6e7fcaefe
    dateFormat X
    axisFormat %s
section baseline
no_agent (19.302 ms) : 19107, 19496
.   : milestone, 19302,
appsec (18.68 ms) : 18490, 18869
.   : milestone, 18680,
code_origins (17.821 ms) : 17645, 17997
.   : milestone, 17821,
iast (17.793 ms) : 17615, 17971
.   : milestone, 17793,
profiling (18.592 ms) : 18407, 18778
.   : milestone, 18592,
tracing (18.859 ms) : 18667, 19050
.   : milestone, 18859,
section candidate
no_agent (18.258 ms) : 18072, 18444
.   : milestone, 18258,
appsec (18.799 ms) : 18608, 18990
.   : milestone, 18799,
code_origins (17.695 ms) : 17519, 17872
.   : milestone, 17695,
iast (17.775 ms) : 17596, 17955
.   : milestone, 17775,
profiling (19.721 ms) : 19521, 19921
.   : milestone, 19721,
tracing (17.734 ms) : 17557, 17910
.   : milestone, 17734,
Loading
  • baseline results
Variant Request duration [CI 0.99] Δ no_agent
no_agent 19.302 ms [19.107 ms, 19.496 ms] -
appsec 18.68 ms [18.49 ms, 18.869 ms] -621.748 µs (-3.2%)
code_origins 17.821 ms [17.645 ms, 17.997 ms] -1.481 ms (-7.7%)
iast 17.793 ms [17.615 ms, 17.971 ms] -1.509 ms (-7.8%)
profiling 18.592 ms [18.407 ms, 18.778 ms] -709.396 µs (-3.7%)
tracing 18.859 ms [18.667 ms, 19.05 ms] -442.934 µs (-2.3%)
  • candidate results
Variant Request duration [CI 0.99] Δ no_agent
no_agent 18.258 ms [18.072 ms, 18.444 ms] -
appsec 18.799 ms [18.608 ms, 18.99 ms] 540.937 µs (3.0%)
code_origins 17.695 ms [17.519 ms, 17.872 ms] -562.556 µs (-3.1%)
iast 17.775 ms [17.596 ms, 17.955 ms] -482.521 µs (-2.6%)
profiling 19.721 ms [19.521 ms, 19.921 ms] 1.463 ms (8.0%)
tracing 17.734 ms [17.557 ms, 17.91 ms] -524.326 µs (-2.9%)
Request duration reports for insecure-bank
gantt
    title insecure-bank - request duration [CI 0.99] : candidate=1.56.0-SNAPSHOT~b2850b3848, baseline=1.56.0-SNAPSHOT~c6e7fcaefe
    dateFormat X
    axisFormat %s
section baseline
no_agent (1.194 ms) : 1183, 1205
.   : milestone, 1194,
iast (3.196 ms) : 3156, 3235
.   : milestone, 3196,
iast_FULL (5.78 ms) : 5723, 5837
.   : milestone, 5780,
iast_GLOBAL (3.483 ms) : 3429, 3537
.   : milestone, 3483,
profiling (1.946 ms) : 1930, 1963
.   : milestone, 1946,
tracing (1.79 ms) : 1774, 1806
.   : milestone, 1790,
section candidate
no_agent (1.201 ms) : 1190, 1213
.   : milestone, 1201,
iast (3.169 ms) : 3128, 3211
.   : milestone, 3169,
iast_FULL (5.743 ms) : 5686, 5800
.   : milestone, 5743,
iast_GLOBAL (3.446 ms) : 3394, 3498
.   : milestone, 3446,
profiling (1.913 ms) : 1897, 1928
.   : milestone, 1913,
tracing (1.81 ms) : 1795, 1826
.   : milestone, 1810,
Loading
  • baseline results
Variant Request duration [CI 0.99] Δ no_agent
no_agent 1.194 ms [1.183 ms, 1.205 ms] -
iast 3.196 ms [3.156 ms, 3.235 ms] 2.001 ms (167.6%)
iast_FULL 5.78 ms [5.723 ms, 5.837 ms] 4.586 ms (383.9%)
iast_GLOBAL 3.483 ms [3.429 ms, 3.537 ms] 2.288 ms (191.6%)
profiling 1.946 ms [1.93 ms, 1.963 ms] 751.901 µs (63.0%)
tracing 1.79 ms [1.774 ms, 1.806 ms] 595.587 µs (49.9%)
  • candidate results
Variant Request duration [CI 0.99] Δ no_agent
no_agent 1.201 ms [1.19 ms, 1.213 ms] -
iast 3.169 ms [3.128 ms, 3.211 ms] 1.968 ms (163.8%)
iast_FULL 5.743 ms [5.686 ms, 5.8 ms] 4.542 ms (378.0%)
iast_GLOBAL 3.446 ms [3.394 ms, 3.498 ms] 2.245 ms (186.8%)
profiling 1.913 ms [1.897 ms, 1.928 ms] 711.139 µs (59.2%)
tracing 1.81 ms [1.795 ms, 1.826 ms] 609.031 µs (50.7%)

Dacapo

Parameters

Baseline Candidate
baseline_or_candidate baseline candidate
git_branch master andrea.marziali/remove-jctools-queues
git_commit_date 1762777415 1762791589
git_commit_sha c6e7fca b2850b3
release_version 1.56.0-SNAPSHOT~c6e7fcaefe 1.56.0-SNAPSHOT~b2850b3848
See matching parameters
Baseline Candidate
application biojava biojava
ci_job_date 1762793801 1762793801
ci_job_id 1225765050 1225765050
ci_pipeline_id 81831570 81831570
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-84kld246 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-84kld246 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 10 metrics, 2 unstable metrics.

Execution time for biojava
gantt
    title biojava - execution time [CI 0.99] : candidate=1.56.0-SNAPSHOT~b2850b3848, baseline=1.56.0-SNAPSHOT~c6e7fcaefe
    dateFormat X
    axisFormat %s
section baseline
no_agent (15.304 s) : 15304000, 15304000
.   : milestone, 15304000,
appsec (14.881 s) : 14881000, 14881000
.   : milestone, 14881000,
iast (18.514 s) : 18514000, 18514000
.   : milestone, 18514000,
iast_GLOBAL (18.22 s) : 18220000, 18220000
.   : milestone, 18220000,
profiling (15.764 s) : 15764000, 15764000
.   : milestone, 15764000,
tracing (14.952 s) : 14952000, 14952000
.   : milestone, 14952000,
section candidate
no_agent (14.884 s) : 14884000, 14884000
.   : milestone, 14884000,
appsec (14.763 s) : 14763000, 14763000
.   : milestone, 14763000,
iast (18.4 s) : 18400000, 18400000
.   : milestone, 18400000,
iast_GLOBAL (17.906 s) : 17906000, 17906000
.   : milestone, 17906000,
profiling (14.929 s) : 14929000, 14929000
.   : milestone, 14929000,
tracing (14.808 s) : 14808000, 14808000
.   : milestone, 14808000,
Loading
  • baseline results
Variant Execution Time [CI 0.99] Δ no_agent
no_agent 15.304 s [15.304 s, 15.304 s] -
appsec 14.881 s [14.881 s, 14.881 s] -423.0 ms (-2.8%)
iast 18.514 s [18.514 s, 18.514 s] 3.21 s (21.0%)
iast_GLOBAL 18.22 s [18.22 s, 18.22 s] 2.916 s (19.1%)
profiling 15.764 s [15.764 s, 15.764 s] 460.0 ms (3.0%)
tracing 14.952 s [14.952 s, 14.952 s] -352.0 ms (-2.3%)
  • candidate results
Variant Execution Time [CI 0.99] Δ no_agent
no_agent 14.884 s [14.884 s, 14.884 s] -
appsec 14.763 s [14.763 s, 14.763 s] -121.0 ms (-0.8%)
iast 18.4 s [18.4 s, 18.4 s] 3.516 s (23.6%)
iast_GLOBAL 17.906 s [17.906 s, 17.906 s] 3.022 s (20.3%)
profiling 14.929 s [14.929 s, 14.929 s] 45.0 ms (0.3%)
tracing 14.808 s [14.808 s, 14.808 s] -76.0 ms (-0.5%)
Execution time for tomcat
gantt
    title tomcat - execution time [CI 0.99] : candidate=1.56.0-SNAPSHOT~b2850b3848, baseline=1.56.0-SNAPSHOT~c6e7fcaefe
    dateFormat X
    axisFormat %s
section baseline
no_agent (1.475 ms) : 1463, 1486
.   : milestone, 1475,
appsec (3.7 ms) : 3484, 3917
.   : milestone, 3700,
iast (2.21 ms) : 2146, 2274
.   : milestone, 2210,
iast_GLOBAL (2.254 ms) : 2190, 2318
.   : milestone, 2254,
profiling (2.498 ms) : 2326, 2670
.   : milestone, 2498,
tracing (2.019 ms) : 1969, 2068
.   : milestone, 2019,
section candidate
no_agent (1.476 ms) : 1464, 1487
.   : milestone, 1476,
appsec (3.672 ms) : 3459, 3886
.   : milestone, 3672,
iast (2.209 ms) : 2145, 2273
.   : milestone, 2209,
iast_GLOBAL (2.255 ms) : 2191, 2319
.   : milestone, 2255,
profiling (2.053 ms) : 2002, 2104
.   : milestone, 2053,
tracing (2.028 ms) : 1978, 2078
.   : milestone, 2028,
Loading
  • baseline results
Variant Execution Time [CI 0.99] Δ no_agent
no_agent 1.475 ms [1.463 ms, 1.486 ms] -
appsec 3.7 ms [3.484 ms, 3.917 ms] 2.225 ms (150.9%)
iast 2.21 ms [2.146 ms, 2.274 ms] 735.321 µs (49.9%)
iast_GLOBAL 2.254 ms [2.19 ms, 2.318 ms] 779.604 µs (52.9%)
profiling 2.498 ms [2.326 ms, 2.67 ms] 1.023 ms (69.4%)
tracing 2.019 ms [1.969 ms, 2.068 ms] 543.866 µs (36.9%)
  • candidate results
Variant Execution Time [CI 0.99] Δ no_agent
no_agent 1.476 ms [1.464 ms, 1.487 ms] -
appsec 3.672 ms [3.459 ms, 3.886 ms] 2.196 ms (148.8%)
iast 2.209 ms [2.145 ms, 2.273 ms] 733.348 µs (49.7%)
iast_GLOBAL 2.255 ms [2.191 ms, 2.319 ms] 779.662 µs (52.8%)
profiling 2.053 ms [2.002 ms, 2.104 ms] 577.185 µs (39.1%)
tracing 2.028 ms [1.978 ms, 2.078 ms] 552.4 µs (37.4%)

@amarziali amarziali force-pushed the andrea.marziali/remove-jctools-queues branch 6 times, most recently from 229f67a to 374d13d Compare November 7, 2025 14:59
@amarziali amarziali changed the title Removes jctools usage for lock-free queues. Replace JCTools queues with VarHandle-based implementations for Java 9+ Nov 10, 2025
@amarziali amarziali force-pushed the andrea.marziali/remove-jctools-queues branch from 2721d41 to 0a72587 Compare November 10, 2025 12:45
@amarziali amarziali force-pushed the andrea.marziali/remove-jctools-queues branch from 21e0a65 to 259eeb5 Compare November 10, 2025 15:25
@amarziali amarziali marked this pull request as ready for review November 10, 2025 16:20
@amarziali amarziali requested review from a team as code owners November 10, 2025 16:20
@amarziali amarziali requested a review from mcculls November 10, 2025 16:20
@github-actions
Copy link
Contributor

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.

@amarziali amarziali requested a review from dougqh November 10, 2025 16:20
@amarziali amarziali added type: enhancement Enhancements and improvements comp: core Tracer core labels Nov 10, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

comp: core Tracer core type: enhancement Enhancements and improvements

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants