Skip to content

Commit 25c4489

Browse files
committed
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.
1 parent f74f736 commit 25c4489

1 file changed

Lines changed: 38 additions & 8 deletions

File tree

benchmarks/experiments/runner.py

Lines changed: 38 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -361,11 +361,23 @@ def print_heap_policy():
361361
"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)
362362
# Heap parity with the embedded deployment (protocol: same JVM-heap
363363
# 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.
368378
"server_env": ["-e", "ARCADEDB_OPTS_MEMORY=-Xms{heap} -Xmx{heap}",
379+
# see the ARCADEDB_OPTS_GC note above
380+
"-e", "ARCADEDB_OPTS_GC=",
369381
# SAME BUILD-CACHE POLICY AS THE EMBEDDED ARM. l3d_dense.py passes
370382
# -Darcadedb.vectorIndex.graphBuildCacheSize to the embedded JVM and this did not, so
371383
# the two ArcadeDB deployments ran DIFFERENT cache policies: embedded bounded at
@@ -474,6 +486,8 @@ def print_heap_policy():
474486
"image": "dbbench:client",
475487
"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)
476488
"server_env": ["-e", "ARCADEDB_OPTS_MEMORY=-Xms{heap} -Xmx{heap}",
489+
# see the ARCADEDB_OPTS_GC note above
490+
"-e", "ARCADEDB_OPTS_GC=",
477491
# SAME BUILD-CACHE POLICY AS THE EMBEDDED ARM. l3d_dense.py passes
478492
# -Darcadedb.vectorIndex.graphBuildCacheSize to the embedded JVM and this did not, so
479493
# the two ArcadeDB deployments ran DIFFERENT cache policies: embedded bounded at
@@ -577,11 +591,23 @@ def print_heap_policy():
577591
"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)
578592
# Heap parity with the embedded deployment (protocol: same JVM-heap
579593
# 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.
584608
"server_env": ["-e", "ARCADEDB_OPTS_MEMORY=-Xms{heap} -Xmx{heap}",
609+
# see the ARCADEDB_OPTS_GC note above
610+
"-e", "ARCADEDB_OPTS_GC=",
585611
# SAME BUILD-CACHE POLICY AS THE EMBEDDED ARM. l3d_dense.py passes
586612
# -Darcadedb.vectorIndex.graphBuildCacheSize to the embedded JVM and this did not, so
587613
# the two ArcadeDB deployments ran DIFFERENT cache policies: embedded bounded at
@@ -651,6 +677,8 @@ def print_heap_policy():
651677
"image": "dbbench:client",
652678
"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)
653679
"server_env": ["-e", "ARCADEDB_OPTS_MEMORY=-Xms{heap} -Xmx{heap}",
680+
# see the ARCADEDB_OPTS_GC note above
681+
"-e", "ARCADEDB_OPTS_GC=",
654682
# SAME BUILD-CACHE POLICY AS THE EMBEDDED ARM. l3d_dense.py passes
655683
# -Darcadedb.vectorIndex.graphBuildCacheSize to the embedded JVM and this did not, so
656684
# the two ArcadeDB deployments ran DIFFERENT cache policies: embedded bounded at
@@ -676,6 +704,8 @@ def print_heap_policy():
676704
"image": "dbbench:client",
677705
"server_image": "arcadedata/arcadedb:26.8.1@sha256:49036720b1678b9c7a6dbf22fc34a812c8d7bed15508c22cbb02c0dddc0ca16a", # RELEASED 26.8.1, matches the 26.8.1 wheel
678706
"server_env": ["-e", "ARCADEDB_OPTS_MEMORY=-Xms{heap} -Xmx{heap}",
707+
# see the ARCADEDB_OPTS_GC note above
708+
"-e", "ARCADEDB_OPTS_GC=",
679709
"-e", "JAVA_OPTS=-Darcadedb.server.rootPassword=dbbenchpass "
680710
"-Darcadedb.server.defaultDatabases=bench[root] "
681711
"-Darcadedb.queryMaxHeapElementsAllowedPerOp=5000000 "

0 commit comments

Comments
 (0)