Simplify InstanceStore implementation to use simple, synchronized HashMaps#9739
Simplify InstanceStore implementation to use simple, synchronized HashMaps#9739
Conversation
5188fd4 to
3fea6c3
Compare
|
🎯 Code Coverage 🔗 Commit SHA: 08f91e1 | Docs | Was this helpful? Give us feedback! |
BenchmarksStartupParameters
See matching parameters
SummaryFound 0 performance improvements and 0 performance regressions! Performance is the same for 59 metrics, 6 unstable metrics. Startup time reports for insecure-bankgantt
title insecure-bank - global startup overhead: candidate=1.55.0-SNAPSHOT~08f91e1dfa, baseline=1.55.0-SNAPSHOT~6dc3f85c93
dateFormat X
axisFormat %s
section tracing
Agent [baseline] (1.017 s) : 0, 1016622
Total [baseline] (8.677 s) : 0, 8677126
Agent [candidate] (1.039 s) : 0, 1039342
Total [candidate] (8.685 s) : 0, 8685473
section iast
Agent [baseline] (1.16 s) : 0, 1159861
Total [baseline] (9.313 s) : 0, 9312627
Agent [candidate] (1.15 s) : 0, 1149883
Total [candidate] (9.261 s) : 0, 9261249
gantt
title insecure-bank - break down per module: candidate=1.55.0-SNAPSHOT~08f91e1dfa, baseline=1.55.0-SNAPSHOT~6dc3f85c93
dateFormat X
axisFormat %s
section tracing
crashtracking [baseline] (1.472 ms) : 0, 1472
crashtracking [candidate] (1.497 ms) : 0, 1497
BytebuddyAgent [baseline] (692.329 ms) : 0, 692329
BytebuddyAgent [candidate] (708.616 ms) : 0, 708616
GlobalTracer [baseline] (241.661 ms) : 0, 241661
GlobalTracer [candidate] (246.079 ms) : 0, 246079
AppSec [baseline] (32.755 ms) : 0, 32755
AppSec [candidate] (33.181 ms) : 0, 33181
Debugger [baseline] (6.435 ms) : 0, 6435
Debugger [candidate] (6.586 ms) : 0, 6586
Remote Config [baseline] (702.192 µs) : 0, 702
Remote Config [candidate] (709.215 µs) : 0, 709
Telemetry [baseline] (9.295 ms) : 0, 9295
Telemetry [candidate] (9.373 ms) : 0, 9373
Flare Poller [baseline] (10.916 ms) : 0, 10916
Flare Poller [candidate] (11.814 ms) : 0, 11814
section iast
crashtracking [baseline] (1.498 ms) : 0, 1498
crashtracking [candidate] (1.47 ms) : 0, 1470
BytebuddyAgent [baseline] (823.083 ms) : 0, 823083
BytebuddyAgent [candidate] (814.787 ms) : 0, 814787
GlobalTracer [baseline] (232.341 ms) : 0, 232341
GlobalTracer [candidate] (230.973 ms) : 0, 230973
IAST [baseline] (26.576 ms) : 0, 26576
IAST [candidate] (26.701 ms) : 0, 26701
AppSec [baseline] (34.981 ms) : 0, 34981
AppSec [candidate] (34.748 ms) : 0, 34748
Debugger [baseline] (6.156 ms) : 0, 6156
Debugger [candidate] (6.135 ms) : 0, 6135
Remote Config [baseline] (619.781 µs) : 0, 620
Remote Config [candidate] (606.02 µs) : 0, 606
Telemetry [baseline] (8.747 ms) : 0, 8747
Telemetry [candidate] (8.708 ms) : 0, 8708
Flare Poller [baseline] (4.258 ms) : 0, 4258
Flare Poller [candidate] (4.214 ms) : 0, 4214
Startup time reports for petclinicgantt
title petclinic - global startup overhead: candidate=1.55.0-SNAPSHOT~08f91e1dfa, baseline=1.55.0-SNAPSHOT~6dc3f85c93
dateFormat X
axisFormat %s
section tracing
Agent [baseline] (1.02 s) : 0, 1020471
Total [baseline] (10.789 s) : 0, 10788548
Agent [candidate] (1.024 s) : 0, 1024492
Total [candidate] (10.724 s) : 0, 10724496
section appsec
Agent [baseline] (1.201 s) : 0, 1201362
Total [baseline] (11.075 s) : 0, 11074840
Agent [candidate] (1.201 s) : 0, 1200827
Total [candidate] (11.047 s) : 0, 11046645
section iast
Agent [baseline] (1.153 s) : 0, 1153313
Total [baseline] (11.124 s) : 0, 11124077
Agent [candidate] (1.162 s) : 0, 1161922
Total [candidate] (11.026 s) : 0, 11025711
section profiling
Agent [baseline] (1.158 s) : 0, 1158077
Total [baseline] (11.055 s) : 0, 11055055
Agent [candidate] (1.172 s) : 0, 1171512
Total [candidate] (11.093 s) : 0, 11093094
gantt
title petclinic - break down per module: candidate=1.55.0-SNAPSHOT~08f91e1dfa, baseline=1.55.0-SNAPSHOT~6dc3f85c93
dateFormat X
axisFormat %s
section tracing
crashtracking [baseline] (1.458 ms) : 0, 1458
crashtracking [candidate] (1.454 ms) : 0, 1454
BytebuddyAgent [baseline] (696.849 ms) : 0, 696849
BytebuddyAgent [candidate] (698.728 ms) : 0, 698728
GlobalTracer [baseline] (241.807 ms) : 0, 241807
GlobalTracer [candidate] (243.214 ms) : 0, 243214
AppSec [baseline] (32.404 ms) : 0, 32404
AppSec [candidate] (32.43 ms) : 0, 32430
Debugger [baseline] (6.426 ms) : 0, 6426
Debugger [candidate] (6.535 ms) : 0, 6535
Remote Config [baseline] (717.114 µs) : 0, 717
Remote Config [candidate] (710.126 µs) : 0, 710
Telemetry [baseline] (9.33 ms) : 0, 9330
Telemetry [candidate] (9.368 ms) : 0, 9368
Flare Poller [baseline] (10.226 ms) : 0, 10226
Flare Poller [candidate] (10.783 ms) : 0, 10783
section appsec
crashtracking [baseline] (1.459 ms) : 0, 1459
crashtracking [candidate] (1.476 ms) : 0, 1476
BytebuddyAgent [baseline] (723.887 ms) : 0, 723887
BytebuddyAgent [candidate] (722.146 ms) : 0, 722146
GlobalTracer [baseline] (236.144 ms) : 0, 236144
GlobalTracer [candidate] (236.136 ms) : 0, 236136
IAST [baseline] (24.646 ms) : 0, 24646
IAST [candidate] (24.97 ms) : 0, 24970
AppSec [baseline] (174.694 ms) : 0, 174694
AppSec [candidate] (175.673 ms) : 0, 175673
Debugger [baseline] (6.147 ms) : 0, 6147
Debugger [candidate] (6.112 ms) : 0, 6112
Remote Config [baseline] (628.19 µs) : 0, 628
Remote Config [candidate] (628.025 µs) : 0, 628
Telemetry [baseline] (8.57 ms) : 0, 8570
Telemetry [candidate] (8.502 ms) : 0, 8502
Flare Poller [baseline] (3.976 ms) : 0, 3976
Flare Poller [candidate] (3.968 ms) : 0, 3968
section iast
crashtracking [baseline] (1.471 ms) : 0, 1471
crashtracking [candidate] (1.456 ms) : 0, 1456
BytebuddyAgent [baseline] (816.867 ms) : 0, 816867
BytebuddyAgent [candidate] (822.24 ms) : 0, 822240
GlobalTracer [baseline] (231.823 ms) : 0, 231823
GlobalTracer [candidate] (233.883 ms) : 0, 233883
IAST [baseline] (26.765 ms) : 0, 26765
IAST [candidate] (27.126 ms) : 0, 27126
AppSec [baseline] (35.075 ms) : 0, 35075
AppSec [candidate] (35.549 ms) : 0, 35549
Debugger [baseline] (6.146 ms) : 0, 6146
Debugger [candidate] (6.246 ms) : 0, 6246
Remote Config [baseline] (626.999 µs) : 0, 627
Remote Config [candidate] (624.404 µs) : 0, 624
Telemetry [baseline] (8.69 ms) : 0, 8690
Telemetry [candidate] (8.855 ms) : 0, 8855
Flare Poller [baseline] (4.308 ms) : 0, 4308
Flare Poller [candidate] (4.285 ms) : 0, 4285
section profiling
crashtracking [baseline] (1.427 ms) : 0, 1427
crashtracking [candidate] (1.435 ms) : 0, 1435
BytebuddyAgent [baseline] (719.678 ms) : 0, 719678
BytebuddyAgent [candidate] (726.908 ms) : 0, 726908
GlobalTracer [baseline] (216.919 ms) : 0, 216919
GlobalTracer [candidate] (219.277 ms) : 0, 219277
AppSec [baseline] (32.204 ms) : 0, 32204
AppSec [candidate] (32.584 ms) : 0, 32584
Debugger [baseline] (6.459 ms) : 0, 6459
Debugger [candidate] (7.333 ms) : 0, 7333
Remote Config [baseline] (750.898 µs) : 0, 751
Remote Config [candidate] (837.244 µs) : 0, 837
Telemetry [baseline] (16.03 ms) : 0, 16030
Telemetry [candidate] (15.536 ms) : 0, 15536
Flare Poller [baseline] (4.163 ms) : 0, 4163
Flare Poller [candidate] (4.225 ms) : 0, 4225
ProfilingAgent [baseline] (107.506 ms) : 0, 107506
ProfilingAgent [candidate] (109.792 ms) : 0, 109792
Profiling [baseline] (108.646 ms) : 0, 108646
Profiling [candidate] (111.056 ms) : 0, 111056
LoadParameters
See matching parameters
SummaryFound 2 performance improvements and 2 performance regressions! Performance is the same for 8 metrics, 12 unstable metrics.
Request duration reports for insecure-bankgantt
title insecure-bank - request duration [CI 0.99] : candidate=1.55.0-SNAPSHOT~08f91e1dfa, baseline=1.55.0-SNAPSHOT~6dc3f85c93
dateFormat X
axisFormat %s
section baseline
no_agent (4.42 ms) : 4369, 4472
. : milestone, 4420,
iast (9.667 ms) : 9503, 9830
. : milestone, 9667,
iast_FULL (14.407 ms) : 14118, 14696
. : milestone, 14407,
iast_GLOBAL (10.879 ms) : 10684, 11074
. : milestone, 10879,
profiling (8.793 ms) : 8658, 8928
. : milestone, 8793,
tracing (7.956 ms) : 7830, 8081
. : milestone, 7956,
section candidate
no_agent (4.313 ms) : 4264, 4362
. : milestone, 4313,
iast (10.049 ms) : 9881, 10216
. : milestone, 10049,
iast_FULL (13.904 ms) : 13632, 14175
. : milestone, 13904,
iast_GLOBAL (10.731 ms) : 10529, 10934
. : milestone, 10731,
profiling (9.076 ms) : 8939, 9212
. : milestone, 9076,
tracing (7.67 ms) : 7562, 7778
. : milestone, 7670,
Request duration reports for petclinicgantt
title petclinic - request duration [CI 0.99] : candidate=1.55.0-SNAPSHOT~08f91e1dfa, baseline=1.55.0-SNAPSHOT~6dc3f85c93
dateFormat X
axisFormat %s
section baseline
no_agent (36.052 ms) : 35760, 36343
. : milestone, 36052,
appsec (49.705 ms) : 49266, 50143
. : milestone, 49705,
code_origins (43.466 ms) : 43098, 43834
. : milestone, 43466,
iast (45.992 ms) : 45580, 46404
. : milestone, 45992,
profiling (49.764 ms) : 49294, 50234
. : milestone, 49764,
tracing (44.863 ms) : 44484, 45242
. : milestone, 44863,
section candidate
no_agent (37.548 ms) : 37253, 37842
. : milestone, 37548,
appsec (48.245 ms) : 47836, 48655
. : milestone, 48245,
code_origins (44.251 ms) : 43868, 44634
. : milestone, 44251,
iast (45.138 ms) : 44750, 45525
. : milestone, 45138,
profiling (49.63 ms) : 49129, 50130
. : milestone, 49630,
tracing (44.43 ms) : 44058, 44803
. : milestone, 44430,
DacapoParameters
See matching parameters
SummaryFound 0 performance improvements and 0 performance regressions! Performance is the same for 11 metrics, 1 unstable metrics. Execution time for tomcatgantt
title tomcat - execution time [CI 0.99] : candidate=1.55.0-SNAPSHOT~08f91e1dfa, baseline=1.55.0-SNAPSHOT~6dc3f85c93
dateFormat X
axisFormat %s
section baseline
no_agent (1.471 ms) : 1459, 1482
. : milestone, 1471,
appsec (3.658 ms) : 3444, 3873
. : milestone, 3658,
iast (2.203 ms) : 2140, 2267
. : milestone, 2203,
iast_GLOBAL (2.25 ms) : 2186, 2314
. : milestone, 2250,
profiling (2.066 ms) : 2013, 2118
. : milestone, 2066,
tracing (2.02 ms) : 1971, 2070
. : milestone, 2020,
section candidate
no_agent (1.472 ms) : 1460, 1483
. : milestone, 1472,
appsec (3.632 ms) : 3419, 3845
. : milestone, 3632,
iast (2.2 ms) : 2136, 2263
. : milestone, 2200,
iast_GLOBAL (2.252 ms) : 2187, 2316
. : milestone, 2252,
profiling (2.047 ms) : 1996, 2099
. : milestone, 2047,
tracing (2.025 ms) : 1976, 2075
. : milestone, 2025,
Execution time for biojavagantt
title biojava - execution time [CI 0.99] : candidate=1.55.0-SNAPSHOT~08f91e1dfa, baseline=1.55.0-SNAPSHOT~6dc3f85c93
dateFormat X
axisFormat %s
section baseline
no_agent (14.959 s) : 14959000, 14959000
. : milestone, 14959000,
appsec (15.286 s) : 15286000, 15286000
. : milestone, 15286000,
iast (18.688 s) : 18688000, 18688000
. : milestone, 18688000,
iast_GLOBAL (17.999 s) : 17999000, 17999000
. : milestone, 17999000,
profiling (15.372 s) : 15372000, 15372000
. : milestone, 15372000,
tracing (15.064 s) : 15064000, 15064000
. : milestone, 15064000,
section candidate
no_agent (15.508 s) : 15508000, 15508000
. : milestone, 15508000,
appsec (14.946 s) : 14946000, 14946000
. : milestone, 14946000,
iast (18.679 s) : 18679000, 18679000
. : milestone, 18679000,
iast_GLOBAL (17.763 s) : 17763000, 17763000
. : milestone, 17763000,
profiling (15.427 s) : 15427000, 15427000
. : milestone, 15427000,
tracing (15.211 s) : 15211000, 15211000
. : milestone, 15211000,
|
PerfectSlayer
left a comment
There was a problem hiding this comment.
❔ question: The new implementation ends up looking very similar to @nikita-tkachenko-datadog ConcurrentHashMapContextStore -- the underlying map being ConcurrentHashMap instead of Collections.synchronizedMap(new HashMap<>())
Would there be a way to keep only one of them?
They serve two different use-cases - attempting to merge them would introduce an undesirable coupling and limit how they could evolve going forwards. |
3fea6c3 to
b45eca2
Compare
…hMaps The keys used to lookup instances are always string literals, bounded in code by a fixed number of calls. These keys are never collected, so we don't need to use a weak map. The instance store is accessed when setting up helpers to guarantee the same instance is used by different instrumentations sharing a common type (via their parent class-loader.) Therefore each store just needs basic synchronization to guarantee it only creates one instance per-key.
b45eca2 to
08f91e1
Compare
Motivation
The keys used to lookup instances are always string literals, bounded in code by a fixed number of calls. These keys are never collected, so we don't need to use a weak map. The instance store is accessed when setting up helpers to guarantee the same instance is used by different instrumentations sharing a common type (via their parent class-loader.) Therefore each store just needs basic synchronization to guarantee it only creates one instance per-key.
Additional Notes
Making this change reduces the places we (indirectly) use
com.blogspot.mydailyjava.weaklockfree.WeakConcurrentMapNote that each instance store is maintained as a
ClassValueof the class being implemented / extended.Contributor Checklist
type:and (comp:orinst:) labels in addition to any useful labelsclose,fixor any linking keywords when referencing an issue.Use
solvesinstead, and assign the PR milestone to the issueJira ticket: [PROJ-IDENT]