@@ -373,6 +373,104 @@ func TestNUMANodesRequired(t *testing.T) {
373
373
expectedErr : nil ,
374
374
expectedMinDistance : true ,
375
375
},
376
+ {
377
+ description : "8 NUMA node non optimal distance, not sorted ids, odd digit NUMA node without memory" ,
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 , 1 : 20 , 2 : 40 , 3 : 30 , 4 : 20 , 5 : 30 , 6 : 50 , 7 : 40 ,
388
+ },
389
+ },
390
+ {
391
+ NUMAID : 3 ,
392
+ Resources : v1.ResourceList {
393
+ gpuResource : resource .MustParse ("1" ),
394
+ v1 .ResourceCPU : * resource .NewQuantity (4 , resource .DecimalSI ),
395
+ },
396
+ Costs : map [int ]int {
397
+ 0 : 30 , 1 : 40 , 2 : 20 , 3 : 10 , 4 : 30 , 5 : 20 , 6 : 40 , 7 : 50 ,
398
+ },
399
+ },
400
+ {
401
+ NUMAID : 5 ,
402
+ Resources : v1.ResourceList {
403
+ gpuResource : resource .MustParse ("1" ),
404
+ v1 .ResourceCPU : * resource .NewQuantity (4 , resource .DecimalSI ),
405
+ },
406
+ Costs : map [int ]int {
407
+ 0 : 30 , 1 : 20 , 2 : 50 , 3 : 20 , 4 : 50 , 5 : 10 , 6 : 50 , 7 : 40 ,
408
+ },
409
+ },
410
+ {
411
+ NUMAID : 7 ,
412
+ Resources : v1.ResourceList {
413
+ gpuResource : resource .MustParse ("1" ),
414
+ v1 .ResourceCPU : * resource .NewQuantity (4 , resource .DecimalSI ),
415
+ },
416
+ Costs : map [int ]int {
417
+ 0 : 40 , 1 : 50 , 2 : 30 , 3 : 50 , 4 : 20 , 5 : 40 , 6 : 30 , 7 : 10 ,
418
+ },
419
+ },
420
+ {
421
+ NUMAID : 1 ,
422
+ Resources : v1.ResourceList {
423
+ gpuResource : resource .MustParse ("1" ),
424
+ v1 .ResourceCPU : * resource .NewQuantity (4 , resource .DecimalSI ),
425
+ },
426
+ Costs : map [int ]int {
427
+ 0 : 20 , 1 : 10 , 2 : 30 , 3 : 40 , 4 : 50 , 5 : 20 , 6 : 40 , 7 : 50 ,
428
+ },
429
+ },
430
+ {
431
+ NUMAID : 6 ,
432
+ Resources : v1.ResourceList {
433
+ gpuResource : resource .MustParse ("1" ),
434
+ v1 .ResourceCPU : * resource .NewQuantity (4 , resource .DecimalSI ),
435
+ v1 .ResourceMemory : resource .MustParse ("5Gi" ),
436
+ },
437
+ Costs : map [int ]int {
438
+ 0 : 50 , 1 : 40 , 2 : 20 , 3 : 40 , 4 : 30 , 5 : 50 , 6 : 10 , 7 : 30 ,
439
+ },
440
+ },
441
+ {
442
+ NUMAID : 2 ,
443
+ Resources : v1.ResourceList {
444
+ gpuResource : resource .MustParse ("1" ),
445
+ v1 .ResourceCPU : * resource .NewQuantity (4 , resource .DecimalSI ),
446
+ v1 .ResourceMemory : resource .MustParse ("5Gi" ),
447
+ },
448
+ Costs : map [int ]int {
449
+ 0 : 40 , 1 : 30 , 2 : 10 , 3 : 20 , 4 : 40 , 5 : 50 , 6 : 20 , 7 : 30 ,
450
+ },
451
+ },
452
+ {
453
+ NUMAID : 4 ,
454
+ Resources : v1.ResourceList {
455
+ gpuResource : resource .MustParse ("1" ),
456
+ v1 .ResourceCPU : * resource .NewQuantity (4 , resource .DecimalSI ),
457
+ v1 .ResourceMemory : resource .MustParse ("5Gi" ),
458
+ },
459
+ Costs : map [int ]int {
460
+ 0 : 20 , 1 : 50 , 2 : 40 , 3 : 30 , 4 : 10 , 5 : 50 , 6 : 30 , 7 : 20 ,
461
+ },
462
+ },
463
+ },
464
+ podResources : v1.ResourceList {
465
+ v1 .ResourceCPU : * resource .NewQuantity (3 , resource .DecimalSI ),
466
+ v1 .ResourceMemory : resource .MustParse ("2Gi" ),
467
+ gpuResource : resource .MustParse ("3" ),
468
+ },
469
+ node : node ,
470
+ expectedBitmask : NewTestBitmask (2 , 4 , 6 ),
471
+ expectedErr : nil ,
472
+ expectedMinDistance : false ,
473
+ },
376
474
{
377
475
description : "4 NUMA node optimal distance, non sequential ids" ,
378
476
numaNodes : NUMANodeList {
@@ -513,6 +611,74 @@ func TestNUMANodesRequired(t *testing.T) {
513
611
expectedErr : nil ,
514
612
expectedMinDistance : false ,
515
613
},
614
+ {
615
+ description : "4 NUMA node non optimal distance, non sequential ids, NUMA node-2 and node-6 without memory" ,
616
+ numaNodes : NUMANodeList {
617
+ {
618
+ NUMAID : 0 ,
619
+ Resources : v1.ResourceList {
620
+ gpuResource : resource .MustParse ("1" ),
621
+ v1 .ResourceCPU : * resource .NewQuantity (4 , resource .DecimalSI ),
622
+ v1 .ResourceMemory : resource .MustParse ("5Gi" ),
623
+ },
624
+ Costs : map [int ]int {
625
+ 0 : 10 ,
626
+ 2 : 12 ,
627
+ 4 : 20 ,
628
+ 6 : 20 ,
629
+ },
630
+ },
631
+ {
632
+ NUMAID : 2 ,
633
+ Resources : v1.ResourceList {
634
+ gpuResource : resource .MustParse ("1" ),
635
+ v1 .ResourceCPU : * resource .NewQuantity (4 , resource .DecimalSI ),
636
+ },
637
+ Costs : map [int ]int {
638
+ 0 : 12 ,
639
+ 2 : 10 ,
640
+ 4 : 20 ,
641
+ 6 : 20 ,
642
+ },
643
+ },
644
+ {
645
+ NUMAID : 4 ,
646
+ Resources : v1.ResourceList {
647
+ gpuResource : resource .MustParse ("1" ),
648
+ v1 .ResourceCPU : * resource .NewQuantity (4 , resource .DecimalSI ),
649
+ v1 .ResourceMemory : resource .MustParse ("5Gi" ),
650
+ },
651
+ Costs : map [int ]int {
652
+ 0 : 20 ,
653
+ 2 : 20 ,
654
+ 4 : 10 ,
655
+ 6 : 12 ,
656
+ },
657
+ },
658
+ {
659
+ NUMAID : 6 ,
660
+ Resources : v1.ResourceList {
661
+ gpuResource : resource .MustParse ("1" ),
662
+ v1 .ResourceCPU : * resource .NewQuantity (4 , resource .DecimalSI ),
663
+ },
664
+ Costs : map [int ]int {
665
+ 0 : 20 ,
666
+ 2 : 20 ,
667
+ 4 : 12 ,
668
+ 6 : 10 ,
669
+ },
670
+ },
671
+ },
672
+ podResources : v1.ResourceList {
673
+ v1 .ResourceCPU : * resource .NewQuantity (2 , resource .DecimalSI ),
674
+ v1 .ResourceMemory : resource .MustParse ("2Gi" ),
675
+ gpuResource : resource .MustParse ("2" ),
676
+ },
677
+ node : node ,
678
+ expectedBitmask : NewTestBitmask (0 , 4 ),
679
+ expectedErr : nil ,
680
+ expectedMinDistance : false ,
681
+ },
516
682
}
517
683
518
684
for _ , tc := range testCases {
0 commit comments