Using and understanding systemd scheduling-related options in a desktop context
29
votes
2
answers
23942
views
In systemd service files, one can set the following scheduling related options (from the
systemd.exec
man page , correct me if I'm wrong):
> **Nice**
> Sets the default nice level (scheduling priority) for executed processes. Takes an integer between -20 (highest priority) and 19 (lowest priority). See setpriority(2) for details.
Which is the familiar nice level. It seems its effect is ‘subverted’ somewhat due to the ‘autogroup’ feature of recent linux kernels. So the options below may be what I'd really want to set to keep processes behaving nicely for my desktop experience.
> **CPUSchedulingPolicy**
> Sets the CPU scheduling policy for executed processes. Takes one of other, batch, idle, fifo or rr. See sched_setscheduler(2) for details.
>
> **CPUSchedulingPriority**
> Sets the CPU scheduling priority for executed processes. The available priority range depends on the selected CPU scheduling policy (see above). For real-time scheduling policies an integer between 1 (lowest priority) and 99 (highest priority) can be used. See sched_setscheduler(2) for details.
>
> **CPUSchedulingResetOnFork**
> Takes a boolean argument. If true, elevated CPU scheduling priorities and policies will be reset when the executed processes fork, and can hence not leak into child processes. See sched_setscheduler(2) for details. Defaults to false.
I understand the last option. I gather from the explanation of the first two that I can choose a scheduling policy and then, given that policy, a priority. It is not entirely clear to me what I should choose for which kind of tasks. For example, is it safe to choose ‘idle’ for backup tasks (relatively CPU intensive, because deduplicating), or is another one better suited?
In general, getting an understandable overview of each policy, with each of its priorities and suitability for specific purposes is what I am looking for. Also the interaction with the nice level is of interest.
Next to CPU scheduling, there is IO scheduling. I guess this corresponds to ionice
(correct me if I'm wrong).
> **IOSchedulingClass**
> Sets the I/O scheduling class for executed processes. Takes an integer between 0 and 3 or one of the strings none, realtime, best-effort or idle. See ioprio_set(2) for details.
>
> **IOSchedulingPriority**
> Sets the I/O scheduling priority for executed processes. Takes an integer between 0 (highest priority) and 7 (lowest priority). The available priorities depend on the selected I/O scheduling class (see above). See ioprio_set(2) for details.
We here see the same structure as with the CPU scheduling. I'm looking for the same kind of information as well.
For all the ‘Scheduling’ options, the referred to man pages are not clear enough for me, mostly in translating things to a somewhat technically-inclined desktop user's point of view.
Asked by equaeghe
(654 rep)
Jan 25, 2017, 10:14 AM
Last activity: May 31, 2019, 06:01 AM
Last activity: May 31, 2019, 06:01 AM