lkml.org 
[lkml]   [2022]   [Nov]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH RFC 3/3] locktorture: Make the rt_boost factor a tunable
    Date
    The rt boosting in locktorture has a factor variable large enough that
    boosting only happens once every minute or so. Add a tunable to educe
    the factor so that boosting happens more often, to test paths and arrive
    at failure modes earlier. With this change, I can set the factor to
    like 50 and have the boosting happens every 10 seconds or so.

    Tested with boot parameters:
    locktorture.torture_type=mutex_lock
    locktorture.onoff_interval=1
    locktorture.nwriters_stress=8
    locktorture.stutter=0
    locktorture.rt_boost=1
    locktorture.rt_boost_factor=50
    locktorture.nlocks=3

    Signed-off-by: Joel Fernandes (Google) <joel@joelfernandes.org>
    ---
    kernel/locking/locktorture.c | 12 +++++++-----
    1 file changed, 7 insertions(+), 5 deletions(-)

    diff --git a/kernel/locking/locktorture.c b/kernel/locking/locktorture.c
    index 5a388ac96a9b..e4529c2166e9 100644
    --- a/kernel/locking/locktorture.c
    +++ b/kernel/locking/locktorture.c
    @@ -47,6 +47,7 @@ torture_param(int, stat_interval, 60,
    "Number of seconds between stats printk()s");
    torture_param(int, stutter, 5, "Number of jiffies to run/halt test, 0=disable");
    torture_param(int, rt_boost, 0, "Perform an rt-boost from the writer, always 1 for rtmutex_lock");
    +torture_param(int, rt_boost_factor, 50000, "A factor determining how often rt-boost happens");
    torture_param(int, verbose, 1,
    "Enable verbose debugging printk()s");
    torture_param(int, nlocks, 1,
    @@ -132,15 +133,15 @@ static void torture_lock_busted_write_unlock(int tid __maybe_unused)

    static void torture_rt_boost(struct torture_random_state *trsp)
    {
    - const unsigned int factor = 50000; /* yes, quite arbitrary */
    + const unsigned int factor = rt_boost_factor; /* yes, quite arbitrary */

    if (!rt_boost)
    return;

    if (!rt_task(current)) {
    /*
    - * Boost priority once every ~50k operations. When the
    - * task tries to take the lock, the rtmutex it will account
    + * Boost priority once every rt_boost_factor operations. When
    + * the task tries to take the lock, the rtmutex it will account
    * for the new priority, and do any corresponding pi-dance.
    */
    if (trsp && !(torture_random(trsp) %
    @@ -150,8 +151,9 @@ static void torture_rt_boost(struct torture_random_state *trsp)
    return;
    } else {
    /*
    - * The task will remain boosted for another ~500k operations,
    - * then restored back to its original prio, and so forth.
    + * The task will remain boosted for another 10*rt_boost_factor
    + * operations, then restored back to its original prio, and so
    + * forth.
    *
    * When @trsp is nil, we want to force-reset the task for
    * stopping the kthread.
    --
    2.38.1.584.g0f3c55d4c2-goog
    \
     
     \ /
      Last update: 2022-11-23 02:23    [W:3.442 / U:0.468 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site