From 78dfb8ad0f844099280d102407449da0b456a84e Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Wed, 25 Feb 2026 21:42:59 +0200 Subject: Wire probe manager into tracepoint attach flow --- internal/ior.go | 30 ++++++++++++++++++++++++------ internal/ior_test.go | 11 +++++++++-- 2 files changed, 33 insertions(+), 8 deletions(-) (limited to 'internal') diff --git a/internal/ior.go b/internal/ior.go index 7a1b378..d78c351 100644 --- a/internal/ior.go +++ b/internal/ior.go @@ -14,6 +14,7 @@ import ( "ior/internal/event" "ior/internal/flags" "ior/internal/flamegraph" + "ior/internal/probemanager" "ior/internal/statsengine" "ior/internal/tracepoints" "ior/internal/tui" @@ -23,7 +24,11 @@ import ( ) type tracepointProgram interface { - attachTracepoint(category, name string) error + attachTracepoint(category, name string) (tracepointLink, error) +} + +type tracepointLink interface { + Destroy() error } var ( @@ -40,9 +45,12 @@ type libbpfTracepointProgram struct { prog *bpf.BPFProg } -func (p libbpfTracepointProgram) attachTracepoint(category, name string) error { - _, err := p.prog.AttachTracepoint(category, name) - return err +func (p libbpfTracepointProgram) AttachTracepoint(category, name string) (probemanager.Link, error) { + return p.prog.AttachTracepoint(category, name) +} + +func (p libbpfTracepointProgram) attachTracepoint(category, name string) (tracepointLink, error) { + return p.AttachTracepoint(category, name) } type libbpfTracepointModule struct { @@ -57,6 +65,14 @@ func (m libbpfTracepointModule) getProgram(progName string) (tracepointProgram, return libbpfTracepointProgram{prog: prog}, nil } +func (m libbpfTracepointModule) GetProgram(progName string) (probemanager.Program, error) { + prog, err := m.module.GetProgram(progName) + if err != nil { + return nil, err + } + return libbpfTracepointProgram{prog: prog}, nil +} + func attachTracepoints(bpfModule *bpf.Module) error { return attachTracepointsWith(libbpfTracepointModule{module: bpfModule}, flags.Get().ShouldIAttachTracepoint, tracepoints.List, true) } @@ -81,7 +97,7 @@ func attachTracepointsWith(module tracepointModule, shouldAttach func(string) bo } logln("Attached prog handle_", name) - if err = prog.attachTracepoint("syscalls", name); err != nil { + if _, err = prog.attachTracepoint("syscalls", name); err != nil { // OK, older Kernel versions may not have this tracepoint! logf("Failed to attach to %s tracepoint: %v, kernel version may be too old, skipping", name, err) continue @@ -210,7 +226,9 @@ func runTraceWithContext(parentCtx context.Context, started chan<- struct{}, con return err } - if err := attachTracepointsWith(libbpfTracepointModule{module: bpfModule}, flags.Get().ShouldIAttachTracepoint, tracepoints.List, verbose); err != nil { + mgr := probemanager.NewManager(libbpfTracepointModule{module: bpfModule}) + defer mgr.Close() + if err := mgr.AttachAll(flags.Get().ShouldIAttachTracepoint, tracepoints.List); err != nil { return err } diff --git a/internal/ior_test.go b/internal/ior_test.go index 7f7eb20..43e8091 100644 --- a/internal/ior_test.go +++ b/internal/ior_test.go @@ -11,9 +11,16 @@ type fakeTracepointProgram struct { attachErr error } -func (p *fakeTracepointProgram) attachTracepoint(_, _ string) error { +type fakeTracepointLink struct{} + +func (fakeTracepointLink) Destroy() error { return nil } + +func (p *fakeTracepointProgram) attachTracepoint(_, _ string) (tracepointLink, error) { p.attachCalls++ - return p.attachErr + if p.attachErr != nil { + return nil, p.attachErr + } + return fakeTracepointLink{}, nil } type fakeTracepointModule struct { -- cgit v1.2.3