@@ -64,21 +64,14 @@ const (
6464
6565var (
6666 perfMapList = make (map [* elf.PerfMap ]* elf.Module )
67- // total workers spawned by the different events PerfMaps
68- eventWorkers = 0
69- perfMapName = "proc-events"
70-
71- // default value is 8.
72- // Not enough to handle high loads such http downloads, torent traffic, etc.
73- // (regular desktop usage)
74- ringBuffSize = 64 // * PAGE_SIZE (4k usually)
67+ perfMapName = "proc-events"
7568)
7669
7770func initEventsStreamer () * Error {
7871 elfOpts := make (map [string ]elf.SectionParams )
79- elfOpts ["maps/" + perfMapName ] = elf.SectionParams {PerfRingBufferPageCount : ringBuffSize }
72+ elfOpts ["maps/" + perfMapName ] = elf.SectionParams {PerfRingBufferPageCount : ebpfCfg . RingBuffSize }
8073 var err error
81- perfMod , err = core .LoadEbpfModule ("opensnitch-procs.o" , modulesPath )
74+ perfMod , err = core .LoadEbpfModule ("opensnitch-procs.o" , ebpfCfg . ModulesPath )
8275 if err != nil {
8376 dispatchErrorEvent (fmt .Sprint ("[eBPF events]: " , err ))
8477 return & Error {EventsNotAvailable , err }
@@ -110,6 +103,7 @@ Verify that your kernel has support for tracepoints (opensnitchd -check-requirem
110103 }
111104
112105 if err = perfMod .EnableKprobes (0 ); err != nil {
106+ log .Error ("Error enabling kprobe: %s" , err )
113107 // if previous shutdown was unclean, then we must remove the dangling kprobe
114108 // and install it again (close the module and load it again)
115109 perfMod .Close ()
@@ -128,7 +122,6 @@ Verify that your kernel has support for tracepoints (opensnitchd -check-requirem
128122 <- sig
129123 }(sig )
130124
131- eventWorkers = 0
132125 if err := initPerfMap (perfMod ); err != nil {
133126 return & Error {EventsNotAvailable , err }
134127 }
@@ -137,7 +130,7 @@ Verify that your kernel has support for tracepoints (opensnitchd -check-requirem
137130}
138131
139132func initPerfMap (mod * elf.Module ) error {
140- perfChan := make (chan []byte )
133+ perfChan := make (chan []byte , ebpfCfg . QueueEventsSize )
141134 lostEvents := make (chan uint64 , 1 )
142135 var err error
143136 perfMap , err := elf .InitPerfMap (mod , perfMapName , perfChan , lostEvents )
@@ -147,8 +140,7 @@ func initPerfMap(mod *elf.Module) error {
147140 }
148141 perfMapList [perfMap ] = mod
149142
150- eventWorkers += 8
151- for i := 0 ; i < eventWorkers ; i ++ {
143+ for i := 0 ; i < ebpfCfg .EventsWorkers ; i ++ {
152144 go streamEventsWorker (i , perfChan , lostEvents , kernelEvents )
153145 }
154146 perfMap .PollStart ()
@@ -174,7 +166,7 @@ func streamEventsWorker(id int, chn chan []byte, lost chan uint64, kernelEvents
174166 case <- ctxTasks .Done ():
175167 goto Exit
176168 case l := <- lost :
177- log .Debug ("Lost ebpf events: %d" , l )
169+ log .Debug ("Lost ebpf events (try increasing QueueEventsSize/EventsWorkers) : %d" , l )
178170 case d := <- chn :
179171 if err := binary .Read (bytes .NewBuffer (d ), hostByteOrder , & event ); err != nil {
180172 log .Debug ("[eBPF events #%d] error: %s" , id , err )
0 commit comments