[erlang-questions] beginner: Help needed - Erts overview and map to subsystem to source

Bjorn Gustavsson bjorn@REDACTED
Mon Nov 19 08:23:48 CET 2007

G Bulmer <gbulmer@REDACTED> writes:

> Can someone point me at any documents which describes the internal  
> architecture of erts? Ideally it would help me navigate the code too.
> For example is there a document which gives an overview of erts  
> subsystems? (ideally also a "table of contents" mapping the  
> subsystems to the files which contain the corresponding code, but if  
> the names are consistent, I can use grep.)

As far as I know, there are no such documents. (Though some architectual
overviews can be found in some the papers from the HiPE group.)

> I guess I need to find the code for the garbage collector, erts  
> function tracing (which I would try to use for the DTrace function  
> call probes), the scheduler, and the module loader/unloader. I'll  
> also need to discover approximately how they work !-)

Very brief overview:

The garbage collector is in erl_gc.c in R12B (ggc.c in R11B; that file
is gone in R12B).

(Local) call trace works by replacing the first instruction in function
with a breakpoint instruction. The breakpoint instruction is called
"call_traced_function" in beam_emu.c. Most of the other code for tracing
is in erl_trace.c and erl_bif_trace.c. (beam_emu.c contains the
virtual machine for BEAM.)

The scheduler is in the function schedule() in erl_process.c.

The loader is in beam_bif_load.c (the loader BIFs) and beam_load.c
(the bulk of the code).

Björn Gustavsson, Erlang/OTP, Ericsson AB

More information about the erlang-questions mailing list