[erlang-questions] UDP receive performance

Danil Zagoskin z@REDACTED
Thu May 24 17:34:34 CEST 2018


-    2.57%     0.02%  31_scheduler     beam.smp
[.] process_main
   - 2.55% process_main
      - 2.43% erts_schedule
         - 2.26% erts_port_task_execute
            - 2.25% packet_inet_input.isra.31
               - 2.05% driver_realloc_binary
                  - 2.05% realloc_thr_pref
                       1.87% __memmove_avx_unaligned_erms

That's 40-core Xeon E5-2640, so 2.5% on a single scheduler is kind of 100%
Also it's Linux kernel 4.9


On a machine with kernel 4.13 and quad-core Xeon E31225 on a half of E5's
load we have:
-   16.11%     0.10%  1_scheduler      beam.smp                       [.]
erts_schedule
   - 16.01% erts_schedule
      - 13.62% erts_port_task_execute
         - 13.11% packet_inet_input.isra.31
            - 11.37% driver_realloc_binary
               - 11.33% realloc_thr_pref
                  - 10.50% __memcpy_avx_unaligned
                       5.06% __memcpy_avx_unaligned
                     + 1.04% page_fault
                    0.66% do_erts_alcu_realloc.constprop.31
            + 0.79% 0x108f3
              0.55% driver_deliver_term
        1.30% sched_spin_wait

Seems like kernel version may change a lot, will run more tests.

But it seems like memory operations are unaligned which could be not very
efficient.

On Thu, May 24, 2018 at 1:24 PM, Lukas Larsson <lukas@REDACTED> wrote:

> Can you run perf with "--call-graph dwarf" and see which functions it is
> that call memmove?
>
> On Thu, May 24, 2018 at 12:21 PM, Danil Zagoskin <z@REDACTED> wrote:
>
>> Yes, I've built a fresh master today (Erlang/OTP 21 [RELEASE CANDIDATE 1]
>> [erts-9.3.1]), and nothing has changed.
>>
>> On Thu, May 24, 2018 at 1:17 PM, Sergej Jurečko <sergej.jurecko@REDACTED
>> > wrote:
>>
>>> OTP-21 rc1 has enhanced IO scalability. Have you tried if it is any
>>> better? UDP performance in Erlang was never great...
>>>
>>> Regards,
>>> Sergej
>>>
>>>
>>> On 24 May 2018, at 12:03, Danil Zagoskin <z@REDACTED> wrote:
>>>
>>> Yes, we have {read_packets, 100} in receive socket options.
>>>
>>> On Thu, May 24, 2018 at 10:23 AM, Raimo Niskanen <
>>> raimo+erlang-questions@REDACTED> wrote:
>>>
>>>> On Wed, May 23, 2018 at 06:28:55PM +0300, Danil Zagoskin wrote:
>>>> > Hi!
>>>> >
>>>> > We have a performance problem receiving lots of UDP traffic.
>>>> > There are a lot (about 70) of UDP receive processes, each handling
>>>> about 1
>>>> > to 10 megabits of multicast traffic, with {active, N}.
>>>>
>>>> Whenever someone has UDP receive performance problems one has to ask if
>>>> you
>>>> have seen the Erlang socket option {read_packets,N}?
>>>>
>>>> See http://erlang.org/doc/man/inet.html#setopts-2
>>>>
>>>> >
>>>> > msacc summary on my OSX laptop, build from OTP master
>>>> > c30309e799212b080c39ee2f91af3f9a0383d767 (Apr 19):
>>>> >
>>>> >
>>>> >         Thread    alloc      aux      bifbusy_wait check_io emulator
>>>> >    ets       gc  gc_full      nif    other     port     send    sleep
>>>> >  timers
>>>> >      scheduler   30.02%    0.92%    2.86%   24.66%    0.01%    9.61%
>>>> >  0.03%    1.25%    0.20%    0.13%    2.34%    9.33%    0.41%   17.78%
>>>> >   0.44%
>>>> >
>>>> >
>>>> > Linux production server behaves the same way (we do not have extended
>>>> msacc
>>>> > there yet, so most of alloc goes to port).
>>>> >
>>>> > perf top (on Linux production) says there's a lot of unaligned
>>>> memmove:
>>>> >
>>>> >   69.76%  libc-2.24.so        [.] __memmove_sse2_unaligned_erms
>>>> >    6.13%  beam.smp            [.] process_main
>>>> >    2.02%  beam.smp            [.] erts_schedule
>>>> >    0.87%  [kernel]            [k] copy_user_enhanced_fast_string
>>>> >
>>>> >
>>>> > I'll try to make a minimal example for this.
>>>> > Maybe there are simple recommendations on optimizing this kind of
>>>> load?
>>>> >
>>>> > --
>>>> > Danil Zagoskin | z@REDACTED
>>>>
>>>> > _______________________________________________
>>>> > erlang-questions mailing list
>>>> > erlang-questions@REDACTED
>>>> > http://erlang.org/mailman/listinfo/erlang-questions
>>>>
>>>>
>>>> --
>>>>
>>>> / Raimo Niskanen, Erlang/OTP, Ericsson AB
>>>> _______________________________________________
>>>> erlang-questions mailing list
>>>> erlang-questions@REDACTED
>>>> http://erlang.org/mailman/listinfo/erlang-questions
>>>>
>>>
>>>
>>>
>>> --
>>> Danil Zagoskin | z@REDACTED
>>> _______________________________________________
>>> erlang-questions mailing list
>>> erlang-questions@REDACTED
>>> http://erlang.org/mailman/listinfo/erlang-questions
>>>
>>>
>>>
>>
>>
>> --
>> Danil Zagoskin | z@REDACTED
>>
>> _______________________________________________
>> erlang-questions mailing list
>> erlang-questions@REDACTED
>> http://erlang.org/mailman/listinfo/erlang-questions
>>
>>
>


-- 
Danil Zagoskin | z@REDACTED
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20180524/3236024c/attachment.htm>


More information about the erlang-questions mailing list