[squeak-dev] Review Request: fix-busyWait-precision.1.cs
christoph.thiede at student.hpi.uni-potsdam.de
christoph.thiede at student.hpi.uni-potsdam.de
Fri Apr 1 11:52:28 UTC 2022
Hi Marcel,
thanks for the critique.
For reference, normal #wait also does not wait long enough for small durations:
[1 microSecond wait] bench '1,440,000 per second. 696 nanoseconds per run. 12.2 % GC time.'
Then again, one of my main scenarios when I proposed the original version of #busyWait was exactly to program precise tiny delays. I used this to simulate any kind of - more or less expensive - computations in order to test progress bars and other status updates (for example, conversations filters in SIT). So, my #unknownCompute method will be called thousands or ten-thousands of times and I want to simulate that each computation takes about 10 microSeconds. Isn't this a fair scenario to you? :-)
> It is also not good to have a dependency from the Kernel package to Chronology.
Fair point. Still, we could duplicate these three lines.
Best,
Christoph
---
Sent from Squeak Inbox Talk
On 2022-03-29T09:05:53+02:00, marcel.taeumel at hpi.de wrote:
> Hi Christoph --
>
> -1
>
> The entire waiting protocol is only useful for milliseconds or higher. The compromise to wait less than 10 milliseconds was only for tests if I recall correctly.
>
> It is also not good to have a dependency from the Kernel package to Chronology.
>
> Please keep on looking for more realistic scenarios for such changes. :-)
>
> Best,
> Marcel
> Am 28.03.2022 22:55:11 schrieb christoph.thiede at student.hpi.uni-potsdam.de <christoph.thiede at student.hpi.uni-potsdam.de>:
> =============== Summary ===============
>
> Change Set: fix-busyWait-precision
> Date: 28 March 2022
> Author: Christoph Thiede
>
> Fixes #busyWait for durations < 1 milliSecond. Since the original proposal (Chronology-Core-ct.67), the implementation had been moved from Duration to Delay (Chronology-Core-mt.71). However, Delay has only milliseconds precision, causing shorter durations to be handled as a delayDuration of 0 milliSeconds and leading to this erroneous output:
>
> [1 microSeconds busyWait] bench '6,240,000 per second. 160 nanoseconds per run. 0.67973 % GC time.'
>
> Moves #busyWait implementation back to Duration and invokes it from Delay. Not sure whether we need the latter hook, though.
>
> =============== Diff ===============
>
> Delay>>busyWait {delaying} · ct 3/28/2022 22:36 (changed)
> busyWait
> - "BEWARE! This method is more precise than #wait, but it sacrifices many CPU cycles for that precision. Also note that the GC runs more often. Also note that only processes with a higher priority can run while waiting.
> -
> - The following lists the precision (in milliseconds) of #wait on a Microsoft Surface Pro 6, Windows 10 21H1, OSVM 202104182333:
> - 100 -> 100
> - 50 -> 51.1 ... 102.2%
> - 10 -> 11.6 ... 105.5% ... maybe use #busyWait
> - 5 -> 5.93 ... 118.6% ... use #busyWait but check process priorities
> - 1 -> 1.41 ... 141.0% ... use #busyWait but check process priorities
> -
> - As of July 2021, the shortest delay that we can guarantee on all platforms is still 1 millisecond as the value of #utcMicrosecondClock might not change any faster than that. For more information, see http://lists.squeakfoundation.org/pipermail/squeak-dev/2021-July/215928.html"
> -
> - "[5 milliSeconds busyWait] bench"
> + "BEWARE! This method is more precise than #wait, but it sacrifices many CPU cycles for that precision. Also note that the GC runs more often. Also note that only processes with a higher priority can run while waiting. See more detailed commentary in Duration >> #busyWait."
>
> - | proceedTime |
> - proceedTime := Time utcMicrosecondClock + (delayDuration "milliseconds" * 1000).
> - [Time utcMicrosecondClock >= proceedTime] whileFalse.
> + ^ self delayDuration microSeconds busyWait
>
> Duration>>busyWait {squeak protocol} · ct 3/28/2022 22:39 (changed)
> busyWait
> - "BEWARE! This method is more precise than #wait, but it sacrifices many CPU cycles for that precision. Also note that only processes with a higher priority can run while waiting. See more detailed commentary in Delay >> #busyWait."
> + "BEWARE! This method is more precise than #wait, but it sacrifices many CPU cycles for that precision. Also note that the GC runs more often. Also note that only processes with a higher priority can run while waiting.
> +
> + The following lists the precision (in milliseconds) of #wait on a Microsoft Surface Pro 6, Windows 10 21H1, OSVM 202104182333:
> + 100 -> 100
> + 50 -> 51.1 ... 102.2%
> + 10 -> 11.6 ... 105.5% ... maybe use #busyWait
> + 5 -> 5.93 ... 118.6% ... use #busyWait but check process priorities
> + 1 -> 1.41 ... 141.0% ... use #busyWait but check process priorities
> +
> + As of July 2021, the shortest delay that we can guarantee on all platforms is still 1 millisecond as the value of #utcMicrosecondClock might not change any faster than that. For more information, see http://lists.squeakfoundation.org/pipermail/squeak-dev/2021-July/215928.html"
> +
> + "[5 milliSeconds busyWait] bench"
>
> - ^ self asDelay busyWait
> + | proceedTime |
> + proceedTime := Time utcMicrosecondClock + self asMicroSeconds.
> + [Time utcMicrosecondClock >= proceedTime] whileFalse.
>
> ["fix-busyWait-precision.1.cs"]
>
> ---
> Sent from Squeak Inbox Talk [https://github.com/hpi-swa-lab/squeak-inbox-talk]
> ["fix-busyWait-precision.1.cs"]
> -------------- next part --------------
> An HTML attachment was scrubbed...
> URL: <http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20220329/d7489060/attachment-0001.html>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20220401/5094c73a/attachment-0001.html>
More information about the Squeak-dev
mailing list
|