Перейти к содержимому
Калькуляторы

[РЕШЕНО] 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

 

 

Подскажите, где может быть проблема?

Изменено пользователем asid2006

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

ethtool -K eth0 gro off lro off gso off

ethtool -G eth0 tx 2048 rx 2048

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

asid2006

ethtool -G rx 2047 tx 511

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

 

asid2006

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

 

Участникам обсуждения спасибо за помощь!

Изменено пользователем asid2006

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

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

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.