LINUX.ORG.RU

небольшой вопрос о tcp_mtu_probe


0

1

Функция tcp_mtu_probe в начале своей работы проводит ряд проверок: не используется ли SACK, не восстанавливаемся ли после перегрузки и т.д. Вот соответствующий кусок кода:

/* Not currently probing/verifying,
	 * not in recovery,
	 * have enough cwnd, and
	 * not SACKing (the variable headers throw things off) */
	if (!icsk->icsk_mtup.enabled ||
	    icsk->icsk_mtup.probe_size ||
	    inet_csk(sk)->icsk_ca_state != TCP_CA_Open ||
	    tp->snd_cwnd < 11 ||
	    tp->rx_opt.num_sacks || tp->rx_opt.dsack)
		return -1;
Меня интересует, что означает число 11 в данной проверке, почему размер окна перегрузки сравнивается именно с ним?

Ответ на: комментарий от true_admin

Да, это точно. Но хотелось бы ответа по существу. Между делом, в ядре линукса такой «магии» тонны, в том числе глупые ошибки порой живут из релиза в релиз. Это печально, но обсуждаем мы, я надеюсь, нечто другое.

nocomer
() автор топика
Ответ на: комментарий от Harald

Я задал этот вопрос в netdev, но никто не отвечает.

Насколько я знаю, этот код в таком виде существует в ядре с версии 2.6.17, а до этого существовал в виде патчей к ядру.

Можно, конечно, попробовать спросить Джона Хеффнера. Надеюсь, его gmail-овский ящик жив, потому что он не работает в PSC и его ящик на psc.edu вряд ли жив.

nocomer
() автор топика

Нагрепил тут функцию tcp_v4_init_sock. Там есть такой код:


         /* So many TCP implementations out there (incorrectly) count the
         * initial SYN frame in their delayed-ACK and congestion control
         * algorithms that we must have the following bandaid to talk
         * efficiently to them.  -DaveM
         */
         tp->snd_cwnd = TCP_INIT_CWND;

TCP_INIT_CWND - это 10.

Может чем поможет.

ttnl ★★★★★
()
Ответ на: комментарий от true_admin

После того как я написал ему на gmail, Джон Хеффнер ответил в рассылку:

TCP doesn't operate as well with a small window, and below some point there isn't really a justification for increasing the MTU size. 11 is something of a magic number, but here's the reasoning: A cwnd of 11 pre-probe will result in a cwnd of 6 after a successful probe. (By the time the probe succeeds, cwnd will have been increased to 12, then doubling MSS will halve cwnd to 6.) A window size smaller than this makes TCP more vulnerable to double loss events and increases the likeliness of timeouts.

nocomer
() автор топика
Ответ на: комментарий от true_admin

Если не влом ;)
Сейчас времени нет ставить git и тянуть ядро. К тому же не знаю точно, как туда лучше вставить комментарий. Могу предложить вариант:

/*A cwnd of 11 pre-probe will result in a cwnd of 6 after a successful probe.
* A window size smaller than this makes TCP more vulnerable to double loss 
* events and increases the likeliness of timeouts.
*/
Сможешь отправить патч?

P.S. Если интересно, в netdev письмо с темой «tcp_mtu_probe implementation details»

nocomer
() автор топика
Ответ на: комментарий от nocomer

После 11-го января займусь, щас дел много :(

в netdev письмо с темой «tcp_mtu_probe implementation details»

видел :)

true_admin ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.