ERTS timeouts don't account for computer suspension
Mon May 11 11:45:14 CEST 2020
On Sun, 10 May 2020 at 23:27, Rickard Green <rickard@REDACTED> wrote:
> On Sun, May 10, 2020 at 11:05 PM Rickard Green <rickard@REDACTED> wrote:
>> On Sun, May 10, 2020 at 9:20 PM Guilherme Andrade <g@REDACTED> wrote:
>>> Hello list,
>>> I've recently run into an unexpected behaviour of erlcron - it
>>> doesn't account for any time period the computer spends suspended -
>>> scheduled events get delayed by equal amounts.
>>> This is because it leverages gen_server timeouts which, in turn, use
>>> bog-standard VM timeouts, which behave in the way I described. I've
>>> confirmed their behaviour by comparing time elapsed until timeout
>>> according to erlang:monotonic_time/1 vs. os:system_time/1.
>>> After delving into the Erlang/OTP source code for a while I realized
>>> there are two configuration options that appear to control the
>>> unexpected behaviour: "--enable-prefer-elapsed-monotonic-time-during-suspend"
>>> and "--disable-prefer-elapsed-monotonic-time-during-suspend",
>>> introduced in OTP 18.0.2.
>>> The default value of the setting configured by either of those two
>>> options is "no" - that is, elapsed monotonic time during suspend is not
>>> I would like to know the rationale for this. Is it for:
>>> - performance reasons? (say, because it's faster and server hardware
>>> rarely suspends, if at all)
>>> - intended behaviour? (contrary to my expectations)
>>> I'd be thankful for your thoughts on this matter and whether you think
>>> the default behaviour should be changed.
>>> : https://github.com/erlware/erlcron
>>> : https://gist.github.com/g-andrade/508c779a931dde14c22c6e96319caa24
>> Yes, for performance reasons. See release note from OTP 18.0.2 <
>> OTP-12895 Application(s): erts
>> *** POTENTIAL INCOMPATIBILITY ***
>> Changed default OS monotonic clock source chosen at
>> build time. This in order to improve performance. The
>> behavior will now on most systems be that (both OS and
>> Erlang) monotonic time stops when the system is
>> If you prefer that monotonic time elapse during suspend
>> of the machine, you can pass the command line argument
>> to configure when building Erlang/OTP. The
>> configuration stage will try to find such a clock
>> source, but might not be able to find it. Note that
>> there might be a performance penalty associated with
>> such a clock source.
>> Rickard Green, Erlang/OTP, Ericsson AB
> I missed this part:
> > I'd be thankful for your thoughts on this matter and whether you think
> the default behaviour should be changed.
> I do *not* think the default should be changed. I would be very surprised
> if it is more than a very small minority of users that are interested in
> elapsed time during OS suspend. More or less everyone would have to take
> this performance penalty without any benefit. I don't remember any figures
> since this was 5 years ago, but I remember that the performance penalty was
> quite substantial.
OK, crystal clear - that makes perfect sense.
> Rickard Green, Erlang/OTP, Ericsson AB
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the erlang-questions