Build times almost doubling on every major release

Guilherme Andrade g@REDACTED
Wed Aug 5 04:35:24 CEST 2020


Hello Sergei,

Your diagnostic does match what John Högberg mentioned in Erlanger Slack
(#general channel) a few days ago - namely, that recent versions of OTP do
much more aggressive optimizations.

On the bright side, it looks like OTP 24 will likely compile stuff faster -
without necessarily compromising on said optimizations.

Cheers,

On Wed, 29 Jul 2020 at 11:24, Сергей Прохоров <seriy.pr@REDACTED> wrote:

> erlc has an option to measure how much time each compilation step takes:
> `erlc +time <erl file>`.
>
> I tried it with your example:
>
> OTP-23
> ```
> time erlc +time test_pb.erl
> Compiling "test_pb"
>  remove_file                   :      0.000 s       3.3 kB
>  parse_module                  :      0.577 s   14389.4 kB
> <..>
>  core                          :      0.660 s  110867.4 kB
>  core_old_inliner              :      0.439 s  130500.1 kB
>  sys_core_fold                 :      0.707 s   95544.3 kB
> <..>
>  v3_kernel                     :      0.592 s   85036.7 kB
> <..>
>  beam_ssa_bsm                  :      1.241 s   52211.4 kB
>     %% Sub passes of beam_ssa_bsm from slowest to fastest:
>     combine_matches            :      0.458 s  37 %
> <..>
>  beam_ssa_funs                 :      0.053 s   52211.4 kB
>  beam_ssa_opt                  :     11.192 s   41673.2 kB
>     %% Sub passes of beam_ssa_opt from slowest to fastest:
>     ssa_opt_type_start         :      5.128 s  47 %
>     ssa_opt_live               :      1.892 s  17 %
>     ssa_opt_type_continue      :      1.667 s  15 %
>     ssa_opt_dead               :      0.919 s   8 %
>     ssa_opt_sink               :      0.506 s   5 %
> <..>
>  beam_ssa_recv                 :      0.050 s   41673.2 kB
>  beam_ssa_pre_codegen          :      1.913 s   49962.4 kB
>     %% Sub passes of beam_ssa_pre_codegen from slowest to fastest:
>     live_intervals             :      0.468 s  25 %
>     linear_scan                :      0.250 s  13 %
> <..>
>  beam_ssa_codegen              :      0.797 s   21962.5 kB
>  beam_validator_strong         :      0.603 s   21962.5 kB
> <..>
>  save_binary                   :      0.001 s      55.7 kB
> erlc +time test_pb.erl  21.69s user 1.67s system 102% cpu 22.685 total
> ```
>
> and, eg, OTP-21:
> ```
> time erlc +time test_pb.erl
> Compiling "test_pb"
>  remove_file                   :      0.000 s       3.3 kB
>  parse_module                  :      0.588 s   14389.4 kB
> <..>
>  core                          :      0.632 s  110405.3 kB
>  core_old_inliner              :      0.531 s  130242.5 kB
>  sys_core_fold                 :      0.894 s   95317.8 kB
> <..>
>  v3_kernel                     :      0.721 s  114068.9 kB
>  v3_codegen                    :      0.627 s   26703.4 kB
> <..>
>  save_binary                   :      0.000 s      55.7 kB
> erlc +time test_pb.erl  8.39s user 0.48s system 111% cpu 7.980 total
> ```
>
> OTP-22:
> ```
> Compiling "test_pb"
>  remove_file                   :      0.000 s       3.3 kB
>  parse_module                  :      0.578 s   14389.4 kB
> <..>
>  core                          :      0.546 s  110405.3 kB
>  core_old_inliner              :      0.449 s  129401.0 kB
>  sys_core_fold                 :      0.768 s   95241.3 kB
> <..>
>  v3_kernel                     :      0.681 s  113407.6 kB
>  beam_kernel_to_ssa            :      0.225 s   45635.5 kB
>  beam_ssa_share                :      0.081 s   45375.4 kB
>  beam_ssa_bsm                  :      1.157 s   49943.7 kB
>     %% Sub passes of beam_ssa_bsm from slowest to fastest:
>     combine_matches            :      0.404 s  35 %
> <..>
>  beam_ssa_funs                 :      0.049 s   49436.8 kB
>  beam_ssa_opt                  :      4.938 s   44202.7 kB
>     %% Sub passes of beam_ssa_opt from slowest to fastest:
>     ssa_opt_live               :      1.259 s  27 %
>     ssa_opt_type_continue      :      1.159 s  24 %
>     ssa_opt_dead               :      0.879 s  19 %
>     ssa_opt_type_start         :      0.649 s  14 %
> <..>
>  beam_ssa_recv                 :      0.049 s   44202.7 kB
>  beam_ssa_pre_codegen          :      2.485 s   59314.1 kB
>     %% Sub passes of beam_ssa_pre_codegen from slowest to fastest:
>     live_intervals             :      0.710 s  29 %
> <..>
>  beam_ssa_codegen              :      0.989 s   23579.8 kB
> <..>
>  save_binary                   :      0.001 s      55.7 kB
> erlc +time test_pb.erl  15.85s user 1.32s system 106% cpu 16.183 total
> ```
>
> So it seems there were a lot of `beam ssa` optimization passes aded and
> some of them are quite slow on large files.
>


-- 
Guilherme
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20200805/8cfebf68/attachment.htm>


More information about the erlang-questions mailing list