OTP22 performance on lists

Fernando Benavides elbrujohalcon@REDACTED
Wed Jul 1 12:55:52 CEST 2020

(Sorry if you receive this email twice, I sent it from another account and
it seems like it didn't reach the mailing list then)

Hi erlangers,

Yeah! It's me talking about performance, you read that subject right ��‍♂️
Anyway… At NextRoll we're in the process of migrating our systems from
OTP21 to OTP22 (not 23, yet) and our tests showed a *huge* impact on
performance in general, that was not associated to anything in particular.

While trying to figure out what was causing it, we came up with a very very
basic example of things that are consistently slower in OTP22.

I created this gist to show it:

I'm aware that these kinds of micro-benchmarks are treacherous and they may
vary wildly depending on context. Nevertheless, on both on one of our
servers in AWS and on my machine (A MacOS Pro running Catalina 10.15.5) and
using kerl to install multiple versions of OTP 21 and 22… every single time
I run the tests I found the same results…

Always starting the nodes with *erl -boot start_clean *then running the
following in both OTP21 and OTP22…

c(test), test:bench({test, lrec}, 250, 5000, 2000).

…generates very similar numbers in both versions, regardless of the numbers
used for the different parameters. But…

c(test), test:bench({test, rec}, 250, 5000, 2000).

…consistently generates larger results in OTP22 than OTP21. I tried with
different values for the number of tests, the number of lists and their
length and sometimes the difference is more evident, sometimes less… but
OTP22 times are *always* larger.

I found this in the OTP22 readme…

  OTP-15427    Application(s): erts
               Appending lists (The ++ operator) will now yield
               properly on large inputs.

So… questions…
1. Has anybody experienced (and hopefully solved) this problem before when
migrating to OTP22?
2. Do you think OTP-15427 can be related to what I'm seeing?
3. Can someone confirm if you also experience the same difference in
performance when running the same benchmarks that I pasted on that gist?
4. Is there anything else I should try/test/use to check?
5. Am I going slightly mad?

Thanks in advance, cheers :)

Brujo Benavides
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20200701/cca7b59f/attachment.htm>

More information about the erlang-questions mailing list