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