Размер блока чтения в 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