directio
Igor Sysoev
is at rambler-co.ru
Sat Jul 26 00:25:55 MSD 2008
On Fri, Jul 25, 2008 at 09:11:41PM +0200, Valery Kholodkov wrote:
> Скажите, патч предназначен исключительно для FreeBSD?
Нет, для FreeBSD, Linux и MacOSX. Возможно, для Соляриса.
> Потому как на линуксе 2.6.10 я справедливо получаю:
>
> 2008/07/25 20:58:08 [crit] 4600#0: *1 pread() failed, file
> "/usr/local/nginx/html/Synovya.i.Lubovniki.1.of.2.avi" (22: Invalid
> argument) while sending response to client, client: 192.168.1.13,
> server: 192.168.1.1, request: "GET /Synovya.i.Lubovniki.1.of.2.avi
> HTTP/1.1", host: "192.168.1.1"
>
> по очевидной причине -- приемный буфер не выровнен на границу дискового
> блока:
>
> Breakpoint 1, ngx_read_file (file=0x80b9ec4, buf=0x80f3970 "",
> size=32768, offset=0)
> at src/os/unix/ngx_files.c:16
> 16 ngx_log_debug4(NGX_LOG_DEBUG_CORE, file->log, 0,
> (gdb) n
> 21 n = pread(file->fd, buf, size, offset);
> (gdb) n
> 23 if (n == -1) {
> (gdb) n
> 24 ngx_log_error(NGX_LOG_CRIT, file->log, ngx_errno,
> (gdb) n
> 26 return NGX_ERROR;
> (gdb) n
> 54 }
Человек, который предложил использовать O_DIRECT, проверял на Линуксе и Маке.
Скорее всего, он использовал большие output_buffers. В этом случае
Линуксе выделяет их на границе страницы. Можно попробовать
output_buffers 1 64k;
output_buffers 1 128k;
Возможно, нужно будет выделять с помощью memalign().
> Линус по этому вопросу уже писал:
>
> http://kerneltrap.org/node/7563
>
> Как я понимаю, тут правильно использовать posix_fadvise с аргументом
> POSIX_FADV_SEQUENTIAL.
>
> См. по теме:
>
> http://trac.lighttpd.net/trac/ticket/1418
Спасибо, посмотрю.
> Igor Sysoev wrote:
> >Патч добавляет директиву directio, разрешающую использовать O_DIRECT
> >для файлов больше указанного размера:
> >
> >directio 4m;
> >directio 0; # запрещает O_DIRECT, default
> >
> >Можно ставить на уровне http/server/location.
> >Возможно, имеет смысл выключить sendfile.
> >
> >O_DIRECT, по идее, должно улучшать скорость отдачи больших файлов
> >и ухудшать - небольших.
--
Игорь Сысоев
http://sysoev.ru
More information about the nginx-ru
mailing list