| 144 | |
| 145 | == Combining multiple scheduling types == |
| 146 | |
| 147 | BOINC potentially supports the following types of work, |
| 148 | each with its own scheduling mechanism: |
| 149 | |
| 150 | * Job-stream: the input is a stream of jobs; |
| 151 | the goal is to maximize throughput and eventually finish all jobs. |
| 152 | * Batch: described above. |
| 153 | * Locality: a variant of job-stream in which |
| 154 | jobs are assigned according to the files resident on the client. |
| 155 | * Co-scheduling: like batch, except all jobs in each batch |
| 156 | must run simultaneously (e.g., MPI applications). |
| 157 | |
| 158 | A single project (such as a portal) may have work of some or all types. |
| 159 | |
| 160 | How should we handle multiple scheduling types - |
| 161 | in particular, how can we maintain resource shares in their presence? |
| 162 | |
| 163 | One simple approach is to maintain, for each scheduling type T, |
| 164 | the maximum debt D(T) of any user with an unsent job of type T. |
| 165 | Then use this top-level policy: |
| 166 | {{{ |
| 167 | for each scheduling type T in order of descending D(T) |
| 168 | send jobs of type T |
| 169 | }}} |
| 170 | How to maintain D(T): |
| 171 | |
| 172 | * Job-stream: maintain in the feeder (consider only jobs in the cache) |
| 173 | * Locality: constraint: only 1 user can use locality scheduling |
| 174 | * Batch: maintain in batch module |
| 175 | * Co-scheduling: maintain in co-scheduling module |
| 176 | |
| 177 | == Maintaining debts == |
| 178 | |
| 179 | A user's debt is adjusted each time a job is dispatched, |
| 180 | based on the estimated FLOPS of the job. |
| 181 | This quantity is recorded in the job record. |
| 182 | |
| 183 | When a job finishes or times out |
| 184 | (at which point the actual computing done is known) |
| 185 | the user debt is adjusted accordingly. |