FreeBSD disk AIO support

Andrei Nigmatulin andrei.nigmatulin at gmail.com
Mon Aug 24 04:57:36 MSD 2009


On Monday 24 August 2009 04:35, Andrei Nigmatulin wrote:
> On Monday 24 August 2009 02:23, Andrei Nigmatulin wrote:
> > On Monday 24 August 2009 01:13, Igor Sysoev wrote:
> > > /usr/include/libaio.h:
> > >
> > > struct iocb {
> > >         PADDEDptr(void *data, __pad1);  /* Return in the io completion
> > > event */ PADDED(unsigned key, __pad2);   /* For use in identifying io
> > > requests */
> > >
> > >         short           aio_lio_opcode;
> > >         short           aio_reqprio;
> > >         int             aio_fildes;
> > >
> > >         union {
> > >                 struct io_iocb_common           c;
> > > ...
> > >
> > > struct io_iocb_common {
> > >         PADDEDptr(void  *buf, __pad1);
> > >         PADDEDul(nbytes, __pad2);
> > >         long long       offset;
> > >         long long       __pad3, __pad4;
> > > };      /* result code is the amount read or -'ve errno */
> > >
> > >
> > > Полей .aio_flags и .aio_resfd в struct iocb нет. Ну и как это собирать
> > > ?
> >
> > А если
> >
> > -#include <libaio.h>
> > +#include <linux/aio_abi.h>
> >
> > ?
>
> Похоже, что libaio >= 0.3.107 имеет поддержку eventfd (патч добавил Rusty
> Russell) и искомые поля есть в io_iocb_common.

Имхо, есть смысл делать в обход libaio, напрямую. Статус библиотеки непонятен, 
домашней страницы я не нашел, необходимая для eventfd версия >= 0.3.107 есть 
далеко не во всех дистрибутивах.

Зато нашел пример как можно использовать io_submit/io_getevents напрямую без 
libaio, с использованием linux/aio_abi.h:

http://www.xmailserver.org/eventfd-aio-test.c

Туда надо добавить:

#include <linux/aio_abi.h>
#include <sys/eventfd.h>

И немного почистить.


-- 
Andrei Nigmatulin
GPG PUB KEY 6449830D

Now I lay me down to sleep(3)
Pray the OS my core to keep
If I die before I wake
Pray the Disk my core to take


More information about the nginx-ru mailing list