ссылки:
1 2 3 4 5 6 |
https://habr.com/ru/articles/168407/ https://habr.com/ru/articles/331720/ https://habr.com/ru/companies/otus/articles/550820/ https://habr.com/ru/articles/115527/ https://calculator.academy/rtt-calculator/ https://www.opennet.ru/base/net/tcp_tune.txt.html |
Алгоритмы:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
BIC TCP CUBIC TCP Highspeed TCP H-TCP TCP Hybla TCP-Illinois TCP Low Priority TCP Vegas TCP NewReno TCP Veno TCP Westwood+ YeAH-TCP BBR BIC, CUBIC, Highspeed, H-TCP, NewReno, Illinois - эти алгоритмы созданы для так называемых long fat networks — длинных (а значит, с высоким RTT) и быстрых сетей. TCP Hybla - здорово ведет себя на спутниковых линках. Veno - создан для беспроводных сетей с высокой потерей пакетов. TCP Low Priority - вообще сложно назвать congestion алгоритмом, т.к. он мало что делает, а просто пытается отправить пакет без очереди. TCP Vegas - иногда применяют на серверах с большим количеством подключений т.к. он обеспечивает почти постоянную скорость, хоть и далеко не идеальную. Westwood+ - комбинированный алгоритм YeAH-TCP - молодой, ведет себя более-менее во всех случаях. CUBIC, который используется по умолчанию во всех дистрибутивах, совершенно не подходит, например, для 3G-соединений На каналах вроде домашнего вайфая, рекомендую использовать Westwood или H-TCP. Для проводных каналов хорошим выбором может быть YeAH (если у вас не наблюдается с ним проблем), H-TCP или Illinois. рекомендации: net.ipv4.tcp_fastopen=1 - Ускоряет а handshake для поддерживаемых алгоритмов net.ipv4.tcp_slow_start_after_idle=0 - Добавит скорости для SPDY и других keep-alive соединений |
ethtool
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
Длина очереди передачи. В современных сетях для 1G используется значение 1000, для 10G используется значение 10000. ifconfig eth0 txqueuelen 1000 Отключаем checksum offload для правильной работы шейперов ethtool --offload eth0 rx off tx off Отключаем аппаратную поддержку 802.1q ethtool -K eth0 rxvlan off txvlan off Увеличивает размер буфера, чтобы избежать дропов. Убедитесь, что ваша сетевая поддерживает такой размер буфера выполнив ethtool -g ethX ethtool -G eth0 rx 2048 tx 2048 Отключает авто определение скорости порта ethtool -A eth0 autoneg off rx off tx off Отключим оффлоады для лучшей производительности TCP ethtool -K eth0 tso off gso off gro off lro off Flow control \ автосогласование \ Advertised pause frame use "Advertised pause frame use" и "Link partner advertised pause frame use" указывают на режим управления потоком. Если они установлены в Symmetric, то управление потоком включено. Если установлено No, то оно выключено. Проверяем: ethtool -a eth0 чтобы включить ethtool -A eth0 autoneg on rx on tx on |
Лимиты:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
ulimit -a - Показать текущие лимиты Пример установки лимитов: ulimit -n 30000 Некоторые приложения (Proxy, Web сервера, базы данных) используют большие количества открытых файлов и сокетов, и как правило, установок по умолчанию им недостаточно. Оболочка/скрипт За лимиты оболочки отвечает ulimit. Текущее состояние можно проверить ulimit -a. Например, что-бы увеличить кол-во открытых файлов с 1024 до 10240 нужно сделать: ulimit -n 10240 пользователь/процесс Лимиты пользователей и процессов устанавливаются в /etc/security/limits.conf. Например: # cat /etc/security/limits.conf * hard nproc 250 # Лимит пользовательских процессов asterisk hard nofile 409600 # Лимит открытых файлов для приложения Обще системные лимиты устанавливаются командой Sysctl. Большинство этих переменных, действуют до перезагрузки, что-бы ограничения остались после ребута, внесите их в файл /etc/sysctl.conf. сat /etc/sysctl.conf # Показать файл sysctl -a # Показать все системные переменные sysctl fs.file-max # Показать текущие значения sysctl -w fs.file-max=102400 # Изменить максимальное кол-во открытых файлов fs.file-max=102400 # Постоянное значение в файле sysctl.conf cat /proc/sys/fs/file-nr # Кол-во используемых файловых дескрипторов |
sysctl
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
Маршрутизация между интерфейсами, по умолчанию выключена net.ipv4.ip_forward=0 net.ipv4.ip_forward=1 Принцип фильтрования в rp_filter: Если ответ на текущий пакет не может уйти через тот же интерфейс (когда приходит через один интерфейс, а уходит через другой), пакет отфильтровывается. По умолчанию равно 2 net.ipv4.conf.all.rp_filter = 1 Обычно меняю на 0 или 1 при использовании двух шлюзов ---------------------------- net.ipv4.conf.default.rp_filter=1 net.ipv4.conf.all.rp_filter=1 net.ipv4.ip_forward=1 net.ipv6.conf.all.forwarding=1 ---------------------------- !!! Современные дистрибутивы автоматически настраивают оптимальные параметры сетевой карты ###Для хоста с сетевым адаптером 10G, оптимизированного для сетевых путей с RTT до 100 мс и для удобства работы с инструментами одиночного и параллельного потока # устанавливаем буферами до 64 МБ net.core.rmem_max = 67108864 net.core.wmem_max = 67108864 # увеличить лимит буфера TCP автонастройки net.ipv4.tcp_rmem = 4096 87380 33554432 net.ipv4.tcp_wmem = 4096 65536 33554432 # рекомендуемый контроль перегрузки по умолчанию / recommended default congestion control is htcp # на 2023 дефолт cubic # для проверки доступных sysctl -a | grep congestion net.ipv4.tcp_congestion_control=htcp #net.ipv4.tcp_congestion_control=veno #net.ipv4.tcp_congestion_control=cubic #net.ipv4.tcp_congestion_control=bbr # Если включены "jumbo frames" то "tcp_mtu_probing" также следует включить net.ipv4.tcp_mtu_probing=1 # Тип очереди Рекомендуется включить "fair queueing/справедливую очередь" net.core.default_qdisc = fq Для хоста с сетевым адаптером 10G, оптимизированным для сетевых путей с RTT до 200 мс и для совместимости с инструментами одиночного и параллельного потока, или с сетевым адаптером 40G на путях с RTT до 50 мс: # Буфер 128MB net.core.rmem_max = 134217728 net.core.wmem_max = 134217728 # Авто тюнинг буфера 64MB net.ipv4.tcp_rmem = 4096 87380 67108864 net.ipv4.tcp_wmem = 4096 65536 67108864 # # рекомендуемый контроль перегрузки по умолчанию / recommended default congestion control net.ipv4.tcp_congestion_control=htcp # на самом деле тут дофига вариантов brr, cubic, westwood+ # Если "jumbo frames enabled" то и этот параметр нужен. net.ipv4.tcp_mtu_probing=1 # Тип очередей net.core.default_qdisc = fq |
Под trex
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
ulimit -n 30000 net.ipv4.ip_forward=1 net.ipv4.tcp_max_tw_buckets = 65536 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_tw_reuse = 0 net.ipv4.tcp_max_syn_backlog = 131072 net.ipv4.tcp_syn_retries = 3 net.ipv4.tcp_synack_retries = 3 net.ipv4.tcp_retries1 = 3 net.ipv4.tcp_retries2 = 8 net.ipv4.tcp_rmem = 16384 174760 349520 net.ipv4.tcp_wmem = 16384 131072 262144 net.ipv4.tcp_mem = 262144 524288 1048576 net.ipv4.tcp_max_orphans = 65536 net.ipv4.tcp_fin_timeout = 10 net.ipv4.tcp_low_latency = 1 net.ipv4.tcp_syncookies = 0 net.netfilter.nf_conntrack_max = 1048576 |
RTT/ Буферы / Как посчитать буфер, пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
Не актуальные умолчания: Windows XP размер буфера по умолчанию равен 17,520 байт Mac OS X установлен в 64K Linux 64Кбайт Формула: Пропускная способность = размер буфера / задержка Винда: 17520 Байт / .04 секунды = .44 МБ/сек = 3.5 Мб/сек Мак ос: 65936 Байт / .04 сек = 1.6 МБ/сек = 13 Мб/сек Большинство экспертов по сетям соглашаются, что оптимальный размер буфера для определенной сети равен удвоенному произведению задержки и полосы пропускания: Размер буфера = 2 * задержка * полоса пропускания Программа ping даст вам округленное время (round trip time - RTT) для сетевого соединения, что в два раза больше задержки. Формула принимает следующий вид: Размер буфера = RTT * полоса пропускания .08 секунд * 100 Мбс / 8 = 1 МБ Пример: cat /etc/sysctl.conf ... # увеличиваем максимальный размер буфера ТСР net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 # увеличиваем ограничения автоподчтройки буфера ТСР Linux # мин, по умолчанию, и максимальное число байт, которое можно использовать net.ipv4.tcp_rmem = 4096 87380 16777216 net.ipv4.tcp_wmem = 4096 65536 16777216 |
Контроль перегрузки / рекомендуемый контроль перегрузки по умолчанию / recommended default congestion control
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
0. Проверить какие контроли перегрузки нам доступны: sysctl net.ipv4.tcp_available_congestion_control cat /proc/sys/net/ipv4/tcp_available_congestion_control 1. Проверить какие контроли перегрузки сейчас активны: sysctl net.ipv4.tcp_congestion_control cat /proc/sys/net/ipv4/tcp_congestion_control 2. Примеры включения: Включить контроль перегрузки "cubic"без перезагрузки ОС. sysctl -w net.ipv4.tcp_congestion_control=cubic Включить очередь "fq" без перезагрузки ОС sysctl -w net.core.default_qdisc=fq_codel sysctl -w net.core.default_qdisc=fq Пример добавления в файл /etc/sysctl.conf, контроль перегрузки bbr net.core.default_qdisc=fq net.ipv4.tcp_congestion_control=bbr |
BBR
1 2 3 4 5 6 7 8 9 10 11 12 |
BBR (Bottleneck Bandwidth and RTT) — алгоритма контроля перегрузки TCP, патчи с которым ещё в 2016 году были опубликованы компанией Google и приняты в основное ядро Linux. Применение этой технологии в некоторых случаях позволяет значительно увеличить пропускную способность канала передачи данных. Несколько тестов и информация по настройке BBR далее. sysctl -w net.ipv4.tcp_slow_start_after_idle=0 net.core.default_qdisc=fq net.ipv4.tcp_congestion_control=bbr В ядре требуется активировать: CONFIG_TCP_CONG_BBR=m CONFIG_NET_SCH_FQ_CODEL=y CONFIG_NET_SCH_FQ=m |