[erlang-patches] Pollset per scheduler and bind port to scheduler

Wei Cao cyg.cao@REDACTED
Wed Jul 11 17:34:08 CEST 2012


In non keep-alive cases, all new connections 're accepted by the
Erlang port which listens on the TCP port, and how frequently/fast the
port be scheduled to run limits the QPS. (requests per second), so
this port can be regarded as bottleneck of non keep-alive
applications.

So I guess performance degradation observed is caused by the listener
port not be scheduled frequent or fast enough, I'll look into this
problem tomorrow, now is at night in China, :-)

BTW, I found this patch should be compiled like this today,
./configure CFLAGS="-DERTS_POLLSET_PER_SCHEDULER -g -O3 -fomit-frame-pointer"
otherwise compiler optimization is disabled.

Regarding binding processes/ports to scheduler, I admit it's really a
temporary solution to bind port to the same scheduler as its owner
process like the pb patch did, and I suggest it's better to add a
additional BIF like erlang:process_flag, to allow user explicitly bind
port to a given scheduler, if it benefits.


2012/7/11 Lukas Larsson <lukas@REDACTED>:
> Hi,
>
> The reason I'm skeptical about anything which binds processes/ports to
> scheduler is that it feels like a temporary solution and would much rather
> do a proper solution where the scheduler takes care of these things for you.
> But as I said, internally we need to talk this over when it is not in the
> middle of summer vacation.
>
> I did some benchmarking using ab and found basically the same figures as
> you. The below is with keep-alive and the values are requests per second:
>
>                    not-bound        bound
>
> R15B01                 44k        37k
>
> master                  44k        35k
>
> master+mp          48k        49k
>
> master+mp+pb    49k        55k
>
> [mp]: multi-poll patch
> [pb]: port bind patch
> [bound]: Used {scheduler,I} to spread load
>
> Unfortunately I also found that when doing the non-keep alive benchmark the
> performance is seriously degraded.
>
> R15B01 not-bound                  8255
> master+mp+pb not-bound    7668
> master+mp+pb bound           5765
>
> I did some gprof runs but could not find anything obvious that is going
> wrong.
>
> Lukas
>
>
> On 11/07/12 04:21, Wei Cao wrote:
>>
>> I added a macro to conditional compile the patch because I think it
>> can be more selectable, I can remove the macro, fix the compilation
>> error and test on mingw platform in later version.
>>
>> how about provide another BIF named port_flag (like process_flag) to
>> let user bind port to a given scheduler?
>>
>>
>



-- 

Best,

Wei Cao



More information about the erlang-patches mailing list