Я экспериментировал с параметрами TCP в Linux (с ядром 3.5). В основном по поводу этой связи:
Сервер: Гигабитная восходящая линия связи в центре обработки данных, фактическая пропускная способность (из-за совместного использования восходящих линий связи) составляет около 70 МБ / с при тестировании из другого центра обработки данных.
Клиент: локальная сеть Gigabit, подключенная к 200 Мбит. Извлечение тестового файла на самом деле достигает 20 МБ / с.
Время ожидания: около 50 мс.
Удаленный сервер используется в качестве файлового сервера для файлов в диапазоне от 10 до 100 МБ. Я заметил, что при использовании значения initcwnd, равного 10, время передачи этих файлов сильно зависит от медленного запуска TCP, который занимает 3,5 секунды для загрузки 10 МБ (достигнута максимальная скорость: 3,3 МБ / с), поскольку он запускается медленно, а затем увеличивается, однако заканчивается до достижения максимальной скорости. Моя цель состоит в том, чтобы настроить минимальное время загрузки этих файлов (таким образом, не наивысшую сырую пропускную способность или наименьшую задержку при передаче туда и обратно, я готов пожертвовать обоими, если это уменьшит фактическое время, необходимое для загрузки файла)
Поэтому я попробовал простой расчет, чтобы определить, каким должен быть идеальный initcwnd, игнорируя любые другие соединения и возможное влияние на других. Произведение задержки по полосе пропускания составляет 200 Мбит / с * 50 мс = 10 Мбит или 1,310,720 байт. Учитывая, что initcwnd установлен в единицах MSS и предполагается, что MSS составляет около 1400 байтов, для этого потребуется настройка: 1.310.720 / 1400 = 936
Это значение очень далеко от значения по умолчанию (10 * MSS в Linux, 64 КБ в Windows), поэтому не стоит устанавливать его так. Каковы ожидаемые недостатки его настройки? Например:
- Повлияет ли это на других пользователей той же сети?
- Может ли это создать неприемлемую перегрузку для других соединений?
- Флуд роутер-буферов где-нибудь на пути?
- Увеличить влияние небольших количеств потери пакетов?
70 MB/s
а не мегабиты? Просто ищу разъяснений.