[erlang-questions] [eeps] New EEP: setrlimit(2) analogue for Erlang
Kostis Sagonas
kostis@REDACTED
Mon Feb 11 22:47:49 CET 2013
On 02/08/2013 02:29 PM, Björn-Egil Dahlberg wrote:
>
>>
>> The erts_debug:flat_size/1 function is fast and implemented in C, but
>> doesn't give you the true size since it ignores sharing. If Kostis
>> Sagonas' work on sharing-preserving copying operations was included in
>> OTP, we could have an efficient version of erts_debug:size/1.
>
> I haven't seen the final implementation yet. I wonder if it's complete?
> Preserved sharing in copy would be really nice as long as it is efficient.
First of all, I would like to correct Richard a bit. Although I am very
heavily involved in the implementation of an Erlang VM that preserves
term sharing, most of the work so far has been performed by my very good
colleague Nikos Papaspyrou. A paper we wrote about this work has been
published in the 2012 ACM Erlang Workshop and can be accessed at:
http://dx.doi.org/10.1145/2364489.2364493
or more conveniently at:
http://user.it.uu.se/~kostis/Papers/erlang12_sharing.pdf
Although its contents are quite technical, I strongly recommend reading
at least its introduction and Section 2 which explains all you wanted to
know about term sharing in Erlang/OTP.
Now, regarding the actual implementation it is also publicly available
and can be found at:
https://github.com/nickie/otp
It's based on vanilla R16A but adds a --enable-sharing-preserving
configure flag that can be optionally enabled to give a VM that
preserves term sharing in intra-node process spawns and in message passing.
As far as we know it works at well as the default system and its
overhead is extremely small in all things we have tried. (Of course, it
also gives quite big/unbounded? speedups whenever a lot of shared terms
are copied between processes.)
We have discussed with the OTP team the possibility of the system being
included in R16B, so that the community has a chance to try and evaluate
it, but no decision has been reached so far.
The only remaining issue we are aware of has to do with code unloading:
since terms in the constant pool of a module are not copied, as the
vanilla system does, the code loader has to either preserve these terms
or copy them on demand when a module is purged/reloaded. The OTP team
has promised to look into this at some point but this work has not been
prioritized yet. But the whole system should be usable without problems
for all applications where unloading of modules with constants does not
take place.
Note that the implementation is restricted to intra-node term sharing:
i.e. it does yet not support term sharing when terms are sent to
different nodes. This is something we are currently working on and will
most likely require the design of a new extern term format. But this is
an orthogonal issue.
As a relatively minor point we have not tested this on Windows; though
we suspect that there are only minor issues to possibly address there.
Somebody with a Windows development environment should do that (hint,
hint...).
Kostis
More information about the erlang-questions
mailing list