Настройка потоковой рабочей схемы TCP

Потоковая рабочая схема предназначена для передачи больших объемов информации из одной конечной системы в другую. В качестве примеров потоковой рабочей схемы можно привести передачу файлов, а также резервное копирование или восстановление данных. Наиболее важной характеристикой в данном случае является пропускная способность. Однако в некоторых случаях рекомендуется обратить внимание на задержку при взаимодействии двух конечных систем.

Ниже приведены основные параметры, влияющие на производительность TCP в потоковых приложениях:

  • tcp_recvspace
  • tcp_sendspace
  • rfc1323
  • вычисление MTU маршрута
  • tcp_nodelayack
  • sb_max
  • Опции адаптера, такие как аппаратная проверка контрольной суммы и отправка больших объемов данных TCP
В приведенной ниже таблице перечислены рекомендуемые значения параметров, позволяющие получить оптимальную производительность для разных типов адаптеров и размеров MTU:
Device Speed Размер MTU tcp_sendspace tcp_recvspace sb_max 1 rfc1323
Token Ring 4 или 16 Мбит/с 1492 16384 16384 32768 0
Ethernet 10 Мбит/с 1500 16384 16384 32768 0
Ethernet 100 Мбит/с 1500 16384 16384 65536 0
Ethernet Gigabit 1500 131072 65536 131072 0
Ethernet Gigabit 9000 131072 65535 262144 0
Ethernet Gigabit 9000 262144 1310722 524288 1
Ethernet 10 Гигабит 1500 131072 65536 131072 0
Ethernet 10 Гигабит 9000 262144 131072 262144 1
ATM 155 Мбит/с 1500 16384 16384 131072 0
ATM 155 Мбит/с 9180 65535 655353 131072 0
ATM 155 Мбит/с 65527 655360 6553604 1310720 1
FDDI 100 Мбит/с 4352 45056 45056 90012 0
Fibre-Channel 2 Гбит/с 65280 655360 655360 1310720 1

(1) Для параметра sb_max рекомендуется указывать значение по умолчанию, равное 1048576. Значения, перечисленные в таблице, представляют собой минимально допустимые значения параметра sb_max.

(2) При использовании rfc1323 данные опции позволяют дополнительно увеличить производительность системы в режиме больших кадров Gigabit Ethernet.

(3) При некоторых размерах буферов приема и передачи TCP пропускная способность может стать очень низкой (около 1 Мбит/с или меньше). Для того чтобы эта проблема не возникала, размер tcp_sendspace должен как минимум в три раза превосходить размер MTU, а также должен быть не меньше значения tcp_recvspace целевой системы.

(4) Размер окна TCP должен быть не более чем 16-разрядным значением. Другими словами, максимальный размер окна может составлять 65536 байт. В результате при работе с адаптерами с большими значениями MTU (например, 32 КБ или 64 КБ) эффективность передачи данных по потоковому соединению TCP будет очень низкой. Например, если размер MTU устройства равен 64 КБ, и параметр tcp_recvspace равен 64 КБ, то окно будет закрыто после отправки первого из пакетов. Следующий пакет будет отправлен только после получения подтверждения от целевой системы. Эту проблему можно решить следующими способами:
  • Включить опцию rfc1323, позволяющую увеличить размер окна TCP более чем до 64 КБ. В этом случае можно установить большое значение tcp_recvspace, например, в десять раз превосходящее размер MTU. Это позволит TCP передавать данные потоком, что приведет к повышению производительности.
  • Уменьшить размер MTU адаптера. Например, с помощью команды ifconfig at0 mtu 16384 можно установить размер MTU в сети ATM равным 16 КБ. При этом TCP вычислит меньшее значение MSS. Если размер MTU равен 16 КБ, а размер окна - 64 КБ, то TCP может отправить four пакета, не дожидаясь получения подтверждения.

Ниже приведены общие рекомендации по настройке потоковой рабочей схемы TCP:

  • Размер буферов приема и передачи TCP должен быть как минимум в 10 раз больше размера MTU.
  • Если размер MTU превышает 8 КБ, то для увеличения допустимых размеров буферов приема TCP следует применять опцию rfc1323.
  • Для высокопроизводительных адаптеров большой размер буферов приема и отправки позволяет увеличить производительность.
  • Для высокопроизводительных адаптеров значение параметра tcp_sendspace должно быть в два раза больше значения tcp_recvspace.
  • rfc1323 для интерфейса lo0 имеет значение по умолчанию. Значение по умолчанию размера MTU для lo0 больше, чем 1500, и, поэтому, переменные tcp_sendspace и tcp_recvspace имеют значение 128K.

Примерами приложений TCP, производительность которых может значительно повыситься после настройки параметров tcp_sendspace и tcp_recvspace, могут служить команды ftp и rcp.