ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/IO-AIO/README
Revision: 1.11
Committed: Sat Aug 20 00:32:42 2005 UTC (18 years, 9 months ago) by root
Branch: MAIN
CVS Tags: rel-1_5
Changes since 1.10: +21 -13 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.10 The $data scalar *MUST NOT* be modified in any way while the request
124     is outstanding. Modifying it can result in segfaults or WW3 (if the
125     necessary/optional hardware is installed).
126    
127 root 1.6 Example: Read 15 bytes at offset 7 into scalar $buffer, starting at
128 root 1.1 offset 0 within the scalar:
129    
130     aio_read $fh, 7, 15, $buffer, 0, sub {
131 root 1.5 $_[0] > 0 or die "read error: $!";
132     print "read $_[0] bytes: <$buffer>\n";
133 root 1.1 };
134    
135     aio_readahead $fh,$offset,$length, $callback
136 root 1.7 "aio_readahead" populates the page cache with data from a file so
137     that subsequent reads from that file will not block on disk I/O. The
138 root 1.1 $offset argument specifies the starting point from which data is to
139     be read and $length specifies the number of bytes to be read. I/O is
140     performed in whole pages, so that offset is effectively rounded down
141     to a page boundary and bytes are read up to the next page boundary
142 root 1.7 greater than or equal to (off-set+length). "aio_readahead" does not
143 root 1.1 read beyond the end of the file. The current file offset of the file
144     is left unchanged.
145    
146 root 1.9 If that syscall doesn't exist (likely if your OS isn't Linux) it
147     will be emulated by simply reading the data, which would have a
148     similar effect.
149    
150 root 1.1 aio_stat $fh_or_path, $callback
151     aio_lstat $fh, $callback
152     Works like perl's "stat" or "lstat" in void context. The callback
153     will be called after the stat and the results will be available
154     using "stat _" or "-s _" etc...
155    
156     The pathname passed to "aio_stat" must be absolute. See API NOTES,
157     above, for an explanation.
158    
159     Currently, the stats are always 64-bit-stats, i.e. instead of
160     returning an error when stat'ing a large file, the results will be
161     silently truncated unless perl itself is compiled with large file
162     support.
163    
164     Example: Print the length of /etc/passwd:
165    
166     aio_stat "/etc/passwd", sub {
167     $_[0] and die "stat failed: $!";
168     print "size is ", -s _, "\n";
169     };
170    
171     aio_unlink $pathname, $callback
172     Asynchronously unlink (delete) a file and call the callback with the
173     result code.
174    
175 root 1.9 aio_rmdir $pathname, $callback
176     Asynchronously rmdir (delete) a directory and call the callback with
177     the result code.
178    
179 root 1.1 aio_fsync $fh, $callback
180     Asynchronously call fsync on the given filehandle and call the
181     callback with the fsync result code.
182    
183     aio_fdatasync $fh, $callback
184     Asynchronously call fdatasync on the given filehandle and call the
185 root 1.9 callback with the fdatasync result code.
186    
187     If this call isn't available because your OS lacks it or it couldn't
188     be detected, it will be emulated by calling "fsync" instead.
189 root 1.1
190 root 1.4 SUPPORT FUNCTIONS
191     $fileno = IO::AIO::poll_fileno
192 root 1.7 Return the *request result pipe file descriptor*. This filehandle
193     must be polled for reading by some mechanism outside this module
194     (e.g. Event or select, see below or the SYNOPSIS). If the pipe
195     becomes readable you have to call "poll_cb" to check the results.
196 root 1.4
197     See "poll_cb" for an example.
198    
199     IO::AIO::poll_cb
200     Process all outstanding events on the result pipe. You have to call
201     this regularly. Returns the number of events processed. Returns
202     immediately when no events are outstanding.
203    
204 root 1.7 Example: Install an Event watcher that automatically calls
205     IO::AIO::poll_cb with high priority:
206 root 1.4
207     Event->io (fd => IO::AIO::poll_fileno,
208     poll => 'r', async => 1,
209     cb => \&IO::AIO::poll_cb);
210    
211     IO::AIO::poll_wait
212     Wait till the result filehandle becomes ready for reading (simply
213 root 1.7 does a "select" on the filehandle. This is useful if you want to
214 root 1.4 synchronously wait for some requests to finish).
215    
216     See "nreqs" for an example.
217    
218     IO::AIO::nreqs
219 root 1.7 Returns the number of requests currently outstanding (i.e. for which
220     their callback has not been invoked yet).
221 root 1.4
222     Example: wait till there are no outstanding requests anymore:
223    
224     IO::AIO::poll_wait, IO::AIO::poll_cb
225     while IO::AIO::nreqs;
226    
227 root 1.6 IO::AIO::flush
228     Wait till all outstanding AIO requests have been handled.
229    
230     Strictly equivalent to:
231    
232     IO::AIO::poll_wait, IO::AIO::poll_cb
233     while IO::AIO::nreqs;
234    
235     IO::AIO::poll
236     Waits until some requests have been handled.
237    
238     Strictly equivalent to:
239    
240     IO::AIO::poll_wait, IO::AIO::poll_cb
241     if IO::AIO::nreqs;
242    
243 root 1.4 IO::AIO::min_parallel $nthreads
244 root 1.11 Set the minimum number of AIO threads to $nthreads. The current
245     default is 4, which means four asynchronous operations can be done
246     at one time (the number of outstanding operations, however, is
247     unlimited).
248    
249     IO::AIO starts threads only on demand, when an AIO request is queued
250     and no free thread exists.
251 root 1.4
252     It is recommended to keep the number of threads low, as some Linux
253     kernel versions will scale negatively with the number of threads
254     (higher parallelity => MUCH higher latency). With current Linux 2.6
255     versions, 4-32 threads should be fine.
256    
257 root 1.11 Under most circumstances you don't need to call this function, as
258     the module selects a default that is suitable for low to moderate
259     load.
260 root 1.4
261     IO::AIO::max_parallel $nthreads
262     Sets the maximum number of AIO threads to $nthreads. If more than
263 root 1.11 the specified number of threads are currently running, this function
264     kills them. This function blocks until the limit is reached.
265    
266     While $nthreads are zero, aio requests get queued but not executed
267     until the number of threads has been increased again.
268 root 1.4
269     This module automatically runs "max_parallel 0" at program end, to
270     ensure that all threads are killed and that there are no outstanding
271     requests.
272    
273     Under normal circumstances you don't need to call this function.
274    
275     $oldnreqs = IO::AIO::max_outstanding $nreqs
276     Sets the maximum number of outstanding requests to $nreqs. If you
277     try to queue up more than this number of requests, the caller will
278     block until some requests have been handled.
279    
280     The default is very large, so normally there is no practical limit.
281 root 1.11 If you queue up many requests in a loop it often improves speed if
282     you set this to a relatively low number, such as 100.
283 root 1.4
284     Under normal circumstances you don't need to call this function.
285 root 1.1
286 root 1.9 FORK BEHAVIOUR
287 root 1.11 Before the fork, IO::AIO enters a quiescent state where no requests can
288 root 1.10 be added in other threads and no results will be processed. After the
289     fork the parent simply leaves the quiescent state and continues
290     request/result processing, while the child clears the request/result
291 root 1.11 queue (so the requests started before the fork will only be handled in
292     the parent). Threats will be started on demand until the limit ste in
293     the parent process has been reached again.
294 root 1.9
295 root 1.1 SEE ALSO
296 root 1.2 Coro, Linux::AIO.
297 root 1.1
298     AUTHOR
299     Marc Lehmann <schmorp@schmorp.de>
300     http://home.schmorp.de/
301