You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
runner: clear ARCADEDB_OPTS_GC, so the deployment axis really is transport-only
The server backends carried this claim:
Setting JAVA_OPTS also drops the image's ZGC default: both deployments run
the same default GC (G1) so the embedded-vs-server axis isolates transport,
not GC choice.
It is false. ARCADEDB_OPTS_GC is its own entry in the image environment:
ARCADEDB_OPTS_GC=-XX:+UseZGC -XX:+ZGenerational
ARCADEDB_OPTS_MEMORY=-XX:MaxRAMPercentage=75 <- the only one we replaced
Overriding ARCADEDB_OPTS_MEMORY and JAVA_OPTS leaves it alone, and the server
JVM observed mid-run on 2026-08-30 was still on ZGC. So every server row we
have ever published was measured on a different collector from its embedded
counterpart, on an axis whose stated purpose is to isolate transport.
Verified rather than reasoned, in the pinned image:
without the fix UseZGC = true {command line}
with the fix UseG1GC = true {ergonomic}
This matters now because the twelve healthy deep10m builds on disk run 40.4 to
62.5 minutes -- embedded fp32, embedded int8 and served fp32 alike -- while the
served arm has separately been recorded at 16,981 s and then timed out past
28,800 s. A whole-heap collector difference on an allocation-heavy graph build
is a candidate for that gap, and it should not have been a variable at all.
What this does NOT fix, and cannot from here: the server image ships JDK
21.0.11 while the embedded wheel bundles Corretto 25.0.4. That is a disclosure.
Copy file name to clipboardExpand all lines: benchmarks/experiments/runner.py
+38-8Lines changed: 38 additions & 8 deletions
Original file line number
Diff line number
Diff line change
@@ -361,11 +361,23 @@ def print_heap_policy():
361
361
"server_image": "arcadedata/arcadedb:26.8.1@sha256:49036720b1678b9c7a6dbf22fc34a812c8d7bed15508c22cbb02c0dddc0ca16a", # RELEASED 26.8.1, matches the 26.8.1 wheel (F5: one engine line per table)
362
362
# Heap parity with the embedded deployment (protocol: same JVM-heap
363
363
# policy per scale tier) — the image's own default is -Xmx2G, which
364
-
# starved the server vs embedded's per-scale heap. Setting JAVA_OPTS
365
-
# also drops the image's ZGC default: both deployments run the same
366
-
# default GC (G1) so the embedded-vs-server axis isolates transport,
367
-
# not GC choice.
364
+
# starved the server vs embedded's per-scale heap.
365
+
#
366
+
# ARCADEDB_OPTS_GC IS A SEPARATE VARIABLE AND MUST BE CLEARED EXPLICITLY.
367
+
# This comment used to claim that setting JAVA_OPTS "also drops the
368
+
# image's ZGC default: both deployments run the same default GC (G1)".
369
+
# It does not. `docker inspect` shows ARCADEDB_OPTS_GC=-XX:+UseZGC
370
+
# -XX:+ZGenerational as its own env entry, and overriding
371
+
# ARCADEDB_OPTS_MEMORY and JAVA_OPTS leaves it untouched: the server JVM
372
+
# observed mid-run on 2026-08-30 was still on ZGC. The deployment axis,
373
+
# which exists to isolate TRANSPORT, was also switching collector.
374
+
#
375
+
# STILL NOT FULLY MATCHED, and it cannot be from this file: the server
376
+
# image ships JDK 21.0.11 and the embedded wheel bundles Corretto 25.0.4.
377
+
# That is a disclosure, not something to paper over here.
# SAME BUILD-CACHE POLICY AS THE EMBEDDED ARM. l3d_dense.py passes
370
382
# -Darcadedb.vectorIndex.graphBuildCacheSize to the embedded JVM and this did not, so
371
383
# the two ArcadeDB deployments ran DIFFERENT cache policies: embedded bounded at
@@ -474,6 +486,8 @@ def print_heap_policy():
474
486
"image": "dbbench:client",
475
487
"server_image": "arcadedata/arcadedb:26.8.1@sha256:49036720b1678b9c7a6dbf22fc34a812c8d7bed15508c22cbb02c0dddc0ca16a", # RELEASED 26.8.1, matches the 26.8.1 wheel (F5: one engine line per table)
# SAME BUILD-CACHE POLICY AS THE EMBEDDED ARM. l3d_dense.py passes
478
492
# -Darcadedb.vectorIndex.graphBuildCacheSize to the embedded JVM and this did not, so
479
493
# the two ArcadeDB deployments ran DIFFERENT cache policies: embedded bounded at
@@ -577,11 +591,23 @@ def print_heap_policy():
577
591
"server_image": "arcadedata/arcadedb:26.8.1@sha256:49036720b1678b9c7a6dbf22fc34a812c8d7bed15508c22cbb02c0dddc0ca16a", # RELEASED 26.8.1, matches the 26.8.1 wheel (F5: one engine line per table)
578
592
# Heap parity with the embedded deployment (protocol: same JVM-heap
579
593
# policy per scale tier) — the image's own default is -Xmx2G, which
580
-
# starved the server vs embedded's per-scale heap. Setting JAVA_OPTS
581
-
# also drops the image's ZGC default: both deployments run the same
582
-
# default GC (G1) so the embedded-vs-server axis isolates transport,
583
-
# not GC choice.
594
+
# starved the server vs embedded's per-scale heap.
595
+
#
596
+
# ARCADEDB_OPTS_GC IS A SEPARATE VARIABLE AND MUST BE CLEARED EXPLICITLY.
597
+
# This comment used to claim that setting JAVA_OPTS "also drops the
598
+
# image's ZGC default: both deployments run the same default GC (G1)".
599
+
# It does not. `docker inspect` shows ARCADEDB_OPTS_GC=-XX:+UseZGC
600
+
# -XX:+ZGenerational as its own env entry, and overriding
601
+
# ARCADEDB_OPTS_MEMORY and JAVA_OPTS leaves it untouched: the server JVM
602
+
# observed mid-run on 2026-08-30 was still on ZGC. The deployment axis,
603
+
# which exists to isolate TRANSPORT, was also switching collector.
604
+
#
605
+
# STILL NOT FULLY MATCHED, and it cannot be from this file: the server
606
+
# image ships JDK 21.0.11 and the embedded wheel bundles Corretto 25.0.4.
607
+
# That is a disclosure, not something to paper over here.
# SAME BUILD-CACHE POLICY AS THE EMBEDDED ARM. l3d_dense.py passes
586
612
# -Darcadedb.vectorIndex.graphBuildCacheSize to the embedded JVM and this did not, so
587
613
# the two ArcadeDB deployments ran DIFFERENT cache policies: embedded bounded at
@@ -651,6 +677,8 @@ def print_heap_policy():
651
677
"image": "dbbench:client",
652
678
"server_image": "arcadedata/arcadedb:26.8.1@sha256:49036720b1678b9c7a6dbf22fc34a812c8d7bed15508c22cbb02c0dddc0ca16a", # RELEASED 26.8.1, matches the 26.8.1 wheel (F5: one engine line per table)
# SAME BUILD-CACHE POLICY AS THE EMBEDDED ARM. l3d_dense.py passes
655
683
# -Darcadedb.vectorIndex.graphBuildCacheSize to the embedded JVM and this did not, so
656
684
# the two ArcadeDB deployments ran DIFFERENT cache policies: embedded bounded at
@@ -676,6 +704,8 @@ def print_heap_policy():
676
704
"image": "dbbench:client",
677
705
"server_image": "arcadedata/arcadedb:26.8.1@sha256:49036720b1678b9c7a6dbf22fc34a812c8d7bed15508c22cbb02c0dddc0ca16a", # RELEASED 26.8.1, matches the 26.8.1 wheel
0 commit comments