From db917384d837808b9f2593b06abeb7bd2fa3af9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20Geisend=C3=B6rfer?= Date: Fri, 15 Nov 2024 18:10:50 +0000 Subject: [PATCH] poc: use frame pointer unwinding for go arm64 This was mostly a learning project for me. I now understand the eBPF unwinding code and coredump testing infrastructure a lot better (it's very cool). More work would be needed to turn this into a proper patch. The way it's currently implemented doesn't really provide any benefits, but I think in theory frame pointer unwinding could greatly decrease the amount of stack delta memory needed when dealing with large Go applications. For now I don't plan to continue with this, but I'm uploading this patch in case somebody else feels inspired to continue at some point ... --- nativeunwind/elfunwindinfo/elfgopclntab.go | 44 +++++++--- support/ebpf/native_stack_trace.ebpf.c | 7 +- support/ebpf/tracer.ebpf.release.arm64 | Bin 291032 -> 291488 bytes .../testdata/arm64/hello.1900091.hello5.json | 75 ++++++++++++++++++ 4 files changed, 116 insertions(+), 10 deletions(-) create mode 100644 tools/coredump/testdata/arm64/hello.1900091.hello5.json diff --git a/nativeunwind/elfunwindinfo/elfgopclntab.go b/nativeunwind/elfunwindinfo/elfgopclntab.go index a0ac5b9f..2e361d1f 100644 --- a/nativeunwind/elfunwindinfo/elfgopclntab.go +++ b/nativeunwind/elfunwindinfo/elfgopclntab.go @@ -141,6 +141,14 @@ func IsGo118orNewer(magic uint32) bool { return magic == magicGo1_18 || magic == magicGo1_20 } +// IsGo121OrNewer returns true if magic matches with the Go 1.21 or newer. +// TODO(fg): This is actually checking for go1.21 right now, I need to figure +// out how to detect go1.21+ here. But it "works" b/c the existing coredump test +// cases are for go1.18. +func IsGo21orNewer(magic uint32) bool { + return magic == magicGo1_20 +} + // pclntabHeaderSignature returns a byte slice that can be // used to verify if some bytes represent a valid pclntab header. func pclntabHeaderSignature(arch elf.Machine) []byte { @@ -550,7 +558,19 @@ func (ee *elfExtractor) parseGoPclntab() error { return err } case elf.EM_AARCH64: - if err := parseArm64pclntabFunc(ee.deltas, fun, dataLen, pctab, i, + if !IsGo21orNewer(hdr.magic) { + // Before go1.21 frame pointers were not properly kept on arm64 + // when the Go runtime copies the stack during + // `runtime.morestack` calls: all old frame pointers are set to + // 0. + // + // https://github.com/golang/go/blob/c318f191/src/runtime/stack.go#L676 + // https://blog.felixge.de/waiting-for-go1-21-execution-tracing-with-less-than-one-percent-overhead/ + // + // We thus need to unwind with stack delta offsets. + strategy = strategyDeltasWithoutRBP + } + if err := parseArm64pclntabFunc(ee.deltas, fun, dataLen, pctab, strategy, i, hdr.quantum); err != nil { return err } @@ -628,7 +648,8 @@ func parseX86pclntabFunc(deltas *sdtypes.StackDeltaArray, fun *pclntabFunc, data // parseArm64pclntabFunc extracts interval information from ARM64 based pclntabFunc. func parseArm64pclntabFunc(deltas *sdtypes.StackDeltaArray, fun *pclntabFunc, - dataLen uintptr, pctab []byte, i uint64, quantum uint8) error { + dataLen uintptr, pctab []byte, strategy int, i uint64, quantum uint8) error { + if fun.pcspOff == 0 { // Some CGO functions don't have PCSP info: skip them. return nil @@ -637,13 +658,6 @@ func parseArm64pclntabFunc(deltas *sdtypes.StackDeltaArray, fun *pclntabFunc, return fmt.Errorf(".gopclntab func %v pcspOff = %d is invalid", i, fun.pcspOff) } - // On ARM64, frame pointers are not properly kept when the Go runtime copies the stack during - // `runtime.morestack` calls: all old frame pointers are set to 0. - // - // https://github.com/golang/go/blob/c318f191/src/runtime/stack.go#L676 - // - // We thus need to unwind with stack delta offsets. - hint := sdtypes.UnwindHintKeep p := newPcval(pctab[fun.pcspOff:], uint(fun.startPc), quantum) for ok := true; ok; ok = p.step() { @@ -651,6 +665,18 @@ func parseArm64pclntabFunc(deltas *sdtypes.StackDeltaArray, fun *pclntabFunc, if p.val == 0 { // Return instruction, function prologue or leaf function body: unwind via LR. info = sdtypes.UnwindInfoLR + } else if strategy == strategyFramePointer { + param, ok := sdtypes.PackDerefParam(0, 8) + if !ok { + panic("bad") + } + // Use stack frame-pointer delta + info = sdtypes.UnwindInfo{ + Opcode: sdtypes.UnwindOpcodeBaseFP | sdtypes.UnwindOpcodeFlagDeref, + Param: param, + FPOpcode: sdtypes.UnwindOpcodeBaseSP, + FPParam: 0, + } } else { // Regular basic block in the function body: unwind via SP. info = sdtypes.UnwindInfo{ diff --git a/support/ebpf/native_stack_trace.ebpf.c b/support/ebpf/native_stack_trace.ebpf.c index 959099cb..5eb8fd49 100644 --- a/support/ebpf/native_stack_trace.ebpf.c +++ b/support/ebpf/native_stack_trace.ebpf.c @@ -527,6 +527,11 @@ static ErrorCode unwind_one_frame(u64 pid, u32 frame_idx, struct UnwindState *st } } + if (state->fp == 0) { + *stop = true; + return ERR_OK; + } + UnwindInfo *info = bpf_map_lookup_elem(&unwind_info_array, &unwindInfo); if (!info) { increment_metric(metricID_UnwindNativeErrBadUnwindInfoIndex); @@ -589,7 +594,7 @@ static ErrorCode unwind_one_frame(u64 pid, u32 frame_idx, struct UnwindState *st // this implies that if no other changes are applied to the stack such // as alloca(), following the prolog SP/FP points to the frame record // itself, in such a case FP offset will be equal to 8 - if (info->fpParam == 8) { + if (info->fpParam == 8 || (info->opcode == (UNWIND_OPCODEF_DEREF | UNWIND_OPCODE_BASE_FP))) { // we can assume the presence of frame pointers if (info->fpOpcode != UNWIND_OPCODE_BASE_LR) { // FP precedes the RA on the stack (Aarch64 ABI requirement) diff --git a/support/ebpf/tracer.ebpf.release.arm64 b/support/ebpf/tracer.ebpf.release.arm64 index ecac9895a53d1f5bcafec570197a20e0625dade4..bdadaa9bdc94a47a66a4fd565e7123c7aa45d1b2 100644 GIT binary patch delta 45161 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 x?NGBf%7v6_HzhW6mVP_=QYff)j|MtM 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 HBlQ0Px#E7_ diff --git a/tools/coredump/testdata/arm64/hello.1900091.hello5.json b/tools/coredump/testdata/arm64/hello.1900091.hello5.json new file mode 100644 index 00000000..0fd325f6 --- /dev/null +++ b/tools/coredump/testdata/arm64/hello.1900091.hello5.json @@ -0,0 +1,75 @@ +{ + "coredump-ref": "f941d6492b38f927820f32ab65196c88a357154e4d04a1502a02e268421448c0", + "threads": [ + { + "lwp": 1900091, + "frames": [ + "hello+0x92d4c", + "hello+0x92ceb", + "hello+0x92c33", + "hello+0x92bef", + "hello+0x92afb", + "hello+0x92ac7", + "hello+0x92dcb", + "hello+0x456fb", + "hello+0x73b03" + ] + }, + { + "lwp": 1900101, + "frames": [ + "hello+0x748e4", + "hello+0x530fb", + "hello+0x48a47", + "hello+0x48997", + "hello+0x716af" + ] + }, + { + "lwp": 1900102, + "frames": [ + "hello+0x74f4c", + "hello+0x3feeb", + "hello+0x1aefb", + "hello+0x4a723", + "hello+0x4c69f", + "hello+0x4dae7", + "hello+0x4e17f", + "hello+0x71723" + ] + }, + { + "lwp": 1900103, + "frames": [ + "hello+0x74f4c", + "hello+0x3feeb", + "hello+0x1aefb", + "hello+0x4a723", + "hello+0x4b37b", + "hello+0x4daab", + "hello+0x4e17f", + "hello+0x71723" + ] + }, + { + "lwp": 1900104, + "frames": [ + "hello+0x74f4c", + "hello+0x3feeb", + "hello+0x1aefb", + "hello+0x4a723", + "hello+0x4c69f", + "hello+0x4dae7", + "hello+0x48a77", + "hello+0x48997", + "hello+0x716af" + ] + } + ], + "modules": [ + { + "ref": "a2dbc7c1f120e00e2da9881afad3eccb2a4b6d0469d28851acb59c4e570f4012", + "local-path": "/home/bits/go/src/github.com/open-telemetry/opentelemetry-ebpf-profiler/tools/coredump/hello" + } + ] +}