ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/IO-AIO/AIO.pm
Revision: 1.208
Committed: Mon Sep 26 20:19:08 2011 UTC (12 years, 7 months ago) by root
Branch: MAIN
Changes since 1.207: +3 -1 lines
Log Message:
preliminary wd support

File Contents

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