From 4fdd52b058c60aa851f31efbff1a72153f123ecb Mon Sep 17 00:00:00 2001 From: Kevin Klues Date: Thu, 25 Jul 2019 02:04:02 -0700 Subject: [PATCH] Update GetTopologyHints() API to return a map At present, there is no way for a hint provider to return distinct hints for different resource types via a call to GetTopologyHints(). This means that hint providers that govern multiple resource types (e.g. the devicemanager) must do some sort of "pre-merge" on the hints it generates for each resource type before passing them back to the TopologyManager. This patch changes the GetTopologyHints() interface to allow a hint provider to pass back raw hints for each resource type, and allow the TopologyManager to merge them using a single unified strategy. This change also allows the TopologyManager to recognize which resource type a set of hints originated from, should this information become useful in the future. --- pkg/kubelet/cm/cpumanager/cpu_manager.go | 2 +- pkg/kubelet/cm/cpumanager/fake_cpu_manager.go | 4 +- pkg/kubelet/cm/cpumanager/topology_hints.go | 6 +- .../cm/cpumanager/topology_hints_test.go | 5 +- .../cm/topologymanager/topology_manager.go | 31 +- .../topologymanager/topology_manager_test.go | 522 +++++++++++------- 6 files changed, 361 insertions(+), 209 deletions(-) diff --git a/pkg/kubelet/cm/cpumanager/cpu_manager.go b/pkg/kubelet/cm/cpumanager/cpu_manager.go index 06e268d04c3..a2059de09f3 100644 --- a/pkg/kubelet/cm/cpumanager/cpu_manager.go +++ b/pkg/kubelet/cm/cpumanager/cpu_manager.go @@ -68,7 +68,7 @@ type Manager interface { // GetTopologyHints implements the Topology Manager Interface and is // consulted to make Topology aware resource alignments - GetTopologyHints(pod v1.Pod, container v1.Container) []topologymanager.TopologyHint + GetTopologyHints(pod v1.Pod, container v1.Container) map[string][]topologymanager.TopologyHint } type manager struct { diff --git a/pkg/kubelet/cm/cpumanager/fake_cpu_manager.go b/pkg/kubelet/cm/cpumanager/fake_cpu_manager.go index 7682895340f..0a2c684bcf3 100644 --- a/pkg/kubelet/cm/cpumanager/fake_cpu_manager.go +++ b/pkg/kubelet/cm/cpumanager/fake_cpu_manager.go @@ -47,9 +47,9 @@ func (m *fakeManager) RemoveContainer(containerID string) error { return nil } -func (m *fakeManager) GetTopologyHints(pod v1.Pod, container v1.Container) []topologymanager.TopologyHint { +func (m *fakeManager) GetTopologyHints(pod v1.Pod, container v1.Container) map[string][]topologymanager.TopologyHint { klog.Infof("[fake cpumanager] Get Topology Hints") - return []topologymanager.TopologyHint{} + return map[string][]topologymanager.TopologyHint{} } func (m *fakeManager) State() state.Reader { diff --git a/pkg/kubelet/cm/cpumanager/topology_hints.go b/pkg/kubelet/cm/cpumanager/topology_hints.go index f4be9d6d3e6..7cce9e1b80a 100644 --- a/pkg/kubelet/cm/cpumanager/topology_hints.go +++ b/pkg/kubelet/cm/cpumanager/topology_hints.go @@ -26,7 +26,7 @@ import ( "k8s.io/kubernetes/pkg/kubelet/cm/topologymanager/socketmask" ) -func (m *manager) GetTopologyHints(pod v1.Pod, container v1.Container) []topologymanager.TopologyHint { +func (m *manager) GetTopologyHints(pod v1.Pod, container v1.Container) map[string][]topologymanager.TopologyHint { // The 'none' policy does not generate topology hints. if m.policy.Name() == string(PolicyNone) { return nil @@ -60,7 +60,9 @@ func (m *manager) GetTopologyHints(pod v1.Pod, container v1.Container) []topolog cpuHints := m.generateCPUTopologyHints(available, requested) klog.Infof("[cpumanager] TopologyHints generated for pod '%v', container '%v': %v", pod.Name, container.Name, cpuHints) - return cpuHints + return map[string][]topologymanager.TopologyHint{ + string(v1.ResourceCPU): cpuHints, + } } // generateCPUtopologyHints generates a set of TopologyHints given the set of diff --git a/pkg/kubelet/cm/cpumanager/topology_hints_test.go b/pkg/kubelet/cm/cpumanager/topology_hints_test.go index 3b74a9247ed..696979374f0 100644 --- a/pkg/kubelet/cm/cpumanager/topology_hints_test.go +++ b/pkg/kubelet/cm/cpumanager/topology_hints_test.go @@ -130,11 +130,11 @@ func TestGetTopologyHints(t *testing.T) { name: "Request 11 CPUs, 4 available on Socket 0, 6 available on Socket 1", pod: *testPod4, container: *testContainer4, - expectedHints: []topologymanager.TopologyHint{}, + expectedHints: nil, }, } for _, tc := range tcases { - hints := m.GetTopologyHints(tc.pod, tc.container) + hints := m.GetTopologyHints(tc.pod, tc.container)[string(v1.ResourceCPU)] if len(tc.expectedHints) == 0 && len(hints) == 0 { continue } @@ -147,6 +147,5 @@ func TestGetTopologyHints(t *testing.T) { if !reflect.DeepEqual(tc.expectedHints, hints) { t.Errorf("Expected in result to be %v , got %v", tc.expectedHints, hints) } - } } diff --git a/pkg/kubelet/cm/topologymanager/topology_manager.go b/pkg/kubelet/cm/topologymanager/topology_manager.go index 8ae8a7742be..8e2452f4411 100644 --- a/pkg/kubelet/cm/topologymanager/topology_manager.go +++ b/pkg/kubelet/cm/topologymanager/topology_manager.go @@ -54,7 +54,7 @@ type manager struct { //HintProvider interface is to be implemented by Hint Providers type HintProvider interface { - GetTopologyHints(pod v1.Pod, container v1.Container) []TopologyHint + GetTopologyHints(pod v1.Pod, container v1.Container) map[string][]TopologyHint } //Store interface is to allow Hint Providers to retrieve pod affinity @@ -164,16 +164,35 @@ func (m *manager) calculateAffinity(pod v1.Pod, container v1.Container) Topology // Get the TopologyHints from a provider. hints := provider.GetTopologyHints(pod, container) - // If hints is nil, overwrite 'hints' with a preferred any-socket affinity. + // If hints is nil, insert a single, preferred any-socket hint into allProviderHints. if hints == nil || len(hints) == 0 { - klog.Infof("[topologymanager] Hint Provider has no preference for socket affinity") + klog.Infof("[topologymanager] Hint Provider has no preference for socket affinity with any resource") affinity, _ := socketmask.NewSocketMask() affinity.Fill() - hints = []TopologyHint{{affinity, true}} + allProviderHints = append(allProviderHints, []TopologyHint{{affinity, true}}) + continue } - // Accumulate the sorted hints into a [][]TopologyHint slice - allProviderHints = append(allProviderHints, hints) + // Otherwise, accumulate the hints for each resource type into allProviderHints. + for resource := range hints { + if hints[resource] == nil { + klog.Infof("[topologymanager] Hint Provider has no preference for socket affinity with resource '%s'", resource) + affinity, _ := socketmask.NewSocketMask() + affinity.Fill() + allProviderHints = append(allProviderHints, []TopologyHint{{affinity, true}}) + continue + } + + if len(hints[resource]) == 0 { + klog.Infof("[topologymanager] Hint Provider has no possible socket affinities for resource '%s'", resource) + affinity, _ := socketmask.NewSocketMask() + affinity.Fill() + allProviderHints = append(allProviderHints, []TopologyHint{{affinity, false}}) + continue + } + + allProviderHints = append(allProviderHints, hints[resource]) + } } // Iterate over all permutations of hints in 'allProviderHints'. Merge the diff --git a/pkg/kubelet/cm/topologymanager/topology_manager_test.go b/pkg/kubelet/cm/topologymanager/topology_manager_test.go index 54a15937147..c044ae7bf78 100644 --- a/pkg/kubelet/cm/topologymanager/topology_manager_test.go +++ b/pkg/kubelet/cm/topologymanager/topology_manager_test.go @@ -80,10 +80,10 @@ func TestNewManager(t *testing.T) { } type mockHintProvider struct { - th []TopologyHint + th map[string][]TopologyHint } -func (m *mockHintProvider) GetTopologyHints(pod v1.Pod, container v1.Container) []TopologyHint { +func (m *mockHintProvider) GetTopologyHints(pod v1.Pod, container v1.Container) map[string][]TopologyHint { return m.th } @@ -125,10 +125,10 @@ func TestCalculateAffinity(t *testing.T) { }, }, { - name: "HintProvider returns empty non-nil []TopologyHint", + name: "HintProvider returns empty non-nil map[string][]TopologyHint", hp: []HintProvider{ &mockHintProvider{ - []TopologyHint{}, + map[string][]TopologyHint{}, }, }, expected: TopologyHint{ @@ -136,15 +136,44 @@ func TestCalculateAffinity(t *testing.T) { Preferred: true, }, }, - + { + name: "HintProvider returns -nil map[string][]TopologyHint from provider", + hp: []HintProvider{ + &mockHintProvider{ + map[string][]TopologyHint{ + "resource": nil, + }, + }, + }, + expected: TopologyHint{ + SocketAffinity: NewTestSocketMaskFull(), + Preferred: true, + }, + }, + { + name: "HintProvider returns empty non-nil map[string][]TopologyHint from provider", + hp: []HintProvider{ + &mockHintProvider{ + map[string][]TopologyHint{ + "resource": {}, + }, + }, + }, + expected: TopologyHint{ + SocketAffinity: NewTestSocketMaskFull(), + Preferred: false, + }, + }, { name: "Single TopologyHint with Preferred as true and SocketAffinity as nil", hp: []HintProvider{ &mockHintProvider{ - []TopologyHint{ - { - SocketAffinity: nil, - Preferred: true, + map[string][]TopologyHint{ + "resource": { + { + SocketAffinity: nil, + Preferred: true, + }, }, }, }, @@ -158,10 +187,12 @@ func TestCalculateAffinity(t *testing.T) { name: "Single TopologyHint with Preferred as false and SocketAffinity as nil", hp: []HintProvider{ &mockHintProvider{ - []TopologyHint{ - { - SocketAffinity: nil, - Preferred: false, + map[string][]TopologyHint{ + "resource": { + { + SocketAffinity: nil, + Preferred: false, + }, }, }, }, @@ -175,18 +206,22 @@ func TestCalculateAffinity(t *testing.T) { name: "Two providers, 1 hint each, same mask, both preferred 1/2", hp: []HintProvider{ &mockHintProvider{ - []TopologyHint{ - { - SocketAffinity: NewTestSocketMask(0), - Preferred: true, + map[string][]TopologyHint{ + "resource1": { + { + SocketAffinity: NewTestSocketMask(0), + Preferred: true, + }, }, }, }, &mockHintProvider{ - []TopologyHint{ - { - SocketAffinity: NewTestSocketMask(0), - Preferred: true, + map[string][]TopologyHint{ + "resource2": { + { + SocketAffinity: NewTestSocketMask(0), + Preferred: true, + }, }, }, }, @@ -200,18 +235,22 @@ func TestCalculateAffinity(t *testing.T) { name: "Two providers, 1 hint each, same mask, both preferred 2/2", hp: []HintProvider{ &mockHintProvider{ - []TopologyHint{ - { - SocketAffinity: NewTestSocketMask(1), - Preferred: true, + map[string][]TopologyHint{ + "resource1": { + { + SocketAffinity: NewTestSocketMask(1), + Preferred: true, + }, }, }, }, &mockHintProvider{ - []TopologyHint{ - { - SocketAffinity: NewTestSocketMask(1), - Preferred: true, + map[string][]TopologyHint{ + "resource2": { + { + SocketAffinity: NewTestSocketMask(1), + Preferred: true, + }, }, }, }, @@ -225,18 +264,22 @@ func TestCalculateAffinity(t *testing.T) { name: "Two providers, 1 hint each, 1 wider mask, both preferred 1/2", hp: []HintProvider{ &mockHintProvider{ - []TopologyHint{ - { - SocketAffinity: NewTestSocketMask(0), - Preferred: true, + map[string][]TopologyHint{ + "resource1": { + { + SocketAffinity: NewTestSocketMask(0), + Preferred: true, + }, }, }, }, &mockHintProvider{ - []TopologyHint{ - { - SocketAffinity: NewTestSocketMask(0, 1), - Preferred: true, + map[string][]TopologyHint{ + "resource2": { + { + SocketAffinity: NewTestSocketMask(0, 1), + Preferred: true, + }, }, }, }, @@ -250,18 +293,22 @@ func TestCalculateAffinity(t *testing.T) { name: "Two providers, 1 hint each, 1 wider mask, both preferred 1/2", hp: []HintProvider{ &mockHintProvider{ - []TopologyHint{ - { - SocketAffinity: NewTestSocketMask(1), - Preferred: true, + map[string][]TopologyHint{ + "resource1": { + { + SocketAffinity: NewTestSocketMask(1), + Preferred: true, + }, }, }, }, &mockHintProvider{ - []TopologyHint{ - { - SocketAffinity: NewTestSocketMask(0, 1), - Preferred: true, + map[string][]TopologyHint{ + "resource2": { + { + SocketAffinity: NewTestSocketMask(0, 1), + Preferred: true, + }, }, }, }, @@ -275,18 +322,22 @@ func TestCalculateAffinity(t *testing.T) { name: "Two providers, 1 hint each, no common mask", hp: []HintProvider{ &mockHintProvider{ - []TopologyHint{ - { - SocketAffinity: NewTestSocketMask(0), - Preferred: true, + map[string][]TopologyHint{ + "resource1": { + { + SocketAffinity: NewTestSocketMask(0), + Preferred: true, + }, }, }, }, &mockHintProvider{ - []TopologyHint{ - { - SocketAffinity: NewTestSocketMask(1), - Preferred: true, + map[string][]TopologyHint{ + "resource2": { + { + SocketAffinity: NewTestSocketMask(1), + Preferred: true, + }, }, }, }, @@ -300,18 +351,22 @@ func TestCalculateAffinity(t *testing.T) { name: "Two providers, 1 hint each, same mask, 1 preferred, 1 not 1/2", hp: []HintProvider{ &mockHintProvider{ - []TopologyHint{ - { - SocketAffinity: NewTestSocketMask(0), - Preferred: true, + map[string][]TopologyHint{ + "resource1": { + { + SocketAffinity: NewTestSocketMask(0), + Preferred: true, + }, }, }, }, &mockHintProvider{ - []TopologyHint{ - { - SocketAffinity: NewTestSocketMask(0), - Preferred: false, + map[string][]TopologyHint{ + "resource2": { + { + SocketAffinity: NewTestSocketMask(0), + Preferred: false, + }, }, }, }, @@ -325,18 +380,22 @@ func TestCalculateAffinity(t *testing.T) { name: "Two providers, 1 hint each, same mask, 1 preferred, 1 not 2/2", hp: []HintProvider{ &mockHintProvider{ - []TopologyHint{ - { - SocketAffinity: NewTestSocketMask(1), - Preferred: true, + map[string][]TopologyHint{ + "resource1": { + { + SocketAffinity: NewTestSocketMask(1), + Preferred: true, + }, }, }, }, &mockHintProvider{ - []TopologyHint{ - { - SocketAffinity: NewTestSocketMask(1), - Preferred: false, + map[string][]TopologyHint{ + "resource2": { + { + SocketAffinity: NewTestSocketMask(1), + Preferred: false, + }, }, }, }, @@ -351,10 +410,12 @@ func TestCalculateAffinity(t *testing.T) { hp: []HintProvider{ &mockHintProvider{}, &mockHintProvider{ - []TopologyHint{ - { - SocketAffinity: NewTestSocketMask(0), - Preferred: true, + map[string][]TopologyHint{ + "resource": { + { + SocketAffinity: NewTestSocketMask(0), + Preferred: true, + }, }, }, }, @@ -369,10 +430,12 @@ func TestCalculateAffinity(t *testing.T) { hp: []HintProvider{ &mockHintProvider{}, &mockHintProvider{ - []TopologyHint{ - { - SocketAffinity: NewTestSocketMask(1), - Preferred: true, + map[string][]TopologyHint{ + "resource": { + { + SocketAffinity: NewTestSocketMask(1), + Preferred: true, + }, }, }, }, @@ -386,22 +449,26 @@ func TestCalculateAffinity(t *testing.T) { name: "Two providers, 1 with 2 hints, 1 with single hint matching 1/2", hp: []HintProvider{ &mockHintProvider{ - []TopologyHint{ - { - SocketAffinity: NewTestSocketMask(0), - Preferred: true, - }, - { - SocketAffinity: NewTestSocketMask(1), - Preferred: true, + map[string][]TopologyHint{ + "resource1": { + { + SocketAffinity: NewTestSocketMask(0), + Preferred: true, + }, + { + SocketAffinity: NewTestSocketMask(1), + Preferred: true, + }, }, }, }, &mockHintProvider{ - []TopologyHint{ - { - SocketAffinity: NewTestSocketMask(0), - Preferred: true, + map[string][]TopologyHint{ + "resource2": { + { + SocketAffinity: NewTestSocketMask(0), + Preferred: true, + }, }, }, }, @@ -415,22 +482,26 @@ func TestCalculateAffinity(t *testing.T) { name: "Two providers, 1 with 2 hints, 1 with single hint matching 2/2", hp: []HintProvider{ &mockHintProvider{ - []TopologyHint{ - { - SocketAffinity: NewTestSocketMask(0), - Preferred: true, - }, - { - SocketAffinity: NewTestSocketMask(1), - Preferred: true, + map[string][]TopologyHint{ + "resource1": { + { + SocketAffinity: NewTestSocketMask(0), + Preferred: true, + }, + { + SocketAffinity: NewTestSocketMask(1), + Preferred: true, + }, }, }, }, &mockHintProvider{ - []TopologyHint{ - { - SocketAffinity: NewTestSocketMask(1), - Preferred: true, + map[string][]TopologyHint{ + "resource2": { + { + SocketAffinity: NewTestSocketMask(1), + Preferred: true, + }, }, }, }, @@ -444,22 +515,26 @@ func TestCalculateAffinity(t *testing.T) { name: "Two providers, 1 with 2 hints, 1 with single non-preferred hint matching", hp: []HintProvider{ &mockHintProvider{ - []TopologyHint{ - { - SocketAffinity: NewTestSocketMask(0), - Preferred: true, - }, - { - SocketAffinity: NewTestSocketMask(1), - Preferred: true, + map[string][]TopologyHint{ + "resource1": { + { + SocketAffinity: NewTestSocketMask(0), + Preferred: true, + }, + { + SocketAffinity: NewTestSocketMask(1), + Preferred: true, + }, }, }, }, &mockHintProvider{ - []TopologyHint{ - { - SocketAffinity: NewTestSocketMask(0, 1), - Preferred: false, + map[string][]TopologyHint{ + "resource2": { + { + SocketAffinity: NewTestSocketMask(0, 1), + Preferred: false, + }, }, }, }, @@ -473,26 +548,30 @@ func TestCalculateAffinity(t *testing.T) { name: "Two providers, both with 2 hints, matching narrower preferred hint from both", hp: []HintProvider{ &mockHintProvider{ - []TopologyHint{ - { - SocketAffinity: NewTestSocketMask(0), - Preferred: true, - }, - { - SocketAffinity: NewTestSocketMask(1), - Preferred: true, + map[string][]TopologyHint{ + "resource1": { + { + SocketAffinity: NewTestSocketMask(0), + Preferred: true, + }, + { + SocketAffinity: NewTestSocketMask(1), + Preferred: true, + }, }, }, }, &mockHintProvider{ - []TopologyHint{ - { - SocketAffinity: NewTestSocketMask(0), - Preferred: true, - }, - { - SocketAffinity: NewTestSocketMask(0, 1), - Preferred: false, + map[string][]TopologyHint{ + "resource2": { + { + SocketAffinity: NewTestSocketMask(0), + Preferred: true, + }, + { + SocketAffinity: NewTestSocketMask(0, 1), + Preferred: false, + }, }, }, }, @@ -506,30 +585,71 @@ func TestCalculateAffinity(t *testing.T) { name: "Ensure less narrow preferred hints are chosen over narrower non-preferred hints", hp: []HintProvider{ &mockHintProvider{ - []TopologyHint{ - { - SocketAffinity: NewTestSocketMask(1), - Preferred: true, - }, - { - SocketAffinity: NewTestSocketMask(0, 1), - Preferred: false, + map[string][]TopologyHint{ + "resource1": { + { + SocketAffinity: NewTestSocketMask(1), + Preferred: true, + }, + { + SocketAffinity: NewTestSocketMask(0, 1), + Preferred: false, + }, }, }, }, &mockHintProvider{ - []TopologyHint{ - { - SocketAffinity: NewTestSocketMask(0), - Preferred: true, + map[string][]TopologyHint{ + "resource2": { + { + SocketAffinity: NewTestSocketMask(0), + Preferred: true, + }, + { + SocketAffinity: NewTestSocketMask(1), + Preferred: true, + }, + { + SocketAffinity: NewTestSocketMask(0, 1), + Preferred: false, + }, }, - { - SocketAffinity: NewTestSocketMask(1), - Preferred: true, + }, + }, + }, + expected: TopologyHint{ + SocketAffinity: NewTestSocketMask(1), + Preferred: true, + }, + }, + { + name: "Multiple resources, same provider", + hp: []HintProvider{ + &mockHintProvider{ + map[string][]TopologyHint{ + "resource1": { + { + SocketAffinity: NewTestSocketMask(1), + Preferred: true, + }, + { + SocketAffinity: NewTestSocketMask(0, 1), + Preferred: false, + }, }, - { - SocketAffinity: NewTestSocketMask(0, 1), - Preferred: false, + "resource2": { + { + SocketAffinity: NewTestSocketMask(0), + Preferred: true, + }, + { + SocketAffinity: NewTestSocketMask(1), + Preferred: true, + }, + { + SocketAffinity: NewTestSocketMask(0, 1), + Preferred: false, + }, }, }, }, @@ -678,14 +798,16 @@ func TestAdmit(t *testing.T) { policy: NewBestEffortPolicy(), hp: []HintProvider{ &mockHintProvider{ - []TopologyHint{ - { - SocketAffinity: NewTestSocketMask(0), - Preferred: true, - }, - { - SocketAffinity: NewTestSocketMask(0, 1), - Preferred: false, + map[string][]TopologyHint{ + "resource": { + { + SocketAffinity: NewTestSocketMask(0), + Preferred: true, + }, + { + SocketAffinity: NewTestSocketMask(0, 1), + Preferred: false, + }, }, }, }, @@ -698,18 +820,20 @@ func TestAdmit(t *testing.T) { policy: NewBestEffortPolicy(), hp: []HintProvider{ &mockHintProvider{ - []TopologyHint{ - { - SocketAffinity: NewTestSocketMask(0), - Preferred: true, - }, - { - SocketAffinity: NewTestSocketMask(1), - Preferred: true, - }, - { - SocketAffinity: NewTestSocketMask(0, 1), - Preferred: false, + map[string][]TopologyHint{ + "resource": { + { + SocketAffinity: NewTestSocketMask(0), + Preferred: true, + }, + { + SocketAffinity: NewTestSocketMask(1), + Preferred: true, + }, + { + SocketAffinity: NewTestSocketMask(0, 1), + Preferred: false, + }, }, }, }, @@ -722,10 +846,12 @@ func TestAdmit(t *testing.T) { policy: NewBestEffortPolicy(), hp: []HintProvider{ &mockHintProvider{ - []TopologyHint{ - { - SocketAffinity: NewTestSocketMask(0, 1), - Preferred: false, + map[string][]TopologyHint{ + "resource": { + { + SocketAffinity: NewTestSocketMask(0, 1), + Preferred: false, + }, }, }, }, @@ -738,14 +864,16 @@ func TestAdmit(t *testing.T) { policy: NewStrictPolicy(), hp: []HintProvider{ &mockHintProvider{ - []TopologyHint{ - { - SocketAffinity: NewTestSocketMask(0), - Preferred: true, - }, - { - SocketAffinity: NewTestSocketMask(0, 1), - Preferred: false, + map[string][]TopologyHint{ + "resource": { + { + SocketAffinity: NewTestSocketMask(0), + Preferred: true, + }, + { + SocketAffinity: NewTestSocketMask(0, 1), + Preferred: false, + }, }, }, }, @@ -758,18 +886,20 @@ func TestAdmit(t *testing.T) { policy: NewStrictPolicy(), hp: []HintProvider{ &mockHintProvider{ - []TopologyHint{ - { - SocketAffinity: NewTestSocketMask(0), - Preferred: true, - }, - { - SocketAffinity: NewTestSocketMask(1), - Preferred: true, - }, - { - SocketAffinity: NewTestSocketMask(0, 1), - Preferred: false, + map[string][]TopologyHint{ + "resource": { + { + SocketAffinity: NewTestSocketMask(0), + Preferred: true, + }, + { + SocketAffinity: NewTestSocketMask(1), + Preferred: true, + }, + { + SocketAffinity: NewTestSocketMask(0, 1), + Preferred: false, + }, }, }, }, @@ -782,10 +912,12 @@ func TestAdmit(t *testing.T) { policy: NewStrictPolicy(), hp: []HintProvider{ &mockHintProvider{ - []TopologyHint{ - { - SocketAffinity: NewTestSocketMask(0, 1), - Preferred: false, + map[string][]TopologyHint{ + "resource": { + { + SocketAffinity: NewTestSocketMask(0, 1), + Preferred: false, + }, }, }, },