Hi Luca, Hi Bill, thanks for the answers. Actually I verified that the configure script of zmq seems to be using epoll:
configure: Choosing polling system from 'kqueue epoll devpoll pollset poll select'... configure: Using 'epoll' polling system with CLOEXEC and indeed inside platform.hpp I found: /* Use 'epoll' polling system */ #define ZMQ_USE_EPOLL 1 /* Use 'epoll' polling system with CLOEXEC */ #define ZMQ_USE_EPOLL_CLOEXEC 1 I also read the links you sent me Bill: actually since I'm monitoring only 2 file descriptors (2 zmq sockets) I think that poll() and epoll() difference is hardly measurable. My feeling is just that whatever code ends up calling poll() so often will pay a lot of http://arkanis.de/weblog/2017-01-05-measurements-of-system-call-performance-and-overhead 2018-04-11 21:05 GMT+02:00 Bill Torpey <[email protected]>: > Well, a little googling found this, which is a pretty good writeup: > https://jvns.ca/blog/2017/06/03/async-io-on-linux-- > select--poll--and-epoll/ > > > On Apr 11, 2018, at 2:42 PM, Bill Torpey <[email protected]> wrote: > > So, are there any benchmark tests that can be used to quantify the > overhead of zmq_poll? It seems like this question keeps coming up, and it > would certainly be nice to have some real numbers (and the code used to > generate them). > > Having said that, there are several mechanisms that zmq_poll can use, and > there are apparently significant performance differences between them. My > understanding of the conventional wisdom is that epoll is preferable to > poll, which is preferable to select — but I don’t have any data to back > that up. > > In any event, you can examine the output of the libzmq build to see which > mechanism is being used: > > -- Looking for kqueue > -- Looking for kqueue - not found > -- Looking for epoll_create > -- Looking for epoll_create - found > -- Looking for epoll_create1 > -- Looking for epoll_create1 - found > *-- Detected epoll polling method* > > I’ve found one (very old!) post that discusses these differences: > https://cs.uwaterloo.ca/~brecht/servers/epoll/. If anyone can suggest > additional sources, please do. > > > On Apr 11, 2018, at 1:46 PM, Luca Boccassi <[email protected]> > wrote: > > On Wed, 2018-04-11 at 18:47 +0200, Francesco wrote: > > Hi all, > > I'm using zmq_poller_wait_all() API in one of my threads because I > need to > poll over 2 ZMQ sockets. > I'm receiving a lot of traffic on both these sockets. > I think the performance of my software is bad and that may be due > IMHO to > the huge amount of poll() syscalls that my thread does... I think the > overhead of doing the system call is what is killing me... > > so my question is: when zmq_poller_wait_all() polls zmq FDs it is > actually > polling the real socket FD or rather some ZMQ internal structure? > If the latter is true, do I have a way to poll more than 1 zmq socket > without doing a system call? > > > THanks, > Francesco > > > I'm not familiar with the zmq_poller API so someone else might help - > in general, a common optimisation is to drain the socket using non- > blocking receives when poll wakes up (taking care of using heuristic to > avoid starving the other sockets), so that you can process multiple > messages per poll > > -- > Kind regards, > Luca Boccassi_______________________________________________ > zeromq-dev mailing list > [email protected] > https://lists.zeromq.org/mailman/listinfo/zeromq-dev > > > > > _______________________________________________ > zeromq-dev mailing list > [email protected] > https://lists.zeromq.org/mailman/listinfo/zeromq-dev > >
_______________________________________________ zeromq-dev mailing list [email protected] https://lists.zeromq.org/mailman/listinfo/zeromq-dev
