mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-22 19:31:44 +00:00
Merge pull request #80569 from klueska/upstream-get-topology-hints-map
Update GetTopologyHints() for TopologyManager Hint Providers to return a map
This commit is contained in:
commit
ddd45b7986
@ -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 {
|
||||
|
@ -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 {
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
Loading…
Reference in New Issue
Block a user