Skip to content

[Performance]: Standalone BVT ~1.77× slower on arm64-mo-shanghai-8c16g vs ubuntu-22.04 (median script ~2.5×) #25116

Open

Description

@heni02

Summary

CI A/B validation (ci-test run 28020049513) compared Standalone BVT Pessimistic on the same matrixorigin/matrixone@main commit, same mo-tester flags (-e optimistic -s resources), only runner/arch differs:

ARM x86
Runner arm64-mo-shanghai-8c16g (8 CPU / 16 GiB K8s pod) ubuntu-22.04 GitHub hosted
Job 82933895760 82933819100
Start BVT Test wall time 59.5 min 33.7 min
Ratio 1.77×

Both jobs passed (functional correctness OK). Build on the same ARM runner was faster than x86 in the same run (~5.8 min vs ~7.0 min), so the gap is MO runtime / SQL execution, not compile time.

Artifacts: bvt-report-arm-pessimistic vs bvt-report-x86-pessimistic (1009 scripts each).


Environment

  • MatrixOne: matrixorigin/matrixone branch main (ci-test workflow inputs)
  • mo-tester: main, ./run.sh -n -g -o -p .../cases -s .../resources -e optimistic
  • ARM runner: arm64-mo-shanghai-8c16g, Shanghai self-hosted K8s pod
  • x86 runner: ubuntu-22.04 GitHub Actions hosted
  • Validation workflow: ARM Runner Migration Test with run_x86_baselines=true

mo-tester aggregate (from report.txt)

Metric ARM x86 Ratio
Total script time (1009 scripts) 3549.8 s (~59.2 min) 2010.1 s (~33.5 min) 1.77×
Report [SUMMARY] COST 3175 s 1710 s 1.86×
Median per-script ratio 2.53×
Mean per-script ratio 2.61×

Per-script ratio distribution (n=1003)

Bucket Count
ARM faster (<1.0×) 35
1.0–1.5× 124
1.5–2.0× 179
2.0–3.0× 277
≥3.0× 388

Not a few outliers: ~746 scripts with x86 duration <1 s still have median 2.63× on ARM. Slowdown is broad-based on short/medium SQL cases.

Slowdown by x86 script duration

x86 bucket Scripts Aggregate ARM/x86 Median ratio
<1 s 746 2.67× 2.63×
1–5 s 170 2.39× 2.38×
5–30 s 78 1.89× 2.09×
≥30 s 9 0.94× 1.02×

Long fixed-wait cases (sleep/cron/restore polling) are ~1.0×; they dilute job-level average but do not explain the gap.

Examples (ratio ≈ 1.0×): function/func_sleep.sql, pessimistic_transaction/vector/vector_ivf_restore_idxcron.sql (~105 s both sides).


Top categories by ARM extra time

Category ARM total x86 total Aggregate ratio
snapshot/ 936 s 321 s 2.92×
tenant/ 96 s 32 s 3.02×
join/ 89 s 30 s 2.96×
zz_accesscontrol/ 123 s 45 s 2.75×
optimizer/ 170 s 69 s 2.46×
pessimistic_transaction/ 850 s 718 s 1.18× (many fixed-wait vector/fulltext cases)

Top single-script contributors to ARM − x86 delta (~25.7 min total)

Extra time Ratio Script
+65 s 3.59× optimizer/shuffle.test
+47 s 2.99× join/spill.sql
+29 s 2.51× pessimistic_transaction/vector/vector_hnsw_f64.sql
+25 s 3.10× snapshot/restore_dropped_account.sql
+24 s 2.52× zz_accesscontrol/create_account.sql

ARM faster example: fulltext/gojieba.sql 60 s vs 102.8 s (0.58×).


Impact

  • CI: Standalone / Upgrade BVT jobs are not suitable for arm64-mo-shanghai-8c16g today (~2× wall time); plan keeps BVT on ubuntu-22.04.
  • Product: If ARM64 is a delivery target, ~2.5× median SQL case slowdown needs investigation before perf parity with amd64.

Initial assessment

  • Not observed as functional bug (BVT passed; fixed-wait cases match).
  • Likely arm64 runtime / query-path performance gap (optimization debt), not mo-tester or CI framework overhead.

Suggested next steps

  1. Profile on ARM vs x86 for top delta scripts: optimizer/shuffle.test, join/spill.sql, snapshot/restore_dropped_account.sql.
  2. Check ARM runner CPU features (CRC32/AES etc.) affecting hash hot paths (pkg/container/hashtable/hash_arm64.go).
  3. Track arm64 BVT duration as a perf metric if ARM CI coverage expands later.

References

Activity

  1. added theissue type on Jun 24, 2026
  2. heni02 commented on Jun 24, 2026

    @heni02
    ContributorAuthor

    同一个 main 的 pr,对比 ubuntu(amd64)和 arm64 机器上 bvt运行的耗时
    Image

  3. heni02 commented on Jun 24, 2026

    @heni02
    ContributorAuthor

    试了 3.0-dev 现象也是一样的

  4. added
    severity/s1High impact: Logical errors or data errors that must occur
    on Jun 30, 2026
  5. added this to the MO-202607 milestone on Jun 30, 2026
  6. added
    severity/s0Active / top priority for current sprint. Owner has committed to working on it now.
    and removed
    severity/s1High impact: Logical errors or data errors that must occur
    on Jul 1, 2026
  7. assigned and unassigned on Jul 15, 2026
  8. VioletQwQ-0 commented on Jul 31, 2026

    @VioletQwQ-0
    Collaborator

    Deferred after triage.

    Reason: the original 1.77x ARM-vs-Ubuntu result does not isolate an ARM64 MatrixOne regression. That comparison also changed CPU model, self-hosted Kubernetes vs GitHub-hosted VM, storage/runner environment, and setup action (setup-env@alter_runner_arm vs setup-env@main). Production ARM performance parity is not currently established as a release blocker, and MatrixOne PR BVT remains on the Ubuntu runner by default.

    Current evidence: the later three-runner comparison run 28634290094 used the same MatrixOne SHA (3b4a447fd1741810fd821fdd031da6616529817f), mo-tester SHA (b95f5c09930c42bdbe77828b6ae72d39f2be48ed), and setup-action SHA for ARM and GitHub Ubuntu. Both completed 95,617 test statements with 100% success; BVT summary cost was 2039s on ARM vs 1676s on Ubuntu, approximately 1.22x rather than 1.77x. The self-hosted AMD leg used a different MatrixOne SHA and is not accepted as an architecture comparator. PR #26179 reduced the CI critical path but did not fix or close this product-performance question.

    To promote later: first commit an ARM delivery/parity target and an acceptance threshold, then reproduce it with exact pinned MatrixOne/mo-tester/setup SHAs, comparable self-hosted ARM and AMD resources/storage, and at least 3-5 alternating runs. Capture CPU model/frequency, cgroup throttling, node load, storage latency, and CPU/block/mutex profiles for representative short-SQL, join/spill, and snapshot cases. Promote to active severity only if that controlled evidence repeatedly breaches the agreed threshold.

  9. removed this from the MO-202607 milestone on Jul 31, 2026
  10. removed
    kind/bugSomething isn't working
    severity/s0Active / top priority for current sprint. Owner has committed to working on it now.
    on Jul 31, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions