Re: Question on task_blocks_on_rt_mutex()

From: Davidlohr Bueso
Date: Fri Sep 04 2020 - 13:40:55 EST


On Thu, 03 Sep 2020, Paul E. McKenney wrote:

commit d93a64389f4d544ded241d0ba30b2586497f5dc0
Author: Paul E. McKenney <paulmck@xxxxxxxxxx>
Date: Tue Sep 1 16:58:41 2020 -0700

torture: Periodically pause in stutter_wait()

Running locktorture scenario LOCK05 results in hangs:

tools/testing/selftests/rcutorture/bin/kvm.sh --allcpus --torture lock --duration 3 --configs LOCK05

The lock_torture_writer() kthreads set themselves to MAX_NICE while
running SCHED_OTHER. Other locktorture kthreads run at default niceness,
also SCHED_OTHER. This results in these other locktorture kthreads
indefinitely preempting the lock_torture_writer() kthreads. Note that
the cond_resched() in the stutter_wait() function's loop is ineffective
because this scenario is built with CONFIG_PREEMPT=y.

It is not clear that such indefinite preemption is supposed to happen, but
in the meantime this commit prevents kthreads running in stutter_wait()
from being completely CPU-bound, thus allowing the other threads to get
some CPU in a timely fashion. This commit also uses hrtimers to provide
very short sleeps to avoid degrading the sudden-on testing that stutter
is supposed to provide.

Signed-off-by: Paul E. McKenney <paulmck@xxxxxxxxxx>

Reviwed-by: Davidlohr Bueso <dbueso@xxxxxxx>