shared memory in Erlang

Ulf Wiger etxuwig@REDACTED
Wed Jan 31 10:36:02 CET 2001


On Tue, 30 Jan 2001, David Gould wrote:

>On Tue, Jan 30, 2001 at 04:50:32PM -0800, Jim Larson wrote:
> 
>> >I do not really understand how database applications or network
>> >applications can be implemented in Erlang efficiently without some kind
>> >of form of shared memory.  Only providing message passing does not seem
>> >to be a good choice for these kind of applications.
>> 
>> I don't understand your concern here.  Shared memory is only useful
>> for communicating with other OS processes on the same host, so
>> you're either having to integrate with applications written in
>> other languages, or perhaps take advantage of a multiprocessor
>> through running several Erlang nodes on the same host.  Other than
>> that, network and database applications seem to work fine in Erlang.
>
>As a database engine guy in a former life, I think I do understand.
>Basically database engines run as a collection of processes (one per
>physical CPU) sharing a common set of datastructures:
>
>   the database page cache
>   database metadata (table names, schema definitions, procedure defs etc)
>   lock manager tables
>   transaction / logging information
>   scheduler information
>   thread data including execution stacks

A few comments from my end:

- There was an Erlang implementation with a global heap, called VEE,
  developed by Robert Virding. It used incremental GC, and did not
  copy messages. It didn't catch on though. Implementing message
  passing can of course be done transparently to erlang. One should
  also consider latency when dealing with message passing programs.

- Implementing ets:insert and ets:lookup without copying could
  probably be done, but it's not obvious how it should be done.
  Apparently, experiments have been made with ets tables on the
  process heap, but this didn't turn out as well as expected
  (mainly due to GC.) The obvious problem with non-copying ets
  shows up when multiple processes update the same object; 
  you would then need to keep and garbage collect the old object,
  if it is referenced by some process(es). Private ets tables
  could be implemented without copying, but for various reasons
  (mainly debugging), private ets tables are not used much.

- The erlang processor, presented at EUC 2000, does not copy messages.
  The main thing wrong with the erlang processor at this time is that 
  it is not ready yet.

- There was also a multipro erlang implementation
  http://www.erlang.se/publications/xjobb/0089-hedqvist.pdf
  Good reading for those who are interested. Demand for MP erlang
  was not high enough to warrant the extra effort needed to make
  it a product... at the time.

- We (AXD 301) are discussing the idea of having a shared memory
  database that has erlang and C applications as clients.

- We're also starting to look into a port of erlang to OSE/Delta
  (http://www.enea.com/PDF/rtk.pdf). We will at least study the 
  possibility to make a native port, which maps erlang processes
  onto OSE threads. There are several good reasons to look into 
  this.

- I've also played with the idea of using something like Encore's
  Reflective Memory for really fast replication of process state
  between processors - distributed shared memory if you will.
(http://www.encore.com/products/hardware/reflective/980012.shtml)
  It's not exactly clear to me if it could be reasonably well
  integrated into erlang, semantically, or if one would simply 
  write a driver that interfaces to it. Our main problem with 
  Encore's solution is that the memory size is too small for us.

/Uffe
-- 
Ulf Wiger                                    tfn: +46  8 719 81 95
Senior System Architect                      mob: +46 70 519 81 95
Strategic Product & System Management    ATM Multiservice Networks
Data Backbone & Optical Services Division      Ericsson Telecom AB




More information about the erlang-questions mailing list