ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: FreeBSD disk AIO support



On Mon, Aug 24, 2009 at 04:57:36AM +0400, Andrei Nigmatulin wrote:

> 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>
> 
> И немного почистить.

Пока в io_iocb_common не появятся .aio_flags и .aio_resfd, буду делать так:

 #include <libaio.h>

 uint32_t *p = (uint32_t *) &iocb.c.__pad4;
 p[0] = flags;
 p[1] = fd;

А ведь уже почти два года прошло со времени появления eventfd.


-- 
Игорь Сысоев
http://sysoev.ru



 




Copyright © Lexa Software, 1996-2009.