Как оценить пропускную способность TCP между серверами
Итак, вы только что получили сервер с гарантированным выделенным каналом на 1Гбит/с (или более) и были неприятно удивлены, обнаружив относительно медленный трансфер файлов. Прежде чем писать в техподдержку и искать неполадки в сети, оцените реальную пропускную способность TCP от одного хоста до другого.
Следует выделить два наиболее важных фактора для успешной передачи данных по протоколу TCP:
- размер TCP-окна — количество байт, которое одна из сторон готова принять без подтверждения;
- круговая задержка (латентность) передачи-приема — время, затраченное на отправку пакета и подтверждение его доставки.
Если вы знаете оба этих показателя, то с легкостью рассчитаете максимально возможную пропускную способность между двумя хостами вне зависимости от ширины полосы пропускания.
Формула расчета пропускной способности TCP
Пропускная способность TCP (бит/с) = Размер TCP-окна (бит) / Круговая латентность (с)
Разберем на простом примере. Имеется гигабитный Ethernet-канал между серверами с круговой задержкой 30 мс. Необходимо отправить большой файл с одного сервера на другой сервер по протоколу FTP. На какую реальную пропускную способность можно рассчитывать?
Сначала необходимо перевести размер TCP-окна из байтов в биты. В данном случае будет задействовано стандартное TCP-окно Windows-машины размером 64 КБ = 65 536 Б = 65 536 * 8 = 524 288 бит.
Затем необходимо взять размер TCP-окна в битах и разделить его на круговую латентность канала, выраженную в секундах. Для целей данных расчетов 30 мс превращается в 0.030 с.
Максимальная пропускная способность TCP = 524 288 бит / 0.030 с = 17 476 266 бит/с = 17.4 Мбит/с
Таким образом, несмотря на тот факт, что между двумя серверами имеется гигабитная Ethernet-связь, при передаче файлов нельзя рассчитывать более чем на 17 Мбит/с.
Как можно сделать сеть быстрее? Ответ очевиден: увеличить размер TCP-окна и/или сократить задержку сигнала.
Для того чтобы согласовать больший размер TCP-окна, требуется индивидуальная ручная настройка каждого сервера. Это, в свою очередь, приводит к следующему вопросу: какой размер TCP-окна можно считать оптимальным? Чтобы выяснить это, необходимо провести обратные вычисления, опираясь на ширину полосы пропускания.
Формула для расчета оптимального размера TCP-окна
Размер TCP-окна (байт) = Размер TCP-окна (бит) / 8 = Пропускная способность (бит/с) * Круговая латентность (с) / 8
В вышеобозначенном примере для гигабитного Ethernet-маршрута между серверами с круговой задержкой 30 мс, получается следующее значение:
1 000 000 000 бит/с * 0.030 с = 30 000 000 бит / 8 = 3 750 000 байтов.
Иными словами, если сконфигурировать оба сервера на TCP-окно в 3 750 КБ, FTP-соединение полностью заполнит полосу пропускания и достигнет пропускной способности в 1 Гбит/с.
Следует знать, что увеличение размера TCP-окна имеет свои недостатки.
Во-первых, это потребует больше памяти для буферизации серверов, которая необходима для хранения неподтвержденных данных на случай их повторной отправки.
Во-вторых, увеличенный размер TCP-окна может повлечь за собой большее количество потерянных пакетов, которые, в свою очередь, требуют повторной передачи всего окна. Это может негативно сказаться на производительности. Для решения этой проблемы в стеке TCP/IP сервера может быть активирована опция «выборочные подтверждения», которая по умолчанию выключена.
Один из вариантов решения проблемы — размещение WAN-акселераторов — ускорителей глобальной сети на каждом конце линии. Они:
- открывают увеличенное TCP-окно;
- предоставляют возможность тонкой оптимизации протокола TCP (например, выборочные подтверждения только между акселераторами);
- не требуют специальной настройки серверов или дополнительной буферной памяти;
- могут использовать особые функции прикладного уровня модели OSI (Layer 7 — доступ к сетевым службам) для сокращения круговой задержки.
Латентность
Уменьшить задержку сигнала? Возможно ли это в принципе? Мы не в состоянии преодолеть скорость света, а, значит, никак не можем повлиять на время прохождения сигналом заданного расстояния.
Оптимальный способ оптимизации, опять же, заключается в установке WAN-ускорителя на каждом конце линии, который передает полученные TCP-пакеты локальному серверу, тем самым «обманывая» его на предмет реальной скорости трансфера данных. Локальный сервер принимает моментальные подтверждения ускорителя вместо того, чтобы ждать заторможенный отклик удаленного сервера. Это избавляет нас от необходимости корректировки размера TCP-окна на самих серверах.
Пара WAAS-устройств используют увеличенный размер TCP-окна и выборочные подтверждения на всем участке линии между ними.
Кроме того, WAAS эффективно очищают TCP-поток от избыточных резервных данных, обеспечивая чрезвычайно высокий уровень компрессии (сжатия). Каждый акселератор запоминает ранее просмотренные данные. Если дублирующий фрагмент возникает повторно, он удаляется и заменяется крошечной 2-байтовой меткой. Эта миниатюрная метка распознается удаленным ускорителем, который вставляет вместо нее оригинальный фрагмент данных перед отправкой трафика на локальный сервер.
Подтвержденный на практике результат оптимизации — более высокая пропускная способность линии между серверами без какой-либо специальной TCP-настройки локальных серверов.
Формула для расчета максимальной допустимой задержки для заданной пропускной способности
Пример. На участке между двумя удаленными серверами необходимо гарантировать пропускную способность FTP 10 Гбит/с, используя стандартный размер TCP-окна (64 КБ). Какая максимальная задержка сигнала допустима?
Круговая латентность (мс) = Размер TCP-окна (бит) / Требуемая пропускная способность (бит/с)
524 288 бит / 10 000 000 000 бит/с = 52.4 микросекунды
Что делать?
В принципе, вы можете и не увеличивать TCP-окно и не устанавливать WAN-ускорители. Просто используйте многопоточность и вы сможете использовать канал на 100% его пропускной способности!