2020-04-22 12:24:17

by Peter Zijlstra

[permalink] [raw]
Subject: [PATCH 19/23] sched,rcuperf: Convert to sched_set_fifo_low()

Because SCHED_FIFO is a broken scheduler model (see previous patches)
take away the priority field, the kernel can't possibly make an
informed decision.

Effectively no change.

Cc: [email protected]
Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
Reviewed-by: Ingo Molnar <[email protected]>
---
kernel/rcu/rcuperf.c | 8 ++------
1 file changed, 2 insertions(+), 6 deletions(-)

--- a/kernel/rcu/rcuperf.c
+++ b/kernel/rcu/rcuperf.c
@@ -353,7 +353,6 @@ rcu_perf_writer(void *arg)
int i_max;
long me = (long)arg;
struct rcu_head *rhp = NULL;
- struct sched_param sp;
bool started = false, done = false, alldone = false;
u64 t;
u64 *wdp;
@@ -362,8 +361,7 @@ rcu_perf_writer(void *arg)
VERBOSE_PERFOUT_STRING("rcu_perf_writer task started");
WARN_ON(!wdpp);
set_cpus_allowed_ptr(current, cpumask_of(me % nr_cpu_ids));
- sp.sched_priority = 1;
- sched_setscheduler_nocheck(current, SCHED_FIFO, &sp);
+ sched_set_fifo_low(current);

if (holdoff)
schedule_timeout_uninterruptible(holdoff * HZ);
@@ -419,9 +417,7 @@ rcu_perf_writer(void *arg)
started = true;
if (!done && i >= MIN_MEAS) {
done = true;
- sp.sched_priority = 0;
- sched_setscheduler_nocheck(current,
- SCHED_NORMAL, &sp);
+ sched_set_normal(current, 0);
pr_alert("%s%s rcu_perf_writer %ld has %d measurements\n",
perf_type, PERF_FLAG, me, MIN_MEAS);
if (atomic_inc_return(&n_rcu_perf_writer_finished) >=



2020-04-22 15:53:38

by Paul E. McKenney

[permalink] [raw]
Subject: Re: [PATCH 19/23] sched,rcuperf: Convert to sched_set_fifo_low()

On Wed, Apr 22, 2020 at 01:27:38PM +0200, Peter Zijlstra wrote:
> Because SCHED_FIFO is a broken scheduler model (see previous patches)
> take away the priority field, the kernel can't possibly make an
> informed decision.
>
> Effectively no change.
>
> Cc: [email protected]
> Signed-off-by: Peter Zijlstra (Intel) <[email protected]>
> Reviewed-by: Ingo Molnar <[email protected]>

Reviewed-by: Paul E. McKenney <[email protected]>

> ---
> kernel/rcu/rcuperf.c | 8 ++------
> 1 file changed, 2 insertions(+), 6 deletions(-)
>
> --- a/kernel/rcu/rcuperf.c
> +++ b/kernel/rcu/rcuperf.c
> @@ -353,7 +353,6 @@ rcu_perf_writer(void *arg)
> int i_max;
> long me = (long)arg;
> struct rcu_head *rhp = NULL;
> - struct sched_param sp;
> bool started = false, done = false, alldone = false;
> u64 t;
> u64 *wdp;
> @@ -362,8 +361,7 @@ rcu_perf_writer(void *arg)
> VERBOSE_PERFOUT_STRING("rcu_perf_writer task started");
> WARN_ON(!wdpp);
> set_cpus_allowed_ptr(current, cpumask_of(me % nr_cpu_ids));
> - sp.sched_priority = 1;
> - sched_setscheduler_nocheck(current, SCHED_FIFO, &sp);
> + sched_set_fifo_low(current);
>
> if (holdoff)
> schedule_timeout_uninterruptible(holdoff * HZ);
> @@ -419,9 +417,7 @@ rcu_perf_writer(void *arg)
> started = true;
> if (!done && i >= MIN_MEAS) {
> done = true;
> - sp.sched_priority = 0;
> - sched_setscheduler_nocheck(current,
> - SCHED_NORMAL, &sp);
> + sched_set_normal(current, 0);
> pr_alert("%s%s rcu_perf_writer %ld has %d measurements\n",
> perf_type, PERF_FLAG, me, MIN_MEAS);
> if (atomic_inc_return(&n_rcu_perf_writer_finished) >=
>
>