[erlang-questions] Process spawn time with -smp
lang er
erlangist@REDACTED
Mon Apr 9 06:09:31 CEST 2007
I retest the code with different number of scheduler threads , the
result prove your explanation:
erl -smp -noshell +P 1000000 -s processes max 800000 -s init stop +S 1
Maximum allowed processes:1000000
Process spawn time=7.21250 (10.6738) microseconds
erl -smp -noshell +P 1000000 -s processes max 800000 -s init stop +S 2
Maximum allowed processes:1000000
Process spawn time=20.9750 (24.7775) microseconds
erl -smp -noshell +P 1000000 -s processes max 800000 -s init stop +S 3
Maximum allowed processes:1000000
Process spawn time=35.3875 (55.7313) microseconds
BTW, Are there any good documents/papers about Erlang VM's internals?
Thanks!
BR
James
On 09/04/07, Rickard Green <rickard.s.green@REDACTED> wrote:
> Hi!
>
> This test program isn't especially nice to the smp emulator. When a
> process is placed in the run-queue, scheduled in, or scheduled out, a
> lock on the run-queue has to be held. When a child processes in this
> program has been spawned, it is put in the run-queue, later scheduled
> in, and then immediately scheduled out. Since the test will make sure
> that there will be plenty of processes in the run-queue, all scheduler
> threads available will be woken. Since the child processes doesn't do
> anything, the scheduler threads will more or less only fight about the
> run-queue lock.
>
> I ran the test program myself on a couple of our machines, but I didn't
> get as bad figures as you got. The worst I got was a little more than
> twice the time for the smp emulator compared to the non-smp emulator on
> a machine with four cores. When I ran the smp emulator with only one
> scheduler thread on that same machine I got times 5-30% longer than for
> the non-smp emulator. This comparison is more interesting since there
> will not be such a fight about the run-queue lock, as described above,
> when processes actually do something.
>
> BR,
> Rickard Green, Erlang/OTP, Ericsson AB.
>
> lang er wrote:
> > Hi!
> > I run code from Joe's new book on my macbook(2G RAM and 2GHz Intel
> > Core Duo CPU) to test how fast erlang create processes.
> >
> > I compile Erlang with smp support, and I test with smp flag on and off.
> >
> > The following is the results :
> >
> > erl -noshell +P 1000000 -s processes max 800000 -s init stop
> > Maximum allowed processes:1000000
> > Process spawn time=4.16250 (8.02000) microseconds
> >
> > erl -smp -noshell +P 1000000 -s processes max 800000 -s init stop
> > Maximum allowed processes:1000000
> > Process spawn time=19.7000 (28.0012) microseconds
> >
> > So why process spawn is so slow with smp?
> >
> > -------------
> > test code from joe's book:
> >
> > max(N) ->
> > Max = erlang:system_info(process_limit),
> > io:format("Maximum allowed processes:~p~n" ,[Max]),
> > statistics(runtime),
> > statistics(wall_clock),
> > L = for(1, N, fun() -> spawn(fun() -> wait() end) end),
> > {_, Time1} = statistics(runtime),
> > {_, Time2} = statistics(wall_clock),
> > lists:foreach(fun(Pid) -> Pid ! die end, L),
> > U1 = Time1 * 1000 / N,
> > U2 = Time2 * 1000 / N,
> > io:format("Process spawn time=~p (~p) microseconds" ,
> > [U1, U2]).
> >
> > wait() ->
> > receive
> > die -> void
> > end.
> > for(N, N, F) -> [F()];
> > for(I, N, F) -> [F()|for(I+1, N, F)].
> >
> >
> >
> > BR!
> > James
> > _______________________________________________
> > erlang-questions mailing list
> > erlang-questions@REDACTED
> > http://www.erlang.org/mailman/listinfo/erlang-questions
> >
>
More information about the erlang-questions
mailing list