Skip to content

CpuSched

Vitalii Koshura edited this page Apr 10, 2023 · 2 revisions

CPU scheduling in Version 4+

DEPRECATED

Time-slicing

Starting with version 4.00, the BOINC core client does time-slicing. This means that the core client may switch back and forth between results of different projects. This is done in a way that allocates CPU time according to the 'resource shares' you have assigned to each project.

For example, suppose you participate in SETI@home with resource share 100 and Predictor@home with resource share 200. A single-processor machine might be scheduled as follows:

1:00 - 2:00: SETI@home
2:00 - 3:00: Predictor@home
3:00 - 4:00: Predictor@home
4:00 - 5:00: SETI@home
5:00 - 6:00: Predictor@home
6:00 - 7:00: Predictor@home
...

A two-processor machine might be scheduled as follows:

             CPU 0             CPU 1
1:00 - 2:00: Predictor@home    SETI@home
2:00 - 3:00: Predictor@home    SETI@home
3:00 - 4:00: Predictor@home    Predictor@home
4:00 - 5:00: Predictor@home    SETI@home
5:00 - 6:00: Predictor@home    SETI@home
6:00 - 7:00: Predictor@home    Predictor@home

In every 3 hour period, your computer spends 4 hours on Predictor@home and 2 hours on SETI@home, which is the desired ratio.

This feature is necessary to handle projects like Climateprediction.net, whose work units take a long time (1 or 2 months) to complete on a typical computer. Without time-slicing, your computer would have to finish an entire work unit before it could start working on a different project.

Preemption

When BOINC switches from one application to another, the first application is said to be preempted. BOINC can do preemption in two different ways; you can select this as part of your General Preferences.

  • Don't leave the suspended applications in memory (default). Applications are preempted by killing them; they are later restarted, and resume from their last checkpoint. This saves virtual memory (swap space) but can waste CPU time, especially if applications checkpoint infrequently.
  • Leave suspended applications in memory. Applications are preempted by suspending them; they remain in virtual memory while preempted (they don't necessarily occupy physical memory).
Clone this wiki locally