diff --git a/pkg/scheduler/frameworkext/topologymanager/policy.go b/pkg/scheduler/frameworkext/topologymanager/policy.go index ac1e2f763..4de0c93d2 100644 --- a/pkg/scheduler/frameworkext/topologymanager/policy.go +++ b/pkg/scheduler/frameworkext/topologymanager/policy.go @@ -73,12 +73,14 @@ func mergePermutation(numaNodes []int, permutation []NUMATopologyHint) NUMATopol var numaAffinities []bitmask.BitMask for _, hint := range permutation { // Only consider hints that have an actual NUMANodeAffinity set. - if hint.NUMANodeAffinity == nil { - numaAffinities = append(numaAffinities, defaultAffinity) - } else { + if hint.NUMANodeAffinity != nil { numaAffinities = append(numaAffinities, hint.NUMANodeAffinity) + // Only mark preferred if all affinities are equal. + if !hint.NUMANodeAffinity.IsEqual(numaAffinities[0]) { + preferred = false + } } - + // Only mark preferred if all affinities are preferred. if !hint.Preferred { preferred = false } diff --git a/pkg/scheduler/frameworkext/topologymanager/policy_best_effort_test.go b/pkg/scheduler/frameworkext/topologymanager/policy_best_effort_test.go index 260c573a1..71155fa42 100644 --- a/pkg/scheduler/frameworkext/topologymanager/policy_best_effort_test.go +++ b/pkg/scheduler/frameworkext/topologymanager/policy_best_effort_test.go @@ -51,7 +51,7 @@ func TestPolicyBestEffortCanAdmitPodResult(t *testing.T) { } func TestPolicyBestEffortMerge(t *testing.T) { - numaNodes := []int{0, 1} + numaNodes := []int{0, 1, 2, 3} policy := NewBestEffortPolicy(numaNodes) tcases := commonPolicyMergeTestCases(numaNodes) diff --git a/pkg/scheduler/frameworkext/topologymanager/policy_restricted_test.go b/pkg/scheduler/frameworkext/topologymanager/policy_restricted_test.go index f5eef4953..7b10e7d37 100644 --- a/pkg/scheduler/frameworkext/topologymanager/policy_restricted_test.go +++ b/pkg/scheduler/frameworkext/topologymanager/policy_restricted_test.go @@ -69,7 +69,7 @@ func TestPolicyRestrictedCanAdmitPodResult(t *testing.T) { } func TestPolicyRestrictedMerge(t *testing.T) { - numaNodes := []int{0, 1} + numaNodes := []int{0, 1, 2, 3} policy := NewRestrictedPolicy(numaNodes) tcases := commonPolicyMergeTestCases(numaNodes) diff --git a/pkg/scheduler/frameworkext/topologymanager/policy_test.go b/pkg/scheduler/frameworkext/topologymanager/policy_test.go index 34bcf8faf..95193479c 100644 --- a/pkg/scheduler/frameworkext/topologymanager/policy_test.go +++ b/pkg/scheduler/frameworkext/topologymanager/policy_test.go @@ -343,6 +343,43 @@ func commonPolicyMergeTestCases(numaNodes []int) []policyMergeTestCase { func (p *bestEffortPolicy) mergeTestCases(numaNodes []int) []policyMergeTestCase { return []policyMergeTestCase{ + { + name: "Two providers, 2 hints each, same mask (some with different bits), same preferred", + hp: []NUMATopologyHintProvider{ + &mockNUMATopologyHintProvider{ + map[string][]NUMATopologyHint{ + "resource1": { + { + NUMANodeAffinity: NewTestBitMask(0, 1), + Preferred: true, + }, + { + NUMANodeAffinity: NewTestBitMask(0, 2), + Preferred: true, + }, + }, + }, + }, + &mockNUMATopologyHintProvider{ + map[string][]NUMATopologyHint{ + "resource2": { + { + NUMANodeAffinity: NewTestBitMask(0, 1), + Preferred: true, + }, + { + NUMANodeAffinity: NewTestBitMask(0, 2), + Preferred: true, + }, + }, + }, + }, + }, + expected: NUMATopologyHint{ + NUMANodeAffinity: NewTestBitMask(0, 1), + Preferred: true, + }, + }, { name: "NUMATopologyHint not set", hp: []NUMATopologyHintProvider{}, @@ -541,7 +578,7 @@ func (p *bestEffortPolicy) mergeTestCases(numaNodes []int) []policyMergeTestCase }, expected: NUMATopologyHint{ NUMANodeAffinity: NewTestBitMask(0), - Preferred: true, + Preferred: false, }, }, { @@ -578,7 +615,7 @@ func (p *bestEffortPolicy) mergeTestCases(numaNodes []int) []policyMergeTestCase }, }, { - name: "Two providers, 1 hint each, 1 wider mask, both preferred 1/2", + name: "Two providers, 1 hint each, 1 wider mask, both preferred 2/2", hp: []NUMATopologyHintProvider{ &mockNUMATopologyHintProvider{ map[string][]NUMATopologyHint{ @@ -603,7 +640,7 @@ func (p *bestEffortPolicy) mergeTestCases(numaNodes []int) []policyMergeTestCase }, expected: NUMATopologyHint{ NUMANodeAffinity: NewTestBitMask(1), - Preferred: true, + Preferred: false, }, }, }