From 1c8065845ed9b8d2273c910099e21271297f15e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Gustavsson?= Date: Fri, 24 Jan 2025 07:14:18 +0100 Subject: [PATCH] Limit peak memory use while loading code on small systems In order to start the runtime system as fast as possible, modules known to be always needed to be loaded are loaded in parallel. When those modules have been loaded, the `error_handler` mechanism kicks in to load modules on demand. However, loading code in parallel will increase the peak memory usage while loading, which can be serious issue for embedded system with a limited amount of memory. This commit adds an heuristic in the `init` module to disable parallel loading when it seems probable that the system has limited memory. Parallel loading is disabled if running on a 32-bit CPU with a single core. A few calls to `erlang:garbage_collect/0` are also added to make sure that binaries holding BEAM code are deallocated as soon as possible. While at it, the number of processes spawned by `erl_prim_loader` when fetching and preparing BEAM files has been changed to 1.5 times the number of schedulers, and capped at 32 processes. It used to be 32 processes regardless of the number of cores. --- erts/preloaded/ebin/erl_prim_loader.beam | Bin 23940 -> 24092 bytes erts/preloaded/ebin/init.beam | Bin 27600 -> 27956 bytes erts/preloaded/src/erl_prim_loader.erl | 15 +++++++++------ erts/preloaded/src/init.erl | 19 +++++++++++++++++++ lib/kernel/src/code.erl | 4 +++- 5 files changed, 31 insertions(+), 7 deletions(-) diff --git a/erts/preloaded/ebin/erl_prim_loader.beam b/erts/preloaded/ebin/erl_prim_loader.beam index 276dc1e3f1ce0d9a3662df12f2ff49af96ba93a0..971e3fcc91d3a8ededd377aba6959da3c766a73b 100644 GIT binary patch delta 8595 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 A00000 delta 8142 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 diff --git a/erts/preloaded/ebin/init.beam b/erts/preloaded/ebin/init.beam index 8a84409877ac296147a8311645fa54e187ecee1c..d95344a66f1a3b829d9f2f964e3b9d7037948c38 100644 GIT binary patch delta 10427 zcmZ`<2YeL8_rJN>kjt6ql069Bg*#-pW68mtcp-wDMpkqnA`n2OXpkZZg8iqz#ex)3 z(8IE#fTGAsH-ZHPEU0V6jvas2wPNr3|IY3m1o@i}do%lH-gn--dGF1eS$4lc?t6>G z1`Qq7ClHw4tGcd=pE%|0iGhH0cwqluPzwaepPOT&gXT#4G<&Q)$)0SFw<9GW%A0xxK<(Y2RhvZQJ%bd!xO{ zzSnNHx7zpH+w6z!o%R#U49uJ4cyL z4=3*QcFLW;PRdC;vQz3PP8+ApY3Fouj&UlT8mG>wcMOL+L!4pGIA^@mvnRF zbfa!}m$~I`${pa=xr5w#cZ5629pjF6Pj$z+XS$QzsqR_sIqv!H#qNJy)4j@_=gxN* zxQpCt+-u#%?)7fgUFzQ8-r_EEZ*}i*SGlX*HF4K=*SQ@#PCTF*XX^2Da|rcInRd)$n( zr@<`tHcdSJyh-EEm@$3klxY*2nr|z)oiq2I*`6Ick?GBYIzAXAqwekUphN~|AL`bNyx06` zx7#GrFFUu#Hd5YP#pV$*pxNn}A*6G2F!2~6A7*#;8bdyBR<*G~QrB#jHxaU@`J?0& z5;-b6`RHNoyGnA&X*!MQ=PG*Ns2*NVt>A-?qp61aV6;M|J6m_BuROx}@k-(!<-S#g33vE*h$u zPs$WYW>Q^Orb-cAiCK(+{1gPSSWhXSEe4Cl;;3C$Nwv9UdSC6za6-F+uq$*as>c*P zLgyy~7E3^&C-iDs8c+zkQj8UgqOBmQ%}WwC7Z`&nVOLqKSFkkvB1rR!)gCuR3 zF|AMyrB`SRsajo4Wu-z}sPxC9Rx5Heqs@=bR|9$!g7=1Wo8+W?CoNOMFM&`Vl0)SI z!se&7h0$syAn6jQNp#y`u|9=z=;(yDfL43dzMwuN>vB{;1**14CTsyP49L9@5(@dRw%E~-{}q+6MH%fHTCA(OlCGjOR!svDA$c`b zB@eWpq-yVFM-EWUV=+%&@!RHB^Ikd z>uYGet~e0T!>>cm{+Ld`gmyix(!+c3UYUPyt%no7=C9YoZ=&T`Xr&)`vlbg*0_QEA zu%*SSt}BwTv6SK|b09>#5&Ec;f=V4#ga$DEDnX$^S|?FjAYKW(!D7b&K zW<4nMW?8Hnvb+OXZpmo33RzMK?bc{ftT?IX%~%gAI^2ZS0M}feTN{5}Y9Zw@%e7^V zu{mXGBi&7PDK=ll(!)tg#>`buakqDAG!vg&D!LeX_OJEoGSk`=O=tcxm2 zD^*)g*vhna8!ZmNyfBRuTJ{clE_S=cPQ)1RV~jfz+A1YnkAYVe%d+RNTng|Lg_y89 zQ{}5Mk2@_k1Ppt@a942y96l*UVlZBv*6Ky&nD9{OYHbzFAfeff%F6oCkr~Z~=ro2h zRuzjN5Htuu>5DVk+9H8Dv zeMnW{`G_zld)llIbrm*qzfRM7ZES#cH({&w7`Rml@n|^sRtjD{64lc%skCQoBeJI6 z-Mn9~#ROu6-L0pgr;%9O%nEIdA4RCB?G67AE(xL5(C~-oRN4SNt-Ojv8vf5Br6V35$Ol#|?-$j`BCX0;$%*VjrtkWD*Ghz2y>=Z!C}t?*KNKw#Z3cGzC*=+G?>=f$#~C@6Tvkfe@t`?Exx0F)EzcVyF4b zAgo<1P~O%hDtrNa4?y)mdeCBHf%IuZC&C^oRvYvhFRCb1kHYPu78_TX3{_+YRChMV zM+nA*8lIT%tcNGkQWY|7Z>Mb|Y)5sVzNgw+T)m_Tty?;`_96W zp8?noy|l+@ct#)X35w0YVojK8f5INa#B~WV3*lg*Bx_F!|B}fR}%t;uwvO;^A_Q#{ z!Tb~2vyCx;pp1mSwAhqO3Id^HJwCW#B-R9O17xrdNNCT{zIey_4!77;2z8`Rn_%4_ z)LQH;5Za))q(BZG+n8Pne;e*OiwHxaabR{}ZM^F=)Q-a=7s{Imdqxj`iBN;Ar6;}J zlkVBxxr5_ex!BOcLc#r*oziBAMG{J z_zLY+tf9p&C=7&Zt7EcaQxVc)Fr&H^+AA~}{&Pxgk+5A6Zgywa)u{y+im7E^s%vY$ zl-73TZ0Ti-O%k^B3a~_?@hZj;=MDyB1Q1L?`?}+8Z3=V5c3_e#VOb; z{_7*_GE$m@kj;ajd)}T;KfGP=U5g=Mi5CFrJ%6*b*c_;JP=)pZT<3%Ru0x@Y4?Ne| z3)gv{u=f*am4wbkg0WY;#S7(R0I8lDZjk1~7Q-8%oy*LK=p?eN4}`^f-T!B?%Q0*S z`uPy5^wa~T#fzePJPf8QM84fi`;5km21?pT7P}I&gY}2%3H#_cNkfZB;$)G;$!nL; zG8s&B(QaTrChX%f?NfxnPcVZ|sG0YE#IjFlco=@Yzy~MsWcj3>_Az0fwimyj6*c%o z*J4*ez!C`fxxdzgeNm=;1=KHr`sD$=B=8cx7Qa5I$P9%-zHFy`LD*Mq^{|4g1|(f*{xV&$tj4k|IiaU{tFO>lE)Mu_{;^3FFNg@pG?Ee6u-J}& z*V8GzHmVO7>ng+^PuL%_8mNmMO8+yheUB|#*Hhv!=qceg0f{`*D+f5J50s^Y?PXYm4J6y!1Hc!EvP<81{%tNdUX3yVaI z!u^C|Gj|eL0gaR-c!-7*i2iZd3v%O<({d+?cqcEe86iDh>eq_)L+J6=0yDgZM)QgZ z%!zkKbS@4c-MRh$fjLZ%%YvsEG5HSYwu?-Rk_(M&HJNQTC7}9qy6T|(0IC3Ew{% z8KsqtCe?XI5dwJocx&D+Udqej3U3>a@HX)_JQ8oqF(fh#A7k~Q7?FJ2-G{cd$+xXJ zw5_e*hARsD(8jVn<2{GAwL_aOrM)?=J+!&KaE1u(PsF_dZ>I`PkifIa^S>g zVtO5+FJbAOEVdq+Rg=W%oZ&~pqf^QX-X*1mWAaQKA%oPr9f=`!cxKe4SQfrzu?^V7 zI*Vj0cM3O-O!H34KY7F{+fXgG5o2`47+u8y!Ndsx7Y9mIZ;kM>37O>J3Le9<_2;nz zTTg~}6UT~Fn&V84W<_s|=r}WokYIEJ6;_j{ihW6tqx(tTYfS8dg5KR?n;}6I5*$@5 zoBkQaAO2o{_#WQyJ;d-b&F~)HK4Q%B zy9(Yb)gO;qoeI<>c&{4lH^^bCQ*x>u+9fR^TQaeD%LuOmipi)}%ACd*0ir5)XGJG$3`nf>J;3Fi1{YdytmMNAB)`& z3A+QbZ-%Em$RsDJ?8=6S*|+8DrHgZib@ypKRW+F}nv zSRCYxez;k%*hBEXiZnk4$8|3e3ZT<5xlrO~NJhqD+aS$R;Hk)Pvl0r6Diyqcv_BrT zIvT(__fL6eNbhQ?Ix1%RaBil!NE3HT7^S7${ab-RjLJ06DBhipajeB2!6-ejDg!e7 zILtXkEBHXH%E0`p41_V&WbZvGVh+rk^LCi?fR@0=rTMY6g*hwm0MDASi|qhDgHEe5 zyhiAhrg=4m+A!tne8##HVpoZs&p+^@cTJk(ofx$idlUd=AenU;Zg{Jb;q}p~D2=B1 zps1{?b&7wBhVFx8J(+v;Z`vLkqK1wqMtz#sM$vAd6tKrz>~X;M3=m^5!g()2JHcX4 zfEEYsM9?%r;}+WmS^~5o$le1YjoKJNI;-g6%c1WlvE6rFj|7TJlOud+F6oW;!iiU8 zyiY}@Lxzy2YLrS70!d5$*U%#2DFL{5D$5f#kg*`KXe> zfosm)UaIkopCDrvLd<7F>Js!DZL#OTf=gXvjNVsR2<+ulVw_^J=RwD1H8D;t7FX8Z z5k_497^ju-(_t|aXn#EW)9XrwPbeE7-oVF)8~C_*FFuwSW1%B)N$Evr|Kjfj7-$pL z++r_^8DNda!K&KSQ3UV^Zi4x#Nn(tL9f*BGT&Icm3GMi4#5ldZ_&vj7yT$TAu%-;3 zNJ~^qv_TvNa1x4CQ7Wz73ujlnxE${Tv-9&xjQEn293iCfc7Y}UOoUFM(K9XfG9dec zGO45?f3m=w)gj`ZUfkNP-6u{N8<7CM0yUn1{7+m!OY38jSm4QJ{46Z+)Pol|33r|9 zE$~#aw0OxLKBBYvD(vUP1fLQKC-Sy)v`C!`)b0($m?G2aTSrK^L1?0 zuSsfmPiwE|v^KRJpG=Ii+Kb<57JCEo9}^(PbnpH;A+Ah&NAXjRY41S<=SUrVqN&FV zL430XF^O{*1??@+h6pngvFU7!y$#U*0G%N~VH_Sj+PBJ=bENfKdm=d6=)oKE-u|xPld@ zo9q1nE$LL?@oNH;@9DY$gg+CFa&LqY)SZ$zljCyT`FZQ;q!wNzjTPxV|#RZEngO;1$;xu0(fR_9N z=sF*02!O87@GQmUK^2u~l`x@}{8{iWwb;iPbSV1XP{EfXnlAODDPEA%EXDUY+}7d+ zlU$lzHky%r*(XMKGl#*tzQyfcBN%VA*muAfj_OUGwSNz5A7!y0{0}6?%@+F+?IWQ! z3ujemVG=QJ!7&p=!M`lQZ^dO`3a*_N^T7ud10Pi8qIndWm$#C&Z-}u19|k}f4a&-l z$#3_kMTJ)C{1j+q%gNmikUQ`l0xV;|vMR&xJd|TqOO89iahJt@0>>#3b#;c{jVvc0 z&v9#c*MU!5CVW_Y;=*^97RmM9X}(5GV9h@k#J1SaKoy(FJ;h1?8>kY|qcL2ITI?6N z(`dw$6?`qOD0`MBfw0zMze0&)Dk-XaFLDpgo?q(LkXKQ{9ezjD)?qB?q(#cdBfU-c?gU3l2cqB8Jm&rZX(9LY2GZR z)O_%i`WyG*%PC+d0Cr1;-=Bls3fQf%86|)(vog*oTa{$IaR2uPtksrmr&BwQ*$VV6 z#JE4r9}wsd9E@(@b37!RlU zBLe=Bf530Y=VHL00r(vm{%8(*r$USbqc6NB$kq>BRCkEI-j7QV_F)_en z2M=HxkK^+=MrcYB=-UYNL@kt)c z6CvJH8U8Gc5dMpA84FH3X%R8;{T>$Upz3|lHThF5%@UXOjN(om zU7k(z=Y+t|9W1c%yv2UQkY_d!Dp2+vB!q=2OI%@^(TB= zq@M9wnvB`JY}4ove8C{bD;85hoPq&fwUtz>1`X@;niUe! zdn$Uq4t7O~H`UG35J*VS0T)i68@^f#ywPcLdGd_>Un$JOy}O z#zS)TH(J!+&DBpu`9TYMCF&H9;C1l`oG4)bstn@#&_=yst&4Z*!f# zNBKjJ{u9cdbM;?P{+g@*hVpkj;!o87z>}K{Y1N{B80tBJ2$B!4J`P1$!1Ni!OE)y+ zq$8;o3~AK!pqUnZDspwfdt9zRW>2b67k|(S8H6&=YqY2zpRZ$lG8iv;=|mk2qyf)K zx%$budS18@E&8A4_wfcBo1+7ROcV9G3ug{Tf&Y&YXpgemZx7DP)$tnaJ{KQi-=I$NEpX6w6T z&s!uqV$9fnKHoXdSJn*Yqh_2x&F7PRhyMIgpO5@y$c*6LP{%XQzwP%~751 zru~Qgm*aE%j^q?M#ZJ^=PQvN$q?`fHV5hz7Jvz*z^9A}wx zp>w%&h4WA6V&@X)Qs-LdI%l4n?A!ngotGW+1Ls5MD`&s+lXJlNkMpbZyYolZpQYL2Y)MwmmS)ScU9xI6 zmhGQSW>eY9Y)!T{J0g2Rc2ss;wm#dCJtcd3_KfWG>^a$Uv$L~vvU9T+W-rNJn!PN0 zdDhI%%U+qCpIw}7&R(6pKD#WN$=;m3C2M7uXV+vmWH)7(bjn_not$mVPRUNRZ?~u0 zXW8f4F*|PewzW)Dn%b(J{nuZAS}jYZ_X3%V+Kgyvb@XadvSs!qv*%1ZZ}N=u&z#wE zZ`)NxnUBiKNGh|dtaDMaZ$B-Sd7>;_)E~VhdYwss@t!$Qw)Gfa)yyXNg0T?3Am{vH zo6qNe1N{vxPq*JAb^NN5$|0RfdPvdxNAzHlT7jgL;2kp?J9i<|T3+b9(@*MJ7Ixh! zk;=@_NN@6H%Q=xdCDJET%pNAkwLHTX6EdKM$I^t9wOkc{l92Z@CukGNCoOBW)BR*f z3r#c;vb*K1ehVbhHM4)fSkf^wY+x9_4Fj)izf+$hIBy8cb3E>Ux!k`U*rj-eB=d8M ze0+LF8I%CS>Otf2d;6eYfOl+AA+Y`mlUyt;G@)HZ6%e9f%29&(#4Xgs-P_C zO2}di&_^)OV!b4vwnV3jE>SURu~=(0kXorNqG~1dp_FTjl)-q^N=1&OwFQx8)u%^5 zJPs1;(bU2OBgm!(TL`?{bDIu3$d22aP1{p#2 zMqP>sX=w;VG3atq!HLpR8FF3!cg(^64-|8m?iUNb!D1Cy(wmUw#Db}9RYXiq9FoxNj@L5cUirxytIWC3O%U;Bi&a6y zw;|#!Y3(*wU2*N!NO9j1S#=dgq39tw52TW-l3QgpQ4>*=R*;ym+fv%iw8RI;z$&W6 zY%@RIUn(qXS*!*;-T{x>h)$zuqr;5a=n!osVJq|~kX0#aF%G=j1a4bB6wy;~sg&z%qce98?_qA%tFeM8VJr0%6g39M z9kfzgI{gGC>b~j;bEjCsR=!D&!*6xMos=)Q0s^Y$|c}*mFXy!e#T31sQ z$>H6b($-RMig53B78?gLAA!ED(;U)z!tS$Jy?}%K`n0yuBVVs=s4DIwClVr)MFjeW zL$rakQBLS$$e+Z}CX0;+g?*sBIjwC1g$PY+Tc`-dh?iSW7Iw&Vsp@QQfs%o9zr`AW z^Kl(v50t2NdX<|$6skuMUlEI)(mD}H%d^~E2tFa|WyG-}Aqx+%*n|*aEn#gtE!Vcu z;~Qw5wk@oy+JgygD`8uO^T1~!acx_q5=Z)lR*&hiGtS zKkX5UJZ`bm;ELshJ%m8lrBJge()j6;tUW3cuB`0@p@&o24(cV{M?gem@?9323^t!( z^wDz7@z%FXtnV3JdyKHhyx`cS1S?8r$s59Th`AKvvI%Rh*XtomBV-v|uDw79<5BbK zs4x}ng|Hs%r9B;-pgm65<8keUNPT6KT3y+cNS)QBJ)x%}dbQ%xm?DfYqp5Tjl<>sa zO`b6k6>;sUhA4=j4F&&Yv8k6A`2rO#9wIXoZE~@v0{i&5_9X3(SD3BdVrR7OCkMJg zOgKFt)fQ`lm}O`#FOmZl4XITK!+JM{M0yf~Lo!V@vF_8*8;VD6EpH+0Nj>;4Y*;8q zdePOcbWdeA*K{$@Y%Tl5<`9jz9x^?U2npkWvZ0#ik;gFHe-QVt zR4CeOCLHTm?bYCK+8)C8U?V$D>^XZ0d)3=L^x%K7U! zB?T4P98B$Yf00j~Cxrv0!Eb%@{J!F@!9Ub_er&M8KV3+m>-~r=tSe+%Y_7m4s59L7 zecfUgLe9S+=U%Z-D%fu>@<{74>Y4wWbg$L<62{$0->}%l{?eEagx>TvT#H=-6O1U= z-a(w1?;H#?3Vpoe#@XA5v$qI)D~>6WFpvx-zb)QkemUVoT2q5{QZpPkxEb2HG$iJT zefS;W-R|snEp{2$QmE%WXc9|BvQ+dK3>PZ`&gG&a?yc=JX-pa_Y42O?3ak#H5~wBY z{b7=(?W3ZClSKt5uU|&PGO+%MaRYlgVIPFGkB~(_#1cL{w1PNZf@AUPrcMNuE6ax+ zv=0dTsH6DZS6t@-Kem_&0nGp;{KT_0VV{Pz&q4JwQ2nfs>Sr`~U0nOjqZ*8R6h7;q zeM;Ep?e#nWS!Etb7K7p!ZBU>3%XXR*azQm94-5n(9aGWU%zW|!5+BRiT`OKO{ms7=Il zi!E`h8YDLuKa>>v2UY@MzCR5A8i9YXWS5bYr1e{run!pxdRzK8n%DjxG=C5@O*gJQ zp{^4|bK3~^bP&28IdDuqckM^+LJbA6+~k{+?8m%hq9(N1vH}_u8O&lg2=<^e-eNbR z8H*hnI{*s9UzFhrm6VkBOXl|zJGIL|=q7jF*uPSf;SDKwgkfA39H2hFl7 zUXTb-q$EP{U9pec1|eG1fjHs0QQ?bI;dfvKaY2Pdm`TC5}d^Xi&Zfb-nz;Dd%c`mR~&Q0__jN{>amq z=L$AOkF^s7{>(E2ucHOvuY-URGk1y*Rdi9D`)DwZq#uK-EZFk2+_54ScJrA50&Tn= zIY>f}m4K$T(#rWpMIv^>R_)sU^{=bl+dh95HgB)%yhi*H{#3)Mh)~Gsh!r-lx z+CW@n5lm^-3UU#nb&5+=?=K($i`@a7PAV~q)4bF>AV*R8yEPnc3B=L(PLT!5c~GQ) zC~ZzakQJ^sdFOiXRAmG!8ceElMWg`UE>^qKs78*qi-w97QaOk=Rn(dq*Mp>GN5xq%eC2ybkdQ3;NeTgjM$YS?m zqbd`{SMIcKgi}1E$g^-f^;7rGB#Ja54&z1#i>(8_E}+*jcaES4!-(Dv9BovVBg=Ug zSZFZsa%gi&^G@RMkxcQ<$vB1;y&Lg3HMZR?9H%W%u8U$iM)-?R0`E7xH%E) zWhvfMXug-lwm?D^G-GMr+ohS{aV4(1Zyp3X>dDz6> zDUOnl7@EZ%fbgXV#y+@^uviPWhkhyE7l(Ye_VHm--&_{)iXtOnv8@oUJ8=4?c@pZ2 zDCN9=WH27JGU9{T`zPIlr+Xn)8Ns?u_F!(|xH%J7QQ%T2c>h)a5CdM5P~4j!1AFZ@ za5)x68j$9Lpn@bV=L2D+fq5ehgmYENv+Cfv;<8SyQiLKQ@W8yYZ-=uF5PZzMw+~A3 z6fN*}CGYHMi|qiv2vlC4<`qKaG{px~Y&)PhIA62w#4^goCMZ$w4#}uU@wAw7yu}^@ z0bDB?L(*J#ZI>eJi22LQxuoOQ&f^i+K zAUoV*kAQ5{M~q5j_TBtIvNv`dj?JRxeLOTHG=v+(s69JG3}cH#j1$6qG+oI#tqU$fc!_(< zNG0&&oJWH5<9sBIG4xSHE*rv6B*w_xOPr6QfDz-wO;VYtq~Y17F$ymhdqP~K!Ety8 zj`6%83zFBh@g2J5+=E+Ai#_F)$XJFD^XY)P4D(L1*fT(hp*vRZFFXeR zQ%{U>7JC-(I5^aoBybPrUMr)RLHv&o^NH}F33M0_;#7_y<@rKxO z{A6OB3>}H9PB&3|_lM8HVJE@n7JFW-05)!bTb0#N;#CX9|Tmkb*n06Xe2fLnbu@`}; z0WvxB_ITBN2?{w8;)}avX=79prfLlHGhnKze>YVEkvP>g)l^|5yd)b!jhiGGFTtr0^{bAG%ZU_i*0C+W zEU7(Q#k`VJ%+wCNkr-!m6u(Ut+XLbI`-m~E#E0WmT->epiQuO%IKGM`&JO`&e!yNU zfF*Fd@F!re12$TC60(tLoN2MWAUXgL!DCHdwdP@dvj1r&|5EcP}C z4g|p&C9)ejdTh|&sJ`Qp5WtZxFPHAS0%)=KBp*KyE~CfNA}`l?*#W0XQCFk*hCMF; z>9Z~NKDgk@-8jdstUky**3i-X5VOL$wHfDH>?6#n!1VL5G>h%ST|*sG&Q*Apc(i6> z@O+DXEas`in3?9YD106F;%)&27m5wRp>!zp_Q@>Sbt&A_t8m~eJ!_*(_|z3mWHD2? z+f2}zUF3Hk`Kspv1k;5gZPP-? zMJfJ|TspqkVxNnO=Msy30ck6BVqBW$mtiZa8duIQsTzz&udI?$r+k?iG(k5nCB|hb zeu*MC>SCuzMnt9KX7+DmFj&eI#spXmAc*HdqnJAay16pV z7a+q&kWl7hQ`AAh)5@SJ%FBI{;FkhnA zg83|B;5*VjFfqXVsx)7m={vE^ysB`kT%6*~0CLB z;YzOosMlHSYfu@3?)9!i?}zuFVzF<$k0r)3i+zjnlc25}aL~lEClljFoErfg3#3e( z--H{$B%(JZ7KD#0#?81B!SFZ?-_lCfz97b}_(}jsJs`KGO>TMXq7njPh*tsKR=7M1 zL~h4N380Jz%JMY7<4BCWVa9iQ)zE6dF#!M%C^-^tlT+$Ef>Y z;T44xR;KtWv4B;FS!A`vz6aHY1TpR^NhI>SQ6!4HP>cP5Fq(k0v68RBy=1S_1SqVr z*pE=+#0tvq5y5nKFwWN!V=Zn&#UVOo`lBJ?xk!a#`rUc>M5z#bj|h!>@g)?@PlXcJ zrTKksJyXtYnAb*G>fXRXh3l{m;i;~7;#SPCQPi#@#(gQiUMy+--8}I=XWG8{_ z#x&oYBfAM?H^FNZA3m_kICN}M5;6b5Zx3L!QG`SYMMOw-LqaNuh)v+Rkrp%(MT#=J1q>e`#?};n zP%wP(FoxUkbr=j!2gB`YzB9*f2gsW{1VgdF9a!MRgKFIFs!=|q#vS0Woftb){2{^N zp~E;lj4$2bFc};kN%P0yZ{8P-kk~*%u>NDh`j5i;yNIz%)CBk}4(Bw*7Ypx8?jwaB z_?RAK6nEyB@_33rAy__f7|SOu_7hk())C{W61h$srD(*)$Koo4^Z`lNmb#TW_MD&L z^9Z3|5XOCc#CY0b5g<+h?PpBfCC?|uvli&}1K02>fMT6~HUdr+CEtPw@!c&+#0CCy)C@LH|qi^YgO>@UOhS=@R-n zH|ZO+-{vNLkM@UL|3|bx<@yKE{)|WbiT*Em@(cJK{hSa)v^h9wRRC|D>rckiQlIHf z5-(x}IY~*M0))Qk=LsbX=A?3cfjc-iADSS?qc8rTAu=3o9=EEXU!CuRKdHe>UTVQYh&S#RJVhUW{vKE0 zrDyJC1o}O4eMm^~U$exYzp~{(lT6H_`_~Ao4aFnGZOpYk4^F0g@BY1L#hUZ*CUhaX z|3$C$(cJtq#1z0Cw36uO;8V~CzW*6-+~?21CpCHi|5Ip%Me_(#(H9J!Lo2MCXV8#? z--R}SCoj-Abg=;cEoh5H9}F@domrM&Aavy}uoK#&@Z|BvdT@UREsE5G@R;a>o)~W< udO3kl5 ok; {Resp,#state{}=St1} -> Pid ! {self(),Resp}, + erlang:garbage_collect(), loop(St1, Parent, Paths); {_,State2,_} -> exit({bad_state,Req,State2}) @@ -691,18 +692,20 @@ efile_gm_recv(N, Ref, Succ, Fail) -> end. efile_gm_spawn(ParentRef, Ms, Process, Paths) -> - efile_gm_spawn_1(0, Ms, ParentRef, Process, Paths). + S = erlang:system_info(schedulers_online), + MaxN = min(S + (S bsr 1), 32), + efile_gm_spawn_1(0, MaxN, Ms, ParentRef, Process, Paths). -efile_gm_spawn_1(N, Ms, ParentRef, Process, Paths) when N >= 32 -> +efile_gm_spawn_1(N, MaxN, Ms, ParentRef, Process, Paths) when N > MaxN -> receive {'DOWN',_,process,_,_} -> - efile_gm_spawn_1(N-1, Ms, ParentRef, Process, Paths) + efile_gm_spawn_1(N-1, MaxN, Ms, ParentRef, Process, Paths) end; -efile_gm_spawn_1(N, [M|Ms], ParentRef, Process, Paths) -> +efile_gm_spawn_1(N, MaxN, [M|Ms], ParentRef, Process, Paths) -> Get = fun() -> efile_gm_get(Paths, M, ParentRef, Process) end, _ = spawn_monitor(Get), - efile_gm_spawn_1(N+1, Ms, ParentRef, Process, Paths); -efile_gm_spawn_1(_, [], _, _, _) -> + efile_gm_spawn_1(N+1, MaxN, Ms, ParentRef, Process, Paths); +efile_gm_spawn_1(_, _, [], _, _, _) -> ok. efile_gm_get(Paths, Mod, ParentRef, Process) -> diff --git a/erts/preloaded/src/init.erl b/erts/preloaded/src/init.erl index aa0fcad34737..0a30fda9bb09 100644 --- a/erts/preloaded/src/init.erl +++ b/erts/preloaded/src/init.erl @@ -1359,6 +1359,18 @@ eval_script(What, #es{}) -> load_modules(Mods0, Init) -> Mods = [M || M <- Mods0, not erlang:module_loaded(M)], F = prepare_loading_fun(), + case has_small_memory() of + true -> + %% Load one module at the time to reduce the peak memory + %% usage. + _ = [do_load_modules([M], F, Init) || M <- Mods], + ok; + false -> + %% Load the modules in parallel. + do_load_modules(Mods, F, Init) + end. + +do_load_modules(Mods, F, Init) -> case erl_prim_loader:get_modules(Mods, F) of {ok,{Prep0,[]}} -> Prep = [Code || {_,{prepared,Code,_}} <- Prep0], @@ -1394,6 +1406,13 @@ prepare_loading_fun() -> end end. +has_small_memory() -> + %% Heuristic for small memory. If true, we'll try to preserve + %% memory by not loading code in parallel. + (erlang:system_info(wordsize) =:= 4 andalso + erlang:system_info(schedulers_online) =:= 1) orelse + erlang:system_info(debug_compiled). + make_path(Pa, Pz, Path, Vars) -> append([Pa,append([fix_path(Path,Vars),Pz])]). diff --git a/lib/kernel/src/code.erl b/lib/kernel/src/code.erl index 89ab3433e126..23ce452f0b98 100644 --- a/lib/kernel/src/code.erl +++ b/lib/kernel/src/code.erl @@ -569,7 +569,9 @@ ensure_loaded(Mod) when is_atom(Mod) -> call({load_error, Mod, Ref}), Error; Prepared -> - call({load_ok, Prepared, Mod, File, Ref}) + Res = call({load_ok, Prepared, Mod, File, Ref}), + erlang:garbage_collect(), + Res end end; embedded ->