pcm-coordinator/api/internal/algo/provider.go

61 lines
1.4 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package algo
import "math"
type Provider struct {
Pid int64
CpuSum float64
MemSum float64
DiskSum float64
CpuCost float64
MemCost float64
DiskCost float64
CpuAvail float64
MemAvail float64
DiskAvail float64
CurReplicas int
MaxReplicas int
MaxTaskCanRun int //记录该厂商针对当前可以接收的最大任务数
TrustDegree float64 //信任度取值为0到1默认初始为1
LearnIndex float64 //云厂商生产成本的学习指数
PartWill float64 //合作意愿
ProfitSum float64
ProfitPerTask map[int]float64
}
func NewProvider(Pid int64, CpuSum float64, MemSum float64, DiskSum float64, CpuCost float64, MemCost float64, DiskCost float64) *Provider {
return &Provider{
Pid: Pid,
CpuSum: CpuSum,
MemSum: MemSum,
DiskSum: DiskSum,
CpuCost: CpuCost,
MemCost: MemCost,
DiskCost: DiskCost,
CpuAvail: CpuSum,
MemAvail: MemSum,
DiskAvail: DiskSum,
LearnIndex: 0.9,
PartWill: 1,
}
}
func (p *Provider) GenMaxResourceNum(t *Task) {
p.MaxReplicas = int(math.Floor(p.CpuAvail / t.Cpu))
if p.MaxReplicas > int(math.Floor(p.MemAvail/t.Mem)) {
p.MaxReplicas = int(math.Floor(p.MemAvail / t.Mem))
}
if p.MaxReplicas > int(math.Floor(p.DiskAvail/t.Disk)) {
p.MaxReplicas = int(math.Floor(p.DiskAvail / t.Disk))
}
if p.MaxReplicas > 0 {
p.MaxTaskCanRun = t.Replicas
}
}
func (p Provider) name() {
}