Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: tcp_nodelay on;
Hello!
On Fri, Apr 24, 2009 at 08:08:49PM +0400, Михаил Монашёв wrote:
> Здравствуйте, Максим.
>
> >> >> MD> Да. Но поскольку nginx использует внутреннюю буферезацию и не
> >> >> MD> отправляет в сеть пакеты меньше postpone_output (1460 байт по
> >> >> MD> умолчанию), то особого смысла отключать tcp_nodelay не имеет.
> >> >>
> >> >> А если у меня mtu 9000, а не 1500 ?
> >>
> >> MD> Увеличить postpone_output при увеличении mtu должно быть полезно,
> >> MD> по крайней мере для внутренних соединений.
> >>
> >> А сколько ставить? 9000 минус 40, т.е. 8960? Или 9000?
>
> MD> 8960
>
> >> Просто я не совсем понимаю, почему postpone_output 1460, а не 1500. На
> >> что отводятся эти 40 байт?
>
> MD> MTU - это сколько пролезет в ethernet. А пролезть должны данные и
> MD> заголовки протоколов по дороге (ip, tcp). Для заголовков 40 байт
> MD> и отводятся. Если протоколов больше или они другие (e.g. тунели
> MD> или ipv6) - то отводить надо больше.
>
> MD> http://en.wikipedia.org/wiki/Maximum_segment_size
>
> До меня дошло. Размер postpone_output можно подобрать через ping:
>
> sudo ping -D -s <packet-size> <ip>
>
> Просто нужно подставлять <packet-size> всё больше и больше, пока пинги
> не пропадут.
Нет, до тебя неправильно дошло. Ибо ping использует ICMP
echo-request, а тебе нужен TCP. У ICMP заголовок всего 8 байт,
т.е. в стандартное MTU 1500 влезет ping -s 1472, а в TCP пакет
столько данных уже не влезет.
Maxim Dounin
|