Skip to content

Commit 0519d05

Browse files
committed
Find correct cost associated with given NUMA node ID
Signed-off-by: pprokop <[email protected]>
1 parent 6df71a4 commit 0519d05

File tree

2 files changed

+247
-3
lines changed

2 files changed

+247
-3
lines changed

pkg/noderesourcetopology/least_numa.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -137,10 +137,10 @@ func nodesAvgDistance(numaNodes NUMANodeList, nodes ...int) float32 {
137137

138138
for _, node1 := range nodes {
139139
for _, node2 := range nodes {
140-
cost, ok := numaNodes[node1].Costs[node2]
140+
cost, ok := numaNodes[node1].Costs[numaNodes[node2].NUMAID]
141141
// we couldn't read Costs assign maxDistanceValue
142142
if !ok {
143-
klog.Warningf("cannot retrieve Costs information for node %d", node2)
143+
klog.Warningf("cannot retrieve Costs information for node ID %d", numaNodes[node1].NUMAID)
144144
cost = maxDistanceValue
145145
}
146146
accu += cost
@@ -176,7 +176,9 @@ func numaNodesRequired(identifier string, qos v1.PodQOSClass, numaNodes NUMANode
176176
// we have found suitable combination for given bitmaskLen
177177
if suitableCombination != nil {
178178
bm := bitmask.NewEmptyBitMask()
179-
bm.Add(suitableCombination...)
179+
for _, nodeIdx := range suitableCombination {
180+
bm.Add(numaNodes[nodeIdx].NUMAID)
181+
}
180182
return bm, isMinDistance
181183
}
182184
}

pkg/noderesourcetopology/least_numa_test.go

Lines changed: 242 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,248 @@ func TestNUMANodesRequired(t *testing.T) {
271271
expectedErr: nil,
272272
expectedMinDistance: false,
273273
},
274+
{
275+
description: "8 NUMA node optimal distance, not sorted ids",
276+
numaNodes: NUMANodeList{
277+
{
278+
NUMAID: 0,
279+
Resources: v1.ResourceList{
280+
gpuResource: resource.MustParse("1"),
281+
v1.ResourceCPU: *resource.NewQuantity(4, resource.DecimalSI),
282+
v1.ResourceMemory: resource.MustParse("5Gi"),
283+
},
284+
Costs: map[int]int{
285+
0: 10, 1: 20, 2: 40, 3: 30, 4: 20, 5: 30, 6: 50, 7: 40,
286+
},
287+
},
288+
{
289+
NUMAID: 3,
290+
Resources: v1.ResourceList{
291+
gpuResource: resource.MustParse("1"),
292+
v1.ResourceCPU: *resource.NewQuantity(4, resource.DecimalSI),
293+
v1.ResourceMemory: resource.MustParse("5Gi"),
294+
},
295+
Costs: map[int]int{
296+
0: 30, 1: 40, 2: 20, 3: 10, 4: 30, 5: 20, 6: 40, 7: 50,
297+
},
298+
},
299+
{
300+
NUMAID: 5,
301+
Resources: v1.ResourceList{
302+
gpuResource: resource.MustParse("1"),
303+
v1.ResourceCPU: *resource.NewQuantity(4, resource.DecimalSI),
304+
v1.ResourceMemory: resource.MustParse("5Gi"),
305+
},
306+
Costs: map[int]int{
307+
0: 30, 1: 20, 2: 50, 3: 20, 4: 50, 5: 10, 6: 50, 7: 40,
308+
},
309+
},
310+
{
311+
NUMAID: 7,
312+
Resources: v1.ResourceList{
313+
gpuResource: resource.MustParse("1"),
314+
v1.ResourceCPU: *resource.NewQuantity(4, resource.DecimalSI),
315+
v1.ResourceMemory: resource.MustParse("5Gi"),
316+
},
317+
Costs: map[int]int{
318+
0: 40, 1: 50, 2: 30, 3: 50, 4: 20, 5: 40, 6: 30, 7: 10,
319+
},
320+
},
321+
{
322+
NUMAID: 1,
323+
Resources: v1.ResourceList{
324+
gpuResource: resource.MustParse("1"),
325+
v1.ResourceCPU: *resource.NewQuantity(4, resource.DecimalSI),
326+
v1.ResourceMemory: resource.MustParse("5Gi"),
327+
},
328+
Costs: map[int]int{
329+
0: 20, 1: 10, 2: 30, 3: 40, 4: 50, 5: 20, 6: 40, 7: 50,
330+
},
331+
},
332+
{
333+
NUMAID: 6,
334+
Resources: v1.ResourceList{
335+
gpuResource: resource.MustParse("1"),
336+
v1.ResourceCPU: *resource.NewQuantity(4, resource.DecimalSI),
337+
v1.ResourceMemory: resource.MustParse("5Gi"),
338+
},
339+
Costs: map[int]int{
340+
0: 50, 1: 40, 2: 20, 3: 40, 4: 30, 5: 50, 6: 10, 7: 30,
341+
},
342+
},
343+
{
344+
NUMAID: 2,
345+
Resources: v1.ResourceList{
346+
gpuResource: resource.MustParse("1"),
347+
v1.ResourceCPU: *resource.NewQuantity(4, resource.DecimalSI),
348+
v1.ResourceMemory: resource.MustParse("5Gi"),
349+
},
350+
Costs: map[int]int{
351+
0: 40, 1: 30, 2: 10, 3: 20, 4: 40, 5: 50, 6: 20, 7: 30,
352+
},
353+
},
354+
{
355+
NUMAID: 4,
356+
Resources: v1.ResourceList{
357+
gpuResource: resource.MustParse("1"),
358+
v1.ResourceCPU: *resource.NewQuantity(4, resource.DecimalSI),
359+
v1.ResourceMemory: resource.MustParse("5Gi"),
360+
},
361+
Costs: map[int]int{
362+
0: 20, 1: 50, 2: 40, 3: 30, 4: 10, 5: 50, 6: 30, 7: 20,
363+
},
364+
},
365+
},
366+
podResources: v1.ResourceList{
367+
v1.ResourceCPU: *resource.NewQuantity(3, resource.DecimalSI),
368+
v1.ResourceMemory: resource.MustParse("2Gi"),
369+
gpuResource: resource.MustParse("3"),
370+
},
371+
node: node,
372+
expectedBitmask: NewTestBitmask(0, 1, 5),
373+
expectedErr: nil,
374+
expectedMinDistance: true,
375+
},
376+
{
377+
description: "4 NUMA node optimal distance, non sequential ids",
378+
numaNodes: NUMANodeList{
379+
{
380+
NUMAID: 0,
381+
Resources: v1.ResourceList{
382+
gpuResource: resource.MustParse("1"),
383+
v1.ResourceCPU: *resource.NewQuantity(4, resource.DecimalSI),
384+
v1.ResourceMemory: resource.MustParse("5Gi"),
385+
},
386+
Costs: map[int]int{
387+
0: 10,
388+
2: 12,
389+
4: 20,
390+
6: 20,
391+
},
392+
},
393+
{
394+
NUMAID: 2,
395+
Resources: v1.ResourceList{
396+
gpuResource: resource.MustParse("1"),
397+
v1.ResourceCPU: *resource.NewQuantity(4, resource.DecimalSI),
398+
v1.ResourceMemory: resource.MustParse("5Gi"),
399+
},
400+
Costs: map[int]int{
401+
0: 12,
402+
2: 10,
403+
4: 20,
404+
6: 20,
405+
},
406+
},
407+
{
408+
NUMAID: 4,
409+
Resources: v1.ResourceList{
410+
gpuResource: resource.MustParse("0"),
411+
v1.ResourceCPU: *resource.NewQuantity(4, resource.DecimalSI),
412+
v1.ResourceMemory: resource.MustParse("5Gi"),
413+
},
414+
Costs: map[int]int{
415+
0: 20,
416+
2: 20,
417+
4: 10,
418+
6: 12,
419+
},
420+
},
421+
{
422+
NUMAID: 6,
423+
Resources: v1.ResourceList{
424+
gpuResource: resource.MustParse("0"),
425+
v1.ResourceCPU: *resource.NewQuantity(4, resource.DecimalSI),
426+
v1.ResourceMemory: resource.MustParse("5Gi"),
427+
},
428+
Costs: map[int]int{
429+
0: 20,
430+
2: 20,
431+
4: 12,
432+
6: 10,
433+
},
434+
},
435+
},
436+
podResources: v1.ResourceList{
437+
v1.ResourceCPU: *resource.NewQuantity(2, resource.DecimalSI),
438+
v1.ResourceMemory: resource.MustParse("2Gi"),
439+
gpuResource: resource.MustParse("2"),
440+
},
441+
node: node,
442+
expectedBitmask: NewTestBitmask(0, 2),
443+
expectedErr: nil,
444+
expectedMinDistance: true,
445+
},
446+
{
447+
description: "4 NUMA node non optimal distance, non sequential ids",
448+
numaNodes: NUMANodeList{
449+
{
450+
NUMAID: 0,
451+
Resources: v1.ResourceList{
452+
gpuResource: resource.MustParse("1"),
453+
v1.ResourceCPU: *resource.NewQuantity(4, resource.DecimalSI),
454+
v1.ResourceMemory: resource.MustParse("5Gi"),
455+
},
456+
Costs: map[int]int{
457+
0: 10,
458+
2: 12,
459+
4: 20,
460+
6: 20,
461+
},
462+
},
463+
{
464+
NUMAID: 2,
465+
Resources: v1.ResourceList{
466+
gpuResource: resource.MustParse("0"),
467+
v1.ResourceCPU: *resource.NewQuantity(4, resource.DecimalSI),
468+
v1.ResourceMemory: resource.MustParse("5Gi"),
469+
},
470+
Costs: map[int]int{
471+
0: 12,
472+
2: 10,
473+
4: 20,
474+
6: 20,
475+
},
476+
},
477+
{
478+
NUMAID: 4,
479+
Resources: v1.ResourceList{
480+
gpuResource: resource.MustParse("0"),
481+
v1.ResourceCPU: *resource.NewQuantity(4, resource.DecimalSI),
482+
v1.ResourceMemory: resource.MustParse("5Gi"),
483+
},
484+
Costs: map[int]int{
485+
0: 20,
486+
2: 20,
487+
4: 10,
488+
6: 12,
489+
},
490+
},
491+
{
492+
NUMAID: 6,
493+
Resources: v1.ResourceList{
494+
gpuResource: resource.MustParse("1"),
495+
v1.ResourceCPU: *resource.NewQuantity(4, resource.DecimalSI),
496+
v1.ResourceMemory: resource.MustParse("5Gi"),
497+
},
498+
Costs: map[int]int{
499+
0: 20,
500+
2: 20,
501+
4: 12,
502+
6: 10,
503+
},
504+
},
505+
},
506+
podResources: v1.ResourceList{
507+
v1.ResourceCPU: *resource.NewQuantity(2, resource.DecimalSI),
508+
v1.ResourceMemory: resource.MustParse("2Gi"),
509+
gpuResource: resource.MustParse("2"),
510+
},
511+
node: node,
512+
expectedBitmask: NewTestBitmask(0, 6),
513+
expectedErr: nil,
514+
expectedMinDistance: false,
515+
},
274516
}
275517

276518
for _, tc := range testCases {

0 commit comments

Comments
 (0)