Jump to content
Калькуляторы

[РЕШЕНО] CentOS softrouter: Не выдаёт скорость, пропадают пакеты

Доброго времени суток. Меняю старый софтроутер на более мощный. На обоих 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 by asid2006

Share this post


Link to post
Share on other sites

Как-то странно ваш скрипт распределяет прерывания. Должно быть так:

 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

Share this post


Link to post
Share on other sites

BETEPAH, если обнулить статистику, то так и будет

Share this post


Link to post
Share on other sites

сетевушку смените, кто-то тут на форуме на бродком плевался...

Share this post


Link to post
Share on other sites

NiTr0, старый сервак захлёбывается, сетевуха будет ехать какое-то время. Нужно что-то придумать хотябы на время

Share this post


Link to post
Share on other sites

Попробуйте оффлоады погасить (кроме checksum оффлоадов и scatter-gather), и увеличить буферы до максимума.

 

И да echo 32768 > /sys/module/nf_conntrack/parameters/hashsize - не отрабатывает. Размер хэша указывается в опциях модуля при загрузке. Лучше указать где-то не менее 1/4 ожидаемого макс. кол-ва сессий.

 

Да, и чуть не забыл: указать в параметрах ядра intel_idle.max_cstate=0 processor.max_cstate=1

Share this post


Link to post
Share on other sites

Попробуйте оффлоады погасить (кроме checksum оффлоадов и scatter-gather), и увеличить буферы до максимума.

Не подскажите, как это сделать?

Share this post


Link to post
Share on other sites

Да, и чуть не забыл: указать в параметрах ядра intel_idle.max_cstate=0 processor.max_cstate=1

Наверное самое важное замечание, IMHO вся печаль в этом idle.

Броадкомы современные очень неплохи, нарекания были на позапрошлое поколение..

BMC5709 у меня работают как часы, на загруженной в хлам машине пропускают ровно гиг без потерь и чудес, вряд ли более новый 5720 хуже.

Share this post


Link to post
Share on other sites

указать в параметрах ядра intel_idle.max_cstate=0 processor.max_cstate=1

Извиняюсь за глупый вопрос, но можно применить их без перезагрузки сервера?

Share this post


Link to post
Share on other sites

Не подскажите, как это сделать?

ethtool -K eth0 gro off lro off gso off

ethtool -G eth0 tx 2048 rx 2048

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

asid2006

ethtool -G rx 2047 tx 511

Маленький ring buffer может потери давать.

Share this post


Link to post
Share on other sites

указать в параметрах ядра intel_idle.max_cstate=0 processor.max_cstate=1

Извиняюсь за глупый вопрос, но можно применить их без перезагрузки сервера?

 

Вопрос не глупый. Вам надо прописать это как параметр ядра, что при следующем ребуте оно применилось. А чтоб не бутать - x86_energy_perf_policy в помощь

Share this post


Link to post
Share on other sites

А зачем на сетевушках в роли софтроутера отключают autoneg off ?

Share this post


Link to post
Share on other sites

Маленький 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 утра). Что может быть?

Share this post


Link to post
Share on other sites

Поправка: проблемы со скоростью остались

Share this post


Link to post
Share on other sites

А зачем на сетевушках в роли софтроутера отключают autoneg off ?

скорее всего, был какой-то баг на какой-нибудь кокретно карте, популярной лет 10-15 назад и эта "магия" качуют из одного howto в другой. в самом деле, смысла в этом нет

 

asid2006

А tso офлод выключен? То, что порекомендовали выше не содержит отключения tso

Share this post


Link to post
Share on other sites

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?

Share this post


Link to post
Share on other sites

Поменял в /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 и появляется потеря пакетов

Share this post


Link to post
Share on other sites

Дополнение: интернет берётся с первой сетевухи, отдаётся абонентам через вторую. Отключил шейпер на второй - канал сразу забился, но проблема с пингами исчезла - стабильно 29 мс. После включения всё стало как раньше

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

попробуйте ядро из elrepo (>=3.10)

Огромное спасибо! Судя по всему проблема была именно в ядре. После обновления решился вопрос с пингом и скоростью, нагрузка на сервер упала в несколько раз!

Share this post


Link to post
Share on other sites

Итого, для решения проблемы потребовалось:

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 by asid2006

Share this post


Link to post
Share on other sites

судя по oprofile-у, вы нарвались на BKL или что-то помельче. выпилено в 3.9, но он не LTS, поэтому посоветовал 3.10

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this