Online video hd

Смотреть молоденькие видео

Официальный сайт forexnw 24/7/365

Смотреть видео бесплатно

16.11.10 20:15 mhspace

ПереводыТонкая настройка TCP

Оригинал
Ядра Linux версий 2.4 и 2.6 существенно различаются. Сначала мы рассмотрим общие для них настройки.
Чтобы изменить настройки TCP, надо изменить файл /etc/sysctl.conf, а затем выполнить "sysctl -p".

Как и во всех операционных системах, стандартные размеры буфера TCP обычно слишком малы. Я предлагаю изменить их следующим образом:

1
2
3
4
5
6
7
8
9
10
11
12
# увеличим максимальный размер буфера TCP, устанавливаемый setsockopt()
# 16 MB с несколькими параллельными потоками рекомендуется для большинства 10Gb участков сетей
# 32 MB могут понадобиться для некоторых очень длинных последовательных 10Gb или 40Gb участков сетей
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
# увеличим пределы для автоматической настройки размера буфера TCP
# минимальный, стандартный и максимальный размер в байтах
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.ipv4.tcp_rmem = 4096 87380 33554432
net.ipv4.tcp_wmem = 4096 65536 33554432
 

Вам следует убедиться в том, что все следующие переменные имеют стандартное значение — 1.

1
2
3
sysctl net.ipv4.tcp_window_scaling
sysctl net.ipv4.tcp_timestamps
sysctl net.ipv4.tcp_sack


Примечание: tcp_mem лучше оставить в покое. Стандартное значение сойдёт.

Ещё одна вещь, которая поможет вам увеличить пропускную способность сетевых адаптеров 1000baseT - увеличение размера очереди сетевого интерфейса. Для участков сети с временем приёма-передачи (RTT) более, чем 50мс, рекомендуется значение 5000 — 10000:

ifconfig eth0 txqueuelen 5000


На длинных, быстрых участках сети вы таким образом можете достичь существенного увеличения пропускной способности, вплоть до десятикратного. Однако, это применимо только к машинам, соединённым Gigabit Ethernet. Кроме того, возможны побочные эффекты, такие как неравномерное распределение между несколькими потоками.

Кроме того, я рассказывал, что для некоторых участков сети использование подсистемы Linux traffic control ('tc', контроль трафика) (прим. переводчика: подробнее здесь и здесь) для ограничения скорости исходящего трафика может улучшить общую пропускную способность.

Linux 2.6

Начиная с ядра версии 2.6.7, в Linux включены альтернативные алгоритмы управления перегрузкой сети (которые были бэкпортированы в 2.4.27), помимо традиционного алгоритма 'reno'.(Прим.переводчика: см.также RFC 2581 — Контроль насыщения в TCP тут http://rfc2.ru/2581.rfc). Они разработаны для быстрого восстановления потерянных пакетов на высокоскоростных WAN.

Кроме того, в Linux 2.6 есть система автоматической настройки буфера со стороны отправителя и получателя (которая может изменять его вплоть до указанных выше максимальных размеров). Ниже описана опция, исправляющая странное кэширование ssthresh (порог медленного старта, RFC на русском)

Еще несколько дополнительных sysctl-настроек в 2.6:

1
2
3
4
# не кэшировать ssthresh с предыдущих соединений
net.ipv4.tcp_no_metrics_save = 1
# рекомендуется увеличить для 10-ти гигабитных сетевых карт
net.core.netdev_max_backlog = 30000


Начиная с версии 2.6.13, Linux поддерживает подключаемые алгоритмы управления перегрузкой сети. Используемый алгоритм управления перегрузкой устанавливается с помощью sysctl-переменной net.ipv4.tcp_congestion_control, которая по умолчанию установлена на bic, cubic или reno, в зависимости от версии используемого вами ядра 2.6.

Для получения списка доступных алгоримов управления перегрузкой для вашего ядра (если вы используете 2.6.20 или выше), выполните:

sysctl net.ipv4.tcp_available_congestion_control


Настройки управления перегрузкой выбираются при сборке ядра. Вот несколько опций, доступных для ядра 2.6.23:
  • reno: Традиционный TCP, используется в большинстве других ОС. (стандартный)
  • cubic: CUBIC-TCP (прим. переводчика: подробнее на русском)
  • bic: BIC-TCP (прим. переводчика: подробнее на русском)
  • htcp: Hamilton TCP
  • vegas: TCP Vegas
  • westwood: оптимизирован для сетей с потерями

Если cubic и/или htcp отсутствуют в списке, выданном 'sysctl net.ipv4.tcp_available_congestion_control', попробуйте выполнить приведенную ниже команду. В большинстве дистрибутивов эти алгоритмы содержатся в виде подгружаемых модулей ядра:

1
2
/sbin/modprobe tcp_htcp
/sbin/modprobe tcp_cubic

ПРИМЕЧАНИЕ: Кажется, в bic и cubic в ядре 2.6.18, используемом в RedHat Enterprise Linux 5.3 - 5.5 и его производных (CentOS, Scientific Linux и т. д.), есть баги. Мы рекомендуем использовать htcp с ядрами 2.6.18.x для безопасности.

Для длинных быстрых участков сети мы настоятельно рекомендуем использовать cubic или htcp. Cubic установлен по умолчанию в большинстве дистрибутивов Linux, но если в вашей системе не так, вы можете исправить это следующим образом:

sysctl -w net.ipv4.tcp_congestion_control=cubic


В RPM-системах можно использовать пакет ktune, который делает всё это не хуже.

Больше информации о каждом из этих алгоритмов и некоторые результаты подобных манипуляций можно найти здесь.

Больше информации о настройке параметров и значенях по умолчанию доступно в файле ip-sysctl.txt, который поставляется вместе с исходниками Linux 2.6.

Предупреждение о больших MTU: если вы настроили свою Linux-машину на использование MTU = 9000, а соединение использует пакеты по 1500 байт, то в действительности вам нужен в 9/1.5 = 6 раз больший размер буфера, чтобы заполнить канал. На практике, некоторые драйверы устройств резервируют память только в размере, равном степени двойки, поэтому вам может понадобиться в 16/1.5 = 11 раз больший размер буфера!

И, наконец, предупреждение для 2.4 и 2.6: для всех участков сети с большим BDP, где размер TCP window больше 20 MB, вы, вероятно, столкнётесь с проблемой реализации SACK в Linux. Если у ядра слишком много пакетов в потоке, при получении SACK-события на поиск SACK пакета уходит слишком много времени, и вы получаете TCP тайм-аут, а CWND возвращается на один пакет. Ограничение размера буфера TCP до 12 MB, по-видимому, позволяет избежать этой проблемы, но определённо ограничивает общую пропускную способность. Другое решение заключается в том, чтобы отключить SACK.

Linux 2.4

Начиная с версии 2.4, в ядре Linux был реализован механизм автонастройки на стороне отправителя, поэтому настройка оптимального размера буфера у отправителя не нужна. Предполагаетcя, что вы установили большой размер буфера на стороне получателя, так как буфер отправителя не станет больше буфера получателя.

Однако, Linux 2.4 имеет некоторые другие странности, о которых вы должны знать. Например: Значение ssthresh для данного участка сети кэшировано в таблице маршрутизации. Это значит, что если соединение имеет ретрансляции и уменьшает своё окно, тогда все соединения к этому хосту на следующие 10 минут будут использовать уменьшенный размер окна, и даже не пытаясь увеличить его. Единственный способ отключить такое поведение это выполнить следующее (от суперпользователя) перед всеми новыми соединениями:

sysctl -w net.ipv4.route.flush=1


Больше информации о различных параметрах Linux 2.4 доступно в учебнике Ipsysctl.

Linux 2.2

Если вы всё ещё используете Linux 2.2, обновитесь! Если это невозможно, добавьте следующие строки в /etc/rc.d/rc.local

1
2
3
4
echo 8388608 > /proc/sys/net/core/wmem_max
echo 8388608 > /proc/sys/net/core/rmem_max
echo 65536 > /proc/sys/net/core/rmem_default
echo 65536 > /proc/sys/net/core/wmem_default




Оригинал (английский): TCP Tuning Guide
Перевод: © Инициативная группа welinux.ru mhspace, Zereal, Pipeliner, settler.

translated.by переведено толпой

Большое спасибо nikebl за ссылку на оригинал:)


Теги:

le087 16.11.10 21:15 # +2
Спасибо, ребята. Полезная инфа!!!
NutipA 16.11.10 22:13 # +2
молодцы, ребята!
proDOOMman 16.11.10 23:23 # +0
>Если вы всё ещё используете Linux 2.2...
то ваша машина времени работает неправильно
bkmz 17.11.10 10:38 # +0
Я думаю что если и есть такие машины, то вы про них попросту не знаете)))
Alx 18.11.10 14:05 # +1
ну некоторые девайсы типа модемов, точек доступа
dr_magnus 17.11.10 02:08 # +2
очень длинных последовательных 10Gb или 40Gb участков сетей

а здесь есть такие, кто это использует?
nikebl 17.11.10 15:49 # +2
Спасибо тем кто делал, однако, тут еще есть чем дополнить, например тот же somaxconn, syncoockie, tcp_loose или ip_conntrack, хотя это же только перевод..
Zereal 17.11.10 16:43 # +1
может быть ты напишешь про это статью?:)
nikebl 24.11.10 16:13 # +0
Я бы с радостью, но для этого мне просто необходим сильный пинок, писание тех документации настолько не любимо мной, что я умудряюсь забивать на это даже на работе.
freefd 17.11.10 21:22 # +3
Конфигурация с машины, пропускающей через себя в пике 900 Мбит/c трафика пользователей. Gentoo c ядром 2.6.26.

net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.rp_filter = 1
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.ipv4.tcp_no_metrics_save=1
net.core.netdev_max_backlog = 2500

echo 65536000 > /proc/sys/net/ipv4/netfilter/ip_conntrack_max

/sbin/ifconfig eth2 txqueuelen 2000
/sbin/ifconfig eth3 txqueuelen 2000


Посты Комментарии
Последние посты
    Посты Комментарии
    Последние комментарии
      Посты Комментарии
      Изменения
        Посты Комментарии Изменения Черновики Избранное
        Черновики (все)
          Посты Комментарии Изменения Черновики Избранное
          Избранное (всё)
            Посты Комментарии Изменения Черновики Избранное
            Лучшие блоги (все 149)
            Топ пользователей Топ блогов
            Топ пользователей Топ блогов
            Элита (все 2971 из 222 городов)
            Топ пользователей Топ блогов
            welinux.ru

            Смотреть видео онлайн

            Онлайн видео бесплатно


            Смотреть русское с разговорами видео

            Online video HD

            Видео скачать на телефон

            Русские фильмы бесплатно

            Full HD video online

            Смотреть видео онлайн

            Смотреть HD видео бесплатно

            School смотреть онлайн