github.com/criyle/go-sandbox@v0.10.3/pkg/cgroup/benchmark_linux_test.go (about) 1 package cgroup 2 3 import ( 4 "os" 5 "testing" 6 ) 7 8 func BenchmarkCgroup(b *testing.B) { 9 if err := EnableV2Nesting(); err != nil { 10 b.Fatal(err) 11 } 12 ct, err := GetAvailableControllerV2() 13 if err != nil { 14 b.Fatal(err) 15 } 16 builder, err := New("benchmark", ct) 17 if err != nil { 18 b.Fatal(err) 19 } 20 defer builder.Destroy() 21 b.ResetTimer() 22 for i := 0; i < b.N; i++ { 23 cg, err := builder.New("test") 24 if err != nil { 25 b.Fatal(err) 26 } 27 if err := cg.SetCPUSet([]byte("0")); err != nil { 28 b.Fatal(err) 29 } 30 if err := cg.SetMemoryLimit(4096); err != nil { 31 b.Fatal(err) 32 } 33 if err := cg.SetProcLimit(1); err != nil { 34 b.Fatal(err) 35 } 36 if _, err := cg.CPUUsage(); err != nil { 37 b.Fatal(err) 38 } 39 if _, err := cg.MemoryMaxUsage(); err != nil { 40 b.Fatal(err) 41 } 42 cg.Destroy() 43 } 44 } 45 46 func TestCgroupAll(t *testing.T) { 47 // ensure root privilege when testing 48 if os.Getuid() != 0 { 49 t.Skip("no root privilege") 50 } 51 if err := EnableV2Nesting(); err != nil { 52 t.Fatal(err) 53 } 54 ct, err := GetAvailableControllerV2() 55 if err != nil { 56 t.Fatal(err) 57 } 58 builder, err := New("benchmark", ct) 59 if err != nil { 60 t.Fatal(err) 61 } 62 defer builder.Destroy() 63 if err != nil { 64 t.Fatal(err) 65 } 66 cg, err := builder.New("test") 67 if err != nil { 68 t.Fatal(err) 69 } 70 t.Cleanup(func() { 71 cg.Destroy() 72 }) 73 if err := cg.SetCPUSet([]byte("0")); err != nil { 74 t.Fatal(err) 75 } 76 if err := cg.SetMemoryLimit(4096); err != nil { 77 t.Fatal(err) 78 } 79 if err := cg.SetProcLimit(1); err != nil { 80 t.Fatal(err) 81 } 82 if _, err := cg.CPUUsage(); err != nil { 83 t.Fatal(err) 84 } 85 if _, err := cg.MemoryMaxUsage(); err != nil { 86 t.Fatal(err) 87 } 88 }