asid2006 Posted July 10, 2015 Posted July 10, 2015 (edited) Доброго времени суток. Меняю старый софтроутер на более мощный. На обоих CentOS 6.4, в скриптах настройки фаервола и шейпера поменял только названия интерфейсов. После переноса заметил, что есть потери пакетов и роутер выдаёт абонентам не полную скорость даже при небольшой нагрузке. На роутере делаются NAT (iptables) и шейпинг (tc). Новый роутер: Процессор Intel® Xeon® CPU E3-1270 v3 @ 3.50GHz, 8 cores Сетевая Broadcom Corporation NetXtreme BCM5720 Gigabit Ethernet PCIe Драйвера на сетевуху - свежие tg3 с сайта производителя 2 интерфейса: em1 - на нём поднято 2 влана для 2 аплинков em2 - подняты куча виланов для абонентов (1 дом - 1 влан) При включении выполняются следующие команды: ethtool -A em1 autoneg off rx off tx off ethtool -A em2 autoneg off rx off tx off ethtool -L em1 tx 4 rx 4 ethtool -L em2 tx 4 rx 4 # рапределение прерываний /usr/scripts/interrupts/smp.sh em1 0 0 2 4 6 /usr/scripts/interrupts/smp.sh em2 0 1 3 5 7 ifconfig em1 txqueuelen 10000 ifconfig em2 txqueuelen 10000 /sbin/sysctl -w net.netfilter.nf_conntrack_max=262144 echo 32768 > /sys/module/nf_conntrack/parameters/hashsize cat /proc/interrupts 37: 1174637 1413 0 0 0 0 0 544 IR-PCI-MSI-edge em1-0 38: 193835380 180585 25289589 0 0 0 57109 0 IR-PCI-MSI-edge em1-txrx-1 39: 211837 187172 267722584 0 62691999 54434 0 0 IR-PCI-MSI-edge em1-txrx-2 40: 228737 186985 0 0 181873117 0 25759729 0 IR-PCI-MSI-edge em1-txrx-3 41: 23938382 181700 0 51113 0 0 181668641 0 IR-PCI-MSI-edge em1-txrx-4 42: 69 1900 4 0 0 0 0 0 IR-PCI-MSI-edge em2-0 43: 128928 275115568 0 39385366 216629 0 0 0 IR-PCI-MSI-edge em2-txrx-1 44: 169952 79740 0 344998249 0 100541083 0 0 IR-PCI-MSI-edge em2-txrx-2 45: 112134 82161 0 0 0 277001930 234847 45811904 IR-PCI-MSI-edge em2-txrx-3 46: 32798668 77082 0 0 0 0 48738 277532385 IR-PCI-MSI-edge em2-txrx-4 Подскажите, где может быть проблема? Edited July 15, 2015 by asid2006 Вставить ник Quote
BETEPAH Posted July 10, 2015 Posted July 10, 2015 Как-то странно ваш скрипт распределяет прерывания. Должно быть так: 116: 3869316300 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 PCI-MSI-edge eth0-TxRx-0 117: 1094 3775680288 0 0 0 0 0 0 0 0 0 0 0 0 0 0 PCI-MSI-edge eth0-TxRx-1 118: 796 0 79941942 0 0 0 0 0 0 0 0 0 0 0 0 0 PCI-MSI-edge eth0-TxRx-2 119: 883 0 0 3951968091 0 0 0 0 0 0 0 0 0 0 0 0 PCI-MSI-edge eth0-TxRx-3 120: 928 0 0 0 3830803244 0 0 0 0 0 0 0 0 0 0 0 PCI-MSI-edge eth0-TxRx-4 121: 1002 0 0 0 0 3627204009 0 0 0 0 0 0 0 0 0 0 PCI-MSI-edge eth0-TxRx-5 122: 936 0 0 0 0 0 4053896050 0 0 0 0 0 0 0 0 0 PCI-MSI-edge eth0-TxRx-6 123: 939 0 0 0 0 0 0 3827428601 0 0 0 0 0 0 0 0 PCI-MSI-edge eth0-TxRx-7 124: 839 0 0 0 0 0 0 0 4038520761 0 0 0 0 0 0 0 PCI-MSI-edge eth0-TxRx-8 125: 958 0 0 0 0 0 0 0 0 3696457063 0 0 0 0 0 0 PCI-MSI-edge eth0-TxRx-9 126: 943 0 0 0 0 0 0 0 0 0 4016745220 0 0 0 0 0 PCI-MSI-edge eth0-TxRx-10 127: 889 0 0 0 0 0 0 0 0 0 0 4101675116 0 0 0 0 PCI-MSI-edge eth0-TxRx-11 128: 976 0 0 0 0 0 0 0 0 0 0 0 3780320260 0 0 0 PCI-MSI-edge eth0-TxRx-12 129: 884 0 0 0 0 0 0 0 0 0 0 0 0 4204481537 0 0 PCI-MSI-edge eth0-TxRx-13 130: 905 0 0 0 0 0 0 0 0 0 0 0 0 0 3823332572 0 PCI-MSI-edge eth0-TxRx-14 131: 1091 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3735548479 PCI-MSI-edge eth0-TxRx-15 Вставить ник Quote
asid2006 Posted July 10, 2015 Author Posted July 10, 2015 BETEPAH, если обнулить статистику, то так и будет Вставить ник Quote
NiTr0 Posted July 10, 2015 Posted July 10, 2015 сетевушку смените, кто-то тут на форуме на бродком плевался... Вставить ник Quote
asid2006 Posted July 10, 2015 Author Posted July 10, 2015 NiTr0, старый сервак захлёбывается, сетевуха будет ехать какое-то время. Нужно что-то придумать хотябы на время Вставить ник Quote
NiTr0 Posted July 10, 2015 Posted July 10, 2015 Попробуйте оффлоады погасить (кроме checksum оффлоадов и scatter-gather), и увеличить буферы до максимума. И да echo 32768 > /sys/module/nf_conntrack/parameters/hashsize - не отрабатывает. Размер хэша указывается в опциях модуля при загрузке. Лучше указать где-то не менее 1/4 ожидаемого макс. кол-ва сессий. Да, и чуть не забыл: указать в параметрах ядра intel_idle.max_cstate=0 processor.max_cstate=1 Вставить ник Quote
asid2006 Posted July 10, 2015 Author Posted July 10, 2015 Попробуйте оффлоады погасить (кроме checksum оффлоадов и scatter-gather), и увеличить буферы до максимума. Не подскажите, как это сделать? Вставить ник Quote
kayot Posted July 10, 2015 Posted July 10, 2015 Да, и чуть не забыл: указать в параметрах ядра intel_idle.max_cstate=0 processor.max_cstate=1 Наверное самое важное замечание, IMHO вся печаль в этом idle. Броадкомы современные очень неплохи, нарекания были на позапрошлое поколение.. BMC5709 у меня работают как часы, на загруженной в хлам машине пропускают ровно гиг без потерь и чудес, вряд ли более новый 5720 хуже. Вставить ник Quote
asid2006 Posted July 10, 2015 Author Posted July 10, 2015 указать в параметрах ядра intel_idle.max_cstate=0 processor.max_cstate=1 Извиняюсь за глупый вопрос, но можно применить их без перезагрузки сервера? Вставить ник Quote
BETEPAH Posted July 10, 2015 Posted July 10, 2015 Не подскажите, как это сделать? ethtool -K eth0 gro off lro off gso off ethtool -G eth0 tx 2048 rx 2048 Вставить ник Quote
asid2006 Posted July 10, 2015 Author Posted July 10, 2015 ethtool -G eth0 tx 2048 rx 2048 [root@srv1 ~]# ethtool -G em1 tx 2048 rx 2048 Cannot set device ring parameters: Invalid argument [root@srv1 ~]# ethtool -g em1 Ring parameters for em1: Pre-set maximums: RX: 2047 RX Mini: 0 RX Jumbo: 0 TX: 511 Current hardware settings: RX: 200 RX Mini: 0 RX Jumbo: 0 TX: 511 Вставить ник Quote
kayot Posted July 10, 2015 Posted July 10, 2015 asid2006 ethtool -G rx 2047 tx 511 Маленький ring buffer может потери давать. Вставить ник Quote
s.lobanov Posted July 10, 2015 Posted July 10, 2015 указать в параметрах ядра intel_idle.max_cstate=0 processor.max_cstate=1 Извиняюсь за глупый вопрос, но можно применить их без перезагрузки сервера? Вопрос не глупый. Вам надо прописать это как параметр ядра, что при следующем ребуте оно применилось. А чтоб не бутать - x86_energy_perf_policy в помощь Вставить ник Quote
hsvt Posted July 10, 2015 Posted July 10, 2015 А зачем на сетевушках в роли софтроутера отключают autoneg off ? Вставить ник Quote
asid2006 Posted July 11, 2015 Author Posted July 11, 2015 Маленький ring buffer может потери давать. Вы правы, после увеличения потери пакетов исчезли. А чтоб не бутать - x86_energy_perf_policy в помощь Со скоростью вроде всё исправилось. По крайней мере в 5 утра всё работает :) Осталась одна проблема - скачет пинг до сервера и от сервера до интернета. С клиента до сервера: C:\Users\AsusNote>ping 10.0.147.254 -t Обмен пакетами с 10.0.147.254 по с 32 байтами данных: Ответ от 10.0.147.254: число байт=32 время=3мс TTL=63 Ответ от 10.0.147.254: число байт=32 время=7мс TTL=63 Ответ от 10.0.147.254: число байт=32 время=1мс TTL=63 Ответ от 10.0.147.254: число байт=32 время=2мс TTL=63 Ответ от 10.0.147.254: число байт=32 время=15мс TTL=63 Ответ от 10.0.147.254: число байт=32 время=6мс TTL=63 Ответ от 10.0.147.254: число байт=32 время=8мс TTL=63 Ответ от 10.0.147.254: число байт=32 время=4мс TTL=63 Ответ от 10.0.147.254: число байт=32 время=3мс TTL=63 Ответ от 10.0.147.254: число байт=32 время=10мс TTL=63 Ответ от 10.0.147.254: число байт=32 время=4мс TTL=63 Ответ от 10.0.147.254: число байт=32 время=11мс TTL=63 Ответ от 10.0.147.254: число байт=32 время=4мс TTL=63 Ответ от 10.0.147.254: число байт=32 время=10мс TTL=63 Ответ от 10.0.147.254: число байт=32 время=6мс TTL=63 Ответ от 10.0.147.254: число байт=32 время=3мс TTL=63 Ответ от 10.0.147.254: число байт=32 время=4мс TTL=63 Ответ от 10.0.147.254: число байт=32 время=4мс TTL=63 Ответ от 10.0.147.254: число байт=32 время=2мс TTL=63 Ответ от 10.0.147.254: число байт=32 время=4мс TTL=63 Ответ от 10.0.147.254: число байт=32 время=7мс TTL=63 Ответ от 10.0.147.254: число байт=32 время=7мс TTL=63 Статистика Ping для 10.0.147.254: Пакетов: отправлено = 22, получено = 22, потеряно = 0 (0% потерь) Приблизительное время приема-передачи в мс: Минимальное = 1мсек, Максимальное = 15 мсек, Среднее = 5 мсек Должно быть 1 мс С сервера до интернета: [root@srv1 ~]# ping ya.ru PING ya.ru (213.180.204.3) 56(84) bytes of data. 64 bytes from www.yandex.ru (213.180.204.3): icmp_seq=1 ttl=57 time=34.4 ms 64 bytes from www.yandex.ru (213.180.204.3): icmp_seq=2 ttl=57 time=30.3 ms 64 bytes from www.yandex.ru (213.180.204.3): icmp_seq=3 ttl=57 time=36.1 ms 64 bytes from www.yandex.ru (213.180.204.3): icmp_seq=4 ttl=57 time=37.6 ms 64 bytes from www.yandex.ru (213.180.204.3): icmp_seq=5 ttl=57 time=42.2 ms 64 bytes from www.yandex.ru (213.180.204.3): icmp_seq=6 ttl=57 time=32.3 ms 64 bytes from www.yandex.ru (213.180.204.3): icmp_seq=7 ttl=57 time=32.4 ms 64 bytes from www.yandex.ru (213.180.204.3): icmp_seq=8 ttl=57 time=32.4 ms 64 bytes from www.yandex.ru (213.180.204.3): icmp_seq=9 ttl=57 time=32.8 ms 64 bytes from www.yandex.ru (213.180.204.3): icmp_seq=10 ttl=57 time=49.3 ms 64 bytes from www.yandex.ru (213.180.204.3): icmp_seq=11 ttl=57 time=44.5 ms 64 bytes from www.yandex.ru (213.180.204.3): icmp_seq=12 ttl=57 time=30.2 ms 64 bytes from www.yandex.ru (213.180.204.3): icmp_seq=13 ttl=57 time=54.9 ms 64 bytes from www.yandex.ru (213.180.204.3): icmp_seq=14 ttl=57 time=30.6 ms 64 bytes from www.yandex.ru (213.180.204.3): icmp_seq=15 ttl=57 time=35.9 ms ^C --- ya.ru ping statistics --- 15 packets transmitted, 15 received, 0% packet loss, time 14710ms rtt min/avg/max/mdev = 30.290/37.122/54.986/7.212 ms Нагрузка на канал минимальная (5:30 утра). Что может быть? Вставить ник Quote
asid2006 Posted July 12, 2015 Author Posted July 12, 2015 Поправка: проблемы со скоростью остались Вставить ник Quote
s.lobanov Posted July 12, 2015 Posted July 12, 2015 А зачем на сетевушках в роли софтроутера отключают autoneg off ? скорее всего, был какой-то баг на какой-нибудь кокретно карте, популярной лет 10-15 назад и эта "магия" качуют из одного howto в другой. в самом деле, смысла в этом нет asid2006 А tso офлод выключен? То, что порекомендовали выше не содержит отключения tso Вставить ник Quote
asid2006 Posted July 13, 2015 Author Posted July 13, 2015 s.lobanov отключил - не помогло: [root@srv1 ~]# ethtool -k em1 Features for em1: rx-checksumming: on tx-checksumming: on tx-checksum-ipv4: on tx-checksum-unneeded: off [fixed] tx-checksum-ip-generic: off [fixed] tx-checksum-ipv6: on tx-checksum-fcoe-crc: off [fixed] tx-checksum-sctp: off [fixed] scatter-gather: on tx-scatter-gather: on tx-scatter-gather-fraglist: off [fixed] tcp-segmentation-offload: off tx-tcp-segmentation: off tx-tcp-ecn-segmentation: off tx-tcp6-segmentation: off udp-fragmentation-offload: off [fixed] generic-segmentation-offload: off generic-receive-offload: off large-receive-offload: off [fixed] rx-vlan-offload: on [fixed] tx-vlan-offload: on [fixed] ntuple-filters: off [fixed] receive-hashing: off [fixed] highdma: on rx-vlan-filter: off [fixed] vlan-challenged: off [fixed] tx-lockless: off [fixed] netns-local: off [fixed] tx-gso-robust: off [fixed] tx-fcoe-segmentation: off [fixed] tx-gre-segmentation: off [fixed] tx-udp_tnl-segmentation: off [fixed] fcoe-mtu: off [fixed] loopback: off [fixed] [root@srv1 ~]# ping ya.ru PING ya.ru (213.180.204.3) 56(84) bytes of data. 64 bytes from www.yandex.ru (213.180.204.3): icmp_seq=1 ttl=57 time=29.7 ms 64 bytes from www.yandex.ru (213.180.204.3): icmp_seq=2 ttl=57 time=29.7 ms 64 bytes from www.yandex.ru (213.180.204.3): icmp_seq=3 ttl=57 time=33.4 ms 64 bytes from www.yandex.ru (213.180.204.3): icmp_seq=4 ttl=57 time=40.9 ms 64 bytes from www.yandex.ru (213.180.204.3): icmp_seq=5 ttl=57 time=31.6 ms 64 bytes from www.yandex.ru (213.180.204.3): icmp_seq=6 ttl=57 time=30.6 ms 64 bytes from www.yandex.ru (213.180.204.3): icmp_seq=7 ttl=57 time=31.0 ms 64 bytes from www.yandex.ru (213.180.204.3): icmp_seq=8 ttl=57 time=30.5 ms 64 bytes from www.yandex.ru (213.180.204.3): icmp_seq=9 ttl=57 time=30.8 ms 64 bytes from www.yandex.ru (213.180.204.3): icmp_seq=10 ttl=57 time=32.3 ms 64 bytes from www.yandex.ru (213.180.204.3): icmp_seq=11 ttl=57 time=33.9 ms 64 bytes from www.yandex.ru (213.180.204.3): icmp_seq=12 ttl=57 time=31.7 ms 64 bytes from www.yandex.ru (213.180.204.3): icmp_seq=13 ttl=57 time=30.4 ms 64 bytes from www.yandex.ru (213.180.204.3): icmp_seq=14 ttl=57 time=37.6 ms 64 bytes from www.yandex.ru (213.180.204.3): icmp_seq=15 ttl=57 time=39.0 ms 64 bytes from www.yandex.ru (213.180.204.3): icmp_seq=16 ttl=57 time=32.5 ms 64 bytes from www.yandex.ru (213.180.204.3): icmp_seq=17 ttl=57 time=36.4 ms 64 bytes from www.yandex.ru (213.180.204.3): icmp_seq=18 ttl=57 time=31.0 ms ^C --- ya.ru ping statistics --- 18 packets transmitted, 18 received, 0% packet loss, time 18000ms rtt min/avg/max/mdev = 29.757/32.979/40.922/3.249 ms s.lobanov, Интернет получается через VLAN-интерфейс. Не нужно отключать vlan-offload? Вставить ник Quote
asid2006 Posted July 15, 2015 Author Posted July 15, 2015 Поменял в /boot/grub/grub.conf строку с описанием параметров ядра (добавил intel_idle.max_cstate=0 processor.max_cstate=1). Сейчас она выглядит так: kernel /vmlinuz-2.6.32-504.23.4.el6.x86_64 ro root=/dev/mapper/vg_srv2-lv_root LANG=ru_RU.UTF-8 rd_NO_LUKS rd_NO_MD rd_LVM_LV=vg_srv2/lv_swap crashkernel=auto rd_LVM_LV=vg_srv2/lv_root intel_idle.max_cstate=0 processor.max_cstate=1 KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet Перезагрузил сервер. В 5 утра вроде всё было ок - и пинги, и скорость, но в 10 заметил проблемы: несколько ядер процессора загружены на 100%. Оказалось, дело в dhcpd - их висело несколько процессов. Когда все убил по kill -9, нагрузка снизилась. Сейчас он запустился , но при рестарте пишет: [root@srv1 ~]# /etc/init.d/dhcpd restart Останавливается dhcpd: [СБОЙ ] Запускается dhcpd: [ OK ] Сейчас ещё большие проблемы и со скоростью (выдаёт 5-10 мбит вместо 25), и с пингами. Во время проверки скорости на спидтесте пинги до яндекса возрастают с 30 до 1000 и появляется потеря пакетов Вставить ник Quote
asid2006 Posted July 15, 2015 Author Posted July 15, 2015 Дополнение: интернет берётся с первой сетевухи, отдаётся абонентам через вторую. Отключил шейпер на второй - канал сразу забился, но проблема с пингами исчезла - стабильно 29 мс. После включения всё стало как раньше Вставить ник Quote
asid2006 Posted July 15, 2015 Author Posted July 15, 2015 perf top: 47,11% [kernel] [k] _spin_lock 21,84% [kernel] [k] u32_classify 5,84% [kernel] [k] __netif_receive_skb 5,67% [kernel] [k] dev_queue_xmit_nit 3,88% [kernel] [k] tc_classify_compat 0,67% [kernel] [k] net_tx_action 0,60% [kernel] [k] tg3_poll_work 0,53% [kernel] [k] ipt_do_table 0,40% [kernel] [k] __do_softirq 0,39% [kernel] [k] irq_entries_start 0,29% [kernel] [k] __nf_conntrack_find 0,28% [kernel] [k] htb_dequeue 0,26% [kernel] [k] apic_timer_interrupt 0,25% [kernel] [k] ip_route_input 0,22% [kernel] [k] dev_queue_xmit 0,20% [kernel] [k] tcp_packet 0,19% libdns.so.81.4.1 [.] 0x000000000006ab64 0,19% [kernel] [k] native_write_msr_safe 0,18% [kernel] [k] nf_iterate 0,18% perf [.] 0x000000000005d028 0,17% [kernel] [k] kfree Вставить ник Quote
s.lobanov Posted July 15, 2015 Posted July 15, 2015 попробуйте ядро из elrepo (>=3.10) Вставить ник Quote
asid2006 Posted July 15, 2015 Author Posted July 15, 2015 попробуйте ядро из elrepo (>=3.10) Огромное спасибо! Судя по всему проблема была именно в ядре. После обновления решился вопрос с пингом и скоростью, нагрузка на сервер упала в несколько раз! Вставить ник Quote
asid2006 Posted July 15, 2015 Author Posted July 15, 2015 (edited) Итого, для решения проблемы потребовалось: 1. Добавить параметры ядра при загрузке intel_idle.max_cstate=0 processor.max_cstate=1 2. Отключить оффлоады и увеличить буферы: ethtool -G em1 rx 2047 tx 511 ethtool -G em2 rx 2047 tx 511 ethtool -K em1 gro off lro off gso off tso off ethtool -K em2 gro off lro off gso off tso off 3. Обновить ядро c 2.6.32-504.23.4.el6.x86_64 до 3.10.84-1.el6.elrepo.x86_64 Участникам обсуждения спасибо за помощь! Edited July 15, 2015 by asid2006 Вставить ник Quote
s.lobanov Posted July 15, 2015 Posted July 15, 2015 судя по oprofile-у, вы нарвались на BKL или что-то помельче. выпилено в 3.9, но он не LTS, поэтому посоветовал 3.10 Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.