nicol@s Опубликовано 27 декабря, 2011 (изменено) · Жалоба Добрый день! Переводим BGP с FreeBSD(8.0 STABLE) на Linux(Debian 2.6.33.20). Столкнулись с такой проблемой - при подключении более одного аплинка, перестает работатать часть ресурсов интернета. Опытным путем удалось установить: если трафик ходит в обе стороны через одного аплинка (один и тот же сетевой интерфейс), то работает. Если же трафик уходит через одного аплинка, а возвращается через другого (тисипидампом видим пакеты), то на интерфейсе, который смотрит в сторону сети виден только исходящий трафик от абонента, а входящего нету. Обратные маршруты в сеть при этом есть. На FreeBSD такой проблемы не наблюдалось. Настройки BGP на Linux идентичны FreeBSD. ip_forwarding включен. В ядре дополнительных параметров не включали. Единственное, что в /etc/modprobe.d/blacklist.conf добавили: blacklist ip_conntrack blacklist nfnetlink blacklist nf_conntrack_ipv4 blacklist nf_conntrack blacklist nf_defrag_ipv4 blacklist iptable_nat blacklist nf_nat Чтобы не создавались стейты (меньше нагрузка на cpu). Сначала погрешили на bonding, смотрящий в сеть. Разобрали - не помогло. Погрешили на 10ГБ сетевуху (Intel Ethernet Server Adapter X520-DA2) - воткнулись в гигабитную сетевуху (Intel Corporation 82576 Gigabit Network Connection), повторили тест - не помогло. Обе сетевухи тюним так: /sbin/rmmod igb /sbin/modprobe igb IntMode=2,2,2,2,2,2,2,2,2,2,2,2 InterruptThrottleRate=1,1,1,1,1,1,1,1,1,1,1,1 RSS=6,6,6,6,6,6,6,6,6,6,6,6 QueuePairs=1,1,1,1,1,1,1,1,1,1,1,1 LLIPort=80 /sbin/rmmod ixgbe /sbin/modprobe ixgbe IntMode=2,2,2,2,2,2,2,2,2,2,2,2 InterruptThrottleRate=1,1,1,1,1,1,1,1,1,1,1,1 RSS=6,6,6,6,6,6,6,6,6,6,6,6 LLIPort=80 /usr/sbin/service networking restart # изменить размеры буферов сетевых интерфейсов /sbin/ethtool -G eth0 tx 2048 /sbin/ethtool -G eth0 rx 2048 /sbin/ethtool -G eth1 tx 2048 /sbin/ethtool -G eth1 rx 2048 /sbin/ethtool -G eth2 tx 2048 /sbin/ethtool -G eth2 rx 2048 /sbin/ethtool -G eth3 tx 2048 /sbin/ethtool -G eth3 rx 2048 ...... # Для 10GB сетевухи /sbin/ethtool -G eth9 tx 4096 /sbin/ethtool -G eth9 rx 4096 # отключить flow control на сетевых интерфейсах /sbin/ethtool -A eth0 autoneg off rx off tx off /sbin/ethtool -A eth1 autoneg off rx off tx off /sbin/ethtool -A eth2 autoneg off rx off tx off /sbin/ethtool -A eth3 autoneg off rx off tx off ....... # Для 10GB сетевухи /sbin/ethtool -A eth9 autoneg off rx off tx off # изменить размер очереди передаваемых пакетов на сетевых интерфейсах /sbin/ifconfig eth0 txqueuelen 10000 /sbin/ifconfig eth1 txqueuelen 10000 /sbin/ifconfig eth2 txqueuelen 10000 /sbin/ifconfig eth3 txqueuelen 10000 ....... # Для 10GB сетевухи /sbin/ifconfig eth9 txqueuelen 10000 # распределяем по разным ЦП прерывания очередей сетевых интерфейсов /sbin/ifconfig eth0 up /bin/echo 1 > /proc/irq/`/bin/cat /proc/interrupts | /bin/grep 'eth0-TxRx-0' | /usr/bin/awk -F \: '{printf $1}'| /usr/bin/tr -d ' '`/smp_affinity /bin/echo 2 > /proc/irq/`/bin/cat /proc/interrupts | /bin/grep 'eth0-TxRx-1' | /usr/bin/awk -F \: '{printf $1}'| /usr/bin/tr -d ' '`/smp_affinity /bin/echo 4 > /proc/irq/`/bin/cat /proc/interrupts | /bin/grep 'eth0-TxRx-2' | /usr/bin/awk -F \: '{printf $1}'| /usr/bin/tr -d ' '`/smp_affinity /bin/echo 8 > /proc/irq/`/bin/cat /proc/interrupts | /bin/grep 'eth0-TxRx-3' | /usr/bin/awk -F \: '{printf $1}'| /usr/bin/tr -d ' '`/smp_affinity /bin/echo 10 > /proc/irq/`/bin/cat /proc/interrupts | /bin/grep 'eth0-TxRx-4' | /usr/bin/awk -F \: '{printf $1}'| /usr/bin/tr -d ' '`/smp_affinity /bin/echo 20 > /proc/irq/`/bin/cat /proc/interrupts | /bin/grep 'eth0-TxRx-5' | /usr/bin/awk -F \: '{printf $1}'| /usr/bin/tr -d ' '`/smp_affinity /sbin/ifconfig eth1 up /bin/echo 40 > /proc/irq/`/bin/cat /proc/interrupts | /bin/grep 'eth1-TxRx-0' | /usr/bin/awk -F \: '{printf $1}'| /usr/bin/tr -d ' '`/smp_affinity /bin/echo 80 > /proc/irq/`/bin/cat /proc/interrupts | /bin/grep 'eth1-TxRx-1' | /usr/bin/awk -F \: '{printf $1}'| /usr/bin/tr -d ' '`/smp_affinity /bin/echo 100 > /proc/irq/`/bin/cat /proc/interrupts | /bin/grep 'eth1-TxRx-2' | /usr/bin/awk -F \: '{printf $1}'| /usr/bin/tr -d ' '`/smp_affinity /bin/echo 200 > /proc/irq/`/bin/cat /proc/interrupts | /bin/grep 'eth1-TxRx-3' | /usr/bin/awk -F \: '{printf $1}'| /usr/bin/tr -d ' '`/smp_affinity /bin/echo 400 > /proc/irq/`/bin/cat /proc/interrupts | /bin/grep 'eth1-TxRx-4' | /usr/bin/awk -F \: '{printf $1}'| /usr/bin/tr -d ' '`/smp_affinity /bin/echo 800 > /proc/irq/`/bin/cat /proc/interrupts | /bin/grep 'eth1-TxRx-5' | /usr/bin/awk -F \: '{printf $1}'| /usr/bin/tr -d ' '`/smp_affinity /sbin/ifconfig eth2 up /bin/echo 1 > /proc/irq/`/bin/cat /proc/interrupts | /bin/grep 'eth2-TxRx-5' | /usr/bin/awk -F \: '{printf $1}'| /usr/bin/tr -d ' '`/smp_affinity /bin/echo 2 > /proc/irq/`/bin/cat /proc/interrupts | /bin/grep 'eth2-TxRx-4' | /usr/bin/awk -F \: '{printf $1}'| /usr/bin/tr -d ' '`/smp_affinity /bin/echo 4 > /proc/irq/`/bin/cat /proc/interrupts | /bin/grep 'eth2-TxRx-3' | /usr/bin/awk -F \: '{printf $1}'| /usr/bin/tr -d ' '`/smp_affinity /bin/echo 8 > /proc/irq/`/bin/cat /proc/interrupts | /bin/grep 'eth2-TxRx-2' | /usr/bin/awk -F \: '{printf $1}'| /usr/bin/tr -d ' '`/smp_affinity /bin/echo 10 > /proc/irq/`/bin/cat /proc/interrupts | /bin/grep 'eth2-TxRx-1' | /usr/bin/awk -F \: '{printf $1}'| /usr/bin/tr -d ' '`/smp_affinity /bin/echo 20 > /proc/irq/`/bin/cat /proc/interrupts | /bin/grep 'eth2-TxRx-0' | /usr/bin/awk -F \: '{printf $1}'| /usr/bin/tr -d ' '`/smp_affinity /sbin/ifconfig eth3 up /bin/echo 40 > /proc/irq/`/bin/cat /proc/interrupts | /bin/grep 'eth3-TxRx-5' | /usr/bin/awk -F \: '{printf $1}'| /usr/bin/tr -d ' '`/smp_affinity /bin/echo 80 > /proc/irq/`/bin/cat /proc/interrupts | /bin/grep 'eth3-TxRx-4' | /usr/bin/awk -F \: '{printf $1}'| /usr/bin/tr -d ' '`/smp_affinity /bin/echo 100 > /proc/irq/`/bin/cat /proc/interrupts | /bin/grep 'eth3-TxRx-3' | /usr/bin/awk -F \: '{printf $1}'| /usr/bin/tr -d ' '`/smp_affinity /bin/echo 200 > /proc/irq/`/bin/cat /proc/interrupts | /bin/grep 'eth3-TxRx-2' | /usr/bin/awk -F \: '{printf $1}'| /usr/bin/tr -d ' '`/smp_affinity /bin/echo 400 > /proc/irq/`/bin/cat /proc/interrupts | /bin/grep 'eth3-TxRx-1' | /usr/bin/awk -F \: '{printf $1}'| /usr/bin/tr -d ' '`/smp_affinity /bin/echo 800 > /proc/irq/`/bin/cat /proc/interrupts | /bin/grep 'eth3-TxRx-0' | /usr/bin/awk -F \: '{printf $1}'| /usr/bin/tr -d ' '`/smp_affinity ...... # Для 10GB сетевухи /sbin/ifconfig eth9 up /bin/echo 1 > /proc/irq/`/bin/cat /proc/interrupts | /bin/grep 'eth9-TxRx-5' | /usr/bin/awk -F \: '{printf $1}'| /usr/bin/tr -d ' '`/smp_affinity /bin/echo 2 > /proc/irq/`/bin/cat /proc/interrupts | /bin/grep 'eth9-TxRx-4' | /usr/bin/awk -F \: '{printf $1}'| /usr/bin/tr -d ' '`/smp_affinity /bin/echo 4 > /proc/irq/`/bin/cat /proc/interrupts | /bin/grep 'eth9-TxRx-3' | /usr/bin/awk -F \: '{printf $1}'| /usr/bin/tr -d ' '`/smp_affinity /bin/echo 8 > /proc/irq/`/bin/cat /proc/interrupts | /bin/grep 'eth9-TxRx-2' | /usr/bin/awk -F \: '{printf $1}'| /usr/bin/tr -d ' '`/smp_affinity /bin/echo 10 > /proc/irq/`/bin/cat /proc/interrupts | /bin/grep 'eth9-TxRx-1' | /usr/bin/awk -F \: '{printf $1}'| /usr/bin/tr -d ' '`/smp_affinity /bin/echo 20 > /proc/irq/`/bin/cat /proc/interrupts | /bin/grep 'eth9-TxRx-0' | /usr/bin/awk -F \: '{printf $1}'| /usr/bin/tr -d ' '`/smp_affinity /etc/sysctl.conf # Controls IP packet forwarding net.ipv4.ip_forward = 1 # Controls source route verification net.ipv4.conf.default.rp_filter = 1 # Do not accept source routing net.ipv4.conf.default.accept_source_route = 0 # Controls the System Request debugging functionality of the kernel kernel.sysrq = 0 # Controls whether core dumps will append the PID to the core filename # Useful for debugging multi-threaded applications kernel.core_uses_pid = 1 # Controls the use of TCP syncookies net.ipv4.tcp_syncookies = 1 # Controls the maximum size of a message, in bytes kernel.msgmnb = 65536 # Controls the default maxmimum size of a mesage queue kernel.msgmax = 65536 # Controls the maximum shared segment size, in bytes kernel.shmmax = 68719476736 # Controls the maximum number of shared memory segments, in pages kernel.shmall = 4294967296 #Увеличиваем максимальный размер памяти отводимой для TCP буферов net.core.wmem_max = 16777216 net.core.rmem_max = 16777216 #Тюнинг буферов для TCP и UDP соединений (min, default, max bytes) net.ipv4.tcp_rmem = 8192 8388608 16777216 net.ipv4.tcp_wmem = 8192 4194394 16777216 #Запрещаем кеширование статуса ssthresh net.ipv4.tcp_no_metrics_save = 1 #размер backlog net.core.netdev_max_backlog = 1000 #Увеличиваем число входящих соединений, которые могут стоять в очереди, прежде чем будут отброшены net.core.somaxconn = 262144 #Размер буферов по умолчанию для приема и отправки данных через сокеты net.core.wmem_default = 4194394 net.core.rmem_default = 8388608 net.ipv4.tcp_max_tw_buckets = 1440000 Изменено 27 декабря, 2011 пользователем nicol@s Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
nicol@s Опубликовано 27 декабря, 2011 · Жалоба Разобрались сами. Были невнимательны. В sysctl.conf сделали: net.ipv4.conf.default.rp_filter=0 net.ipv4.conf.all.rp_filter=0 и все заработало Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...