temp_alloc needs to be enabled explicitly on OTP 22 if compiled with SMALL_MEMORY

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

temp_alloc needs to be enabled explicitly on OTP 22 if compiled with SMALL_MEMORY

Alexandre Rodrigues
Hi, 

I am working with OTP built with SMALL_MEMORY and I noticed a behaviour change from OTP 20 to OTP 22 (I suspect that the change actually occurs on the transition to OTP 21 but I was not able to test it yet).

OTP 20 when compiled with SMALL_MEMORY disables the allocators (the ones based on alloc_util I believe) including the temp_alloc. From OTP 21, according to the official documentation of erts_alloc, the temp_alloc should be "always enabled and cannot be disabled".


Starting the emulator (OTP 20) with "erl +Mue true" on an OTP compiled with SMALL_MEMORY enables the allocators based on alloc_util including the temp_alloc.


OTP 22 when compiled with SMALL_MEMORY behaves in a similar way to OTP 20, so the alloc_util based allocators are disabled including temp_alloc.


Now the behaviour difference is that starting the emulator (OTP 22) with "erl +Mue true" enables the allocators based on alloc_util but doesn't enable temp_alloc. To enable the temp_alloc it's required to be explicit and starting it like `erl +Mue true +MTe true`. I actually don't know if it's the reporting of which allocators are enabled that is broken or if indeed the temp_alloc that is not enabled.


Is this the expected behaviour or a bug? The immediate visible consequence is that if I compile OTP with SMALL_MEMORY it's no longer enough to start the emulator with "erl +Mue true" to be able to call erlang:memory(), I need to use "erl +Mue true +MTe true".


Regards