BOINC / boinc

Open-source software for volunteer computing and grid computing.
https://boinc.berkeley.edu
GNU Lesser General Public License v3.0
1.95k stars 439 forks source link

Project Priorities #5589

Open sr1gh opened 2 months ago

sr1gh commented 2 months ago

Currently, projects use a resource share to determine how to get work. If the resource share is greater than zero, the project sends enough work to fill the user set work buffer if there is enough work available. If the resource share is zero, the project only sends enough work to use the available CPUs and GPUs, and only sends work if there is no work available from projects with a resource share greater than zero. This is good, but there is no way to prioritize projects so that work is received for one or more projects before other ones. If someone only wants to get work from a project only if there isn't any work from other projects, the resource share can be set to zero, but if multiple projects are set to zero, work is received from all of them equally.

With project priorities, projects can be prioritized in groups, using resource shares to divide the work in each priority group. Here is an example:

Project A (CPU Only): Resource share = 100 (25%), Priority = 1 Project B (CPU/GPU): Resource share = 100 (25%), Priority = 1 Project C (CPU Only): Resource share = 100 (25%), Priority = 2 Project D (CPU Only): Resource share = 50 (12.5%), Priority = 2 Project E (CPU/GPU): Resource share = 50 (12.5%), Priority = 2 Project F (CPU Only): Resource share = 0, Priority = 2 Project G (CPU/GPU): Resource share = 0, Priority = 3 Project H (CPU/GPU): Resource share = 0, Priority = 4 Project I (CPU/GPU): Resource share = 0, Priority = 4

Work would be received from Projects A and B first. If there is no work for Project B, get GPU work from Project E, because it is the next priority project with GPU work. If none is available, get from Project G, then H or I. If there is no work for Project A or B, get from Projects C, D, and E, then F. If no work is available from these, then G, and then H or I.

Resource share would still be global, not per priority, since work could be received from projects of different priorities.

AenBleidd commented 2 months ago

@sr1gh, resource share works a little bit different, please read the docs: https://github.com/BOINC/boinc/wiki/ClientSched#project-scheduling-priority

davidpanderson commented 2 months ago

Nice idea but the implementation would be complex; probably not worth doing.