Erlang using Linux native threads - a waste of space
Ryan Rawson
ryanobjc@REDACTED
Sun Sep 3 08:10:02 CEST 2006
What about the cost of actually executing the context switch and the
flushing of pipelines? A kernel call on i386 is executed via the
software interrupt which is the equivalent of a long jump, thus your
pipeline is invalidated.
If you are trying to get huge performance, avoiding context switches
should be on the list of top 10 issues, no?
-ryan
On 9/2/06, Roger Larsson <roger.larsson@REDACTED> wrote:
> 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