#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