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

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

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

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

 

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

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

А зачем на сетевушках в роли софтроутера отключают 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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.