diff --git a/pkg/device/awsneuron/device.go b/pkg/device/awsneuron/device.go index 690a865012..27c3023070 100644 --- a/pkg/device/awsneuron/device.go +++ b/pkg/device/awsneuron/device.go @@ -371,7 +371,7 @@ func (neuron *AWSNeuronDevices) Fit(devices []*device.DeviceUsage, request devic if len(alloc) == 0 { reason[common.NumaNotFit]++ klog.V(5).InfoS(common.NumaNotFit, "pod", klog.KObj(pod), "device", devices, "request nums", request.Nums, "numa") - return false, tmpDevs, common.GenReason(reason, len(reason)) + return false, tmpDevs, common.GenReason(reason, len(devices)) } for _, dev := range alloc { for _, val := range devices { diff --git a/pkg/device/awsneuron/device_test.go b/pkg/device/awsneuron/device_test.go index 2f63018b79..149fb25e73 100644 --- a/pkg/device/awsneuron/device_test.go +++ b/pkg/device/awsneuron/device_test.go @@ -860,6 +860,33 @@ func TestDevices_Fit(t *testing.T) { wantDevIDs: []string{}, wantReason: "1/1 ExclusiveDeviceAllocateConflict", }, + { + name: "fit fail: NumaNotFit with multiple devices", + devices: []*device.DeviceUsage{ + { + ID: "dev-0", Index: 0, Used: 0, Count: 2, Totalcore: 3, + Type: AWSNeuronDevice, Health: true, + CustomInfo: map[string]any{AWSNodeType: "trn"}, + }, + { + ID: "dev-1", Index: 1, Used: 0, Count: 2, Totalcore: 3, + Type: AWSNeuronDevice, Health: true, + CustomInfo: map[string]any{AWSNodeType: "trn"}, + }, + }, + request: device.ContainerDeviceRequest{ + Nums: 2, + Memreq: 0, + MemPercentagereq: 0, + Coresreq: 2, + Type: AWSNeuronDevice, + }, + annos: map[string]string{}, + wantFit: false, + wantLen: 0, + wantDevIDs: []string{}, + wantReason: "1/2 NumaNotFit", + }, } for _, test := range tests { diff --git a/pkg/device/kunlun/device.go b/pkg/device/kunlun/device.go index b08e2b14fd..4ed39e771e 100644 --- a/pkg/device/kunlun/device.go +++ b/pkg/device/kunlun/device.go @@ -188,7 +188,7 @@ func (kl *KunlunDevices) Fit(devices []*device.DeviceUsage, request device.Conta if len(alloc) == 0 { reason[common.NumaNotFit]++ klog.V(5).InfoS(common.NumaNotFit, "pod", klog.KObj(pod), "device", devices, "request nums", request.Nums, "numa") - return false, tmpDevs, common.GenReason(reason, len(reason)) + return false, tmpDevs, common.GenReason(reason, len(devices)) } for _, dev := range alloc { diff --git a/pkg/device/kunlun/device_test.go b/pkg/device/kunlun/device_test.go index 4eb82d1cbf..648aacb8a1 100644 --- a/pkg/device/kunlun/device_test.go +++ b/pkg/device/kunlun/device_test.go @@ -17,7 +17,6 @@ limitations under the License. package kunlun import ( - "strings" "testing" "gotest.tools/v3/assert" @@ -50,7 +49,33 @@ func TestKunlunVDevices_Fit_Mutex(t *testing.T) { }} fit, _, reason := dev.Fit(devices, req, mutexPod, nodeInfo, allocated) assert.Equal(t, fit, false) - assert.Assert(t, strings.Contains(reason, common.ExclusiveDeviceAllocateConflict), reason) + assert.Equal(t, reason, "8/8 "+common.ExclusiveDeviceAllocateConflict) +} + +func TestKunlunVDevices_Fit_NumaNotFit(t *testing.T) { + dev := &KunlunVDevices{} + devices := make([]*device.DeviceUsage, 8) + for i := range devices { + devices[i] = &device.DeviceUsage{Index: uint(i), Used: 0, Usedmem: 0, Totalmem: 1024} + } + req := device.ContainerDeviceRequest{Nums: 1, Memreq: 2048} + + fit, _, reason := dev.Fit(devices, req, &corev1.Pod{}, &device.NodeInfo{}, &device.PodDevices{}) + assert.Equal(t, fit, false) + assert.Equal(t, reason, "1/8 "+common.NumaNotFit) +} + +func TestKunlunDevices_Fit_NumaNotFit(t *testing.T) { + dev := &KunlunDevices{} + devices := make([]*device.DeviceUsage, 8) + for i := range devices { + devices[i] = &device.DeviceUsage{Index: uint(i), Used: 1} + } + req := device.ContainerDeviceRequest{Nums: 1, Type: KunlunGPUDevice} + + fit, _, reason := dev.Fit(devices, req, &corev1.Pod{}, &device.NodeInfo{}, &device.PodDevices{}) + assert.Equal(t, fit, false) + assert.Equal(t, reason, "1/8 "+common.NumaNotFit) } func Test_graphSelect(t *testing.T) { diff --git a/pkg/device/kunlun/vdevice.go b/pkg/device/kunlun/vdevice.go index f148d9d1db..242844b2b3 100644 --- a/pkg/device/kunlun/vdevice.go +++ b/pkg/device/kunlun/vdevice.go @@ -255,7 +255,7 @@ func (dev *KunlunVDevices) Fit(devices []*device.DeviceUsage, request device.Con reason[common.NumaNotFit]++ klog.V(5).InfoS(common.NumaNotFit, "pod", klog.KObj(pod), "device", devices, "request nums", request.Nums) } - return false, tmpDevs, common.GenReason(reason, len(reason)) + return false, tmpDevs, common.GenReason(reason, len(devices)) } for _, dev := range alloc { for _, val := range devices {