Erlang using Linux native threads - a waste of space

Roger Larsson roger.larsson@REDACTED
Sat Sep 2 23:11:38 CEST 2006


On Tuesday 29 August 2006 15:47, you wrote:
> On Tue, 29 Aug 2006, lang er wrote:
> > If OS support erlang's lightweight  process in kernel,  many programming
> > languages could have  erlang's concurrent capability.I think it is not
> > impossible.
>
> The reason that Erlang processes are lightweight is that they do not
> require a context switch from userland -> kernel -> userland in order to
> schedule the next thread. Erlang can rely on the properties of the
> language, specifically no shared mutable data, in order to isolate
> processes from each other. The kernel must use the CPU's virtual memory
> support to do this, because it cannot make assumptions about the languages
> used to write userland processes, and switching pages tables is expensive.

Linux does not switch the page tables if the new process has the same
memory map as the previous - i.e. an thread.
But you still have the cost of checking that together with entering/leaving 
the kernel. In addition to this the kernel needs to store thread information 
and a (kernel) stack.

The stack is a problem when executing in kernel, as all threads will do.
- It can not be placed in user memory (another concurrently executing thread
 might modify it - by accident or not... Causing severe corruptions).
- It needs to be big enough to store data from all possible kernel callchains
  including local variables - how big does it need to be???
- As an optimization it does hold the thread information for quick access

Linux
	Kernel 2.4 uses 8 kB stacks,
	this has been optimized to 4 kB in 2.6 on i386 architectures, by
	using option CONFIG_4KSTACKS, possible since 2.6 has independent
	interrupt stack, exception stack..., x86-64 bit architecture could thus
	continue	to use an 8 kB stack.
	The task description alone (stored in the stack) is about  1.7 kB

	Good information at (over one year old...)
	http://www.informit.com/articles/article.asp?p=370047&rl=1

	More about threads
	http://www.informit.com/articles/article.asp?p=370047&seqNum=3&rl=1

In addition to this all threads needs a userspace stack too.

Erlang
	Saw some Erlang numbers earlier but I can not find it.
	Note: nothing needs to be stored per Erlang process in kernel.

/RogerL




More information about the erlang-questions mailing list