ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/IO-AIO/README
Revision: 1.27
Committed: Sat Oct 6 14:05:37 2007 UTC (16 years, 7 months ago) by root
Branch: MAIN
CVS Tags: rel-2_51
Changes since 1.26: +30 -13 lines
Log Message:
*** empty log message ***

File Contents

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