ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/IO-AIO/README
Revision: 1.10
Committed: Wed Aug 17 05:26:20 2005 UTC (18 years, 9 months ago) by root
Branch: MAIN
CVS Tags: rel-1_3, rel-1_4
Changes since 1.9: +10 -3 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     Set the minimum number of AIO threads to $nthreads. The default is
245     1, which means a single asynchronous operation can be done at one
246     time (the number of outstanding operations, however, is unlimited).
247    
248     It is recommended to keep the number of threads low, as some Linux
249     kernel versions will scale negatively with the number of threads
250     (higher parallelity => MUCH higher latency). With current Linux 2.6
251     versions, 4-32 threads should be fine.
252    
253     Under normal circumstances you don't need to call this function, as
254     this module automatically starts some threads (the exact number
255     might change, and is currently 4).
256    
257     IO::AIO::max_parallel $nthreads
258     Sets the maximum number of AIO threads to $nthreads. If more than
259     the specified number of threads are currently running, kill them.
260     This function blocks until the limit is reached.
261    
262     This module automatically runs "max_parallel 0" at program end, to
263     ensure that all threads are killed and that there are no outstanding
264     requests.
265    
266     Under normal circumstances you don't need to call this function.
267    
268     $oldnreqs = IO::AIO::max_outstanding $nreqs
269     Sets the maximum number of outstanding requests to $nreqs. If you
270     try to queue up more than this number of requests, the caller will
271     block until some requests have been handled.
272    
273     The default is very large, so normally there is no practical limit.
274     If you queue up many requests in a loop it it often improves speed
275     if you set this to a relatively low number, such as 100.
276    
277     Under normal circumstances you don't need to call this function.
278 root 1.1
279 root 1.9 FORK BEHAVIOUR
280 root 1.10 Before the fork IO::AIO enters a quiescent state where no requests can
281     be added in other threads and no results will be processed. After the
282     fork the parent simply leaves the quiescent state and continues
283     request/result processing, while the child clears the request/result
284     queue and starts the same number of threads as were in use by the
285     parent.
286 root 1.9
287 root 1.1 SEE ALSO
288 root 1.2 Coro, Linux::AIO.
289 root 1.1
290     AUTHOR
291     Marc Lehmann <schmorp@schmorp.de>
292     http://home.schmorp.de/
293