[zeromq-dev] zmq_poll performance question

Pieter Hintjens ph at imatix.com
Thu Nov 6 11:47:35 CET 2014


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.

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