Re: [PATCH RESEND 1/1] x86: tsc: avoid system instability in hibernation

From: Eduardo Valentin
Date: Mon Jul 30 2018 - 12:51:08 EST


Hey Peter,

On Mon, Jul 30, 2018 at 10:53:54AM +0200, Peter Zijlstra wrote:
> On Thu, Jul 26, 2018 at 08:56:56AM -0700, Eduardo Valentin wrote:
> > System instability are seen during resume from hibernation when system
> > is under heavy CPU load. This is due to the lack of update of sched
> > clock data
>
> Which would suggest you're already running with unstable sched clock.
> Otherwise nobody would care about the scd stuff.


Yes.

>
> What kind of machine are you running? What does:
>
> dmesg | grep -i tsc
>
> say?

Here:
[ 0.000000] tsc: Fast TSC calibration using PIT
[ 0.004005] tsc: Detected 3000.000 MHz processor
[ 0.066796] TSC deadline timer enabled
[ 3.904269] clocksource: tsc: mask: 0xffffffffffffffff max_cycles: 0x2b3e459bf4c, max_idle_ns: 440795289890 ns

>
> > The fix for this situation is to mark the sched clock as unstable
> > as early as possible in the resume path, leaving it unstable
> > for the duration of the resume process. This will force the
> > scheduler to attempt to align the sched clock across CPUs using
> > the delta with time of day, updating sched clock data. In a post
> > hibernation event, we can then mark the sched clock as stable
> > again, avoiding unnecessary syncs with time of day on systems
> > in which TSC is reliable.
>
> None of this makes any sense. Either you were already unstable and it
> should already have worked and them marking it stable is an outright
> bug, or your sched clock was stable but then your initial diagnosis of
> lack of scd updates is complete garbage.
>

I see, or it is just a workaround for the underling issue. I, for sure, see no
lockups anymore after forcing the scd updates. The other thing which are not
super clear is that this happens during the unfreezing of tasks. If I get a
set of cpu hog tasks while unfreezing, I see the system throwing worqueue lockup
detectors in hibernation restore.

>

--
All the best,
Eduardo Valentin