ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/cvsroot/IO-AIO/README
Revision: 1.57
Committed: Mon Jan 18 11:53:09 2016 UTC (10 years, 9 months ago) by root
Branch: MAIN
CVS Tags: rel-4_33
Changes since 1.56: +41 -11 lines
Log Message:
4.33

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