Skip to content

Commit

Permalink
improve scheduler getFullResult (#324)
Browse files Browse the repository at this point in the history
* improve cpu scheduler: use remainder to getFullRes

* transform recursive into for loop
  • Loading branch information
jschwinger233 committed Jan 20, 2021
1 parent 6aab298 commit 58385f1
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 14 deletions.
25 changes: 25 additions & 0 deletions scheduler/complex/cpu_test.go
Expand Up @@ -235,3 +235,28 @@ func TestCPUReallocWithPriorPlan(t *testing.T) {
_, _, _, err = po.ReselectCPUNodes(scheduleInfo, CPU, 2, 0)
assert.EqualError(t, err, "not enough resource")
}

func TestGetFullResult(t *testing.T) {
h := host{share: 100}
res := h.getFullResult(2, []resourceInfo{
{
id: "0",
pieces: 400,
},
{
id: "1",
pieces: 200,
},
{
id: "2",
pieces: 400,
},
})
assert.EqualValues(t, 4, len(res))
assert.ElementsMatch(t, res, []types.ResourceMap{
{"0": 100, "1": 100},
{"0": 100, "1": 100},
{"0": 100, "2": 100},
{"0": 100, "2": 100},
})
}
30 changes: 16 additions & 14 deletions scheduler/complex/resource.go
Expand Up @@ -183,24 +183,26 @@ func (h *host) getFragmentsResult(resources []resourceInfo, fragments ...int64)

func (h *host) getFullResult(full int, resources []resourceInfo) []types.ResourceMap {
result := []types.ResourceMap{}
count := len(resources) / full
newResources := []resourceInfo{}
for i := 0; i < count; i++ {
plan := types.ResourceMap{}
for j := i * full; j < i*full+full; j++ {
// 洗掉没配额的
last := resources[j].pieces - int64(h.share)
if last > 0 {
newResources = append(newResources, resourceInfo{resources[j].id, last})

for len(resources)/full > 0 {
count, rem := len(resources)/full, len(resources)%full
newResources := []resourceInfo{}
for i := 0; i < count; i++ {
plan := types.ResourceMap{}
for j := i * full; j < i*full+full; j++ {
// 洗掉没配额的
last := resources[j].pieces - int64(h.share)
if last > 0 {
newResources = append(newResources, resourceInfo{resources[j].id, last})
}
plan[resources[j].id] = int64(h.share)
}
plan[resources[j].id] = int64(h.share)
result = append(result, plan)
}
result = append(result, plan)
}

if len(newResources)/full > 0 {
return append(result, h.getFullResult(full, newResources)...)
resources = append(newResources, resources[len(resources)-rem:]...)
}

return result
}

Expand Down

0 comments on commit 58385f1

Please sign in to comment.