ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/IO-AIO/AIO.pm
Revision: 1.82
Committed: Fri Oct 27 20:10:06 2006 UTC (17 years, 7 months ago) by root
Branch: MAIN
Changes since 1.81: +113 -76 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 root 1.82 aio_copy aio_group aio_nop aio_mknod);
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.40 =item aio_sendfile $out_fh, $in_fh, $in_offset, $length, $callback->($retval)
271 root 1.35
272     Tries to copy C<$length> bytes from C<$in_fh> to C<$out_fh>. It starts
273     reading at byte offset C<$in_offset>, and starts writing at the current
274     file offset of C<$out_fh>. Because of that, it is not safe to issue more
275     than one C<aio_sendfile> per C<$out_fh>, as they will interfere with each
276     other.
277    
278     This call tries to make use of a native C<sendfile> syscall to provide
279     zero-copy operation. For this to work, C<$out_fh> should refer to a
280     socket, and C<$in_fh> should refer to mmap'able file.
281    
282     If the native sendfile call fails or is not implemented, it will be
283 root 1.36 emulated, so you can call C<aio_sendfile> on any type of filehandle
284     regardless of the limitations of the operating system.
285 root 1.35
286     Please note, however, that C<aio_sendfile> can read more bytes from
287     C<$in_fh> than are written, and there is no way to find out how many
288 root 1.36 bytes have been read from C<aio_sendfile> alone, as C<aio_sendfile> only
289     provides the number of bytes written to C<$out_fh>. Only if the result
290     value equals C<$length> one can assume that C<$length> bytes have been
291     read.
292 root 1.35
293 root 1.40 =item aio_readahead $fh,$offset,$length, $callback->($retval)
294 root 1.1
295 root 1.20 C<aio_readahead> populates the page cache with data from a file so that
296 root 1.1 subsequent reads from that file will not block on disk I/O. The C<$offset>
297     argument specifies the starting point from which data is to be read and
298     C<$length> specifies the number of bytes to be read. I/O is performed in
299     whole pages, so that offset is effectively rounded down to a page boundary
300     and bytes are read up to the next page boundary greater than or equal to
301 root 1.20 (off-set+length). C<aio_readahead> does not read beyond the end of the
302 root 1.1 file. The current file offset of the file is left unchanged.
303    
304 root 1.26 If that syscall doesn't exist (likely if your OS isn't Linux) it will be
305     emulated by simply reading the data, which would have a similar effect.
306    
307 root 1.40 =item aio_stat $fh_or_path, $callback->($status)
308 root 1.1
309 root 1.40 =item aio_lstat $fh, $callback->($status)
310 root 1.1
311     Works like perl's C<stat> or C<lstat> in void context. The callback will
312     be called after the stat and the results will be available using C<stat _>
313     or C<-s _> etc...
314    
315     The pathname passed to C<aio_stat> must be absolute. See API NOTES, above,
316     for an explanation.
317    
318     Currently, the stats are always 64-bit-stats, i.e. instead of returning an
319     error when stat'ing a large file, the results will be silently truncated
320     unless perl itself is compiled with large file support.
321    
322     Example: Print the length of F</etc/passwd>:
323    
324     aio_stat "/etc/passwd", sub {
325     $_[0] and die "stat failed: $!";
326     print "size is ", -s _, "\n";
327     };
328    
329 root 1.40 =item aio_unlink $pathname, $callback->($status)
330 root 1.1
331     Asynchronously unlink (delete) a file and call the callback with the
332     result code.
333    
334 root 1.82 =item aio_mknod $path, $mode, $dev, $callback->($status)
335    
336     Asynchronously create a device node (or fifo). See mknod(2): the only
337     portable value for C<$mode> is C<S_IFIFO> ored with permissions, and C<0>
338     for C<$dev>.
339    
340 root 1.50 =item aio_link $srcpath, $dstpath, $callback->($status)
341    
342     Asynchronously create a new link to the existing object at C<$srcpath> at
343     the path C<$dstpath> and call the callback with the result code.
344    
345     =item aio_symlink $srcpath, $dstpath, $callback->($status)
346    
347     Asynchronously create a new symbolic link to the existing object at C<$srcpath> at
348     the path C<$dstpath> and call the callback with the result code.
349    
350     =item aio_rename $srcpath, $dstpath, $callback->($status)
351    
352     Asynchronously rename the object at C<$srcpath> to C<$dstpath>, just as
353     rename(2) and call the callback with the result code.
354    
355 root 1.40 =item aio_rmdir $pathname, $callback->($status)
356 root 1.27
357     Asynchronously rmdir (delete) a directory and call the callback with the
358     result code.
359    
360 root 1.46 =item aio_readdir $pathname, $callback->($entries)
361 root 1.37
362     Unlike the POSIX call of the same name, C<aio_readdir> reads an entire
363     directory (i.e. opendir + readdir + closedir). The entries will not be
364     sorted, and will B<NOT> include the C<.> and C<..> entries.
365    
366     The callback a single argument which is either C<undef> or an array-ref
367     with the filenames.
368    
369 root 1.82 =item aio_copy $srcpath, $dstpath, $callback->($status)
370    
371     Try to copy the I<file> (directories not supported as either source or
372     destination) from C<$srcpath> to C<$dstpath> and call the callback with
373     the C<0> (error) or C<-1> ok.
374    
375     This is a composite request that it creates the destination file with
376     mode 0200 and copies the contents of the source file into it using
377     C<aio_sendfile>, followed by restoring atime, mtime, access mode and
378     uid/gid, in that order.
379    
380     If an error occurs, the partial destination file will be unlinked, if
381     possible, except when setting atime, mtime, access mode and uid/gid, where
382     errors are being ignored.
383    
384     =cut
385    
386     sub aio_copy($$;$) {
387     my ($src, $dst, $cb) = @_;
388    
389     my $pri = aioreq_pri;
390     my $grp = aio_group $cb;
391    
392     aioreq_pri $pri;
393     add $grp aio_open $src, O_RDONLY, 0, sub {
394     if (my $src_fh = $_[0]) {
395     my @stat = stat $src_fh;
396    
397     aioreq_pri $pri;
398     add $grp aio_open $dst, O_CREAT | O_WRONLY | O_TRUNC, 0200, sub {
399     if (my $dst_fh = $_[0]) {
400     aioreq_pri $pri;
401     add $grp aio_sendfile $dst_fh, $src_fh, 0, $stat[7], sub {
402     if ($_[0] == $stat[7]) {
403     $grp->result (0);
404     close $src_fh;
405    
406     # those should not normally block. should. should.
407     utime $stat[8], $stat[9], $dst;
408     chmod $stat[2] & 07777, $dst_fh;
409     chown $stat[4], $stat[5], $dst_fh;
410     close $dst_fh;
411     } else {
412     $grp->result (-1);
413     close $src_fh;
414     close $dst_fh;
415    
416     aioreq $pri;
417     add $grp aio_unlink $dst;
418     }
419     };
420     } else {
421     $grp->result (-1);
422     }
423     },
424    
425     } else {
426     $grp->result (-1);
427     }
428     };
429    
430     $grp
431     }
432    
433     =item aio_move $srcpath, $dstpath, $callback->($status)
434    
435     Try to move the I<file> (directories not supported as either source or
436     destination) from C<$srcpath> to C<$dstpath> and call the callback with
437     the C<0> (error) or C<-1> ok.
438    
439     This is a composite request that tries to rename(2) the file first. If
440     rename files with C<EXDEV>, it copies the file with C<aio_copy> and, if
441     that is successful, unlinking the C<$srcpath>.
442    
443     =cut
444    
445     sub aio_move($$;$) {
446     my ($src, $dst, $cb) = @_;
447    
448     my $pri = aioreq_pri;
449     my $grp = aio_group $cb;
450    
451     aioreq_pri $pri;
452     add $grp aio_rename $src, $dst, sub {
453     if ($_[0] && $! == EXDEV) {
454     aioreq_pri $pri;
455     add $grp aio_copy $src, $dst, sub {
456     $grp->result ($_[0]);
457    
458     if (!$_[0]) {
459     aioreq_pri $pri;
460     add $grp aio_unlink $src;
461     }
462     };
463     } else {
464     $grp->result ($_[0]);
465     }
466     };
467    
468     $grp
469     }
470    
471 root 1.40 =item aio_scandir $path, $maxreq, $callback->($dirs, $nondirs)
472    
473 root 1.52 Scans a directory (similar to C<aio_readdir>) but additionally tries to
474 root 1.76 efficiently separate the entries of directory C<$path> into two sets of
475     names, directories you can recurse into (directories), and ones you cannot
476     recurse into (everything else, including symlinks to directories).
477 root 1.52
478 root 1.61 C<aio_scandir> is a composite request that creates of many sub requests_
479     C<$maxreq> specifies the maximum number of outstanding aio requests that
480     this function generates. If it is C<< <= 0 >>, then a suitable default
481 root 1.81 will be chosen (currently 4).
482 root 1.40
483     On error, the callback is called without arguments, otherwise it receives
484     two array-refs with path-relative entry names.
485    
486     Example:
487    
488     aio_scandir $dir, 0, sub {
489     my ($dirs, $nondirs) = @_;
490     print "real directories: @$dirs\n";
491     print "everything else: @$nondirs\n";
492     };
493    
494     Implementation notes.
495    
496     The C<aio_readdir> cannot be avoided, but C<stat()>'ing every entry can.
497    
498     After reading the directory, the modification time, size etc. of the
499 root 1.52 directory before and after the readdir is checked, and if they match (and
500     isn't the current time), the link count will be used to decide how many
501     entries are directories (if >= 2). Otherwise, no knowledge of the number
502     of subdirectories will be assumed.
503    
504     Then entries will be sorted into likely directories (everything without
505     a non-initial dot currently) and likely non-directories (everything
506     else). Then every entry plus an appended C</.> will be C<stat>'ed,
507     likely directories first. If that succeeds, it assumes that the entry
508     is a directory or a symlink to directory (which will be checked
509     seperately). This is often faster than stat'ing the entry itself because
510     filesystems might detect the type of the entry without reading the inode
511     data (e.g. ext2fs filetype feature).
512    
513     If the known number of directories (link count - 2) has been reached, the
514     rest of the entries is assumed to be non-directories.
515    
516     This only works with certainty on POSIX (= UNIX) filesystems, which
517     fortunately are the vast majority of filesystems around.
518    
519     It will also likely work on non-POSIX filesystems with reduced efficiency
520     as those tend to return 0 or 1 as link counts, which disables the
521     directory counting heuristic.
522 root 1.40
523     =cut
524    
525     sub aio_scandir($$$) {
526     my ($path, $maxreq, $cb) = @_;
527    
528 root 1.80 my $pri = aioreq_pri;
529    
530 root 1.58 my $grp = aio_group $cb;
531 root 1.55
532 root 1.81 $maxreq = 4 if $maxreq <= 0;
533 root 1.40
534     # stat once
535 root 1.80 aioreq_pri $pri;
536 root 1.55 add $grp aio_stat $path, sub {
537 root 1.58 return $grp->result () if $_[0];
538 root 1.52 my $now = time;
539 root 1.40 my $hash1 = join ":", (stat _)[0,1,3,7,9];
540    
541     # read the directory entries
542 root 1.80 aioreq_pri $pri;
543 root 1.55 add $grp aio_readdir $path, sub {
544 root 1.40 my $entries = shift
545 root 1.58 or return $grp->result ();
546 root 1.40
547     # stat the dir another time
548 root 1.80 aioreq_pri $pri;
549 root 1.55 add $grp aio_stat $path, sub {
550 root 1.40 my $hash2 = join ":", (stat _)[0,1,3,7,9];
551    
552     my $ndirs;
553    
554     # take the slow route if anything looks fishy
555 root 1.52 if ($hash1 ne $hash2 or (stat _)[9] == $now) {
556 root 1.40 $ndirs = -1;
557     } else {
558     # if nlink == 2, we are finished
559     # on non-posix-fs's, we rely on nlink < 2
560     $ndirs = (stat _)[3] - 2
561 root 1.58 or return $grp->result ([], $entries);
562 root 1.40 }
563    
564     # sort into likely dirs and likely nondirs
565     # dirs == files without ".", short entries first
566     $entries = [map $_->[0],
567     sort { $b->[1] cmp $a->[1] }
568     map [$_, sprintf "%s%04d", (/.\./ ? "1" : "0"), length],
569     @$entries];
570    
571     my (@dirs, @nondirs);
572    
573 root 1.74 my $statgrp = add $grp aio_group sub {
574     $grp->result (\@dirs, \@nondirs);
575 root 1.40 };
576    
577 root 1.74 limit $statgrp $maxreq;
578     feed $statgrp sub {
579     return unless @$entries;
580     my $entry = pop @$entries;
581    
582 root 1.80 aioreq_pri $pri;
583 root 1.74 add $statgrp aio_stat "$path/$entry/.", sub {
584     if ($_[0] < 0) {
585     push @nondirs, $entry;
586     } else {
587     # need to check for real directory
588 root 1.80 aioreq_pri $pri;
589 root 1.74 add $statgrp aio_lstat "$path/$entry", sub {
590     if (-d _) {
591     push @dirs, $entry;
592    
593 root 1.75 unless (--$ndirs) {
594 root 1.74 push @nondirs, @$entries;
595 root 1.75 feed $statgrp;
596 root 1.74 }
597     } else {
598     push @nondirs, $entry;
599 root 1.40 }
600     }
601     }
602 root 1.74 };
603 root 1.40 };
604     };
605     };
606     };
607 root 1.55
608     $grp
609 root 1.40 }
610    
611     =item aio_fsync $fh, $callback->($status)
612 root 1.1
613     Asynchronously call fsync on the given filehandle and call the callback
614     with the fsync result code.
615    
616 root 1.40 =item aio_fdatasync $fh, $callback->($status)
617 root 1.1
618     Asynchronously call fdatasync on the given filehandle and call the
619 root 1.26 callback with the fdatasync result code.
620    
621     If this call isn't available because your OS lacks it or it couldn't be
622     detected, it will be emulated by calling C<fsync> instead.
623 root 1.1
624 root 1.58 =item aio_group $callback->(...)
625 root 1.54
626 root 1.55 This is a very special aio request: Instead of doing something, it is a
627     container for other aio requests, which is useful if you want to bundle
628 root 1.71 many requests into a single, composite, request with a definite callback
629     and the ability to cancel the whole request with its subrequests.
630 root 1.55
631     Returns an object of class L<IO::AIO::GRP>. See its documentation below
632     for more info.
633    
634     Example:
635    
636     my $grp = aio_group sub {
637     print "all stats done\n";
638     };
639    
640     add $grp
641     (aio_stat ...),
642     (aio_stat ...),
643     ...;
644    
645 root 1.63 =item aio_nop $callback->()
646    
647     This is a special request - it does nothing in itself and is only used for
648     side effects, such as when you want to add a dummy request to a group so
649     that finishing the requests in the group depends on executing the given
650     code.
651    
652 root 1.64 While this request does nothing, it still goes through the execution
653     phase and still requires a worker thread. Thus, the callback will not
654     be executed immediately but only after other requests in the queue have
655     entered their execution phase. This can be used to measure request
656     latency.
657    
658 root 1.71 =item IO::AIO::aio_busy $fractional_seconds, $callback->() *NOT EXPORTED*
659 root 1.54
660     Mainly used for debugging and benchmarking, this aio request puts one of
661     the request workers to sleep for the given time.
662    
663 root 1.56 While it is theoretically handy to have simple I/O scheduling requests
664 root 1.71 like sleep and file handle readable/writable, the overhead this creates is
665     immense (it blocks a thread for a long time) so do not use this function
666     except to put your application under artificial I/O pressure.
667 root 1.56
668 root 1.5 =back
669    
670 root 1.53 =head2 IO::AIO::REQ CLASS
671 root 1.52
672     All non-aggregate C<aio_*> functions return an object of this class when
673     called in non-void context.
674    
675     =over 4
676    
677 root 1.65 =item cancel $req
678 root 1.52
679     Cancels the request, if possible. Has the effect of skipping execution
680     when entering the B<execute> state and skipping calling the callback when
681     entering the the B<result> state, but will leave the request otherwise
682     untouched. That means that requests that currently execute will not be
683     stopped and resources held by the request will not be freed prematurely.
684    
685 root 1.65 =item cb $req $callback->(...)
686    
687     Replace (or simply set) the callback registered to the request.
688    
689 root 1.52 =back
690    
691 root 1.55 =head2 IO::AIO::GRP CLASS
692    
693     This class is a subclass of L<IO::AIO::REQ>, so all its methods apply to
694     objects of this class, too.
695    
696     A IO::AIO::GRP object is a special request that can contain multiple other
697     aio requests.
698    
699     You create one by calling the C<aio_group> constructing function with a
700     callback that will be called when all contained requests have entered the
701     C<done> state:
702    
703     my $grp = aio_group sub {
704     print "all requests are done\n";
705     };
706    
707     You add requests by calling the C<add> method with one or more
708     C<IO::AIO::REQ> objects:
709    
710     $grp->add (aio_unlink "...");
711    
712 root 1.58 add $grp aio_stat "...", sub {
713     $_[0] or return $grp->result ("error");
714    
715     # add another request dynamically, if first succeeded
716     add $grp aio_open "...", sub {
717     $grp->result ("ok");
718     };
719     };
720 root 1.55
721     This makes it very easy to create composite requests (see the source of
722     C<aio_move> for an application) that work and feel like simple requests.
723    
724 root 1.62 =over 4
725    
726     =item * The IO::AIO::GRP objects will be cleaned up during calls to
727 root 1.55 C<IO::AIO::poll_cb>, just like any other request.
728    
729 root 1.62 =item * They can be canceled like any other request. Canceling will cancel not
730 root 1.59 only the request itself, but also all requests it contains.
731 root 1.55
732 root 1.62 =item * They can also can also be added to other IO::AIO::GRP objects.
733 root 1.55
734 root 1.62 =item * You must not add requests to a group from within the group callback (or
735 root 1.60 any later time).
736    
737 root 1.62 =back
738    
739 root 1.55 Their lifetime, simplified, looks like this: when they are empty, they
740     will finish very quickly. If they contain only requests that are in the
741     C<done> state, they will also finish. Otherwise they will continue to
742     exist.
743    
744 root 1.57 That means after creating a group you have some time to add requests. And
745     in the callbacks of those requests, you can add further requests to the
746     group. And only when all those requests have finished will the the group
747     itself finish.
748    
749 root 1.55 =over 4
750    
751 root 1.65 =item add $grp ...
752    
753 root 1.55 =item $grp->add (...)
754    
755 root 1.57 Add one or more requests to the group. Any type of L<IO::AIO::REQ> can
756     be added, including other groups, as long as you do not create circular
757     dependencies.
758    
759     Returns all its arguments.
760 root 1.55
761 root 1.74 =item $grp->cancel_subs
762    
763     Cancel all subrequests and clears any feeder, but not the group request
764     itself. Useful when you queued a lot of events but got a result early.
765    
766 root 1.58 =item $grp->result (...)
767    
768     Set the result value(s) that will be passed to the group callback when all
769 root 1.80 subrequests have finished and set thre groups errno to the current value
770     of errno (just like calling C<errno> without an error number). By default,
771     no argument will be passed and errno is zero.
772    
773     =item $grp->errno ([$errno])
774    
775     Sets the group errno value to C<$errno>, or the current value of errno
776     when the argument is missing.
777    
778     Every aio request has an associated errno value that is restored when
779     the callback is invoked. This method lets you change this value from its
780     default (0).
781    
782     Calling C<result> will also set errno, so make sure you either set C<$!>
783     before the call to C<result>, or call c<errno> after it.
784 root 1.58
785 root 1.65 =item feed $grp $callback->($grp)
786 root 1.60
787     Sets a feeder/generator on this group: every group can have an attached
788     generator that generates requests if idle. The idea behind this is that,
789     although you could just queue as many requests as you want in a group,
790     this might starve other requests for a potentially long time. For
791     example, C<aio_scandir> might generate hundreds of thousands C<aio_stat>
792     requests, delaying any later requests for a long time.
793    
794     To avoid this, and allow incremental generation of requests, you can
795     instead a group and set a feeder on it that generates those requests. The
796 root 1.68 feed callback will be called whenever there are few enough (see C<limit>,
797 root 1.60 below) requests active in the group itself and is expected to queue more
798     requests.
799    
800 root 1.68 The feed callback can queue as many requests as it likes (i.e. C<add> does
801     not impose any limits).
802 root 1.60
803 root 1.65 If the feed does not queue more requests when called, it will be
804 root 1.60 automatically removed from the group.
805    
806 root 1.65 If the feed limit is C<0>, it will be set to C<2> automatically.
807 root 1.60
808     Example:
809    
810     # stat all files in @files, but only ever use four aio requests concurrently:
811    
812     my $grp = aio_group sub { print "finished\n" };
813 root 1.68 limit $grp 4;
814 root 1.65 feed $grp sub {
815 root 1.60 my $file = pop @files
816     or return;
817    
818     add $grp aio_stat $file, sub { ... };
819 root 1.65 };
820 root 1.60
821 root 1.68 =item limit $grp $num
822 root 1.60
823     Sets the feeder limit for the group: The feeder will be called whenever
824     the group contains less than this many requests.
825    
826     Setting the limit to C<0> will pause the feeding process.
827    
828 root 1.55 =back
829    
830 root 1.5 =head2 SUPPORT FUNCTIONS
831    
832     =over 4
833    
834     =item $fileno = IO::AIO::poll_fileno
835    
836 root 1.20 Return the I<request result pipe file descriptor>. This filehandle must be
837     polled for reading by some mechanism outside this module (e.g. Event or
838     select, see below or the SYNOPSIS). If the pipe becomes readable you have
839     to call C<poll_cb> to check the results.
840 root 1.5
841     See C<poll_cb> for an example.
842    
843     =item IO::AIO::poll_cb
844    
845     Process all outstanding events on the result pipe. You have to call this
846     regularly. Returns the number of events processed. Returns immediately
847     when no events are outstanding.
848    
849 root 1.78 If not all requests were processed for whatever reason, the filehandle
850     will still be ready when C<poll_cb> returns.
851    
852 root 1.20 Example: Install an Event watcher that automatically calls
853     IO::AIO::poll_cb with high priority:
854 root 1.5
855     Event->io (fd => IO::AIO::poll_fileno,
856     poll => 'r', async => 1,
857     cb => \&IO::AIO::poll_cb);
858    
859 root 1.78 =item IO::AIO::poll_some $max_requests
860    
861     Similar to C<poll_cb>, but only processes up to C<$max_requests> requests
862     at a time.
863    
864     Useful if you want to ensure some level of interactiveness when perl is
865     not fast enough to process all requests in time.
866    
867     Example: Install an Event watcher that automatically calls
868     IO::AIO::poll_some with low priority, to ensure that other parts of the
869     program get the CPU sometimes even under high AIO load.
870    
871     Event->io (fd => IO::AIO::poll_fileno,
872     poll => 'r', nice => 1,
873     cb => sub { IO::AIO::poll_some 256 });
874    
875 root 1.5 =item IO::AIO::poll_wait
876    
877     Wait till the result filehandle becomes ready for reading (simply does a
878 root 1.20 C<select> on the filehandle. This is useful if you want to synchronously wait
879 root 1.5 for some requests to finish).
880    
881     See C<nreqs> for an example.
882    
883     =item IO::AIO::nreqs
884    
885 root 1.80 Returns the number of requests currently in the ready, execute or pending
886     states (i.e. for which their callback has not been invoked yet).
887 root 1.5
888     Example: wait till there are no outstanding requests anymore:
889    
890     IO::AIO::poll_wait, IO::AIO::poll_cb
891     while IO::AIO::nreqs;
892    
893 root 1.80 =item IO::AIO::nready
894    
895     Returns the number of requests currently in the ready state (not yet
896     executed).
897    
898     =item IO::AIO::npending
899    
900     Returns the number of requests currently in the pending state (executed,
901     but not yet processed by poll_cb).
902    
903 root 1.12 =item IO::AIO::flush
904    
905     Wait till all outstanding AIO requests have been handled.
906    
907 root 1.13 Strictly equivalent to:
908    
909     IO::AIO::poll_wait, IO::AIO::poll_cb
910     while IO::AIO::nreqs;
911    
912     =item IO::AIO::poll
913    
914     Waits until some requests have been handled.
915    
916     Strictly equivalent to:
917    
918     IO::AIO::poll_wait, IO::AIO::poll_cb
919     if IO::AIO::nreqs;
920    
921 root 1.5 =item IO::AIO::min_parallel $nthreads
922    
923 root 1.61 Set the minimum number of AIO threads to C<$nthreads>. The current
924     default is C<8>, which means eight asynchronous operations can execute
925     concurrently at any one time (the number of outstanding requests,
926     however, is unlimited).
927 root 1.5
928 root 1.34 IO::AIO starts threads only on demand, when an AIO request is queued and
929     no free thread exists.
930    
931 root 1.61 It is recommended to keep the number of threads relatively low, as some
932     Linux kernel versions will scale negatively with the number of threads
933     (higher parallelity => MUCH higher latency). With current Linux 2.6
934     versions, 4-32 threads should be fine.
935 root 1.5
936 root 1.34 Under most circumstances you don't need to call this function, as the
937     module selects a default that is suitable for low to moderate load.
938 root 1.5
939     =item IO::AIO::max_parallel $nthreads
940    
941 root 1.34 Sets the maximum number of AIO threads to C<$nthreads>. If more than the
942     specified number of threads are currently running, this function kills
943     them. This function blocks until the limit is reached.
944    
945     While C<$nthreads> are zero, aio requests get queued but not executed
946     until the number of threads has been increased again.
947 root 1.5
948     This module automatically runs C<max_parallel 0> at program end, to ensure
949     that all threads are killed and that there are no outstanding requests.
950    
951     Under normal circumstances you don't need to call this function.
952    
953 root 1.79 =item $oldmaxreqs = IO::AIO::max_outstanding $maxreqs
954 root 1.5
955 root 1.79 This is a very bad function to use in interactive programs because it
956     blocks, and a bad way to reduce concurrency because it is inexact: Better
957     use an C<aio_group> together with a feed callback.
958    
959     Sets the maximum number of outstanding requests to C<$nreqs>. If you
960     to queue up more than this number of requests, the next call to the
961     C<poll_cb> (and C<poll_some> and other functions calling C<poll_cb>)
962     function will block until the limit is no longer exceeded.
963    
964     The default value is very large, so there is no practical limit on the
965     number of outstanding requests.
966    
967     You can still queue as many requests as you want. Therefore,
968     C<max_oustsanding> is mainly useful in simple scripts (with low values) or
969     as a stop gap to shield against fatal memory overflow (with large values).
970 root 1.5
971     =back
972    
973 root 1.1 =cut
974    
975 root 1.2 # support function to convert a fd into a perl filehandle
976     sub _fd2fh {
977     return undef if $_[0] < 0;
978    
979 root 1.23 # try to generate nice filehandles
980     my $sym = "IO::AIO::fd#$_[0]";
981     local *$sym;
982 root 1.25
983 root 1.27 open *$sym, "+<&=$_[0]" # usually works under any unix
984     or open *$sym, "<&=$_[0]" # cygwin needs this
985     or open *$sym, ">&=$_[0]" # or this
986 root 1.2 or return undef;
987    
988 root 1.23 *$sym
989 root 1.2 }
990    
991 root 1.61 min_parallel 8;
992 root 1.1
993 root 1.82 END {
994     flush;
995     };
996    
997 root 1.1 1;
998    
999 root 1.27 =head2 FORK BEHAVIOUR
1000    
1001 root 1.52 This module should do "the right thing" when the process using it forks:
1002    
1003 root 1.34 Before the fork, IO::AIO enters a quiescent state where no requests
1004     can be added in other threads and no results will be processed. After
1005     the fork the parent simply leaves the quiescent state and continues
1006 root 1.72 request/result processing, while the child frees the request/result queue
1007     (so that the requests started before the fork will only be handled in the
1008     parent). Threads will be started on demand until the limit set in the
1009 root 1.34 parent process has been reached again.
1010 root 1.27
1011 root 1.52 In short: the parent will, after a short pause, continue as if fork had
1012     not been called, while the child will act as if IO::AIO has not been used
1013     yet.
1014    
1015 root 1.60 =head2 MEMORY USAGE
1016    
1017 root 1.72 Per-request usage:
1018    
1019     Each aio request uses - depending on your architecture - around 100-200
1020     bytes of memory. In addition, stat requests need a stat buffer (possibly
1021     a few hundred bytes), readdir requires a result buffer and so on. Perl
1022     scalars and other data passed into aio requests will also be locked and
1023     will consume memory till the request has entered the done state.
1024 root 1.60
1025     This is now awfully much, so queuing lots of requests is not usually a
1026     problem.
1027    
1028 root 1.72 Per-thread usage:
1029    
1030     In the execution phase, some aio requests require more memory for
1031     temporary buffers, and each thread requires a stack and other data
1032     structures (usually around 16k-128k, depending on the OS).
1033    
1034     =head1 KNOWN BUGS
1035    
1036 root 1.73 Known bugs will be fixed in the next release.
1037 root 1.60
1038 root 1.1 =head1 SEE ALSO
1039    
1040 root 1.68 L<Coro::AIO>.
1041 root 1.1
1042     =head1 AUTHOR
1043    
1044     Marc Lehmann <schmorp@schmorp.de>
1045     http://home.schmorp.de/
1046    
1047     =cut
1048