Какой файл net / ipv4 содержит параметр размера окна TCP для ядра Linux?

#unix #tcp #network-programming #linux-kernel #kernel

#unix #tcp #сетевое программирование #linux-ядро #ядро

Вопрос:

Я пытаюсь настроить размер окна TCP, чтобы улучшить пропускную способность между двумя сетевыми каналами. Чтобы сделать это, я хочу полностью понять, как ядро UNIX реализует механизм управления перегрузкой TCP. Я прекрасно понимаю теорию механизма, но я действительно хочу, чтобы он был реализован в коде ядра. Какой файл управляет параметром размера окна TCP?

Кроме того, я был бы очень признателен за любую хорошую документацию о том, как ядро UNIX реализует механизм контроля перегрузки TCP. Мне не нужна документация о том, что такое механизм управления TCP (я много читал об этом), но информация о реализации ядра была бы отличной.

Моя мотивация — настроить ядро, чтобы посмотреть, смогу ли я улучшить производительность. Я знаю, что модифицировать ядро сложно, но я внес несколько изменений в раздел RTO кода ядра и смог успешно скомпилировать. Мне просто нужна помощь с окном TCP и его механизмом в ядре UNIX.

Комментарии:

1. Рассматривали ли вы возможность использования sysctl ? Там есть множество параметров настройки TCP, которые вы можете изменять во время выполнения, ничего не перекомпилируя.

2. То, что вы говорите, — это сохранить максимальное значение. ограничение размера окна, но я хочу удалить экспоненциальное отклонение, поэтому я сохраняю размер окна постоянным. Я не отключаю окно, даже если пакет потерян в сети. С помощью sysctl я могу изменить общее окно, но я не могу указать механизму управления TCP в ядре UNIX прекратить выполнение отката. Как я выяснил, единственный способ — удалить резервный код из ядра. Итак, я хочу знать, где находится этот файл??

3. cd net /ipv4 ; grep backoff * . Однако вы не сможете перехитрить все тысячи и тысячи часов, уже потраченных на TCP. Вместо этого настройте размеры окна и буферы сокетов.

4. Как мне настроить размеры окна ????. Я имею в виду, в каком файле файла net / ipv4 я должен внести изменения, чтобы играть с ними…

Ответ №1:

net/ipv4/tcp_output.c, функция __tcp_select_window

http://lxr.linux.no/#linux v3.1.1/net/ipv4/tcp_output.c#L1842

и tcp_select_window

http://lxr.linux.no/#linux v3.1.1/net/ipv4/tcp_output.c#L254

А net/ipv4/tcp_input.c tcp_ack_update_window является средством обновления локального окна после запроса от удаленного.

http://lxr.linux.no/#linux v3.1.1/net/ipv4/tcp_input.c#L3447