Skip to content

Commit 13e9bc7

Browse files
committed
nrt: move utility code outside plugin.go
plugin.go should contain only entry point and orchestration code. Let's move all the utilties and logic to other source code files. Trivial code movement with minimal renames. Signed-off-by: Francesco Romani <[email protected]>
1 parent e9b8aa4 commit 13e9bc7

File tree

4 files changed

+125
-148
lines changed

4 files changed

+125
-148
lines changed

pkg/noderesourcetopology/numaresources.go

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,11 @@ import (
2121
"reflect"
2222

2323
"github.com/go-logr/logr"
24+
2425
corev1 "k8s.io/api/core/v1"
2526
"k8s.io/apimachinery/pkg/api/resource"
2627
v1helper "k8s.io/kubernetes/pkg/apis/core/v1/helper"
28+
2729
"sigs.k8s.io/scheduler-plugins/pkg/noderesourcetopology/stringify"
2830
)
2931

@@ -178,3 +180,36 @@ func subtractResourcesFromNUMANodeList(lh logr.Logger, nodes NUMANodeList, numaI
178180
}
179181
return nil
180182
}
183+
184+
func subtractFromNUMAs(resources corev1.ResourceList, numaNodes NUMANodeList, nodes ...int) {
185+
for resName, quantity := range resources {
186+
for _, node := range nodes {
187+
// quantity is zero no need to iterate through another NUMA node, go to another resource
188+
if quantity.IsZero() {
189+
break
190+
}
191+
192+
nRes := numaNodes[node].Resources
193+
if available, ok := nRes[resName]; ok {
194+
switch quantity.Cmp(available) {
195+
case 0: // the same
196+
// basically zero container resources
197+
quantity.Sub(available)
198+
// zero NUMA quantity
199+
nRes[resName] = resource.Quantity{}
200+
case 1: // container wants more resources than available in this NUMA zone
201+
// substract NUMA resources from container request, to calculate how much is missing
202+
quantity.Sub(available)
203+
// zero NUMA quantity
204+
nRes[resName] = resource.Quantity{}
205+
case -1: // there are more resources available in this NUMA zone than container requests
206+
// substract container resources from resources available in this NUMA node
207+
available.Sub(quantity)
208+
// zero container quantity
209+
quantity = resource.Quantity{}
210+
nRes[resName] = available
211+
}
212+
}
213+
}
214+
}
215+
}

pkg/noderesourcetopology/numaresources_test.go

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -372,6 +372,96 @@ func TestSubtractResourcesFromNUMANodeList(t *testing.T) {
372372
}
373373
}
374374

375+
func TestSubstractNUMA(t *testing.T) {
376+
tcases := []struct {
377+
description string
378+
numaNodes NUMANodeList
379+
nodes []int
380+
resources corev1.ResourceList
381+
expected NUMANodeList
382+
}{
383+
{
384+
description: "simple",
385+
numaNodes: NUMANodeList{
386+
{
387+
NUMAID: 0,
388+
Resources: corev1.ResourceList{
389+
corev1.ResourceCPU: *resource.NewQuantity(8, resource.DecimalSI),
390+
corev1.ResourceMemory: resource.MustParse("10Gi"),
391+
},
392+
},
393+
},
394+
resources: corev1.ResourceList{
395+
corev1.ResourceCPU: *resource.NewQuantity(2, resource.DecimalSI),
396+
corev1.ResourceMemory: resource.MustParse("2Gi"),
397+
},
398+
nodes: []int{0},
399+
expected: NUMANodeList{
400+
{
401+
NUMAID: 0,
402+
Resources: corev1.ResourceList{
403+
corev1.ResourceCPU: *resource.NewQuantity(6, resource.DecimalSI),
404+
corev1.ResourceMemory: resource.MustParse("8Gi"),
405+
},
406+
},
407+
},
408+
},
409+
{
410+
description: "substract resources from 2 NUMA nodes",
411+
numaNodes: NUMANodeList{
412+
{
413+
NUMAID: 0,
414+
Resources: corev1.ResourceList{
415+
corev1.ResourceCPU: *resource.NewQuantity(8, resource.DecimalSI),
416+
corev1.ResourceMemory: resource.MustParse("10Gi"),
417+
},
418+
},
419+
{
420+
NUMAID: 1,
421+
Resources: corev1.ResourceList{
422+
corev1.ResourceCPU: *resource.NewQuantity(8, resource.DecimalSI),
423+
corev1.ResourceMemory: resource.MustParse("10Gi"),
424+
},
425+
},
426+
},
427+
resources: corev1.ResourceList{
428+
corev1.ResourceCPU: *resource.NewQuantity(12, resource.DecimalSI),
429+
corev1.ResourceMemory: resource.MustParse("2Gi"),
430+
},
431+
nodes: []int{0, 1},
432+
expected: NUMANodeList{
433+
{
434+
NUMAID: 0,
435+
Resources: corev1.ResourceList{
436+
corev1.ResourceCPU: *resource.NewQuantity(0, resource.DecimalSI),
437+
corev1.ResourceMemory: resource.MustParse("8Gi"),
438+
},
439+
},
440+
{
441+
NUMAID: 1,
442+
Resources: corev1.ResourceList{
443+
corev1.ResourceCPU: *resource.NewQuantity(4, resource.DecimalSI),
444+
corev1.ResourceMemory: resource.MustParse("10Gi"),
445+
},
446+
},
447+
},
448+
},
449+
}
450+
451+
for _, tcase := range tcases {
452+
t.Run(tcase.description, func(t *testing.T) {
453+
subtractFromNUMAs(tcase.resources, tcase.numaNodes, tcase.nodes...)
454+
for i, node := range tcase.numaNodes {
455+
for resName, quantity := range node.Resources {
456+
if !tcase.expected[i].Resources[resName].Equal(quantity) {
457+
t.Errorf("Expected %s to equal %v instead of %v", resName, tcase.expected[i].Resources[resName], quantity)
458+
}
459+
}
460+
}
461+
})
462+
}
463+
}
464+
375465
func mustParseQuantity(t *testing.T, str string) resource.Quantity {
376466
qty, err := resource.ParseQuantity(str)
377467
if err != nil {

pkg/noderesourcetopology/plugin.go

Lines changed: 0 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import (
2121
"fmt"
2222

2323
v1 "k8s.io/api/core/v1"
24-
"k8s.io/apimachinery/pkg/api/resource"
2524
"k8s.io/apimachinery/pkg/runtime"
2625
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
2726
clientgoscheme "k8s.io/client-go/kubernetes/scheme"
@@ -49,39 +48,6 @@ func init() {
4948
utilruntime.Must(topologyv1alpha2.AddToScheme(scheme))
5049
}
5150

52-
func subtractFromNUMAs(resources v1.ResourceList, numaNodes NUMANodeList, nodes ...int) {
53-
for resName, quantity := range resources {
54-
for _, node := range nodes {
55-
// quantity is zero no need to iterate through another NUMA node, go to another resource
56-
if quantity.IsZero() {
57-
break
58-
}
59-
60-
nRes := numaNodes[node].Resources
61-
if available, ok := nRes[resName]; ok {
62-
switch quantity.Cmp(available) {
63-
case 0: // the same
64-
// basically zero container resources
65-
quantity.Sub(available)
66-
// zero NUMA quantity
67-
nRes[resName] = resource.Quantity{}
68-
case 1: // container wants more resources than available in this NUMA zone
69-
// substract NUMA resources from container request, to calculate how much is missing
70-
quantity.Sub(available)
71-
// zero NUMA quantity
72-
nRes[resName] = resource.Quantity{}
73-
case -1: // there are more resources available in this NUMA zone than container requests
74-
// substract container resources from resources available in this NUMA node
75-
available.Sub(quantity)
76-
// zero container quantity
77-
quantity = resource.Quantity{}
78-
nRes[resName] = available
79-
}
80-
}
81-
}
82-
}
83-
}
84-
8551
type filterFn func(lh logr.Logger, pod *v1.Pod, zones topologyv1alpha2.ZoneList, nodeInfo *framework.NodeInfo) *framework.Status
8652
type scoringFn func(logr.Logger, *v1.Pod, topologyv1alpha2.ZoneList) (int64, *framework.Status)
8753

pkg/noderesourcetopology/plugin_test.go

Lines changed: 0 additions & 114 deletions
This file was deleted.

0 commit comments

Comments
 (0)