lkml.org 
[lkml]   [2023]   [Jan]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 clocksource 4/7] clocksource: Improve "skew is too large" messages
    Date
    When clocksource_watchdog() detects excessive clocksource skew compared
    to the watchdog clocksource, it marks the clocksource under test as
    unstable and prints several lines worth of message. But that message
    is unclear to anyone unfamiliar with the code:

    clocksource: timekeeping watchdog on CPU2: Marking clocksource 'wdtest-ktime' as unstable because the skew is too large:
    clocksource: 'kvm-clock' wd_nsec: 400744390 wd_now: 612625c2c wd_last: 5fa7f7c66 mask: ffffffffffffffff
    clocksource: 'wdtest-ktime' cs_nsec: 600744034 cs_now: 173081397a292d4f cs_last: 17308139565a8ced mask: ffffffffffffffff
    clocksource: 'kvm-clock' (not 'wdtest-ktime') is current clocksource.

    Therefore, add the following line near the end of that message:

    Clocksource 'wdtest-ktime' skewed 199999644 ns (199 ms) over watchdog 'kvm-clock' interval of 400744390 ns (400 ms)

    This new line clearly indicates the amount of skew between the two
    clocksources, along with the duration of the time interval over which
    the skew occurred, both in nanoseconds and milliseconds.

    Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
    Cc: John Stultz <jstultz@google.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Stephen Boyd <sboyd@kernel.org>
    Cc: Feng Tang <feng.tang@intel.com>
    ---
    kernel/time/clocksource.c | 8 ++++++++
    1 file changed, 8 insertions(+)

    diff --git a/kernel/time/clocksource.c b/kernel/time/clocksource.c
    index b59914953809f..fc486cd972635 100644
    --- a/kernel/time/clocksource.c
    +++ b/kernel/time/clocksource.c
    @@ -446,12 +446,20 @@ static void clocksource_watchdog(struct timer_list *unused)
    /* Check the deviation from the watchdog clocksource. */
    md = cs->uncertainty_margin + watchdog->uncertainty_margin;
    if (abs(cs_nsec - wd_nsec) > md) {
    + u64 cs_wd_msec;
    + u64 wd_msec;
    + u32 wd_rem;
    +
    pr_warn("timekeeping watchdog on CPU%d: Marking clocksource '%s' as unstable because the skew is too large:\n",
    smp_processor_id(), cs->name);
    pr_warn(" '%s' wd_nsec: %lld wd_now: %llx wd_last: %llx mask: %llx\n",
    watchdog->name, wd_nsec, wdnow, wdlast, watchdog->mask);
    pr_warn(" '%s' cs_nsec: %lld cs_now: %llx cs_last: %llx mask: %llx\n",
    cs->name, cs_nsec, csnow, cslast, cs->mask);
    + cs_wd_msec = div_u64_rem(cs_nsec - wd_nsec, 1000U * 1000U, &wd_rem);
    + wd_msec = div_u64_rem(wd_nsec, 1000U * 1000U, &wd_rem);
    + pr_warn(" Clocksource '%s' skewed %lld ns (%lld ms) over watchdog '%s' interval of %lld ns (%lld ms)\n",
    + cs->name, cs_nsec - wd_nsec, cs_wd_msec, watchdog->name, wd_nsec, wd_msec);
    if (curr_clocksource == cs)
    pr_warn(" '%s' is current clocksource.\n", cs->name);
    else if (curr_clocksource)
    --
    2.31.1.189.g2e36527f23
    \
     
     \ /
      Last update: 2023-03-26 23:54    [W:2.809 / U:0.196 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site