# Unknown directive "aio" in Nginx 0.8.14

**URL:** <https://www.ruby-forum.com/t/unknown-directive-aio-in-nginx-0-8-14/175267>\
**Category:** NGINX\
**Created:** [September 10, 2009, 11:26am UTC](https://www.ruby-forum.com/t/unknown-directive-aio-in-nginx-0-8-14/175267 "2009-09-10T11:26:14Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![pcdinh](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/76d3ee/32.png) [@pcdinh](https://www.ruby-forum.com/u/pcdinh)\
**Post date:** [September 10, 2009, 11:26am UTC](https://www.ruby-forum.com/t/unknown-directive-aio-in-nginx-0-8-14/175267/1 "2009-09-10T11:26:14Z")

</div>

Hi all,

I installed Nginx 0.8.14 to try out a new feature: AIO support. Also, I  
compiled Nginx with --with-file-aio

However, Nginx show warnings that it does not support AIO:

Starting nginx: [emerg]: unknown directive “aio” in  
/usr/local/nginx/nginx.conf:46

Here is my configuration

```
    location ~* ^\/files\/(.+) {
        alias /home/files/$1;
        internal;
        aio on;
        # sendfile off;
        directio 512;
    }

```

Is this feature experimental and withdrawn?

---

<div class="post-metadata">

**Author:** ![pcdinh](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/76d3ee/32.png) [@pcdinh](https://www.ruby-forum.com/u/pcdinh)\
**Post date:** [September 10, 2009, 12:33pm UTC](https://www.ruby-forum.com/t/unknown-directive-aio-in-nginx-0-8-14/175267/2 "2009-09-10T12:33:33Z")

</div>

Hello!

On Thu, Sep 10, 2009 at 11:26:14AM +0200, Dinh P. wrote:

> Here is my configuration
> 
> ```
> location ~* ^\/files\/(.+) {
> alias /home/files/$1;
> internal;
> aio on;
> # sendfile off;
> directio 512;
> }
> 
> ```
> 
> Is this feature experimental and withdrawn?

No, the feature is here. Looks like you are running wrong binary  
(or doesn’t compiled it properly).

Maxim D.

---

<div class="post-metadata">

**Author:** ![pcdinh](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/76d3ee/32.png) [@pcdinh](https://www.ruby-forum.com/u/pcdinh)\
**Post date:** [September 10, 2009, 12:40pm UTC](https://www.ruby-forum.com/t/unknown-directive-aio-in-nginx-0-8-14/175267/3 "2009-09-10T12:40:35Z")

</div>

On Thu, Sep 10, 2009 at 11:26:14AM +0200, Dinh P. wrote:

> Here is my configuration
> 
> ```
> location ~* ^\/files\/(.+) {
> alias /home/files/$1;
> internal;
> aio on;
> # sendfile off;
> directio 512;
> }
> 
> ```
> 
> Is this feature experimental and withdrawn?

Could you show this ./configure line:  
checking for Linux AIO support …  
?

Probabaly, your kernel does not support eventfd(), it’s available since  
2.6.22 only.

BTW, instead of

```
     location ~* ^\/files\/(.+) {
         alias /home/files/$1;

```

it’s better to use just

```
     location /files/ {
         root /home;

```

---

<div class="post-metadata">

**Author:** ![pcdinh](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/76d3ee/32.png) [@pcdinh](https://www.ruby-forum.com/u/pcdinh)\
**Post date:** [September 10, 2009, 2:14pm UTC](https://www.ruby-forum.com/t/unknown-directive-aio-in-nginx-0-8-14/175267/4 "2009-09-10T14:14:06Z")

</div>

Hi Igor

Here is the output after I run ./configure

checking for OS

- Linux 2.6.18-128.2.1.el5 i686  
checking for C compiler … found
- using GNU C compiler
- gcc version: 4.1.2 20080704 (Red Hat 4.1.2-44)  
checking for gcc -pipe switch … found  
checking for gcc variadic macros … found  
checking for C99 variadic macros … found  
checking for unistd.h … found  
checking for inttypes.h … found  
checking for limits.h … found  
checking for sys/filio.h … not found  
checking for sys/param.h … found  
checking for sys/mount.h … found  
checking for sys/statvfs.h … found  
checking for crypt.h … found  
checking for Linux specific features  
checking for epoll … found  
checking for sendfile() … found  
checking for sendfile64() … found  
checking for sys/prctl.h … found  
checking for prctl(PR\_SET\_DUMPABLE) … found  
checking for sched\_setaffinity() … found  
checking for crypt\_r() … found  
checking for sys/vfs.h … found  
checking for nobody group … found  
checking for poll() … found  
checking for /dev/poll … not found  
checking for kqueue … not found  
checking for crypt() … not found  
checking for crypt() in libcrypt … found  
checking for O\_DIRECT … found  
checking for F\_NOCACHE … not found  
checking for directio() … not found  
checking for statfs() … found  
checking for statvfs() … found  
checking for dlopen() … not found  
checking for dlopen() in libdl … found  
checking for sched\_yield() … found  
checking for PCRE library … found  
checking for system md library … not found  
checking for system md5 library … not found  
checking for OpenSSL md5 crypto library … found  
checking for zlib library … found  
creating objs/Makefile  
checking for int size … 4 bytes  
checking for long size … 4 bytes  
checking for long long size … 8 bytes  
checking for void \* size … 4 bytes  
checking for uint64\_t … found  
checking for sig\_atomic\_t … found  
checking for sig\_atomic\_t size … 4 bytes  
checking for socklen\_t … found  
checking for in\_addr\_t … found  
checking for in\_port\_t … found  
checking for rlim\_t … found  
checking for uintptr\_t … uintptr\_t found  
checking for system endianess … little endianess  
checking for size\_t size … 4 bytes  
checking for off\_t size … 8 bytes  
checking for time\_t size … 4 bytes  
checking for setproctitle() … not found  
checking for pread() … found  
checking for pwrite() … found  
checking for strerror\_r() … found but is not working  
checking for gnu style strerror\_r() … found  
checking for localtime\_r() … found  
checking for posix\_memalign() … found  
checking for memalign() … found  
checking for mmap(MAP\_ANON|MAP\_SHARED) … found  
checking for mmap(“/dev/zero”, MAP\_SHARED) … found  
checking for System V shared memory … found  
checking for struct msghdr.msg\_control … found  
checking for ioctl(FIONBIO) … found  
checking for struct tm.tm\_gmtoff … found  
checking for struct dirent.d\_namlen … not found  
checking for struct dirent.d\_type … found

Configuration summary

- using system PCRE library
- OpenSSL library is not used
- md5: using system crypto library
- sha1 library is not used
- using system zlib library

nginx path prefix: “/usr/local/nginx”  
nginx binary file: “/usr/local/nginx/sbin/nginx”  
nginx configuration prefix: “/usr/local/nginx/conf”  
nginx configuration file: “/usr/local/nginx/conf/nginx.conf”  
nginx pid file: “/usr/local/nginx/logs/nginx.pid”  
nginx error log file: “/usr/local/nginx/logs/error.log”  
nginx http access log file: “/usr/local/nginx/logs/access.log”  
nginx http client request body temporary files: “client\_body\_temp”  
nginx http proxy temporary files: “proxy\_temp”  
nginx http fastcgi temporary files: “fastcgi\_temp”

It says nothing about Linux AIO. Also, directio is said not to be found.  
I am using CentOS 5.3 with libaio, libaio-devel installed. It seems that  
the kernel equipped with CentOS 5.3/Redhat ES 5.3 is too old to support  
this feature.

Thanks,

Dinh

Igor S. wrote:

> On Thu, Sep 10, 2009 at 11:26:14AM +0200, Dinh P. wrote:
> 
> Could you show this ./configure line:  
> checking for Linux AIO support …  
> ?
> 
> Probabaly, your kernel does not support eventfd(), it’s available since  
> 2.6.22 only.

---

<div class="post-metadata">

**Author:** ![pcdinh](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/76d3ee/32.png) [@pcdinh](https://www.ruby-forum.com/u/pcdinh)\
**Post date:** [September 10, 2009, 12:42pm UTC](https://www.ruby-forum.com/t/unknown-directive-aio-in-nginx-0-8-14/175267/5 "2009-09-10T12:42:55Z")

</div>

Hello!

On Thu, Sep 10, 2009 at 01:40:35PM +0400, Igor S. wrote:

> > /usr/local/nginx/nginx.conf:46
> > 
> > Is this feature experimental and withdrawn?
> 
> Could you show this ./configure line:  
> checking for Linux AIO support …  
> ?
> 
> Probabaly, your kernel does not support eventfd(), it’s available since  
> 2.6.22 only.

Oops, looking at configure code - it doesn’t fail when it’s unable  
to find any AIO support with --with-file-aio.

I think it should.

Maxim D.

---

<div class="post-metadata">

**Author:** ![pcdinh](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/76d3ee/32.png) [@pcdinh](https://www.ruby-forum.com/u/pcdinh)\
**Post date:** [September 10, 2009, 3:04pm UTC](https://www.ruby-forum.com/t/unknown-directive-aio-in-nginx-0-8-14/175267/6 "2009-09-10T15:04:35Z")

</div>

On Thu, Sep 10, 2009 at 01:54:20PM +0400, Maxim D. wrote:

> Oops, looking at configure code - it doesn’t fail when it’s unable  
> to find any AIO support with --with-file-aio.
> 
> I think it should.

You are right, it will be fixed in the next release.

---

<div class="post-metadata">

**Author:** ![pcdinh](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/76d3ee/32.png) [@pcdinh](https://www.ruby-forum.com/u/pcdinh)\
**Post date:** [September 10, 2009, 3:19pm UTC](https://www.ruby-forum.com/t/unknown-directive-aio-in-nginx-0-8-14/175267/7 "2009-09-10T15:19:49Z")

</div>

On Thu, Sep 10, 2009 at 04:36:49PM +0400, Igor S. wrote:

> > I am using CentOS 5.3 with libaio, libaio-devel installed. It seems that  
> > the kernel equipped with CentOS 5.3/Redhat ES 5.3 is too old to support  
> > this feature.
> 
> nginx requires eventfd() support in AIO.

BTW, nginx does not requires libaio at all. It uses direct syscalls.

---

<div class="post-metadata">

**Author:** ![pcdinh](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/76d3ee/32.png) [@pcdinh](https://www.ruby-forum.com/u/pcdinh)\
**Post date:** [September 10, 2009, 3:04pm UTC](https://www.ruby-forum.com/t/unknown-directive-aio-in-nginx-0-8-14/175267/8 "2009-09-10T15:04:36Z")

</div>

On Thu, Sep 10, 2009 at 02:14:06PM +0200, Dinh P. wrote:

> Hi Igor
> 
> Here is the output after I run ./configure
> 
> checking for OS
> 
> - Linux 2.6.18-128.2.1.el5 i686

This kernel has no eventfd() support.

> checking for sys/param.h … found  
> checking for crypt\_r() … found  
> checking for statfs() … found  
> checking for statvfs() … found  
> checking for dlopen() … not found  
> checking for dlopen() in libdl … found  
> checking for sched\_yield() … found

It’s strange: if you add --with-file-aio, you should see here:

checking for kqueue AIO support … not found  
checking for Linux AIO support … not found

> checking for uint64\_t … found  
> checking for time\_t size … 4 bytes  
> checking for System V shared memory … found
> 
> - sha1 library is not used  
> nginx http proxy temporary files: “proxy\_temp”  
> nginx http fastcgi temporary files: “fastcgi\_temp”
> 
> It says nothing about Linux AIO. Also, directio is said not to be found.

Conversely found:  
checking for O\_DIRECT … found

You probably mixed up with F\_NOCACHE which is MacOSX feature.

> I am using CentOS 5.3 with libaio, libaio-devel installed. It seems that  
> the kernel equipped with CentOS 5.3/Redhat ES 5.3 is too old to support  
> this feature.

nginx requires eventfd() support in AIO.

---

<div class="post-metadata">

**Author:** ![pcdinh](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/76d3ee/32.png) [@pcdinh](https://www.ruby-forum.com/u/pcdinh)\
**Post date:** [September 10, 2009, 3:45pm UTC](https://www.ruby-forum.com/t/unknown-directive-aio-in-nginx-0-8-14/175267/9 "2009-09-10T15:45:00Z")

</div>

Dinh P. escreveu:

> Hi Igor
> 
> Here is the output after I run ./configure
> 
> checking for OS
> 
> - Linux 2.6.18-128.2.1.el5 i686

Nothing can be more clear, your kernel does not suppport AIO → Linux  
2.6.18  
Upgrade your kernel to 2.6.22 or newer!

> > Probabaly, your kernel does not support eventfd(), it’s available since  
> > 2.6.22 only.

Best regards,

Ranier Vilela

---

<div class="post-metadata">

**Author:** ![pcdinh](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/76d3ee/32.png) [@pcdinh](https://www.ruby-forum.com/u/pcdinh)\
**Post date:** [May 24, 2010, 11:33pm UTC](https://www.ruby-forum.com/t/unknown-directive-aio-in-nginx-0-8-14/175267/10 "2010-05-24T23:33:42Z")

</div>

Sorry, I can’t seem to edit a post.

This:  
Upon closer examination, it says checking for AIO… not  
found. I also notice directio says not found, and I want to use  
directio feature as well.

Should be:  
Upon closer examination, it says checking for AIO… found. I  
also notice directio says not found, and I want to use directio feature  
as well.

In other words, it says “AIO… found” yet it doesn’t work.

Mike

Posted at Nginx Forum:

> **[Re: unknown directive "aio" in Nginx 0.8.14](https://forum.nginx.org/read.php?2,6237,89826#msg-89826)**
>
> Hi all, I installed Nginx 0.8.14 to try out a new feature: AIO support. Also, I compiled Nginx with --with-file-aio However, Nginx show warnings that it does not support AIO: Starting nginx: \[emerg\]: unknown directive "aio" in /usr/local/n

---

<div class="post-metadata">

**Author:** ![pcdinh](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/76d3ee/32.png) [@pcdinh](https://www.ruby-forum.com/u/pcdinh)\
**Post date:** [May 24, 2010, 11:26pm UTC](https://www.ruby-forum.com/t/unknown-directive-aio-in-nginx-0-8-14/175267/11 "2010-05-24T23:26:40Z")

</div>

I am having a similar problem and could use some help.

nginx 0.8.36 on Ubuntu 10.04 LTS, 2.6.32-21.

When I compile with --with-file-aio, it compiles fine but doesn’t work:

```auto
Restarting nginx: [emerg]: unknown directive "aio" in 
/etc/nginx/nginx.conf:16
configuration file /etc/nginx/nginx.conf test failed
```

Upon closer examination, it says checking for AIO… not found. I also  
notice directio says not found, and I want to use directio feature as  
well.

```auto
checking for OS
 + Linux 2.6.32-21-server x86_64
checking for C compiler ... found
 + using GNU C compiler
 + gcc version: 4.4.3 (Ubuntu 4.4.3-4ubuntu5)
checking for gcc -pipe switch ... found
checking for gcc builtin atomic operations ... found
checking for gcc variadic macros ... found
checking for C99 variadic macros ... found
checking for unistd.h ... found
checking for inttypes.h ... found
checking for limits.h ... found
checking for sys/filio.h ... not found
checking for sys/param.h ... found
checking for sys/mount.h ... found
checking for sys/statvfs.h ... found
checking for crypt.h ... found
checking for Linux specific features
checking for epoll ... found
checking for sendfile() ... found
checking for sendfile64() ... found
checking for sys/prctl.h ... found
checking for prctl(PR_SET_DUMPABLE) ... found
checking for sched_setaffinity() ... found
checking for crypt_r() ... found
checking for sys/vfs.h ... found
checking for nobody group ... not found
checking for nogroup group ... found
checking for poll() ... found
checking for /dev/poll ... not found
checking for kqueue ... not found
checking for crypt() ... not found
checking for crypt() in libcrypt ... found
checking for F_READAHEAD ... not found
checking for posix_fadvise() ... found
checking for O_DIRECT ... found
checking for F_NOCACHE ... not found
checking for directio() ... not found
checking for statfs() ... found
checking for statvfs() ... found
checking for dlopen() ... not found
checking for dlopen() in libdl ... found
checking for sched_yield() ... found
checking for kqueue AIO support ... not found
checking for Linux AIO support ... found
checking for PCRE library ... found
checking for system md library ... not found
checking for system md5 library ... not found
checking for OpenSSL md5 crypto library ... found
checking for zlib library ... found
creating objs/Makefile
checking for int size ... 4 bytes
checking for long size ... 8 bytes
checking for long long size ... 8 bytes
checking for void * size ... 8 bytes
checking for uint64_t ... found
checking for sig_atomic_t ... found
checking for sig_atomic_t size ... 4 bytes
checking for socklen_t ... found
checking for in_addr_t ... found
checking for in_port_t ... found
checking for rlim_t ... found
checking for uintptr_t ... uintptr_t found
checking for system endianess ... little endianess
checking for size_t size ... 8 bytes
checking for off_t size ... 8 bytes
checking for time_t size ... 8 bytes
checking for setproctitle() ... not found
checking for pread() ... found
checking for pwrite() ... found
checking for strerror_r() ... found but is not working
checking for gnu style strerror_r() ... found
checking for sys_errlist[] ... found
checking for localtime_r() ... found
checking for posix_memalign() ... found
checking for memalign() ... found
checking for mmap(MAP_ANON|MAP_SHARED) ... found
checking for mmap("/dev/zero", MAP_SHARED) ... found
checking for System V shared memory ... found
checking for struct msghdr.msg_control ... found
checking for ioctl(FIONBIO) ... found
checking for struct tm.tm_gmtoff ... found
checking for struct dirent.d_namlen ... not found
checking for struct dirent.d_type ... found

Configuration summary
  + using system PCRE library
  + OpenSSL library is not used
  + md5: using system crypto library
  + sha1 library is not used
  + using system zlib library

  nginx path prefix: "/etc/nginx"
  nginx binary file: "/etc/nginx/sbin/nginx"
  nginx configuration prefix: "/etc/nginx"
  nginx configuration file: "/etc/nginx/nginx.conf"
  nginx pid file: "/var/run/nginx.pid"
  nginx error log file: "/var/log/nginx/error.log"
  nginx http access log file: "/var/log/nginx/access.log"
  nginx http client request body temporary files: "client_body_temp"
  nginx http proxy temporary files: "proxy_temp"
  nginx http fastcgi temporary files: "fastcgi_temp"

```

Help?

Mike

Posted at Nginx Forum:

> **[Re: unknown directive "aio" in Nginx 0.8.14](https://forum.nginx.org/read.php?2,6237,89821#msg-89821)**
>
> Hi all, I installed Nginx 0.8.14 to try out a new feature: AIO support. Also, I compiled Nginx with --with-file-aio However, Nginx show warnings that it does not support AIO: Starting nginx: \[emerg\]: unknown directive "aio" in /usr/local/n
