| 1 |
=head1 NAME |
| 2 |
|
| 3 |
IO::AIO - Asynchronous/Advanced Input/Output |
| 4 |
|
| 5 |
=head1 SYNOPSIS |
| 6 |
|
| 7 |
use IO::AIO; |
| 8 |
|
| 9 |
aio_open "/etc/passwd", IO::AIO::O_RDONLY, 0, sub { |
| 10 |
my $fh = shift |
| 11 |
or die "/etc/passwd: $!"; |
| 12 |
... |
| 13 |
}; |
| 14 |
|
| 15 |
aio_unlink "/tmp/file", sub { }; |
| 16 |
|
| 17 |
aio_read $fh, 30000, 1024, $buffer, 0, sub { |
| 18 |
$_[0] > 0 or die "read error: $!"; |
| 19 |
}; |
| 20 |
|
| 21 |
# version 2+ has request and group objects |
| 22 |
use IO::AIO 2; |
| 23 |
|
| 24 |
aioreq_pri 4; # give next request a very high priority |
| 25 |
my $req = aio_unlink "/tmp/file", sub { }; |
| 26 |
$req->cancel; # cancel request if still in queue |
| 27 |
|
| 28 |
my $grp = aio_group sub { print "all stats done\n" }; |
| 29 |
add $grp aio_stat "..." for ...; |
| 30 |
|
| 31 |
=head1 DESCRIPTION |
| 32 |
|
| 33 |
This module implements asynchronous I/O using whatever means your |
| 34 |
operating system supports. It is implemented as an interface to C<libeio> |
| 35 |
(L<http://software.schmorp.de/pkg/libeio.html>). |
| 36 |
|
| 37 |
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 |
While most of this works on all types of file descriptors (for |
| 48 |
example sockets), using these functions on file descriptors that |
| 49 |
support nonblocking operation (again, sockets, pipes etc.) is |
| 50 |
very inefficient. Use an event loop for that (such as the L<EV> |
| 51 |
module): IO::AIO will naturally fit into such an event loop itself. |
| 52 |
|
| 53 |
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 |
not well-supported or restricted (GNU/Linux doesn't allow them on normal |
| 59 |
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 |
In addition to asynchronous I/O, this module also exports some rather |
| 64 |
arcane interfaces, such as C<madvise> or linux's C<splice> system call, |
| 65 |
which is why the C<A> in C<AIO> can also mean I<advanced>. |
| 66 |
|
| 67 |
Although the module will work in the presence of other (Perl-) threads, |
| 68 |
it is currently not reentrant in any way, so use appropriate locking |
| 69 |
yourself, always call C<poll_cb> from within the same thread, or never |
| 70 |
call C<poll_cb> (or other C<aio_> functions) recursively. |
| 71 |
|
| 72 |
=head2 EXAMPLE |
| 73 |
|
| 74 |
This is a simple example that uses the EV module and loads |
| 75 |
F</etc/passwd> asynchronously: |
| 76 |
|
| 77 |
use EV; |
| 78 |
use IO::AIO; |
| 79 |
|
| 80 |
# register the IO::AIO callback with EV |
| 81 |
my $aio_w = EV::io IO::AIO::poll_fileno, EV::READ, \&IO::AIO::poll_cb; |
| 82 |
|
| 83 |
# queue the request to open /etc/passwd |
| 84 |
aio_open "/etc/passwd", IO::AIO::O_RDONLY, 0, sub { |
| 85 |
my $fh = shift |
| 86 |
or die "error while opening: $!"; |
| 87 |
|
| 88 |
# stat'ing filehandles is generally non-blocking |
| 89 |
my $size = -s $fh; |
| 90 |
|
| 91 |
# queue a request to read the file |
| 92 |
my $contents; |
| 93 |
aio_read $fh, 0, $size, $contents, 0, sub { |
| 94 |
$_[0] == $size |
| 95 |
or die "short read: $!"; |
| 96 |
|
| 97 |
close $fh; |
| 98 |
|
| 99 |
# file contents now in $contents |
| 100 |
print $contents; |
| 101 |
|
| 102 |
# exit event loop and program |
| 103 |
EV::break; |
| 104 |
}; |
| 105 |
}; |
| 106 |
|
| 107 |
# possibly queue up other requests, or open GUI windows, |
| 108 |
# check for sockets etc. etc. |
| 109 |
|
| 110 |
# process events as long as there are some: |
| 111 |
EV::run; |
| 112 |
|
| 113 |
=head1 REQUEST ANATOMY AND LIFETIME |
| 114 |
|
| 115 |
Every C<aio_*> function creates a request. which is a C data structure not |
| 116 |
directly visible to Perl. |
| 117 |
|
| 118 |
If called in non-void context, every request function returns a Perl |
| 119 |
object representing the request. In void context, nothing is returned, |
| 120 |
which saves a bit of memory. |
| 121 |
|
| 122 |
The perl object is a fairly standard ref-to-hash object. The hash contents |
| 123 |
are not used by IO::AIO so you are free to store anything you like in it. |
| 124 |
|
| 125 |
During their existance, aio requests travel through the following states, |
| 126 |
in order: |
| 127 |
|
| 128 |
=over 4 |
| 129 |
|
| 130 |
=item ready |
| 131 |
|
| 132 |
Immediately after a request is created it is put into the ready state, |
| 133 |
waiting for a thread to execute it. |
| 134 |
|
| 135 |
=item execute |
| 136 |
|
| 137 |
A thread has accepted the request for processing and is currently |
| 138 |
executing it (e.g. blocking in read). |
| 139 |
|
| 140 |
=item pending |
| 141 |
|
| 142 |
The request has been executed and is waiting for result processing. |
| 143 |
|
| 144 |
While request submission and execution is fully asynchronous, result |
| 145 |
processing is not and relies on the perl interpreter calling C<poll_cb> |
| 146 |
(or another function with the same effect). |
| 147 |
|
| 148 |
=item result |
| 149 |
|
| 150 |
The request results are processed synchronously by C<poll_cb>. |
| 151 |
|
| 152 |
The C<poll_cb> function will process all outstanding aio requests by |
| 153 |
calling their callbacks, freeing memory associated with them and managing |
| 154 |
any groups they are contained in. |
| 155 |
|
| 156 |
=item done |
| 157 |
|
| 158 |
Request has reached the end of its lifetime and holds no resources anymore |
| 159 |
(except possibly for the Perl object, but its connection to the actual |
| 160 |
aio request is severed and calling its methods will either do nothing or |
| 161 |
result in a runtime error). |
| 162 |
|
| 163 |
=back |
| 164 |
|
| 165 |
=cut |
| 166 |
|
| 167 |
package IO::AIO; |
| 168 |
|
| 169 |
use Carp (); |
| 170 |
|
| 171 |
use common::sense; |
| 172 |
|
| 173 |
use base 'Exporter'; |
| 174 |
|
| 175 |
BEGIN { |
| 176 |
our $VERSION = 4.81; |
| 177 |
|
| 178 |
our @AIO_REQ = qw(aio_sendfile aio_seek aio_read aio_write aio_open aio_close |
| 179 |
aio_stat aio_lstat aio_unlink aio_rmdir aio_readdir aio_readdirx |
| 180 |
aio_scandir aio_symlink aio_readlink aio_realpath aio_fcntl aio_ioctl |
| 181 |
aio_sync aio_fsync aio_syncfs aio_fdatasync aio_sync_file_range |
| 182 |
aio_pathsync aio_readahead aio_fiemap aio_allocate |
| 183 |
aio_rename aio_rename2 aio_link aio_move aio_copy aio_group |
| 184 |
aio_nop aio_mknod aio_load aio_rmtree aio_mkdir aio_chown |
| 185 |
aio_chmod aio_utime aio_truncate |
| 186 |
aio_msync aio_mtouch aio_mlock aio_mlockall |
| 187 |
aio_statvfs |
| 188 |
aio_slurp |
| 189 |
aio_wd); |
| 190 |
|
| 191 |
our @EXPORT = (@AIO_REQ, qw(aioreq_pri aioreq_nice)); |
| 192 |
our @EXPORT_OK = qw(poll_fileno poll_cb poll_wait flush |
| 193 |
min_parallel max_parallel max_idle idle_timeout |
| 194 |
nreqs nready npending nthreads |
| 195 |
max_poll_time max_poll_reqs |
| 196 |
sendfile fadvise madvise |
| 197 |
mmap munmap mremap munlock munlockall |
| 198 |
|
| 199 |
accept4 tee splice pipe2 pipesize |
| 200 |
fexecve mount umount memfd_create eventfd |
| 201 |
timerfd_create timerfd_settime timerfd_gettime |
| 202 |
pidfd_open pidfd_send_signal pidfd_getfd); |
| 203 |
|
| 204 |
push @AIO_REQ, qw(aio_busy); # not exported |
| 205 |
|
| 206 |
@IO::AIO::GRP::ISA = 'IO::AIO::REQ'; |
| 207 |
|
| 208 |
require XSLoader; |
| 209 |
XSLoader::load ("IO::AIO", $VERSION); |
| 210 |
} |
| 211 |
|
| 212 |
=head1 FUNCTIONS |
| 213 |
|
| 214 |
=head2 QUICK OVERVIEW |
| 215 |
|
| 216 |
This section simply lists the prototypes most of the functions for |
| 217 |
quick reference. See the following sections for function-by-function |
| 218 |
documentation. |
| 219 |
|
| 220 |
aio_wd $pathname, $callback->($wd) |
| 221 |
aio_open $pathname, $flags, $mode, $callback->($fh) |
| 222 |
aio_close $fh, $callback->($status) |
| 223 |
aio_seek $fh,$offset,$whence, $callback->($offs) |
| 224 |
aio_read $fh,$offset,$length, $data,$dataoffset, $callback->($retval) |
| 225 |
aio_write $fh,$offset,$length, $data,$dataoffset, $callback->($retval) |
| 226 |
aio_sendfile $out_fh, $in_fh, $in_offset, $length, $callback->($retval) |
| 227 |
aio_readahead $fh,$offset,$length, $callback->($retval) |
| 228 |
aio_stat $fh_or_path, $callback->($status) |
| 229 |
aio_lstat $fh, $callback->($status) |
| 230 |
aio_statvfs $fh_or_path, $callback->($statvfs) |
| 231 |
aio_utime $fh_or_path, $atime, $mtime, $callback->($status) |
| 232 |
aio_chown $fh_or_path, $uid, $gid, $callback->($status) |
| 233 |
aio_chmod $fh_or_path, $mode, $callback->($status) |
| 234 |
aio_truncate $fh_or_path, $offset, $callback->($status) |
| 235 |
aio_allocate $fh, $mode, $offset, $len, $callback->($status) |
| 236 |
aio_fiemap $fh, $start, $length, $flags, $count, $cb->(\@extents) |
| 237 |
aio_unlink $pathname, $callback->($status) |
| 238 |
aio_mknod $pathname, $mode, $dev, $callback->($status) |
| 239 |
aio_link $srcpath, $dstpath, $callback->($status) |
| 240 |
aio_symlink $srcpath, $dstpath, $callback->($status) |
| 241 |
aio_readlink $pathname, $callback->($link) |
| 242 |
aio_realpath $pathname, $callback->($path) |
| 243 |
aio_rename $srcpath, $dstpath, $callback->($status) |
| 244 |
aio_rename2 $srcpath, $dstpath, $flags, $callback->($status) |
| 245 |
aio_mkdir $pathname, $mode, $callback->($status) |
| 246 |
aio_rmdir $pathname, $callback->($status) |
| 247 |
aio_readdir $pathname, $callback->($entries) |
| 248 |
aio_readdirx $pathname, $flags, $callback->($entries, $flags) |
| 249 |
IO::AIO::READDIR_DENTS IO::AIO::READDIR_DIRS_FIRST |
| 250 |
IO::AIO::READDIR_STAT_ORDER IO::AIO::READDIR_FOUND_UNKNOWN |
| 251 |
aio_scandir $pathname, $maxreq, $callback->($dirs, $nondirs) |
| 252 |
aio_load $pathname, $data, $callback->($status) |
| 253 |
aio_copy $srcpath, $dstpath, $callback->($status) |
| 254 |
aio_move $srcpath, $dstpath, $callback->($status) |
| 255 |
aio_rmtree $pathname, $callback->($status) |
| 256 |
aio_fcntl $fh, $cmd, $arg, $callback->($status) |
| 257 |
aio_ioctl $fh, $request, $buf, $callback->($status) |
| 258 |
aio_sync $callback->($status) |
| 259 |
aio_syncfs $fh, $callback->($status) |
| 260 |
aio_fsync $fh, $callback->($status) |
| 261 |
aio_fdatasync $fh, $callback->($status) |
| 262 |
aio_sync_file_range $fh, $offset, $nbytes, $flags, $callback->($status) |
| 263 |
aio_pathsync $pathname, $callback->($status) |
| 264 |
aio_msync $scalar, $offset = 0, $length = undef, flags = MS_SYNC, $callback->($status) |
| 265 |
aio_mtouch $scalar, $offset = 0, $length = undef, flags = 0, $callback->($status) |
| 266 |
aio_mlock $scalar, $offset = 0, $length = undef, $callback->($status) |
| 267 |
aio_mlockall $flags, $callback->($status) |
| 268 |
aio_group $callback->(...) |
| 269 |
aio_nop $callback->() |
| 270 |
|
| 271 |
$prev_pri = aioreq_pri [$pri] |
| 272 |
aioreq_nice $pri_adjust |
| 273 |
|
| 274 |
IO::AIO::poll_wait |
| 275 |
IO::AIO::poll_cb |
| 276 |
IO::AIO::poll |
| 277 |
IO::AIO::flush |
| 278 |
IO::AIO::max_poll_reqs $nreqs |
| 279 |
IO::AIO::max_poll_time $seconds |
| 280 |
IO::AIO::min_parallel $nthreads |
| 281 |
IO::AIO::max_parallel $nthreads |
| 282 |
IO::AIO::max_idle $nthreads |
| 283 |
IO::AIO::idle_timeout $seconds |
| 284 |
IO::AIO::max_outstanding $maxreqs |
| 285 |
IO::AIO::nreqs |
| 286 |
IO::AIO::nready |
| 287 |
IO::AIO::npending |
| 288 |
IO::AIO::reinit |
| 289 |
|
| 290 |
$nfd = IO::AIO::get_fdlimit |
| 291 |
IO::AIO::min_fdlimit $nfd |
| 292 |
|
| 293 |
IO::AIO::sendfile $ofh, $ifh, $offset, $count |
| 294 |
IO::AIO::fadvise $fh, $offset, $len, $advice |
| 295 |
IO::AIO::fexecve $fh, $argv, $envp |
| 296 |
|
| 297 |
IO::AIO::mmap $scalar, $length, $prot, $flags[, $fh[, $offset]] |
| 298 |
IO::AIO::munmap $scalar |
| 299 |
IO::AIO::mremap $scalar, $new_length, $flags[, $new_address] |
| 300 |
IO::AIO::madvise $scalar, $offset, $length, $advice |
| 301 |
IO::AIO::mprotect $scalar, $offset, $length, $protect |
| 302 |
IO::AIO::munlock $scalar, $offset = 0, $length = undef |
| 303 |
IO::AIO::munlockall |
| 304 |
|
| 305 |
# stat extensions |
| 306 |
$counter = IO::AIO::st_gen |
| 307 |
$seconds = IO::AIO::st_atime, IO::AIO::st_mtime, IO::AIO::st_ctime, IO::AIO::st_btime |
| 308 |
($atime, $mtime, $ctime, $btime, ...) = IO::AIO::st_xtime |
| 309 |
$nanoseconds = IO::AIO::st_atimensec, IO::AIO::st_mtimensec, IO::AIO::st_ctimensec, IO::AIO::st_btimensec |
| 310 |
$seconds = IO::AIO::st_btimesec |
| 311 |
($atime, $mtime, $ctime, $btime, ...) = IO::AIO::st_xtimensec |
| 312 |
|
| 313 |
# very much unportable syscalls |
| 314 |
IO::AIO::accept4 $r_fh, $sockaddr, $sockaddr_len, $flags |
| 315 |
IO::AIO::splice $r_fh, $r_off, $w_fh, $w_off, $length, $flags |
| 316 |
IO::AIO::tee $r_fh, $w_fh, $length, $flags |
| 317 |
|
| 318 |
$actual_size = IO::AIO::pipesize $r_fh[, $new_size] |
| 319 |
($rfh, $wfh) = IO::AIO::pipe2 [$flags] |
| 320 |
|
| 321 |
$fh = IO::AIO::eventfd [$initval, [$flags]] |
| 322 |
$fh = IO::AIO::memfd_create $pathname[, $flags] |
| 323 |
|
| 324 |
$fh = IO::AIO::timerfd_create $clockid[, $flags] |
| 325 |
($cur_interval, $cur_value) = IO::AIO::timerfd_settime $fh, $flags, $new_interval, $nbw_value |
| 326 |
($cur_interval, $cur_value) = IO::AIO::timerfd_gettime $fh |
| 327 |
|
| 328 |
$fh = IO::AIO::pidfd_open $pid[, $flags] |
| 329 |
$status = IO::AIO::pidfd_send_signal $pidfh, $signal[, $siginfo[, $flags]] |
| 330 |
$fh = IO::AIO::pidfd_getfd $pidfh, $targetfd[, $flags] |
| 331 |
|
| 332 |
$retval = IO::AIO::mount $special, $path, $fstype, $flags = 0, $data = undef |
| 333 |
$retval = IO::AIO::umount $path, $flags = 0 |
| 334 |
|
| 335 |
=head2 API NOTES |
| 336 |
|
| 337 |
All the C<aio_*> calls are more or less thin wrappers around the syscall |
| 338 |
with the same name (sans C<aio_>). The arguments are similar or identical, |
| 339 |
and they all accept an additional (and optional) C<$callback> argument |
| 340 |
which must be a code reference. This code reference will be called after |
| 341 |
the syscall has been executed in an asynchronous fashion. The results |
| 342 |
of the request will be passed as arguments to the callback (and, if an |
| 343 |
error occured, in C<$!>) - for most requests the syscall return code (e.g. |
| 344 |
most syscalls return C<-1> on error, unlike perl, which usually delivers |
| 345 |
"false"). |
| 346 |
|
| 347 |
Some requests (such as C<aio_readdir>) pass the actual results and |
| 348 |
communicate failures by passing C<undef>. |
| 349 |
|
| 350 |
All functions expecting a filehandle keep a copy of the filehandle |
| 351 |
internally until the request has finished. |
| 352 |
|
| 353 |
All functions return request objects of type L<IO::AIO::REQ> that allow |
| 354 |
further manipulation of those requests while they are in-flight. |
| 355 |
|
| 356 |
The pathnames you pass to these routines I<should> be absolute. The |
| 357 |
reason for this is that at the time the request is being executed, the |
| 358 |
current working directory could have changed. Alternatively, you can |
| 359 |
make sure that you never change the current working directory anywhere |
| 360 |
in the program and then use relative paths. You can also take advantage |
| 361 |
of IO::AIOs working directory abstraction, that lets you specify paths |
| 362 |
relative to some previously-opened "working directory object" - see the |
| 363 |
description of the C<IO::AIO::WD> class later in this document. |
| 364 |
|
| 365 |
To encode pathnames as octets, either make sure you either: a) always pass |
| 366 |
in filenames you got from outside (command line, readdir etc.) without |
| 367 |
tinkering, b) are in your native filesystem encoding, c) use the Encode |
| 368 |
module and encode your pathnames to the locale (or other) encoding in |
| 369 |
effect in the user environment, d) use Glib::filename_from_unicode on |
| 370 |
unicode filenames or e) use something else to ensure your scalar has the |
| 371 |
correct contents. |
| 372 |
|
| 373 |
This works, btw. independent of the internal UTF-8 bit, which IO::AIO |
| 374 |
handles correctly whether it is set or not. |
| 375 |
|
| 376 |
=head2 AIO REQUEST FUNCTIONS |
| 377 |
|
| 378 |
=over 4 |
| 379 |
|
| 380 |
=item $prev_pri = aioreq_pri [$pri] |
| 381 |
|
| 382 |
Returns the priority value that would be used for the next request and, if |
| 383 |
C<$pri> is given, sets the priority for the next aio request. |
| 384 |
|
| 385 |
The default priority is C<0>, the minimum and maximum priorities are C<-4> |
| 386 |
and C<4>, respectively. Requests with higher priority will be serviced |
| 387 |
first. |
| 388 |
|
| 389 |
The priority will be reset to C<0> after each call to one of the C<aio_*> |
| 390 |
functions. |
| 391 |
|
| 392 |
Example: open a file with low priority, then read something from it with |
| 393 |
higher priority so the read request is serviced before other low priority |
| 394 |
open requests (potentially spamming the cache): |
| 395 |
|
| 396 |
aioreq_pri -3; |
| 397 |
aio_open ..., sub { |
| 398 |
return unless $_[0]; |
| 399 |
|
| 400 |
aioreq_pri -2; |
| 401 |
aio_read $_[0], ..., sub { |
| 402 |
... |
| 403 |
}; |
| 404 |
}; |
| 405 |
|
| 406 |
|
| 407 |
=item aioreq_nice $pri_adjust |
| 408 |
|
| 409 |
Similar to C<aioreq_pri>, but subtracts the given value from the current |
| 410 |
priority, so the effect is cumulative. |
| 411 |
|
| 412 |
|
| 413 |
=item aio_open $pathname, $flags, $mode, $callback->($fh) |
| 414 |
|
| 415 |
Asynchronously open or create a file and call the callback with a newly |
| 416 |
created filehandle for the file (or C<undef> in case of an error). |
| 417 |
|
| 418 |
The C<$flags> argument is a bitmask. See the C<Fcntl> module for a |
| 419 |
list. They are the same as used by C<sysopen>. |
| 420 |
|
| 421 |
Likewise, C<$mode> specifies the mode of the newly created file, if it |
| 422 |
didn't exist and C<O_CREAT> has been given, just like perl's C<sysopen>, |
| 423 |
except that it is mandatory (i.e. use C<0> if you don't create new files, |
| 424 |
and C<0666> or C<0777> if you do). Note that the C<$mode> will be modified |
| 425 |
by the umask in effect then the request is being executed, so better never |
| 426 |
change the umask. |
| 427 |
|
| 428 |
Example: |
| 429 |
|
| 430 |
aio_open "/etc/passwd", IO::AIO::O_RDONLY, 0, sub { |
| 431 |
if ($_[0]) { |
| 432 |
print "open successful, fh is $_[0]\n"; |
| 433 |
... |
| 434 |
} else { |
| 435 |
die "open failed: $!\n"; |
| 436 |
} |
| 437 |
}; |
| 438 |
|
| 439 |
In addition to all the common open modes/flags (C<O_RDONLY>, C<O_WRONLY>, |
| 440 |
C<O_RDWR>, C<O_CREAT>, C<O_TRUNC>, C<O_EXCL> and C<O_APPEND>), the |
| 441 |
following POSIX and non-POSIX constants are available (missing ones on |
| 442 |
your system are, as usual, C<0>): |
| 443 |
|
| 444 |
C<O_ASYNC>, C<O_DIRECT>, C<O_NOATIME>, C<O_CLOEXEC>, C<O_NOCTTY>, C<O_NOFOLLOW>, |
| 445 |
C<O_NONBLOCK>, C<O_EXEC>, C<O_SEARCH>, C<O_DIRECTORY>, C<O_DSYNC>, |
| 446 |
C<O_RSYNC>, C<O_SYNC>, C<O_PATH>, C<O_TMPFILE>, C<O_TTY_INIT> and C<O_ACCMODE>. |
| 447 |
|
| 448 |
|
| 449 |
=item aio_close $fh, $callback->($status) |
| 450 |
|
| 451 |
Asynchronously close a file and call the callback with the result |
| 452 |
code. |
| 453 |
|
| 454 |
Unfortunately, you can't do this to perl. Perl I<insists> very strongly on |
| 455 |
closing the file descriptor associated with the filehandle itself. |
| 456 |
|
| 457 |
Therefore, C<aio_close> will not close the filehandle - instead it will |
| 458 |
use dup2 to overwrite the file descriptor with the write-end of a pipe |
| 459 |
(the pipe fd will be created on demand and will be cached). |
| 460 |
|
| 461 |
Or in other words: the file descriptor will be closed, but it will not be |
| 462 |
free for reuse until the perl filehandle is closed. |
| 463 |
|
| 464 |
=cut |
| 465 |
|
| 466 |
=item aio_seek $fh, $offset, $whence, $callback->($offs) |
| 467 |
|
| 468 |
Seeks the filehandle to the new C<$offset>, similarly to perl's |
| 469 |
C<sysseek>. The C<$whence> can use the traditional values (C<0> for |
| 470 |
C<IO::AIO::SEEK_SET>, C<1> for C<IO::AIO::SEEK_CUR> or C<2> for |
| 471 |
C<IO::AIO::SEEK_END>). |
| 472 |
|
| 473 |
The resulting absolute offset will be passed to the callback, or C<-1> in |
| 474 |
case of an error. |
| 475 |
|
| 476 |
In theory, the C<$whence> constants could be different than the |
| 477 |
corresponding values from L<Fcntl>, but perl guarantees they are the same, |
| 478 |
so don't panic. |
| 479 |
|
| 480 |
As a GNU/Linux (and maybe Solaris) extension, also the constants |
| 481 |
C<IO::AIO::SEEK_DATA> and C<IO::AIO::SEEK_HOLE> are available, if they |
| 482 |
could be found. No guarantees about suitability for use in C<aio_seek> or |
| 483 |
Perl's C<sysseek> can be made though, although I would naively assume they |
| 484 |
"just work". |
| 485 |
|
| 486 |
=item aio_read $fh,$offset,$length, $data,$dataoffset, $callback->($retval) |
| 487 |
|
| 488 |
=item aio_write $fh,$offset,$length, $data,$dataoffset, $callback->($retval) |
| 489 |
|
| 490 |
Reads or writes C<$length> bytes from or to the specified C<$fh> and |
| 491 |
C<$offset> into the scalar given by C<$data> and offset C<$dataoffset> and |
| 492 |
calls the callback with the actual number of bytes transferred (or -1 on |
| 493 |
error, just like the syscall). |
| 494 |
|
| 495 |
C<aio_read> will, like C<sysread>, shrink or grow the C<$data> scalar to |
| 496 |
offset plus the actual number of bytes read. |
| 497 |
|
| 498 |
If C<$offset> is undefined, then the current file descriptor offset will |
| 499 |
be used (and updated), otherwise the file descriptor offset will not be |
| 500 |
changed by these calls. |
| 501 |
|
| 502 |
If C<$length> is undefined in C<aio_write>, use the remaining length of |
| 503 |
C<$data>. |
| 504 |
|
| 505 |
If C<$dataoffset> is less than zero, it will be counted from the end of |
| 506 |
C<$data>. |
| 507 |
|
| 508 |
The C<$data> scalar I<MUST NOT> be modified in any way while the request |
| 509 |
is outstanding. Modifying it can result in segfaults or World War III (if |
| 510 |
the necessary/optional hardware is installed). |
| 511 |
|
| 512 |
Example: Read 15 bytes at offset 7 into scalar C<$buffer>, starting at |
| 513 |
offset C<0> within the scalar: |
| 514 |
|
| 515 |
aio_read $fh, 7, 15, $buffer, 0, sub { |
| 516 |
$_[0] > 0 or die "read error: $!"; |
| 517 |
print "read $_[0] bytes: <$buffer>\n"; |
| 518 |
}; |
| 519 |
|
| 520 |
|
| 521 |
=item aio_sendfile $out_fh, $in_fh, $in_offset, $length, $callback->($retval) |
| 522 |
|
| 523 |
Tries to copy C<$length> bytes from C<$in_fh> to C<$out_fh>. It starts |
| 524 |
reading at byte offset C<$in_offset>, and starts writing at the current |
| 525 |
file offset of C<$out_fh>. Because of that, it is not safe to issue more |
| 526 |
than one C<aio_sendfile> per C<$out_fh>, as they will interfere with each |
| 527 |
other. The same C<$in_fh> works fine though, as this function does not |
| 528 |
move or use the file offset of C<$in_fh>. |
| 529 |
|
| 530 |
Please note that C<aio_sendfile> can read more bytes from C<$in_fh> than |
| 531 |
are written, and there is no way to find out how many more bytes have been |
| 532 |
read from C<aio_sendfile> alone, as C<aio_sendfile> only provides the |
| 533 |
number of bytes written to C<$out_fh>. Only if the result value equals |
| 534 |
C<$length> one can assume that C<$length> bytes have been read. |
| 535 |
|
| 536 |
Unlike with other C<aio_> functions, it makes a lot of sense to use |
| 537 |
C<aio_sendfile> on non-blocking sockets, as long as one end (typically |
| 538 |
the C<$in_fh>) is a file - the file I/O will then be asynchronous, while |
| 539 |
the socket I/O will be non-blocking. Note, however, that you can run |
| 540 |
into a trap where C<aio_sendfile> reads some data with readahead, then |
| 541 |
fails to write all data, and when the socket is ready the next time, the |
| 542 |
data in the cache is already lost, forcing C<aio_sendfile> to again hit |
| 543 |
the disk. Explicit C<aio_read> + C<aio_write> let's you better control |
| 544 |
resource usage. |
| 545 |
|
| 546 |
This call tries to make use of a native C<sendfile>-like syscall to |
| 547 |
provide zero-copy operation. For this to work, C<$out_fh> should refer to |
| 548 |
a socket, and C<$in_fh> should refer to an mmap'able file. |
| 549 |
|
| 550 |
If a native sendfile cannot be found or it fails with C<ENOSYS>, |
| 551 |
C<EINVAL>, C<ENOTSUP>, C<EOPNOTSUPP>, C<EAFNOSUPPORT>, C<EPROTOTYPE> or |
| 552 |
C<ENOTSOCK>, it will be emulated, so you can call C<aio_sendfile> on any |
| 553 |
type of filehandle regardless of the limitations of the operating system. |
| 554 |
|
| 555 |
As native sendfile syscalls (as practically any non-POSIX interface hacked |
| 556 |
together in a hurry to improve benchmark numbers) tend to be rather buggy |
| 557 |
on many systems, this implementation tries to work around some known bugs |
| 558 |
in Linux and FreeBSD kernels (probably others, too), but that might fail, |
| 559 |
so you really really should check the return value of C<aio_sendfile> - |
| 560 |
fewer bytes than expected might have been transferred. |
| 561 |
|
| 562 |
|
| 563 |
=item aio_readahead $fh,$offset,$length, $callback->($retval) |
| 564 |
|
| 565 |
C<aio_readahead> populates the page cache with data from a file so that |
| 566 |
subsequent reads from that file will not block on disk I/O. The C<$offset> |
| 567 |
argument specifies the starting point from which data is to be read and |
| 568 |
C<$length> specifies the number of bytes to be read. I/O is performed in |
| 569 |
whole pages, so that offset is effectively rounded down to a page boundary |
| 570 |
and bytes are read up to the next page boundary greater than or equal to |
| 571 |
(off-set+length). C<aio_readahead> does not read beyond the end of the |
| 572 |
file. The current file offset of the file is left unchanged. |
| 573 |
|
| 574 |
If that syscall doesn't exist (likely if your kernel isn't Linux) it will |
| 575 |
be emulated by simply reading the data, which would have a similar effect. |
| 576 |
|
| 577 |
|
| 578 |
=item aio_stat $fh_or_path, $callback->($status) |
| 579 |
|
| 580 |
=item aio_lstat $fh, $callback->($status) |
| 581 |
|
| 582 |
Works almost exactly like perl's C<stat> or C<lstat> in void context. The |
| 583 |
callback will be called after the stat and the results will be available |
| 584 |
using C<stat _> or C<-s _> and other tests (with the exception of C<-B> |
| 585 |
and C<-T>). |
| 586 |
|
| 587 |
Currently, the stats are always 64-bit-stats, i.e. instead of returning an |
| 588 |
error when stat'ing a large file, the results will be silently truncated |
| 589 |
unless perl itself is compiled with large file support. |
| 590 |
|
| 591 |
To help interpret the mode and dev/rdev stat values, IO::AIO offers the |
| 592 |
following constants and functions (if not implemented, the constants will |
| 593 |
be C<0> and the functions will either C<croak> or fall back on traditional |
| 594 |
behaviour). |
| 595 |
|
| 596 |
C<S_IFMT>, C<S_IFIFO>, C<S_IFCHR>, C<S_IFBLK>, C<S_IFLNK>, C<S_IFREG>, |
| 597 |
C<S_IFDIR>, C<S_IFWHT>, C<S_IFSOCK>, C<IO::AIO::major $dev_t>, |
| 598 |
C<IO::AIO::minor $dev_t>, C<IO::AIO::makedev $major, $minor>. |
| 599 |
|
| 600 |
To access higher resolution stat timestamps, see L<SUBSECOND STAT TIME |
| 601 |
ACCESS>. |
| 602 |
|
| 603 |
Example: Print the length of F</etc/passwd>: |
| 604 |
|
| 605 |
aio_stat "/etc/passwd", sub { |
| 606 |
$_[0] and die "stat failed: $!"; |
| 607 |
print "size is ", -s _, "\n"; |
| 608 |
}; |
| 609 |
|
| 610 |
|
| 611 |
=item aio_statvfs $fh_or_path, $callback->($statvfs) |
| 612 |
|
| 613 |
Works like the POSIX C<statvfs> or C<fstatvfs> syscalls, depending on |
| 614 |
whether a file handle or path was passed. |
| 615 |
|
| 616 |
On success, the callback is passed a hash reference with the following |
| 617 |
members: C<bsize>, C<frsize>, C<blocks>, C<bfree>, C<bavail>, C<files>, |
| 618 |
C<ffree>, C<favail>, C<fsid>, C<flag> and C<namemax>. On failure, C<undef> |
| 619 |
is passed. |
| 620 |
|
| 621 |
The following POSIX IO::AIO::ST_* constants are defined: C<ST_RDONLY> and |
| 622 |
C<ST_NOSUID>. |
| 623 |
|
| 624 |
The following non-POSIX IO::AIO::ST_* flag masks are defined to |
| 625 |
their correct value when available, or to C<0> on systems that do |
| 626 |
not support them: C<ST_NODEV>, C<ST_NOEXEC>, C<ST_SYNCHRONOUS>, |
| 627 |
C<ST_MANDLOCK>, C<ST_WRITE>, C<ST_APPEND>, C<ST_IMMUTABLE>, C<ST_NOATIME>, |
| 628 |
C<ST_NODIRATIME> and C<ST_RELATIME>. |
| 629 |
|
| 630 |
Example: stat C</wd> and dump out the data if successful. |
| 631 |
|
| 632 |
aio_statvfs "/wd", sub { |
| 633 |
my $f = $_[0] |
| 634 |
or die "statvfs: $!"; |
| 635 |
|
| 636 |
use Data::Dumper; |
| 637 |
say Dumper $f; |
| 638 |
}; |
| 639 |
|
| 640 |
# result: |
| 641 |
{ |
| 642 |
bsize => 1024, |
| 643 |
bfree => 4333064312, |
| 644 |
blocks => 10253828096, |
| 645 |
files => 2050765568, |
| 646 |
flag => 4096, |
| 647 |
favail => 2042092649, |
| 648 |
bavail => 4333064312, |
| 649 |
ffree => 2042092649, |
| 650 |
namemax => 255, |
| 651 |
frsize => 1024, |
| 652 |
fsid => 1810 |
| 653 |
} |
| 654 |
|
| 655 |
=item aio_utime $fh_or_path, $atime, $mtime, $callback->($status) |
| 656 |
|
| 657 |
Works like perl's C<utime> function (including the special case of $atime |
| 658 |
and $mtime being undef). Fractional times are supported if the underlying |
| 659 |
syscalls support them. |
| 660 |
|
| 661 |
When called with a pathname, uses utimensat(2) or utimes(2) if available, |
| 662 |
otherwise utime(2). If called on a file descriptor, uses futimens(2) |
| 663 |
or futimes(2) if available, otherwise returns ENOSYS, so this is not |
| 664 |
portable. |
| 665 |
|
| 666 |
Examples: |
| 667 |
|
| 668 |
# set atime and mtime to current time (basically touch(1)): |
| 669 |
aio_utime "path", undef, undef; |
| 670 |
# set atime to current time and mtime to beginning of the epoch: |
| 671 |
aio_utime "path", time, undef; # undef==0 |
| 672 |
|
| 673 |
|
| 674 |
=item aio_chown $fh_or_path, $uid, $gid, $callback->($status) |
| 675 |
|
| 676 |
Works like perl's C<chown> function, except that C<undef> for either $uid |
| 677 |
or $gid is being interpreted as "do not change" (but -1 can also be used). |
| 678 |
|
| 679 |
Examples: |
| 680 |
|
| 681 |
# same as "chown root path" in the shell: |
| 682 |
aio_chown "path", 0, -1; |
| 683 |
# same as above: |
| 684 |
aio_chown "path", 0, undef; |
| 685 |
|
| 686 |
|
| 687 |
=item aio_truncate $fh_or_path, $offset, $callback->($status) |
| 688 |
|
| 689 |
Works like truncate(2) or ftruncate(2). |
| 690 |
|
| 691 |
|
| 692 |
=item aio_allocate $fh, $mode, $offset, $len, $callback->($status) |
| 693 |
|
| 694 |
Allocates or frees disk space according to the C<$mode> argument. See the |
| 695 |
linux C<fallocate> documentation for details. |
| 696 |
|
| 697 |
C<$mode> is usually C<0> or C<IO::AIO::FALLOC_FL_KEEP_SIZE> to allocate |
| 698 |
space, or C<IO::AIO::FALLOC_FL_PUNCH_HOLE | IO::AIO::FALLOC_FL_KEEP_SIZE>, |
| 699 |
to deallocate a file range. |
| 700 |
|
| 701 |
IO::AIO also supports C<FALLOC_FL_COLLAPSE_RANGE>, to remove a range |
| 702 |
(without leaving a hole), C<FALLOC_FL_ZERO_RANGE>, to zero a range, |
| 703 |
C<FALLOC_FL_INSERT_RANGE> to insert a range and C<FALLOC_FL_UNSHARE_RANGE> |
| 704 |
to unshare shared blocks (see your L<fallocate(2)> manpage). |
| 705 |
|
| 706 |
The file system block size used by C<fallocate> is presumably the |
| 707 |
C<f_bsize> returned by C<statvfs>, but different filesystems and filetypes |
| 708 |
can dictate other limitations. |
| 709 |
|
| 710 |
If C<fallocate> isn't available or cannot be emulated (currently no |
| 711 |
emulation will be attempted), passes C<-1> and sets C<$!> to C<ENOSYS>. |
| 712 |
|
| 713 |
|
| 714 |
=item aio_chmod $fh_or_path, $mode, $callback->($status) |
| 715 |
|
| 716 |
Works like perl's C<chmod> function. |
| 717 |
|
| 718 |
|
| 719 |
=item aio_unlink $pathname, $callback->($status) |
| 720 |
|
| 721 |
Asynchronously unlink (delete) a file and call the callback with the |
| 722 |
result code. |
| 723 |
|
| 724 |
|
| 725 |
=item aio_mknod $pathname, $mode, $dev, $callback->($status) |
| 726 |
|
| 727 |
[EXPERIMENTAL] |
| 728 |
|
| 729 |
Asynchronously create a device node (or fifo). See mknod(2). |
| 730 |
|
| 731 |
The only (POSIX-) portable way of calling this function is: |
| 732 |
|
| 733 |
aio_mknod $pathname, IO::AIO::S_IFIFO | $mode, 0, sub { ... |
| 734 |
|
| 735 |
See C<aio_stat> for info about some potentially helpful extra constants |
| 736 |
and functions. |
| 737 |
|
| 738 |
=item aio_link $srcpath, $dstpath, $callback->($status) |
| 739 |
|
| 740 |
Asynchronously create a new link to the existing object at C<$srcpath> at |
| 741 |
the path C<$dstpath> and call the callback with the result code. |
| 742 |
|
| 743 |
|
| 744 |
=item aio_symlink $srcpath, $dstpath, $callback->($status) |
| 745 |
|
| 746 |
Asynchronously create a new symbolic link to the existing object at C<$srcpath> at |
| 747 |
the path C<$dstpath> and call the callback with the result code. |
| 748 |
|
| 749 |
|
| 750 |
=item aio_readlink $pathname, $callback->($link) |
| 751 |
|
| 752 |
Asynchronously read the symlink specified by C<$path> and pass it to |
| 753 |
the callback. If an error occurs, nothing or undef gets passed to the |
| 754 |
callback. |
| 755 |
|
| 756 |
|
| 757 |
=item aio_realpath $pathname, $callback->($path) |
| 758 |
|
| 759 |
Asynchronously make the path absolute and resolve any symlinks in |
| 760 |
C<$path>. The resulting path only consists of directories (same as |
| 761 |
L<Cwd::realpath>). |
| 762 |
|
| 763 |
This request can be used to get the absolute path of the current working |
| 764 |
directory by passing it a path of F<.> (a single dot). |
| 765 |
|
| 766 |
|
| 767 |
=item aio_rename $srcpath, $dstpath, $callback->($status) |
| 768 |
|
| 769 |
Asynchronously rename the object at C<$srcpath> to C<$dstpath>, just as |
| 770 |
rename(2) and call the callback with the result code. |
| 771 |
|
| 772 |
On systems that support the AIO::WD working directory abstraction |
| 773 |
natively, the case C<[$wd, "."]> as C<$srcpath> is specialcased - instead |
| 774 |
of failing, C<rename> is called on the absolute path of C<$wd>. |
| 775 |
|
| 776 |
|
| 777 |
=item aio_rename2 $srcpath, $dstpath, $flags, $callback->($status) |
| 778 |
|
| 779 |
Basically a version of C<aio_rename> with an additional C<$flags> |
| 780 |
argument. Calling this with C<$flags=0> is the same as calling |
| 781 |
C<aio_rename>. |
| 782 |
|
| 783 |
Non-zero flags are currently only supported on GNU/Linux systems that |
| 784 |
support renameat2. Other systems fail with C<ENOSYS> in this case. |
| 785 |
|
| 786 |
The following constants are available (missing ones are, as usual C<0>), |
| 787 |
see renameat2(2) for details: |
| 788 |
|
| 789 |
C<IO::AIO::RENAME_NOREPLACE>, C<IO::AIO::RENAME_EXCHANGE> |
| 790 |
and C<IO::AIO::RENAME_WHITEOUT>. |
| 791 |
|
| 792 |
|
| 793 |
=item aio_mkdir $pathname, $mode, $callback->($status) |
| 794 |
|
| 795 |
Asynchronously mkdir (create) a directory and call the callback with |
| 796 |
the result code. C<$mode> will be modified by the umask at the time the |
| 797 |
request is executed, so do not change your umask. |
| 798 |
|
| 799 |
|
| 800 |
=item aio_rmdir $pathname, $callback->($status) |
| 801 |
|
| 802 |
Asynchronously rmdir (delete) a directory and call the callback with the |
| 803 |
result code. |
| 804 |
|
| 805 |
On systems that support the AIO::WD working directory abstraction |
| 806 |
natively, the case C<[$wd, "."]> is specialcased - instead of failing, |
| 807 |
C<rmdir> is called on the absolute path of C<$wd>. |
| 808 |
|
| 809 |
|
| 810 |
=item aio_readdir $pathname, $callback->($entries) |
| 811 |
|
| 812 |
Unlike the POSIX call of the same name, C<aio_readdir> reads an entire |
| 813 |
directory (i.e. opendir + readdir + closedir). The entries will not be |
| 814 |
sorted, and will B<NOT> include the C<.> and C<..> entries. |
| 815 |
|
| 816 |
The callback is passed a single argument which is either C<undef> or an |
| 817 |
array-ref with the filenames. |
| 818 |
|
| 819 |
|
| 820 |
=item aio_readdirx $pathname, $flags, $callback->($entries, $flags) |
| 821 |
|
| 822 |
Quite similar to C<aio_readdir>, but the C<$flags> argument allows one to |
| 823 |
tune behaviour and output format. In case of an error, C<$entries> will be |
| 824 |
C<undef>. |
| 825 |
|
| 826 |
The flags are a combination of the following constants, ORed together (the |
| 827 |
flags will also be passed to the callback, possibly modified): |
| 828 |
|
| 829 |
=over 4 |
| 830 |
|
| 831 |
=item IO::AIO::READDIR_DENTS |
| 832 |
|
| 833 |
Normally the callback gets an arrayref consisting of names only (as |
| 834 |
with C<aio_readdir>). If this flag is set, then the callback gets an |
| 835 |
arrayref with C<[$name, $type, $inode]> arrayrefs, each describing a |
| 836 |
single directory entry in more detail: |
| 837 |
|
| 838 |
C<$name> is the name of the entry. |
| 839 |
|
| 840 |
C<$type> is one of the C<IO::AIO::DT_xxx> constants: |
| 841 |
|
| 842 |
C<IO::AIO::DT_UNKNOWN>, C<IO::AIO::DT_FIFO>, C<IO::AIO::DT_CHR>, C<IO::AIO::DT_DIR>, |
| 843 |
C<IO::AIO::DT_BLK>, C<IO::AIO::DT_REG>, C<IO::AIO::DT_LNK>, C<IO::AIO::DT_SOCK>, |
| 844 |
C<IO::AIO::DT_WHT>. |
| 845 |
|
| 846 |
C<IO::AIO::DT_UNKNOWN> means just that: readdir does not know. If you need |
| 847 |
to know, you have to run stat yourself. Also, for speed/memory reasons, |
| 848 |
the C<$type> scalars are read-only: you must not modify them. |
| 849 |
|
| 850 |
C<$inode> is the inode number (which might not be exact on systems with 64 |
| 851 |
bit inode numbers and 32 bit perls). This field has unspecified content on |
| 852 |
systems that do not deliver the inode information. |
| 853 |
|
| 854 |
=item IO::AIO::READDIR_DIRS_FIRST |
| 855 |
|
| 856 |
When this flag is set, then the names will be returned in an order where |
| 857 |
likely directories come first, in optimal stat order. This is useful when |
| 858 |
you need to quickly find directories, or you want to find all directories |
| 859 |
while avoiding to stat() each entry. |
| 860 |
|
| 861 |
If the system returns type information in readdir, then this is used |
| 862 |
to find directories directly. Otherwise, likely directories are names |
| 863 |
beginning with ".", or otherwise names with no dots, of which names with |
| 864 |
short names are tried first. |
| 865 |
|
| 866 |
=item IO::AIO::READDIR_STAT_ORDER |
| 867 |
|
| 868 |
When this flag is set, then the names will be returned in an order |
| 869 |
suitable for stat()'ing each one. That is, when you plan to stat() most or |
| 870 |
all files in the given directory, then the returned order will likely be |
| 871 |
faster. |
| 872 |
|
| 873 |
If both this flag and C<IO::AIO::READDIR_DIRS_FIRST> are specified, |
| 874 |
then the likely dirs come first, resulting in a less optimal stat order |
| 875 |
for stat'ing all entries, but likely a more optimal order for finding |
| 876 |
subdirectories. |
| 877 |
|
| 878 |
=item IO::AIO::READDIR_FOUND_UNKNOWN |
| 879 |
|
| 880 |
This flag should not be set when calling C<aio_readdirx>. Instead, it |
| 881 |
is being set by C<aio_readdirx>, when any of the C<$type>'s found were |
| 882 |
C<IO::AIO::DT_UNKNOWN>. The absence of this flag therefore indicates that all |
| 883 |
C<$type>'s are known, which can be used to speed up some algorithms. |
| 884 |
|
| 885 |
=back |
| 886 |
|
| 887 |
|
| 888 |
=item aio_slurp $pathname, $offset, $length, $data, $callback->($status) |
| 889 |
|
| 890 |
Opens, reads and closes the given file. The data is put into C<$data>, |
| 891 |
which is resized as required. |
| 892 |
|
| 893 |
If C<$offset> is negative, then it is counted from the end of the file. |
| 894 |
|
| 895 |
If C<$length> is zero, then the remaining length of the file is |
| 896 |
used. Also, in this case, the same limitations to modifying C<$data> apply |
| 897 |
as when IO::AIO::mmap is used, i.e. it must only be modified in-place |
| 898 |
with C<substr>. If the size of the file is known, specifying a non-zero |
| 899 |
C<$length> results in a performance advantage. |
| 900 |
|
| 901 |
This request is similar to the older C<aio_load> request, but since it is |
| 902 |
a single request, it might be more efficient to use. |
| 903 |
|
| 904 |
Example: load F</etc/passwd> into C<$passwd>. |
| 905 |
|
| 906 |
my $passwd; |
| 907 |
aio_slurp "/etc/passwd", 0, 0, $passwd, sub { |
| 908 |
$_[0] >= 0 |
| 909 |
or die "/etc/passwd: $!\n"; |
| 910 |
|
| 911 |
printf "/etc/passwd is %d bytes long, and contains:\n", length $passwd; |
| 912 |
print $passwd; |
| 913 |
}; |
| 914 |
IO::AIO::flush; |
| 915 |
|
| 916 |
|
| 917 |
=item aio_load $pathname, $data, $callback->($status) |
| 918 |
|
| 919 |
This is a composite request that tries to fully load the given file into |
| 920 |
memory. Status is the same as with aio_read. |
| 921 |
|
| 922 |
Using C<aio_slurp> might be more efficient, as it is a single request. |
| 923 |
|
| 924 |
=cut |
| 925 |
|
| 926 |
sub aio_load($$;$) { |
| 927 |
my ($path, undef, $cb) = @_; |
| 928 |
my $data = \$_[1]; |
| 929 |
|
| 930 |
my $pri = aioreq_pri; |
| 931 |
my $grp = aio_group $cb; |
| 932 |
|
| 933 |
aioreq_pri $pri; |
| 934 |
add $grp aio_open $path, O_RDONLY, 0, sub { |
| 935 |
my $fh = shift |
| 936 |
or return $grp->result (-1); |
| 937 |
|
| 938 |
aioreq_pri $pri; |
| 939 |
add $grp aio_read $fh, 0, (-s $fh), $$data, 0, sub { |
| 940 |
$grp->result ($_[0]); |
| 941 |
}; |
| 942 |
}; |
| 943 |
|
| 944 |
$grp |
| 945 |
} |
| 946 |
|
| 947 |
=item aio_copy $srcpath, $dstpath, $callback->($status) |
| 948 |
|
| 949 |
Try to copy the I<file> (directories not supported as either source or |
| 950 |
destination) from C<$srcpath> to C<$dstpath> and call the callback with |
| 951 |
a status of C<0> (ok) or C<-1> (error, see C<$!>). |
| 952 |
|
| 953 |
Existing destination files will be truncated. |
| 954 |
|
| 955 |
This is a composite request that creates the destination file with |
| 956 |
mode 0200 and copies the contents of the source file into it using |
| 957 |
C<aio_sendfile>, followed by restoring atime, mtime, access mode and |
| 958 |
uid/gid, in that order. |
| 959 |
|
| 960 |
If an error occurs, the partial destination file will be unlinked, if |
| 961 |
possible, except when setting atime, mtime, access mode and uid/gid, where |
| 962 |
errors are being ignored. |
| 963 |
|
| 964 |
=cut |
| 965 |
|
| 966 |
sub aio_copy($$;$) { |
| 967 |
my ($src, $dst, $cb) = @_; |
| 968 |
|
| 969 |
my $pri = aioreq_pri; |
| 970 |
my $grp = aio_group $cb; |
| 971 |
|
| 972 |
aioreq_pri $pri; |
| 973 |
add $grp aio_open $src, O_RDONLY, 0, sub { |
| 974 |
if (my $src_fh = $_[0]) { |
| 975 |
my @stat = stat $src_fh; # hmm, might block over nfs? |
| 976 |
|
| 977 |
aioreq_pri $pri; |
| 978 |
add $grp aio_open $dst, O_CREAT | O_WRONLY | O_TRUNC, 0200, sub { |
| 979 |
if (my $dst_fh = $_[0]) { |
| 980 |
|
| 981 |
# best-effort preallocate |
| 982 |
aioreq_pri $pri; |
| 983 |
add $grp aio_allocate $dst_fh, IO::AIO::FALLOC_FL_KEEP_SIZE, 0, $stat[7], sub { }; |
| 984 |
|
| 985 |
aioreq_pri $pri; |
| 986 |
add $grp aio_sendfile $dst_fh, $src_fh, 0, $stat[7], sub { |
| 987 |
if ($_[0] == $stat[7]) { |
| 988 |
$grp->result (0); |
| 989 |
close $src_fh; |
| 990 |
|
| 991 |
my $ch = sub { |
| 992 |
aioreq_pri $pri; |
| 993 |
add $grp aio_chmod $dst_fh, $stat[2] & 07777, sub { |
| 994 |
aioreq_pri $pri; |
| 995 |
add $grp aio_chown $dst_fh, $stat[4], $stat[5], sub { |
| 996 |
aioreq_pri $pri; |
| 997 |
add $grp aio_close $dst_fh; |
| 998 |
} |
| 999 |
}; |
| 1000 |
}; |
| 1001 |
|
| 1002 |
aioreq_pri $pri; |
| 1003 |
add $grp aio_utime $dst_fh, $stat[8], $stat[9], sub { |
| 1004 |
if ($_[0] < 0 && $! == ENOSYS) { |
| 1005 |
aioreq_pri $pri; |
| 1006 |
add $grp aio_utime $dst, $stat[8], $stat[9], $ch; |
| 1007 |
} else { |
| 1008 |
$ch->(); |
| 1009 |
} |
| 1010 |
}; |
| 1011 |
} else { |
| 1012 |
$grp->result (-1); |
| 1013 |
close $src_fh; |
| 1014 |
close $dst_fh; |
| 1015 |
|
| 1016 |
aioreq $pri; |
| 1017 |
add $grp aio_unlink $dst; |
| 1018 |
} |
| 1019 |
}; |
| 1020 |
} else { |
| 1021 |
$grp->result (-1); |
| 1022 |
} |
| 1023 |
}, |
| 1024 |
|
| 1025 |
} else { |
| 1026 |
$grp->result (-1); |
| 1027 |
} |
| 1028 |
}; |
| 1029 |
|
| 1030 |
$grp |
| 1031 |
} |
| 1032 |
|
| 1033 |
=item aio_move $srcpath, $dstpath, $callback->($status) |
| 1034 |
|
| 1035 |
Try to move the I<file> (directories not supported as either source or |
| 1036 |
destination) from C<$srcpath> to C<$dstpath> and call the callback with |
| 1037 |
a status of C<0> (ok) or C<-1> (error, see C<$!>). |
| 1038 |
|
| 1039 |
This is a composite request that tries to rename(2) the file first; if |
| 1040 |
rename fails with C<EXDEV>, it copies the file with C<aio_copy> and, if |
| 1041 |
that is successful, unlinks the C<$srcpath>. |
| 1042 |
|
| 1043 |
=cut |
| 1044 |
|
| 1045 |
sub aio_move($$;$) { |
| 1046 |
my ($src, $dst, $cb) = @_; |
| 1047 |
|
| 1048 |
my $pri = aioreq_pri; |
| 1049 |
my $grp = aio_group $cb; |
| 1050 |
|
| 1051 |
aioreq_pri $pri; |
| 1052 |
add $grp aio_rename $src, $dst, sub { |
| 1053 |
if ($_[0] && $! == EXDEV) { |
| 1054 |
aioreq_pri $pri; |
| 1055 |
add $grp aio_copy $src, $dst, sub { |
| 1056 |
$grp->result ($_[0]); |
| 1057 |
|
| 1058 |
unless ($_[0]) { |
| 1059 |
aioreq_pri $pri; |
| 1060 |
add $grp aio_unlink $src; |
| 1061 |
} |
| 1062 |
}; |
| 1063 |
} else { |
| 1064 |
$grp->result ($_[0]); |
| 1065 |
} |
| 1066 |
}; |
| 1067 |
|
| 1068 |
$grp |
| 1069 |
} |
| 1070 |
|
| 1071 |
=item aio_scandir $pathname, $maxreq, $callback->($dirs, $nondirs) |
| 1072 |
|
| 1073 |
Scans a directory (similar to C<aio_readdir>) but additionally tries to |
| 1074 |
efficiently separate the entries of directory C<$path> into two sets of |
| 1075 |
names, directories you can recurse into (directories), and ones you cannot |
| 1076 |
recurse into (everything else, including symlinks to directories). |
| 1077 |
|
| 1078 |
C<aio_scandir> is a composite request that generates many sub requests. |
| 1079 |
C<$maxreq> specifies the maximum number of outstanding aio requests that |
| 1080 |
this function generates. If it is C<< <= 0 >>, then a suitable default |
| 1081 |
will be chosen (currently 4). |
| 1082 |
|
| 1083 |
On error, the callback is called without arguments, otherwise it receives |
| 1084 |
two array-refs with path-relative entry names. |
| 1085 |
|
| 1086 |
Example: |
| 1087 |
|
| 1088 |
aio_scandir $dir, 0, sub { |
| 1089 |
my ($dirs, $nondirs) = @_; |
| 1090 |
print "real directories: @$dirs\n"; |
| 1091 |
print "everything else: @$nondirs\n"; |
| 1092 |
}; |
| 1093 |
|
| 1094 |
Implementation notes. |
| 1095 |
|
| 1096 |
The C<aio_readdir> cannot be avoided, but C<stat()>'ing every entry can. |
| 1097 |
|
| 1098 |
If readdir returns file type information, then this is used directly to |
| 1099 |
find directories. |
| 1100 |
|
| 1101 |
Otherwise, after reading the directory, the modification time, size etc. |
| 1102 |
of the directory before and after the readdir is checked, and if they |
| 1103 |
match (and isn't the current time), the link count will be used to decide |
| 1104 |
how many entries are directories (if >= 2). Otherwise, no knowledge of the |
| 1105 |
number of subdirectories will be assumed. |
| 1106 |
|
| 1107 |
Then entries will be sorted into likely directories a non-initial dot |
| 1108 |
currently) and likely non-directories (see C<aio_readdirx>). Then every |
| 1109 |
entry plus an appended C</.> will be C<stat>'ed, likely directories first, |
| 1110 |
in order of their inode numbers. If that succeeds, it assumes that the |
| 1111 |
entry is a directory or a symlink to directory (which will be checked |
| 1112 |
separately). This is often faster than stat'ing the entry itself because |
| 1113 |
filesystems might detect the type of the entry without reading the inode |
| 1114 |
data (e.g. ext2fs filetype feature), even on systems that cannot return |
| 1115 |
the filetype information on readdir. |
| 1116 |
|
| 1117 |
If the known number of directories (link count - 2) has been reached, the |
| 1118 |
rest of the entries is assumed to be non-directories. |
| 1119 |
|
| 1120 |
This only works with certainty on POSIX (= UNIX) filesystems, which |
| 1121 |
fortunately are the vast majority of filesystems around. |
| 1122 |
|
| 1123 |
It will also likely work on non-POSIX filesystems with reduced efficiency |
| 1124 |
as those tend to return 0 or 1 as link counts, which disables the |
| 1125 |
directory counting heuristic. |
| 1126 |
|
| 1127 |
=cut |
| 1128 |
|
| 1129 |
sub aio_scandir($$;$) { |
| 1130 |
my ($path, $maxreq, $cb) = @_; |
| 1131 |
|
| 1132 |
my $pri = aioreq_pri; |
| 1133 |
|
| 1134 |
my $grp = aio_group $cb; |
| 1135 |
|
| 1136 |
$maxreq = 4 if $maxreq <= 0; |
| 1137 |
|
| 1138 |
# get a wd object |
| 1139 |
aioreq_pri $pri; |
| 1140 |
add $grp aio_wd $path, sub { |
| 1141 |
$_[0] |
| 1142 |
or return $grp->result (); |
| 1143 |
|
| 1144 |
my $wd = [shift, "."]; |
| 1145 |
|
| 1146 |
# stat once |
| 1147 |
aioreq_pri $pri; |
| 1148 |
add $grp aio_stat $wd, sub { |
| 1149 |
return $grp->result () if $_[0]; |
| 1150 |
my $now = time; |
| 1151 |
my $hash1 = join ":", (stat _)[0,1,3,7,9]; |
| 1152 |
my $rdxflags = READDIR_DIRS_FIRST; |
| 1153 |
|
| 1154 |
if ((stat _)[3] < 2) { |
| 1155 |
# at least one non-POSIX filesystem exists |
| 1156 |
# that returns useful DT_type values: btrfs, |
| 1157 |
# so optimise for this here by requesting dents |
| 1158 |
$rdxflags |= READDIR_DENTS; |
| 1159 |
} |
| 1160 |
|
| 1161 |
# read the directory entries |
| 1162 |
aioreq_pri $pri; |
| 1163 |
add $grp aio_readdirx $wd, $rdxflags, sub { |
| 1164 |
my ($entries, $flags) = @_ |
| 1165 |
or return $grp->result (); |
| 1166 |
|
| 1167 |
if ($rdxflags & READDIR_DENTS) { |
| 1168 |
# if we requested type values, see if we can use them directly. |
| 1169 |
|
| 1170 |
# if there were any DT_UNKNOWN entries then we assume we |
| 1171 |
# don't know. alternatively, we could assume that if we get |
| 1172 |
# one DT_DIR, then all directories are indeed marked with |
| 1173 |
# DT_DIR, but this seems not required for btrfs, and this |
| 1174 |
# is basically the "btrfs can't get it's act together" code |
| 1175 |
# branch. |
| 1176 |
unless ($flags & READDIR_FOUND_UNKNOWN) { |
| 1177 |
# now we have valid DT_ information for all entries, |
| 1178 |
# so use it as an optimisation without further stat's. |
| 1179 |
# they must also all be at the beginning of @$entries |
| 1180 |
# by now. |
| 1181 |
|
| 1182 |
my $dirs; |
| 1183 |
|
| 1184 |
if (@$entries) { |
| 1185 |
for (0 .. $#$entries) { |
| 1186 |
if ($entries->[$_][1] != DT_DIR) { |
| 1187 |
# splice out directories |
| 1188 |
$dirs = [splice @$entries, 0, $_]; |
| 1189 |
last; |
| 1190 |
} |
| 1191 |
} |
| 1192 |
|
| 1193 |
# if we didn't find any non-dir, then all entries are dirs |
| 1194 |
unless ($dirs) { |
| 1195 |
($dirs, $entries) = ($entries, []); |
| 1196 |
} |
| 1197 |
} else { |
| 1198 |
# directory is empty, so there are no sbdirs |
| 1199 |
$dirs = []; |
| 1200 |
} |
| 1201 |
|
| 1202 |
# either splice'd the directories out or the dir was empty. |
| 1203 |
# convert dents to filenames |
| 1204 |
$_ = $_->[0] for @$dirs; |
| 1205 |
$_ = $_->[0] for @$entries; |
| 1206 |
|
| 1207 |
return $grp->result ($dirs, $entries); |
| 1208 |
} |
| 1209 |
|
| 1210 |
# cannot use, so return to our old ways |
| 1211 |
# by pretending we only scanned for names. |
| 1212 |
$_ = $_->[0] for @$entries; |
| 1213 |
} |
| 1214 |
|
| 1215 |
# stat the dir another time |
| 1216 |
aioreq_pri $pri; |
| 1217 |
add $grp aio_stat $wd, sub { |
| 1218 |
my $hash2 = join ":", (stat _)[0,1,3,7,9]; |
| 1219 |
|
| 1220 |
my $ndirs; |
| 1221 |
|
| 1222 |
# take the slow route if anything looks fishy |
| 1223 |
if ($hash1 ne $hash2 or (stat _)[9] == $now) { |
| 1224 |
$ndirs = -1; |
| 1225 |
} else { |
| 1226 |
# if nlink == 2, we are finished |
| 1227 |
# for non-posix-fs's, we rely on nlink < 2 |
| 1228 |
$ndirs = (stat _)[3] - 2 |
| 1229 |
or return $grp->result ([], $entries); |
| 1230 |
} |
| 1231 |
|
| 1232 |
my (@dirs, @nondirs); |
| 1233 |
|
| 1234 |
my $statgrp = add $grp aio_group sub { |
| 1235 |
$grp->result (\@dirs, \@nondirs); |
| 1236 |
}; |
| 1237 |
|
| 1238 |
limit $statgrp $maxreq; |
| 1239 |
feed $statgrp sub { |
| 1240 |
return unless @$entries; |
| 1241 |
my $entry = shift @$entries; |
| 1242 |
|
| 1243 |
aioreq_pri $pri; |
| 1244 |
$wd->[1] = "$entry/."; |
| 1245 |
add $statgrp aio_stat $wd, sub { |
| 1246 |
if ($_[0] < 0) { |
| 1247 |
push @nondirs, $entry; |
| 1248 |
} else { |
| 1249 |
# need to check for real directory |
| 1250 |
aioreq_pri $pri; |
| 1251 |
$wd->[1] = $entry; |
| 1252 |
add $statgrp aio_lstat $wd, sub { |
| 1253 |
if (-d _) { |
| 1254 |
push @dirs, $entry; |
| 1255 |
|
| 1256 |
unless (--$ndirs) { |
| 1257 |
push @nondirs, @$entries; |
| 1258 |
feed $statgrp; |
| 1259 |
} |
| 1260 |
} else { |
| 1261 |
push @nondirs, $entry; |
| 1262 |
} |
| 1263 |
} |
| 1264 |
} |
| 1265 |
}; |
| 1266 |
}; |
| 1267 |
}; |
| 1268 |
}; |
| 1269 |
}; |
| 1270 |
}; |
| 1271 |
|
| 1272 |
$grp |
| 1273 |
} |
| 1274 |
|
| 1275 |
=item aio_rmtree $pathname, $callback->($status) |
| 1276 |
|
| 1277 |
Delete a directory tree starting (and including) C<$path>, return the |
| 1278 |
status of the final C<rmdir> only. This is a composite request that |
| 1279 |
uses C<aio_scandir> to recurse into and rmdir directories, and unlink |
| 1280 |
everything else. |
| 1281 |
|
| 1282 |
=cut |
| 1283 |
|
| 1284 |
sub aio_rmtree; |
| 1285 |
sub aio_rmtree($;$) { |
| 1286 |
my ($path, $cb) = @_; |
| 1287 |
|
| 1288 |
my $pri = aioreq_pri; |
| 1289 |
my $grp = aio_group $cb; |
| 1290 |
|
| 1291 |
aioreq_pri $pri; |
| 1292 |
add $grp aio_scandir $path, 0, sub { |
| 1293 |
my ($dirs, $nondirs) = @_; |
| 1294 |
|
| 1295 |
my $dirgrp = aio_group sub { |
| 1296 |
add $grp aio_rmdir $path, sub { |
| 1297 |
$grp->result ($_[0]); |
| 1298 |
}; |
| 1299 |
}; |
| 1300 |
|
| 1301 |
(aioreq_pri $pri), add $dirgrp aio_rmtree "$path/$_" for @$dirs; |
| 1302 |
(aioreq_pri $pri), add $dirgrp aio_unlink "$path/$_" for @$nondirs; |
| 1303 |
|
| 1304 |
add $grp $dirgrp; |
| 1305 |
}; |
| 1306 |
|
| 1307 |
$grp |
| 1308 |
} |
| 1309 |
|
| 1310 |
=item aio_fcntl $fh, $cmd, $arg, $callback->($status) |
| 1311 |
|
| 1312 |
=item aio_ioctl $fh, $request, $buf, $callback->($status) |
| 1313 |
|
| 1314 |
These work just like the C<fcntl> and C<ioctl> built-in functions, except |
| 1315 |
they execute asynchronously and pass the return value to the callback. |
| 1316 |
|
| 1317 |
Both calls can be used for a lot of things, some of which make more sense |
| 1318 |
to run asynchronously in their own thread, while some others make less |
| 1319 |
sense. For example, calls that block waiting for external events, such |
| 1320 |
as locking, will also lock down an I/O thread while it is waiting, which |
| 1321 |
can deadlock the whole I/O system. At the same time, there might be no |
| 1322 |
alternative to using a thread to wait. |
| 1323 |
|
| 1324 |
So in general, you should only use these calls for things that do |
| 1325 |
(filesystem) I/O, not for things that wait for other events (network, |
| 1326 |
other processes), although if you are careful and know what you are doing, |
| 1327 |
you still can. |
| 1328 |
|
| 1329 |
The following constants are available and can be used for normal C<ioctl> |
| 1330 |
and C<fcntl> as well (missing ones are, as usual C<0>): |
| 1331 |
|
| 1332 |
C<F_DUPFD_CLOEXEC>, |
| 1333 |
|
| 1334 |
C<F_OFD_GETLK>, C<F_OFD_SETLK>, C<F_OFD_GETLKW>, |
| 1335 |
|
| 1336 |
C<FIFREEZE>, C<FITHAW>, C<FITRIM>, C<FICLONE>, C<FICLONERANGE>, C<FIDEDUPERANGE>. |
| 1337 |
|
| 1338 |
C<F_ADD_SEALS>, C<F_GET_SEALS>, C<F_SEAL_SEAL>, C<F_SEAL_SHRINK>, C<F_SEAL_GROW> and |
| 1339 |
C<F_SEAL_WRITE>. |
| 1340 |
|
| 1341 |
C<FS_IOC_GETFLAGS>, C<FS_IOC_SETFLAGS>, C<FS_IOC_GETVERSION>, C<FS_IOC_SETVERSION>, |
| 1342 |
C<FS_IOC_FIEMAP>. |
| 1343 |
|
| 1344 |
C<FS_IOC_FSGETXATTR>, C<FS_IOC_FSSETXATTR>, C<FS_IOC_SET_ENCRYPTION_POLICY>, |
| 1345 |
C<FS_IOC_GET_ENCRYPTION_PWSALT>, C<FS_IOC_GET_ENCRYPTION_POLICY>, C<FS_KEY_DESCRIPTOR_SIZE>. |
| 1346 |
|
| 1347 |
C<FS_SECRM_FL>, C<FS_UNRM_FL>, C<FS_COMPR_FL>, C<FS_SYNC_FL>, C<FS_IMMUTABLE_FL>, |
| 1348 |
C<FS_APPEND_FL>, C<FS_NODUMP_FL>, C<FS_NOATIME_FL>, C<FS_DIRTY_FL>, |
| 1349 |
C<FS_COMPRBLK_FL>, C<FS_NOCOMP_FL>, C<FS_ENCRYPT_FL>, C<FS_BTREE_FL>, |
| 1350 |
C<FS_INDEX_FL>, C<FS_JOURNAL_DATA_FL>, C<FS_NOTAIL_FL>, C<FS_DIRSYNC_FL>, C<FS_TOPDIR_FL>, |
| 1351 |
C<FS_FL_USER_MODIFIABLE>. |
| 1352 |
|
| 1353 |
C<FS_XFLAG_REALTIME>, C<FS_XFLAG_PREALLOC>, C<FS_XFLAG_IMMUTABLE>, C<FS_XFLAG_APPEND>, |
| 1354 |
C<FS_XFLAG_SYNC>, C<FS_XFLAG_NOATIME>, C<FS_XFLAG_NODUMP>, C<FS_XFLAG_RTINHERIT>, |
| 1355 |
C<FS_XFLAG_PROJINHERIT>, C<FS_XFLAG_NOSYMLINKS>, C<FS_XFLAG_EXTSIZE>, C<FS_XFLAG_EXTSZINHERIT>, |
| 1356 |
C<FS_XFLAG_NODEFRAG>, C<FS_XFLAG_FILESTREAM>, C<FS_XFLAG_DAX>, C<FS_XFLAG_HASATTR>, |
| 1357 |
|
| 1358 |
C<BLKROSET>, C<BLKROGET>, C<BLKRRPART>, C<BLKGETSIZE>, C<BLKFLSBUF>, C<BLKRASET>, |
| 1359 |
C<BLKRAGET>, C<BLKFRASET>, C<BLKFRAGET>, C<BLKSECTSET>, C<BLKSECTGET>, C<BLKSSZGET>, |
| 1360 |
C<BLKBSZGET>, C<BLKBSZSET>, C<BLKGETSIZE64>, |
| 1361 |
|
| 1362 |
|
| 1363 |
=item aio_sync $callback->($status) |
| 1364 |
|
| 1365 |
Asynchronously call sync and call the callback when finished. |
| 1366 |
|
| 1367 |
=item aio_fsync $fh, $callback->($status) |
| 1368 |
|
| 1369 |
Asynchronously call fsync on the given filehandle and call the callback |
| 1370 |
with the fsync result code. |
| 1371 |
|
| 1372 |
=item aio_fdatasync $fh, $callback->($status) |
| 1373 |
|
| 1374 |
Asynchronously call fdatasync on the given filehandle and call the |
| 1375 |
callback with the fdatasync result code. |
| 1376 |
|
| 1377 |
If this call isn't available because your OS lacks it or it couldn't be |
| 1378 |
detected, it will be emulated by calling C<fsync> instead. |
| 1379 |
|
| 1380 |
=item aio_syncfs $fh, $callback->($status) |
| 1381 |
|
| 1382 |
Asynchronously call the syncfs syscall to sync the filesystem associated |
| 1383 |
to the given filehandle and call the callback with the syncfs result |
| 1384 |
code. If syncfs is not available, calls sync(), but returns C<-1> and sets |
| 1385 |
errno to C<ENOSYS> nevertheless. |
| 1386 |
|
| 1387 |
=item aio_sync_file_range $fh, $offset, $nbytes, $flags, $callback->($status) |
| 1388 |
|
| 1389 |
Sync the data portion of the file specified by C<$offset> and C<$length> |
| 1390 |
to disk (but NOT the metadata), by calling the Linux-specific |
| 1391 |
sync_file_range call. If sync_file_range is not available or it returns |
| 1392 |
ENOSYS, then fdatasync or fsync is being substituted. |
| 1393 |
|
| 1394 |
C<$flags> can be a combination of C<IO::AIO::SYNC_FILE_RANGE_WAIT_BEFORE>, |
| 1395 |
C<IO::AIO::SYNC_FILE_RANGE_WRITE> and |
| 1396 |
C<IO::AIO::SYNC_FILE_RANGE_WAIT_AFTER>: refer to the sync_file_range |
| 1397 |
manpage for details. |
| 1398 |
|
| 1399 |
=item aio_pathsync $pathname, $callback->($status) |
| 1400 |
|
| 1401 |
This request tries to open, fsync and close the given path. This is a |
| 1402 |
composite request intended to sync directories after directory operations |
| 1403 |
(E.g. rename). This might not work on all operating systems or have any |
| 1404 |
specific effect, but usually it makes sure that directory changes get |
| 1405 |
written to disc. It works for anything that can be opened for read-only, |
| 1406 |
not just directories. |
| 1407 |
|
| 1408 |
Future versions of this function might fall back to other methods when |
| 1409 |
C<fsync> on the directory fails (such as calling C<sync>). |
| 1410 |
|
| 1411 |
Passes C<0> when everything went ok, and C<-1> on error. |
| 1412 |
|
| 1413 |
=cut |
| 1414 |
|
| 1415 |
sub aio_pathsync($;$) { |
| 1416 |
my ($path, $cb) = @_; |
| 1417 |
|
| 1418 |
my $pri = aioreq_pri; |
| 1419 |
my $grp = aio_group $cb; |
| 1420 |
|
| 1421 |
aioreq_pri $pri; |
| 1422 |
add $grp aio_open $path, O_RDONLY, 0, sub { |
| 1423 |
my ($fh) = @_; |
| 1424 |
if ($fh) { |
| 1425 |
aioreq_pri $pri; |
| 1426 |
add $grp aio_fsync $fh, sub { |
| 1427 |
$grp->result ($_[0]); |
| 1428 |
|
| 1429 |
aioreq_pri $pri; |
| 1430 |
add $grp aio_close $fh; |
| 1431 |
}; |
| 1432 |
} else { |
| 1433 |
$grp->result (-1); |
| 1434 |
} |
| 1435 |
}; |
| 1436 |
|
| 1437 |
$grp |
| 1438 |
} |
| 1439 |
|
| 1440 |
=item aio_msync $scalar, $offset = 0, $length = undef, flags = MS_SYNC, $callback->($status) |
| 1441 |
|
| 1442 |
This is a rather advanced IO::AIO call, which only works on mmap(2)ed |
| 1443 |
scalars (see the C<IO::AIO::mmap> function, although it also works on data |
| 1444 |
scalars managed by the L<Sys::Mmap> or L<Mmap> modules, note that the |
| 1445 |
scalar must only be modified in-place while an aio operation is pending on |
| 1446 |
it). |
| 1447 |
|
| 1448 |
It calls the C<msync> function of your OS, if available, with the memory |
| 1449 |
area starting at C<$offset> in the string and ending C<$length> bytes |
| 1450 |
later. If C<$length> is negative, counts from the end, and if C<$length> |
| 1451 |
is C<undef>, then it goes till the end of the string. The flags can be |
| 1452 |
either C<IO::AIO::MS_ASYNC> or C<IO::AIO::MS_SYNC>, plus an optional |
| 1453 |
C<IO::AIO::MS_INVALIDATE>. |
| 1454 |
|
| 1455 |
=item aio_mtouch $scalar, $offset = 0, $length = undef, flags = 0, $callback->($status) |
| 1456 |
|
| 1457 |
This is a rather advanced IO::AIO call, which works best on mmap(2)ed |
| 1458 |
scalars. |
| 1459 |
|
| 1460 |
It touches (reads or writes) all memory pages in the specified |
| 1461 |
range inside the scalar. All caveats and parameters are the same |
| 1462 |
as for C<aio_msync>, above, except for flags, which must be either |
| 1463 |
C<0> (which reads all pages and ensures they are instantiated) or |
| 1464 |
C<IO::AIO::MT_MODIFY>, which modifies the memory pages (by reading and |
| 1465 |
writing an octet from it, which dirties the page). |
| 1466 |
|
| 1467 |
=item aio_mlock $scalar, $offset = 0, $length = undef, $callback->($status) |
| 1468 |
|
| 1469 |
This is a rather advanced IO::AIO call, which works best on mmap(2)ed |
| 1470 |
scalars. |
| 1471 |
|
| 1472 |
It reads in all the pages of the underlying storage into memory (if any) |
| 1473 |
and locks them, so they are not getting swapped/paged out or removed. |
| 1474 |
|
| 1475 |
If C<$length> is undefined, then the scalar will be locked till the end. |
| 1476 |
|
| 1477 |
On systems that do not implement C<mlock>, this function returns C<-1> |
| 1478 |
and sets errno to C<ENOSYS>. |
| 1479 |
|
| 1480 |
Note that the corresponding C<munlock> is synchronous and is |
| 1481 |
documented under L<MISCELLANEOUS FUNCTIONS>. |
| 1482 |
|
| 1483 |
Example: open a file, mmap and mlock it - both will be undone when |
| 1484 |
C<$data> gets destroyed. |
| 1485 |
|
| 1486 |
open my $fh, "<", $path or die "$path: $!"; |
| 1487 |
my $data; |
| 1488 |
IO::AIO::mmap $data, -s $fh, IO::AIO::PROT_READ, IO::AIO::MAP_SHARED, $fh; |
| 1489 |
aio_mlock $data; # mlock in background |
| 1490 |
|
| 1491 |
=item aio_mlockall $flags, $callback->($status) |
| 1492 |
|
| 1493 |
Calls the C<mlockall> function with the given C<$flags> (a |
| 1494 |
combination of C<IO::AIO::MCL_CURRENT>, C<IO::AIO::MCL_FUTURE> and |
| 1495 |
C<IO::AIO::MCL_ONFAULT>). |
| 1496 |
|
| 1497 |
On systems that do not implement C<mlockall>, this function returns C<-1> |
| 1498 |
and sets errno to C<ENOSYS>. Similarly, flag combinations not supported |
| 1499 |
by the system result in a return value of C<-1> with errno being set to |
| 1500 |
C<EINVAL>. |
| 1501 |
|
| 1502 |
Note that the corresponding C<munlockall> is synchronous and is |
| 1503 |
documented under L<MISCELLANEOUS FUNCTIONS>. |
| 1504 |
|
| 1505 |
Example: asynchronously lock all current and future pages into memory. |
| 1506 |
|
| 1507 |
aio_mlockall IO::AIO::MCL_FUTURE; |
| 1508 |
|
| 1509 |
=item aio_fiemap $fh, $start, $length, $flags, $count, $cb->(\@extents) |
| 1510 |
|
| 1511 |
Queries the extents of the given file (by calling the Linux C<FIEMAP> |
| 1512 |
ioctl, see L<http://cvs.schmorp.de/IO-AIO/doc/fiemap.txt> for details). If |
| 1513 |
the ioctl is not available on your OS, then this request will fail with |
| 1514 |
C<ENOSYS>. |
| 1515 |
|
| 1516 |
C<$start> is the starting offset to query extents for, C<$length> is the |
| 1517 |
size of the range to query - if it is C<undef>, then the whole file will |
| 1518 |
be queried. |
| 1519 |
|
| 1520 |
C<$flags> is a combination of flags (C<IO::AIO::FIEMAP_FLAG_SYNC> or |
| 1521 |
C<IO::AIO::FIEMAP_FLAG_XATTR> - C<IO::AIO::FIEMAP_FLAGS_COMPAT> is also |
| 1522 |
exported), and is normally C<0> or C<IO::AIO::FIEMAP_FLAG_SYNC> to query |
| 1523 |
the data portion. |
| 1524 |
|
| 1525 |
C<$count> is the maximum number of extent records to return. If it is |
| 1526 |
C<undef>, then IO::AIO queries all extents of the range. As a very special |
| 1527 |
case, if it is C<0>, then the callback receives the number of extents |
| 1528 |
instead of the extents themselves (which is unreliable, see below). |
| 1529 |
|
| 1530 |
If an error occurs, the callback receives no arguments. The special |
| 1531 |
C<errno> value C<IO::AIO::EBADR> is available to test for flag errors. |
| 1532 |
|
| 1533 |
Otherwise, the callback receives an array reference with extent |
| 1534 |
structures. Each extent structure is an array reference itself, with the |
| 1535 |
following members: |
| 1536 |
|
| 1537 |
[$logical, $physical, $length, $flags] |
| 1538 |
|
| 1539 |
Flags is any combination of the following flag values (typically either C<0> |
| 1540 |
or C<IO::AIO::FIEMAP_EXTENT_LAST> (1)): |
| 1541 |
|
| 1542 |
C<IO::AIO::FIEMAP_EXTENT_LAST>, C<IO::AIO::FIEMAP_EXTENT_UNKNOWN>, |
| 1543 |
C<IO::AIO::FIEMAP_EXTENT_DELALLOC>, C<IO::AIO::FIEMAP_EXTENT_ENCODED>, |
| 1544 |
C<IO::AIO::FIEMAP_EXTENT_DATA_ENCRYPTED>, C<IO::AIO::FIEMAP_EXTENT_NOT_ALIGNED>, |
| 1545 |
C<IO::AIO::FIEMAP_EXTENT_DATA_INLINE>, C<IO::AIO::FIEMAP_EXTENT_DATA_TAIL>, |
| 1546 |
C<IO::AIO::FIEMAP_EXTENT_UNWRITTEN>, C<IO::AIO::FIEMAP_EXTENT_MERGED> or |
| 1547 |
C<IO::AIO::FIEMAP_EXTENT_SHARED>. |
| 1548 |
|
| 1549 |
At the time of this writing (Linux 3.2), this request is unreliable unless |
| 1550 |
C<$count> is C<undef>, as the kernel has all sorts of bugs preventing |
| 1551 |
it to return all extents of a range for files with a large number of |
| 1552 |
extents. The code (only) works around all these issues if C<$count> is |
| 1553 |
C<undef>. |
| 1554 |
|
| 1555 |
=item aio_group $callback->(...) |
| 1556 |
|
| 1557 |
This is a very special aio request: Instead of doing something, it is a |
| 1558 |
container for other aio requests, which is useful if you want to bundle |
| 1559 |
many requests into a single, composite, request with a definite callback |
| 1560 |
and the ability to cancel the whole request with its subrequests. |
| 1561 |
|
| 1562 |
Returns an object of class L<IO::AIO::GRP>. See its documentation below |
| 1563 |
for more info. |
| 1564 |
|
| 1565 |
Example: |
| 1566 |
|
| 1567 |
my $grp = aio_group sub { |
| 1568 |
print "all stats done\n"; |
| 1569 |
}; |
| 1570 |
|
| 1571 |
add $grp |
| 1572 |
(aio_stat ...), |
| 1573 |
(aio_stat ...), |
| 1574 |
...; |
| 1575 |
|
| 1576 |
=item aio_nop $callback->() |
| 1577 |
|
| 1578 |
This is a special request - it does nothing in itself and is only used for |
| 1579 |
side effects, such as when you want to add a dummy request to a group so |
| 1580 |
that finishing the requests in the group depends on executing the given |
| 1581 |
code. |
| 1582 |
|
| 1583 |
While this request does nothing, it still goes through the execution |
| 1584 |
phase and still requires a worker thread. Thus, the callback will not |
| 1585 |
be executed immediately but only after other requests in the queue have |
| 1586 |
entered their execution phase. This can be used to measure request |
| 1587 |
latency. |
| 1588 |
|
| 1589 |
=item IO::AIO::aio_busy $fractional_seconds, $callback->() *NOT EXPORTED* |
| 1590 |
|
| 1591 |
Mainly used for debugging and benchmarking, this aio request puts one of |
| 1592 |
the request workers to sleep for the given time. |
| 1593 |
|
| 1594 |
While it is theoretically handy to have simple I/O scheduling requests |
| 1595 |
like sleep and file handle readable/writable, the overhead this creates is |
| 1596 |
immense (it blocks a thread for a long time) so do not use this function |
| 1597 |
except to put your application under artificial I/O pressure. |
| 1598 |
|
| 1599 |
=back |
| 1600 |
|
| 1601 |
|
| 1602 |
=head2 IO::AIO::WD - multiple working directories |
| 1603 |
|
| 1604 |
Your process only has one current working directory, which is used by all |
| 1605 |
threads. This makes it hard to use relative paths (some other component |
| 1606 |
could call C<chdir> at any time, and it is hard to control when the path |
| 1607 |
will be used by IO::AIO). |
| 1608 |
|
| 1609 |
One solution for this is to always use absolute paths. This usually works, |
| 1610 |
but can be quite slow (the kernel has to walk the whole path on every |
| 1611 |
access), and can also be a hassle to implement. |
| 1612 |
|
| 1613 |
Newer POSIX systems have a number of functions (openat, fdopendir, |
| 1614 |
futimensat and so on) that make it possible to specify working directories |
| 1615 |
per operation. |
| 1616 |
|
| 1617 |
For portability, and because the clowns who "designed", or shall I write, |
| 1618 |
perpetrated this new interface were obviously half-drunk, this abstraction |
| 1619 |
cannot be perfect, though. |
| 1620 |
|
| 1621 |
IO::AIO allows you to convert directory paths into a so-called IO::AIO::WD |
| 1622 |
object. This object stores the canonicalised, absolute version of the |
| 1623 |
path, and on systems that allow it, also a directory file descriptor. |
| 1624 |
|
| 1625 |
Everywhere where a pathname is accepted by IO::AIO (e.g. in C<aio_stat> |
| 1626 |
or C<aio_unlink>), one can specify an array reference with an IO::AIO::WD |
| 1627 |
object and a pathname instead (or the IO::AIO::WD object alone, which |
| 1628 |
gets interpreted as C<[$wd, "."]>). If the pathname is absolute, the |
| 1629 |
IO::AIO::WD object is ignored, otherwise the pathname is resolved relative |
| 1630 |
to that IO::AIO::WD object. |
| 1631 |
|
| 1632 |
For example, to get a wd object for F</etc> and then stat F<passwd> |
| 1633 |
inside, you would write: |
| 1634 |
|
| 1635 |
aio_wd "/etc", sub { |
| 1636 |
my $etcdir = shift; |
| 1637 |
|
| 1638 |
# although $etcdir can be undef on error, there is generally no reason |
| 1639 |
# to check for errors here, as aio_stat will fail with ENOENT |
| 1640 |
# when $etcdir is undef. |
| 1641 |
|
| 1642 |
aio_stat [$etcdir, "passwd"], sub { |
| 1643 |
# yay |
| 1644 |
}; |
| 1645 |
}; |
| 1646 |
|
| 1647 |
The fact that C<aio_wd> is a request and not a normal function shows that |
| 1648 |
creating an IO::AIO::WD object is itself a potentially blocking operation, |
| 1649 |
which is why it is done asynchronously. |
| 1650 |
|
| 1651 |
To stat the directory obtained with C<aio_wd> above, one could write |
| 1652 |
either of the following three request calls: |
| 1653 |
|
| 1654 |
aio_lstat "/etc" , sub { ... # pathname as normal string |
| 1655 |
aio_lstat [$wd, "."], sub { ... # "." relative to $wd (i.e. $wd itself) |
| 1656 |
aio_lstat $wd , sub { ... # shorthand for the previous |
| 1657 |
|
| 1658 |
As with normal pathnames, IO::AIO keeps a copy of the working directory |
| 1659 |
object and the pathname string, so you could write the following without |
| 1660 |
causing any issues due to C<$path> getting reused: |
| 1661 |
|
| 1662 |
my $path = [$wd, undef]; |
| 1663 |
|
| 1664 |
for my $name (qw(abc def ghi)) { |
| 1665 |
$path->[1] = $name; |
| 1666 |
aio_stat $path, sub { |
| 1667 |
# ... |
| 1668 |
}; |
| 1669 |
} |
| 1670 |
|
| 1671 |
There are some caveats: when directories get renamed (or deleted), the |
| 1672 |
pathname string doesn't change, so will point to the new directory (or |
| 1673 |
nowhere at all), while the directory fd, if available on the system, |
| 1674 |
will still point to the original directory. Most functions accepting a |
| 1675 |
pathname will use the directory fd on newer systems, and the string on |
| 1676 |
older systems. Some functions (such as C<aio_realpath>) will always rely on |
| 1677 |
the string form of the pathname. |
| 1678 |
|
| 1679 |
So this functionality is mainly useful to get some protection against |
| 1680 |
C<chdir>, to easily get an absolute path out of a relative path for future |
| 1681 |
reference, and to speed up doing many operations in the same directory |
| 1682 |
(e.g. when stat'ing all files in a directory). |
| 1683 |
|
| 1684 |
The following functions implement this working directory abstraction: |
| 1685 |
|
| 1686 |
=over 4 |
| 1687 |
|
| 1688 |
=item aio_wd $pathname, $callback->($wd) |
| 1689 |
|
| 1690 |
Asynchonously canonicalise the given pathname and convert it to an |
| 1691 |
IO::AIO::WD object representing it. If possible and supported on the |
| 1692 |
system, also open a directory fd to speed up pathname resolution relative |
| 1693 |
to this working directory. |
| 1694 |
|
| 1695 |
If something goes wrong, then C<undef> is passwd to the callback instead |
| 1696 |
of a working directory object and C<$!> is set appropriately. Since |
| 1697 |
passing C<undef> as working directory component of a pathname fails the |
| 1698 |
request with C<ENOENT>, there is often no need for error checking in the |
| 1699 |
C<aio_wd> callback, as future requests using the value will fail in the |
| 1700 |
expected way. |
| 1701 |
|
| 1702 |
=item IO::AIO::CWD |
| 1703 |
|
| 1704 |
This is a compile time constant (object) that represents the process |
| 1705 |
current working directory. |
| 1706 |
|
| 1707 |
Specifying this object as working directory object for a pathname is as if |
| 1708 |
the pathname would be specified directly, without a directory object. For |
| 1709 |
example, these calls are functionally identical: |
| 1710 |
|
| 1711 |
aio_stat "somefile", sub { ... }; |
| 1712 |
aio_stat [IO::AIO::CWD, "somefile"], sub { ... }; |
| 1713 |
|
| 1714 |
=back |
| 1715 |
|
| 1716 |
To recover the path associated with an IO::AIO::WD object, you can use |
| 1717 |
C<aio_realpath>: |
| 1718 |
|
| 1719 |
aio_realpath $wd, sub { |
| 1720 |
warn "path is $_[0]\n"; |
| 1721 |
}; |
| 1722 |
|
| 1723 |
Currently, C<aio_statvfs> always, and C<aio_rename> and C<aio_rmdir> |
| 1724 |
sometimes, fall back to using an absolue path. |
| 1725 |
|
| 1726 |
=head2 IO::AIO::REQ CLASS |
| 1727 |
|
| 1728 |
All non-aggregate C<aio_*> functions return an object of this class when |
| 1729 |
called in non-void context. |
| 1730 |
|
| 1731 |
=over 4 |
| 1732 |
|
| 1733 |
=item cancel $req |
| 1734 |
|
| 1735 |
Cancels the request, if possible. Has the effect of skipping execution |
| 1736 |
when entering the B<execute> state and skipping calling the callback when |
| 1737 |
entering the the B<result> state, but will leave the request otherwise |
| 1738 |
untouched (with the exception of readdir). That means that requests that |
| 1739 |
currently execute will not be stopped and resources held by the request |
| 1740 |
will not be freed prematurely. |
| 1741 |
|
| 1742 |
=item cb $req $callback->(...) |
| 1743 |
|
| 1744 |
Replace (or simply set) the callback registered to the request. |
| 1745 |
|
| 1746 |
=back |
| 1747 |
|
| 1748 |
=head2 IO::AIO::GRP CLASS |
| 1749 |
|
| 1750 |
This class is a subclass of L<IO::AIO::REQ>, so all its methods apply to |
| 1751 |
objects of this class, too. |
| 1752 |
|
| 1753 |
A IO::AIO::GRP object is a special request that can contain multiple other |
| 1754 |
aio requests. |
| 1755 |
|
| 1756 |
You create one by calling the C<aio_group> constructing function with a |
| 1757 |
callback that will be called when all contained requests have entered the |
| 1758 |
C<done> state: |
| 1759 |
|
| 1760 |
my $grp = aio_group sub { |
| 1761 |
print "all requests are done\n"; |
| 1762 |
}; |
| 1763 |
|
| 1764 |
You add requests by calling the C<add> method with one or more |
| 1765 |
C<IO::AIO::REQ> objects: |
| 1766 |
|
| 1767 |
$grp->add (aio_unlink "..."); |
| 1768 |
|
| 1769 |
add $grp aio_stat "...", sub { |
| 1770 |
$_[0] or return $grp->result ("error"); |
| 1771 |
|
| 1772 |
# add another request dynamically, if first succeeded |
| 1773 |
add $grp aio_open "...", sub { |
| 1774 |
$grp->result ("ok"); |
| 1775 |
}; |
| 1776 |
}; |
| 1777 |
|
| 1778 |
This makes it very easy to create composite requests (see the source of |
| 1779 |
C<aio_move> for an application) that work and feel like simple requests. |
| 1780 |
|
| 1781 |
=over 4 |
| 1782 |
|
| 1783 |
=item * The IO::AIO::GRP objects will be cleaned up during calls to |
| 1784 |
C<IO::AIO::poll_cb>, just like any other request. |
| 1785 |
|
| 1786 |
=item * They can be canceled like any other request. Canceling will cancel not |
| 1787 |
only the request itself, but also all requests it contains. |
| 1788 |
|
| 1789 |
=item * They can also can also be added to other IO::AIO::GRP objects. |
| 1790 |
|
| 1791 |
=item * You must not add requests to a group from within the group callback (or |
| 1792 |
any later time). |
| 1793 |
|
| 1794 |
=back |
| 1795 |
|
| 1796 |
Their lifetime, simplified, looks like this: when they are empty, they |
| 1797 |
will finish very quickly. If they contain only requests that are in the |
| 1798 |
C<done> state, they will also finish. Otherwise they will continue to |
| 1799 |
exist. |
| 1800 |
|
| 1801 |
That means after creating a group you have some time to add requests |
| 1802 |
(precisely before the callback has been invoked, which is only done within |
| 1803 |
the C<poll_cb>). And in the callbacks of those requests, you can add |
| 1804 |
further requests to the group. And only when all those requests have |
| 1805 |
finished will the the group itself finish. |
| 1806 |
|
| 1807 |
=over 4 |
| 1808 |
|
| 1809 |
=item add $grp ... |
| 1810 |
|
| 1811 |
=item $grp->add (...) |
| 1812 |
|
| 1813 |
Add one or more requests to the group. Any type of L<IO::AIO::REQ> can |
| 1814 |
be added, including other groups, as long as you do not create circular |
| 1815 |
dependencies. |
| 1816 |
|
| 1817 |
Returns all its arguments. |
| 1818 |
|
| 1819 |
=item $grp->cancel_subs |
| 1820 |
|
| 1821 |
Cancel all subrequests and clears any feeder, but not the group request |
| 1822 |
itself. Useful when you queued a lot of events but got a result early. |
| 1823 |
|
| 1824 |
The group request will finish normally (you cannot add requests to the |
| 1825 |
group). |
| 1826 |
|
| 1827 |
=item $grp->result (...) |
| 1828 |
|
| 1829 |
Set the result value(s) that will be passed to the group callback when all |
| 1830 |
subrequests have finished and set the groups errno to the current value |
| 1831 |
of errno (just like calling C<errno> without an error number). By default, |
| 1832 |
no argument will be passed and errno is zero. |
| 1833 |
|
| 1834 |
=item $grp->errno ([$errno]) |
| 1835 |
|
| 1836 |
Sets the group errno value to C<$errno>, or the current value of errno |
| 1837 |
when the argument is missing. |
| 1838 |
|
| 1839 |
Every aio request has an associated errno value that is restored when |
| 1840 |
the callback is invoked. This method lets you change this value from its |
| 1841 |
default (0). |
| 1842 |
|
| 1843 |
Calling C<result> will also set errno, so make sure you either set C<$!> |
| 1844 |
before the call to C<result>, or call c<errno> after it. |
| 1845 |
|
| 1846 |
=item feed $grp $callback->($grp) |
| 1847 |
|
| 1848 |
Sets a feeder/generator on this group: every group can have an attached |
| 1849 |
generator that generates requests if idle. The idea behind this is that, |
| 1850 |
although you could just queue as many requests as you want in a group, |
| 1851 |
this might starve other requests for a potentially long time. For example, |
| 1852 |
C<aio_scandir> might generate hundreds of thousands of C<aio_stat> |
| 1853 |
requests, delaying any later requests for a long time. |
| 1854 |
|
| 1855 |
To avoid this, and allow incremental generation of requests, you can |
| 1856 |
instead a group and set a feeder on it that generates those requests. The |
| 1857 |
feed callback will be called whenever there are few enough (see C<limit>, |
| 1858 |
below) requests active in the group itself and is expected to queue more |
| 1859 |
requests. |
| 1860 |
|
| 1861 |
The feed callback can queue as many requests as it likes (i.e. C<add> does |
| 1862 |
not impose any limits). |
| 1863 |
|
| 1864 |
If the feed does not queue more requests when called, it will be |
| 1865 |
automatically removed from the group. |
| 1866 |
|
| 1867 |
If the feed limit is C<0> when this method is called, it will be set to |
| 1868 |
C<2> automatically. |
| 1869 |
|
| 1870 |
Example: |
| 1871 |
|
| 1872 |
# stat all files in @files, but only ever use four aio requests concurrently: |
| 1873 |
|
| 1874 |
my $grp = aio_group sub { print "finished\n" }; |
| 1875 |
limit $grp 4; |
| 1876 |
feed $grp sub { |
| 1877 |
my $file = pop @files |
| 1878 |
or return; |
| 1879 |
|
| 1880 |
add $grp aio_stat $file, sub { ... }; |
| 1881 |
}; |
| 1882 |
|
| 1883 |
=item limit $grp $num |
| 1884 |
|
| 1885 |
Sets the feeder limit for the group: The feeder will be called whenever |
| 1886 |
the group contains less than this many requests. |
| 1887 |
|
| 1888 |
Setting the limit to C<0> will pause the feeding process. |
| 1889 |
|
| 1890 |
The default value for the limit is C<0>, but note that setting a feeder |
| 1891 |
automatically bumps it up to C<2>. |
| 1892 |
|
| 1893 |
=back |
| 1894 |
|
| 1895 |
|
| 1896 |
=head2 SUPPORT FUNCTIONS |
| 1897 |
|
| 1898 |
=head3 EVENT PROCESSING AND EVENT LOOP INTEGRATION |
| 1899 |
|
| 1900 |
=over 4 |
| 1901 |
|
| 1902 |
=item $fileno = IO::AIO::poll_fileno |
| 1903 |
|
| 1904 |
Return the I<request result pipe file descriptor>. This filehandle must be |
| 1905 |
polled for reading by some mechanism outside this module (e.g. EV, Glib, |
| 1906 |
select and so on, see below or the SYNOPSIS). If the pipe becomes readable |
| 1907 |
you have to call C<poll_cb> to check the results. |
| 1908 |
|
| 1909 |
See C<poll_cb> for an example. |
| 1910 |
|
| 1911 |
=item IO::AIO::poll_cb |
| 1912 |
|
| 1913 |
Process some requests that have reached the result phase (i.e. they have |
| 1914 |
been executed but the results are not yet reported). You have to call |
| 1915 |
this "regularly" to finish outstanding requests. |
| 1916 |
|
| 1917 |
Returns C<0> if all events could be processed (or there were no |
| 1918 |
events to process), or C<-1> if it returned earlier for whatever |
| 1919 |
reason. Returns immediately when no events are outstanding. The amount |
| 1920 |
of events processed depends on the settings of C<IO::AIO::max_poll_req>, |
| 1921 |
C<IO::AIO::max_poll_time> and C<IO::AIO::max_outstanding>. |
| 1922 |
|
| 1923 |
If not all requests were processed for whatever reason, the poll file |
| 1924 |
descriptor will still be ready when C<poll_cb> returns, so normally you |
| 1925 |
don't have to do anything special to have it called later. |
| 1926 |
|
| 1927 |
Apart from calling C<IO::AIO::poll_cb> when the event filehandle becomes |
| 1928 |
ready, it can be beneficial to call this function from loops which submit |
| 1929 |
a lot of requests, to make sure the results get processed when they become |
| 1930 |
available and not just when the loop is finished and the event loop takes |
| 1931 |
over again. This function returns very fast when there are no outstanding |
| 1932 |
requests. |
| 1933 |
|
| 1934 |
Example: Install an Event watcher that automatically calls |
| 1935 |
IO::AIO::poll_cb with high priority (more examples can be found in the |
| 1936 |
SYNOPSIS section, at the top of this document): |
| 1937 |
|
| 1938 |
Event->io (fd => IO::AIO::poll_fileno, |
| 1939 |
poll => 'r', async => 1, |
| 1940 |
cb => \&IO::AIO::poll_cb); |
| 1941 |
|
| 1942 |
=item IO::AIO::poll_wait |
| 1943 |
|
| 1944 |
Wait until either at least one request is in the result phase or no |
| 1945 |
requests are outstanding anymore. |
| 1946 |
|
| 1947 |
This is useful if you want to synchronously wait for some requests to |
| 1948 |
become ready, without actually handling them. |
| 1949 |
|
| 1950 |
See C<nreqs> for an example. |
| 1951 |
|
| 1952 |
=item IO::AIO::poll |
| 1953 |
|
| 1954 |
Waits until some requests have been handled. |
| 1955 |
|
| 1956 |
Returns the number of requests processed, but is otherwise strictly |
| 1957 |
equivalent to: |
| 1958 |
|
| 1959 |
IO::AIO::poll_wait, IO::AIO::poll_cb |
| 1960 |
|
| 1961 |
=item IO::AIO::flush |
| 1962 |
|
| 1963 |
Wait till all outstanding AIO requests have been handled. |
| 1964 |
|
| 1965 |
Strictly equivalent to: |
| 1966 |
|
| 1967 |
IO::AIO::poll_wait, IO::AIO::poll_cb |
| 1968 |
while IO::AIO::nreqs; |
| 1969 |
|
| 1970 |
This function can be useful at program aborts, to make sure outstanding |
| 1971 |
I/O has been done (C<IO::AIO> uses an C<END> block which already calls |
| 1972 |
this function on normal exits), or when you are merely using C<IO::AIO> |
| 1973 |
for its more advanced functions, rather than for async I/O, e.g.: |
| 1974 |
|
| 1975 |
my ($dirs, $nondirs); |
| 1976 |
IO::AIO::aio_scandir "/tmp", 0, sub { ($dirs, $nondirs) = @_ }; |
| 1977 |
IO::AIO::flush; |
| 1978 |
# $dirs, $nondirs are now set |
| 1979 |
|
| 1980 |
=item IO::AIO::max_poll_reqs $nreqs |
| 1981 |
|
| 1982 |
=item IO::AIO::max_poll_time $seconds |
| 1983 |
|
| 1984 |
These set the maximum number of requests (default C<0>, meaning infinity) |
| 1985 |
that are being processed by C<IO::AIO::poll_cb> in one call, respectively |
| 1986 |
the maximum amount of time (default C<0>, meaning infinity) spent in |
| 1987 |
C<IO::AIO::poll_cb> to process requests (more correctly the mininum amount |
| 1988 |
of time C<poll_cb> is allowed to use). |
| 1989 |
|
| 1990 |
Setting C<max_poll_time> to a non-zero value creates an overhead of one |
| 1991 |
syscall per request processed, which is not normally a problem unless your |
| 1992 |
callbacks are really really fast or your OS is really really slow (I am |
| 1993 |
not mentioning Solaris here). Using C<max_poll_reqs> incurs no overhead. |
| 1994 |
|
| 1995 |
Setting these is useful if you want to ensure some level of |
| 1996 |
interactiveness when perl is not fast enough to process all requests in |
| 1997 |
time. |
| 1998 |
|
| 1999 |
For interactive programs, values such as C<0.01> to C<0.1> should be fine. |
| 2000 |
|
| 2001 |
Example: Install an Event watcher that automatically calls |
| 2002 |
IO::AIO::poll_cb with low priority, to ensure that other parts of the |
| 2003 |
program get the CPU sometimes even under high AIO load. |
| 2004 |
|
| 2005 |
# try not to spend much more than 0.1s in poll_cb |
| 2006 |
IO::AIO::max_poll_time 0.1; |
| 2007 |
|
| 2008 |
# use a low priority so other tasks have priority |
| 2009 |
Event->io (fd => IO::AIO::poll_fileno, |
| 2010 |
poll => 'r', nice => 1, |
| 2011 |
cb => &IO::AIO::poll_cb); |
| 2012 |
|
| 2013 |
=back |
| 2014 |
|
| 2015 |
|
| 2016 |
=head3 CONTROLLING THE NUMBER OF THREADS |
| 2017 |
|
| 2018 |
=over |
| 2019 |
|
| 2020 |
=item IO::AIO::min_parallel $nthreads |
| 2021 |
|
| 2022 |
Set the minimum number of AIO threads to C<$nthreads>. The current |
| 2023 |
default is C<8>, which means eight asynchronous operations can execute |
| 2024 |
concurrently at any one time (the number of outstanding requests, |
| 2025 |
however, is unlimited). |
| 2026 |
|
| 2027 |
IO::AIO starts threads only on demand, when an AIO request is queued and |
| 2028 |
no free thread exists. Please note that queueing up a hundred requests can |
| 2029 |
create demand for a hundred threads, even if it turns out that everything |
| 2030 |
is in the cache and could have been processed faster by a single thread. |
| 2031 |
|
| 2032 |
It is recommended to keep the number of threads relatively low, as some |
| 2033 |
Linux kernel versions will scale negatively with the number of threads |
| 2034 |
(higher parallelity => MUCH higher latency). With current Linux 2.6 |
| 2035 |
versions, 4-32 threads should be fine. |
| 2036 |
|
| 2037 |
Under most circumstances you don't need to call this function, as the |
| 2038 |
module selects a default that is suitable for low to moderate load. |
| 2039 |
|
| 2040 |
=item IO::AIO::max_parallel $nthreads |
| 2041 |
|
| 2042 |
Sets the maximum number of AIO threads to C<$nthreads>. If more than the |
| 2043 |
specified number of threads are currently running, this function kills |
| 2044 |
them. This function blocks until the limit is reached. |
| 2045 |
|
| 2046 |
While C<$nthreads> are zero, aio requests get queued but not executed |
| 2047 |
until the number of threads has been increased again. |
| 2048 |
|
| 2049 |
This module automatically runs C<max_parallel 0> at program end, to ensure |
| 2050 |
that all threads are killed and that there are no outstanding requests. |
| 2051 |
|
| 2052 |
Under normal circumstances you don't need to call this function. |
| 2053 |
|
| 2054 |
=item IO::AIO::max_idle $nthreads |
| 2055 |
|
| 2056 |
Limit the number of threads (default: 4) that are allowed to idle |
| 2057 |
(i.e., threads that did not get a request to process within the idle |
| 2058 |
timeout (default: 10 seconds). That means if a thread becomes idle while |
| 2059 |
C<$nthreads> other threads are also idle, it will free its resources and |
| 2060 |
exit. |
| 2061 |
|
| 2062 |
This is useful when you allow a large number of threads (e.g. 100 or 1000) |
| 2063 |
to allow for extremely high load situations, but want to free resources |
| 2064 |
under normal circumstances (1000 threads can easily consume 30MB of RAM). |
| 2065 |
|
| 2066 |
The default is probably ok in most situations, especially if thread |
| 2067 |
creation is fast. If thread creation is very slow on your system you might |
| 2068 |
want to use larger values. |
| 2069 |
|
| 2070 |
=item IO::AIO::idle_timeout $seconds |
| 2071 |
|
| 2072 |
Sets the minimum idle timeout (default 10) after which worker threads are |
| 2073 |
allowed to exit. SEe C<IO::AIO::max_idle>. |
| 2074 |
|
| 2075 |
=item IO::AIO::max_outstanding $maxreqs |
| 2076 |
|
| 2077 |
Sets the maximum number of outstanding requests to C<$nreqs>. If |
| 2078 |
you do queue up more than this number of requests, the next call to |
| 2079 |
C<IO::AIO::poll_cb> (and other functions calling C<poll_cb>, such as |
| 2080 |
C<IO::AIO::flush> or C<IO::AIO::poll>) will block until the limit is no |
| 2081 |
longer exceeded. |
| 2082 |
|
| 2083 |
In other words, this setting does not enforce a queue limit, but can be |
| 2084 |
used to make poll functions block if the limit is exceeded. |
| 2085 |
|
| 2086 |
This is a bad function to use in interactive programs because it blocks, |
| 2087 |
and a bad way to reduce concurrency because it is inexact. If you need to |
| 2088 |
issue many requests without being able to call a poll function on demand, |
| 2089 |
it is better to use an C<aio_group> together with a feed callback. |
| 2090 |
|
| 2091 |
Its main use is in scripts without an event loop - when you want to stat a |
| 2092 |
lot of files, you can write something like this: |
| 2093 |
|
| 2094 |
IO::AIO::max_outstanding 32; |
| 2095 |
|
| 2096 |
for my $path (...) { |
| 2097 |
aio_stat $path , ...; |
| 2098 |
IO::AIO::poll_cb; |
| 2099 |
} |
| 2100 |
|
| 2101 |
IO::AIO::flush; |
| 2102 |
|
| 2103 |
The call to C<poll_cb> inside the loop will normally return instantly, |
| 2104 |
allowing the loop to progress, but as soon as more than C<32> requests |
| 2105 |
are in-flight, it will block until some requests have been handled. This |
| 2106 |
keeps the loop from pushing a large number of C<aio_stat> requests onto |
| 2107 |
the queue (which, with many paths to stat, can use up a lot of memory). |
| 2108 |
|
| 2109 |
The default value for C<max_outstanding> is very large, so there is no |
| 2110 |
practical limit on the number of outstanding requests. |
| 2111 |
|
| 2112 |
=back |
| 2113 |
|
| 2114 |
|
| 2115 |
=head3 STATISTICAL INFORMATION |
| 2116 |
|
| 2117 |
=over |
| 2118 |
|
| 2119 |
=item IO::AIO::nreqs |
| 2120 |
|
| 2121 |
Returns the number of requests currently in the ready, execute or pending |
| 2122 |
states (i.e. for which their callback has not been invoked yet). |
| 2123 |
|
| 2124 |
Example: wait till there are no outstanding requests anymore: |
| 2125 |
|
| 2126 |
IO::AIO::poll_wait, IO::AIO::poll_cb |
| 2127 |
while IO::AIO::nreqs; |
| 2128 |
|
| 2129 |
=item IO::AIO::nready |
| 2130 |
|
| 2131 |
Returns the number of requests currently in the ready state (not yet |
| 2132 |
executed). |
| 2133 |
|
| 2134 |
=item IO::AIO::npending |
| 2135 |
|
| 2136 |
Returns the number of requests currently in the pending state (executed, |
| 2137 |
but not yet processed by poll_cb). |
| 2138 |
|
| 2139 |
=back |
| 2140 |
|
| 2141 |
|
| 2142 |
=head3 SUBSECOND STAT TIME ACCESS |
| 2143 |
|
| 2144 |
Both C<aio_stat>/C<aio_lstat> and perl's C<stat>/C<lstat> functions can |
| 2145 |
generally find access/modification and change times with subsecond time |
| 2146 |
accuracy of the system supports it, but perl's built-in functions only |
| 2147 |
return the integer part. |
| 2148 |
|
| 2149 |
The following functions return the timestamps of the most recent |
| 2150 |
stat with subsecond precision on most systems and work both after |
| 2151 |
C<aio_stat>/C<aio_lstat> and perl's C<stat>/C<lstat> calls. Their return |
| 2152 |
value is only meaningful after a successful C<stat>/C<lstat> call, or |
| 2153 |
during/after a successful C<aio_stat>/C<aio_lstat> callback. |
| 2154 |
|
| 2155 |
This is similar to the L<Time::HiRes> C<stat> functions, but can return |
| 2156 |
full resolution without rounding and work with standard perl C<stat>, |
| 2157 |
alleviating the need to call the special C<Time::HiRes> functions, which |
| 2158 |
do not act like their perl counterparts. |
| 2159 |
|
| 2160 |
On operating systems or file systems where subsecond time resolution is |
| 2161 |
not supported or could not be detected, a fractional part of C<0> is |
| 2162 |
returned, so it is always safe to call these functions. |
| 2163 |
|
| 2164 |
=over 4 |
| 2165 |
|
| 2166 |
=item $seconds = IO::AIO::st_atime, IO::AIO::st_mtime, IO::AIO::st_ctime, IO::AIO::st_btime |
| 2167 |
|
| 2168 |
Return the access, modication, change or birth time, respectively, |
| 2169 |
including fractional part. Due to the limited precision of floating point, |
| 2170 |
the accuracy on most platforms is only a bit better than milliseconds |
| 2171 |
for times around now - see the I<nsec> function family, below, for full |
| 2172 |
accuracy. |
| 2173 |
|
| 2174 |
File birth time is only available when the OS and perl support it (on |
| 2175 |
FreeBSD and NetBSD at the time of this writing, although support is |
| 2176 |
adaptive, so if your OS/perl gains support, IO::AIO can take advantage of |
| 2177 |
it). On systems where it isn't available, C<0> is currently returned, but |
| 2178 |
this might change to C<undef> in a future version. |
| 2179 |
|
| 2180 |
=item ($atime, $mtime, $ctime, $btime, ...) = IO::AIO::st_xtime |
| 2181 |
|
| 2182 |
Returns access, modification, change and birth time all in one go, and |
| 2183 |
maybe more times in the future version. |
| 2184 |
|
| 2185 |
=item $nanoseconds = IO::AIO::st_atimensec, IO::AIO::st_mtimensec, IO::AIO::st_ctimensec, IO::AIO::st_btimensec |
| 2186 |
|
| 2187 |
Return the fractional access, modifcation, change or birth time, in nanoseconds, |
| 2188 |
as an integer in the range C<0> to C<999999999>. |
| 2189 |
|
| 2190 |
Note that no accessors are provided for access, modification and |
| 2191 |
change times - you need to get those from C<stat _> if required (C<int |
| 2192 |
IO::AIO::st_atime> and so on will I<not> generally give you the correct |
| 2193 |
value). |
| 2194 |
|
| 2195 |
=item $seconds = IO::AIO::st_btimesec |
| 2196 |
|
| 2197 |
The (integral) seconds part of the file birth time, if available. |
| 2198 |
|
| 2199 |
=item ($atime, $mtime, $ctime, $btime, ...) = IO::AIO::st_xtimensec |
| 2200 |
|
| 2201 |
Like the functions above, but returns all four times in one go (and maybe |
| 2202 |
more in future versions). |
| 2203 |
|
| 2204 |
=item $counter = IO::AIO::st_gen |
| 2205 |
|
| 2206 |
Returns the generation counter (in practice this is just a random number) |
| 2207 |
of the file. This is only available on platforms which have this member in |
| 2208 |
their C<struct stat> (most BSDs at the time of this writing) and generally |
| 2209 |
only to the root usert. If unsupported, C<0> is returned, but this might |
| 2210 |
change to C<undef> in a future version. |
| 2211 |
|
| 2212 |
=back |
| 2213 |
|
| 2214 |
Example: print the high resolution modification time of F</etc>, using |
| 2215 |
C<stat>, and C<IO::AIO::aio_stat>. |
| 2216 |
|
| 2217 |
if (stat "/etc") { |
| 2218 |
printf "stat(/etc) mtime: %f\n", IO::AIO::st_mtime; |
| 2219 |
} |
| 2220 |
|
| 2221 |
IO::AIO::aio_stat "/etc", sub { |
| 2222 |
$_[0] |
| 2223 |
and return; |
| 2224 |
|
| 2225 |
printf "aio_stat(/etc) mtime: %d.%09d\n", (stat _)[9], IO::AIO::st_mtimensec; |
| 2226 |
}; |
| 2227 |
|
| 2228 |
IO::AIO::flush; |
| 2229 |
|
| 2230 |
Output of the awbove on my system, showing reduced and full accuracy: |
| 2231 |
|
| 2232 |
stat(/etc) mtime: 1534043702.020808 |
| 2233 |
aio_stat(/etc) mtime: 1534043702.020807792 |
| 2234 |
|
| 2235 |
|
| 2236 |
=head3 MISCELLANEOUS FUNCTIONS |
| 2237 |
|
| 2238 |
IO::AIO implements some functions that are useful when you want to use |
| 2239 |
some "Advanced I/O" function not available to in Perl, without going the |
| 2240 |
"Asynchronous I/O" route. Many of these have an asynchronous C<aio_*> |
| 2241 |
counterpart. |
| 2242 |
|
| 2243 |
=over 4 |
| 2244 |
|
| 2245 |
=item $retval = IO::AIO::fexecve $fh, $argv, $envp |
| 2246 |
|
| 2247 |
A more-or-less direct equivalent to the POSIX C<fexecve> functions, which |
| 2248 |
allows you to specify the program to be executed via a file descriptor (or |
| 2249 |
handle). Returns C<-1> and sets errno to C<ENOSYS> if not available. |
| 2250 |
|
| 2251 |
=item $retval = IO::AIO::mount $special, $path, $fstype, $flags = 0, $data = undef |
| 2252 |
|
| 2253 |
Calls the GNU/Linux mount syscall with the given arguments. All except |
| 2254 |
C<$flags> are strings, and if C<$data> is C<undef>, a C<NULL> will be |
| 2255 |
passed. |
| 2256 |
|
| 2257 |
The following values for C<$flags> are available: |
| 2258 |
|
| 2259 |
C<IO::AIO::MS_RDONLY>, C<IO::AIO::MS_NOSUID>, C<IO::AIO::MS_NODEV>, C<IO::AIO::MS_NOEXEC>, C<IO::AIO::MS_SYNCHRONOUS>, |
| 2260 |
C<IO::AIO::MS_REMOUNT>, C<IO::AIO::MS_MANDLOCK>, C<IO::AIO::MS_DIRSYNC>, C<IO::AIO::MS_NOATIME>, |
| 2261 |
C<IO::AIO::MS_NODIRATIME>, C<IO::AIO::MS_BIND>, C<IO::AIO::MS_MOVE>, C<IO::AIO::MS_REC>, C<IO::AIO::MS_SILENT>, |
| 2262 |
C<IO::AIO::MS_POSIXACL>, C<IO::AIO::MS_UNBINDABLE>, C<IO::AIO::MS_PRIVATE>, C<IO::AIO::MS_SLAVE>, C<IO::AIO::MS_SHARED>, |
| 2263 |
C<IO::AIO::MS_RELATIME>, C<IO::AIO::MS_KERNMOUNT>, C<IO::AIO::MS_I_VERSION>, C<IO::AIO::MS_STRICTATIME>, |
| 2264 |
C<IO::AIO::MS_LAZYTIME>, C<IO::AIO::MS_ACTIVE>, C<IO::AIO::MS_NOUSER>, C<IO::AIO::MS_RMT_MASK>, C<IO::AIO::MS_MGC_VAL> and |
| 2265 |
C<IO::AIO::MS_MGC_MSK>. |
| 2266 |
|
| 2267 |
=item $retval = IO::AIO::umount $path, $flags = 0 |
| 2268 |
|
| 2269 |
Invokes the GNU/Linux C<umount> or C<umount2> syscalls. Always calls |
| 2270 |
C<umount> if C<$flags> is C<0>, otherwqise always tries to call |
| 2271 |
C<umount2>. |
| 2272 |
|
| 2273 |
The following C<$flags> are available: |
| 2274 |
|
| 2275 |
C<IO::AIO::MNT_FORCE>, C<IO::AIO::MNT_DETACH>, C<IO::AIO::MNT_EXPIRE> and C<IO::AIO::UMOUNT_NOFOLLOW>. |
| 2276 |
|
| 2277 |
=item $numfd = IO::AIO::get_fdlimit |
| 2278 |
|
| 2279 |
Tries to find the current file descriptor limit and returns it, or |
| 2280 |
C<undef> and sets C<$!> in case of an error. The limit is one larger than |
| 2281 |
the highest valid file descriptor number. |
| 2282 |
|
| 2283 |
=item IO::AIO::min_fdlimit [$numfd] |
| 2284 |
|
| 2285 |
Try to increase the current file descriptor limit(s) to at least C<$numfd> |
| 2286 |
by changing the soft or hard file descriptor resource limit. If C<$numfd> |
| 2287 |
is missing, it will try to set a very high limit, although this is not |
| 2288 |
recommended when you know the actual minimum that you require. |
| 2289 |
|
| 2290 |
If the limit cannot be raised enough, the function makes a best-effort |
| 2291 |
attempt to increase the limit as much as possible, using various |
| 2292 |
tricks, while still failing. You can query the resulting limit using |
| 2293 |
C<IO::AIO::get_fdlimit>. |
| 2294 |
|
| 2295 |
If an error occurs, returns C<undef> and sets C<$!>, otherwise returns |
| 2296 |
true. |
| 2297 |
|
| 2298 |
=item IO::AIO::sendfile $ofh, $ifh, $offset, $count |
| 2299 |
|
| 2300 |
Calls the C<eio_sendfile_sync> function, which is like C<aio_sendfile>, |
| 2301 |
but is blocking (this makes most sense if you know the input data is |
| 2302 |
likely cached already and the output filehandle is set to non-blocking |
| 2303 |
operations). |
| 2304 |
|
| 2305 |
Returns the number of bytes copied, or C<-1> on error. |
| 2306 |
|
| 2307 |
=item IO::AIO::fadvise $fh, $offset, $len, $advice |
| 2308 |
|
| 2309 |
Simply calls the C<posix_fadvise> function (see its |
| 2310 |
manpage for details). The following advice constants are |
| 2311 |
available: C<IO::AIO::FADV_NORMAL>, C<IO::AIO::FADV_SEQUENTIAL>, |
| 2312 |
C<IO::AIO::FADV_RANDOM>, C<IO::AIO::FADV_NOREUSE>, |
| 2313 |
C<IO::AIO::FADV_WILLNEED>, C<IO::AIO::FADV_DONTNEED>. |
| 2314 |
|
| 2315 |
On systems that do not implement C<posix_fadvise>, this function returns |
| 2316 |
ENOSYS, otherwise the return value of C<posix_fadvise>. |
| 2317 |
|
| 2318 |
=item IO::AIO::madvise $scalar, $offset, $len, $advice |
| 2319 |
|
| 2320 |
Simply calls the C<posix_madvise> function (see its |
| 2321 |
manpage for details). The following advice constants are |
| 2322 |
available: C<IO::AIO::MADV_NORMAL>, C<IO::AIO::MADV_SEQUENTIAL>, |
| 2323 |
C<IO::AIO::MADV_RANDOM>, C<IO::AIO::MADV_WILLNEED>, |
| 2324 |
C<IO::AIO::MADV_DONTNEED>. |
| 2325 |
|
| 2326 |
If C<$offset> is negative, counts from the end. If C<$length> is negative, |
| 2327 |
the remaining length of the C<$scalar> is used. If possible, C<$length> |
| 2328 |
will be reduced to fit into the C<$scalar>. |
| 2329 |
|
| 2330 |
On systems that do not implement C<posix_madvise>, this function returns |
| 2331 |
ENOSYS, otherwise the return value of C<posix_madvise>. |
| 2332 |
|
| 2333 |
=item IO::AIO::mprotect $scalar, $offset, $len, $protect |
| 2334 |
|
| 2335 |
Simply calls the C<mprotect> function on the preferably AIO::mmap'ed |
| 2336 |
$scalar (see its manpage for details). The following protect |
| 2337 |
constants are available: C<IO::AIO::PROT_NONE>, C<IO::AIO::PROT_READ>, |
| 2338 |
C<IO::AIO::PROT_WRITE>, C<IO::AIO::PROT_EXEC>. |
| 2339 |
|
| 2340 |
If C<$offset> is negative, counts from the end. If C<$length> is negative, |
| 2341 |
the remaining length of the C<$scalar> is used. If possible, C<$length> |
| 2342 |
will be reduced to fit into the C<$scalar>. |
| 2343 |
|
| 2344 |
On systems that do not implement C<mprotect>, this function returns |
| 2345 |
ENOSYS, otherwise the return value of C<mprotect>. |
| 2346 |
|
| 2347 |
=item IO::AIO::mmap $scalar, $length, $prot, $flags, $fh[, $offset] |
| 2348 |
|
| 2349 |
Memory-maps a file (or anonymous memory range) and attaches it to the |
| 2350 |
given C<$scalar>, which will act like a string scalar. Returns true on |
| 2351 |
success, and false otherwise. |
| 2352 |
|
| 2353 |
The scalar must exist, but its contents do not matter - this means you |
| 2354 |
cannot use a nonexistant array or hash element. When in doubt, C<undef> |
| 2355 |
the scalar first. |
| 2356 |
|
| 2357 |
The only operations allowed on the mmapped scalar are C<substr>/C<vec>, |
| 2358 |
which don't change the string length, and most read-only operations such |
| 2359 |
as copying it or searching it with regexes and so on. |
| 2360 |
|
| 2361 |
Anything else is unsafe and will, at best, result in memory leaks. |
| 2362 |
|
| 2363 |
The memory map associated with the C<$scalar> is automatically removed |
| 2364 |
when the C<$scalar> is undef'd or destroyed, or when the C<IO::AIO::mmap> |
| 2365 |
or C<IO::AIO::munmap> functions are called on it. |
| 2366 |
|
| 2367 |
This calls the C<mmap>(2) function internally. See your system's manual |
| 2368 |
page for details on the C<$length>, C<$prot> and C<$flags> parameters. |
| 2369 |
|
| 2370 |
The C<$length> must be larger than zero and smaller than the actual |
| 2371 |
filesize. |
| 2372 |
|
| 2373 |
C<$prot> is a combination of C<IO::AIO::PROT_NONE>, C<IO::AIO::PROT_EXEC>, |
| 2374 |
C<IO::AIO::PROT_READ> and/or C<IO::AIO::PROT_WRITE>, |
| 2375 |
|
| 2376 |
C<$flags> can be a combination of |
| 2377 |
C<IO::AIO::MAP_SHARED> or |
| 2378 |
C<IO::AIO::MAP_PRIVATE>, |
| 2379 |
or a number of system-specific flags (when not available, the are C<0>): |
| 2380 |
C<IO::AIO::MAP_ANONYMOUS> (which is set to C<MAP_ANON> if your system only provides this constant), |
| 2381 |
C<IO::AIO::MAP_LOCKED>, |
| 2382 |
C<IO::AIO::MAP_NORESERVE>, |
| 2383 |
C<IO::AIO::MAP_POPULATE>, |
| 2384 |
C<IO::AIO::MAP_NONBLOCK>, |
| 2385 |
C<IO::AIO::MAP_FIXED>, |
| 2386 |
C<IO::AIO::MAP_GROWSDOWN>, |
| 2387 |
C<IO::AIO::MAP_32BIT>, |
| 2388 |
C<IO::AIO::MAP_HUGETLB>, |
| 2389 |
C<IO::AIO::MAP_STACK>, |
| 2390 |
C<IO::AIO::MAP_FIXED_NOREPLACE>, |
| 2391 |
C<IO::AIO::MAP_SHARED_VALIDATE>, |
| 2392 |
C<IO::AIO::MAP_SYNC> or |
| 2393 |
C<IO::AIO::MAP_UNINITIALIZED>. |
| 2394 |
|
| 2395 |
If C<$fh> is C<undef>, then a file descriptor of C<-1> is passed. |
| 2396 |
|
| 2397 |
C<$offset> is the offset from the start of the file - it generally must be |
| 2398 |
a multiple of C<IO::AIO::PAGESIZE> and defaults to C<0>. |
| 2399 |
|
| 2400 |
Example: |
| 2401 |
|
| 2402 |
use Digest::MD5; |
| 2403 |
use IO::AIO; |
| 2404 |
|
| 2405 |
open my $fh, "<verybigfile" |
| 2406 |
or die "$!"; |
| 2407 |
|
| 2408 |
IO::AIO::mmap my $data, -s $fh, IO::AIO::PROT_READ, IO::AIO::MAP_SHARED, $fh |
| 2409 |
or die "verybigfile: $!"; |
| 2410 |
|
| 2411 |
my $fast_md5 = md5 $data; |
| 2412 |
|
| 2413 |
=item IO::AIO::munmap $scalar |
| 2414 |
|
| 2415 |
Removes a previous mmap and undefines the C<$scalar>. |
| 2416 |
|
| 2417 |
=item IO::AIO::mremap $scalar, $new_length, $flags = MREMAP_MAYMOVE[, $new_address = 0] |
| 2418 |
|
| 2419 |
Calls the Linux-specific mremap(2) system call. The C<$scalar> must have |
| 2420 |
been mapped by C<IO::AIO::mmap>, and C<$flags> must currently either be |
| 2421 |
C<0> or C<IO::AIO::MREMAP_MAYMOVE>. |
| 2422 |
|
| 2423 |
Returns true if successful, and false otherwise. If the underlying mmapped |
| 2424 |
region has changed address, then the true value has the numerical value |
| 2425 |
C<1>, otherwise it has the numerical value C<0>: |
| 2426 |
|
| 2427 |
my $success = IO::AIO::mremap $mmapped, 8192, IO::AIO::MREMAP_MAYMOVE |
| 2428 |
or die "mremap: $!"; |
| 2429 |
|
| 2430 |
if ($success*1) { |
| 2431 |
warn "scalar has chanegd address in memory\n"; |
| 2432 |
} |
| 2433 |
|
| 2434 |
C<IO::AIO::MREMAP_FIXED> and the C<$new_address> argument are currently |
| 2435 |
implemented, but not supported and might go away in a future version. |
| 2436 |
|
| 2437 |
On systems where this call is not supported or is not emulated, this call |
| 2438 |
returns falls and sets C<$!> to C<ENOSYS>. |
| 2439 |
|
| 2440 |
=item IO::AIO::mlockall $flags |
| 2441 |
|
| 2442 |
Calls the C<eio_mlockall_sync> function, which is like C<aio_mlockall>, |
| 2443 |
but is blocking. |
| 2444 |
|
| 2445 |
=item IO::AIO::munlock $scalar, $offset = 0, $length = undef |
| 2446 |
|
| 2447 |
Calls the C<munlock> function, undoing the effects of a previous |
| 2448 |
C<aio_mlock> call (see its description for details). |
| 2449 |
|
| 2450 |
=item IO::AIO::munlockall |
| 2451 |
|
| 2452 |
Calls the C<munlockall> function. |
| 2453 |
|
| 2454 |
On systems that do not implement C<munlockall>, this function returns |
| 2455 |
ENOSYS, otherwise the return value of C<munlockall>. |
| 2456 |
|
| 2457 |
=item $fh = IO::AIO::accept4 $r_fh, $sockaddr, $sockaddr_maxlen, $flags |
| 2458 |
|
| 2459 |
Uses the GNU/Linux C<accept4(2)> syscall, if available, to accept a socket |
| 2460 |
and return the new file handle on success, or sets C<$!> and returns |
| 2461 |
C<undef> on error. |
| 2462 |
|
| 2463 |
The remote name of the new socket will be stored in C<$sockaddr>, which |
| 2464 |
will be extended to allow for at least C<$sockaddr_maxlen> octets. If the |
| 2465 |
socket name does not fit into C<$sockaddr_maxlen> octets, this is signaled |
| 2466 |
by returning a longer string in C<$sockaddr>, which might or might not be |
| 2467 |
truncated. |
| 2468 |
|
| 2469 |
To accept name-less sockets, use C<undef> for C<$sockaddr> and C<0> for |
| 2470 |
C<$sockaddr_maxlen>. |
| 2471 |
|
| 2472 |
The main reasons to use this syscall rather than portable C<accept(2)> |
| 2473 |
are that you can specify C<SOCK_NONBLOCK> and/or C<SOCK_CLOEXEC> |
| 2474 |
flags and you can accept name-less sockets by specifying C<0> for |
| 2475 |
C<$sockaddr_maxlen>, which is sadly not possible with perl's interface to |
| 2476 |
C<accept>. |
| 2477 |
|
| 2478 |
=item IO::AIO::splice $r_fh, $r_off, $w_fh, $w_off, $length, $flags |
| 2479 |
|
| 2480 |
Calls the GNU/Linux C<splice(2)> syscall, if available. If C<$r_off> or |
| 2481 |
C<$w_off> are C<undef>, then C<NULL> is passed for these, otherwise they |
| 2482 |
should be the file offset. |
| 2483 |
|
| 2484 |
C<$r_fh> and C<$w_fh> should not refer to the same file, as splice might |
| 2485 |
silently corrupt the data in this case. |
| 2486 |
|
| 2487 |
The following symbol flag values are available: C<IO::AIO::SPLICE_F_MOVE>, |
| 2488 |
C<IO::AIO::SPLICE_F_NONBLOCK>, C<IO::AIO::SPLICE_F_MORE> and |
| 2489 |
C<IO::AIO::SPLICE_F_GIFT>. |
| 2490 |
|
| 2491 |
See the C<splice(2)> manpage for details. |
| 2492 |
|
| 2493 |
=item IO::AIO::tee $r_fh, $w_fh, $length, $flags |
| 2494 |
|
| 2495 |
Calls the GNU/Linux C<tee(2)> syscall, see its manpage and the |
| 2496 |
description for C<IO::AIO::splice> above for details. |
| 2497 |
|
| 2498 |
=item $actual_size = IO::AIO::pipesize $r_fh[, $new_size] |
| 2499 |
|
| 2500 |
Attempts to query or change the pipe buffer size. Obviously works only |
| 2501 |
on pipes, and currently works only on GNU/Linux systems, and fails with |
| 2502 |
C<-1>/C<ENOSYS> everywhere else. If anybody knows how to influence pipe buffer |
| 2503 |
size on other systems, drop me a note. |
| 2504 |
|
| 2505 |
=item ($rfh, $wfh) = IO::AIO::pipe2 [$flags] |
| 2506 |
|
| 2507 |
This is a direct interface to the Linux L<pipe2(2)> system call. If |
| 2508 |
C<$flags> is missing or C<0>, then this should be the same as a call to |
| 2509 |
perl's built-in C<pipe> function and create a new pipe, and works on |
| 2510 |
systems that lack the pipe2 syscall. On win32, this case invokes C<_pipe |
| 2511 |
(..., 4096, O_BINARY)>. |
| 2512 |
|
| 2513 |
If C<$flags> is non-zero, it tries to invoke the pipe2 system call with |
| 2514 |
the given flags (Linux 2.6.27, glibc 2.9). |
| 2515 |
|
| 2516 |
On success, the read and write file handles are returned. |
| 2517 |
|
| 2518 |
On error, nothing will be returned. If the pipe2 syscall is missing and |
| 2519 |
C<$flags> is non-zero, fails with C<ENOSYS>. |
| 2520 |
|
| 2521 |
Please refer to L<pipe2(2)> for more info on the C<$flags>, but at the |
| 2522 |
time of this writing, C<IO::AIO::O_CLOEXEC>, C<IO::AIO::O_NONBLOCK> and |
| 2523 |
C<IO::AIO::O_DIRECT> (Linux 3.4, for packet-based pipes) were supported. |
| 2524 |
|
| 2525 |
Example: create a pipe race-free w.r.t. threads and fork: |
| 2526 |
|
| 2527 |
my ($rfh, $wfh) = IO::AIO::pipe2 IO::AIO::O_CLOEXEC |
| 2528 |
or die "pipe2: $!\n"; |
| 2529 |
|
| 2530 |
=item $fh = IO::AIO::memfd_create $pathname[, $flags] |
| 2531 |
|
| 2532 |
This is a direct interface to the Linux L<memfd_create(2)> system |
| 2533 |
call. The (unhelpful) default for C<$flags> is C<0>, but your default |
| 2534 |
should be C<IO::AIO::MFD_CLOEXEC>. |
| 2535 |
|
| 2536 |
On success, the new memfd filehandle is returned, otherwise returns |
| 2537 |
C<undef>. If the memfd_create syscall is missing, fails with C<ENOSYS>. |
| 2538 |
|
| 2539 |
Please refer to L<memfd_create(2)> for more info on this call. |
| 2540 |
|
| 2541 |
The following C<$flags> values are available: C<IO::AIO::MFD_CLOEXEC>, |
| 2542 |
C<IO::AIO::MFD_ALLOW_SEALING>, C<IO::AIO::MFD_HUGETLB>, |
| 2543 |
C<IO::AIO::MFD_HUGETLB_2MB> and C<IO::AIO::MFD_HUGETLB_1GB>. |
| 2544 |
|
| 2545 |
Example: create a new memfd. |
| 2546 |
|
| 2547 |
my $fh = IO::AIO::memfd_create "somenameforprocfd", IO::AIO::MFD_CLOEXEC |
| 2548 |
or die "memfd_create: $!\n"; |
| 2549 |
|
| 2550 |
=item $fh = IO::AIO::pidfd_open $pid[, $flags] |
| 2551 |
|
| 2552 |
This is an interface to the Linux L<pidfd_open(2)> system call. The |
| 2553 |
default for C<$flags> is C<0>. |
| 2554 |
|
| 2555 |
On success, a new pidfd filehandle is returned (that is already set to |
| 2556 |
close-on-exec), otherwise returns C<undef>. If the syscall is missing, |
| 2557 |
fails with C<ENOSYS>. |
| 2558 |
|
| 2559 |
Example: open pid 6341 as pidfd. |
| 2560 |
|
| 2561 |
my $fh = IO::AIO::pidfd_open 6341 |
| 2562 |
or die "pidfd_open: $!\n"; |
| 2563 |
|
| 2564 |
=item $status = IO::AIO::pidfd_send_signal $pidfh, $signal[, $siginfo[, $flags]] |
| 2565 |
|
| 2566 |
This is an interface to the Linux L<pidfd_send_signal> system call. The |
| 2567 |
default for C<$siginfo> is C<undef> and the default for C<$flags> is C<0>. |
| 2568 |
|
| 2569 |
Returns the system call status. If the syscall is missing, fails with |
| 2570 |
C<ENOSYS>. |
| 2571 |
|
| 2572 |
When specified, C<$siginfo> must be a reference to a hash with one or more |
| 2573 |
of the following members: |
| 2574 |
|
| 2575 |
=over |
| 2576 |
|
| 2577 |
=item code - the C<si_code> member |
| 2578 |
|
| 2579 |
=item pid - the C<si_pid> member |
| 2580 |
|
| 2581 |
=item uid - the C<si_uid> member |
| 2582 |
|
| 2583 |
=item value_int - the C<si_value.sival_int> member |
| 2584 |
|
| 2585 |
=item value_ptr - the C<si_value.sival_ptr> member, specified as an integer |
| 2586 |
|
| 2587 |
=back |
| 2588 |
|
| 2589 |
Example: send a SIGKILL to the specified process. |
| 2590 |
|
| 2591 |
my $status = IO::AIO::pidfd_send_signal $pidfh, 9, undef |
| 2592 |
and die "pidfd_send_signal: $!\n"; |
| 2593 |
|
| 2594 |
Example: send a SIGKILL to the specified process with extra data. |
| 2595 |
|
| 2596 |
my $status = IO::AIO::pidfd_send_signal $pidfh, 9, { code => -1, value_int => 7 } |
| 2597 |
and die "pidfd_send_signal: $!\n"; |
| 2598 |
|
| 2599 |
=item $fh = IO::AIO::pidfd_getfd $pidfh, $targetfd[, $flags] |
| 2600 |
|
| 2601 |
This is an interface to the Linux L<pidfd_getfd> system call. The default |
| 2602 |
for C<$flags> is C<0>. |
| 2603 |
|
| 2604 |
On success, returns a dup'ed copy of the target file descriptor (specified |
| 2605 |
as an integer) returned (that is already set to close-on-exec), otherwise |
| 2606 |
returns C<undef>. If the syscall is missing, fails with C<ENOSYS>. |
| 2607 |
|
| 2608 |
Example: get a copy of standard error of another process and print soemthing to it. |
| 2609 |
|
| 2610 |
my $errfh = IO::AIO::pidfd_getfd $pidfh, 2 |
| 2611 |
or die "pidfd_getfd: $!\n"; |
| 2612 |
print $errfh "stderr\n"; |
| 2613 |
|
| 2614 |
=item $fh = IO::AIO::eventfd [$initval, [$flags]] |
| 2615 |
|
| 2616 |
This is a direct interface to the Linux L<eventfd(2)> system call. The |
| 2617 |
(unhelpful) defaults for C<$initval> and C<$flags> are C<0> for both. |
| 2618 |
|
| 2619 |
On success, the new eventfd filehandle is returned, otherwise returns |
| 2620 |
C<undef>. If the eventfd syscall is missing, fails with C<ENOSYS>. |
| 2621 |
|
| 2622 |
Please refer to L<eventfd(2)> for more info on this call. |
| 2623 |
|
| 2624 |
The following symbol flag values are available: C<IO::AIO::EFD_CLOEXEC>, |
| 2625 |
C<IO::AIO::EFD_NONBLOCK> and C<IO::AIO::EFD_SEMAPHORE> (Linux 2.6.30). |
| 2626 |
|
| 2627 |
Example: create a new eventfd filehandle: |
| 2628 |
|
| 2629 |
$fh = IO::AIO::eventfd 0, IO::AIO::EFD_CLOEXEC |
| 2630 |
or die "eventfd: $!\n"; |
| 2631 |
|
| 2632 |
=item $fh = IO::AIO::timerfd_create $clockid[, $flags] |
| 2633 |
|
| 2634 |
This is a direct interface to the Linux L<timerfd_create(2)> system |
| 2635 |
call. The (unhelpful) default for C<$flags> is C<0>, but your default |
| 2636 |
should be C<IO::AIO::TFD_CLOEXEC>. |
| 2637 |
|
| 2638 |
On success, the new timerfd filehandle is returned, otherwise returns |
| 2639 |
C<undef>. If the timerfd_create syscall is missing, fails with C<ENOSYS>. |
| 2640 |
|
| 2641 |
Please refer to L<timerfd_create(2)> for more info on this call. |
| 2642 |
|
| 2643 |
The following C<$clockid> values are |
| 2644 |
available: C<IO::AIO::CLOCK_REALTIME>, C<IO::AIO::CLOCK_MONOTONIC> |
| 2645 |
C<IO::AIO::CLOCK_CLOCK_BOOTTIME> (Linux 3.15) |
| 2646 |
C<IO::AIO::CLOCK_CLOCK_REALTIME_ALARM> (Linux 3.11) and |
| 2647 |
C<IO::AIO::CLOCK_CLOCK_BOOTTIME_ALARM> (Linux 3.11). |
| 2648 |
|
| 2649 |
The following C<$flags> values are available (Linux |
| 2650 |
2.6.27): C<IO::AIO::TFD_NONBLOCK> and C<IO::AIO::TFD_CLOEXEC>. |
| 2651 |
|
| 2652 |
Example: create a new timerfd and set it to one-second repeated alarms, |
| 2653 |
then wait for two alarms: |
| 2654 |
|
| 2655 |
my $fh = IO::AIO::timerfd_create IO::AIO::CLOCK_BOOTTIME, IO::AIO::TFD_CLOEXEC |
| 2656 |
or die "timerfd_create: $!\n"; |
| 2657 |
|
| 2658 |
defined IO::AIO::timerfd_settime $fh, 0, 1, 1 |
| 2659 |
or die "timerfd_settime: $!\n"; |
| 2660 |
|
| 2661 |
for (1..2) { |
| 2662 |
8 == sysread $fh, my $buf, 8 |
| 2663 |
or die "timerfd read failure\n"; |
| 2664 |
|
| 2665 |
printf "number of expirations (likely 1): %d\n", |
| 2666 |
unpack "Q", $buf; |
| 2667 |
} |
| 2668 |
|
| 2669 |
=item ($cur_interval, $cur_value) = IO::AIO::timerfd_settime $fh, $flags, $new_interval, $nbw_value |
| 2670 |
|
| 2671 |
This is a direct interface to the Linux L<timerfd_settime(2)> system |
| 2672 |
call. Please refer to its manpage for more info on this call. |
| 2673 |
|
| 2674 |
The new itimerspec is specified using two (possibly fractional) second |
| 2675 |
values, C<$new_interval> and C<$new_value>). |
| 2676 |
|
| 2677 |
On success, the current interval and value are returned (as per |
| 2678 |
C<timerfd_gettime>). On failure, the empty list is returned. |
| 2679 |
|
| 2680 |
The following C<$flags> values are |
| 2681 |
available: C<IO::AIO::TFD_TIMER_ABSTIME> and |
| 2682 |
C<IO::AIO::TFD_TIMER_CANCEL_ON_SET>. |
| 2683 |
|
| 2684 |
See C<IO::AIO::timerfd_create> for a full example. |
| 2685 |
|
| 2686 |
=item ($cur_interval, $cur_value) = IO::AIO::timerfd_gettime $fh |
| 2687 |
|
| 2688 |
This is a direct interface to the Linux L<timerfd_gettime(2)> system |
| 2689 |
call. Please refer to its manpage for more info on this call. |
| 2690 |
|
| 2691 |
On success, returns the current values of interval and value for the given |
| 2692 |
timerfd (as potentially fractional second values). On failure, the empty |
| 2693 |
list is returned. |
| 2694 |
|
| 2695 |
=back |
| 2696 |
|
| 2697 |
=cut |
| 2698 |
|
| 2699 |
min_parallel 8; |
| 2700 |
|
| 2701 |
END { flush } |
| 2702 |
|
| 2703 |
1; |
| 2704 |
|
| 2705 |
=head1 EVENT LOOP INTEGRATION |
| 2706 |
|
| 2707 |
It is recommended to use L<AnyEvent::AIO> to integrate IO::AIO |
| 2708 |
automatically into many event loops: |
| 2709 |
|
| 2710 |
# AnyEvent integration (EV, Event, Glib, Tk, POE, urxvt, pureperl...) |
| 2711 |
use AnyEvent::AIO; |
| 2712 |
|
| 2713 |
You can also integrate IO::AIO manually into many event loops, here are |
| 2714 |
some examples of how to do this: |
| 2715 |
|
| 2716 |
# EV integration |
| 2717 |
my $aio_w = EV::io IO::AIO::poll_fileno, EV::READ, \&IO::AIO::poll_cb; |
| 2718 |
|
| 2719 |
# Event integration |
| 2720 |
Event->io (fd => IO::AIO::poll_fileno, |
| 2721 |
poll => 'r', |
| 2722 |
cb => \&IO::AIO::poll_cb); |
| 2723 |
|
| 2724 |
# Glib/Gtk2 integration |
| 2725 |
add_watch Glib::IO IO::AIO::poll_fileno, |
| 2726 |
in => sub { IO::AIO::poll_cb; 1 }; |
| 2727 |
|
| 2728 |
# Tk integration |
| 2729 |
Tk::Event::IO->fileevent (IO::AIO::poll_fileno, "", |
| 2730 |
readable => \&IO::AIO::poll_cb); |
| 2731 |
|
| 2732 |
# Danga::Socket integration |
| 2733 |
Danga::Socket->AddOtherFds (IO::AIO::poll_fileno => |
| 2734 |
\&IO::AIO::poll_cb); |
| 2735 |
|
| 2736 |
=head2 FORK BEHAVIOUR |
| 2737 |
|
| 2738 |
Usage of pthreads in a program changes the semantics of fork |
| 2739 |
considerably. Specifically, only async-safe functions can be called after |
| 2740 |
fork. Perl doesn't know about this, so in general, you cannot call fork |
| 2741 |
with defined behaviour in perl if pthreads are involved. IO::AIO uses |
| 2742 |
pthreads, so this applies, but many other extensions and (for inexplicable |
| 2743 |
reasons) perl itself often is linked against pthreads, so this limitation |
| 2744 |
applies to quite a lot of perls. |
| 2745 |
|
| 2746 |
This module no longer tries to fight your OS, or POSIX. That means IO::AIO |
| 2747 |
only works in the process that loaded it. Forking is fully supported, but |
| 2748 |
using IO::AIO in the child is not. |
| 2749 |
|
| 2750 |
You might get around by not I<using> IO::AIO before (or after) |
| 2751 |
forking. You could also try to call the L<IO::AIO::reinit> function in the |
| 2752 |
child: |
| 2753 |
|
| 2754 |
=over 4 |
| 2755 |
|
| 2756 |
=item IO::AIO::reinit |
| 2757 |
|
| 2758 |
Abandons all current requests and I/O threads and simply reinitialises all |
| 2759 |
data structures. This is not an operation supported by any standards, but |
| 2760 |
happens to work on GNU/Linux and some newer BSD systems. |
| 2761 |
|
| 2762 |
The only reasonable use for this function is to call it after forking, if |
| 2763 |
C<IO::AIO> was used in the parent. Calling it while IO::AIO is active in |
| 2764 |
the process will result in undefined behaviour. Calling it at any time |
| 2765 |
will also result in any undefined (by POSIX) behaviour. |
| 2766 |
|
| 2767 |
=back |
| 2768 |
|
| 2769 |
=head2 LINUX-SPECIFIC CALLS |
| 2770 |
|
| 2771 |
When a call is documented as "linux-specific" then this means it |
| 2772 |
originated on GNU/Linux. C<IO::AIO> will usually try to autodetect the |
| 2773 |
availability and compatibility of such calls regardless of the platform |
| 2774 |
it is compiled on, so platforms such as FreeBSD which often implement |
| 2775 |
these calls will work. When in doubt, call them and see if they fail wth |
| 2776 |
C<ENOSYS>. |
| 2777 |
|
| 2778 |
=head2 MEMORY USAGE |
| 2779 |
|
| 2780 |
Per-request usage: |
| 2781 |
|
| 2782 |
Each aio request uses - depending on your architecture - around 100-200 |
| 2783 |
bytes of memory. In addition, stat requests need a stat buffer (possibly |
| 2784 |
a few hundred bytes), readdir requires a result buffer and so on. Perl |
| 2785 |
scalars and other data passed into aio requests will also be locked and |
| 2786 |
will consume memory till the request has entered the done state. |
| 2787 |
|
| 2788 |
This is not awfully much, so queuing lots of requests is not usually a |
| 2789 |
problem. |
| 2790 |
|
| 2791 |
Per-thread usage: |
| 2792 |
|
| 2793 |
In the execution phase, some aio requests require more memory for |
| 2794 |
temporary buffers, and each thread requires a stack and other data |
| 2795 |
structures (usually around 16k-128k, depending on the OS). |
| 2796 |
|
| 2797 |
=head1 KNOWN BUGS |
| 2798 |
|
| 2799 |
Known bugs will be fixed in the next release :) |
| 2800 |
|
| 2801 |
=head1 KNOWN ISSUES |
| 2802 |
|
| 2803 |
Calls that try to "import" foreign memory areas (such as C<IO::AIO::mmap> |
| 2804 |
or C<IO::AIO::aio_slurp>) do not work with generic lvalues, such as |
| 2805 |
non-created hash slots or other scalars I didn't think of. It's best to |
| 2806 |
avoid such and either use scalar variables or making sure that the scalar |
| 2807 |
exists (e.g. by storing C<undef>) and isn't "funny" (e.g. tied). |
| 2808 |
|
| 2809 |
I am not sure anything can be done about this, so this is considered a |
| 2810 |
known issue, rather than a bug. |
| 2811 |
|
| 2812 |
=head1 SEE ALSO |
| 2813 |
|
| 2814 |
L<AnyEvent::AIO> for easy integration into event loops, L<Coro::AIO> for a |
| 2815 |
more natural syntax and L<IO::FDPass> for file descriptor passing. |
| 2816 |
|
| 2817 |
=head1 AUTHOR |
| 2818 |
|
| 2819 |
Marc Lehmann <schmorp@schmorp.de> |
| 2820 |
http://home.schmorp.de/ |
| 2821 |
|
| 2822 |
=cut |
| 2823 |
|