Привет, сетевой друг!
Сегодня разберём ещё 5 полезных фишек для Cisco IOS, которые реально экономят время и нервы.
🟣ECN через tc на уровне интерфейса - тонкая настройка вместо глобального sysctl:
tc qdisc show dev eth0
# fq_codel с явным ECN
tc qdisc replace dev eth0 root fq_codel ecn
# Или fq для BBR
tc qdisc replace dev eth0 root fq flow_limit 200 ecn
# Статистика дропов и ECN-меток
tc -s qdisc show dev eth0
fq_codel меряет latency очереди и маркирует пакеты ECN до того как начинает дропать. В отличие от глобального tcp_ecn=1 работает на уровне конкретного интерфейса и не зависит от поддержки на промежуточном оборудовании.
🟣Receive Packet Steering - распределяем обработку входящих пакетов по CPU без аппаратного RSS:
nproc
# Включаем RPS на интерфейсе для всех CPU (4-core = f)
echo f > /sys/class/net/eth0/queues/rx-0/rps_cpus
# RFS — направляем пакеты на тот CPU где живёт приложение
sysctl -w net.core.rps_sock_flow_entries=32768
echo 2048 > /sys/class/net/eth0/queues/rx-0/rps_flow_cnt
На однопоточном NIC без аппаратного multiqueue весь входящий трафик обрабатывается одним CPU. RPS разносит нагрузку программно.
🟣tcp_notsent_lowat - контролируем сколько данных накапливается в send buffer не отправленными:
sysctl -w net.ipv4.tcp_notsent_lowat=16384
Без этого при медленном получателе send buffer забивается и приложение блокируется на write() даже когда реально может отправить данные. Критично для HTTP/2 серверов с приоритизацией потоков.
🟣Отключаем GRO на интерфейсах где важна латентность:
ethtool -k eth0 | grep generic-receive
ethtool -K eth0 gro off
ethtool -K eth0 tso off gso off
GRO объединяет входящие пакеты в большие chunks перед передачей в стек - хорошо для throughput, плохо для латентности. На торговых системах и VoIP это принципиально.
🟣ip_local_reserved_ports - резервируем порты которые не должны занимать эфемерные соединения:
sysctl -w net.ipv4.ip_local_port_range="1024 65535"
sysctl -w net.ipv4.ip_local_reserved_ports="8080,8443,9090-9100"
Без резервирования при высоком RPS эфемерное соединение может занять порт на котором должен подняться сервис, и сервис не стартует с EADDRINUSE.
Серверная Админа | Zeroday | #Cisco