[erlang-questions] Increase the handle limit

Rickard Green <>
Mon Oct 24 13:52:32 CEST 2011


Joel Reymont wrote:
> On Oct 21, 2011, at 8:48 PM, Tim Watson wrote:
>
>> Is the gist of this is that select() has a size limit (1024) which has nothing to do with the OS limit on how many file handles you can open at a time? I think Erlang still uses select on a number of platforms and IIRC kqueue on OS-X is somehow broken so Erlang is still using select() on the mac.
>
> It seems that ERTS_POLL_USE_SELECT is defined on the Mac, although +K true is also accepted.
>
> This causes the following block in erts_poll_init() of erts/emulator/sys/common/erl_poll.c to be triggered
>
> #if ERTS_POLL_USE_SELECT && defined(FD_SETSIZE)
>     if (max_fds > FD_SETSIZE)
>   max_fds = FD_SETSIZE;
> #endif
>
> This really should NOT be a compile-time setting.
>
> It should check to see if kernell poll, etc. are enabled at runtime and only clip max_fds if they are not.
>

This has been up on the list before...

The "clipping" is there for a reason. Kernel-poll on MacOSX is 
implemented using kqueue(). Neither kqueue() nor poll() can handle all 
types of file-descriptors on MacOSX. The runtime system needs to be able 
to handle any type of file-descriptor that may appear. We are therefore 
forced to fall back on select() when a file-descriptor that cannot be 
handled by kqueue() appears. A file-descriptor that cannot be handled by 
kqueue() may appear at any time, i.e. we need to be able to ensure that 
all file-descriptors that may appear in the runtime-system can be 
handled by select().

Regards,
Rickard
-- 
Rickard Green, Erlang/OTP, Ericsson AB.



More information about the erlang-questions mailing list