Re: limit rate и высокие скорости

Maxim Dounin mdounin на mdounin.ru
Пт Июн 26 16:31:52 UTC 2020


Hello!

On Thu, Jun 25, 2020 at 03:52:47PM -0400, edo1 wrote:

> > https://trac.nginx.org/nginx/ticket/1678#comment:1
> 
> читал
> 
> > Подкрутить можно размеры буферов и/или включить sendfile,
> 
> размеры крутил (без них было сильно хуже), sendfile тоже пробовал включать
> (точнее отключать aio).
> 
> с "output_buffers 2 10m" получается около 80Мб/с, но 20Мб на клиента как-то
> перебор (и опять же это не ровно 100, как в указано через limit_rate)

Ну так и гигабит на клиента - это немало.

Там достаточно простой алгоритм, для ограничения мгновенной 
скорости считающий время, положенное на отправку конкретного 
набора буферов.  И если погрешности вычислений велики - результат 
оказывается, скажем так, не идеальным.

При скорости в 100 мегабайт в секунду - характерным размером будет 
102 килобайта, объём данных, отправляемый за 1 миллисекунду.  
Суммарный размер буферов меньше - мгновенная скорость 
ограничиваться не будет.  А если больше - то будет, и при типичном 
значении CONFIG_HZ=250 задержки в 1 миллисекунду будут 
превращаться в 4 миллисекунды, то есть скорость имеет все шансы 
оказаться в четыре раза меньше заданной (а если CONFIG_HZ вдруг 
меньше, как в тикете по ссылке - то будет и того хуже).  
Погрешность процентов в 10 получим где-то ближе к 4 мегабайтам 
буферов суммарно, но тут уже скорее всего будут другие 
ограничивающие факторы - как то особенности шедулинга, размеры 
буферов сокетов и другие задержки в ходе обработки.

Пытаться с этим бороться и напрограммировать алгоритм, не 
подверженный ошибкам при "плохих" размерах буферов - можно, но 
смысла в этом не очень много, так как для ограничений в гигабиты 
limit_rate обычно не используют, AFAIK.

-- 
Maxim Dounin
http://mdounin.ru/


Подробная информация о списке рассылки nginx-ru