blob: 1aa05d5051b346dda668a7a1419727f71de49bfb [file] [log] [blame]
<html lang="en">
<head>
<title>Configuration of AIO - The GNU C Library</title>
<meta http-equiv="Content-Type" content="text/html">
<meta name="description" content="The GNU C Library">
<meta name="generator" content="makeinfo 4.13">
<link title="Top" rel="start" href="index.html#Top">
<link rel="up" href="Asynchronous-I_002fO.html#Asynchronous-I_002fO" title="Asynchronous I/O">
<link rel="prev" href="Cancel-AIO-Operations.html#Cancel-AIO-Operations" title="Cancel AIO Operations">
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
<!--
This file documents the GNU C library.
This is Edition 0.12, last updated 2007-10-27,
of `The GNU C Library Reference Manual', for version
2.8 (Sourcery G++ Lite 2011.03-41).
Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002,
2003, 2007, 2008, 2010 Free Software Foundation, Inc.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with the
Invariant Sections being ``Free Software Needs Free Documentation''
and ``GNU Lesser General Public License'', the Front-Cover texts being
``A GNU Manual'', and with the Back-Cover Texts as in (a) below. A
copy of the license is included in the section entitled "GNU Free
Documentation License".
(a) The FSF's Back-Cover Text is: ``You have the freedom to
copy and modify this GNU manual. Buying copies from the FSF
supports it in developing GNU and promoting software freedom.''-->
<meta http-equiv="Content-Style-Type" content="text/css">
<style type="text/css"><!--
pre.display { font-family:inherit }
pre.format { font-family:inherit }
pre.smalldisplay { font-family:inherit; font-size:smaller }
pre.smallformat { font-family:inherit; font-size:smaller }
pre.smallexample { font-size:smaller }
pre.smalllisp { font-size:smaller }
span.sc { font-variant:small-caps }
span.roman { font-family:serif; font-weight:normal; }
span.sansserif { font-family:sans-serif; font-weight:normal; }
--></style>
<link rel="stylesheet" type="text/css" href="../cs.css">
</head>
<body>
<div class="node">
<a name="Configuration-of-AIO"></a>
<p>
Previous:&nbsp;<a rel="previous" accesskey="p" href="Cancel-AIO-Operations.html#Cancel-AIO-Operations">Cancel AIO Operations</a>,
Up:&nbsp;<a rel="up" accesskey="u" href="Asynchronous-I_002fO.html#Asynchronous-I_002fO">Asynchronous I/O</a>
<hr>
</div>
<h4 class="subsection">13.10.5 How to optimize the AIO implementation</h4>
<p>The POSIX standard does not specify how the AIO functions are
implemented. They could be system calls, but it is also possible to
emulate them at userlevel.
<p>At the point of this writing, the available implementation is a userlevel
implementation which uses threads for handling the enqueued requests.
While this implementation requires making some decisions about
limitations, hard limitations are something which is best avoided
in the GNU C library. Therefore, the GNU C library provides a means
for tuning the AIO implementation according to the individual use.
<!-- aio.h -->
<!-- GNU -->
<div class="defun">
&mdash; Data Type: <b>struct aioinit</b><var><a name="index-struct-aioinit-1309"></a></var><br>
<blockquote><p>This data type is used to pass the configuration or tunable parameters
to the implementation. The program has to initialize the members of
this struct and pass it to the implementation using the <code>aio_init</code>
function.
<dl>
<dt><code>int aio_threads</code><dd>This member specifies the maximal number of threads which may be used
at any one time.
<br><dt><code>int aio_num</code><dd>This number provides an estimate on the maximal number of simultaneously
enqueued requests.
<br><dt><code>int aio_locks</code><dd>Unused.
<br><dt><code>int aio_usedba</code><dd>Unused.
<br><dt><code>int aio_debug</code><dd>Unused.
<br><dt><code>int aio_numusers</code><dd>Unused.
<br><dt><code>int aio_reserved[2]</code><dd>Unused.
</dl>
</p></blockquote></div>
<!-- aio.h -->
<!-- GNU -->
<div class="defun">
&mdash; Function: void <b>aio_init</b> (<var>const struct aioinit *init</var>)<var><a name="index-aio_005finit-1310"></a></var><br>
<blockquote><p>This function must be called before any other AIO function. Calling it
is completely voluntary, as it is only meant to help the AIO
implementation perform better.
<p>Before calling the <code>aio_init</code>, function the members of a variable of
type <code>struct aioinit</code> must be initialized. Then a reference to
this variable is passed as the parameter to <code>aio_init</code> which itself
may or may not pay attention to the hints.
<p>The function has no return value and no error cases are defined. It is
a extension which follows a proposal from the SGI implementation in
Irix&nbsp;6<!-- /@w -->. It is not covered by POSIX.1b or Unix98.
</p></blockquote></div>
</body></html>