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

ipfw шейпер Проблемы с исходом

День добрый.

 

Есть сетка из 4к абонентов, у всех прямые ip адреса. Общий канал - 280Мбит/с.

 

Общая схема сети dlink(L2)->dlink(L3)->cisco3750->8-ми процессорный Xeon c 8Гб памяти (сетевуха - Intel® PRO/1000 Network Connection version - 1.7.3), FreeBSD 7.2-RELEASE-p3.

 

На железке поднят bgp и шейпер.

 

# 4Mbit/s
$ipfw pipe 5 config bw 4Mbit/s queue 80Kbytes
$ipfw pipe 6 config bw 4Mbit/s queue 80Kbytes
$ipfw queue 5 config pipe 5 mask src-ip 0xffffffff
$ipfw queue 6 config pipe 6 mask dst-ip 0xffffffff
$ipfw add 1005 queue 5 ip from "table(3)" to any out xmit $ext
$ipfw add 1006 queue 6 ip from any to "table(3)" out xmit $int

 

В итоге на вход показывает 3.9Mbit/s а исход выше двух не поднимается вообще никогда.

 

Подскажите куда копать, уже 3-ий месяц ковыряемся с проблемой.

Share this post


Link to post
Share on other sites
День добрый.

 

Есть сетка из 4к абонентов, у всех прямые ip адреса. Общий канал - 280Мбит/с.

 

Общая схема сети dlink(L2)->dlink(L3)->cisco3750->8-ми процессорный Xeon c 8Гб памяти (сетевуха - Intel® PRO/1000 Network Connection version - 1.7.3), FreeBSD 7.2-RELEASE-p3.

 

На железке поднят bgp и шейпер.

 

# 4Mbit/s
$ipfw pipe 5 config bw 4Mbit/s queue 80Kbytes
$ipfw pipe 6 config bw 4Mbit/s queue 80Kbytes
$ipfw queue 5 config pipe 5 mask src-ip 0xffffffff
$ipfw queue 6 config pipe 6 mask dst-ip 0xffffffff
$ipfw add 1005 queue 5 ip from "table(3)" to any out xmit $ext
$ipfw add 1006 queue 6 ip from any to "table(3)" out xmit $int

 

В итоге на вход показывает 3.9Mbit/s а исход выше двух не поднимается вообще никогда.

 

Подскажите куда копать, уже 3-ий месяц ковыряемся с проблемой.

попробуйте без queue, т.е. пакеты сразу в pipe вгонять

ну и думаю, надо queue 80Kbytes увеличить, а также

net.inet.ip.dummynet.hash_size=65535

и имеет смысл выключить устаревание записей,

чтобы создания динамического пайпа не отнимало драгоценные микросекунды

net.inet.ip.dummynet.expire=0

 

а сетёвка одна??!?!?!

Share this post


Link to post
Share on other sites

Нет немного не так у нас 6 интерфейсов гигабитных в серваке и 3 из них заняты.

 

in1 - это порт с сервера на циску 3750G

 

на циске поднят BGP весь трафик с сети сваливается на нее и она отправляет трафик или в пиринг или на in1 в интернет

 

in2 - это 100 мегабит от оператора №1

 

in3 - это 300 мегабит от оператора №2

 

Значит схема такая трафик приходит в сервер по in1 ( на сервере опять же поднят BGP который пилит каналы ) И в зависимости от того куда кажет BGP трафик уходит или в один или в другой канал или in2 или in 3.

 

Интерфейсы на in2 - 100 мегабит на in3 - 1 гигабит

 

 

3 сетевых свободны, может покопать в эту сторону ?

Edited by hicks

Share this post


Link to post
Share on other sites

$ipfw pipe 5 config mask src-ip 0xffffffff bw 4Mbit/s queue 100 buckets 512
$ipfw pipe 6 config mask dst-ip 0xffffffff bw 4Mbit/s queue 100 buckets 512
$ipfw add 1005 pipe 5 ip from "table(3)" to any out xmit $ext
$ipfw add 1006 pipe 6 ip from any to "table(3)" out xmit $int

 

Должно быть достаточно.

Share this post


Link to post
Share on other sites

jab, На 7 Мбитах показывает 7 на вход и 4 на выход. Непонятно где затычка.

Edited by hicks

Share this post


Link to post
Share on other sites
jab, На 7 Мбитах показывает 7 на вход и 4 на выход. Непонятно где затычка.

Подземный стук не лечим, телепаты в отпуске.

Share this post


Link to post
Share on other sites
Подземный стук не лечим, телепаты в отпуске.

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

Edited by hicks

Share this post


Link to post
Share on other sites
Подземный стук не лечим, телепаты в отпуске.

:)

 

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

Проблема не в тех правилах, которые я Вам дал.

Share this post


Link to post
Share on other sites
Проблема не в тех правилах, которые я Вам дал.

Изначально у нас такие правила и были. Те, что я привел были взяты с этого форума.

 

Share this post


Link to post
Share on other sites

 

Ну я конечно понимаю, что нужно 3 месяца ковыряться, вместо того, чтобы сделать пару правил на loopback, и протестировать скорость сквозь них локально. Ведь не каждый восьмипроцессорный xeon это выдержит без разрушения всех своих восьми гигабайт памяти, к нему же еще и прокладка

соответствующая нужна.

Share this post


Link to post
Share on other sites
$ipfw pipe 5 config mask src-ip 0xffffffff bw 4Mbit/s queue 100 buckets 512
$ipfw pipe 6 config mask dst-ip 0xffffffff bw 4Mbit/s queue 100 buckets 512
$ipfw add 1005 pipe 5 ip from "table(3)" to any out xmit $ext
$ipfw add 1006 pipe 6 ip from any to "table(3)" out xmit $int

 

Должно быть достаточно.

А можно поинтересоваться почему именно такой выбор размера очереди и количества buckets?

Это вычислено как-то от ширины полосы или подобрано опытным путём?

Share this post


Link to post
Share on other sites
А можно поинтересоваться почему именно такой выбор размера очереди и количества buckets?

Это вычислено как-то от ширины полосы или подобрано опытным путём?

Никак не вычислено, взял со своего боевого шейпера.

Share this post


Link to post
Share on other sites
Никак не вычислено, взял со своего боевого шейпера.
Но туда-то оно кем-то было забито? :)

 

Прям руки чешутся попробовать теперь на своём....хотя работает прекрасно и без queue и backets

Правда net.inet.ip.dummynet.hash_size задран до 65536

Share this post


Link to post
Share on other sites
Но туда-то оно кем-то было забито? :)

"- Девочка, что это ты жуешь ?

- Не жнаю, оно шамо в рот жаполжло." (с) анекдот

 

Прям руки чешутся попробовать теперь на своём....хотя работает прекрасно и без queue и backets

Правда net.inet.ip.dummynet.hash_size задран до 65536

Работает - не трогать. ipfw pipe show прекрасно показывает сколько у вас там queue и buckets по умолчанию.

Share this post


Link to post
Share on other sites
Работает - не трогать.
знаю, но вдруг у кого-то волшебное слово, а я упустил :)

 

ipfw pipe show прекрасно показывает сколько у вас там queue и buckets по умолчанию.
ну так и показывает - много раз по 65536.

Под миллион показывает.

 

Share this post


Link to post
Share on other sites

Не победили?

У нас такая же ситуация.

FreeBSD. dummynet.

Входящий - все красиво. Исходящий - ниже, чем должен быть.

Некрасиво лечится увеличением настроек bw на трубу процентов на 40..

Edited by ibmed

Share this post


Link to post
Share on other sites
В итоге на вход показывает 3.9Mbit/s а исход выше двух не поднимается вообще никогда.

В шейпах пишите не 4Mbit/s, а 4096Kbit/s - и будет вместо 3.9 точные 4.

 

А вот с исходом - ситуация аналогичная.

Share this post


Link to post
Share on other sites

А если попробовать просумировать все вышесказаное.

Есть несколько серверов под FreeBSD с mpd5+ipfw+dummynet через tablearg

 

pipe tablearg ip from any to table(10) out

pipe tablearg ip from table(20) to any in

 

Трафика проходит порядка 400Mbit/s на каждый

Правил в таблицах порядка 2500

 

Проблемы:

1) плохо шейпит исходящий трафик, да понимаю что нельзя шейпить на in, но при текущей схеме это не реально.

 

варианты ришений: переход на ng_car, розделять на шейпер и брас

 

2) иногда у некоторых абонентов не шейпиться канал, хотя когда смотриш конфиг пайпа все в порядке. Лечиться удалением/добавлением ip в таблицу.

 

варианты ришений: делать для каждого тарифного плана отдельную таблицу

 

Что можете посоветовать в даной ситуацыи?

Share this post


Link to post
Share on other sites

В большинстве случаев проблемы связаны с тем, что dummynet упирается в ограничения размеров своих структур данных, установленные по умолчанию. Поэтому без `sysctl net.inet.ip` и указания величины HZ какое-либо обсуждение бессмысленно. А шейпер и border router безусловно нужно делать на разных машинах. Не стоит перегружать функциями одно устройство, потому что становится сложнее находить источник проблемы.

Edited by photon

Share this post


Link to post
Share on other sites

 

Лучше просто не отвечать на вопросы к которым не прилагается dmesg, sysctl -a, systat -vmstat, netstat -w1, ipfw sh, pfctl -s info и cat /dev/urandom

Share this post


Link to post
Share on other sites

долго вас читал. Расскажите убогому, что вам даст cat /dev/urandom

Share this post


Link to post
Share on other sites

 

глубокое моральное удовлетворение :-)))

Share this post


Link to post
Share on other sites
<br /> Лучше просто не отвечать на вопросы к которым не прилагается dmesg, sysctl -a, systat -vmstat, netstat -w1, ipfw sh, pfctl -s info и cat /dev/urandom<br />

Рандом нужно было в середину ставить, он важнее :)

и заметить сложнее )

Share this post


Link to post
Share on other sites

Пока машина не под нагрузкой, трафика порядка 200Мбит (453 Users)

FreeBSD 7.2-RELEASE-p3 FreeBSD 7.2-RELEASE-p3 #2: amd64

 

CPU: Intel® Core2 Quad CPU Q9550 @ 2.83GHz (2833.02-MHz K8-class CPU)

usable memory = 2081468416 (1985 MB)

avail memory = 2004656128 (1911 MB)

em0@pci0:1:0:0: class=0x020000 card=0x115e8086 chip=0x105e8086 rev=0x06 hdr=0x00

em1@pci0:1:0:1: class=0x020000 card=0x115e8086 chip=0x105e8086 rev=0x06 hdr=0x00

 

sysctl:

net.inet.ip.dummynet.hash_size=65535

net.inet.ip.dummynet.max_chain_len=10240

net.inet.ip.dummynet.io_fast=1

kern.ipc.maxsockbuf=1000000

dev.em.0.rx_abs_int_delay=1000

dev.em.0.tx_abs_int_delay=1000

dev.em.1.rx_abs_int_delay=1000

dev.em.1.tx_abs_int_delay=1000

dev.em.0.rx_int_delay=600

dev.em.0.tx_int_delay=600

dev.em.1.rx_int_delay=600

dev.em.1.tx_int_delay=600

net.inet.ip.fw.one_pass=1

net.inet.ip.fastforwarding=1

net.isr.direct=1

net.graph.recvspace=350000

net.graph.maxdgram=350000

dev.em.0.rx_kthreads=6

dev.em.1.rx_kthreads=6

 

привязан dummynet к одному из ядер

 

systat -v

 

1 users Load 0.59 0.58 0.54 Oct 15 14:44

 

Mem:KB REAL VIRTUAL VN PAGER SWAP PAGER

Tot Share Tot Share Free in out in out

Act 31076 5068 100032 8344 706264 count

All 130732 5508 12742256 9840 pages

Proc: Interrupts

r p d s w Csw Trp Sys Int Sof Flt 1058 cow 9877 total

22 45k 3846 18k 1879 986 3786 1542 zfod 1 uhci4++ 19

ozfod 1997 cpu0: time

20.6%Sys 0.5%Intr 2.0%User 0.0%Nice 76.9%Idle %ozfod 943 em0 irq256

| | | | | | | | | | | daefr 935 em1 irq257

==========+> 2042 prcfr 1997 cpu1: time

26 dtbuf 3216 totfr 2002 cpu2: time

Namei Name-cache Dir-cache 100000 desvn react 2002 cpu3: time

Calls hits % hits % 63921 numvn pdwak

7235 7235 100 24997 frevn pdpgs

intrn

Disks ad4 406228 wire

KB/t 16.00 27924 act

tps 1 831452 inact

MB/s 0.01 12872 cache

%busy 0 693392 free

213184 buf

 

netstat -w1

 

input (Total) output

packets errs bytes packets errs bytes colls

109899 0 80306101 110361 0 88368653 0

106698 0 77774480 107810 0 85393650 0

108080 0 78244523 109350 0 87654676 0

108163 0 78848878 109448 0 88082915 0

107474 0 77476669 109711 0 87101879 0

109609 0 79378665 111653 0 89666621 0

114320 0 81278554 116110 0 91880617 0

110416 0 79542115 112970 0 89624646 0

 

 

top -SP

last pid: 8623; load averages: 0.60, 0.58, 0.54 up 2+16:41:50 14:45:23

96 processes: 7 running, 74 sleeping, 15 waiting

CPU 0: 0.8% user, 0.0% nice, 6.8% system, 0.4% interrupt, 92.1% idle

CPU 1: 0.4% user, 0.0% nice, 31.6% system, 0.8% interrupt, 67.3% idle

CPU 2: 0.4% user, 0.0% nice, 19.5% system, 0.7% interrupt, 79.4% idle

CPU 3: 0.4% user, 0.0% nice, 20.6% system, 0.0% interrupt, 79.0% idle

Mem: 27M Active, 812M Inact, 397M Wired, 13M Cache, 208M Buf, 677M Free

Swap: 2048M Total, 2048M Free

 

 

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

14 root 1 171 ki31 0K 16K CPU0 0 43.0H 98.19% idle: cpu0

11 root 1 171 ki31 0K 16K RUN 3 51.1H 84.67% idle: cpu3

12 root 1 171 ki31 0K 16K RUN 2 49.5H 78.76% idle: cpu2

13 root 1 171 ki31 0K 16K CPU1 1 48.3H 67.58% idle: cpu1

28400 root 1 43 - 0K 16K WAIT 3 136:02 6.69% em1_rx_kthread_4

28398 root 1 43 - 0K 16K WAIT 2 135:47 6.69% em1_rx_kthread_2

35 root 1 43 - 0K 16K WAIT 1 300:25 6.49% em1_rx_kthread_0

36 root 1 43 - 0K 16K WAIT 1 300:17 5.86% em1_rx_kthread_1

28401 root 1 43 - 0K 16K CPU1 1 136:26 5.86% em1_rx_kthread_5

28399 root 1 43 - 0K 16K WAIT 1 136:12 5.86% em1_rx_kthread_3

31 root 1 43 - 0K 16K WAIT 1 267:47 5.57% em0_rx_kthread_0

28396 root 1 43 - 0K 16K WAIT 3 113:44 5.47% em0_rx_kthread_5

28394 root 1 43 - 0K 16K WAIT 3 113:40 5.37% em0_rx_kthread_3

32 root 1 43 - 0K 16K WAIT 2 267:37 5.18% em0_rx_kthread_1

28393 root 1 43 - 0K 16K CPU3 2 113:44 5.18% em0_rx_kthread_2

28395 root 1 43 - 0K 16K WAIT 1 113:44 4.98% em0_rx_kthread_4

34 root 1 -68 - 0K 16K WAIT 2 66:47 2.59% em1_txcleaner

16 root 1 -32 - 0K 16K WAIT 3 48:37 1.27% swi4: clock sio

56 root 1 -68 - 0K 16K - 0 20.8H 0.00% dummynet

3179 root 1 96 0 44632K 15948K select 2 68:25 0.00% mpd5

 

ipfw list

01000 pipe tablearg ip from any to table(10) out

01010 pipe tablearg ip from table(20) to any in

 

Нуд канечно в этом зоопарке есть еще и нат :)

 

pfctl -s info

Status: Enabled for 2 days 16:46:53 Debug: Urgent

 

State Table Total Rate

current entries 42696

searches 20368136393 87337.1/s

inserts 92602174 397.1/s

removals 92559478 396.9/s

Counters

match 13272006141 56909.4/s

bad-offset 0 0.0/s

fragment 1731 0.0/s

short 6542 0.0/s

normalize 7460 0.0/s

memory 0 0.0/s

bad-timestamp 0 0.0/s

congestion 0 0.0/s

ip-option 38756 0.2/s

proto-cksum 239385 1.0/s

state-mismatch 1562852 6.7/s

state-insert 48 0.0/s

state-limit 0 0.0/s

src-limit 0 0.0/s

synproxy 0 0.0/s

Edited by UTP

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