Plug-in power-capping policy from commandline.
This commit is contained in:
parent
e9c338995c
commit
49b58fd2f9
1 changed files with 45 additions and 3 deletions
48
scheduler.go
48
scheduler.go
|
@ -16,12 +16,14 @@ import (
|
||||||
elecLogDef "gitlab.com/spdf/elektron/logging/def"
|
elecLogDef "gitlab.com/spdf/elektron/logging/def"
|
||||||
"gitlab.com/spdf/elektron/pcp"
|
"gitlab.com/spdf/elektron/pcp"
|
||||||
"gitlab.com/spdf/elektron/schedulers"
|
"gitlab.com/spdf/elektron/schedulers"
|
||||||
|
"gitlab.com/spdf/elektron/powerCap"
|
||||||
)
|
)
|
||||||
|
|
||||||
var master = flag.String("master", "", "Location of leading Mesos master -- <mesos-master>:<port>")
|
var master = flag.String("master", "", "Location of leading Mesos master -- <mesos-master>:<port>")
|
||||||
var tasksFile = flag.String("workload", "", "JSON file containing task definitions")
|
var tasksFile = flag.String("workload", "", "JSON file containing task definitions")
|
||||||
var wattsAsAResource = flag.Bool("wattsAsAResource", false, "Enable Watts as a Resource")
|
var wattsAsAResource = flag.Bool("wattsAsAResource", false, "Enable Watts as a Resource")
|
||||||
var pcplogPrefix = flag.String("logPrefix", "", "Prefix for pcplog")
|
var pcplogPrefix = flag.String("logPrefix", "", "Prefix for pcplog")
|
||||||
|
var powerCapPolicy = flag.String("powercap", "", "Power Capping policy. (default (''), extrema, prog-extrema).")
|
||||||
var hiThreshold = flag.Float64("hiThreshold", 0.0, "Upperbound for when we should start capping")
|
var hiThreshold = flag.Float64("hiThreshold", 0.0, "Upperbound for when we should start capping")
|
||||||
var loThreshold = flag.Float64("loThreshold", 0.0, "Lowerbound for when we should start uncapping")
|
var loThreshold = flag.Float64("loThreshold", 0.0, "Lowerbound for when we should start uncapping")
|
||||||
var classMapWatts = flag.Bool("classMapWatts", false, "Enable mapping of watts to power class of node")
|
var classMapWatts = flag.Bool("classMapWatts", false, "Enable mapping of watts to power class of node")
|
||||||
|
@ -40,6 +42,7 @@ func init() {
|
||||||
flag.StringVar(tasksFile, "w", "", "JSON file containing task definitions (shorthand)")
|
flag.StringVar(tasksFile, "w", "", "JSON file containing task definitions (shorthand)")
|
||||||
flag.BoolVar(wattsAsAResource, "waar", false, "Enable Watts as a Resource (shorthand)")
|
flag.BoolVar(wattsAsAResource, "waar", false, "Enable Watts as a Resource (shorthand)")
|
||||||
flag.StringVar(pcplogPrefix, "p", "", "Prefix for pcplog (shorthand)")
|
flag.StringVar(pcplogPrefix, "p", "", "Prefix for pcplog (shorthand)")
|
||||||
|
flag.StringVar(powerCapPolicy, "pc", "", "Power Capping policy. (default (''), extrema, prog-extrema) (shorthand).")
|
||||||
flag.Float64Var(hiThreshold, "ht", 700.0, "Upperbound for when we should start capping (shorthand)")
|
flag.Float64Var(hiThreshold, "ht", 700.0, "Upperbound for when we should start capping (shorthand)")
|
||||||
flag.Float64Var(loThreshold, "lt", 400.0, "Lowerbound for when we should start uncapping (shorthand)")
|
flag.Float64Var(loThreshold, "lt", 400.0, "Lowerbound for when we should start uncapping (shorthand)")
|
||||||
flag.BoolVar(classMapWatts, "cmw", false, "Enable mapping of watts to power class of node (shorthand)")
|
flag.BoolVar(classMapWatts, "cmw", false, "Enable mapping of watts to power class of node (shorthand)")
|
||||||
|
@ -160,9 +163,48 @@ func main() {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
go pcp.Start(pcpLog, &recordPCP, logMType, logMsg, scheduler)
|
// Power Capping policy (if required).
|
||||||
//go pcp.StartPCPLogAndExtremaDynamicCap(pcpLog, &recordPCP, *hiThreshold, *loThreshold, logMType, logMsg)
|
var noPowercap, extrema, progExtrema bool
|
||||||
//go pcp.StartPCPLogAndProgressiveExtremaCap(pcpLog, &recordPCP, *hiThreshold, *loThreshold, logMType, logMsg)
|
var powercapValues map[string]struct{} = map[string]struct{} {
|
||||||
|
"": {},
|
||||||
|
"extrema": {},
|
||||||
|
"progExtrema": {},
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, ok := powercapValues[*powerCapPolicy]; !ok {
|
||||||
|
logger.WriteLog(elecLogDef.ERROR, "Incorrect power capping policy specified.")
|
||||||
|
os.Exit(1)
|
||||||
|
} else {
|
||||||
|
// Indicating which power capping policy to use, if any.
|
||||||
|
if *powerCapPolicy == "" {
|
||||||
|
noPowercap = true
|
||||||
|
} else {
|
||||||
|
if *powerCapPolicy == "extrema" {
|
||||||
|
extrema = true
|
||||||
|
} else {
|
||||||
|
progExtrema = true
|
||||||
|
}
|
||||||
|
// High and Low Thresholds.
|
||||||
|
// These values are not used to configure the scheduler.
|
||||||
|
// hiThreshold and loThreshold are passed to the powercappers.
|
||||||
|
if *hiThreshold < *loThreshold {
|
||||||
|
logger.WriteLog(elecLogDef.ERROR, "High threshold is of a"+
|
||||||
|
" lower value than low threshold.")
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if noPowercap {
|
||||||
|
go pcp.Start(pcpLog, &recordPCP, logMType, logMsg, scheduler)
|
||||||
|
} else if extrema {
|
||||||
|
go powerCap.StartPCPLogAndExtremaDynamicCap(pcpLog, &recordPCP, *hiThreshold,
|
||||||
|
*loThreshold, logMType, logMsg)
|
||||||
|
} else if progExtrema {
|
||||||
|
go powerCap.StartPCPLogAndProgressiveExtremaCap(pcpLog, &recordPCP, *hiThreshold,
|
||||||
|
*loThreshold, logMType, logMsg)
|
||||||
|
}
|
||||||
|
|
||||||
time.Sleep(1 * time.Second) // Take a second between starting PCP log and continuing
|
time.Sleep(1 * time.Second) // Take a second between starting PCP log and continuing
|
||||||
|
|
||||||
// Attempt to handle SIGINT to not leave pmdumptext running.
|
// Attempt to handle SIGINT to not leave pmdumptext running.
|
||||||
|
|
Reference in a new issue