diff --git a/ebpf/session.go b/ebpf/session.go index da132352cd..f2d1a2a545 100644 --- a/ebpf/session.go +++ b/ebpf/session.go @@ -18,7 +18,6 @@ import ( "syscall" "github.com/cilium/ebpf" - "github.com/cilium/ebpf/btf" "github.com/cilium/ebpf/link" "github.com/cilium/ebpf/perf" "github.com/go-kit/log" @@ -173,12 +172,11 @@ func (s *session) Start() error { if err != nil { return fmt.Errorf("unable to get pid namespace %w", err) } - err = spec.RewriteConstants(map[string]interface{}{ - "global_config": pyrobpf.ProfileGlobalConfigT{ - NsPidIno: nsIno, - }, - }) - if err != nil { + v, ok := spec.Variables["global_config"] + if !ok { + return fmt.Errorf("pyrobpf rewrite constants: variable global_config not found") + } + if err := v.Set(pyrobpf.ProfileGlobalConfigT{NsPidIno: nsIno}); err != nil { return fmt.Errorf("pyrobpf rewrite constants %w", err) } } @@ -189,8 +187,6 @@ func (s *session) Start() error { return fmt.Errorf("load bpf objects: %w", err) } - btf.FlushKernelSpec() // save some memory - eventsReader, err := perf.NewReader(s.bpf.ProfileMaps.Events, 4*os.Getpagesize()) if err != nil { s.stopLocked() diff --git a/ebpf/session_python.go b/ebpf/session_python.go index 7f1e1fc9be..c5ec2a6230 100644 --- a/ebpf/session_python.go +++ b/ebpf/session_python.go @@ -10,7 +10,6 @@ import ( "time" "github.com/cilium/ebpf" - "github.com/cilium/ebpf/btf" "github.com/go-kit/log/level" "github.com/grafana/pyroscope/ebpf/pyrobpf" "github.com/grafana/pyroscope/ebpf/python" @@ -107,8 +106,6 @@ func (s *session) getPyPerf(cause *sd.Target) *python.Perf { } func (s *session) loadPyPerf(cause *sd.Target) (*python.Perf, error) { - defer btf.FlushKernelSpec() // save some memory - opts := &ebpf.CollectionOptions{ Programs: s.progOptions(), MapReplacements: map[string]*ebpf.Map{ @@ -124,14 +121,15 @@ func (s *session) loadPyPerf(cause *sd.Target) (*python.Perf, error) { if err != nil { return nil, fmt.Errorf("unable to get pid namespace %w", err) } - err = spec.RewriteConstants(map[string]interface{}{ - "global_config": python.PerfGlobalConfigT{ - BpfLogErr: boolToU8(s.pythonBPFErrorLogEnabled(cause)), - BpfLogDebug: boolToU8(s.pythonBPFDebugLogEnabled(cause)), - NsPidIno: nsIno, - }, - }) - if err != nil { + v, ok := spec.Variables["global_config"] + if !ok { + return nil, fmt.Errorf("pyperf rewrite constants: variable global_config not found") + } + if err := v.Set(python.PerfGlobalConfigT{ + BpfLogErr: boolToU8(s.pythonBPFErrorLogEnabled(cause)), + BpfLogDebug: boolToU8(s.pythonBPFDebugLogEnabled(cause)), + NsPidIno: nsIno, + }); err != nil { return nil, fmt.Errorf("pyperf rewrite constants %w", err) } if s.options.BPFMapsOptions.SymbolsMapSize != 0 {