ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/IO-AIO/AIO.pm
Revision: 1.81
Committed: Fri Oct 27 19:17:23 2006 UTC (17 years, 6 months ago) by root
Branch: MAIN
Changes since 1.80: +2 -6 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.1 =head1 NAME
2    
3     IO::AIO - Asynchronous Input/Output
4    
5     =head1 SYNOPSIS
6    
7     use IO::AIO;
8    
9 root 1.6 aio_open "/etc/passwd", O_RDONLY, 0, sub {
10     my ($fh) = @_;
11     ...
12     };
13    
14     aio_unlink "/tmp/file", sub { };
15    
16     aio_read $fh, 30000, 1024, $buffer, 0, sub {
17 root 1.8 $_[0] > 0 or die "read error: $!";
18 root 1.6 };
19    
20 root 1.56 # version 2+ has request and group objects
21     use IO::AIO 2;
22 root 1.52
23 root 1.68 aioreq_pri 4; # give next request a very high priority
24 root 1.52 my $req = aio_unlink "/tmp/file", sub { };
25     $req->cancel; # cancel request if still in queue
26    
27 root 1.56 my $grp = aio_group sub { print "all stats done\n" };
28     add $grp aio_stat "..." for ...;
29    
30     # AnyEvent integration
31 root 1.42 open my $fh, "<&=" . IO::AIO::poll_fileno or die "$!";
32     my $w = AnyEvent->io (fh => $fh, poll => 'r', cb => sub { IO::AIO::poll_cb });
33    
34 root 1.56 # Event integration
35 root 1.6 Event->io (fd => IO::AIO::poll_fileno,
36 root 1.7 poll => 'r',
37 root 1.6 cb => \&IO::AIO::poll_cb);
38    
39 root 1.56 # Glib/Gtk2 integration
40 root 1.6 add_watch Glib::IO IO::AIO::poll_fileno,
41 root 1.22 in => sub { IO::AIO::poll_cb; 1 };
42 root 1.6
43 root 1.56 # Tk integration
44 root 1.6 Tk::Event::IO->fileevent (IO::AIO::poll_fileno, "",
45     readable => \&IO::AIO::poll_cb);
46    
47 root 1.56 # Danga::Socket integration
48 root 1.11 Danga::Socket->AddOtherFds (IO::AIO::poll_fileno =>
49     \&IO::AIO::poll_cb);
50    
51 root 1.1 =head1 DESCRIPTION
52    
53     This module implements asynchronous I/O using whatever means your
54 root 1.2 operating system supports.
55 root 1.1
56 root 1.72 In this version, a number of threads are started that execute your
57     requests and signal their completion. You don't need thread support
58     in perl, and the threads created by this module will not be visible
59     to perl. In the future, this module might make use of the native aio
60     functions available on many operating systems. However, they are often
61     not well-supported or restricted (Linux doesn't allow them on normal
62     files currently, for example), and they would only support aio_read and
63     aio_write, so the remaining functionality would have to be implemented
64     using threads anyway.
65    
66     Although the module will work with in the presence of other (Perl-)
67     threads, it is currently not reentrant in any way, so use appropriate
68     locking yourself, always call C<poll_cb> from within the same thread, or
69     never call C<poll_cb> (or other C<aio_> functions) recursively.
70    
71     =head1 REQUEST ANATOMY AND LIFETIME
72    
73     Every C<aio_*> function creates a request. which is a C data structure not
74     directly visible to Perl.
75    
76     If called in non-void context, every request function returns a Perl
77     object representing the request. In void context, nothing is returned,
78     which saves a bit of memory.
79    
80     The perl object is a fairly standard ref-to-hash object. The hash contents
81     are not used by IO::AIO so you are free to store anything you like in it.
82    
83     During their existance, aio requests travel through the following states,
84     in order:
85    
86     =over 4
87    
88     =item ready
89    
90     Immediately after a request is created it is put into the ready state,
91     waiting for a thread to execute it.
92    
93     =item execute
94    
95     A thread has accepted the request for processing and is currently
96     executing it (e.g. blocking in read).
97    
98     =item pending
99    
100     The request has been executed and is waiting for result processing.
101    
102     While request submission and execution is fully asynchronous, result
103     processing is not and relies on the perl interpreter calling C<poll_cb>
104     (or another function with the same effect).
105    
106     =item result
107    
108     The request results are processed synchronously by C<poll_cb>.
109    
110     The C<poll_cb> function will process all outstanding aio requests by
111     calling their callbacks, freeing memory associated with them and managing
112     any groups they are contained in.
113    
114     =item done
115    
116     Request has reached the end of its lifetime and holds no resources anymore
117     (except possibly for the Perl object, but its connection to the actual
118     aio request is severed and calling its methods will either do nothing or
119     result in a runtime error).
120 root 1.1
121     =cut
122    
123     package IO::AIO;
124    
125 root 1.23 no warnings;
126 root 1.51 use strict 'vars';
127 root 1.23
128 root 1.1 use base 'Exporter';
129    
130     BEGIN {
131 root 1.55 our $VERSION = '2.0';
132 root 1.1
133 root 1.67 our @AIO_REQ = qw(aio_sendfile aio_read aio_write aio_open aio_close aio_stat
134     aio_lstat aio_unlink aio_rmdir aio_readdir aio_scandir aio_symlink
135     aio_fsync aio_fdatasync aio_readahead aio_rename aio_link aio_move
136     aio_group aio_nop);
137 root 1.70 our @EXPORT = (@AIO_REQ, qw(aioreq_pri aioreq_nice));
138 root 1.67 our @EXPORT_OK = qw(poll_fileno poll_cb poll_wait flush
139 root 1.80 min_parallel max_parallel nreqs nready npending);
140 root 1.1
141 root 1.54 @IO::AIO::GRP::ISA = 'IO::AIO::REQ';
142    
143 root 1.1 require XSLoader;
144 root 1.51 XSLoader::load ("IO::AIO", $VERSION);
145 root 1.1 }
146    
147 root 1.5 =head1 FUNCTIONS
148 root 1.1
149 root 1.5 =head2 AIO FUNCTIONS
150 root 1.1
151 root 1.5 All the C<aio_*> calls are more or less thin wrappers around the syscall
152     with the same name (sans C<aio_>). The arguments are similar or identical,
153 root 1.14 and they all accept an additional (and optional) C<$callback> argument
154     which must be a code reference. This code reference will get called with
155     the syscall return code (e.g. most syscalls return C<-1> on error, unlike
156     perl, which usually delivers "false") as it's sole argument when the given
157     syscall has been executed asynchronously.
158 root 1.1
159 root 1.23 All functions expecting a filehandle keep a copy of the filehandle
160     internally until the request has finished.
161 root 1.1
162 root 1.55 All requests return objects of type L<IO::AIO::REQ> that allow further
163     manipulation of those requests while they are in-flight.
164 root 1.52
165 root 1.28 The pathnames you pass to these routines I<must> be absolute and
166     encoded in byte form. The reason for the former is that at the time the
167     request is being executed, the current working directory could have
168     changed. Alternatively, you can make sure that you never change the
169     current working directory.
170    
171     To encode pathnames to byte form, either make sure you either: a)
172     always pass in filenames you got from outside (command line, readdir
173     etc.), b) are ASCII or ISO 8859-1, c) use the Encode module and encode
174     your pathnames to the locale (or other) encoding in effect in the user
175     environment, d) use Glib::filename_from_unicode on unicode filenames or e)
176     use something else.
177 root 1.1
178 root 1.5 =over 4
179 root 1.1
180 root 1.80 =item $prev_pri = aioreq_pri [$pri]
181 root 1.68
182 root 1.80 Returns the priority value that would be used for the next request and, if
183     C<$pri> is given, sets the priority for the next aio request.
184 root 1.68
185 root 1.80 The default priority is C<0>, the minimum and maximum priorities are C<-4>
186     and C<4>, respectively. Requests with higher priority will be serviced
187     first.
188    
189     The priority will be reset to C<0> after each call to one of the C<aio_*>
190 root 1.68 functions.
191    
192 root 1.69 Example: open a file with low priority, then read something from it with
193     higher priority so the read request is serviced before other low priority
194     open requests (potentially spamming the cache):
195    
196     aioreq_pri -3;
197     aio_open ..., sub {
198     return unless $_[0];
199    
200     aioreq_pri -2;
201     aio_read $_[0], ..., sub {
202     ...
203     };
204     };
205    
206     =item aioreq_nice $pri_adjust
207    
208     Similar to C<aioreq_pri>, but subtracts the given value from the current
209     priority, so effects are cumulative.
210    
211 root 1.40 =item aio_open $pathname, $flags, $mode, $callback->($fh)
212 root 1.1
213 root 1.2 Asynchronously open or create a file and call the callback with a newly
214     created filehandle for the file.
215 root 1.1
216     The pathname passed to C<aio_open> must be absolute. See API NOTES, above,
217     for an explanation.
218    
219 root 1.20 The C<$flags> argument is a bitmask. See the C<Fcntl> module for a
220     list. They are the same as used by C<sysopen>.
221    
222     Likewise, C<$mode> specifies the mode of the newly created file, if it
223     didn't exist and C<O_CREAT> has been given, just like perl's C<sysopen>,
224     except that it is mandatory (i.e. use C<0> if you don't create new files,
225     and C<0666> or C<0777> if you do).
226 root 1.1
227     Example:
228    
229     aio_open "/etc/passwd", O_RDONLY, 0, sub {
230 root 1.2 if ($_[0]) {
231     print "open successful, fh is $_[0]\n";
232 root 1.1 ...
233     } else {
234     die "open failed: $!\n";
235     }
236     };
237    
238 root 1.40 =item aio_close $fh, $callback->($status)
239 root 1.1
240 root 1.2 Asynchronously close a file and call the callback with the result
241     code. I<WARNING:> although accepted, you should not pass in a perl
242 root 1.20 filehandle here, as perl will likely close the file descriptor another
243     time when the filehandle is destroyed. Normally, you can safely call perls
244     C<close> or just let filehandles go out of scope.
245    
246     This is supposed to be a bug in the API, so that might change. It's
247     therefore best to avoid this function.
248 root 1.1
249 root 1.40 =item aio_read $fh,$offset,$length, $data,$dataoffset, $callback->($retval)
250 root 1.1
251 root 1.40 =item aio_write $fh,$offset,$length, $data,$dataoffset, $callback->($retval)
252 root 1.1
253     Reads or writes C<length> bytes from the specified C<fh> and C<offset>
254     into the scalar given by C<data> and offset C<dataoffset> and calls the
255     callback without the actual number of bytes read (or -1 on error, just
256     like the syscall).
257    
258 root 1.31 The C<$data> scalar I<MUST NOT> be modified in any way while the request
259     is outstanding. Modifying it can result in segfaults or WW3 (if the
260     necessary/optional hardware is installed).
261    
262 root 1.17 Example: Read 15 bytes at offset 7 into scalar C<$buffer>, starting at
263 root 1.1 offset C<0> within the scalar:
264    
265     aio_read $fh, 7, 15, $buffer, 0, sub {
266 root 1.9 $_[0] > 0 or die "read error: $!";
267     print "read $_[0] bytes: <$buffer>\n";
268 root 1.1 };
269    
270 root 1.50 =item aio_move $srcpath, $dstpath, $callback->($status)
271    
272 root 1.52 Try to move the I<file> (directories not supported as either source or
273     destination) from C<$srcpath> to C<$dstpath> and call the callback with
274     the C<0> (error) or C<-1> ok.
275 root 1.50
276     This is a composite request that tries to rename(2) the file first. If
277     rename files with C<EXDEV>, it creates the destination file with mode 0200
278     and copies the contents of the source file into it using C<aio_sendfile>,
279     followed by restoring atime, mtime, access mode and uid/gid, in that
280     order, and unlinking the C<$srcpath>.
281    
282     If an error occurs, the partial destination file will be unlinked, if
283     possible, except when setting atime, mtime, access mode and uid/gid, where
284     errors are being ignored.
285    
286     =cut
287    
288     sub aio_move($$$) {
289     my ($src, $dst, $cb) = @_;
290    
291 root 1.80 my $pri = aioreq_pri;
292 root 1.58 my $grp = aio_group $cb;
293 root 1.55
294 root 1.80 aioreq_pri $pri;
295 root 1.55 add $grp aio_rename $src, $dst, sub {
296 root 1.51 if ($_[0] && $! == EXDEV) {
297 root 1.80 aioreq_pri $pri;
298 root 1.55 add $grp aio_open $src, O_RDONLY, 0, sub {
299 root 1.50 if (my $src_fh = $_[0]) {
300     my @stat = stat $src_fh;
301    
302 root 1.80 aioreq_pri $pri;
303 root 1.55 add $grp aio_open $dst, O_WRONLY, 0200, sub {
304 root 1.50 if (my $dst_fh = $_[0]) {
305 root 1.80 aioreq_pri $pri;
306 root 1.55 add $grp aio_sendfile $dst_fh, $src_fh, 0, $stat[7], sub {
307 root 1.50 close $src_fh;
308    
309     if ($_[0] == $stat[7]) {
310     utime $stat[8], $stat[9], $dst;
311     chmod $stat[2] & 07777, $dst_fh;
312     chown $stat[4], $stat[5], $dst_fh;
313     close $dst_fh;
314    
315 root 1.80 aioreq_pri $pri;
316 root 1.55 add $grp aio_unlink $src, sub {
317 root 1.58 $grp->result ($_[0]);
318 root 1.50 };
319     } else {
320     my $errno = $!;
321 root 1.80 aioreq_pri $pri;
322 root 1.55 add $grp aio_unlink $dst, sub {
323 root 1.50 $! = $errno;
324 root 1.58 $grp->result (-1);
325 root 1.50 };
326     }
327     };
328     } else {
329 root 1.58 $grp->result (-1);
330 root 1.50 }
331     },
332    
333     } else {
334 root 1.58 $grp->result (-1);
335 root 1.50 }
336     };
337     } else {
338 root 1.58 $grp->result ($_[0]);
339 root 1.50 }
340     };
341 root 1.55
342     $grp
343 root 1.50 }
344    
345 root 1.40 =item aio_sendfile $out_fh, $in_fh, $in_offset, $length, $callback->($retval)
346 root 1.35
347     Tries to copy C<$length> bytes from C<$in_fh> to C<$out_fh>. It starts
348     reading at byte offset C<$in_offset>, and starts writing at the current
349     file offset of C<$out_fh>. Because of that, it is not safe to issue more
350     than one C<aio_sendfile> per C<$out_fh>, as they will interfere with each
351     other.
352    
353     This call tries to make use of a native C<sendfile> syscall to provide
354     zero-copy operation. For this to work, C<$out_fh> should refer to a
355     socket, and C<$in_fh> should refer to mmap'able file.
356    
357     If the native sendfile call fails or is not implemented, it will be
358 root 1.36 emulated, so you can call C<aio_sendfile> on any type of filehandle
359     regardless of the limitations of the operating system.
360 root 1.35
361     Please note, however, that C<aio_sendfile> can read more bytes from
362     C<$in_fh> than are written, and there is no way to find out how many
363 root 1.36 bytes have been read from C<aio_sendfile> alone, as C<aio_sendfile> only
364     provides the number of bytes written to C<$out_fh>. Only if the result
365     value equals C<$length> one can assume that C<$length> bytes have been
366     read.
367 root 1.35
368 root 1.40 =item aio_readahead $fh,$offset,$length, $callback->($retval)
369 root 1.1
370 root 1.20 C<aio_readahead> populates the page cache with data from a file so that
371 root 1.1 subsequent reads from that file will not block on disk I/O. The C<$offset>
372     argument specifies the starting point from which data is to be read and
373     C<$length> specifies the number of bytes to be read. I/O is performed in
374     whole pages, so that offset is effectively rounded down to a page boundary
375     and bytes are read up to the next page boundary greater than or equal to
376 root 1.20 (off-set+length). C<aio_readahead> does not read beyond the end of the
377 root 1.1 file. The current file offset of the file is left unchanged.
378    
379 root 1.26 If that syscall doesn't exist (likely if your OS isn't Linux) it will be
380     emulated by simply reading the data, which would have a similar effect.
381    
382 root 1.40 =item aio_stat $fh_or_path, $callback->($status)
383 root 1.1
384 root 1.40 =item aio_lstat $fh, $callback->($status)
385 root 1.1
386     Works like perl's C<stat> or C<lstat> in void context. The callback will
387     be called after the stat and the results will be available using C<stat _>
388     or C<-s _> etc...
389    
390     The pathname passed to C<aio_stat> must be absolute. See API NOTES, above,
391     for an explanation.
392    
393     Currently, the stats are always 64-bit-stats, i.e. instead of returning an
394     error when stat'ing a large file, the results will be silently truncated
395     unless perl itself is compiled with large file support.
396    
397     Example: Print the length of F</etc/passwd>:
398    
399     aio_stat "/etc/passwd", sub {
400     $_[0] and die "stat failed: $!";
401     print "size is ", -s _, "\n";
402     };
403    
404 root 1.40 =item aio_unlink $pathname, $callback->($status)
405 root 1.1
406     Asynchronously unlink (delete) a file and call the callback with the
407     result code.
408    
409 root 1.50 =item aio_link $srcpath, $dstpath, $callback->($status)
410    
411     Asynchronously create a new link to the existing object at C<$srcpath> at
412     the path C<$dstpath> and call the callback with the result code.
413    
414     =item aio_symlink $srcpath, $dstpath, $callback->($status)
415    
416     Asynchronously create a new symbolic link to the existing object at C<$srcpath> at
417     the path C<$dstpath> and call the callback with the result code.
418    
419     =item aio_rename $srcpath, $dstpath, $callback->($status)
420    
421     Asynchronously rename the object at C<$srcpath> to C<$dstpath>, just as
422     rename(2) and call the callback with the result code.
423    
424 root 1.40 =item aio_rmdir $pathname, $callback->($status)
425 root 1.27
426     Asynchronously rmdir (delete) a directory and call the callback with the
427     result code.
428    
429 root 1.46 =item aio_readdir $pathname, $callback->($entries)
430 root 1.37
431     Unlike the POSIX call of the same name, C<aio_readdir> reads an entire
432     directory (i.e. opendir + readdir + closedir). The entries will not be
433     sorted, and will B<NOT> include the C<.> and C<..> entries.
434    
435     The callback a single argument which is either C<undef> or an array-ref
436     with the filenames.
437    
438 root 1.40 =item aio_scandir $path, $maxreq, $callback->($dirs, $nondirs)
439    
440 root 1.52 Scans a directory (similar to C<aio_readdir>) but additionally tries to
441 root 1.76 efficiently separate the entries of directory C<$path> into two sets of
442     names, directories you can recurse into (directories), and ones you cannot
443     recurse into (everything else, including symlinks to directories).
444 root 1.52
445 root 1.61 C<aio_scandir> is a composite request that creates of many sub requests_
446     C<$maxreq> specifies the maximum number of outstanding aio requests that
447     this function generates. If it is C<< <= 0 >>, then a suitable default
448 root 1.81 will be chosen (currently 4).
449 root 1.40
450     On error, the callback is called without arguments, otherwise it receives
451     two array-refs with path-relative entry names.
452    
453     Example:
454    
455     aio_scandir $dir, 0, sub {
456     my ($dirs, $nondirs) = @_;
457     print "real directories: @$dirs\n";
458     print "everything else: @$nondirs\n";
459     };
460    
461     Implementation notes.
462    
463     The C<aio_readdir> cannot be avoided, but C<stat()>'ing every entry can.
464    
465     After reading the directory, the modification time, size etc. of the
466 root 1.52 directory before and after the readdir is checked, and if they match (and
467     isn't the current time), the link count will be used to decide how many
468     entries are directories (if >= 2). Otherwise, no knowledge of the number
469     of subdirectories will be assumed.
470    
471     Then entries will be sorted into likely directories (everything without
472     a non-initial dot currently) and likely non-directories (everything
473     else). Then every entry plus an appended C</.> will be C<stat>'ed,
474     likely directories first. If that succeeds, it assumes that the entry
475     is a directory or a symlink to directory (which will be checked
476     seperately). This is often faster than stat'ing the entry itself because
477     filesystems might detect the type of the entry without reading the inode
478     data (e.g. ext2fs filetype feature).
479    
480     If the known number of directories (link count - 2) has been reached, the
481     rest of the entries is assumed to be non-directories.
482    
483     This only works with certainty on POSIX (= UNIX) filesystems, which
484     fortunately are the vast majority of filesystems around.
485    
486     It will also likely work on non-POSIX filesystems with reduced efficiency
487     as those tend to return 0 or 1 as link counts, which disables the
488     directory counting heuristic.
489 root 1.40
490     =cut
491    
492     sub aio_scandir($$$) {
493     my ($path, $maxreq, $cb) = @_;
494    
495 root 1.80 my $pri = aioreq_pri;
496    
497 root 1.58 my $grp = aio_group $cb;
498 root 1.55
499 root 1.81 $maxreq = 4 if $maxreq <= 0;
500 root 1.40
501     # stat once
502 root 1.80 aioreq_pri $pri;
503 root 1.55 add $grp aio_stat $path, sub {
504 root 1.58 return $grp->result () if $_[0];
505 root 1.52 my $now = time;
506 root 1.40 my $hash1 = join ":", (stat _)[0,1,3,7,9];
507    
508     # read the directory entries
509 root 1.80 aioreq_pri $pri;
510 root 1.55 add $grp aio_readdir $path, sub {
511 root 1.40 my $entries = shift
512 root 1.58 or return $grp->result ();
513 root 1.40
514     # stat the dir another time
515 root 1.80 aioreq_pri $pri;
516 root 1.55 add $grp aio_stat $path, sub {
517 root 1.40 my $hash2 = join ":", (stat _)[0,1,3,7,9];
518    
519     my $ndirs;
520    
521     # take the slow route if anything looks fishy
522 root 1.52 if ($hash1 ne $hash2 or (stat _)[9] == $now) {
523 root 1.40 $ndirs = -1;
524     } else {
525     # if nlink == 2, we are finished
526     # on non-posix-fs's, we rely on nlink < 2
527     $ndirs = (stat _)[3] - 2
528 root 1.58 or return $grp->result ([], $entries);
529 root 1.40 }
530    
531     # sort into likely dirs and likely nondirs
532     # dirs == files without ".", short entries first
533     $entries = [map $_->[0],
534     sort { $b->[1] cmp $a->[1] }
535     map [$_, sprintf "%s%04d", (/.\./ ? "1" : "0"), length],
536     @$entries];
537    
538     my (@dirs, @nondirs);
539    
540 root 1.74 my $statgrp = add $grp aio_group sub {
541     $grp->result (\@dirs, \@nondirs);
542 root 1.40 };
543    
544 root 1.74 limit $statgrp $maxreq;
545     feed $statgrp sub {
546     return unless @$entries;
547     my $entry = pop @$entries;
548    
549 root 1.80 aioreq_pri $pri;
550 root 1.74 add $statgrp aio_stat "$path/$entry/.", sub {
551     if ($_[0] < 0) {
552     push @nondirs, $entry;
553     } else {
554     # need to check for real directory
555 root 1.80 aioreq_pri $pri;
556 root 1.74 add $statgrp aio_lstat "$path/$entry", sub {
557     if (-d _) {
558     push @dirs, $entry;
559    
560 root 1.75 unless (--$ndirs) {
561 root 1.74 push @nondirs, @$entries;
562 root 1.75 feed $statgrp;
563 root 1.74 }
564     } else {
565     push @nondirs, $entry;
566 root 1.40 }
567     }
568     }
569 root 1.74 };
570 root 1.40 };
571     };
572     };
573     };
574 root 1.55
575     $grp
576 root 1.40 }
577    
578     =item aio_fsync $fh, $callback->($status)
579 root 1.1
580     Asynchronously call fsync on the given filehandle and call the callback
581     with the fsync result code.
582    
583 root 1.40 =item aio_fdatasync $fh, $callback->($status)
584 root 1.1
585     Asynchronously call fdatasync on the given filehandle and call the
586 root 1.26 callback with the fdatasync result code.
587    
588     If this call isn't available because your OS lacks it or it couldn't be
589     detected, it will be emulated by calling C<fsync> instead.
590 root 1.1
591 root 1.58 =item aio_group $callback->(...)
592 root 1.54
593 root 1.55 This is a very special aio request: Instead of doing something, it is a
594     container for other aio requests, which is useful if you want to bundle
595 root 1.71 many requests into a single, composite, request with a definite callback
596     and the ability to cancel the whole request with its subrequests.
597 root 1.55
598     Returns an object of class L<IO::AIO::GRP>. See its documentation below
599     for more info.
600    
601     Example:
602    
603     my $grp = aio_group sub {
604     print "all stats done\n";
605     };
606    
607     add $grp
608     (aio_stat ...),
609     (aio_stat ...),
610     ...;
611    
612 root 1.63 =item aio_nop $callback->()
613    
614     This is a special request - it does nothing in itself and is only used for
615     side effects, such as when you want to add a dummy request to a group so
616     that finishing the requests in the group depends on executing the given
617     code.
618    
619 root 1.64 While this request does nothing, it still goes through the execution
620     phase and still requires a worker thread. Thus, the callback will not
621     be executed immediately but only after other requests in the queue have
622     entered their execution phase. This can be used to measure request
623     latency.
624    
625 root 1.71 =item IO::AIO::aio_busy $fractional_seconds, $callback->() *NOT EXPORTED*
626 root 1.54
627     Mainly used for debugging and benchmarking, this aio request puts one of
628     the request workers to sleep for the given time.
629    
630 root 1.56 While it is theoretically handy to have simple I/O scheduling requests
631 root 1.71 like sleep and file handle readable/writable, the overhead this creates is
632     immense (it blocks a thread for a long time) so do not use this function
633     except to put your application under artificial I/O pressure.
634 root 1.56
635 root 1.5 =back
636    
637 root 1.53 =head2 IO::AIO::REQ CLASS
638 root 1.52
639     All non-aggregate C<aio_*> functions return an object of this class when
640     called in non-void context.
641    
642     =over 4
643    
644 root 1.65 =item cancel $req
645 root 1.52
646     Cancels the request, if possible. Has the effect of skipping execution
647     when entering the B<execute> state and skipping calling the callback when
648     entering the the B<result> state, but will leave the request otherwise
649     untouched. That means that requests that currently execute will not be
650     stopped and resources held by the request will not be freed prematurely.
651    
652 root 1.65 =item cb $req $callback->(...)
653    
654     Replace (or simply set) the callback registered to the request.
655    
656 root 1.52 =back
657    
658 root 1.55 =head2 IO::AIO::GRP CLASS
659    
660     This class is a subclass of L<IO::AIO::REQ>, so all its methods apply to
661     objects of this class, too.
662    
663     A IO::AIO::GRP object is a special request that can contain multiple other
664     aio requests.
665    
666     You create one by calling the C<aio_group> constructing function with a
667     callback that will be called when all contained requests have entered the
668     C<done> state:
669    
670     my $grp = aio_group sub {
671     print "all requests are done\n";
672     };
673    
674     You add requests by calling the C<add> method with one or more
675     C<IO::AIO::REQ> objects:
676    
677     $grp->add (aio_unlink "...");
678    
679 root 1.58 add $grp aio_stat "...", sub {
680     $_[0] or return $grp->result ("error");
681    
682     # add another request dynamically, if first succeeded
683     add $grp aio_open "...", sub {
684     $grp->result ("ok");
685     };
686     };
687 root 1.55
688     This makes it very easy to create composite requests (see the source of
689     C<aio_move> for an application) that work and feel like simple requests.
690    
691 root 1.62 =over 4
692    
693     =item * The IO::AIO::GRP objects will be cleaned up during calls to
694 root 1.55 C<IO::AIO::poll_cb>, just like any other request.
695    
696 root 1.62 =item * They can be canceled like any other request. Canceling will cancel not
697 root 1.59 only the request itself, but also all requests it contains.
698 root 1.55
699 root 1.62 =item * They can also can also be added to other IO::AIO::GRP objects.
700 root 1.55
701 root 1.62 =item * You must not add requests to a group from within the group callback (or
702 root 1.60 any later time).
703    
704 root 1.62 =back
705    
706 root 1.55 Their lifetime, simplified, looks like this: when they are empty, they
707     will finish very quickly. If they contain only requests that are in the
708     C<done> state, they will also finish. Otherwise they will continue to
709     exist.
710    
711 root 1.57 That means after creating a group you have some time to add requests. And
712     in the callbacks of those requests, you can add further requests to the
713     group. And only when all those requests have finished will the the group
714     itself finish.
715    
716 root 1.55 =over 4
717    
718 root 1.65 =item add $grp ...
719    
720 root 1.55 =item $grp->add (...)
721    
722 root 1.57 Add one or more requests to the group. Any type of L<IO::AIO::REQ> can
723     be added, including other groups, as long as you do not create circular
724     dependencies.
725    
726     Returns all its arguments.
727 root 1.55
728 root 1.74 =item $grp->cancel_subs
729    
730     Cancel all subrequests and clears any feeder, but not the group request
731     itself. Useful when you queued a lot of events but got a result early.
732    
733 root 1.58 =item $grp->result (...)
734    
735     Set the result value(s) that will be passed to the group callback when all
736 root 1.80 subrequests have finished and set thre groups errno to the current value
737     of errno (just like calling C<errno> without an error number). By default,
738     no argument will be passed and errno is zero.
739    
740     =item $grp->errno ([$errno])
741    
742     Sets the group errno value to C<$errno>, or the current value of errno
743     when the argument is missing.
744    
745     Every aio request has an associated errno value that is restored when
746     the callback is invoked. This method lets you change this value from its
747     default (0).
748    
749     Calling C<result> will also set errno, so make sure you either set C<$!>
750     before the call to C<result>, or call c<errno> after it.
751 root 1.58
752 root 1.65 =item feed $grp $callback->($grp)
753 root 1.60
754     Sets a feeder/generator on this group: every group can have an attached
755     generator that generates requests if idle. The idea behind this is that,
756     although you could just queue as many requests as you want in a group,
757     this might starve other requests for a potentially long time. For
758     example, C<aio_scandir> might generate hundreds of thousands C<aio_stat>
759     requests, delaying any later requests for a long time.
760    
761     To avoid this, and allow incremental generation of requests, you can
762     instead a group and set a feeder on it that generates those requests. The
763 root 1.68 feed callback will be called whenever there are few enough (see C<limit>,
764 root 1.60 below) requests active in the group itself and is expected to queue more
765     requests.
766    
767 root 1.68 The feed callback can queue as many requests as it likes (i.e. C<add> does
768     not impose any limits).
769 root 1.60
770 root 1.65 If the feed does not queue more requests when called, it will be
771 root 1.60 automatically removed from the group.
772    
773 root 1.65 If the feed limit is C<0>, it will be set to C<2> automatically.
774 root 1.60
775     Example:
776    
777     # stat all files in @files, but only ever use four aio requests concurrently:
778    
779     my $grp = aio_group sub { print "finished\n" };
780 root 1.68 limit $grp 4;
781 root 1.65 feed $grp sub {
782 root 1.60 my $file = pop @files
783     or return;
784    
785     add $grp aio_stat $file, sub { ... };
786 root 1.65 };
787 root 1.60
788 root 1.68 =item limit $grp $num
789 root 1.60
790     Sets the feeder limit for the group: The feeder will be called whenever
791     the group contains less than this many requests.
792    
793     Setting the limit to C<0> will pause the feeding process.
794    
795 root 1.55 =back
796    
797 root 1.5 =head2 SUPPORT FUNCTIONS
798    
799     =over 4
800    
801     =item $fileno = IO::AIO::poll_fileno
802    
803 root 1.20 Return the I<request result pipe file descriptor>. This filehandle must be
804     polled for reading by some mechanism outside this module (e.g. Event or
805     select, see below or the SYNOPSIS). If the pipe becomes readable you have
806     to call C<poll_cb> to check the results.
807 root 1.5
808     See C<poll_cb> for an example.
809    
810     =item IO::AIO::poll_cb
811    
812     Process all outstanding events on the result pipe. You have to call this
813     regularly. Returns the number of events processed. Returns immediately
814     when no events are outstanding.
815    
816 root 1.78 If not all requests were processed for whatever reason, the filehandle
817     will still be ready when C<poll_cb> returns.
818    
819 root 1.20 Example: Install an Event watcher that automatically calls
820     IO::AIO::poll_cb with high priority:
821 root 1.5
822     Event->io (fd => IO::AIO::poll_fileno,
823     poll => 'r', async => 1,
824     cb => \&IO::AIO::poll_cb);
825    
826 root 1.78 =item IO::AIO::poll_some $max_requests
827    
828     Similar to C<poll_cb>, but only processes up to C<$max_requests> requests
829     at a time.
830    
831     Useful if you want to ensure some level of interactiveness when perl is
832     not fast enough to process all requests in time.
833    
834     Example: Install an Event watcher that automatically calls
835     IO::AIO::poll_some with low priority, to ensure that other parts of the
836     program get the CPU sometimes even under high AIO load.
837    
838     Event->io (fd => IO::AIO::poll_fileno,
839     poll => 'r', nice => 1,
840     cb => sub { IO::AIO::poll_some 256 });
841    
842 root 1.5 =item IO::AIO::poll_wait
843    
844     Wait till the result filehandle becomes ready for reading (simply does a
845 root 1.20 C<select> on the filehandle. This is useful if you want to synchronously wait
846 root 1.5 for some requests to finish).
847    
848     See C<nreqs> for an example.
849    
850     =item IO::AIO::nreqs
851    
852 root 1.80 Returns the number of requests currently in the ready, execute or pending
853     states (i.e. for which their callback has not been invoked yet).
854 root 1.5
855     Example: wait till there are no outstanding requests anymore:
856    
857     IO::AIO::poll_wait, IO::AIO::poll_cb
858     while IO::AIO::nreqs;
859    
860 root 1.80 =item IO::AIO::nready
861    
862     Returns the number of requests currently in the ready state (not yet
863     executed).
864    
865     =item IO::AIO::npending
866    
867     Returns the number of requests currently in the pending state (executed,
868     but not yet processed by poll_cb).
869    
870 root 1.12 =item IO::AIO::flush
871    
872     Wait till all outstanding AIO requests have been handled.
873    
874 root 1.13 Strictly equivalent to:
875    
876     IO::AIO::poll_wait, IO::AIO::poll_cb
877     while IO::AIO::nreqs;
878    
879     =item IO::AIO::poll
880    
881     Waits until some requests have been handled.
882    
883     Strictly equivalent to:
884    
885     IO::AIO::poll_wait, IO::AIO::poll_cb
886     if IO::AIO::nreqs;
887    
888 root 1.5 =item IO::AIO::min_parallel $nthreads
889    
890 root 1.61 Set the minimum number of AIO threads to C<$nthreads>. The current
891     default is C<8>, which means eight asynchronous operations can execute
892     concurrently at any one time (the number of outstanding requests,
893     however, is unlimited).
894 root 1.5
895 root 1.34 IO::AIO starts threads only on demand, when an AIO request is queued and
896     no free thread exists.
897    
898 root 1.61 It is recommended to keep the number of threads relatively low, as some
899     Linux kernel versions will scale negatively with the number of threads
900     (higher parallelity => MUCH higher latency). With current Linux 2.6
901     versions, 4-32 threads should be fine.
902 root 1.5
903 root 1.34 Under most circumstances you don't need to call this function, as the
904     module selects a default that is suitable for low to moderate load.
905 root 1.5
906     =item IO::AIO::max_parallel $nthreads
907    
908 root 1.34 Sets the maximum number of AIO threads to C<$nthreads>. If more than the
909     specified number of threads are currently running, this function kills
910     them. This function blocks until the limit is reached.
911    
912     While C<$nthreads> are zero, aio requests get queued but not executed
913     until the number of threads has been increased again.
914 root 1.5
915     This module automatically runs C<max_parallel 0> at program end, to ensure
916     that all threads are killed and that there are no outstanding requests.
917    
918     Under normal circumstances you don't need to call this function.
919    
920 root 1.79 =item $oldmaxreqs = IO::AIO::max_outstanding $maxreqs
921 root 1.5
922 root 1.79 This is a very bad function to use in interactive programs because it
923     blocks, and a bad way to reduce concurrency because it is inexact: Better
924     use an C<aio_group> together with a feed callback.
925    
926     Sets the maximum number of outstanding requests to C<$nreqs>. If you
927     to queue up more than this number of requests, the next call to the
928     C<poll_cb> (and C<poll_some> and other functions calling C<poll_cb>)
929     function will block until the limit is no longer exceeded.
930    
931     The default value is very large, so there is no practical limit on the
932     number of outstanding requests.
933    
934     You can still queue as many requests as you want. Therefore,
935     C<max_oustsanding> is mainly useful in simple scripts (with low values) or
936     as a stop gap to shield against fatal memory overflow (with large values).
937 root 1.5
938     =back
939    
940 root 1.1 =cut
941    
942 root 1.2 # support function to convert a fd into a perl filehandle
943     sub _fd2fh {
944     return undef if $_[0] < 0;
945    
946 root 1.23 # try to generate nice filehandles
947     my $sym = "IO::AIO::fd#$_[0]";
948     local *$sym;
949 root 1.25
950 root 1.27 open *$sym, "+<&=$_[0]" # usually works under any unix
951     or open *$sym, "<&=$_[0]" # cygwin needs this
952     or open *$sym, ">&=$_[0]" # or this
953 root 1.2 or return undef;
954    
955 root 1.23 *$sym
956 root 1.2 }
957    
958 root 1.61 min_parallel 8;
959 root 1.1
960     1;
961    
962 root 1.27 =head2 FORK BEHAVIOUR
963    
964 root 1.52 This module should do "the right thing" when the process using it forks:
965    
966 root 1.34 Before the fork, IO::AIO enters a quiescent state where no requests
967     can be added in other threads and no results will be processed. After
968     the fork the parent simply leaves the quiescent state and continues
969 root 1.72 request/result processing, while the child frees the request/result queue
970     (so that the requests started before the fork will only be handled in the
971     parent). Threads will be started on demand until the limit set in the
972 root 1.34 parent process has been reached again.
973 root 1.27
974 root 1.52 In short: the parent will, after a short pause, continue as if fork had
975     not been called, while the child will act as if IO::AIO has not been used
976     yet.
977    
978 root 1.60 =head2 MEMORY USAGE
979    
980 root 1.72 Per-request usage:
981    
982     Each aio request uses - depending on your architecture - around 100-200
983     bytes of memory. In addition, stat requests need a stat buffer (possibly
984     a few hundred bytes), readdir requires a result buffer and so on. Perl
985     scalars and other data passed into aio requests will also be locked and
986     will consume memory till the request has entered the done state.
987 root 1.60
988     This is now awfully much, so queuing lots of requests is not usually a
989     problem.
990    
991 root 1.72 Per-thread usage:
992    
993     In the execution phase, some aio requests require more memory for
994     temporary buffers, and each thread requires a stack and other data
995     structures (usually around 16k-128k, depending on the OS).
996    
997     =head1 KNOWN BUGS
998    
999 root 1.73 Known bugs will be fixed in the next release.
1000 root 1.60
1001 root 1.1 =head1 SEE ALSO
1002    
1003 root 1.68 L<Coro::AIO>.
1004 root 1.1
1005     =head1 AUTHOR
1006    
1007     Marc Lehmann <schmorp@schmorp.de>
1008     http://home.schmorp.de/
1009    
1010     =cut
1011