Размер блока чтения в proxy_module
Maxim Dounin
mdounin на mdounin.ru
Пн Май 23 13:00:14 UTC 2022
Hello!
On Mon, May 23, 2022 at 09:25:10AM +0300, Александр Кунич via nginx-ru wrote:
> Подскажите пожалуйста, есть ли способ настроить nginx так, чтобы он
> читал более большими кусками файлы? У меня стоит задача раздавать файлы,
> размер которых от 0,7 до 8 мегабайт. Большая часть больше 1М .
> Собрал массив на тестовом сервере.
> lsi raid1, размер чанка 1М,
>
> Тест fio с размером блока 1М показывает производительность массива
> 185-190 МБ/с
>
> Nginx , судя по iostat avgrq-sz, читает кусками чуть меньше 256КБ .
> Пиковая производительность в 2 раза меньше (около 80-85МБ/с).
>
> Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s
> avgrq-sz avgqu-sz await svctm %util
> sdd 0.60 0.00 348.80 0.00 73.39 0.00
> 430.93 7.01 20.08 2.45 85.44
>
> Пробовал как ext4, так и xfs. Результат примерно одинаков. Максимальный
> размер io у VD дисков выставлен в 1 мегабайт:
>
> /queue/max_hw_sectors_kb:1024
> /queue/max_sectors_kb:1024
>
> В тесте fio avgrq-sz близок к 2048, чего и хотелось бы достичь от nginx.
>
> Нигде в документации не нашёл параметров, которые явно могли бы на это
> повлиять. Различные буферы "крутить" пробовал, не помогает.
> Заранее, большое спасибо за помощь.
Если sendfile выключен - nginx будет читать с диска в соответствии
с размером output_buffers (http://nginx.org/r/output_buffers).
Если sendfile включён - чтением с диска занимается система, и
повлиять на это на Linux'е не очень много способов. Из того, что
можно сделать - с помощью директивы read_ahead
(http://nginx.org/r/read_ahead) уведомить систему, что читать мы
планируем последовательно, а также убедиться, что буфера сокетов
на отправку достаточного размера, чтобы обеспечить желаемый размер
чтения. Ну или выключить sendfile и смотри пункт первый.
--
Maxim Dounin
http://mdounin.ru/
Подробная информация о списке рассылки nginx-ru