Jump to content

Recommended Posts

Posted

Всем привет.

Есть сервер 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]

 

 

 

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

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

 

Posted (edited)

[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
Posted (edited)
ipfw может приседает хорошо.

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

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

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

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

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

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

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

net.inet.ip.fw.static_count: 2865

 

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

Edited by denis_vid
Posted
Правил сейчас

net.inet.ip.fw.static_count: 2865

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

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

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

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

 

Posted

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

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

 

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

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

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

Posted (edited)
Параметры 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
Posted
Всвязи с этим прошу кому не лень подсказать т.к. не хочется эксперементировать на рабочей машине

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

 

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

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

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

 

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

 

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.

×
×
  • Create New...
На сайте используются файлы cookie и сервисы аналитики для корректной работы форума и улучшения качества обслуживания. Продолжая использовать сайт, вы соглашаетесь с использованием файлов cookie и с Политикой конфиденциальности.