ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: 100ms delays in FreeBSD 8.x



Hello!

On Fri, Sep 03, 2010 at 01:24:39PM +0400, Igor Sysoev wrote:

> On Fri, Sep 03, 2010 at 01:26:24AM +0300, Vladislav V. Prodan wrote:
> 
> > В 9.0-CUPRRENT тоже есть:
> > # sysctl net.inet.tcp | grep del
> > net.inet.tcp.delacktime: 100
> > net.inet.tcp.delayed_ack: 1
> > # uname -a
> > FreeBSD solo.XXXX.biz 9.0-CURRENT FreeBSD 9.0-CURRENT #0: Tue Aug 24
> > 15:52:21 EEST 2010
> 
> Проблема не столько в delayed ack, сколько в ошибке, 

Игорь, я понимаю что top-posting читать невозможно, но всё таки: 
исходная проблема уже никого не интересует, тут люди на полном 
серьёзе исследуют вопрос есть ли во FreeBSD delayed ack.

Я уже ответил что он там есть, но почему-то некоторые не верят.  
Повторяю подробнее: он там есть, как минимум начиная с 2.0 (был в 
4.4BSD Lite), во всех версиях включён по умолчанию, sysctl для 
отключения появился где-то в районе 3.0.

> из-за которой
> игнорируются
> 
> net.inet.tcp.local_slowstart_flightsize (4)
> net.inet.tcp.slowstart_flightsize (1)
> 
> Особенно хорошо это заметно на локальных сетях (в том числе и для
> loopback), для которых используется local_slowstart_flightsize.
> При дефолтном значении slowstart_flightsize (1) ошибка не видна.

Нет. (c)

Slowstart уже давно не используется на старте соединений (если мне 
не изменяет память - недавно в current открутили и для рестарта), 
вместо него используется выражение из RFC 3390:

        if (tcp_do_rfc3390)
                tp->snd_cwnd = min(4 * mss, max(2 * mss, 4380));

Не вводи людей в заблуждение.  Да и сам из него выйди. ;)

Проблема состоит в том, что из-за ошибки в коде syncache'а cwnd 
всегда сбрасывался в 1 * mss (и, кстати, cwnd из hostcache тоже 
в результате игнорировался).

Это нивелировалось другой особенностью кода - при установлении 
соединения ACK на SYN+ACK приводил к увеличению cwnd на mss.  Т.е. 
фактически в ответе всегда можно было отправить два полных пакета - 
а на два полных пакета принимающая сторона обязана прислать ack.  И 
проблем с delayed ack не было.

Ситуацию изменило введение поддержки RFC 3465 (appropriate byte 
counting).  Теперь по ACK на SYN+ACK cwnd стали увеличивать только 
на 1 байт.  И проблема со сбросом cwnd вылезла боком: стало 
возможным послать только один полный пакет, и после этого 
приходилось ждать ack'а, который - delayed.

Maxim Dounin

p.s.  И, кстати, именно из-за той же особенности кода (увеличения 
cwnd по ack на syn+ack на mss) slowstart_flightsize=1 не приводил 
к тем же проблемам с delayed ack (когда использовался).  Если 
сейчас rfc3390 выключить, а rfc3465 включить - то увидим ту же 
задержку в 100ms при slowstart_flightsize=1, в том числе с патчем 
из моего исходного письма.

> 
> > 02.09.2010 20:44, Maxim Dounin пишет:
> > > Hello!
> > > 
> > > On Thu, Sep 02, 2010 at 12:52:20PM -0400, Alex Sergeyev wrote:
> > > 
> > >> но интересно узнать тогда как задержки появляются при проксировании
> > >> localhost? BSD же не делает delayed ack?
> > > 
> > > Кто сказал что не делает?  Ещё как делает, те самые 100ms по 
> > > умолчанию.
> > > 
> > > $ sysctl net.inet.tcp | grep del
> > > net.inet.tcp.delacktime: 100
> > > net.inet.tcp.delayed_ack: 1
> > > 
> > > Maxim Dounin
> 
> 
> -- 
> Игорь Сысоев
> http://sysoev.ru
> 
> _______________________________________________
> nginx-ru mailing list
> nginx-ru@xxxxxxxxx
> http://nginx.org/mailman/listinfo/nginx-ru

_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.