ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/libev/ev.pod
(Generate patch)

Comparing libev/ev.pod (file contents):
Revision 1.447 by root, Sat Jun 22 16:25:53 2019 UTC vs.
Revision 1.451 by root, Mon Jun 24 00:19:26 2019 UTC

574This backend maps C<EV_READ> and C<EV_WRITE> in the same way as 574This backend maps C<EV_READ> and C<EV_WRITE> in the same way as
575C<EVBACKEND_POLL>. 575C<EVBACKEND_POLL>.
576 576
577=item C<EVBACKEND_LINUXAIO> (value 64, Linux) 577=item C<EVBACKEND_LINUXAIO> (value 64, Linux)
578 578
579Use the linux-specific linux aio (I<not> C<< aio(7) >>) event interface 579Use the linux-specific linux aio (I<not> C<< aio(7) >> but C<<
580available in post-4.18 kernels. 580io_submit(2) >>) event interface available in post-4.18 kernels.
581 581
582If this backend works for you (as of this writing, it was very 582If this backend works for you (as of this writing, it was very
583experimental and only supports a subset of file types), it is the best 583experimental), it is the best event interface available on linux and might
584event interface available on linux and might be well worth it enabling it 584be well worth enabling it - if it isn't available in your kernel this will
585- if it isn't available in your kernel this will be detected and another 585be detected and this backend will be skipped.
586backend will be chosen.
587 586
588This backend can batch oneshot requests and uses a user-space ring buffer 587This backend can batch oneshot requests and supports a user-space ring
589to receive events. It also doesn't suffer from most of the design problems 588buffer to receive events. It also doesn't suffer from most of the design
590of epoll (such as not being able to remove event sources from the epoll 589problems of epoll (such as not being able to remove event sources from the
591set), and generally sounds too good to be true. Because, this being the 590epoll set), and generally sounds too good to be true. Because, this being
592linux kernel, of course it suffers from a whole new set of limitations. 591the linux kernel, of course it suffers from a whole new set of limitations.
593 592
594For one, it is not easily embeddable (but probably could be done using 593For one, it is not easily embeddable (but probably could be done using
595an event fd at some extra overhead). It also is subject to various 594an event fd at some extra overhead). It also is subject to a system wide
596arbitrary limits that can be configured in F</proc/sys/fs/aio-max-nr> 595limit that can be configured in F</proc/sys/fs/aio-max-nr> - each loop
597and F</proc/sys/fs/aio-nr>), which could lead to it being skipped during 596currently requires C<61> of this number. If no aio requests are left, this
598initialisation. 597backend will be skipped during initialisation.
599 598
600Most problematic in practise, however, is that, like kqueue, it requires 599Most problematic in practise, however, is that not all file descriptors
601special support from drivers, and, not surprisingly, not all drivers
602implement it. For example, in linux 4.19, tcp sockets, pipes, event fds, 600work with it. For example, in linux 5.1, tcp sockets, pipes, event fds,
603files, F</dev/null> and a few others are supported, but ttys are not, so 601files, F</dev/null> and a few others are supported, but ttys do not work
604this is not (yet?) a generic event polling interface but is probably still 602properly (a known bug that the kernel developers don't care about, see
605be very useful in a web server or similar program. 603L<https://lore.kernel.org/patchwork/patch/1047453/>), so this is not
604(yet?) a generic event polling interface.
605
606Overall, it seems the linux developers just don't want it to have a
607generic event handling mechanism other than C<select> or C<poll>.
608
609To work around the fd type problem, the current version of libev uses
610epoll as a fallback for file deescriptor types that do not work. Epoll
611is used in, kind of, slow mode that hopefully avoids most of its design
612problems and requires 1-3 extra syscalls per active fd every iteration.
606 613
607This backend maps C<EV_READ> and C<EV_WRITE> in the same way as 614This backend maps C<EV_READ> and C<EV_WRITE> in the same way as
608C<EVBACKEND_POLL>. 615C<EVBACKEND_POLL>.
609 616
610=item C<EVBACKEND_KQUEUE> (value 8, most BSD clones) 617=item C<EVBACKEND_KQUEUE> (value 8, most BSD clones)

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines