1
1
mirror of https://github.com/systemd/systemd-stable.git synced 2025-02-02 09:47:03 +03:00

pid1: order jobs that execute processes with lower priority

We can meaningfully compare jobs for units which have cpu weight or nice set.
But non-exec units those have those set.

Starting non-exec jobs first allows us to get them out of the queue quickly,
and consider more jobs for starting.

If we have service A, and socket B, and service C which is after socket B,
and we want to start both A and C, and C has higher cpu weight, if we get
B out of the way first, we'll know that we can start both A and C, and we'll
start C first.

Also invert the comparisons using CMP() so they are always done left vs. right,
and negate when returning instead.

Follow-up for da8e178296.
This commit is contained in:
Zbigniew Jędrzejewski-Szmek 2019-07-18 18:30:15 +02:00 committed by Yu Watanabe
parent 65dd488fe1
commit 217b7b33cc

View File

@ -3531,11 +3531,14 @@ int compare_job_priority(const void *a, const void *b) {
uint64_t weight_x, weight_y; uint64_t weight_x, weight_y;
int ret; int ret;
if ((ret = CMP(x->unit->type, y->unit->type)) != 0)
return -ret;
weight_x = unit_get_cpu_weight(x->unit); weight_x = unit_get_cpu_weight(x->unit);
weight_y = unit_get_cpu_weight(y->unit); weight_y = unit_get_cpu_weight(y->unit);
if ((ret = CMP(weight_y, weight_x)) != 0) if ((ret = CMP(weight_x, weight_y)) != 0)
return ret; return -ret;
nice_x = unit_get_nice(x->unit); nice_x = unit_get_nice(x->unit);
nice_y = unit_get_nice(y->unit); nice_y = unit_get_nice(y->unit);
@ -3543,9 +3546,6 @@ int compare_job_priority(const void *a, const void *b) {
if ((ret = CMP(nice_x, nice_y)) != 0) if ((ret = CMP(nice_x, nice_y)) != 0)
return ret; return ret;
if ((ret = CMP(x->unit->type, y->unit->type)) != 0)
return ret;
return strcmp(x->unit->id, y->unit->id); return strcmp(x->unit->id, y->unit->id);
} }