Skip to content

coredump: test Tarantool LuaJIT unwinding on amd64 and arm64 - #51

Closed
dalehamel wants to merge 1 commit into
dale/luajit-tarantool-parcafrom
dale/luajit-tarantool-coredumps
Closed

dalehamel wants to merge 1 commit into
dale/luajit-tarantool-parcafrom
dale/luajit-tarantool-coredumps

Conversation

@dalehamel

Copy link
Copy Markdown
Member

Tarantool LuaJIT coredump coverage

Stacked on the Tarantool runtime port in parca-dev/opentelemetry-ebpf-profiler#316. This PR targets the parent branch in the Shopify fork because GitHub cannot use a fork-only PR head as the base of another PR in parca-dev; it can move upstream once open-telemetry#316 lands or its head is mirrored there.

What this proves

  • Adds deterministic amd64 and arm64 coredumps of statically linked, GC64 Tarantool.
  • Exercises host-executable detection, hidden-symbol offset extraction, Lua frame recovery, and native handback across Tarantool fibers.
  • Resolves real Lua source frames (fib, churn, hot_loop, and main) and native Tarantool frames.
  • Documents the expected replay-only ?+0x0 boundary frame and arm64 fiber-trampoline CFI boundary.

The captures use jit.off(true, true). Offline coredump replay is single-pass and cannot perform the live report_pid -> SynchronizeMappings rerun required to associate anonymous JIT mcode with G; interpreter-mode captures therefore provide deterministic end-to-end coverage. JIT mcode remains covered by live profiling and focused extractor tests.

Validation

Both unskipped fixtures pass their exact goldens in architecture-matched Linux development containers:

PASS: TestCoreDumps/testdata/amd64/luajit-tarantool-amd64.json
PASS: TestCoreDumps/testdata/arm64/luajit-tarantool-arm64.json

The amd64 fixture unwinds 22 recursive Lua frames through hot_loop and seven native Tarantool frames. The arm64 fixture recovers churn -> hot_loop -> main before the documented native fiber CFI boundary.

External artifacts

The packed cores/modules are intentionally outside Git. Twelve content-addressed objects (about 99 MiB total) are staged locally but still need uploading to the public parca-coredump-artifacts GCS fallback. dale.hamel@shopify.com can read the bucket but lacks storage.objects.create; a Parca maintainer needs to grant temporary object-creator access or perform the upload before fork CI can fetch them.

Assisted-By: devx/c2bfb8bf-4688-4938-9621-a3654ee983f3
@dalehamel
dalehamel force-pushed the dale/luajit-tarantool-parca branch from a57138b to 1cc9153 Compare July 15, 2026 02:16
@dalehamel
dalehamel force-pushed the dale/luajit-tarantool-coredumps branch from 0e76d05 to ed2d6ba Compare July 15, 2026 02:16
@dalehamel

Copy link
Copy Markdown
Member Author

Superseded by the draft upstream PR parca-dev#317, stacked on parca-dev#316.

@dalehamel dalehamel closed this Jul 15, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant