Skip to content

Commit f60cccc

Browse files
committed
Test
Signed-off-by: Anastasios Papagiannis <tasos.papagiannnis@gmail.com>
1 parent 08b79a9 commit f60cccc

File tree

5 files changed

+45
-31
lines changed

5 files changed

+45
-31
lines changed

pkg/selectors/kernel.go

+3-4
Original file line numberDiff line numberDiff line change
@@ -1258,17 +1258,16 @@ func parseSelector(
12581258
//
12591259
// For some examples, see kernel_test.go
12601260
func InitKernelSelectors(selectors []v1alpha1.KProbeSelector, args []v1alpha1.KProbeArg, actionArgTable *idtable.Table) ([4096]byte, error) {
1261-
kernelSelectors, err := InitKernelSelectorState(selectors, args, actionArgTable, nil)
1261+
kernelSelectors, err := InitKernelSelectorState(selectors, args, actionArgTable, nil, true)
12621262
if err != nil {
12631263
return [4096]byte{}, err
12641264
}
12651265
return kernelSelectors.e, nil
12661266
}
12671267

12681268
func InitKernelSelectorState(selectors []v1alpha1.KProbeSelector, args []v1alpha1.KProbeArg,
1269-
actionArgTable *idtable.Table, listReader ValueReader) (*KernelSelectorState, error) {
1270-
kernelSelectors := NewKernelSelectorState(listReader)
1271-
1269+
actionArgTable *idtable.Table, listReader ValueReader, newMaps bool) (*KernelSelectorState, error) {
1270+
kernelSelectors := NewKernelSelectorState(listReader, newMaps)
12721271
WriteSelectorUint32(kernelSelectors, uint32(len(selectors)))
12731272
soff := make([]uint32, len(selectors))
12741273
for i := range selectors {

pkg/selectors/selectors.go

+34-20
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,10 @@ type KernelLPMTrieStringPostfix struct {
7575
data [StringPostfixMaxLength]byte
7676
}
7777

78+
var gStringMaps StringMapLists
79+
var gStringPrefixMaps []map[KernelLPMTrieStringPrefix]struct{}
80+
var gStringPostfixMaps []map[KernelLPMTrieStringPostfix]struct{}
81+
7882
type KernelSelectorState struct {
7983
off uint32 // offset into encoding
8084
e [4096]byte // kernel encoding of selectors
@@ -92,20 +96,30 @@ type KernelSelectorState struct {
9296
newBinVals map[uint32]string // these should be added in the names_map
9397

9498
listReader ValueReader
95-
// stringMaps are used to populate string and char buf matches
96-
stringMaps StringMapLists
9799

100+
// stringMaps are used to populate string and char buf matches
101+
stringMaps *StringMapLists
98102
// stringPrefixMaps are used to populate string and char buf prefix matches
99-
stringPrefixMaps []map[KernelLPMTrieStringPrefix]struct{}
103+
stringPrefixMaps *[]map[KernelLPMTrieStringPrefix]struct{}
100104
// stringPostfixMaps are used to populate string and char buf postfix matches
101-
stringPostfixMaps []map[KernelLPMTrieStringPostfix]struct{}
105+
stringPostfixMaps *[]map[KernelLPMTrieStringPostfix]struct{}
102106
}
103107

104-
func NewKernelSelectorState(listReader ValueReader) *KernelSelectorState {
108+
func NewKernelSelectorState(listReader ValueReader, newMaps bool) *KernelSelectorState {
109+
if newMaps {
110+
for i := 0; i < StringMapsNumSubMaps; i++ {
111+
gStringMaps[i] = nil
112+
}
113+
gStringPrefixMaps = nil
114+
gStringPostfixMaps = nil
115+
}
105116
return &KernelSelectorState{
106-
matchBinaries: make(map[int]*MatchBinariesMappings),
107-
newBinVals: make(map[uint32]string),
108-
listReader: listReader,
117+
matchBinaries: make(map[int]*MatchBinariesMappings),
118+
newBinVals: make(map[uint32]string),
119+
listReader: listReader,
120+
stringMaps: &gStringMaps,
121+
stringPrefixMaps: &gStringPrefixMaps,
122+
stringPostfixMaps: &gStringPostfixMaps,
109123
}
110124
}
111125

@@ -169,11 +183,11 @@ func (k *KernelSelectorState) StringMaps(subMap int) []map[[MaxStringMapsSize]by
169183
}
170184

171185
func (k *KernelSelectorState) StringPrefixMaps() []map[KernelLPMTrieStringPrefix]struct{} {
172-
return k.stringPrefixMaps
186+
return *k.stringPrefixMaps
173187
}
174188

175189
func (k *KernelSelectorState) StringPostfixMaps() []map[KernelLPMTrieStringPostfix]struct{} {
176-
return k.stringPostfixMaps
190+
return *k.stringPostfixMaps
177191
}
178192

179193
// ValueMapsMaxEntries returns the maximum entries over all maps
@@ -223,7 +237,7 @@ func (k *KernelSelectorState) StringMapsMaxEntries(subMap int) int {
223237
// StringPrefixMapsMaxEntries returns the maximum entries over all maps
224238
func (k *KernelSelectorState) StringPrefixMapsMaxEntries() int {
225239
maxEntries := 1
226-
for _, vm := range k.stringPrefixMaps {
240+
for _, vm := range *k.stringPrefixMaps {
227241
if l := len(vm); l > maxEntries {
228242
maxEntries = l
229243
}
@@ -234,7 +248,7 @@ func (k *KernelSelectorState) StringPrefixMapsMaxEntries() int {
234248
// StringPostfixMapsMaxEntries returns the maximum entries over all maps
235249
func (k *KernelSelectorState) StringPostfixMapsMaxEntries() int {
236250
maxEntries := 1
237-
for _, vm := range k.stringPostfixMaps {
251+
for _, vm := range *k.stringPostfixMaps {
238252
if l := len(vm); l > maxEntries {
239253
maxEntries = l
240254
}
@@ -402,8 +416,8 @@ func (k *KernelSelectorState) insertStringMaps(stringMaps SelectorStringMaps) [S
402416

403417
for subMap := 0; subMap < StringMapsNumSubMaps; subMap++ {
404418
if len(stringMaps[subMap]) > 0 {
405-
mapid = uint32(len(k.stringMaps[subMap]))
406-
k.stringMaps[subMap] = append(k.stringMaps[subMap], stringMaps[subMap])
419+
mapid = uint32(len(gStringMaps[subMap]))
420+
gStringMaps[subMap] = append(gStringMaps[subMap], stringMaps[subMap])
407421
} else {
408422
mapid = 0xffffffff
409423
}
@@ -414,13 +428,13 @@ func (k *KernelSelectorState) insertStringMaps(stringMaps SelectorStringMaps) [S
414428
}
415429

416430
func (k *KernelSelectorState) newStringPrefixMap() (uint32, map[KernelLPMTrieStringPrefix]struct{}) {
417-
mapid := len(k.stringPrefixMaps)
418-
k.stringPrefixMaps = append(k.stringPrefixMaps, map[KernelLPMTrieStringPrefix]struct{}{})
419-
return uint32(mapid), k.stringPrefixMaps[mapid]
431+
mapid := len(gStringPrefixMaps)
432+
gStringPrefixMaps = append(gStringPrefixMaps, map[KernelLPMTrieStringPrefix]struct{}{})
433+
return uint32(mapid), (gStringPrefixMaps)[mapid]
420434
}
421435

422436
func (k *KernelSelectorState) newStringPostfixMap() (uint32, map[KernelLPMTrieStringPostfix]struct{}) {
423-
mapid := len(k.stringPostfixMaps)
424-
k.stringPostfixMaps = append(k.stringPostfixMaps, map[KernelLPMTrieStringPostfix]struct{}{})
425-
return uint32(mapid), k.stringPostfixMaps[mapid]
437+
mapid := len(gStringPostfixMaps)
438+
gStringPostfixMaps = append(gStringPostfixMaps, map[KernelLPMTrieStringPostfix]struct{}{})
439+
return uint32(mapid), (gStringPostfixMaps)[mapid]
426440
}

pkg/sensors/tracing/generickprobe.go

+6-5
Original file line numberDiff line numberDiff line change
@@ -502,12 +502,11 @@ func createGenericKprobeSensor(
502502
var progs []*program.Program
503503
var maps []*program.Map
504504
var multiIDs, multiRetIDs []idtable.EntryID
505-
var useMulti bool
506505

507506
// use multi kprobe only if:
508507
// - it's not disabled by user
509508
// - there's support detected
510-
useMulti = !option.Config.DisableKprobeMulti &&
509+
useMulti := !option.Config.DisableKprobeMulti &&
511510
bpf.HasKprobeMulti()
512511

513512
in := addKprobeIn{
@@ -528,7 +527,7 @@ func createGenericKprobeSensor(
528527
kprobes[i].Syscall = syscall
529528

530529
for idx := range syms {
531-
out, err := addKprobe(syms[idx], &kprobes[i], &in)
530+
out, err := addKprobe(i, syms[idx], &kprobes[i], &in)
532531
if err != nil {
533532
return nil, err
534533
}
@@ -581,7 +580,7 @@ func createGenericKprobeSensor(
581580
// addKprobe will, amongst other things, create a generic kprobe entry and add
582581
// it to the genericKprobeTable. The caller should make sure that this entry is
583582
// properly removed on kprobe unload.
584-
func addKprobe(funcName string, f *v1alpha1.KProbeSpec, in *addKprobeIn) (out *addKprobeOut, err error) {
583+
func addKprobe(index int, funcName string, f *v1alpha1.KProbeSpec, in *addKprobeIn) (out *addKprobeOut, err error) {
585584
var argSigPrinters []argPrinters
586585
var argReturnPrinters []argPrinters
587586
var setRetprobe bool
@@ -746,8 +745,10 @@ func addKprobe(funcName string, f *v1alpha1.KProbeSpec, in *addKprobeIn) (out *a
746745
hasOverride: selectors.HasOverride(f),
747746
}
748747

748+
fmt.Println("index ==== ", index)
749+
749750
// Parse Filters into kernel filter logic
750-
kprobeEntry.loadArgs.selectors, err = selectors.InitKernelSelectorState(f.Selectors, f.Args, &kprobeEntry.actionArgs, nil)
751+
kprobeEntry.loadArgs.selectors, err = selectors.InitKernelSelectorState(f.Selectors, f.Args, &kprobeEntry.actionArgs, nil, !in.useMulti || (in.useMulti && index == 0))
751752
if err != nil {
752753
return nil, err
753754
}

pkg/sensors/tracing/generictracepoint.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -508,7 +508,7 @@ func (tp *genericTracepoint) InitKernelSelectors(lists []v1alpha1.ListSpec) erro
508508
}
509509
}
510510

511-
selectors, err := selectors.InitKernelSelectorState(selSelectors, selArgs, &tp.actionArgs, &listReader{lists})
511+
selectors, err := selectors.InitKernelSelectorState(selSelectors, selArgs, &tp.actionArgs, &listReader{lists}, true)
512512
if err != nil {
513513
return err
514514
}

pkg/sensors/tracing/genericuprobe.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ func createGenericUprobeSensor(
200200
}
201201

202202
// Parse Filters into kernel filter logic
203-
uprobeSelectorState, err := selectors.InitKernelSelectorState(spec.Selectors, args, nil, nil)
203+
uprobeSelectorState, err := selectors.InitKernelSelectorState(spec.Selectors, args, nil, nil, true)
204204
if err != nil {
205205
return nil, err
206206
}

0 commit comments

Comments
 (0)