Skip to content

Commit

Permalink
Merge pull request #3425 from filecoin-project/feat/better-worker-sel…
Browse files Browse the repository at this point in the history
…ection

Improve worker selection a bit
  • Loading branch information
magik6k authored Aug 31, 2020
2 parents 9110776 + e14c803 commit 219d3c9
Show file tree
Hide file tree
Showing 5 changed files with 21 additions and 3 deletions.
4 changes: 4 additions & 0 deletions extern/sector-storage/sched.go
Original file line number Diff line number Diff line change
Expand Up @@ -437,6 +437,10 @@ func (sh *scheduler) trySched() {
log.Debugf("SCHED ASSIGNED sqi:%d sector %d task %s to window %d", sqi, task.sector.Number, task.taskType, wnd)

windows[wnd].allocated.add(wr, needRes)
// TODO: We probably want to re-sort acceptableWindows here based on new
// workerHandle.utilization + windows[wnd].allocated.utilization (workerHandle.utilization is used in all
// task selectors, but not in the same way, so need to figure out how to do that in a non-O(n^2 way), and
// without additional network roundtrips (O(n^2) could be avoided by turning acceptableWindows.[] into heaps))

selectedWindow = wnd
break
Expand Down
14 changes: 14 additions & 0 deletions extern/sector-storage/sched_resources.go
Original file line number Diff line number Diff line change
Expand Up @@ -108,3 +108,17 @@ func (a *activeResources) utilization(wr storiface.WorkerResources) float64 {

return max
}

func (wh *workerHandle) utilization() float64 {
wh.lk.Lock()
u := wh.active.utilization(wh.info.Resources)
u += wh.preparing.utilization(wh.info.Resources)
wh.lk.Unlock()
wh.wndLk.Lock()
for _, window := range wh.activeWindows {
u += window.allocated.utilization(wh.info.Resources)
}
wh.wndLk.Unlock()

return u
}
2 changes: 1 addition & 1 deletion extern/sector-storage/selector_alloc.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ func (s *allocSelector) Ok(ctx context.Context, task sealtasks.TaskType, spt abi
}

func (s *allocSelector) Cmp(ctx context.Context, task sealtasks.TaskType, a, b *workerHandle) (bool, error) {
return a.active.utilization(a.info.Resources) < b.active.utilization(b.info.Resources), nil
return a.utilization() < b.utilization(), nil
}

var _ WorkerSelector = &allocSelector{}
2 changes: 1 addition & 1 deletion extern/sector-storage/selector_existing.go
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ func (s *existingSelector) Ok(ctx context.Context, task sealtasks.TaskType, spt
}

func (s *existingSelector) Cmp(ctx context.Context, task sealtasks.TaskType, a, b *workerHandle) (bool, error) {
return a.active.utilization(a.info.Resources) < b.active.utilization(b.info.Resources), nil
return a.utilization() < b.utilization(), nil
}

var _ WorkerSelector = &existingSelector{}
2 changes: 1 addition & 1 deletion extern/sector-storage/selector_task.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ func (s *taskSelector) Cmp(ctx context.Context, _ sealtasks.TaskType, a, b *work
return len(atasks) < len(btasks), nil // prefer workers which can do less
}

return a.active.utilization(a.info.Resources) < b.active.utilization(b.info.Resources), nil
return a.utilization() < b.utilization(), nil
}

var _ WorkerSelector = &allocSelector{}

0 comments on commit 219d3c9

Please sign in to comment.