[zeromq-dev] zmq_poll performance question

Francis Le Bourse zno-reply-francis.lebourse at sfr-sh.fr
Thu Nov 6 14:09:24 CET 2014

On 11/6/2014 11:47 AM, Pieter Hintjens wrote:
> A simple optimization is, when you are polling sockets for input, to
> continue reading from an active socket using a non-blocking read. So
> you process all waiting messages on a socket and then only switch back
> to poll when needed.
Thank you for you quick reply.

Yes, but the question was more about the zmq_poll() internals.
For 600+ file descriptors, zmq_poll() calls poll() a huge number of 
times for only a few that will trigger a POLLIN and the relevant 
information is already known / present in the pollfds array. The 
performance hit is there.


> On Thu, Nov 6, 2014 at 11:28 AM, Francis Le Bourse
> <zno-reply-francis.lebourse at sfr-sh.fr> wrote:
>> Hi,
>> I am looking at a performance issue in zmq, when the number of zsockets /
>> file descriptors becomes large.
>> The relevant calls are:
>>      poll+0x57
>>      zmq_poll+0x2e3
>>      zloop_start+0x1e8
>>      main+0xb40
>>      __libc_start_main+0xfd
>> immediately followed by a loop of
>>      poll+0x57
>>      zmq::signaler_t::wait(int)+0x33
>>      zmq::mailbox_t::recv(zmq::command_t*, int)+0x78
>>      zmq::socket_base_t::process_commands(int, bool)+0xbe
>>      zmq::socket_base_t::getsockopt(int, void*, unsigned long*)+0x135
>>      zmq_getsockopt+0x75
>>      zmq_poll+0x3da
>>      zloop_start+0x1e8
>>      main+0xb40
>>      __libc_start_main+0xfd
>> The code in the loop is executed once per file descriptor in the initial
>> pollarray, redoing a poll() system call each time.
>> Is there a reason to proceed that way ?
>> Would be possible to reuse the results of the first poll() in order to
>> bypass the second set of system calls ?
>> Cheers,
>> Francis
>> _______________________________________________
>> zeromq-dev mailing list
>> zeromq-dev at lists.zeromq.org
>> http://lists.zeromq.org/mailman/listinfo/zeromq-dev

More information about the zeromq-dev mailing list