ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/IO-AIO/AIO.pm
Revision: 1.22
Committed: Wed Jul 20 21:55:27 2005 UTC (18 years, 10 months ago) by root
Branch: MAIN
CVS Tags: rel-0_9
Changes since 1.21: +4 -2 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.1 =head1 NAME
2    
3     IO::AIO - Asynchronous Input/Output
4    
5     =head1 SYNOPSIS
6    
7     use IO::AIO;
8    
9 root 1.6 aio_open "/etc/passwd", O_RDONLY, 0, sub {
10     my ($fh) = @_;
11     ...
12     };
13    
14     aio_unlink "/tmp/file", sub { };
15    
16     aio_read $fh, 30000, 1024, $buffer, 0, sub {
17 root 1.8 $_[0] > 0 or die "read error: $!";
18 root 1.6 };
19    
20     # Event
21     Event->io (fd => IO::AIO::poll_fileno,
22 root 1.7 poll => 'r',
23 root 1.6 cb => \&IO::AIO::poll_cb);
24    
25     # Glib/Gtk2
26     add_watch Glib::IO IO::AIO::poll_fileno,
27 root 1.22 in => sub { IO::AIO::poll_cb; 1 };
28 root 1.6
29     # Tk
30     Tk::Event::IO->fileevent (IO::AIO::poll_fileno, "",
31     readable => \&IO::AIO::poll_cb);
32    
33 root 1.11 # Danga::Socket
34     Danga::Socket->AddOtherFds (IO::AIO::poll_fileno =>
35     \&IO::AIO::poll_cb);
36    
37    
38 root 1.1 =head1 DESCRIPTION
39    
40     This module implements asynchronous I/O using whatever means your
41 root 1.2 operating system supports.
42 root 1.1
43 root 1.2 Currently, a number of threads are started that execute your read/writes
44     and signal their completion. You don't need thread support in your libc or
45     perl, and the threads created by this module will not be visible to the
46     pthreads library. In the future, this module might make use of the native
47     aio functions available on many operating systems. However, they are often
48     not well-supported (Linux doesn't allow them on normal files currently,
49     for example), and they would only support aio_read and aio_write, so the
50     remaining functionality would have to be implemented using threads anyway.
51 root 1.1
52     Although the module will work with in the presence of other threads, it is
53 root 1.22 currently not reentrant, so use appropriate locking yourself, always call
54     C<poll_cb> from within the same thread, or never call C<poll_cb> (or other
55     C<aio_> functions) recursively.
56 root 1.1
57     =cut
58    
59     package IO::AIO;
60    
61     use base 'Exporter';
62    
63 root 1.2 use Fcntl ();
64    
65 root 1.1 BEGIN {
66 root 1.21 $VERSION = 0.9;
67 root 1.1
68     @EXPORT = qw(aio_read aio_write aio_open aio_close aio_stat aio_lstat aio_unlink
69     aio_fsync aio_fdatasync aio_readahead);
70 root 1.4 @EXPORT_OK = qw(poll_fileno poll_cb min_parallel max_parallel max_outstanding nreqs);
71 root 1.1
72     require XSLoader;
73     XSLoader::load IO::AIO, $VERSION;
74     }
75    
76 root 1.5 =head1 FUNCTIONS
77 root 1.1
78 root 1.5 =head2 AIO FUNCTIONS
79 root 1.1
80 root 1.5 All the C<aio_*> calls are more or less thin wrappers around the syscall
81     with the same name (sans C<aio_>). The arguments are similar or identical,
82 root 1.14 and they all accept an additional (and optional) C<$callback> argument
83     which must be a code reference. This code reference will get called with
84     the syscall return code (e.g. most syscalls return C<-1> on error, unlike
85     perl, which usually delivers "false") as it's sole argument when the given
86     syscall has been executed asynchronously.
87 root 1.1
88 root 1.5 All functions that expect a filehandle will also accept a file descriptor.
89 root 1.1
90 root 1.5 The filenames you pass to these routines I<must> be absolute. The reason
91 root 1.20 for this is that at the time the request is being executed, the current
92     working directory could have changed. Alternatively, you can make sure
93     that you never change the current working directory.
94 root 1.1
95 root 1.5 =over 4
96 root 1.1
97     =item aio_open $pathname, $flags, $mode, $callback
98    
99 root 1.2 Asynchronously open or create a file and call the callback with a newly
100     created filehandle for the file.
101 root 1.1
102     The pathname passed to C<aio_open> must be absolute. See API NOTES, above,
103     for an explanation.
104    
105 root 1.20 The C<$flags> argument is a bitmask. See the C<Fcntl> module for a
106     list. They are the same as used by C<sysopen>.
107    
108     Likewise, C<$mode> specifies the mode of the newly created file, if it
109     didn't exist and C<O_CREAT> has been given, just like perl's C<sysopen>,
110     except that it is mandatory (i.e. use C<0> if you don't create new files,
111     and C<0666> or C<0777> if you do).
112 root 1.1
113     Example:
114    
115     aio_open "/etc/passwd", O_RDONLY, 0, sub {
116 root 1.2 if ($_[0]) {
117     print "open successful, fh is $_[0]\n";
118 root 1.1 ...
119     } else {
120     die "open failed: $!\n";
121     }
122     };
123    
124     =item aio_close $fh, $callback
125    
126 root 1.2 Asynchronously close a file and call the callback with the result
127     code. I<WARNING:> although accepted, you should not pass in a perl
128 root 1.20 filehandle here, as perl will likely close the file descriptor another
129     time when the filehandle is destroyed. Normally, you can safely call perls
130     C<close> or just let filehandles go out of scope.
131    
132     This is supposed to be a bug in the API, so that might change. It's
133     therefore best to avoid this function.
134 root 1.1
135     =item aio_read $fh,$offset,$length, $data,$dataoffset,$callback
136    
137     =item aio_write $fh,$offset,$length, $data,$dataoffset,$callback
138    
139     Reads or writes C<length> bytes from the specified C<fh> and C<offset>
140     into the scalar given by C<data> and offset C<dataoffset> and calls the
141     callback without the actual number of bytes read (or -1 on error, just
142     like the syscall).
143    
144 root 1.17 Example: Read 15 bytes at offset 7 into scalar C<$buffer>, starting at
145 root 1.1 offset C<0> within the scalar:
146    
147     aio_read $fh, 7, 15, $buffer, 0, sub {
148 root 1.9 $_[0] > 0 or die "read error: $!";
149     print "read $_[0] bytes: <$buffer>\n";
150 root 1.1 };
151    
152     =item aio_readahead $fh,$offset,$length, $callback
153    
154     Asynchronously reads the specified byte range into the page cache, using
155 root 1.17 the C<readahead> syscall. If that syscall doesn't exist (likely if your OS
156 root 1.20 isn't Linux) the status will be C<-1> and C<$!> is set to C<ENOSYS>.
157 root 1.1
158 root 1.20 C<aio_readahead> populates the page cache with data from a file so that
159 root 1.1 subsequent reads from that file will not block on disk I/O. The C<$offset>
160     argument specifies the starting point from which data is to be read and
161     C<$length> specifies the number of bytes to be read. I/O is performed in
162     whole pages, so that offset is effectively rounded down to a page boundary
163     and bytes are read up to the next page boundary greater than or equal to
164 root 1.20 (off-set+length). C<aio_readahead> does not read beyond the end of the
165 root 1.1 file. The current file offset of the file is left unchanged.
166    
167     =item aio_stat $fh_or_path, $callback
168    
169     =item aio_lstat $fh, $callback
170    
171     Works like perl's C<stat> or C<lstat> in void context. The callback will
172     be called after the stat and the results will be available using C<stat _>
173     or C<-s _> etc...
174    
175     The pathname passed to C<aio_stat> must be absolute. See API NOTES, above,
176     for an explanation.
177    
178     Currently, the stats are always 64-bit-stats, i.e. instead of returning an
179     error when stat'ing a large file, the results will be silently truncated
180     unless perl itself is compiled with large file support.
181    
182     Example: Print the length of F</etc/passwd>:
183    
184     aio_stat "/etc/passwd", sub {
185     $_[0] and die "stat failed: $!";
186     print "size is ", -s _, "\n";
187     };
188    
189     =item aio_unlink $pathname, $callback
190    
191     Asynchronously unlink (delete) a file and call the callback with the
192     result code.
193    
194     =item aio_fsync $fh, $callback
195    
196     Asynchronously call fsync on the given filehandle and call the callback
197     with the fsync result code.
198    
199     =item aio_fdatasync $fh, $callback
200    
201     Asynchronously call fdatasync on the given filehandle and call the
202 root 1.20 callback with the fdatasync result code. Might set C<$!> to C<ENOSYS> if
203     C<fdatasync> is not available.
204 root 1.1
205 root 1.5 =back
206    
207     =head2 SUPPORT FUNCTIONS
208    
209     =over 4
210    
211     =item $fileno = IO::AIO::poll_fileno
212    
213 root 1.20 Return the I<request result pipe file descriptor>. This filehandle must be
214     polled for reading by some mechanism outside this module (e.g. Event or
215     select, see below or the SYNOPSIS). If the pipe becomes readable you have
216     to call C<poll_cb> to check the results.
217 root 1.5
218     See C<poll_cb> for an example.
219    
220     =item IO::AIO::poll_cb
221    
222     Process all outstanding events on the result pipe. You have to call this
223     regularly. Returns the number of events processed. Returns immediately
224     when no events are outstanding.
225    
226 root 1.20 Example: Install an Event watcher that automatically calls
227     IO::AIO::poll_cb with high priority:
228 root 1.5
229     Event->io (fd => IO::AIO::poll_fileno,
230     poll => 'r', async => 1,
231     cb => \&IO::AIO::poll_cb);
232    
233     =item IO::AIO::poll_wait
234    
235     Wait till the result filehandle becomes ready for reading (simply does a
236 root 1.20 C<select> on the filehandle. This is useful if you want to synchronously wait
237 root 1.5 for some requests to finish).
238    
239     See C<nreqs> for an example.
240    
241     =item IO::AIO::nreqs
242    
243 root 1.20 Returns the number of requests currently outstanding (i.e. for which their
244     callback has not been invoked yet).
245 root 1.5
246     Example: wait till there are no outstanding requests anymore:
247    
248     IO::AIO::poll_wait, IO::AIO::poll_cb
249     while IO::AIO::nreqs;
250    
251 root 1.12 =item IO::AIO::flush
252    
253     Wait till all outstanding AIO requests have been handled.
254    
255 root 1.13 Strictly equivalent to:
256    
257     IO::AIO::poll_wait, IO::AIO::poll_cb
258     while IO::AIO::nreqs;
259    
260     =item IO::AIO::poll
261    
262     Waits until some requests have been handled.
263    
264     Strictly equivalent to:
265    
266     IO::AIO::poll_wait, IO::AIO::poll_cb
267     if IO::AIO::nreqs;
268    
269 root 1.5 =item IO::AIO::min_parallel $nthreads
270    
271     Set the minimum number of AIO threads to C<$nthreads>. The default is
272     C<1>, which means a single asynchronous operation can be done at one time
273     (the number of outstanding operations, however, is unlimited).
274    
275     It is recommended to keep the number of threads low, as some Linux
276     kernel versions will scale negatively with the number of threads (higher
277     parallelity => MUCH higher latency). With current Linux 2.6 versions, 4-32
278     threads should be fine.
279    
280     Under normal circumstances you don't need to call this function, as this
281     module automatically starts some threads (the exact number might change,
282     and is currently 4).
283    
284     =item IO::AIO::max_parallel $nthreads
285    
286     Sets the maximum number of AIO threads to C<$nthreads>. If more than
287     the specified number of threads are currently running, kill them. This
288     function blocks until the limit is reached.
289    
290     This module automatically runs C<max_parallel 0> at program end, to ensure
291     that all threads are killed and that there are no outstanding requests.
292    
293     Under normal circumstances you don't need to call this function.
294    
295     =item $oldnreqs = IO::AIO::max_outstanding $nreqs
296    
297     Sets the maximum number of outstanding requests to C<$nreqs>. If you
298     try to queue up more than this number of requests, the caller will block until
299     some requests have been handled.
300    
301     The default is very large, so normally there is no practical limit. If you
302     queue up many requests in a loop it it often improves speed if you set
303     this to a relatively low number, such as C<100>.
304    
305     Under normal circumstances you don't need to call this function.
306    
307     =back
308    
309 root 1.1 =cut
310    
311 root 1.2 # support function to convert a fd into a perl filehandle
312     sub _fd2fh {
313     return undef if $_[0] < 0;
314    
315     # try to be perl5.6-compatible
316     local *AIO_FH;
317     open AIO_FH, "+<&=$_[0]"
318     or return undef;
319    
320     *AIO_FH
321     }
322    
323 root 1.1 min_parallel 4;
324    
325     END {
326     max_parallel 0;
327     }
328    
329     1;
330    
331     =head1 SEE ALSO
332    
333     L<Coro>, L<Linux::AIO>.
334    
335     =head1 AUTHOR
336    
337     Marc Lehmann <schmorp@schmorp.de>
338     http://home.schmorp.de/
339    
340     =cut
341