Topology manager aligns pods of all QoS classes.

This commit is contained in:
Connor Doyle 2019-10-03 19:56:29 -07:00
parent 71bebe4c13
commit a9203ebdcf
2 changed files with 102 additions and 16 deletions

View File

@ -320,23 +320,17 @@ func (m *manager) Admit(attrs *lifecycle.PodAdmitAttributes) lifecycle.PodAdmitR
} }
pod := attrs.Pod pod := attrs.Pod
c := make(map[string]TopologyHint) c := make(map[string]TopologyHint)
klog.Infof("[topologymanager] Pod QoS Level: %v", pod.Status.QOSClass)
if pod.Status.QOSClass == v1.PodQOSGuaranteed { for _, container := range append(pod.Spec.InitContainers, pod.Spec.Containers...) {
for _, container := range append(pod.Spec.InitContainers, pod.Spec.Containers...) { result := m.calculateAffinity(*pod, container)
result := m.calculateAffinity(*pod, container) admitPod := m.policy.CanAdmitPodResult(&result)
admitPod := m.policy.CanAdmitPodResult(&result) if !admitPod.Admit {
if !admitPod.Admit { return admitPod
return admitPod }
} c[container.Name] = result
c[container.Name] = result }
} m.podTopologyHints[string(pod.UID)] = c
m.podTopologyHints[string(pod.UID)] = c klog.Infof("[topologymanager] Topology Affinity for Pod: %v are %v", pod.UID, m.podTopologyHints[string(pod.UID)])
klog.Infof("[topologymanager] Topology Affinity for Pod: %v are %v", pod.UID, m.podTopologyHints[string(pod.UID)])
} else {
klog.Infof("[topologymanager] Topology Manager only affinitises Guaranteed pods.")
}
return lifecycle.PodAdmitResult{ return lifecycle.PodAdmitResult{
Admit: true, Admit: true,

View File

@ -874,6 +874,32 @@ func TestAdmit(t *testing.T) {
}, },
expected: true, expected: true,
}, },
{
name: "QOSClass set as Burstable. BestEffort Policy. More than one Preferred Affinity.",
qosClass: v1.PodQOSBurstable,
policy: NewBestEffortPolicy(),
hp: []HintProvider{
&mockHintProvider{
map[string][]TopologyHint{
"resource": {
{
NUMANodeAffinity: NewTestBitMask(0),
Preferred: true,
},
{
NUMANodeAffinity: NewTestBitMask(1),
Preferred: true,
},
{
NUMANodeAffinity: NewTestBitMask(0, 1),
Preferred: false,
},
},
},
},
},
expected: true,
},
{ {
name: "QOSClass set as Guaranteed. BestEffort Policy. No Preferred Affinity.", name: "QOSClass set as Guaranteed. BestEffort Policy. No Preferred Affinity.",
qosClass: v1.PodQOSGuaranteed, qosClass: v1.PodQOSGuaranteed,
@ -914,6 +940,28 @@ func TestAdmit(t *testing.T) {
}, },
expected: true, expected: true,
}, },
{
name: "QOSClass set as Burstable. Restricted Policy. Preferred Affinity.",
qosClass: v1.PodQOSBurstable,
policy: NewRestrictedPolicy(),
hp: []HintProvider{
&mockHintProvider{
map[string][]TopologyHint{
"resource": {
{
NUMANodeAffinity: NewTestBitMask(0),
Preferred: true,
},
{
NUMANodeAffinity: NewTestBitMask(0, 1),
Preferred: false,
},
},
},
},
},
expected: true,
},
{ {
name: "QOSClass set as Guaranteed. Restricted Policy. More than one Preferred affinity.", name: "QOSClass set as Guaranteed. Restricted Policy. More than one Preferred affinity.",
qosClass: v1.PodQOSGuaranteed, qosClass: v1.PodQOSGuaranteed,
@ -940,6 +988,32 @@ func TestAdmit(t *testing.T) {
}, },
expected: true, expected: true,
}, },
{
name: "QOSClass set as Burstable. Restricted Policy. More than one Preferred affinity.",
qosClass: v1.PodQOSBurstable,
policy: NewRestrictedPolicy(),
hp: []HintProvider{
&mockHintProvider{
map[string][]TopologyHint{
"resource": {
{
NUMANodeAffinity: NewTestBitMask(0),
Preferred: true,
},
{
NUMANodeAffinity: NewTestBitMask(1),
Preferred: true,
},
{
NUMANodeAffinity: NewTestBitMask(0, 1),
Preferred: false,
},
},
},
},
},
expected: true,
},
{ {
name: "QOSClass set as Guaranteed. Restricted Policy. No Preferred affinity.", name: "QOSClass set as Guaranteed. Restricted Policy. No Preferred affinity.",
qosClass: v1.PodQOSGuaranteed, qosClass: v1.PodQOSGuaranteed,
@ -958,6 +1032,24 @@ func TestAdmit(t *testing.T) {
}, },
expected: false, expected: false,
}, },
{
name: "QOSClass set as Burstable. Restricted Policy. No Preferred affinity.",
qosClass: v1.PodQOSBurstable,
policy: NewRestrictedPolicy(),
hp: []HintProvider{
&mockHintProvider{
map[string][]TopologyHint{
"resource": {
{
NUMANodeAffinity: NewTestBitMask(0, 1),
Preferred: false,
},
},
},
},
},
expected: false,
},
} }
for _, tc := range tcases { for _, tc := range tcases {
man := manager{ man := manager{