Re: когда лучше использовать multi_accept on

Валентин Бартенев vbart на nginx.com
Пт Июн 10 12:58:07 UTC 2016


On Thursday 26 May 2016 21:48:11 VovansystemS wrote:
> Добрый вечер,
> 
> подскажите пожалуйста, в каких случаях нужно включать multi_accept on
> и как именно он работает?
> 
> документацию читал http://nginx.org/r/multi_accept/ru
> из того, что мне удалось нагуглить, ничто не проясняет ситуацию для меня:
> 
[..]

Когда multi_accept выключен, то получая событие на listen-сокете рабочий
процесс accept-ит и обрабатывает одно соединение, а затем снова уходит в
ядро за событиями.

Когда multi_accept включен, то по событию на listen-сокете рабочий процесс
в цикле пытается accept-ить и обрабатывать соединения до тех пор, пока не
получит EAGAIN.

Если поступающих соединений очень много, то второй вариант работы может
оказаться чуть оптимальнее, за счет того, что рабочий процесс для получения
каждого соединение не ходит за событием в ядро.

Если соединений мало, то будет много лишних вызовов accept() с EAGAIN.

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

В целом, скорее всего эффект от этой директивы неизмеримо мал, и трогать
её значение не имеет смысла, за исключением экспериментов с какими-то
искусственными бенчмарками.

--
Валентин Бартенев


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