Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 3 Mar 2019 04:14:23 +1100 (EST)
From:      Bruce Evans <brde@optusnet.com.au>
To:        Poul-Henning Kamp <phk@phk.freebsd.dk>
Cc:        Konstantin Belousov <kostikbel@gmail.com>, Ian Lepore <ian@freebsd.org>,  Mark Millard <marklmi@yahoo.com>,  Mark Millard via freebsd-hackers <freebsd-hackers@freebsd.org>,  Konstantin Belousov <kib@freebsd.org>,  FreeBSD PowerPC ML <freebsd-ppc@freebsd.org>
Subject:   Re: powerpc64 head -r344018 stuck sleeping problems: th->th_scale * tc_delta(th) overflows unsigned 64 bits sometimes [patched failed]
Message-ID:  <20190303032006.T4781@besplex.bde.org>
In-Reply-To: <9993.1551536230@critter.freebsd.dk>
References:  <D3D7E9F4-9A5E-4320-B3C8-EC5CEF4A2764@yahoo.com> <20190228145542.GT2420@kib.kiev.ua> <20190228150811.GU2420@kib.kiev.ua> <962D78C3-65BE-40C1-BB50-A0088223C17B@yahoo.com> <28C2BB0A-3DAA-4D18-A317-49A8DD52778F@yahoo.com> <20190301112717.GW2420@kib.kiev.ua> <679402FF-907C-43AF-B18C-8C9CC857D7A6@yahoo.com> <6669.1551473821@critter.freebsd.dk> <210dfd0f50ee6b1149c914ee503502654eb5f328.camel@freebsd.org> <20190302105652.GD68879@kib.kiev.ua> <9993.1551536230@critter.freebsd.dk>

next in thread | previous in thread | raw e-mail | index | archive | help
On Sat, 2 Mar 2019, Poul-Henning Kamp wrote:

> --------
> In message <20190302105652.GD68879@kib.kiev.ua>, Konstantin Belousov writes:
>
>> Using more than two timehands increases a chance of reader to try to
>> use outdated timehands.
>
> No, using only two timehands increase the chance that the reader tries
> to use the timehand which is being updated.

Then it sees the generation change and retries.  We fixed the ordering
of accesses to the generation count so that this is robust.  1 timehands
is always valid, so with 2 timehands there is no wait for the retry
except in the very unlikely event that the generation changes for the
new timehands too.  1 timehands would work too, but the retries would
have to wait while it is updated.

> As long as the reader does not use the timehand being updated, using
> a one or two generations old timehand is OK.

In old versions, there were races checking the generation count.  Having
multiple timehands made these races more unlikely to matter.

> The target-value for delta-t was "a few milliseconds" when I wrote
> timecounters, if somebody has changed that since, I hope they did
> their math first.

Tickless kernels complicate things.  It's surprising that tc_ticktock()
works so well with them.  Calls to hardclock() are not periodic, so
calls to tc_ticktock() are not periodic either.  It has to handle
coalesced and 1/hz ticks.  Too much coalescing would break it.  With
my normal hz = 100, cpu0:timer interrupts still occur at at least 100 Hz.
These presumably go to hardclock(), so the timing is satisfied.  With
hz = 1000, cpu0:timer interrupts only occur at at least 200 Hz.  This
is less than tc_ticktock() expects, but it still works.

Bruce



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20190303032006.T4781>