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>