ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/IO-AIO/README
Revision: 1.55
Committed: Sat Jan 25 00:15:52 2014 UTC (10 years, 4 months ago) by root
Branch: MAIN
CVS Tags: rel-4_2, rel-4_3, rel-4_31
Changes since 1.54: +8 -6 lines
Log Message:
4.2

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.44 aio_open "/etc/passwd", IO::AIO::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 root 1.1 DESCRIPTION
30     This module implements asynchronous I/O using whatever means your
31 root 1.38 operating system supports. It is implemented as an interface to "libeio"
32     (<http://software.schmorp.de/pkg/libeio.html>).
33 root 1.1
34 root 1.19 Asynchronous means that operations that can normally block your program
35     (e.g. reading from disk) will be done asynchronously: the operation will
36     still block, but you can do something else in the meantime. This is
37     extremely useful for programs that need to stay interactive even when
38     doing heavy I/O (GUI programs, high performance network servers etc.),
39     but can also be used to easily do operations in parallel that are
40     normally done sequentially, e.g. stat'ing many files, which is much
41     faster on a RAID volume or over NFS when you do a number of stat
42     operations concurrently.
43    
44 root 1.20 While most of this works on all types of file descriptors (for example
45     sockets), using these functions on file descriptors that support
46 root 1.24 nonblocking operation (again, sockets, pipes etc.) is very inefficient.
47 root 1.38 Use an event loop for that (such as the EV module): IO::AIO will
48 root 1.24 naturally fit into such an event loop itself.
49 root 1.19
50 root 1.18 In this version, a number of threads are started that execute your
51     requests and signal their completion. You don't need thread support in
52     perl, and the threads created by this module will not be visible to
53     perl. In the future, this module might make use of the native aio
54     functions available on many operating systems. However, they are often
55 root 1.19 not well-supported or restricted (GNU/Linux doesn't allow them on normal
56 root 1.18 files currently, for example), and they would only support aio_read and
57 root 1.2 aio_write, so the remaining functionality would have to be implemented
58     using threads anyway.
59 root 1.1
60 root 1.24 Although the module will work in the presence of other (Perl-) threads,
61     it is currently not reentrant in any way, so use appropriate locking
62     yourself, always call "poll_cb" from within the same thread, or never
63     call "poll_cb" (or other "aio_" functions) recursively.
64 root 1.18
65 root 1.19 EXAMPLE
66 root 1.38 This is a simple example that uses the EV module and loads /etc/passwd
67     asynchronously:
68 root 1.19
69 root 1.38 use EV;
70 root 1.19 use IO::AIO;
71    
72 root 1.38 # register the IO::AIO callback with EV
73     my $aio_w = EV::io IO::AIO::poll_fileno, EV::READ, \&IO::AIO::poll_cb;
74 root 1.19
75     # queue the request to open /etc/passwd
76 root 1.44 aio_open "/etc/passwd", IO::AIO::O_RDONLY, 0, sub {
77 root 1.21 my $fh = shift
78 root 1.19 or die "error while opening: $!";
79    
80     # stat'ing filehandles is generally non-blocking
81     my $size = -s $fh;
82    
83     # queue a request to read the file
84     my $contents;
85     aio_read $fh, 0, $size, $contents, 0, sub {
86     $_[0] == $size
87     or die "short read: $!";
88    
89     close $fh;
90    
91     # file contents now in $contents
92     print $contents;
93    
94     # exit event loop and program
95 root 1.38 EV::unloop;
96 root 1.19 };
97     };
98    
99     # possibly queue up other requests, or open GUI windows,
100     # check for sockets etc. etc.
101    
102     # process events as long as there are some:
103 root 1.38 EV::loop;
104 root 1.19
105 root 1.18 REQUEST ANATOMY AND LIFETIME
106     Every "aio_*" function creates a request. which is a C data structure
107     not directly visible to Perl.
108    
109     If called in non-void context, every request function returns a Perl
110     object representing the request. In void context, nothing is returned,
111     which saves a bit of memory.
112    
113     The perl object is a fairly standard ref-to-hash object. The hash
114     contents are not used by IO::AIO so you are free to store anything you
115     like in it.
116    
117     During their existance, aio requests travel through the following
118     states, in order:
119    
120     ready
121     Immediately after a request is created it is put into the ready
122     state, waiting for a thread to execute it.
123    
124     execute
125     A thread has accepted the request for processing and is currently
126     executing it (e.g. blocking in read).
127    
128     pending
129     The request has been executed and is waiting for result processing.
130    
131     While request submission and execution is fully asynchronous, result
132     processing is not and relies on the perl interpreter calling
133     "poll_cb" (or another function with the same effect).
134    
135     result
136     The request results are processed synchronously by "poll_cb".
137    
138     The "poll_cb" function will process all outstanding aio requests by
139     calling their callbacks, freeing memory associated with them and
140     managing any groups they are contained in.
141    
142     done
143     Request has reached the end of its lifetime and holds no resources
144     anymore (except possibly for the Perl object, but its connection to
145     the actual aio request is severed and calling its methods will
146     either do nothing or result in a runtime error).
147 root 1.1
148 root 1.4 FUNCTIONS
149 root 1.43 QUICK OVERVIEW
150 root 1.53 This section simply lists the prototypes most of the functions for quick
151     reference. See the following sections for function-by-function
152 root 1.43 documentation.
153    
154 root 1.50 aio_wd $pathname, $callback->($wd)
155 root 1.43 aio_open $pathname, $flags, $mode, $callback->($fh)
156     aio_close $fh, $callback->($status)
157 root 1.51 aio_seek $fh,$offset,$whence, $callback->($offs)
158 root 1.43 aio_read $fh,$offset,$length, $data,$dataoffset, $callback->($retval)
159     aio_write $fh,$offset,$length, $data,$dataoffset, $callback->($retval)
160     aio_sendfile $out_fh, $in_fh, $in_offset, $length, $callback->($retval)
161     aio_readahead $fh,$offset,$length, $callback->($retval)
162     aio_stat $fh_or_path, $callback->($status)
163     aio_lstat $fh, $callback->($status)
164     aio_statvfs $fh_or_path, $callback->($statvfs)
165     aio_utime $fh_or_path, $atime, $mtime, $callback->($status)
166     aio_chown $fh_or_path, $uid, $gid, $callback->($status)
167 root 1.51 aio_chmod $fh_or_path, $mode, $callback->($status)
168 root 1.43 aio_truncate $fh_or_path, $offset, $callback->($status)
169 root 1.53 aio_allocate $fh, $mode, $offset, $len, $callback->($status)
170     aio_fiemap $fh, $start, $length, $flags, $count, $cb->(\@extents)
171 root 1.43 aio_unlink $pathname, $callback->($status)
172 root 1.50 aio_mknod $pathname, $mode, $dev, $callback->($status)
173 root 1.43 aio_link $srcpath, $dstpath, $callback->($status)
174     aio_symlink $srcpath, $dstpath, $callback->($status)
175 root 1.50 aio_readlink $pathname, $callback->($link)
176     aio_realpath $pathname, $callback->($link)
177 root 1.43 aio_rename $srcpath, $dstpath, $callback->($status)
178     aio_mkdir $pathname, $mode, $callback->($status)
179     aio_rmdir $pathname, $callback->($status)
180     aio_readdir $pathname, $callback->($entries)
181     aio_readdirx $pathname, $flags, $callback->($entries, $flags)
182     IO::AIO::READDIR_DENTS IO::AIO::READDIR_DIRS_FIRST
183     IO::AIO::READDIR_STAT_ORDER IO::AIO::READDIR_FOUND_UNKNOWN
184 root 1.50 aio_scandir $pathname, $maxreq, $callback->($dirs, $nondirs)
185     aio_load $pathname, $data, $callback->($status)
186 root 1.43 aio_copy $srcpath, $dstpath, $callback->($status)
187     aio_move $srcpath, $dstpath, $callback->($status)
188 root 1.50 aio_rmtree $pathname, $callback->($status)
189 root 1.43 aio_sync $callback->($status)
190 root 1.50 aio_syncfs $fh, $callback->($status)
191 root 1.43 aio_fsync $fh, $callback->($status)
192     aio_fdatasync $fh, $callback->($status)
193     aio_sync_file_range $fh, $offset, $nbytes, $flags, $callback->($status)
194 root 1.50 aio_pathsync $pathname, $callback->($status)
195 root 1.43 aio_msync $scalar, $offset = 0, $length = undef, flags = 0, $callback->($status)
196     aio_mtouch $scalar, $offset = 0, $length = undef, flags = 0, $callback->($status)
197 root 1.44 aio_mlock $scalar, $offset = 0, $length = undef, $callback->($status)
198     aio_mlockall $flags, $callback->($status)
199 root 1.43 aio_group $callback->(...)
200     aio_nop $callback->()
201    
202     $prev_pri = aioreq_pri [$pri]
203     aioreq_nice $pri_adjust
204    
205     IO::AIO::poll_wait
206     IO::AIO::poll_cb
207     IO::AIO::poll
208     IO::AIO::flush
209     IO::AIO::max_poll_reqs $nreqs
210     IO::AIO::max_poll_time $seconds
211     IO::AIO::min_parallel $nthreads
212     IO::AIO::max_parallel $nthreads
213     IO::AIO::max_idle $nthreads
214 root 1.46 IO::AIO::idle_timeout $seconds
215 root 1.43 IO::AIO::max_outstanding $maxreqs
216     IO::AIO::nreqs
217     IO::AIO::nready
218     IO::AIO::npending
219    
220     IO::AIO::sendfile $ofh, $ifh, $offset, $count
221     IO::AIO::fadvise $fh, $offset, $len, $advice
222 root 1.53 IO::AIO::mmap $scalar, $length, $prot, $flags[, $fh[, $offset]]
223     IO::AIO::munmap $scalar
224 root 1.44 IO::AIO::madvise $scalar, $offset, $length, $advice
225     IO::AIO::mprotect $scalar, $offset, $length, $protect
226     IO::AIO::munlock $scalar, $offset = 0, $length = undef
227 root 1.43 IO::AIO::munlockall
228    
229 root 1.51 API NOTES
230 root 1.20 All the "aio_*" calls are more or less thin wrappers around the syscall
231     with the same name (sans "aio_"). The arguments are similar or
232     identical, and they all accept an additional (and optional) $callback
233 root 1.50 argument which must be a code reference. This code reference will be
234     called after the syscall has been executed in an asynchronous fashion.
235     The results of the request will be passed as arguments to the callback
236     (and, if an error occured, in $!) - for most requests the syscall return
237     code (e.g. most syscalls return -1 on error, unlike perl, which usually
238     delivers "false").
239    
240     Some requests (such as "aio_readdir") pass the actual results and
241     communicate failures by passing "undef".
242 root 1.20
243     All functions expecting a filehandle keep a copy of the filehandle
244     internally until the request has finished.
245    
246     All functions return request objects of type IO::AIO::REQ that allow
247     further manipulation of those requests while they are in-flight.
248    
249 root 1.50 The pathnames you pass to these routines *should* be absolute. The
250     reason for this is that at the time the request is being executed, the
251     current working directory could have changed. Alternatively, you can
252     make sure that you never change the current working directory anywhere
253     in the program and then use relative paths. You can also take advantage
254     of IO::AIOs working directory abstraction, that lets you specify paths
255     relative to some previously-opened "working directory object" - see the
256     description of the "IO::AIO::WD" class later in this document.
257 root 1.20
258     To encode pathnames as octets, either make sure you either: a) always
259     pass in filenames you got from outside (command line, readdir etc.)
260 root 1.50 without tinkering, b) are in your native filesystem encoding, c) use the
261     Encode module and encode your pathnames to the locale (or other)
262     encoding in effect in the user environment, d) use
263     Glib::filename_from_unicode on unicode filenames or e) use something
264     else to ensure your scalar has the correct contents.
265 root 1.20
266     This works, btw. independent of the internal UTF-8 bit, which IO::AIO
267 root 1.32 handles correctly whether it is set or not.
268 root 1.20
269 root 1.51 AIO REQUEST FUNCTIONS
270 root 1.20 $prev_pri = aioreq_pri [$pri]
271     Returns the priority value that would be used for the next request
272     and, if $pri is given, sets the priority for the next aio request.
273    
274     The default priority is 0, the minimum and maximum priorities are -4
275     and 4, respectively. Requests with higher priority will be serviced
276     first.
277    
278     The priority will be reset to 0 after each call to one of the
279     "aio_*" functions.
280    
281     Example: open a file with low priority, then read something from it
282     with higher priority so the read request is serviced before other
283     low priority open requests (potentially spamming the cache):
284    
285     aioreq_pri -3;
286     aio_open ..., sub {
287     return unless $_[0];
288    
289     aioreq_pri -2;
290     aio_read $_[0], ..., sub {
291     ...
292     };
293     };
294    
295     aioreq_nice $pri_adjust
296     Similar to "aioreq_pri", but subtracts the given value from the
297     current priority, so the effect is cumulative.
298    
299     aio_open $pathname, $flags, $mode, $callback->($fh)
300     Asynchronously open or create a file and call the callback with a
301 root 1.53 newly created filehandle for the file (or "undef" in case of an
302     error).
303 root 1.20
304     The pathname passed to "aio_open" must be absolute. See API NOTES,
305     above, for an explanation.
306    
307     The $flags argument is a bitmask. See the "Fcntl" module for a list.
308     They are the same as used by "sysopen".
309    
310     Likewise, $mode specifies the mode of the newly created file, if it
311     didn't exist and "O_CREAT" has been given, just like perl's
312     "sysopen", except that it is mandatory (i.e. use 0 if you don't
313 root 1.23 create new files, and 0666 or 0777 if you do). Note that the $mode
314     will be modified by the umask in effect then the request is being
315     executed, so better never change the umask.
316 root 1.20
317     Example:
318    
319 root 1.44 aio_open "/etc/passwd", IO::AIO::O_RDONLY, 0, sub {
320 root 1.20 if ($_[0]) {
321     print "open successful, fh is $_[0]\n";
322     ...
323     } else {
324     die "open failed: $!\n";
325     }
326     };
327    
328 root 1.47 In addition to all the common open modes/flags ("O_RDONLY",
329     "O_WRONLY", "O_RDWR", "O_CREAT", "O_TRUNC", "O_EXCL" and
330     "O_APPEND"), the following POSIX and non-POSIX constants are
331     available (missing ones on your system are, as usual, 0):
332    
333     "O_ASYNC", "O_DIRECT", "O_NOATIME", "O_CLOEXEC", "O_NOCTTY",
334     "O_NOFOLLOW", "O_NONBLOCK", "O_EXEC", "O_SEARCH", "O_DIRECTORY",
335     "O_DSYNC", "O_RSYNC", "O_SYNC" and "O_TTY_INIT".
336    
337 root 1.20 aio_close $fh, $callback->($status)
338     Asynchronously close a file and call the callback with the result
339 root 1.26 code.
340 root 1.20
341 root 1.27 Unfortunately, you can't do this to perl. Perl *insists* very
342     strongly on closing the file descriptor associated with the
343 root 1.29 filehandle itself.
344 root 1.27
345 root 1.29 Therefore, "aio_close" will not close the filehandle - instead it
346     will use dup2 to overwrite the file descriptor with the write-end of
347     a pipe (the pipe fd will be created on demand and will be cached).
348 root 1.27
349 root 1.29 Or in other words: the file descriptor will be closed, but it will
350     not be free for reuse until the perl filehandle is closed.
351 root 1.20
352 root 1.51 aio_seek $fh, $offset, $whence, $callback->($offs)
353     Seeks the filehandle to the new $offset, similarly to perl's
354     "sysseek". The $whence can use the traditional values (0 for
355     "IO::AIO::SEEK_SET", 1 for "IO::AIO::SEEK_CUR" or 2 for
356     "IO::AIO::SEEK_END").
357    
358     The resulting absolute offset will be passed to the callback, or -1
359     in case of an error.
360    
361     In theory, the $whence constants could be different than the
362     corresponding values from Fcntl, but perl guarantees they are the
363     same, so don't panic.
364    
365 root 1.52 As a GNU/Linux (and maybe Solaris) extension, also the constants
366     "IO::AIO::SEEK_DATA" and "IO::AIO::SEEK_HOLE" are available, if they
367     could be found. No guarantees about suitability for use in
368     "aio_seek" or Perl's "sysseek" can be made though, although I would
369     naively assume they "just work".
370    
371 root 1.20 aio_read $fh,$offset,$length, $data,$dataoffset, $callback->($retval)
372     aio_write $fh,$offset,$length, $data,$dataoffset, $callback->($retval)
373 root 1.35 Reads or writes $length bytes from or to the specified $fh and
374     $offset into the scalar given by $data and offset $dataoffset and
375     calls the callback without the actual number of bytes read (or -1 on
376     error, just like the syscall).
377    
378     "aio_read" will, like "sysread", shrink or grow the $data scalar to
379     offset plus the actual number of bytes read.
380 root 1.24
381 root 1.25 If $offset is undefined, then the current file descriptor offset
382     will be used (and updated), otherwise the file descriptor offset
383     will not be changed by these calls.
384 root 1.24
385     If $length is undefined in "aio_write", use the remaining length of
386     $data.
387    
388     If $dataoffset is less than zero, it will be counted from the end of
389     $data.
390 root 1.20
391     The $data scalar *MUST NOT* be modified in any way while the request
392 root 1.24 is outstanding. Modifying it can result in segfaults or World War
393     III (if the necessary/optional hardware is installed).
394 root 1.20
395     Example: Read 15 bytes at offset 7 into scalar $buffer, starting at
396     offset 0 within the scalar:
397    
398     aio_read $fh, 7, 15, $buffer, 0, sub {
399     $_[0] > 0 or die "read error: $!";
400     print "read $_[0] bytes: <$buffer>\n";
401     };
402    
403     aio_sendfile $out_fh, $in_fh, $in_offset, $length, $callback->($retval)
404     Tries to copy $length bytes from $in_fh to $out_fh. It starts
405     reading at byte offset $in_offset, and starts writing at the current
406     file offset of $out_fh. Because of that, it is not safe to issue
407     more than one "aio_sendfile" per $out_fh, as they will interfere
408 root 1.48 with each other. The same $in_fh works fine though, as this function
409     does not move or use the file offset of $in_fh.
410 root 1.20
411 root 1.45 Please note that "aio_sendfile" can read more bytes from $in_fh than
412 root 1.48 are written, and there is no way to find out how many more bytes
413     have been read from "aio_sendfile" alone, as "aio_sendfile" only
414     provides the number of bytes written to $out_fh. Only if the result
415     value equals $length one can assume that $length bytes have been
416     read.
417 root 1.45
418     Unlike with other "aio_" functions, it makes a lot of sense to use
419     "aio_sendfile" on non-blocking sockets, as long as one end
420     (typically the $in_fh) is a file - the file I/O will then be
421     asynchronous, while the socket I/O will be non-blocking. Note,
422     however, that you can run into a trap where "aio_sendfile" reads
423     some data with readahead, then fails to write all data, and when the
424     socket is ready the next time, the data in the cache is already
425     lost, forcing "aio_sendfile" to again hit the disk. Explicit
426 root 1.48 "aio_read" + "aio_write" let's you better control resource usage.
427 root 1.45
428 root 1.48 This call tries to make use of a native "sendfile"-like syscall to
429 root 1.20 provide zero-copy operation. For this to work, $out_fh should refer
430 root 1.43 to a socket, and $in_fh should refer to an mmap'able file.
431 root 1.20
432 root 1.41 If a native sendfile cannot be found or it fails with "ENOSYS",
433 root 1.48 "EINVAL", "ENOTSUP", "EOPNOTSUPP", "EAFNOSUPPORT", "EPROTOTYPE" or
434     "ENOTSOCK", it will be emulated, so you can call "aio_sendfile" on
435     any type of filehandle regardless of the limitations of the
436     operating system.
437    
438     As native sendfile syscalls (as practically any non-POSIX interface
439     hacked together in a hurry to improve benchmark numbers) tend to be
440     rather buggy on many systems, this implementation tries to work
441     around some known bugs in Linux and FreeBSD kernels (probably
442     others, too), but that might fail, so you really really should check
443     the return value of "aio_sendfile" - fewre bytes than expected might
444     have been transferred.
445 root 1.20
446     aio_readahead $fh,$offset,$length, $callback->($retval)
447     "aio_readahead" populates the page cache with data from a file so
448     that subsequent reads from that file will not block on disk I/O. The
449     $offset argument specifies the starting point from which data is to
450     be read and $length specifies the number of bytes to be read. I/O is
451     performed in whole pages, so that offset is effectively rounded down
452     to a page boundary and bytes are read up to the next page boundary
453     greater than or equal to (off-set+length). "aio_readahead" does not
454     read beyond the end of the file. The current file offset of the file
455     is left unchanged.
456    
457     If that syscall doesn't exist (likely if your OS isn't Linux) it
458     will be emulated by simply reading the data, which would have a
459     similar effect.
460    
461     aio_stat $fh_or_path, $callback->($status)
462     aio_lstat $fh, $callback->($status)
463     Works like perl's "stat" or "lstat" in void context. The callback
464     will be called after the stat and the results will be available
465     using "stat _" or "-s _" etc...
466    
467     The pathname passed to "aio_stat" must be absolute. See API NOTES,
468     above, for an explanation.
469    
470     Currently, the stats are always 64-bit-stats, i.e. instead of
471     returning an error when stat'ing a large file, the results will be
472     silently truncated unless perl itself is compiled with large file
473     support.
474    
475 root 1.46 To help interpret the mode and dev/rdev stat values, IO::AIO offers
476     the following constants and functions (if not implemented, the
477     constants will be 0 and the functions will either "croak" or fall
478     back on traditional behaviour).
479    
480     "S_IFMT", "S_IFIFO", "S_IFCHR", "S_IFBLK", "S_IFLNK", "S_IFREG",
481     "S_IFDIR", "S_IFWHT", "S_IFSOCK", "IO::AIO::major $dev_t",
482     "IO::AIO::minor $dev_t", "IO::AIO::makedev $major, $minor".
483    
484 root 1.20 Example: Print the length of /etc/passwd:
485    
486     aio_stat "/etc/passwd", sub {
487     $_[0] and die "stat failed: $!";
488     print "size is ", -s _, "\n";
489     };
490    
491 root 1.42 aio_statvfs $fh_or_path, $callback->($statvfs)
492     Works like the POSIX "statvfs" or "fstatvfs" syscalls, depending on
493     whether a file handle or path was passed.
494    
495     On success, the callback is passed a hash reference with the
496     following members: "bsize", "frsize", "blocks", "bfree", "bavail",
497     "files", "ffree", "favail", "fsid", "flag" and "namemax". On
498     failure, "undef" is passed.
499    
500     The following POSIX IO::AIO::ST_* constants are defined: "ST_RDONLY"
501     and "ST_NOSUID".
502    
503     The following non-POSIX IO::AIO::ST_* flag masks are defined to
504     their correct value when available, or to 0 on systems that do not
505     support them: "ST_NODEV", "ST_NOEXEC", "ST_SYNCHRONOUS",
506     "ST_MANDLOCK", "ST_WRITE", "ST_APPEND", "ST_IMMUTABLE",
507     "ST_NOATIME", "ST_NODIRATIME" and "ST_RELATIME".
508    
509     Example: stat "/wd" and dump out the data if successful.
510    
511     aio_statvfs "/wd", sub {
512     my $f = $_[0]
513     or die "statvfs: $!";
514    
515     use Data::Dumper;
516     say Dumper $f;
517     };
518    
519     # result:
520     {
521     bsize => 1024,
522     bfree => 4333064312,
523     blocks => 10253828096,
524     files => 2050765568,
525     flag => 4096,
526     favail => 2042092649,
527     bavail => 4333064312,
528     ffree => 2042092649,
529     namemax => 255,
530     frsize => 1024,
531     fsid => 1810
532     }
533    
534 root 1.55 Here is a (likely partial - send me updates!) list of fsid values
535     used by Linux - it is safe to hardcode these when $^O is "linux":
536 root 1.53
537     0x0000adf5 adfs
538     0x0000adff affs
539     0x5346414f afs
540     0x09041934 anon-inode filesystem
541     0x00000187 autofs
542     0x42465331 befs
543     0x1badface bfs
544     0x42494e4d binfmt_misc
545     0x9123683e btrfs
546     0x0027e0eb cgroupfs
547     0xff534d42 cifs
548     0x73757245 coda
549     0x012ff7b7 coh
550     0x28cd3d45 cramfs
551     0x453dcd28 cramfs-wend (wrong endianness)
552     0x64626720 debugfs
553     0x00001373 devfs
554     0x00001cd1 devpts
555     0x0000f15f ecryptfs
556     0x00414a53 efs
557     0x0000137d ext
558     0x0000ef53 ext2/ext3
559     0x0000ef51 ext2
560     0x00004006 fat
561     0x65735546 fuseblk
562     0x65735543 fusectl
563     0x0bad1dea futexfs
564     0x01161970 gfs2
565     0x47504653 gpfs
566     0x00004244 hfs
567     0xf995e849 hpfs
568     0x958458f6 hugetlbfs
569     0x2bad1dea inotifyfs
570     0x00009660 isofs
571     0x000072b6 jffs2
572     0x3153464a jfs
573     0x6b414653 k-afs
574     0x0bd00bd0 lustre
575     0x0000137f minix
576     0x0000138f minix 30 char names
577     0x00002468 minix v2
578     0x00002478 minix v2 30 char names
579     0x00004d5a minix v3
580     0x19800202 mqueue
581     0x00004d44 msdos
582     0x0000564c novell
583     0x00006969 nfs
584     0x6e667364 nfsd
585     0x00003434 nilfs
586     0x5346544e ntfs
587     0x00009fa1 openprom
588     0x7461636F ocfs2
589     0x00009fa0 proc
590     0x6165676c pstorefs
591     0x0000002f qnx4
592     0x858458f6 ramfs
593     0x52654973 reiserfs
594     0x00007275 romfs
595     0x67596969 rpc_pipefs
596     0x73636673 securityfs
597     0xf97cff8c selinux
598     0x0000517b smb
599     0x534f434b sockfs
600     0x73717368 squashfs
601     0x62656572 sysfs
602     0x012ff7b6 sysv2
603     0x012ff7b5 sysv4
604     0x01021994 tmpfs
605     0x15013346 udf
606     0x00011954 ufs
607     0x54190100 ufs byteswapped
608     0x00009fa2 usbdevfs
609     0x01021997 v9fs
610     0xa501fcf5 vxfs
611     0xabba1974 xenfs
612     0x012ff7b4 xenix
613     0x58465342 xfs
614     0x012fd16d xia
615    
616 root 1.24 aio_utime $fh_or_path, $atime, $mtime, $callback->($status)
617     Works like perl's "utime" function (including the special case of
618     $atime and $mtime being undef). Fractional times are supported if
619     the underlying syscalls support them.
620    
621     When called with a pathname, uses utimes(2) if available, otherwise
622     utime(2). If called on a file descriptor, uses futimes(2) if
623     available, otherwise returns ENOSYS, so this is not portable.
624    
625     Examples:
626    
627     # set atime and mtime to current time (basically touch(1)):
628     aio_utime "path", undef, undef;
629     # set atime to current time and mtime to beginning of the epoch:
630     aio_utime "path", time, undef; # undef==0
631    
632     aio_chown $fh_or_path, $uid, $gid, $callback->($status)
633     Works like perl's "chown" function, except that "undef" for either
634     $uid or $gid is being interpreted as "do not change" (but -1 can
635     also be used).
636    
637     Examples:
638    
639     # same as "chown root path" in the shell:
640     aio_chown "path", 0, -1;
641     # same as above:
642     aio_chown "path", 0, undef;
643    
644     aio_truncate $fh_or_path, $offset, $callback->($status)
645     Works like truncate(2) or ftruncate(2).
646    
647 root 1.53 aio_allocate $fh, $mode, $offset, $len, $callback->($status)
648     Allocates or freed disk space according to the $mode argument. See
649     the linux "fallocate" docuemntation for details.
650    
651     $mode can currently be 0 or "IO::AIO::FALLOC_FL_KEEP_SIZE" to
652     allocate space, or "IO::AIO::FALLOC_FL_PUNCH_HOLE |
653     IO::AIO::FALLOC_FL_KEEP_SIZE", to deallocate a file range.
654    
655     The file system block size used by "fallocate" is presumably the
656     "f_bsize" returned by "statvfs".
657    
658     If "fallocate" isn't available or cannot be emulated (currently no
659     emulation will be attempted), passes -1 and sets $! to "ENOSYS".
660    
661 root 1.24 aio_chmod $fh_or_path, $mode, $callback->($status)
662     Works like perl's "chmod" function.
663    
664 root 1.20 aio_unlink $pathname, $callback->($status)
665     Asynchronously unlink (delete) a file and call the callback with the
666     result code.
667    
668 root 1.50 aio_mknod $pathname, $mode, $dev, $callback->($status)
669 root 1.20 [EXPERIMENTAL]
670    
671     Asynchronously create a device node (or fifo). See mknod(2).
672    
673     The only (POSIX-) portable way of calling this function is:
674    
675 root 1.50 aio_mknod $pathname, IO::AIO::S_IFIFO | $mode, 0, sub { ...
676 root 1.20
677 root 1.46 See "aio_stat" for info about some potentially helpful extra
678     constants and functions.
679    
680 root 1.20 aio_link $srcpath, $dstpath, $callback->($status)
681     Asynchronously create a new link to the existing object at $srcpath
682     at the path $dstpath and call the callback with the result code.
683    
684     aio_symlink $srcpath, $dstpath, $callback->($status)
685     Asynchronously create a new symbolic link to the existing object at
686     $srcpath at the path $dstpath and call the callback with the result
687     code.
688    
689 root 1.50 aio_readlink $pathname, $callback->($link)
690 root 1.20 Asynchronously read the symlink specified by $path and pass it to
691     the callback. If an error occurs, nothing or undef gets passed to
692     the callback.
693    
694 root 1.50 aio_realpath $pathname, $callback->($path)
695 root 1.49 Asynchronously make the path absolute and resolve any symlinks in
696 root 1.54 $path. The resulting path only consists of directories (same as
697 root 1.49 Cwd::realpath).
698    
699     This request can be used to get the absolute path of the current
700     working directory by passing it a path of . (a single dot).
701    
702 root 1.20 aio_rename $srcpath, $dstpath, $callback->($status)
703     Asynchronously rename the object at $srcpath to $dstpath, just as
704     rename(2) and call the callback with the result code.
705    
706 root 1.54 On systems that support the AIO::WD working directory abstraction
707     natively, the case "[$wd, "."]" as $srcpath is specialcased -
708     instead of failing, "rename" is called on the absolute path of $wd.
709    
710 root 1.23 aio_mkdir $pathname, $mode, $callback->($status)
711     Asynchronously mkdir (create) a directory and call the callback with
712     the result code. $mode will be modified by the umask at the time the
713     request is executed, so do not change your umask.
714    
715 root 1.20 aio_rmdir $pathname, $callback->($status)
716     Asynchronously rmdir (delete) a directory and call the callback with
717     the result code.
718    
719 root 1.54 On systems that support the AIO::WD working directory abstraction
720     natively, the case "[$wd, "."]" is specialcased - instead of
721     failing, "rmdir" is called on the absolute path of $wd.
722    
723 root 1.20 aio_readdir $pathname, $callback->($entries)
724     Unlike the POSIX call of the same name, "aio_readdir" reads an
725     entire directory (i.e. opendir + readdir + closedir). The entries
726     will not be sorted, and will NOT include the "." and ".." entries.
727    
728 root 1.36 The callback is passed a single argument which is either "undef" or
729     an array-ref with the filenames.
730    
731     aio_readdirx $pathname, $flags, $callback->($entries, $flags)
732 root 1.50 Quite similar to "aio_readdir", but the $flags argument allows one
733     to tune behaviour and output format. In case of an error, $entries
734     will be "undef".
735 root 1.36
736     The flags are a combination of the following constants, ORed
737     together (the flags will also be passed to the callback, possibly
738     modified):
739    
740     IO::AIO::READDIR_DENTS
741 root 1.47 When this flag is off, then the callback gets an arrayref
742     consisting of names only (as with "aio_readdir"), otherwise it
743     gets an arrayref with "[$name, $type, $inode]" arrayrefs, each
744 root 1.36 describing a single directory entry in more detail.
745    
746     $name is the name of the entry.
747    
748     $type is one of the "IO::AIO::DT_xxx" constants:
749    
750     "IO::AIO::DT_UNKNOWN", "IO::AIO::DT_FIFO", "IO::AIO::DT_CHR",
751     "IO::AIO::DT_DIR", "IO::AIO::DT_BLK", "IO::AIO::DT_REG",
752     "IO::AIO::DT_LNK", "IO::AIO::DT_SOCK", "IO::AIO::DT_WHT".
753    
754     "IO::AIO::DT_UNKNOWN" means just that: readdir does not know. If
755     you need to know, you have to run stat yourself. Also, for speed
756     reasons, the $type scalars are read-only: you can not modify
757     them.
758    
759     $inode is the inode number (which might not be exact on systems
760 root 1.38 with 64 bit inode numbers and 32 bit perls). This field has
761     unspecified content on systems that do not deliver the inode
762     information.
763 root 1.36
764     IO::AIO::READDIR_DIRS_FIRST
765     When this flag is set, then the names will be returned in an
766 root 1.47 order where likely directories come first, in optimal stat
767     order. This is useful when you need to quickly find directories,
768     or you want to find all directories while avoiding to stat()
769     each entry.
770 root 1.36
771     If the system returns type information in readdir, then this is
772     used to find directories directly. Otherwise, likely directories
773 root 1.47 are names beginning with ".", or otherwise names with no dots,
774     of which names with short names are tried first.
775 root 1.36
776     IO::AIO::READDIR_STAT_ORDER
777     When this flag is set, then the names will be returned in an
778     order suitable for stat()'ing each one. That is, when you plan
779     to stat() all files in the given directory, then the returned
780     order will likely be fastest.
781    
782     If both this flag and "IO::AIO::READDIR_DIRS_FIRST" are
783     specified, then the likely dirs come first, resulting in a less
784     optimal stat order.
785    
786     IO::AIO::READDIR_FOUND_UNKNOWN
787     This flag should not be set when calling "aio_readdirx".
788     Instead, it is being set by "aio_readdirx", when any of the
789 root 1.50 $type's found were "IO::AIO::DT_UNKNOWN". The absence of this
790 root 1.36 flag therefore indicates that all $type's are known, which can
791     be used to speed up some algorithms.
792 root 1.20
793 root 1.50 aio_load $pathname, $data, $callback->($status)
794 root 1.22 This is a composite request that tries to fully load the given file
795     into memory. Status is the same as with aio_read.
796    
797 root 1.20 aio_copy $srcpath, $dstpath, $callback->($status)
798     Try to copy the *file* (directories not supported as either source
799     or destination) from $srcpath to $dstpath and call the callback with
800 root 1.40 a status of 0 (ok) or -1 (error, see $!).
801 root 1.20
802 root 1.32 This is a composite request that creates the destination file with
803     mode 0200 and copies the contents of the source file into it using
804     "aio_sendfile", followed by restoring atime, mtime, access mode and
805     uid/gid, in that order.
806 root 1.20
807     If an error occurs, the partial destination file will be unlinked,
808     if possible, except when setting atime, mtime, access mode and
809     uid/gid, where errors are being ignored.
810    
811     aio_move $srcpath, $dstpath, $callback->($status)
812     Try to move the *file* (directories not supported as either source
813     or destination) from $srcpath to $dstpath and call the callback with
814 root 1.40 a status of 0 (ok) or -1 (error, see $!).
815 root 1.20
816 root 1.33 This is a composite request that tries to rename(2) the file first;
817     if rename fails with "EXDEV", it copies the file with "aio_copy"
818     and, if that is successful, unlinks the $srcpath.
819 root 1.20
820 root 1.50 aio_scandir $pathname, $maxreq, $callback->($dirs, $nondirs)
821 root 1.20 Scans a directory (similar to "aio_readdir") but additionally tries
822     to efficiently separate the entries of directory $path into two sets
823     of names, directories you can recurse into (directories), and ones
824     you cannot recurse into (everything else, including symlinks to
825     directories).
826    
827     "aio_scandir" is a composite request that creates of many sub
828     requests_ $maxreq specifies the maximum number of outstanding aio
829     requests that this function generates. If it is "<= 0", then a
830     suitable default will be chosen (currently 4).
831    
832     On error, the callback is called without arguments, otherwise it
833     receives two array-refs with path-relative entry names.
834    
835     Example:
836    
837     aio_scandir $dir, 0, sub {
838     my ($dirs, $nondirs) = @_;
839     print "real directories: @$dirs\n";
840     print "everything else: @$nondirs\n";
841     };
842    
843     Implementation notes.
844    
845     The "aio_readdir" cannot be avoided, but "stat()"'ing every entry
846     can.
847    
848 root 1.36 If readdir returns file type information, then this is used directly
849     to find directories.
850    
851     Otherwise, after reading the directory, the modification time, size
852     etc. of the directory before and after the readdir is checked, and
853     if they match (and isn't the current time), the link count will be
854     used to decide how many entries are directories (if >= 2).
855     Otherwise, no knowledge of the number of subdirectories will be
856     assumed.
857    
858     Then entries will be sorted into likely directories a non-initial
859     dot currently) and likely non-directories (see "aio_readdirx"). Then
860     every entry plus an appended "/." will be "stat"'ed, likely
861     directories first, in order of their inode numbers. If that
862     succeeds, it assumes that the entry is a directory or a symlink to
863 root 1.50 directory (which will be checked separately). This is often faster
864 root 1.36 than stat'ing the entry itself because filesystems might detect the
865     type of the entry without reading the inode data (e.g. ext2fs
866     filetype feature), even on systems that cannot return the filetype
867     information on readdir.
868 root 1.20
869     If the known number of directories (link count - 2) has been
870     reached, the rest of the entries is assumed to be non-directories.
871    
872     This only works with certainty on POSIX (= UNIX) filesystems, which
873     fortunately are the vast majority of filesystems around.
874    
875     It will also likely work on non-POSIX filesystems with reduced
876     efficiency as those tend to return 0 or 1 as link counts, which
877     disables the directory counting heuristic.
878    
879 root 1.50 aio_rmtree $pathname, $callback->($status)
880 root 1.23 Delete a directory tree starting (and including) $path, return the
881     status of the final "rmdir" only. This is a composite request that
882     uses "aio_scandir" to recurse into and rmdir directories, and unlink
883     everything else.
884    
885 root 1.28 aio_sync $callback->($status)
886     Asynchronously call sync and call the callback when finished.
887    
888 root 1.20 aio_fsync $fh, $callback->($status)
889     Asynchronously call fsync on the given filehandle and call the
890     callback with the fsync result code.
891    
892     aio_fdatasync $fh, $callback->($status)
893     Asynchronously call fdatasync on the given filehandle and call the
894     callback with the fdatasync result code.
895    
896     If this call isn't available because your OS lacks it or it couldn't
897     be detected, it will be emulated by calling "fsync" instead.
898    
899 root 1.50 aio_syncfs $fh, $callback->($status)
900     Asynchronously call the syncfs syscall to sync the filesystem
901     associated to the given filehandle and call the callback with the
902     syncfs result code. If syncfs is not available, calls sync(), but
903     returns -1 and sets errno to "ENOSYS" nevertheless.
904    
905 root 1.34 aio_sync_file_range $fh, $offset, $nbytes, $flags, $callback->($status)
906     Sync the data portion of the file specified by $offset and $length
907     to disk (but NOT the metadata), by calling the Linux-specific
908     sync_file_range call. If sync_file_range is not available or it
909     returns ENOSYS, then fdatasync or fsync is being substituted.
910    
911     $flags can be a combination of
912     "IO::AIO::SYNC_FILE_RANGE_WAIT_BEFORE",
913     "IO::AIO::SYNC_FILE_RANGE_WRITE" and
914     "IO::AIO::SYNC_FILE_RANGE_WAIT_AFTER": refer to the sync_file_range
915     manpage for details.
916    
917 root 1.50 aio_pathsync $pathname, $callback->($status)
918 root 1.28 This request tries to open, fsync and close the given path. This is
919 root 1.32 a composite request intended to sync directories after directory
920 root 1.28 operations (E.g. rename). This might not work on all operating
921     systems or have any specific effect, but usually it makes sure that
922     directory changes get written to disc. It works for anything that
923     can be opened for read-only, not just directories.
924    
925 root 1.39 Future versions of this function might fall back to other methods
926     when "fsync" on the directory fails (such as calling "sync").
927    
928 root 1.28 Passes 0 when everything went ok, and -1 on error.
929    
930 root 1.41 aio_msync $scalar, $offset = 0, $length = undef, flags = 0,
931     $callback->($status)
932     This is a rather advanced IO::AIO call, which only works on
933 root 1.43 mmap(2)ed scalars (see the "IO::AIO::mmap" function, although it
934     also works on data scalars managed by the Sys::Mmap or Mmap modules,
935     note that the scalar must only be modified in-place while an aio
936     operation is pending on it).
937 root 1.41
938     It calls the "msync" function of your OS, if available, with the
939     memory area starting at $offset in the string and ending $length
940     bytes later. If $length is negative, counts from the end, and if
941     $length is "undef", then it goes till the end of the string. The
942     flags can be a combination of "IO::AIO::MS_ASYNC",
943     "IO::AIO::MS_INVALIDATE" and "IO::AIO::MS_SYNC".
944    
945     aio_mtouch $scalar, $offset = 0, $length = undef, flags = 0,
946     $callback->($status)
947     This is a rather advanced IO::AIO call, which works best on
948     mmap(2)ed scalars.
949    
950     It touches (reads or writes) all memory pages in the specified range
951     inside the scalar. All caveats and parameters are the same as for
952     "aio_msync", above, except for flags, which must be either 0 (which
953     reads all pages and ensures they are instantiated) or
954 root 1.54 "IO::AIO::MT_MODIFY", which modifies the memory pages (by reading
955 root 1.41 and writing an octet from it, which dirties the page).
956    
957 root 1.44 aio_mlock $scalar, $offset = 0, $length = undef, $callback->($status)
958     This is a rather advanced IO::AIO call, which works best on
959     mmap(2)ed scalars.
960    
961     It reads in all the pages of the underlying storage into memory (if
962     any) and locks them, so they are not getting swapped/paged out or
963     removed.
964    
965     If $length is undefined, then the scalar will be locked till the
966     end.
967    
968     On systems that do not implement "mlock", this function returns -1
969     and sets errno to "ENOSYS".
970    
971     Note that the corresponding "munlock" is synchronous and is
972     documented under "MISCELLANEOUS FUNCTIONS".
973    
974     Example: open a file, mmap and mlock it - both will be undone when
975     $data gets destroyed.
976    
977     open my $fh, "<", $path or die "$path: $!";
978     my $data;
979     IO::AIO::mmap $data, -s $fh, IO::AIO::PROT_READ, IO::AIO::MAP_SHARED, $fh;
980     aio_mlock $data; # mlock in background
981    
982     aio_mlockall $flags, $callback->($status)
983     Calls the "mlockall" function with the given $flags (a combination
984     of "IO::AIO::MCL_CURRENT" and "IO::AIO::MCL_FUTURE").
985    
986     On systems that do not implement "mlockall", this function returns
987     -1 and sets errno to "ENOSYS".
988    
989     Note that the corresponding "munlockall" is synchronous and is
990     documented under "MISCELLANEOUS FUNCTIONS".
991    
992     Example: asynchronously lock all current and future pages into
993     memory.
994    
995     aio_mlockall IO::AIO::MCL_FUTURE;
996    
997 root 1.51 aio_fiemap $fh, $start, $length, $flags, $count, $cb->(\@extents)
998 root 1.53 Queries the extents of the given file (by calling the Linux "FIEMAP"
999 root 1.51 ioctl, see <http://cvs.schmorp.de/IO-AIO/doc/fiemap.txt> for
1000 root 1.53 details). If the ioctl is not available on your OS, then this
1001     request will fail with "ENOSYS".
1002 root 1.51
1003     $start is the starting offset to query extents for, $length is the
1004     size of the range to query - if it is "undef", then the whole file
1005     will be queried.
1006    
1007     $flags is a combination of flags ("IO::AIO::FIEMAP_FLAG_SYNC" or
1008     "IO::AIO::FIEMAP_FLAG_XATTR" - "IO::AIO::FIEMAP_FLAGS_COMPAT" is
1009     also exported), and is normally 0 or "IO::AIO::FIEMAP_FLAG_SYNC" to
1010     query the data portion.
1011    
1012     $count is the maximum number of extent records to return. If it is
1013 root 1.53 "undef", then IO::AIO queries all extents of the range. As a very
1014 root 1.51 special case, if it is 0, then the callback receives the number of
1015 root 1.53 extents instead of the extents themselves (which is unreliable, see
1016     below).
1017 root 1.51
1018     If an error occurs, the callback receives no arguments. The special
1019     "errno" value "IO::AIO::EBADR" is available to test for flag errors.
1020    
1021     Otherwise, the callback receives an array reference with extent
1022     structures. Each extent structure is an array reference itself, with
1023     the following members:
1024    
1025     [$logical, $physical, $length, $flags]
1026    
1027     Flags is any combination of the following flag values (typically
1028 root 1.53 either 0 or "IO::AIO::FIEMAP_EXTENT_LAST" (1)):
1029 root 1.51
1030     "IO::AIO::FIEMAP_EXTENT_LAST", "IO::AIO::FIEMAP_EXTENT_UNKNOWN",
1031     "IO::AIO::FIEMAP_EXTENT_DELALLOC", "IO::AIO::FIEMAP_EXTENT_ENCODED",
1032     "IO::AIO::FIEMAP_EXTENT_DATA_ENCRYPTED",
1033     "IO::AIO::FIEMAP_EXTENT_NOT_ALIGNED",
1034     "IO::AIO::FIEMAP_EXTENT_DATA_INLINE",
1035     "IO::AIO::FIEMAP_EXTENT_DATA_TAIL",
1036     "IO::AIO::FIEMAP_EXTENT_UNWRITTEN", "IO::AIO::FIEMAP_EXTENT_MERGED"
1037     or "IO::AIO::FIEMAP_EXTENT_SHARED".
1038    
1039 root 1.53 At the time of this writing (Linux 3.2), this requets is unreliable
1040     unless $count is "undef", as the kernel has all sorts of bugs
1041     preventing it to return all extents of a range for files with large
1042     number of extents. The code works around all these issues if $count
1043     is undef.
1044    
1045 root 1.20 aio_group $callback->(...)
1046     This is a very special aio request: Instead of doing something, it
1047     is a container for other aio requests, which is useful if you want
1048     to bundle many requests into a single, composite, request with a
1049     definite callback and the ability to cancel the whole request with
1050     its subrequests.
1051    
1052     Returns an object of class IO::AIO::GRP. See its documentation below
1053     for more info.
1054    
1055     Example:
1056    
1057     my $grp = aio_group sub {
1058     print "all stats done\n";
1059     };
1060    
1061     add $grp
1062     (aio_stat ...),
1063     (aio_stat ...),
1064     ...;
1065    
1066     aio_nop $callback->()
1067     This is a special request - it does nothing in itself and is only
1068     used for side effects, such as when you want to add a dummy request
1069     to a group so that finishing the requests in the group depends on
1070     executing the given code.
1071    
1072     While this request does nothing, it still goes through the execution
1073     phase and still requires a worker thread. Thus, the callback will
1074     not be executed immediately but only after other requests in the
1075     queue have entered their execution phase. This can be used to
1076     measure request latency.
1077    
1078     IO::AIO::aio_busy $fractional_seconds, $callback->() *NOT EXPORTED*
1079     Mainly used for debugging and benchmarking, this aio request puts
1080     one of the request workers to sleep for the given time.
1081    
1082     While it is theoretically handy to have simple I/O scheduling
1083     requests like sleep and file handle readable/writable, the overhead
1084     this creates is immense (it blocks a thread for a long time) so do
1085     not use this function except to put your application under
1086     artificial I/O pressure.
1087 root 1.18
1088 root 1.50 IO::AIO::WD - multiple working directories
1089     Your process only has one current working directory, which is used by
1090     all threads. This makes it hard to use relative paths (some other
1091     component could call "chdir" at any time, and it is hard to control when
1092     the path will be used by IO::AIO).
1093    
1094     One solution for this is to always use absolute paths. This usually
1095     works, but can be quite slow (the kernel has to walk the whole path on
1096     every access), and can also be a hassle to implement.
1097    
1098     Newer POSIX systems have a number of functions (openat, fdopendir,
1099     futimensat and so on) that make it possible to specify working
1100     directories per operation.
1101    
1102     For portability, and because the clowns who "designed", or shall I
1103     write, perpetrated this new interface were obviously half-drunk, this
1104     abstraction cannot be perfect, though.
1105    
1106     IO::AIO allows you to convert directory paths into a so-called
1107     IO::AIO::WD object. This object stores the canonicalised, absolute
1108     version of the path, and on systems that allow it, also a directory file
1109     descriptor.
1110    
1111     Everywhere where a pathname is accepted by IO::AIO (e.g. in "aio_stat"
1112     or "aio_unlink"), one can specify an array reference with an IO::AIO::WD
1113     object and a pathname instead (or the IO::AIO::WD object alone, which
1114     gets interpreted as "[$wd, "."]"). If the pathname is absolute, the
1115     IO::AIO::WD object is ignored, otherwise the pathname is resolved
1116     relative to that IO::AIO::WD object.
1117    
1118     For example, to get a wd object for /etc and then stat passwd inside,
1119     you would write:
1120    
1121     aio_wd "/etc", sub {
1122     my $etcdir = shift;
1123    
1124     # although $etcdir can be undef on error, there is generally no reason
1125     # to check for errors here, as aio_stat will fail with ENOENT
1126     # when $etcdir is undef.
1127    
1128     aio_stat [$etcdir, "passwd"], sub {
1129     # yay
1130     };
1131     };
1132    
1133     That "aio_wd" is a request and not a normal function shows that creating
1134     an IO::AIO::WD object is itself a potentially blocking operation, which
1135     is why it is done asynchronously.
1136    
1137     To stat the directory obtained with "aio_wd" above, one could write
1138     either of the following three request calls:
1139    
1140     aio_lstat "/etc" , sub { ... # pathname as normal string
1141     aio_lstat [$wd, "."], sub { ... # "." relative to $wd (i.e. $wd itself)
1142     aio_lstat $wd , sub { ... # shorthand for the previous
1143    
1144     As with normal pathnames, IO::AIO keeps a copy of the working directory
1145     object and the pathname string, so you could write the following without
1146     causing any issues due to $path getting reused:
1147    
1148     my $path = [$wd, undef];
1149    
1150     for my $name (qw(abc def ghi)) {
1151     $path->[1] = $name;
1152     aio_stat $path, sub {
1153     # ...
1154     };
1155     }
1156    
1157     There are some caveats: when directories get renamed (or deleted), the
1158     pathname string doesn't change, so will point to the new directory (or
1159     nowhere at all), while the directory fd, if available on the system,
1160     will still point to the original directory. Most functions accepting a
1161     pathname will use the directory fd on newer systems, and the string on
1162     older systems. Some functions (such as realpath) will always rely on the
1163     string form of the pathname.
1164    
1165 root 1.54 So this functionality is mainly useful to get some protection against
1166 root 1.50 "chdir", to easily get an absolute path out of a relative path for
1167     future reference, and to speed up doing many operations in the same
1168     directory (e.g. when stat'ing all files in a directory).
1169    
1170     The following functions implement this working directory abstraction:
1171    
1172     aio_wd $pathname, $callback->($wd)
1173     Asynchonously canonicalise the given pathname and convert it to an
1174     IO::AIO::WD object representing it. If possible and supported on the
1175     system, also open a directory fd to speed up pathname resolution
1176     relative to this working directory.
1177    
1178     If something goes wrong, then "undef" is passwd to the callback
1179     instead of a working directory object and $! is set appropriately.
1180     Since passing "undef" as working directory component of a pathname
1181     fails the request with "ENOENT", there is often no need for error
1182     checking in the "aio_wd" callback, as future requests using the
1183     value will fail in the expected way.
1184    
1185     IO::AIO::CWD
1186     This is a compiletime constant (object) that represents the process
1187     current working directory.
1188    
1189     Specifying this object as working directory object for a pathname is
1190     as if the pathname would be specified directly, without a directory
1191 root 1.54 object. For example, these calls are functionally identical:
1192 root 1.50
1193     aio_stat "somefile", sub { ... };
1194     aio_stat [IO::AIO::CWD, "somefile"], sub { ... };
1195    
1196 root 1.54 To recover the path associated with an IO::AIO::WD object, you can use
1197     "aio_realpath":
1198    
1199     aio_realpath $wd, sub {
1200     warn "path is $_[0]\n";
1201     };
1202    
1203     Currently, "aio_statvfs" always, and "aio_rename" and "aio_rmdir"
1204     sometimes, fall back to using an absolue path.
1205    
1206 root 1.18 IO::AIO::REQ CLASS
1207 root 1.20 All non-aggregate "aio_*" functions return an object of this class when
1208     called in non-void context.
1209 root 1.18
1210 root 1.20 cancel $req
1211     Cancels the request, if possible. Has the effect of skipping
1212     execution when entering the execute state and skipping calling the
1213     callback when entering the the result state, but will leave the
1214 root 1.37 request otherwise untouched (with the exception of readdir). That
1215     means that requests that currently execute will not be stopped and
1216     resources held by the request will not be freed prematurely.
1217 root 1.18
1218 root 1.20 cb $req $callback->(...)
1219     Replace (or simply set) the callback registered to the request.
1220 root 1.18
1221     IO::AIO::GRP CLASS
1222 root 1.20 This class is a subclass of IO::AIO::REQ, so all its methods apply to
1223     objects of this class, too.
1224 root 1.18
1225 root 1.20 A IO::AIO::GRP object is a special request that can contain multiple
1226     other aio requests.
1227 root 1.18
1228 root 1.20 You create one by calling the "aio_group" constructing function with a
1229     callback that will be called when all contained requests have entered
1230     the "done" state:
1231 root 1.18
1232 root 1.20 my $grp = aio_group sub {
1233     print "all requests are done\n";
1234     };
1235    
1236     You add requests by calling the "add" method with one or more
1237     "IO::AIO::REQ" objects:
1238    
1239     $grp->add (aio_unlink "...");
1240    
1241     add $grp aio_stat "...", sub {
1242     $_[0] or return $grp->result ("error");
1243 root 1.1
1244 root 1.20 # add another request dynamically, if first succeeded
1245     add $grp aio_open "...", sub {
1246     $grp->result ("ok");
1247     };
1248     };
1249 root 1.18
1250 root 1.20 This makes it very easy to create composite requests (see the source of
1251     "aio_move" for an application) that work and feel like simple requests.
1252 root 1.18
1253 root 1.28 * The IO::AIO::GRP objects will be cleaned up during calls to
1254     "IO::AIO::poll_cb", just like any other request.
1255    
1256     * They can be canceled like any other request. Canceling will cancel
1257     not only the request itself, but also all requests it contains.
1258    
1259     * They can also can also be added to other IO::AIO::GRP objects.
1260    
1261     * You must not add requests to a group from within the group callback
1262     (or any later time).
1263 root 1.20
1264     Their lifetime, simplified, looks like this: when they are empty, they
1265     will finish very quickly. If they contain only requests that are in the
1266     "done" state, they will also finish. Otherwise they will continue to
1267     exist.
1268    
1269 root 1.32 That means after creating a group you have some time to add requests
1270     (precisely before the callback has been invoked, which is only done
1271     within the "poll_cb"). And in the callbacks of those requests, you can
1272     add further requests to the group. And only when all those requests have
1273     finished will the the group itself finish.
1274 root 1.20
1275     add $grp ...
1276     $grp->add (...)
1277     Add one or more requests to the group. Any type of IO::AIO::REQ can
1278     be added, including other groups, as long as you do not create
1279     circular dependencies.
1280    
1281     Returns all its arguments.
1282    
1283     $grp->cancel_subs
1284     Cancel all subrequests and clears any feeder, but not the group
1285     request itself. Useful when you queued a lot of events but got a
1286     result early.
1287    
1288 root 1.41 The group request will finish normally (you cannot add requests to
1289     the group).
1290    
1291 root 1.20 $grp->result (...)
1292     Set the result value(s) that will be passed to the group callback
1293 root 1.28 when all subrequests have finished and set the groups errno to the
1294 root 1.20 current value of errno (just like calling "errno" without an error
1295     number). By default, no argument will be passed and errno is zero.
1296    
1297     $grp->errno ([$errno])
1298     Sets the group errno value to $errno, or the current value of errno
1299     when the argument is missing.
1300    
1301     Every aio request has an associated errno value that is restored
1302     when the callback is invoked. This method lets you change this value
1303     from its default (0).
1304    
1305     Calling "result" will also set errno, so make sure you either set $!
1306     before the call to "result", or call c<errno> after it.
1307    
1308     feed $grp $callback->($grp)
1309     Sets a feeder/generator on this group: every group can have an
1310     attached generator that generates requests if idle. The idea behind
1311     this is that, although you could just queue as many requests as you
1312     want in a group, this might starve other requests for a potentially
1313     long time. For example, "aio_scandir" might generate hundreds of
1314 root 1.50 thousands of "aio_stat" requests, delaying any later requests for a
1315 root 1.20 long time.
1316    
1317     To avoid this, and allow incremental generation of requests, you can
1318     instead a group and set a feeder on it that generates those
1319     requests. The feed callback will be called whenever there are few
1320     enough (see "limit", below) requests active in the group itself and
1321     is expected to queue more requests.
1322    
1323     The feed callback can queue as many requests as it likes (i.e. "add"
1324     does not impose any limits).
1325    
1326     If the feed does not queue more requests when called, it will be
1327     automatically removed from the group.
1328    
1329 root 1.33 If the feed limit is 0 when this method is called, it will be set to
1330     2 automatically.
1331 root 1.20
1332     Example:
1333    
1334     # stat all files in @files, but only ever use four aio requests concurrently:
1335    
1336     my $grp = aio_group sub { print "finished\n" };
1337     limit $grp 4;
1338     feed $grp sub {
1339     my $file = pop @files
1340     or return;
1341 root 1.18
1342 root 1.20 add $grp aio_stat $file, sub { ... };
1343 root 1.1 };
1344    
1345 root 1.20 limit $grp $num
1346     Sets the feeder limit for the group: The feeder will be called
1347     whenever the group contains less than this many requests.
1348 root 1.18
1349 root 1.20 Setting the limit to 0 will pause the feeding process.
1350 root 1.17
1351 root 1.33 The default value for the limit is 0, but note that setting a feeder
1352     automatically bumps it up to 2.
1353    
1354 root 1.18 SUPPORT FUNCTIONS
1355 root 1.19 EVENT PROCESSING AND EVENT LOOP INTEGRATION
1356 root 1.20 $fileno = IO::AIO::poll_fileno
1357     Return the *request result pipe file descriptor*. This filehandle
1358     must be polled for reading by some mechanism outside this module
1359 root 1.38 (e.g. EV, Glib, select and so on, see below or the SYNOPSIS). If the
1360     pipe becomes readable you have to call "poll_cb" to check the
1361     results.
1362 root 1.20
1363     See "poll_cb" for an example.
1364    
1365     IO::AIO::poll_cb
1366 root 1.54 Process some requests that have reached the result phase (i.e. they
1367     have been executed but the results are not yet reported). You have
1368     to call this "regularly" to finish outstanding requests.
1369    
1370     Returns 0 if all events could be processed (or there were no events
1371     to process), or -1 if it returned earlier for whatever reason.
1372     Returns immediately when no events are outstanding. The amount of
1373     events processed depends on the settings of "IO::AIO::max_poll_req",
1374     "IO::AIO::max_poll_time" and "IO::AIO::max_outstanding".
1375    
1376     If not all requests were processed for whatever reason, the poll
1377     file descriptor will still be ready when "poll_cb" returns, so
1378     normally you don't have to do anything special to have it called
1379     later.
1380 root 1.20
1381 root 1.47 Apart from calling "IO::AIO::poll_cb" when the event filehandle
1382     becomes ready, it can be beneficial to call this function from loops
1383     which submit a lot of requests, to make sure the results get
1384     processed when they become available and not just when the loop is
1385     finished and the event loop takes over again. This function returns
1386     very fast when there are no outstanding requests.
1387    
1388 root 1.20 Example: Install an Event watcher that automatically calls
1389 root 1.38 IO::AIO::poll_cb with high priority (more examples can be found in
1390     the SYNOPSIS section, at the top of this document):
1391 root 1.20
1392     Event->io (fd => IO::AIO::poll_fileno,
1393     poll => 'r', async => 1,
1394     cb => \&IO::AIO::poll_cb);
1395    
1396 root 1.43 IO::AIO::poll_wait
1397 root 1.54 Wait until either at least one request is in the result phase or no
1398     requests are outstanding anymore.
1399    
1400     This is useful if you want to synchronously wait for some requests
1401     to become ready, without actually handling them.
1402 root 1.43
1403     See "nreqs" for an example.
1404    
1405     IO::AIO::poll
1406     Waits until some requests have been handled.
1407    
1408     Returns the number of requests processed, but is otherwise strictly
1409     equivalent to:
1410    
1411     IO::AIO::poll_wait, IO::AIO::poll_cb
1412    
1413     IO::AIO::flush
1414     Wait till all outstanding AIO requests have been handled.
1415    
1416     Strictly equivalent to:
1417    
1418     IO::AIO::poll_wait, IO::AIO::poll_cb
1419     while IO::AIO::nreqs;
1420    
1421 root 1.20 IO::AIO::max_poll_reqs $nreqs
1422     IO::AIO::max_poll_time $seconds
1423     These set the maximum number of requests (default 0, meaning
1424     infinity) that are being processed by "IO::AIO::poll_cb" in one
1425     call, respectively the maximum amount of time (default 0, meaning
1426     infinity) spent in "IO::AIO::poll_cb" to process requests (more
1427     correctly the mininum amount of time "poll_cb" is allowed to use).
1428    
1429     Setting "max_poll_time" to a non-zero value creates an overhead of
1430     one syscall per request processed, which is not normally a problem
1431     unless your callbacks are really really fast or your OS is really
1432     really slow (I am not mentioning Solaris here). Using
1433     "max_poll_reqs" incurs no overhead.
1434    
1435     Setting these is useful if you want to ensure some level of
1436     interactiveness when perl is not fast enough to process all requests
1437     in time.
1438    
1439     For interactive programs, values such as 0.01 to 0.1 should be fine.
1440 root 1.4
1441 root 1.20 Example: Install an Event watcher that automatically calls
1442     IO::AIO::poll_cb with low priority, to ensure that other parts of
1443     the program get the CPU sometimes even under high AIO load.
1444 root 1.4
1445 root 1.20 # try not to spend much more than 0.1s in poll_cb
1446     IO::AIO::max_poll_time 0.1;
1447 root 1.4
1448 root 1.20 # use a low priority so other tasks have priority
1449     Event->io (fd => IO::AIO::poll_fileno,
1450     poll => 'r', nice => 1,
1451     cb => &IO::AIO::poll_cb);
1452    
1453 root 1.19 CONTROLLING THE NUMBER OF THREADS
1454 root 1.20 IO::AIO::min_parallel $nthreads
1455     Set the minimum number of AIO threads to $nthreads. The current
1456     default is 8, which means eight asynchronous operations can execute
1457     concurrently at any one time (the number of outstanding requests,
1458     however, is unlimited).
1459    
1460     IO::AIO starts threads only on demand, when an AIO request is queued
1461     and no free thread exists. Please note that queueing up a hundred
1462     requests can create demand for a hundred threads, even if it turns
1463     out that everything is in the cache and could have been processed
1464     faster by a single thread.
1465    
1466     It is recommended to keep the number of threads relatively low, as
1467     some Linux kernel versions will scale negatively with the number of
1468     threads (higher parallelity => MUCH higher latency). With current
1469     Linux 2.6 versions, 4-32 threads should be fine.
1470    
1471     Under most circumstances you don't need to call this function, as
1472     the module selects a default that is suitable for low to moderate
1473     load.
1474    
1475     IO::AIO::max_parallel $nthreads
1476     Sets the maximum number of AIO threads to $nthreads. If more than
1477     the specified number of threads are currently running, this function
1478     kills them. This function blocks until the limit is reached.
1479    
1480     While $nthreads are zero, aio requests get queued but not executed
1481     until the number of threads has been increased again.
1482    
1483     This module automatically runs "max_parallel 0" at program end, to
1484     ensure that all threads are killed and that there are no outstanding
1485     requests.
1486    
1487     Under normal circumstances you don't need to call this function.
1488    
1489     IO::AIO::max_idle $nthreads
1490     Limit the number of threads (default: 4) that are allowed to idle
1491 root 1.46 (i.e., threads that did not get a request to process within the idle
1492     timeout (default: 10 seconds). That means if a thread becomes idle
1493     while $nthreads other threads are also idle, it will free its
1494     resources and exit.
1495 root 1.20
1496     This is useful when you allow a large number of threads (e.g. 100 or
1497     1000) to allow for extremely high load situations, but want to free
1498     resources under normal circumstances (1000 threads can easily
1499     consume 30MB of RAM).
1500    
1501     The default is probably ok in most situations, especially if thread
1502     creation is fast. If thread creation is very slow on your system you
1503     might want to use larger values.
1504    
1505 root 1.46 IO::AIO::idle_timeout $seconds
1506     Sets the minimum idle timeout (default 10) after which worker
1507     threads are allowed to exit. SEe "IO::AIO::max_idle".
1508    
1509 root 1.30 IO::AIO::max_outstanding $maxreqs
1510 root 1.48 Sets the maximum number of outstanding requests to $nreqs. If you do
1511     queue up more than this number of requests, the next call to
1512     "IO::AIO::poll_cb" (and other functions calling "poll_cb", such as
1513     "IO::AIO::flush" or "IO::AIO::poll") will block until the limit is
1514     no longer exceeded.
1515    
1516     In other words, this setting does not enforce a queue limit, but can
1517     be used to make poll functions block if the limit is exceeded.
1518    
1519 root 1.20 This is a very bad function to use in interactive programs because
1520     it blocks, and a bad way to reduce concurrency because it is
1521     inexact: Better use an "aio_group" together with a feed callback.
1522    
1523 root 1.48 It's main use is in scripts without an event loop - when you want to
1524     stat a lot of files, you can write somehting like this:
1525    
1526     IO::AIO::max_outstanding 32;
1527    
1528     for my $path (...) {
1529     aio_stat $path , ...;
1530     IO::AIO::poll_cb;
1531     }
1532    
1533     IO::AIO::flush;
1534    
1535     The call to "poll_cb" inside the loop will normally return
1536     instantly, but as soon as more thna 32 reqeusts are in-flight, it
1537     will block until some requests have been handled. This keeps the
1538     loop from pushing a large number of "aio_stat" requests onto the
1539     queue.
1540    
1541     The default value for "max_outstanding" is very large, so there is
1542     no practical limit on the number of outstanding requests.
1543 root 1.1
1544 root 1.19 STATISTICAL INFORMATION
1545 root 1.20 IO::AIO::nreqs
1546     Returns the number of requests currently in the ready, execute or
1547     pending states (i.e. for which their callback has not been invoked
1548     yet).
1549    
1550     Example: wait till there are no outstanding requests anymore:
1551    
1552     IO::AIO::poll_wait, IO::AIO::poll_cb
1553     while IO::AIO::nreqs;
1554    
1555     IO::AIO::nready
1556     Returns the number of requests currently in the ready state (not yet
1557     executed).
1558    
1559     IO::AIO::npending
1560     Returns the number of requests currently in the pending state
1561     (executed, but not yet processed by poll_cb).
1562 root 1.19
1563 root 1.38 MISCELLANEOUS FUNCTIONS
1564     IO::AIO implements some functions that might be useful, but are not
1565     asynchronous.
1566    
1567     IO::AIO::sendfile $ofh, $ifh, $offset, $count
1568     Calls the "eio_sendfile_sync" function, which is like
1569     "aio_sendfile", but is blocking (this makes most sense if you know
1570     the input data is likely cached already and the output filehandle is
1571     set to non-blocking operations).
1572    
1573     Returns the number of bytes copied, or -1 on error.
1574    
1575     IO::AIO::fadvise $fh, $offset, $len, $advice
1576 root 1.44 Simply calls the "posix_fadvise" function (see its manpage for
1577 root 1.50 details). The following advice constants are available:
1578 root 1.38 "IO::AIO::FADV_NORMAL", "IO::AIO::FADV_SEQUENTIAL",
1579     "IO::AIO::FADV_RANDOM", "IO::AIO::FADV_NOREUSE",
1580     "IO::AIO::FADV_WILLNEED", "IO::AIO::FADV_DONTNEED".
1581    
1582     On systems that do not implement "posix_fadvise", this function
1583     returns ENOSYS, otherwise the return value of "posix_fadvise".
1584    
1585 root 1.44 IO::AIO::madvise $scalar, $offset, $len, $advice
1586     Simply calls the "posix_madvise" function (see its manpage for
1587 root 1.50 details). The following advice constants are available:
1588 root 1.44 "IO::AIO::MADV_NORMAL", "IO::AIO::MADV_SEQUENTIAL",
1589     "IO::AIO::MADV_RANDOM", "IO::AIO::MADV_WILLNEED",
1590     "IO::AIO::MADV_DONTNEED".
1591    
1592     On systems that do not implement "posix_madvise", this function
1593     returns ENOSYS, otherwise the return value of "posix_madvise".
1594    
1595     IO::AIO::mprotect $scalar, $offset, $len, $protect
1596     Simply calls the "mprotect" function on the preferably AIO::mmap'ed
1597     $scalar (see its manpage for details). The following protect
1598 root 1.50 constants are available: "IO::AIO::PROT_NONE", "IO::AIO::PROT_READ",
1599 root 1.44 "IO::AIO::PROT_WRITE", "IO::AIO::PROT_EXEC".
1600    
1601     On systems that do not implement "mprotect", this function returns
1602     ENOSYS, otherwise the return value of "mprotect".
1603    
1604 root 1.43 IO::AIO::mmap $scalar, $length, $prot, $flags, $fh[, $offset]
1605     Memory-maps a file (or anonymous memory range) and attaches it to
1606 root 1.53 the given $scalar, which will act like a string scalar. Returns true
1607     on success, and false otherwise.
1608 root 1.43
1609     The only operations allowed on the scalar are "substr"/"vec" that
1610     don't change the string length, and most read-only operations such
1611     as copying it or searching it with regexes and so on.
1612    
1613     Anything else is unsafe and will, at best, result in memory leaks.
1614    
1615     The memory map associated with the $scalar is automatically removed
1616     when the $scalar is destroyed, or when the "IO::AIO::mmap" or
1617     "IO::AIO::munmap" functions are called.
1618    
1619     This calls the "mmap"(2) function internally. See your system's
1620     manual page for details on the $length, $prot and $flags parameters.
1621    
1622     The $length must be larger than zero and smaller than the actual
1623     filesize.
1624    
1625     $prot is a combination of "IO::AIO::PROT_NONE",
1626     "IO::AIO::PROT_EXEC", "IO::AIO::PROT_READ" and/or
1627     "IO::AIO::PROT_WRITE",
1628    
1629     $flags can be a combination of "IO::AIO::MAP_SHARED" or
1630     "IO::AIO::MAP_PRIVATE", or a number of system-specific flags (when
1631     not available, the are defined as 0): "IO::AIO::MAP_ANONYMOUS"
1632     (which is set to "MAP_ANON" if your system only provides this
1633     constant), "IO::AIO::MAP_HUGETLB", "IO::AIO::MAP_LOCKED",
1634     "IO::AIO::MAP_NORESERVE", "IO::AIO::MAP_POPULATE" or
1635     "IO::AIO::MAP_NONBLOCK"
1636    
1637     If $fh is "undef", then a file descriptor of -1 is passed.
1638    
1639     $offset is the offset from the start of the file - it generally must
1640     be a multiple of "IO::AIO::PAGESIZE" and defaults to 0.
1641    
1642     Example:
1643    
1644     use Digest::MD5;
1645     use IO::AIO;
1646    
1647     open my $fh, "<verybigfile"
1648     or die "$!";
1649    
1650     IO::AIO::mmap my $data, -s $fh, IO::AIO::PROT_READ, IO::AIO::MAP_SHARED, $fh
1651     or die "verybigfile: $!";
1652    
1653     my $fast_md5 = md5 $data;
1654    
1655     IO::AIO::munmap $scalar
1656     Removes a previous mmap and undefines the $scalar.
1657    
1658 root 1.44 IO::AIO::munlock $scalar, $offset = 0, $length = undef
1659     Calls the "munlock" function, undoing the effects of a previous
1660     "aio_mlock" call (see its description for details).
1661 root 1.43
1662     IO::AIO::munlockall
1663     Calls the "munlockall" function.
1664    
1665     On systems that do not implement "munlockall", this function returns
1666     ENOSYS, otherwise the return value of "munlockall".
1667    
1668 root 1.52 IO::AIO::splice $r_fh, $r_off, $w_fh, $w_off, $length, $flags
1669     Calls the GNU/Linux splice(2) syscall, if available. If $r_off or
1670     $w_off are "undef", then "NULL" is passed for these, otherwise they
1671     should be the file offset.
1672    
1673 root 1.53 $r_fh and $w_fh should not refer to the same file, as splice might
1674     silently corrupt the data in this case.
1675    
1676 root 1.52 The following symbol flag values are available:
1677     "IO::AIO::SPLICE_F_MOVE", "IO::AIO::SPLICE_F_NONBLOCK",
1678     "IO::AIO::SPLICE_F_MORE" and "IO::AIO::SPLICE_F_GIFT".
1679    
1680     See the splice(2) manpage for details.
1681    
1682     IO::AIO::tee $r_fh, $w_fh, $length, $flags
1683     Calls the GNU/Linux tee(2) syscall, see it's manpage and the
1684     description for "IO::AIO::splice" above for details.
1685    
1686 root 1.55 $actual_size = IO::AIO::pipesize $r_fh[, $new_size]
1687     Attempts to query or change the pipe buffer size. Obviously works
1688     only on pipes, and currently works only on GNU/Linux systems, and
1689     fails with -1/"ENOSYS" everywhere else. If anybody knows how to
1690     influence pipe buffer size on other systems, drop me a note.
1691    
1692 root 1.43 EVENT LOOP INTEGRATION
1693     It is recommended to use AnyEvent::AIO to integrate IO::AIO
1694     automatically into many event loops:
1695    
1696     # AnyEvent integration (EV, Event, Glib, Tk, POE, urxvt, pureperl...)
1697     use AnyEvent::AIO;
1698    
1699     You can also integrate IO::AIO manually into many event loops, here are
1700     some examples of how to do this:
1701    
1702     # EV integration
1703     my $aio_w = EV::io IO::AIO::poll_fileno, EV::READ, \&IO::AIO::poll_cb;
1704    
1705     # Event integration
1706     Event->io (fd => IO::AIO::poll_fileno,
1707     poll => 'r',
1708     cb => \&IO::AIO::poll_cb);
1709    
1710     # Glib/Gtk2 integration
1711     add_watch Glib::IO IO::AIO::poll_fileno,
1712     in => sub { IO::AIO::poll_cb; 1 };
1713    
1714     # Tk integration
1715     Tk::Event::IO->fileevent (IO::AIO::poll_fileno, "",
1716     readable => \&IO::AIO::poll_cb);
1717    
1718     # Danga::Socket integration
1719     Danga::Socket->AddOtherFds (IO::AIO::poll_fileno =>
1720     \&IO::AIO::poll_cb);
1721    
1722 root 1.9 FORK BEHAVIOUR
1723 root 1.48 Usage of pthreads in a program changes the semantics of fork
1724     considerably. Specifically, only async-safe functions can be called
1725     after fork. Perl doesn't know about this, so in general, you cannot call
1726 root 1.49 fork with defined behaviour in perl if pthreads are involved. IO::AIO
1727     uses pthreads, so this applies, but many other extensions and (for
1728     inexplicable reasons) perl itself often is linked against pthreads, so
1729     this limitation applies to quite a lot of perls.
1730    
1731     This module no longer tries to fight your OS, or POSIX. That means
1732     IO::AIO only works in the process that loaded it. Forking is fully
1733     supported, but using IO::AIO in the child is not.
1734    
1735     You might get around by not *using* IO::AIO before (or after) forking.
1736     You could also try to call the IO::AIO::reinit function in the child:
1737    
1738     IO::AIO::reinit
1739 root 1.50 Abandons all current requests and I/O threads and simply
1740 root 1.49 reinitialises all data structures. This is not an operation
1741 root 1.50 supported by any standards, but happens to work on GNU/Linux and
1742 root 1.49 some newer BSD systems.
1743    
1744     The only reasonable use for this function is to call it after
1745     forking, if "IO::AIO" was used in the parent. Calling it while
1746     IO::AIO is active in the process will result in undefined behaviour.
1747     Calling it at any time will also result in any undefined (by POSIX)
1748     behaviour.
1749 root 1.18
1750     MEMORY USAGE
1751 root 1.20 Per-request usage:
1752 root 1.18
1753 root 1.20 Each aio request uses - depending on your architecture - around 100-200
1754     bytes of memory. In addition, stat requests need a stat buffer (possibly
1755     a few hundred bytes), readdir requires a result buffer and so on. Perl
1756     scalars and other data passed into aio requests will also be locked and
1757     will consume memory till the request has entered the done state.
1758    
1759 root 1.25 This is not awfully much, so queuing lots of requests is not usually a
1760 root 1.20 problem.
1761    
1762     Per-thread usage:
1763    
1764     In the execution phase, some aio requests require more memory for
1765     temporary buffers, and each thread requires a stack and other data
1766     structures (usually around 16k-128k, depending on the OS).
1767 root 1.18
1768     KNOWN BUGS
1769 root 1.20 Known bugs will be fixed in the next release.
1770 root 1.9
1771 root 1.1 SEE ALSO
1772 root 1.30 AnyEvent::AIO for easy integration into event loops, Coro::AIO for a
1773     more natural syntax.
1774 root 1.1
1775     AUTHOR
1776 root 1.20 Marc Lehmann <schmorp@schmorp.de>
1777     http://home.schmorp.de/
1778 root 1.1