ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/IO-AIO/README
Revision: 1.9
Committed: Tue Aug 16 23:33:38 2005 UTC (18 years, 9 months ago) by root
Branch: MAIN
CVS Tags: rel-1_2
Changes since 1.8: +29 -11 lines
Log Message:
*** empty log message ***

File Contents

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