Re: build erlang with kqueue support

Bogdan Andu <[email protected]>
Newsgroups gmane.comp.lang.erlang.general
Message-ID <CAP7yTnyb8y6QfoTS-gXMCnJSc=ocBrX+A_QbgbbjNJSnFhRBxw@mail.gmail.com>
Thank you for your time
and insightful explanations!

Bogdan

On Tue, Nov 16, 2021 at 11:48 AM Lukas Larsson <[email protected]> wrote:

>
>
> On Tue, Nov 16, 2021 at 10:30 AM Bogdan Andu <[email protected]> wrote:
>
>> Great,
>>
>> I have the following:
>>
>> 2> erlang:system_info(check_io).
>> [[{name,erts_poll},
>>   {primary,poll},
>>  * {kernel_poll,false},*
>>   {memory_size,12920},
>>   {total_poll_set_size,2},
>>   {lazy_updates,true},
>>   {pending_updates,0},
>>   {batch_updates,false},
>>   {concurrent_updates,false},
>>   {fallback,true},
>>   {max_fds,512},
>>   {active_fds,0},
>>   {poll_threads,0}],
>>  [{name,erts_poll},
>>   {primary,kqueue},
>>   *{kernel_poll,kqueue},*
>>   {memory_size,56},
>>   {total_poll_set_size,1},
>>   {lazy_updates,false},
>>   {pending_updates,0},
>>
>>
>>   {batch_updates,false},
>>
>>
>>   {concurrent_updates,true},
>>
>>
>>   {fallback,false},
>>
>>
>>   {max_fds,512},
>>
>>
>>   {active_fds,0},
>>
>>
>>   {poll_threads,0}],
>>
>>
>>  [{name,erts_poll},
>>   {primary,kqueue},
>>   *{kernel_poll,kqueue},*
>>   {memory_size,28728},
>>   {total_poll_set_size,1},
>>   {lazy_updates,false},
>>   {pending_updates,0},
>>   {batch_updates,false},
>>   {concurrent_updates,true},
>>   {fallback,false},
>>   {max_fds,512},
>>   {active_fds,0},
>>   {poll_threads,1}]]
>> 3>
>>
>> What means *{kernel_poll,false}* ?
>> That poll is not used and kqueue it is used?
>>
>> Why are three poll entries and why one kernel-poll kqueue entry has
>> memory_size 56 and the next has memory_size 28728? Which one is used by
>> the emulator?
>>
>
> Different OSs need different polling strategies, for OpenBSD (and others,
> I can't recall which) there are by default 3 pollsets used.
>
> 1) The first pollset is what is called the fallback pollset and it is used
> for any FD that cannot be polled by kqueue. I think that the stdin/stdout
> fds end up here and possibly some others.
> 2) The main pollset used by the poll-thread for most I/O polling. This is
> why this pollset is larger.
> 3) An optimized pollset where the read side of any fd that uses the
> `{active,true}` pattern is placed. Mainly this is used for distribution
> sockets, but works for any other fd as well that follows this pattern.
>
>
>> And how can I customize the parameters like max_fds, total_poll_set_size,
>> memory_size?
>>
>
> Max fds is taken from `ulimit -n` of the current user. The other values
> are just statistics about the current usage.
>
>
>> And how does these parameters impact the performance of busy erlang node
>> like say,
>> very high traffic tcp/ip/ssl server?
>>
>
> They don't. These values are meant for debugging the system, not
> optimizing it. If you are interested in optimizing you may want to read
> this blog post: https://www.erlang.org/blog/io-polling/.
>
> However, from the I/O polling point of view things are quite optimal in
> the default setting. So I doubt that you can gain much by tweaking the
> different options available.
>
>
>>
>> Thank you,
>>
>>
>> On Tue, Nov 16, 2021 at 11:07 AM Lukas Larsson <[email protected]> wrote:
>>
>>> On Tue, Nov 16, 2021 at 9:59 AM Bogdan Andu <[email protected]> wrote:
>>>
>>>> Hi Lukas,
>>>>
>>>> I didn't; find any documentation related to that.
>>>>
>>>
>>> A pr improving the documentation would be much appreciated!
>>>
>>>
>>>>
>>>> Anyway,
>>>>
>>>> $ erl
>>>> Erlang/OTP 24 [erts-12.1.4] [source] [64-bit] [smp:4:4] [ds:4:4:10]
>>>> [async-threads:1]
>>>>
>>>> Eshell V12.1.4  (abort with ^G)
>>>> 1> erlang:system_info(kernel_poll).
>>>> true
>>>> 2>
>>>>
>>>> I guess I have kernel poll support for my erlang servers.
>>>>
>>>> How can one tell if it is 'kqueue' or 'poll' type of kernel poll?
>>>>
>>>> Because OpenBSD has also poll which is not great
>>>>
>>>> Is there any erlang system information function that shows
>>>> exactly that?
>>>>
>>>
>>> If you run `erlang:system_info(check_io)` you will get information about
>>> the I/O checking sub-system which should include information about which
>>> mechanism is used.
>>>
>>>
>>>>
>>>> Thank you
>>>>
>>>>
>>>>
>>>> On Tue, Nov 16, 2021 at 10:53 AM Lukas Larsson <[email protected]>
>>>> wrote:
>>>> >
>>>> > Hello!
>>>> >
>>>> > The banner about kernel-poll was removed from the erlang start some
>>>> releases ago. So to check if you have kernel poll support you need to call
>>>> `erlang:system_info(kernel_poll)`. If it returns `true` then you have
>>>> kernel-poll support.
>>>> >
>>>> > Lukas
>>>> >
>>>> > On Tue, Nov 16, 2021 at 9:47 AM Bogdan Andu <[email protected]> wrote:
>>>> >>
>>>> >> Hello,
>>>> >>
>>>> >> I have an OpenBSD 6.8 amd64 machine and
>>>> >> I would like to compile Erlang 24 with kqueue support
>>>> >> such that I want erl to show me this:
>>>> >>
>>>> >> $erl
>>>> >> ........................ [kernel-poll]
>>>> >>
>>>> >> I understand that this is a compile time option
>>>> >> and not anymore a runtime selectable option tru + K true
>>>> >> switch
>>>> >>
>>>> >> I tried the following configure options with no success:
>>>> >> ./configure --prefix=/usr/local/erlang24.1.4
>>>> >> --with-ssl=/usr/local/openssl/1.1.1l --enable-dynamic-ssl-lib
>>>> >> --with-ssl-rpath=/usr/local/openssl/1.1.1l/lib --without-javac
>>>> >> --enable-threads --enable-kernel-poll --disable-hipe
>>>> >>
>>>> >> With openbsd patches (+./otp_build update_configure)
>>>> >> and without patches the result is the same:
>>>> >> no kernel-poll flag present - meaning that kernel polling with kqueue
>>>> >> is not available to that erlang emulator.
>>>> >>
>>>> >> Please advice me how to build erlang 24 with kqueue support.
>>>> >>
>>>> >> I have an Openbsd 5.4 with erlang 19 that does has kernell-poll flag
>>>> >>
>>>> >> $ erl +Ktrue
>>>> >> Erlang/OTP 19 [erts-8.1] [source] [64-bit] [smp:2:2]
>>>> >> [async-threads:10] [kernel-poll:true]
>>>> >>
>>>> >> Eshell V8.1  (abort with ^G)
>>>> >>
>>>> >>
>>>> >> p.s.
>>>> >> building erlang 24 against openssl 1.1.1 for tlsv3 support wasn't
>>>> >> a pleasant experience. The configuration script links against
>>>> >> system libressl  openssl library, instead of --with-ssl option given
>>>> >> to ./configure.
>>>> >> So I had to alter manually crypto ./configure and Makefile files .
>>>>
>>>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.