Skip to content

Commit 75c5683

Browse files
Merge pull request volcano-sh#17 from asifdxtreme/master
[Cherry-Pick} Added Configuration to enable/disable predicates
2 parents 2b508f0 + bdc7d55 commit 75c5683

File tree

2 files changed

+114
-30
lines changed

2 files changed

+114
-30
lines changed

pkg/scheduler/framework/arguments.go

+20
Original file line numberDiff line numberDiff line change
@@ -44,3 +44,23 @@ func (a Arguments) GetInt(ptr *int, key string) {
4444

4545
*ptr = value
4646
}
47+
48+
//GetBool get the bool value from string
49+
func (a Arguments) GetBool(ptr *bool, key string) {
50+
if ptr == nil {
51+
return
52+
}
53+
54+
argv, ok := a[key]
55+
if !ok || argv == "" {
56+
return
57+
}
58+
59+
value, err := strconv.ParseBool(argv)
60+
if err != nil {
61+
glog.Warningf("Could not parse argument: %s for key %s, with err %v", argv, key, err)
62+
return
63+
}
64+
65+
*ptr = value
66+
}

pkg/scheduler/plugins/predicates/predicates.go

+94-30
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,15 @@ import (
3131
"github.com/kubernetes-sigs/kube-batch/pkg/scheduler/plugins/util"
3232
)
3333

34+
const (
35+
// MemoryPressurePredicate is the key for enabling Memory Pressure Predicate in YAML
36+
MemoryPressurePredicate = "predicate.MemoryPressureEnable"
37+
// DiskPressurePredicate is the key for enabling Disk Pressure Predicate in YAML
38+
DiskPressurePredicate = "predicate.DiskPressureEnable"
39+
// PIDPressurePredicate is the key for enabling PID Pressure Predicate in YAML
40+
PIDPressurePredicate = "predicate.PIDPressureEnable"
41+
)
42+
3443
type predicatesPlugin struct {
3544
// Arguments given for the plugin
3645
pluginArguments framework.Arguments
@@ -54,6 +63,53 @@ func formatReason(reasons []algorithm.PredicateFailureReason) string {
5463
return strings.Join(reasonStrings, ", ")
5564
}
5665

66+
type predicateEnable struct {
67+
memoryPressureEnable bool
68+
diskPressureEnable bool
69+
pidPressureEnable bool
70+
}
71+
72+
func enablePredicate(args framework.Arguments) predicateEnable {
73+
74+
/*
75+
User Should give predicatesEnable in this format(predicate.MemoryPressureEnable, predicate.DiskPressureEnable, predicate.PIDPressureEnable.
76+
Currently supported only for MemoryPressure, DiskPressure, PIDPressure predicate checks.
77+
78+
actions: "reclaim, allocate, backfill, preempt"
79+
tiers:
80+
- plugins:
81+
- name: priority
82+
- name: gang
83+
- name: conformance
84+
- plugins:
85+
- name: drf
86+
- name: predicates
87+
arguments:
88+
predicate.MemoryPressureEnable: true
89+
predicate.DiskPressureEnable: true
90+
predicate.PIDPressureEnable: true
91+
- name: proportion
92+
- name: nodeorder
93+
*/
94+
95+
predicate := predicateEnable{
96+
memoryPressureEnable: false,
97+
diskPressureEnable: false,
98+
pidPressureEnable: false,
99+
}
100+
101+
// Checks whether predicate.MemoryPressureEnable is provided or not, if given, modifies the value in predicateEnable struct.
102+
args.GetBool(&predicate.memoryPressureEnable, MemoryPressurePredicate)
103+
104+
// Checks whether predicate.DiskPressureEnable is provided or not, if given, modifies the value in predicateEnable struct.
105+
args.GetBool(&predicate.diskPressureEnable, DiskPressurePredicate)
106+
107+
// Checks whether predicate.PIDPressureEnable is provided or not, if given, modifies the value in predicateEnable struct.
108+
args.GetBool(&predicate.pidPressureEnable, PIDPressurePredicate)
109+
110+
return predicate
111+
}
112+
57113
func (pp *predicatesPlugin) OnSessionOpen(ssn *framework.Session) {
58114
pl := &util.PodLister{
59115
Session: ssn,
@@ -63,6 +119,8 @@ func (pp *predicatesPlugin) OnSessionOpen(ssn *framework.Session) {
63119
Session: ssn,
64120
}
65121

122+
predicate := enablePredicate(pp.pluginArguments)
123+
66124
ssn.AddPredicateFn(pp.Name(), func(task *api.TaskInfo, node *api.NodeInfo) error {
67125
nodeInfo := cache.NewNodeInfo(node.Pods()...)
68126
nodeInfo.SetNode(node.Node)
@@ -141,46 +199,52 @@ func (pp *predicatesPlugin) OnSessionOpen(ssn *framework.Session) {
141199
task.Namespace, task.Name, node.Name)
142200
}
143201

144-
// CheckNodeMemoryPressurePredicate
145-
fit, _, err = predicates.CheckNodeMemoryPressurePredicate(task.Pod, nil, nodeInfo)
146-
if err != nil {
147-
return err
148-
}
202+
if predicate.memoryPressureEnable {
203+
// CheckNodeMemoryPressurePredicate
204+
fit, _, err = predicates.CheckNodeMemoryPressurePredicate(task.Pod, nil, nodeInfo)
205+
if err != nil {
206+
return err
207+
}
149208

150-
glog.V(4).Infof("CheckNodeMemoryPressure predicates Task <%s/%s> on Node <%s>: fit %t, err %v",
151-
task.Namespace, task.Name, node.Name, fit, err)
209+
glog.V(4).Infof("CheckNodeMemoryPressure predicates Task <%s/%s> on Node <%s>: fit %t, err %v",
210+
task.Namespace, task.Name, node.Name, fit, err)
152211

153-
if !fit {
154-
return fmt.Errorf("node <%s> are not available to schedule task <%s/%s> due to Memory Pressure",
155-
node.Name, task.Namespace, task.Name)
212+
if !fit {
213+
return fmt.Errorf("node <%s> are not available to schedule task <%s/%s> due to Memory Pressure",
214+
node.Name, task.Namespace, task.Name)
215+
}
156216
}
157217

158-
// CheckNodeDiskPressurePredicate
159-
fit, _, err = predicates.CheckNodeDiskPressurePredicate(task.Pod, nil, nodeInfo)
160-
if err != nil {
161-
return err
162-
}
218+
if predicate.diskPressureEnable {
219+
// CheckNodeDiskPressurePredicate
220+
fit, _, err = predicates.CheckNodeDiskPressurePredicate(task.Pod, nil, nodeInfo)
221+
if err != nil {
222+
return err
223+
}
163224

164-
glog.V(4).Infof("CheckNodeDiskPressure predicates Task <%s/%s> on Node <%s>: fit %t, err %v",
165-
task.Namespace, task.Name, node.Name, fit, err)
225+
glog.V(4).Infof("CheckNodeDiskPressure predicates Task <%s/%s> on Node <%s>: fit %t, err %v",
226+
task.Namespace, task.Name, node.Name, fit, err)
166227

167-
if !fit {
168-
return fmt.Errorf("node <%s> are not available to schedule task <%s/%s> due to Disk Pressure",
169-
node.Name, task.Namespace, task.Name)
228+
if !fit {
229+
return fmt.Errorf("node <%s> are not available to schedule task <%s/%s> due to Disk Pressure",
230+
node.Name, task.Namespace, task.Name)
231+
}
170232
}
171233

172-
// CheckNodePIDPressurePredicate
173-
fit, _, err = predicates.CheckNodePIDPressurePredicate(task.Pod, nil, nodeInfo)
174-
if err != nil {
175-
return err
176-
}
234+
if predicate.pidPressureEnable {
235+
// CheckNodePIDPressurePredicate
236+
fit, _, err = predicates.CheckNodePIDPressurePredicate(task.Pod, nil, nodeInfo)
237+
if err != nil {
238+
return err
239+
}
177240

178-
glog.V(4).Infof("CheckNodePIDPressurePredicate predicates Task <%s/%s> on Node <%s>: fit %t, err %v",
179-
task.Namespace, task.Name, node.Name, fit, err)
241+
glog.V(4).Infof("CheckNodePIDPressurePredicate predicates Task <%s/%s> on Node <%s>: fit %t, err %v",
242+
task.Namespace, task.Name, node.Name, fit, err)
180243

181-
if !fit {
182-
return fmt.Errorf("node <%s> are not available to schedule task <%s/%s> due to PID Pressure",
183-
node.Name, task.Namespace, task.Name)
244+
if !fit {
245+
return fmt.Errorf("node <%s> are not available to schedule task <%s/%s> due to PID Pressure",
246+
node.Name, task.Namespace, task.Name)
247+
}
184248
}
185249

186250
// Pod Affinity/Anti-Affinity Predicate

0 commit comments

Comments
 (0)