Skip to content

Commit cb89d6d

Browse files
ZiMengShengwangjianyu.wjy
andauthored
scheduler: permit other plugin to set numaAffinity (koordinator-sh#2182)
Signed-off-by: wangjianyu.wjy <[email protected]> Co-authored-by: wangjianyu.wjy <[email protected]>
1 parent 4d89c84 commit cb89d6d

File tree

7 files changed

+21
-20
lines changed

7 files changed

+21
-20
lines changed

pkg/scheduler/frameworkext/topologymanager/manager.go

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -63,15 +63,16 @@ func (m *topologyManager) Admit(ctx context.Context, cycleState *framework.Cycle
6363
store := s.(*Store)
6464

6565
policy := createNUMATopologyPolicy(policyType, numaNodes)
66-
67-
bestHint, admit := m.calculateAffinity(ctx, cycleState, policy, pod, nodeName, exclusivePolicy, allNUMANodeStatus)
68-
klog.V(5).Infof("Best TopologyHint for (pod: %v): %v on node: %v", klog.KObj(pod), bestHint, nodeName)
69-
if !admit {
70-
return framework.NewStatus(framework.Unschedulable, "node(s) NUMA Topology affinity error")
66+
bestHint, ok := store.GetAffinity(nodeName)
67+
if !ok {
68+
var admit bool
69+
bestHint, admit = m.calculateAffinity(ctx, cycleState, policy, pod, nodeName, exclusivePolicy, allNUMANodeStatus)
70+
klog.V(5).Infof("Best TopologyHint for (pod: %v): %v on node: %v", klog.KObj(pod), bestHint, nodeName)
71+
if !admit {
72+
return framework.NewStatus(framework.Unschedulable, "node(s) NUMA Topology affinity error")
73+
}
74+
store.SetAffinity(nodeName, bestHint)
7175
}
72-
73-
store.SetAffinity(nodeName, bestHint)
74-
7576
status := m.allocateResources(ctx, cycleState, bestHint, pod, nodeName)
7677
if !status.IsSuccess() {
7778
return status

pkg/scheduler/frameworkext/topologymanager/store.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,11 +56,11 @@ func (s *Store) SetAffinity(nodeName string, affinity NUMATopologyHint) {
5656
s.affinityMap.Store(nodeName, &affinity)
5757
}
5858

59-
func (s *Store) GetAffinity(nodeName string) NUMATopologyHint {
59+
func (s *Store) GetAffinity(nodeName string) (NUMATopologyHint, bool) {
6060
val, ok := s.affinityMap.Load(nodeName)
6161
if !ok {
62-
return NUMATopologyHint{}
62+
return NUMATopologyHint{}, false
6363
}
6464
hint := val.(*NUMATopologyHint)
65-
return *hint
65+
return *hint, true
6666
}

pkg/scheduler/plugins/deviceshare/plugin.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -300,7 +300,7 @@ func (p *Plugin) Filter(ctx context.Context, cycleState *framework.CycleState, p
300300
var affinity topologymanager.NUMATopologyHint
301301
if !p.disableDeviceNUMATopologyAlignment {
302302
store := topologymanager.GetStore(cycleState)
303-
affinity = store.GetAffinity(nodeInfo.Node().Name)
303+
affinity, _ = store.GetAffinity(nodeInfo.Node().Name)
304304
}
305305

306306
allocator := &AutopilotAllocator{
@@ -369,7 +369,7 @@ func (p *Plugin) FilterReservation(ctx context.Context, cycleState *framework.Cy
369369
var affinity topologymanager.NUMATopologyHint
370370
if !p.disableDeviceNUMATopologyAlignment {
371371
store := topologymanager.GetStore(cycleState)
372-
affinity = store.GetAffinity(nodeInfo.Node().Name)
372+
affinity, _ = store.GetAffinity(nodeInfo.Node().Name)
373373
}
374374

375375
allocator := &AutopilotAllocator{
@@ -417,7 +417,7 @@ func (p *Plugin) Reserve(ctx context.Context, cycleState *framework.CycleState,
417417
var affinity topologymanager.NUMATopologyHint
418418
if !p.disableDeviceNUMATopologyAlignment {
419419
store := topologymanager.GetStore(cycleState)
420-
affinity = store.GetAffinity(nodeInfo.Node().Name)
420+
affinity, _ = store.GetAffinity(nodeInfo.Node().Name)
421421
}
422422

423423
allocator := &AutopilotAllocator{

pkg/scheduler/plugins/deviceshare/scoring.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ func (p *Plugin) Score(ctx context.Context, cycleState *framework.CycleState, po
6262
}
6363

6464
store := topologymanager.GetStore(cycleState)
65-
affinity := store.GetAffinity(nodeName)
65+
affinity, _ := store.GetAffinity(nodeName)
6666

6767
allocator := &AutopilotAllocator{
6868
state: state,
@@ -130,7 +130,7 @@ func (p *Plugin) ScoreReservation(ctx context.Context, cycleState *framework.Cyc
130130
}
131131

132132
store := topologymanager.GetStore(cycleState)
133-
affinity := store.GetAffinity(nodeInfo.Node().Name)
133+
affinity, _ := store.GetAffinity(nodeInfo.Node().Name)
134134

135135
allocator := &AutopilotAllocator{
136136
state: state,

pkg/scheduler/plugins/nodenumaresource/plugin.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -484,7 +484,7 @@ func (p *Plugin) FilterReservation(ctx context.Context, cycleState *framework.Cy
484484
restoreState := reservationRestoreState.getNodeState(nodeName)
485485

486486
store := topologymanager.GetStore(cycleState)
487-
affinity := store.GetAffinity(nodeName)
487+
affinity, _ := store.GetAffinity(nodeName)
488488
resourceOptions, err := p.getResourceOptions(state, node, pod, requestCPUBind, affinity, topologyOptions)
489489
if err != nil {
490490
return framework.NewStatus(framework.UnschedulableAndUnresolvable, err.Error())
@@ -541,7 +541,7 @@ func (p *Plugin) Reserve(ctx context.Context, cycleState *framework.CycleState,
541541

542542
// TODO: de-duplicate logic done by the Filter phase and move head the pre-process of the resource options
543543
store := topologymanager.GetStore(cycleState)
544-
affinity := store.GetAffinity(nodeName)
544+
affinity, _ := store.GetAffinity(nodeName)
545545
resourceOptions, err := p.getResourceOptions(state, node, pod, requestCPUBind, affinity, topologyOptions)
546546
if err != nil {
547547
return framework.AsStatus(err)

pkg/scheduler/plugins/nodenumaresource/plugin_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2183,7 +2183,7 @@ func TestFilterWithNUMANodeScoring(t *testing.T) {
21832183
assert.NoError(t, err)
21842184
status = pl.Filter(context.TODO(), cycleState, tt.requestedPod, nodeInfo)
21852185
assert.True(t, status.IsSuccess())
2186-
hint := topologymanager.GetStore(cycleState).GetAffinity(tt.node.Name)
2186+
hint, _ := topologymanager.GetStore(cycleState).GetAffinity(tt.node.Name)
21872187
assert.Equal(t, tt.wantAffinity.GetBits(), hint.NUMANodeAffinity.GetBits())
21882188
})
21892189
}

pkg/scheduler/plugins/nodenumaresource/scoring.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ func (p *Plugin) Score(ctx context.Context, cycleState *framework.CycleState, po
9292
}
9393

9494
store := topologymanager.GetStore(cycleState)
95-
affinity := store.GetAffinity(nodeName)
95+
affinity, _ := store.GetAffinity(nodeName)
9696
resourceOptions, err := p.getResourceOptions(state, node, pod, requestCPUBind, affinity, topologyOptions)
9797
if err != nil {
9898
return 0, nil

0 commit comments

Comments
 (0)