Re: Посоветуйте конфиг nginx для отдачи одновременно 10к+ файлов
Валентин Бартенев
vbart at nginx.com
Thu Mar 7 12:01:37 UTC 2013
On Thursday 07 March 2013 15:02:49 arty777 wrote:
> Валентин Бартенев Wrote:
> -------------------------------------------------------
>
> > On Thursday 07 March 2013 13:27:05 arty777 wrote:
> > > Андрей Василишин Wrote:
> > > -------------------------------------------------------
> > >
> > > > Вам говорят что-нибудь слова block size, sector size?
> > > >
> > > > Опять же из мана:
> > > > Поскольку directio в Linux можно использовать только для чтения
> > > > блоков,
> > > > выравненных на границу 512 байт (или 4К для XFS), то невыравненный
> > > > конец
> > > > файла будет читаться блокированно. То же относится к запросам с
> > > > указанием диапазона запрашиваемых байт (byte-range requests) и к
> > > > запросам FLV не с начала файла: чтение невыравненных начала и
> >
> > конца
> >
> > > > ответа будет блокирующимся. Явно выключать sendfile не нужно, так
> >
> > как
> >
> > > > при использовании directio он выключается автоматически.
> > >
> > > У меня линукс , и ext4
> > >
> > > tune2fs -l /dev/sdm1
> > > Block size: 4096
> > > Fragment size: 4096
> > >
> > > Получается что надо ставить
> > > directio_alignment 4K;
> > >
> > > а не 512 как написано в мане :) Верно?
> >
> > Нет, не верно.
> >
> > > Если да, то может стоить ман поправить , а то все у кого линукс и
> >
> > не XFS
> >
> > > будут ставить 512 , хотя по умолчанию блок сайз у ext4 4К
> >
> > Размер блоков на ext4 не имеет значения для O_DIRECT. В мане написано
> > верно.
>
> Пишите понятнее. Аргументируйте. Размер блоков не имеет значения , а что
> имеет:?
Имеет значение особенности реализации поддержки O_DIRECT в Linux-ядре.
> Я поставил directio_alignment 4K; производительност ькаждого отдельного
> диска увеличалась существенно , +25-30% . Как это объяснить?
>
Вы выключили O_DIRECT для всех чтений не выравненных на 4k, т.е. для некоторых,
которых он ранее работал - более не включается вообще. Это такой очень странный
способ повлиять на значение директивы directio. Зачем вы её вообще включили,
если вам без неё лучше?
Неправильно указанный directio_alignment (скажем 512 там, где нужно 4k) приведет
к ошибкам в error_log вида:
[crit] pread() failed (22: Invalid argument) while sending response to client
и невозможности nginx обработать запрос.
--
Валентин Бартенев
http://nginx.org/en/donation.html
Подробная информация о списке рассылки nginx-ru