Propagate number of logical CPUs in resource usage

This commit is contained in:
Ingo Oppermann
2023-04-27 10:58:41 +02:00
parent c9bdaae7f7
commit b723f4e5fd
10 changed files with 86 additions and 10 deletions

View File

@@ -2479,6 +2479,7 @@ const docTemplate = `{
"type": "boolean"
},
"force_gc": {
"description": "deprecated, use MemoryLimit instead",
"type": "integer",
"format": "int"
},
@@ -2641,6 +2642,17 @@ const docTemplate = `{
}
}
},
"resources": {
"type": "object",
"properties": {
"max_cpu_usage": {
"type": "number"
},
"max_memory_usage": {
"type": "number"
}
}
},
"router": {
"type": "object",
"properties": {
@@ -3707,6 +3719,9 @@ const docTemplate = `{
},
"max": {
"type": "number"
},
"ncpu": {
"type": "number"
}
}
},
@@ -4498,6 +4513,7 @@ const docTemplate = `{
"type": "boolean"
},
"force_gc": {
"description": "deprecated, use MemoryLimit instead",
"type": "integer",
"format": "int"
},
@@ -4660,6 +4676,17 @@ const docTemplate = `{
}
}
},
"resources": {
"type": "object",
"properties": {
"max_cpu_usage": {
"type": "number"
},
"max_memory_usage": {
"type": "number"
}
}
},
"router": {
"type": "object",
"properties": {

View File

@@ -2472,6 +2472,7 @@
"type": "boolean"
},
"force_gc": {
"description": "deprecated, use MemoryLimit instead",
"type": "integer",
"format": "int"
},
@@ -2634,6 +2635,17 @@
}
}
},
"resources": {
"type": "object",
"properties": {
"max_cpu_usage": {
"type": "number"
},
"max_memory_usage": {
"type": "number"
}
}
},
"router": {
"type": "object",
"properties": {
@@ -3700,6 +3712,9 @@
},
"max": {
"type": "number"
},
"ncpu": {
"type": "number"
}
}
},
@@ -4491,6 +4506,7 @@
"type": "boolean"
},
"force_gc": {
"description": "deprecated, use MemoryLimit instead",
"type": "integer",
"format": "int"
},
@@ -4653,6 +4669,17 @@
}
}
},
"resources": {
"type": "object",
"properties": {
"max_cpu_usage": {
"type": "number"
},
"max_memory_usage": {
"type": "number"
}
}
},
"router": {
"type": "object",
"properties": {

View File

@@ -146,6 +146,7 @@ definitions:
auto_max_procs:
type: boolean
force_gc:
description: deprecated, use MemoryLimit instead
format: int
type: integer
memory_limit_mbytes:
@@ -256,6 +257,13 @@ definitions:
format: int
type: integer
type: object
resources:
properties:
max_cpu_usage:
type: number
max_memory_usage:
type: number
type: object
router:
properties:
blocked_prefixes:
@@ -974,6 +982,8 @@ definitions:
type: number
max:
type: number
ncpu:
type: number
type: object
api.ProcessUsageMemory:
properties:
@@ -1575,6 +1585,7 @@ definitions:
auto_max_procs:
type: boolean
force_gc:
description: deprecated, use MemoryLimit instead
format: int
type: integer
memory_limit_mbytes:
@@ -1685,6 +1696,13 @@ definitions:
format: int
type: integer
type: object
resources:
properties:
max_cpu_usage:
type: number
max_memory_usage:
type: number
type: object
router:
properties:
blocked_prefixes:

View File

@@ -573,6 +573,7 @@ func (p *parser) parseAVstreamProgress(line string) error {
func (p *parser) Stop(state string, pusage process.Usage) {
usage := Usage{}
usage.CPU.NCPU = pusage.CPU.NCPU
usage.CPU.Average = pusage.CPU.Average
usage.CPU.Max = pusage.CPU.Max
usage.CPU.Limit = pusage.CPU.Limit

View File

@@ -324,6 +324,7 @@ type AVstream struct {
type Usage struct {
CPU struct {
NCPU float64
Average float64
Max float64
Limit float64

View File

@@ -229,6 +229,7 @@ func (s *ProcessState) Unmarshal(state *app.State) {
s.Memory = state.Memory
s.CPU = toNumber(state.CPU)
s.Resources.CPU = ProcessUsageCPU{
NCPU: toNumber(state.Resources.CPU.NCPU),
Current: toNumber(state.Resources.CPU.Current),
Average: toNumber(state.Resources.CPU.Average),
Max: toNumber(state.Resources.CPU.Max),
@@ -246,6 +247,7 @@ func (s *ProcessState) Unmarshal(state *app.State) {
}
type ProcessUsageCPU struct {
NCPU json.Number `json:"ncpu" swaggertype:"number" jsonschema:"type=number"`
Current json.Number `json:"cur" swaggertype:"number" jsonschema:"type=number"`
Average json.Number `json:"avg" swaggertype:"number" jsonschema:"type=number"`
Max json.Number `json:"max" swaggertype:"number" jsonschema:"type=number"`

View File

@@ -55,6 +55,7 @@ func (report *ProcessReport) Unmarshal(l *app.Log) {
ExitState: h.ExitState,
Resources: &ProcessUsage{
CPU: ProcessUsageCPU{
NCPU: toNumber(h.Usage.CPU.NCPU),
Average: toNumber(h.Usage.CPU.Average),
Max: toNumber(h.Usage.CPU.Max),
Limit: toNumber(h.Usage.CPU.Limit),

View File

@@ -81,6 +81,7 @@ type Status struct {
Time time.Time // Time is the time of the last change of the state
CommandArgs []string // Currently running command arguments
CPU struct {
NCPU float64 // Number of logical CPUs
Current float64 // Currently consumed CPU in percent
Average float64 // Average consumed CPU in percent
Max float64 // Max. consumed CPU in percent
@@ -432,14 +433,10 @@ func (p *process) Status() Status {
Reconnect: time.Duration(-1),
Duration: time.Since(stateTime),
Time: stateTime,
CPU: usage.CPU,
Memory: usage.Memory,
}
s.CPU.Current = usage.CPU.Current
s.CPU.Average = usage.CPU.Average
s.CPU.Max = usage.CPU.Max
s.CPU.Limit = usage.CPU.Limit
s.CommandArgs = make([]string, len(p.args))
copy(s.CommandArgs, p.args)

View File

@@ -165,10 +165,11 @@ type State struct {
}
type ProcessUsageCPU struct {
Current float64 // percent 0-100
Average float64 // percent 0-100
Max float64 // percent 0-100
Limit float64 // percent 0-100
NCPU float64 // Number of logical CPUs
Current float64 // percent 0-100*ncpu
Average float64 // percent 0-100*ncpu
Max float64 // percent 0-100*ncpu
Limit float64 // percent 0-100*ncpu
}
type ProcessUsageMemory struct {

View File

@@ -1409,7 +1409,7 @@ func (r *restream) GetProcessState(id string) (*app.State, error) {
state.States.Marshal(status.States)
state.Time = status.Time.Unix()
state.Memory = status.Memory.Current
state.CPU = status.CPU.Current
state.CPU = status.CPU.Current / status.CPU.NCPU
state.Resources.CPU = status.CPU
state.Resources.Memory = status.Memory
state.Duration = status.Duration.Round(10 * time.Millisecond).Seconds()
@@ -1587,6 +1587,7 @@ func (r *restream) GetProcessLog(id string) (*app.Log, error) {
ExitState: h.ExitState,
Usage: app.ProcessUsage{
CPU: app.ProcessUsageCPU{
NCPU: h.Usage.CPU.NCPU,
Average: h.Usage.CPU.Average,
Max: h.Usage.CPU.Max,
Limit: h.Usage.CPU.Limit,