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

Проблема с сетевыми карточками софтшейпера Freebsd 7.x

Всем привет.

Есть сервер Dell PowerEdge 2950 который заюзан в качестве софтшейпера. 2xCoreQuad 4Gb Ram 2 Broadcom Nextreme-II интегрированных сетевых адаптера. OC Freebsd 7.3 Юзается ipfw+dummynet конкретно роутинг шейпинг и все, ната нет.

Изначально использовались броадкомовские карточки и все было вроде отлично. Загрузка проца до 40 кП/с была не более 20 % на каждое ядро. Выше 40 тыщ пакетов полезли ошибки на интерфейсах. Причину наши довольно быстро - драйвер карточки юзал маленький объем буфера FIFO и пакеты которые не помещались в буфер дропались. Аппаратно насколько я понял объем буфера максимум 64к. Поиски в нете что изменить в сырцах драйвера для увеличения объема буфера ни к чему не привели, самостоятельное копание сырцов тоже. Т.к. шейпер к тому времени был в бою проблему следовало решать очень быстро и решили ее заменой карточек на Intel PRO 1000 Server Adapter PT.

Поначалу родной драйвер из дистрибутива 7.3 в boot/loader hw.em.rxd="4096" hw.em.txd="4096". Ошибки на интерфейсах пропали но сильно возросла загрузка CPU на два ядра которые юзали карточки. При нагрузке 45-50 кП/с загрузка одного ядра достигала 100 % и конечно ошибки и рост пингов. Ладно подумал я) Ставим яндекс дрова. Поставил сделал rx_kthreads на оба адаптера 4 cpuset-ом вручную раскидал процессы которые жрут ресурсы по незагруженным ядрам. На какое то время это дало эффект от 40 до 60 % нагрузки на ядро но ненадолго. Сейчас 60-70 кП/с и загрузка уже до 85 %

Привожу top -S в момент минимальной загрузки (утро)

PID USERNAME THR PRI NICE SIZE RES STATE C TIME WCPU COMMAND

14 root 1 171 ki31 0K 16K RUN 4 1551.2 65.92% idle: cpu4

12 root 1 171 ki31 0K 16K CPU6 6 1468.4 56.05% idle: cpu6

21 root 1 -44 - 0K 16K CPU1 4 804.5H 55.42% swi1: net

13 root 1 171 ki31 0K 16K CPU5 5 1460.3 54.98% idle: cpu5

15 root 1 171 ki31 0K 16K CPU3 3 1424.1 51.12% idle: cpu3

16 root 1 171 ki31 0K 16K CPU2 2 1441.2 50.63% idle: cpu2

18 root 1 171 ki31 0K 16K RUN 0 1350.2 46.78% idle: cpu0

17 root 1 171 ki31 0K 16K RUN 1 1269.2 45.75% idle: cpu1

11 root 1 171 ki31 0K 16K RUN 7 1356.4 44.82% idle: cpu7

25065 root 1 43 - 0K 16K WAIT 5 390.5H 39.31% em1_rx_kthread_5

25062 root 1 43 - 0K 16K CPU5 5 364.1H 33.01% em1_rx_kthread_2

25064 root 1 43 - 0K 16K WAIT 6 365.0H 32.62% em1_rx_kthread_4

38 root 1 43 - 0K 16K CPU3 3 390.8H 30.71% em1_rx_kthread_1

37 root 1 43 - 0K 16K WAIT 2 390.1H 29.44% em1_rx_kthread_0

25066 root 1 43 - 0K 16K CPU7 7 358.7H 29.15% em1_rx_kthread_6

33 root 1 43 - 0K 16K CPU4 6 221.8H 22.85% em0_rx_kthread_1

25055 root 1 43 - 0K 16K WAIT 6 205.8H 22.80% em0_rx_kthread_3

25059 root 1 43 - 0K 16K CPU4 0 205.8H 21.97% em0_rx_kthread_7

25054 root 1 43 - 0K 16K WAIT 4 187.4H 14.60% em0_rx_kthread_2

25056 root 1 43 - 0K 16K RUN 7 171.3H 13.23% em0_rx_kthread_4

32 root 1 43 - 0K 16K RUN 1 177.5H 11.72% em0_rx_kthread_0

52 root 1 -68 - 0K 16K - 4 115.6H 1.86% dummynet

 

netstat -w1

root@shaper /etc]# netstat -w1 -i em1

input (Total) output

packets errs bytes packets errs bytes colls

40471 0 29560399 39532 0 28508500 0

40707 0 30027397 39491 0 28915777 0

40355 0 29530118 39818 0 28644178 0

40497 0 29498298 38859 0 28463746 0

39904 0 29017020 39240 0 28109825 0

39634 0 29242710 38137 0 28269260 0

39632 0 29360569 38870 0 28425377 0

39634 0 29248165 38657 0 28358764 0

39066 0 28846025 37757 0 27718854 0

40535 0 29338532 39809 0 28321484 0

40295 0 29972966 38744 0 28734627 0

40061 0 29864550 39395 0 29029408 0

39186 0 28731032 37881 0 27757541 0

39048 0 28732234 38049 0 27831635 0

38674 0 28328730 37867 0 27374103 0

38488 0 28235643 37148 0 27241196 0

 

htop

 

1 [|||||||||||||||||||||||||||||||||||||||| 42.1%] Tasks: 46 total, 1 running

2 [|||||||||||||||||||||||||||||||||||||||||| 44.8%] Load average: 3.42 3.71 3.50

3 [|||||||||||||||||||||||||||||||||||||||| 43.0%] Uptime: 83 days, 15:30:16

4 [||||||||||||||||||||||||||||||||||||| 39.6%]

5 [|||||||||||||||||||||||||||| 29.1%]

6 [|||||||||||||||||||||||||||||||||||||||| 42.2%]

7 [||||||||||||||||||||||||||||||||||||||| 41.3%]

8 [|||||||||||||||||||||||||||||||||||||||||||||| 48.6%]

Mem[||||||||||||||| 581/4080MB]

Swp[ 0/4096MB]

 

Как видно выше dummynet сам ресурсы не ест а едят swi1: net и rx_kthread

-rxcsum -tso ничего не дало

sysctl

security.bsd.see_other_uids=0

security.bsd.see_other_gids=0

net.inet.tcp.blackhole=2

net.inet.udp.blackhole=1

net.inet.icmp.icmplim=10

net.inet.ip.random_id=1

net.inet.ip.forwarding=1

net.inet.ip.fw.one_pass=1

net.inet.ip.redirect=0

net.inet.tcp.sendspace=1048576

net.inet.tcp.recvspace=1048576

net.inet.tcp.msl=15000

kern.ipc.maxsockets=204800

kern.ipc.maxsockbuf=16777216

net.inet.tcp.syncookies=1

kern.ipc.nmbclusters=262144

kern.ipc.somaxconn=24096

net.inet.ip.intr_queue_maxlen=1024

net.inet.tcp.mssdflt=1460

net.inet.tcp.slowstart_flightsize=54

net.inet.ip.fastforwarding=1

net.inet.ip.dummynet.io_fast=1

net.isr.direct=0

net.inet.ip.dummynet.hash_size=1024

net.local.stream.recvspace=65535

net.local.stream.sendspace=65535

net.inet.udp.maxdgram=57344

net.inet.tcp.inflight.enable=0

#net.inet.tcp.hostcache.expire=1

net.inet.tcp.fast_finwait2_recycle=1

net.inet.ip.dummynet.max_chain_len=32

#

net.inet.icmp.maskrepl=0

net.inet.ip.sourceroute=0

net.inet.ip.accept_sourceroute=0

net.inet.icmp.bmcastecho=0

 

 

dev.em.0.rx_int_delay=750

dev.em.0.tx_int_delay=750

dev.em.0.rx_abs_int_delay=1500

dev.em.0.tx_abs_int_delay=1500

dev.em.1.rx_int_delay=750

dev.em.1.tx_int_delay=750

dev.em.1.rx_abs_int_delay=1500

dev.em.1.tx_abs_int_delay=1500

dev.em.0.rx_kthreads=4

dev.em.1.rx_kthreads=4

 

если выключить фастфорвардинг и включить net.isr.direct загрузка возрастает еще на 10 % на ядро а dummynet есть примерно 60% ресрсов проца по топу.

net.inet.ip.fw.enable: 1 -> 0 и сразу нагрузка падает

 

CPU: 0.5% user, 0.0% nice, 11.8% system, 0.0% interrupt, 87.7% idle

Mem: 106M Active, 803M Inact, 582M Wired, 24K Cache, 418M Buf, 2454M Free

Swap: 4096M Total, 4096M Free

 

PID USERNAME THR PRI NICE SIZE RES STATE C TIME WCPU COMMAND

14 root 1 171 ki31 0K 16K CPU4 4 1551.3 79.98% idle: cpu4

13 root 1 171 ki31 0K 16K RUN 5 1460.4 75.44% idle: cpu5

12 root 1 171 ki31 0K 16K RUN 6 1468.5 74.90% idle: cpu6

15 root 1 171 ki31 0K 16K CPU3 3 1424.2 72.75% idle: cpu3

16 root 1 171 ki31 0K 16K CPU2 2 1441.3 72.22% idle: cpu2

11 root 1 171 ki31 0K 16K RUN 7 1356.5 67.48% idle: cpu7

17 root 1 171 ki31 0K 16K CPU1 1 1269.3 66.60% idle: cpu1

18 root 1 171 ki31 0K 16K CPU0 0 1350.3 65.33% idle: cpu0

21 root 1 -44 - 0K 16K WAIT 0 804.6H 25.54% swi1: net

25065 root 1 43 - 0K 16K CPU1 1 390.6H 20.17% em1_rx_kthread_5

25064 root 1 43 - 0K 16K WAIT 6 365.1H 17.33% em1_rx_kthread_4

25062 root 1 43 - 0K 16K RUN 5 364.1H 17.04% em1_rx_kthread_2

25066 root 1 43 - 0K 16K WAIT 7 358.8H 16.70% em1_rx_kthread_6

38 root 1 43 - 0K 16K WAIT 3 390.9H 16.26% em1_rx_kthread_1

37 root 1 43 - 0K 16K WAIT 2 390.1H 15.09% em1_rx_kthread_0

25059 root 1 43 - 0K 16K WAIT 0 205.8H 14.55% em0_rx_kthread_7

33 root 1 43 - 0K 16K WAIT 2 221.8H 14.31% em0_rx_kthread_1

25055 root 1 43 - 0K 16K WAIT 0 205.8H 13.62% em0_rx_kthread_3

25054 root 1 43 - 0K 16K WAIT 4 187.4H 9.18% em0_rx_kthread_2

25056 root 1 43 - 0K 16K WAIT 7 171.4H 8.40% em0_rx_kthread_4

32 root 1 43 - 0K 16K WAIT 1 177.6H 7.96% em0_rx_kthread_0

83922 root 1 96 0 7276K 2044K select 2 26:02 2.49% htop

52 root 1 -68 - 0K 16K - 3 115.6H 0.68% dummynet

 

1 [||||||||||||||||||| 19.7%] Tasks: 46 total, 1 running

2 [|||||||||| 10.3%] Load average: 1.97 3.11 3.32

3 [|||||||| 8.4%] Uptime: 83 days, 15:39:25

4 [||||||||| 8.9%]

5 [|||||||| 8.4%]

6 [|||||||||| 10.2%]

7 [|||||| 6.5%]

8 [||||||||| 9.6%]

Mem[||||||||||||||| 582/4080MB]

Swp[ 0/4096MB]

 

 

 

Вот теперь я сижу с этой вроде неслабой железкой с хорошими карточками и ломаю голову почему они не справляется с такой небольшой для них нагрузкой

Прошу помощи у людей знающих.

 

Share this post


Link to post
Share on other sites

покажи ifconfig

такой же сервак сегодня запустил.

только на <Broadcom NetXtreme Gigabit Ethernet Controller, ASIC rev. 0x000105>

Share this post


Link to post
Share on other sites

[root@shaper /etc]# ifconfig

em0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> metric 0 mtu 1500

options=198<VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,TSO4>

ether 00:15:17:cc:de:6a

inet x.x.x.x netmask 0xfffffffc broadcast x.x.x.x

media: Ethernet autoselect (1000baseTX <full-duplex>)

status: active

em1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500

options=198<VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,TSO4>

ether 00:15:17:cc:de:77

inet x.x.x.x netmask 0xfffffffc broadcast x.x.x.x

media: Ethernet autoselect (1000baseTX <full-duplex>)

status: active

lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384

inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3

inet6 ::1 prefixlen 128

inet 127.0.0.1 netmask 0xff000000

Edited by denis_vid

Share this post


Link to post
Share on other sites

ipfw может приседает хорошо.

попробуй оптимизировать его

м.б. поллинг нужен?

Edited by Sanchezz

Share this post


Link to post
Share on other sites
ipfw может приседает хорошо.

попробуй оптимизировать его

м.б. поллинг нужен?

Пробовал поллинг kern.hz=2000 Загрузка снижается незначительно

Использую отложенные прерывания по sysctl это видно что по идее должно приводить к сравнимому с поллингом эффекту

И насколько я понял в случае с em с яндекс драйвером поллинг не советуют использовать рекомендуют int_delay

Забыл добавить правила ipfw статические по два на каждого клиента входящий и исходящий

Правил сейчас

net.inet.ip.fw.static_count: 2865

 

Мне странно что rx_kthread.потребляют столько CPU и что с броадкомовскими карточками загрузка была в разы ниже

Edited by denis_vid

Share this post


Link to post
Share on other sites
Правил сейчас

net.inet.ip.fw.static_count: 2865

Попробуйте уменьшить количество правил хотя бы до сотни! Раскидать правила по таблицам. Поищите по форумам - множество примеров есть.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
Попробую, отпишусь я задумывался про таблицы но наткнулся на мнение что нагрузку вряд ли снизят потому что в итоге таблицы все равно разворачиваются в правила и пакет в итоге проходит через тоже количество правил что и без таблиц
так надо маны смотреть, а не мнения читать. Вот у человека по сути те же проблемы http://forum.nag.ru/forum/index.php?showtopic=60605

пакет пройдет столько правил сколько нужно, skipto, tablearg тут лучшие друзья.

 

Share this post


Link to post
Share on other sites

Параметры sysctl dev.em приведены из вывода команды /sbin/sysctl или из файла /etc/sysctl.conf?

Если из sysctl.conf, то они могли просто не загрузиться, здесь этот баг драйвера em обсуждался неоднократно.

 

У нас ipfw стал сворачиваться в трубочку на P4+FreeBSD 5.5 даже при небольшом трафике,

когда простыня правил выросла до 2000.

Перешли на таблицы сначала для ACL, затем для шейперов - всё стало летать.

Share this post


Link to post
Share on other sites
Параметры sysctl dev.em приведены из вывода команды /sbin/sysctl или из файла /etc/sysctl.conf?

Если из sysctl.conf, то они могли просто не загрузиться, здесь этот баг драйвера em обсуждался неоднократно.

 

У нас ipfw стал сворачиваться в трубочку на P4+FreeBSD 5.5 даже при небольшом трафике,

когда простыня правил выросла до 2000.

Перешли на таблицы сначала для ACL, затем для шейперов - всё стало летать.

Это из /etc/sysctl.conf но в /sbin/sysctl dev.em вывод что параметры применены. Остальное все в sysctl по умолчанию.

Спасибо всем за ответы, ясно в каком направление двигаться

Всвязи с этим прошу кому не лень подсказать т.к. не хочется эксперементировать на рабочей машине

Как правильно настроить таблицы если сейчас конфиг типа?

 

pipe 13000 config bw 3Mbit/s queue 60 mask dst-ip 0xffffffff

pipe 23000 config bw 3Mbit/s queue 60 mask src-ip 0xffffffff

 

правила для клиентов

 

ipfw add 600 pipe 13000 ip from any to x.x.x.x out

ipfw add 601 pipe 23000 ip from x.x.x.x to any in

Edited by denis_vid

Share this post


Link to post
Share on other sites
Всвязи с этим прошу кому не лень подсказать т.к. не хочется эксперементировать на рабочей машине

Как правильно настроить таблицы если сейчас конфиг типа?

 

pipe 13000 config bw 3Mbit/s queue 60 mask dst-ip 0xffffffff

pipe 23000 config bw 3Mbit/s queue 60 mask src-ip 0xffffffff

 

правила для клиентов

 

ipfw add 600 pipe 13000 ip from any to x.x.x.x out

ipfw add 601 pipe 23000 ip from x.x.x.x to any in

похо же ссылку http://forum.nag.ru/forum/index.php?showtopic=60605 так и не посмотрел.

Там рабочий пример дан.

Share this post


Link to post
Share on other sites

Там рабочий пример дан.

Спасибо! Как то автоматически цитаты пропускал

Share this post


Link to post
Share on other sites
Как правильно настроить таблицы если сейчас конфиг типа?

 

pipe 13000 config bw 3Mbit/s queue 60 mask dst-ip 0xffffffff

pipe 23000 config bw 3Mbit/s queue 60 mask src-ip 0xffffffff

 

правила для клиентов

 

ipfw add 600 pipe 13000 ip from any to x.x.x.x out

ipfw add 601 pipe 23000 ip from x.x.x.x to any in

Готовый генератор - http://forum.nag.ru/forum/index.php?showtopic=54379

 

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