[erlang-questions] Thread-safety of driver_alloc/realloc/free_binary

Chris Newcombe chris.newcombe@REDACTED
Fri Oct 27 18:59:26 CEST 2006


This is great news -- thanks.

Is there a way to test at runtime if the emulator is running in smp mode?

many thanks,

Chris

On 10/20/06, Rickard Green <rickard.s.green@REDACTED> wrote:
> They are all thread safe in the emulator with smp support, but they will
> probably never be thread safe in the emulator without smp support.
>
> The thread unsafe part is the reference counting of binaries. Making
> them thread safe would cause overhead for all reference counted
> binaries, not just driver binaries. We don't want to slow down all
> binary management as it is now, but we might make them thread safe in
> the future if threaded drivers should become very common (but don't
> count on it).
>
> BR,
> Rickard Green, Erlang/OTP
>
> Chris Newcombe wrote:
> > (To the maintainers of erts/emulator/beam/io.c ... )
> >
> > Hi,
> >
> > I'm working on an update to Scott Lystig Fritchie's Erlang Driver
> > Toolkit, including a significantly enhanced driver for Berkeley DB.  I
> > hope to be able to release this soon as open-source.
> >
> > The update includes features such as multiple private resizable
> > threadpools per port instance (supported in both 'linked-in' and
> > 'spawned-pipe' modes).
> >
> > One problem is that, when getting data from Berkeley DB, the driver
> > needs to allocate driver binaries.  Ideally, it would like to to do so
> > from within the driver's private threadpools.  But of course,
> > driver_alloc/realloc/free_binary are not documented as thread-safe.
> >
> > So currently the Berkeley DB driver has to allocate each piece of data
> > twice (once with malloc and later with driver_alloc_binary), and copy
> > it once.  And the copying is done in the Erlang scheduler thread,
> > which blocks the VM unecessarily.
> >
> > This appears to be changing.  I found the following comments in
> > otp_src_R11B-1/erts/emulator/beam/io.c
> >
> >  * - driver_alloc_binary() is thread safe (efile driver depend on it).
> >  * - driver_realloc_binary(), and driver_free_binary() are *not* thread safe.
> >
> > Unfortunately, to avoid the copying the Berkeley DB driver needs to
> > call all 3 of these functions from private threads.
> >
> > So, please could the realloc & free functions also be made
> > thread-safe, and documented as such?   This would be a major
> > performance benefit for many multi-threaded drivers (not just the
> > efile driver mentioned in the comment),
> >
> > Many thanks for considering this,
> >
> > Chris
> > _______________________________________________
> > erlang-questions mailing list
> > erlang-questions@REDACTED
> > http://www.erlang.org/mailman/listinfo/erlang-questions
> >
>



More information about the erlang-questions mailing list