The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Предложение по включению режима TCP_NODELAY по умолчанию, opennews (??), 10-Май-24, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


24. "Предложение по включению режима TCP_NODELAY по умолчанию"  +/
Сообщение от кр3рр (?), 10-Май-24, 12:05 
И к слову, отключение TCP_NODELAY не отменяет агрегирования. Десять вызовов send() подряд не приведут к отправке 10 TCP-пакетов. Их, разумеется, будет в среднем больше, чем без NODELAY, но не 10.
Ответить | Правка | Наверх | Cообщить модератору

28. "Предложение по включению режима TCP_NODELAY по умолчанию"  +2 +/
Сообщение от Аноним (28), 10-Май-24, 13:08 
Я далек от глубокого понимания сетей и возможно не понял что ты имеешь ввиду, но ты же выше сам скинул ссылку на пост того самого Джона Нейгла (имени которого алгоритм) и он там утверждает что таки на каждый write() в сеть даже одного байта будет таки слаться отдельный IP-пакет с +40 байтами служебной информации:

"Turning on TCP_NODELAY has similar effects, but can make throughput worse for small writes. If you write a loop which sends just a few bytes (worst case, one byte) to a socket with "write()", and the Nagle algorithm is disabled with TCP_NODELAY, each write becomes one IP packet. This increases traffic by a factor of 40, with IP and TCP headers for each payload."

чего я не догнал, что упустил?

Ответить | Правка | Наверх | Cообщить модератору

40. "Предложение по включению режима TCP_NODELAY по умолчанию"  +/
Сообщение от Аноним (28), 10-Май-24, 14:28 
А, сорри. Невнимательно прочитал.

после прочтения строчки:
> Десять вызовов send() подряд не приведут к отправке 10 TCP-пакетов

подумал что имеется ввиду "их будет меньше" и уже глазами мельком проскочил и неверно прочитал следующую строку:
> Их, разумеется, будет в среднем больше
>> БОЛЬШЕ

Ответить | Правка | Наверх | Cообщить модератору

46. "Предложение по включению режима TCP_NODELAY по умолчанию"  +1 +/
Сообщение от кр3рр (?), 10-Май-24, 15:18 
При 10 вызовах send/write с малым количеством данных без NODELAY в идеале отправится 1 TCP-пакет, но с NODELAY не факт, что отправится 10 — это зависит от заполненности буфера или других факторов.

Подробно не исследовал, у меня была как раз задача отправлять по отдельному пакету на каждый вызов send/write в Linux для TCP-сокета, и я не смог ее решить стандартными средствами юзерспейса.

Ответить | Правка | Наверх | Cообщить модератору

92. "Предложение по включению режима TCP_NODELAY по умолчанию"  +/
Сообщение от Аноним (2), 11-Май-24, 11:19 
Агрегацией занимается драйвер сетевого устройства.
Ответить | Правка | Наверх | Cообщить модератору

95. "Предложение по включению режима TCP_NODELAY по умолчанию"  +/
Сообщение от Ivan_83 (ok), 11-Май-24, 12:46 
Вы большей частью не правы.

Вот как во фре:
# grep -rsp "TF_NODELAY" /usr/src/
/usr/src/sys/dev/cxgbe/tom/t4_tom.c:        toep->params.nagle = tp->t_flags & TF_NODELAY ? 0 : 1;
/usr/src/sys/dev/cxgbe/tom/t4_tom.c:        cp->nagle = tp->t_flags & TF_NODELAY ? 0 : 1;
/usr/src/sys/netinet/tcp_stacks/bbr.c:        } else if ((amm < maxseg) && ((tp->t_flags & TF_NODELAY) == 0)) {
/usr/src/sys/netinet/tcp_stacks/bbr.c:            ((tp->t_flags & TF_NODELAY) ||
/usr/src/sys/netinet/tcp_stacks/rack.c:            (idle || (tp->t_flags & TF_NODELAY)) &&
/usr/src/sys/netinet/tcp_stacks/rack.c:                   ((tp->t_flags & TF_NODELAY) == 0) &&
/usr/src/sys/netinet/tcp_output.c:            (idle || (tp->t_flags & TF_NODELAY)) &&
/usr/src/sys/netinet/tcp_syncache.c:        (TF_LRD|TF_NOPUSH|TF_NODELAY);
/usr/src/sys/netinet/tcp_usrreq.c:                opt = TF_NODELAY;
/usr/src/sys/netinet/tcp_usrreq.c:            optval = tp->t_flags & TF_NODELAY;
/usr/src/sys/netinet/tcp_usrreq.c:    if (t_flags & TF_NODELAY) {
/usr/src/sys/netinet/tcp_usrreq.c:        db_printf("%sTF_NODELAY", comma ? ", " : "");
/usr/src/sys/netinet/tcp_var.h:#define    TF_NODELAY    0x00000004    /* don't delay packets to coalesce */


те только один драйвер сетевух умеет в агрегацию.

Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру