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

Linux softrouter

Народ, добрый день, столкнулся с проблемой при переходе с кошки на софт роутер. собрали бордер, запутили на нем только бгп и несколько десятков маршрутов статикой, появилось огромное количество rx_missed_errors: которое растет постоянно. Причем счетчики растет только на бонде который смотрит в сторону аплинка.

из текущих настроек что пробовал сделать, увеличил размеру буферов

ethtool -g  enp9s0f1
Ring parameters for enp9s0f1:
Pre-set maximums:
RX:             4096
RX Mini:        0
RX Jumbo:       0
TX:             4096
Current hardware settings:
RX:             2048
RX Mini:        0
RX Jumbo:       0
TX:             256

 

 ethtool -g  enp9s0f0
Ring parameters for enp9s0f0:
Pre-set maximums:
RX:             4096
RX Mini:        0
RX Jumbo:       0
TX:             4096
Current hardware settings:
RX:             2048
RX Mini:        0
RX Jumbo:       0
TX:             256

 

 

отключил автосогласование

ethtool -a  enp9s0f0
Pause parameters for enp9s0f0:
Autonegotiate:  off
RX:             off
TX:             off

 

прерывания прибил по ядрам, раскидал на 16 ядер.

карта четырех головая

 lspci | grep Eth
00:19.0 Ethernet controller: Intel Corporation 82567LM-2 Gigabit Network Connection
01:00.0 Ethernet controller: Intel Corporation 82574L Gigabit Network Connection
04:00.0 Ethernet controller: Intel Corporation Ethernet Controller X710 for 10GbE SFP+ (rev 01)
04:00.1 Ethernet controller: Intel Corporation Ethernet Controller X710 for 10GbE SFP+ (rev 01)
09:00.0 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01)
09:00.1 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01)
0c:00.0 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01)
0c:00.1 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01)
10:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8169 PCI Gigabit Ethernet Controller (rev 10)

10Гб пока не используем, никак линк поднять не можем из за капризов 710 с сфп модулями.

драйвера на сетевуху устанавливались вместе с сисемой дебиан 9

 ethtool -i enp9s0f0
driver: igb
version: 5.4.0-k
firmware-version: 1.2.1
expansion-rom-version:
bus-info: 0000:09:00.0

в данный момент  потери выглядят так

ethtool -S enp9s0f0 | grep err
     rx_crc_errors: 0
     rx_missed_errors: 60351872
     tx_aborted_errors: 0
     tx_carrier_errors: 0
     tx_window_errors: 0
     tx_deferred_ok: 0
     rx_long_length_errors: 0
     rx_short_length_errors: 0
     rx_align_errors: 0
     rx_errors: 0
     tx_errors: 0
     rx_length_errors: 0
     rx_over_errors: 0
     rx_frame_errors: 0
     rx_fifo_errors: 60352199
     tx_fifo_errors: 0
     tx_heartbeat_errors: 0
     rx_queue_0_csum_err: 1979
     rx_queue_1_csum_err: 1623
     rx_queue_2_csum_err: 1927
     rx_queue_3_csum_err: 3035
     rx_queue_4_csum_err: 1737
     rx_queue_5_csum_err: 1873
     rx_queue_6_csum_err: 6806
     rx_queue_7_csum_err: 1869


аналогичная картина на втором интерфейсе бонда

 

 

Share this post


Link to post
Share on other sites

enp9s0f0: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST>  mtu 1500
        ether 00:1b:21:73:a2:94  txqueuelen 10000  (Ethernet)
        RX packets 4503986690  bytes 5167257239955 (4.6 TiB)
        RX errors 0  dropped 76279572  overruns 76279899  frame 0
        TX packets 3448544874  bytes 1322381194072 (1.2 TiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device memory 0xb5020000-b503ffff

 

enp9s0f1: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST>  mtu 1500
        ether 00:1b:21:73:a2:94  txqueuelen 10000  (Ethernet)
        RX packets 5121954531  bytes 5837273789217 (5.3 TiB)
        RX errors 0  dropped 83875187  overruns 83879337  frame 0
        TX packets 3448710930  bytes 1322380645662 (1.2 TiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device memory 0xb5000000-b501ffff

 

Share this post


Link to post
Share on other sites

ethtool -k enp9s0f0
Features for enp9s0f0:
rx-checksumming: on
tx-checksumming: on
        tx-checksum-ipv4: off [fixed]
        tx-checksum-ip-generic: on
        tx-checksum-ipv6: off [fixed]
        tx-checksum-fcoe-crc: off [fixed]
        tx-checksum-sctp: on
scatter-gather: on
        tx-scatter-gather: on
        tx-scatter-gather-fraglist: off [fixed]
tcp-segmentation-offload: on
        tx-tcp-segmentation: on
        tx-tcp-ecn-segmentation: off [fixed]
        tx-tcp-mangleid-segmentation: off
        tx-tcp6-segmentation: on
udp-fragmentation-offload: off [fixed]
generic-segmentation-offload: on
generic-receive-offload: off
large-receive-offload: off [fixed]
rx-vlan-offload: on
tx-vlan-offload: on
ntuple-filters: off [fixed]
receive-hashing: on
highdma: on [fixed]
rx-vlan-filter: on [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: on
tx-gre-csum-segmentation: on
tx-ipxip4-segmentation: on
tx-ipxip6-segmentation: on
tx-udp_tnl-segmentation: on
tx-udp_tnl-csum-segmentation: on
tx-gso-partial: on
tx-sctp-segmentation: off [fixed]
fcoe-mtu: off [fixed]
tx-nocache-copy: off
loopback: off [fixed]
rx-fcs: off [fixed]
rx-all: off
tx-vlan-stag-hw-insert: off [fixed]
rx-vlan-stag-hw-parse: off [fixed]
rx-vlan-stag-filter: off [fixed]
l2-fwd-offload: off [fixed]
busy-poll: off [fixed]
hw-tc-offload: off [fixed]

 

Share this post


Link to post
Share on other sites

у меня так ethtool -K интерфейс tso off gro off gso off tx off sg off lro off

Share this post


Link to post
Share on other sites

отключил, не помогло

rx_missed_errors: 89470331
     rx_missed_errors: 89473688
     rx_missed_errors: 89478402

 

Share this post


Link to post
Share on other sites

на циске не было.

подсказали попробовать вот такие ключи processor.max_cstate=1 intel_idle.max_cstate=1 , будет время ребутну машину и проверю.

Share this post


Link to post
Share on other sites
2 минуты назад, kid79 сказал:

на циске не было.

подсказали попробовать вот такие ключи processor.max_cstate=1 intel_idle.max_cstate=1 , будет время ребутну машину и проверю.

Ну как бы годный совет ))

Share this post


Link to post
Share on other sites
19 hours ago, kid79 said:

подсказали попробовать вот такие ключи processor.max_cstate=1 intel_idle.max_cstate=1

так это вроде только для процов Intel Nehalem/Westmere актуально.. у вас оно?

Share this post


Link to post
Share on other sites

processor       : 7
vendor_id       : GenuineIntel
cpu family      : 6
model           : 44
model name      : Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz
stepping        : 2
microcode       : 0xc
cpu MHz         : 1596.000
cache size      : 12288 KB
physical id     : 1
siblings        : 4
core id         : 10
cpu cores       : 4
apicid          : 52
initial apicid  : 52
fpu             : yes
fpu_exception   : yes
cpuid level     : 11
wp              : yes


отключил еще гипертрайдинг в биосе, сразу половина ядер пропала. приедет 10гб сфп модуль буду уже с ним пробовать переключиться.

Share this post


Link to post
Share on other sites
1 час назад, kid79 сказал:

отключил еще гипертрайдинг в биосе

А нафига он был вообще на роутере включен?

Share this post


Link to post
Share on other sites
В 21.03.2018 в 13:35, kid79 сказал:

model name      : Intel(R) Xeon(R) CPU           E5620  @ 2.40GHz
stepping        : 2
microcode       : 0xc
cpu MHz         : 1596.000
cache size      : 12288 KB

В гугл: cpufreq governor performance

Share this post


Link to post
Share on other sites
16 минут назад, DDR сказал:

cpufreq governor performance

спасибо за помощь, пока не приехал новый сфп модуль вернулся на циску. у меня gonover выставлен на ondemand, смысла нет гонять все время проц на максимальной частоте. поправьте если я не прав.

Share this post


Link to post
Share on other sites
11 hours ago, kid79 said:

спасибо за помощь, пока не приехал новый сфп модуль вернулся на циску. у меня gonover выставлен на ondemand, смысла нет гонять все время проц на максимальной частоте. поправьте если я не прав.

латенси же

 

физику смотри

Share this post


Link to post
Share on other sites
16 часов назад, kid79 сказал:

спасибо за помощь, пока не приехал новый сфп модуль вернулся на циску. у меня gonover выставлен на ondemand, смысла нет гонять все время проц на максимальной частоте. поправьте если я не прав.

Так проверь, гуляет частота или нет

grep "Hz" /proc/cpuinfo

Share this post


Link to post
Share on other sites

Приветствую всех.

Имеем софтовый роутер. 

Роутер натит и шейпит клиентский трафик.

При трафике до 3.5 G все работает.

Но стоит пустить через сервер немного больше пользователей, трафик начинает плохо ходить.

Пинг растёт, максимальная скорость через сервер падает до 60М (для тестового пользователя) хотя должна быть 200М (либо 800М если  отключить шейпинг).

Суммарный трафик при этом вырастает всего до 4G что вполне соответствует тому числу пользователей что мы добавляем.

Загрузка процессора при этом  35-40% примерно ровно по всем ядрам.

В логах тишина.

 

Куда смотреть дальше подскажите.

 

Сервер ---

2 процессора по 10 ядер 

2 карты Intel  X520-DA2 по 2sfp+ на каждой  (объединены в bond 20G-in 20G-out)

 

uname -a
Linux Vega 4.9.0-6-amd64 #1 SMP Debian 4.9.82-1+deb9u3 (2018-03-02) x86_64 GNU/Linux

 

Такой вот тюнинг на сервере 
net.netfilter.nf_conntrack_max = 2097152
net.netfilter.nf_conntrack_count = 341468

vm.min_free_kbytes = 7596

/sys/module/nf_conntrack/parameters/hashsize  = 262144 

 

/sbin/ethtool -G eth2 rx 4096 tx 4096
/sbin/ethtool -G eth3 rx 4096 tx 4096   
/sbin/ethtool -G eth4 rx 4096 tx 4096
/sbin/ethtool -G eth5 rx 4096 tx 4096

 

/bin/echo 1    > /proc/irq/`cat /proc/interrupts | grep 'eth2-TxRx-0'  | awk -F \: '{printf $1}'| tr -d ' '`/smp_affinity
/bin/echo 2    > /proc/irq/`cat /proc/interrupts | grep 'eth2-TxRx-1$' | awk -F \: '{printf $1}'| tr -d ' '`/smp_affinity
...

очереди карт распределены по ядрам

 

 

 perf top ---------

  15.86%  [kernel]                   [k] native_queued_spin_lock_slowpath
  15.57%  [kernel]                   [k] u32_classify
   4.41%  [kernel]                   [k] ixgbe_poll
   3.98%  [kernel]                   [k] _raw_spin_lock
   2.45%  [kernel]                   [k] ipt_do_table
   1.89%  [kernel]                   [k] fib_table_lookup
   1.85%  [kernel]                   [k] irq_entries_start
  

 

 

 

 

Share this post


Link to post
Share on other sites
2 часа назад, mirk сказал:

Приветствую всех.

Имеем софтовый роутер. 

Роутер натит и шейпит клиентский трафик.

При трафике до 3.5 G все работает.

Но стоит пустить через сервер немного больше пользователей, трафик начинает плохо ходить.

Пинг растёт, максимальная скорость через сервер падает до 60М (для тестового пользователя) хотя должна быть 200М (либо 800М если  отключить шейпинг).

Суммарный трафик при этом вырастает всего до 4G что вполне соответствует тому числу пользователей что мы добавляем.

Загрузка процессора при этом  35-40% примерно ровно по всем ядрам.

В логах тишина.

 

Куда смотреть дальше подскажите.

 

Сервер ---

2 процессора по 10 ядер 

2 карты Intel  X520-DA2 по 2sfp+ на каждой  (объединены в bond 20G-in 20G-out)

 

uname -a
Linux Vega 4.9.0-6-amd64 #1 SMP Debian 4.9.82-1+deb9u3 (2018-03-02) x86_64 GNU/Linux

 

Такой вот тюнинг на сервере 
net.netfilter.nf_conntrack_max = 2097152
net.netfilter.nf_conntrack_count = 341468

vm.min_free_kbytes = 7596

/sys/module/nf_conntrack/parameters/hashsize  = 262144 

 

/sbin/ethtool -G eth2 rx 4096 tx 4096
/sbin/ethtool -G eth3 rx 4096 tx 4096   
/sbin/ethtool -G eth4 rx 4096 tx 4096
/sbin/ethtool -G eth5 rx 4096 tx 4096

 

/bin/echo 1    > /proc/irq/`cat /proc/interrupts | grep 'eth2-TxRx-0'  | awk -F \: '{printf $1}'| tr -d ' '`/smp_affinity
/bin/echo 2    > /proc/irq/`cat /proc/interrupts | grep 'eth2-TxRx-1$' | awk -F \: '{printf $1}'| tr -d ' '`/smp_affinity
...

очереди карт распределены по ядрам

 

 

 perf top ---------

  15.86%  [kernel]                   [k] native_queued_spin_lock_slowpath
  15.57%  [kernel]                   [k] u32_classify
   4.41%  [kernel]                   [k] ixgbe_poll
   3.98%  [kernel]                   [k] _raw_spin_lock
   2.45%  [kernel]                   [k] ipt_do_table
   1.89%  [kernel]                   [k] fib_table_lookup
   1.85%  [kernel]                   [k] irq_entries_start
  

 

 

 

 

Попробуйте отключить гипертрейдинг, если включен и убрать один процессор.

Share this post


Link to post
Share on other sites
6 часов назад, mirk сказал:

Куда смотреть дальше подскажите.

упирается в spinlock-и шейпера.

 

разводите шейпинг на несколько машинок. или попробуйте последние ядра, там вроде как идут подвижки в сторону lockless qdisc'ов.

Share this post


Link to post
Share on other sites
12 часов назад, mirk сказал:

2 карты Intel  X520-DA2 по 2sfp+ на каждой  (объединены в bond 20G-in 20G-out)

Какой смысл объединять в бондинг десятки, если у вас и 40% для одного порта не достигается?

5 часов назад, NiTr0 сказал:

упирается в spinlock-и шейпера.

Не факт, тут еще бондинг отметился.

Share this post


Link to post
Share on other sites
14 часов назад, mirk сказал:

2 процессора по 10 ядер 

2 карты Intel  X520-DA2 по 2sfp+ на каждой  (объединены в bond 20G-in 20G-out)

Зуб даю, один pci-e слот на одном CPU, второй на другом. Если разобрать бондинг, повесить все на одну карту и обработку повесить на 1 CPU(а в идеале - на время вообще убрать второй что б не путаться) - чудеса уйдут и пролезет 10G.

Share this post


Link to post
Share on other sites
2 часа назад, kayot сказал:

Зуб даю, один pci-e слот на одном CPU, второй на другом. Если разобрать бондинг, повесить все на одну карту и обработку повесить на 1 CPU(а в идеале - на время вообще убрать второй что б не путаться) - чудеса уйдут и пролезет 10G.

Нет обе карты на слотах CPU1 в материнке. Сегодня попробую убрать бондинг.

 

 

4 часа назад, taf_321 сказал:

Какой смысл объединять в бондинг десятки, если у вас и 40% для одного порта не достигается?

Реально трафика больше 10G  и он каждый месяц растёт. Просто в тестах не стали давать больше когда столкнулись с проблемой.

 

 

10 часов назад, NiTr0 сказал:

разводите шейпинг на несколько машинок. или попробуйте последние ядра, там вроде как идут подвижки в сторону lockless qdisc'ов.

У нас есть решение из 2х машин одна шейпит вторая натит. Хотели сделать всё на одной более мощной.

 

 

15 часов назад, Sacrament сказал:

Попробуйте отключить гипертрейдинг, если включен и убрать один процессор.

Гипертрейдинг отключен.

 

Как писал выше у нас есть решение из 2х машин одна шейпит вторая натит. Такая связка без особых проблем переваривает 10G. 

Но 2 машины занимают в 2 раза больше места и в 2 раза менее надёжны.

С ростом трафика нам понадобились ещё мощности вот и решили попробовать все на одной собрать.

 

Сегодня попробую убрать одну карт и посмотреть что будет.


Ещё интересный момент.

Настроил сбор данных по conntrack и графики меня смущают.

На новом сервере  соотношение Estableshed, time_wait и syn_sent совсем не такое как на старых серверах. 

 

 

Новый

Новый.png

 

Старый

Старый.png

Edited by mirk

Share this post


Link to post
Share on other sites
6 часов назад, mirk сказал:

Как писал выше у нас есть решение из 2х машин одна шейпит вторая натит. Такая связка без особых проблем переваривает 10G. 

Но 2 машины занимают в 2 раза больше места и в 2 раза менее надёжны.

а почему бы не сделать 2 машины шейпер + нат, с горячим резервом - при падении одной траф перетекает на вторую (тот же CARP или еще как)?

 

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

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