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