Skip to content

Commit e1bf3cc

Browse files
authored
ebpf: export PossibleCPU
Make PossibleCPU available to users of the package. This allows pre-allocating per-CPU slices. Signed-off-by: Alun Evans <[email protected]>
1 parent 0acd95c commit e1bf3cc

File tree

5 files changed

+27
-17
lines changed

5 files changed

+27
-17
lines changed

internal/cpu.go cpu.go

+20-4
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,33 @@
1-
package internal
1+
package ebpf
22

33
import (
44
"fmt"
55
"os"
66
"strings"
7+
8+
"github.com/cilium/ebpf/internal"
79
)
810

9-
// PossibleCPUs returns the max number of CPUs a system may possibly have
10-
// Logical CPU numbers must be of the form 0-n
11-
var PossibleCPUs = Memoize(func() (int, error) {
11+
var possibleCPU = internal.Memoize(func() (int, error) {
1212
return parseCPUsFromFile("/sys/devices/system/cpu/possible")
1313
})
1414

15+
// PossibleCPU returns the max number of CPUs a system may possibly have
16+
// Logical CPU numbers must be of the form 0-n
17+
func PossibleCPU() (int, error) {
18+
return possibleCPU()
19+
}
20+
21+
// MustPossibleCPU is a helper that wraps a call to PossibleCPU and panics if
22+
// the error is non-nil.
23+
func MustPossibleCPU() int {
24+
cpus, err := PossibleCPU()
25+
if err != nil {
26+
panic(err)
27+
}
28+
return cpus
29+
}
30+
1531
func parseCPUsFromFile(path string) (int, error) {
1632
spec, err := os.ReadFile(path)
1733
if err != nil {

internal/cpu_test.go cpu_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package internal
1+
package ebpf
22

33
import (
44
"testing"

map.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ func (spec *MapSpec) fixupMagicFields() (*MapSpec, error) {
133133
spec.KeySize = 4
134134
spec.ValueSize = 4
135135

136-
n, err := internal.PossibleCPUs()
136+
n, err := PossibleCPU()
137137
if err != nil {
138138
return nil, fmt.Errorf("fixup perf event array: %w", err)
139139
}
@@ -515,7 +515,7 @@ func newMap(fd *sys.FD, name string, typ MapType, keySize, valueSize, maxEntries
515515
return m, nil
516516
}
517517

518-
possibleCPUs, err := internal.PossibleCPUs()
518+
possibleCPUs, err := PossibleCPU()
519519
if err != nil {
520520
return nil, err
521521
}

map_test.go

+2-8
Original file line numberDiff line numberDiff line change
@@ -1314,10 +1314,7 @@ func TestIterateMapInMap(t *testing.T) {
13141314
func TestPerCPUMarshaling(t *testing.T) {
13151315
for _, typ := range []MapType{PerCPUHash, PerCPUArray, LRUCPUHash} {
13161316
t.Run(typ.String(), func(t *testing.T) {
1317-
numCPU, err := internal.PossibleCPUs()
1318-
if err != nil {
1319-
t.Fatal(err)
1320-
}
1317+
numCPU := MustPossibleCPU()
13211318
if numCPU < 2 {
13221319
t.Skip("Test requires at least two CPUs")
13231320
}
@@ -1372,10 +1369,7 @@ type bpfCgroupStorageKey struct {
13721369
}
13731370

13741371
func TestCgroupPerCPUStorageMarshaling(t *testing.T) {
1375-
numCPU, err := internal.PossibleCPUs()
1376-
if err != nil {
1377-
t.Fatal(err)
1378-
}
1372+
numCPU := MustPossibleCPU()
13791373
if numCPU < 2 {
13801374
t.Skip("Test requires at least two CPUs")
13811375
}

marshalers.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ func marshalPerCPUValue(slice any, elemLength int) (sys.Pointer, error) {
5353
return sys.Pointer{}, errors.New("per-CPU value requires slice")
5454
}
5555

56-
possibleCPUs, err := internal.PossibleCPUs()
56+
possibleCPUs, err := PossibleCPU()
5757
if err != nil {
5858
return sys.Pointer{}, err
5959
}
@@ -91,7 +91,7 @@ func unmarshalPerCPUValue(slicePtr any, elemLength int, buf []byte) error {
9191
return fmt.Errorf("per-cpu value requires pointer to slice")
9292
}
9393

94-
possibleCPUs, err := internal.PossibleCPUs()
94+
possibleCPUs, err := PossibleCPU()
9595
if err != nil {
9696
return err
9797
}

0 commit comments

Comments
 (0)