Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 35 additions & 0 deletions resource/plugins/cpumem/client/cpu.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package client

import (
"fmt"
"strings"

"github.com/projecteru2/core/resource/plugins/cpumem/types"
"github.com/projecteru2/core/utils"
)

// NewNUMAFromStr .
func NewNUMAFromStr(numa []string) (types.NUMA, error) {
r := types.NUMA{}
for index, numaCPUList := range numa {
nodeID := fmt.Sprintf("%d", index)
for _, cpuID := range strings.Split(numaCPUList, ",") {
r[cpuID] = nodeID
}
}
return r, nil
}

// NewNUMAMemoryFromStr .
func NewNUMAMemoryFromStr(numaMemory []string) (types.NUMAMemory, error) {
r := types.NUMAMemory{}
for index, nodeMemory := range numaMemory {
nodeID := fmt.Sprintf("%d", index)
mem, err := utils.ParseRAMInHuman(nodeMemory)
if err != nil {
return r, err
}
r[nodeID] = mem
}
return r, nil
}
38 changes: 38 additions & 0 deletions resource/plugins/cpumem/client/node.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package client

import (
"encoding/json"

"github.com/projecteru2/core/resource/plugins/cpumem/types"
)

type cpuType interface {
string | int64
}

// NodeResourceRequest includes all possible fields passed by eru-core for editing node, it not parsed!
type NodeResourceRequest[T cpuType] struct {
CPU T `json:"cpu"`
Share int64 `json:"share"`
Memory int64 `json:"memory"`

NUMA types.NUMA `json:"numa-cpu"`
NUMAMemory types.NUMAMemory `json:"numa-memory"`
}

// NewNodeResourceRequest .
func NewNodeResourceRequest[T cpuType](cpu T, share, memory int64, NUMA types.NUMA, NUMAMemory types.NUMAMemory) (*NodeResourceRequest[T], error) {
r := &NodeResourceRequest[T]{
CPU: cpu,
Share: share,
Memory: memory,
NUMA: NUMA,
NUMAMemory: NUMAMemory,
}
return r, nil
}

// Encode .
func (n NodeResourceRequest[T]) Encode() ([]byte, error) {
return json.Marshal(n)
}
30 changes: 30 additions & 0 deletions resource/plugins/cpumem/client/workload.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package client

import "encoding/json"

// WorkloadResourceRequest .
type WorkloadResourceRequest struct {
CPUBind bool `json:"cpu-bind"`
KeepCPUBind bool `json:"keep-cpu-bind"`
CPURequest float64 `json:"cpu-request"`
CPULimit float64 `json:"cpu-limit"`
MemRequest int64 `json:"mem-request"`
MemLimit int64 `json:"mem-limit"`
}

// NewWorkloadResourceRequest .
func NewWorkloadResourceRequest(cpuBind, keepCPUBind bool, CPURequest, CPULimit float64, MemRequest, MemLimit int64) (*WorkloadResourceRequest, error) {
return &WorkloadResourceRequest{
CPUBind: cpuBind,
KeepCPUBind: keepCPUBind,
CPURequest: CPURequest,
CPULimit: CPULimit,
MemRequest: MemRequest,
MemLimit: MemLimit,
}, nil
}

// Encode .
func (w WorkloadResourceRequest) Encode() ([]byte, error) {
return json.Marshal(w)
}
26 changes: 6 additions & 20 deletions resource/plugins/cpumem/types/node.go
Original file line number Diff line number Diff line change
Expand Up @@ -179,8 +179,6 @@ type NodeResourceRequest struct {
}

func (n *NodeResourceRequest) Parse(config coretypes.Config, rawParams resourcetypes.RawParams) error {
var err error

if n.CPUMap == nil {
n.CPUMap = CPUMap{}
}
Expand Down Expand Up @@ -208,30 +206,18 @@ func (n *NodeResourceRequest) Parse(config coretypes.Config, rawParams resourcet
n.CPUMap[cpuID] = int(pieces)
}
}

if n.Memory, err = coreutils.ParseRAMInHuman(rawParams.String("memory")); err != nil {
return err
}
n.Memory = rawParams.Int64("memory")

n.NUMA = NUMA{}
n.NUMAMemory = NUMAMemory{}

for index, numaCPUList := range rawParams.StringSlice("numa-cpu") {
nodeID := fmt.Sprintf("%d", index)
for _, cpuID := range strings.Split(numaCPUList, ",") {
n.NUMA[cpuID] = nodeID
}
for cpuID, nodeID := range rawParams.RawParams("numa-cpu") {
n.NUMA[cpuID] = nodeID.(string)
}

for index, nodeMemory := range rawParams.StringSlice("numa-memory") {
nodeID := fmt.Sprintf("%d", index)
mem, err := coreutils.ParseRAMInHuman(nodeMemory)
if err != nil {
return err
}
n.NUMAMemory[nodeID] = mem
for nodeID, nodeMemory := range rawParams.RawParams("numa-memory") {
// stupid golang covert int64 to float64 when using json.unmarshal
n.NUMAMemory[nodeID] = int64(nodeMemory.(float64))
}

return nil
}

Expand Down