From 75c483ec6443f731cc6f2149c4738547eb602c6f Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Fri, 8 May 2026 23:18:52 +0300 Subject: swap global filter in place to skip BPF reattach Changing the global filter used to call stopTrace + beginTraceCmd, which detached and re-attached every tracepoint and re-loaded the BPF object. On heavily loaded I/O systems that took several seconds and showed an 'Attaching tracepoints...' overlay each time. The probe set never depends on the global filter (ShouldIAttachTracepoint only reads CLI regex flags), so the restart was gratuitous. Now the eventloop holds its filter behind atomic.Pointer with SetFilter / Filter accessors, and the trace starter registers el.SetFilter via the runtime bindings as a SetLiveFilterSetter callback. applyGlobalFilter and undoGlobalFilter call runtime.applyLiveFilter first; only if no trace is running do they fall back to the full restart path. --- internal/eventloop_runtime.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'internal/eventloop_runtime.go') diff --git a/internal/eventloop_runtime.go b/internal/eventloop_runtime.go index 7f540ec..85a90a1 100644 --- a/internal/eventloop_runtime.go +++ b/internal/eventloop_runtime.go @@ -123,7 +123,7 @@ func (e *eventLoop) initRawHandlers() { if !ok { return } - if e.filter.MatchOpenEvent(openEv) { + if e.Filter().MatchOpenEvent(openEv) { e.tracepointEntered(openEv) } } @@ -174,7 +174,7 @@ func (e *eventLoop) initRawHandlers() { if !ok { return } - if e.filter.MatchNameEvent(nameEv) { + if e.Filter().MatchNameEvent(nameEv) { e.tracepointEntered(nameEv) } } @@ -183,7 +183,7 @@ func (e *eventLoop) initRawHandlers() { if !ok { return } - if e.filter.MatchPathEvent(pathEv) { + if e.Filter().MatchPathEvent(pathEv) { e.tracepointEntered(pathEv) } } @@ -223,7 +223,7 @@ func (e *eventLoop) tracepointEntered(enterEv event.Event) { tid := enterEv.GetTid() // Schedule comm lookup as early as possible to reduce races for short-lived processes. e.queueCommLookup(tid) - if !e.filter.UsesCommFilter() { + if !e.Filter().UsesCommFilter() { e.pairs.set(enterEv) return } -- cgit v1.2.3