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

Freebsd+mpd проблема с прокачкой Не могу прокачать более 48 Мб/с

Добрый день.

Столкнулся с проблемой.

Есть сервер NAS на базе FreeBSD 7.0 и mpd4

+ pf для NAT, ipf для базовой безопастности и ipfw для нарезки скорости абонентам.

Сервер держит 100-250 сессий pptp. Все абоненты в час пик + я с анлимитом не могу вытянуть больше 48мегабит.

Также при подключении на своей сессии не могу вытянуть больше 28-30Мб/с.

 

На сервере 2 интерфейса включеные в 1000fullduplex и на интерфейсах комутатора ошибок и т.п. нет.

 

Без ВПН-соединения получаю 88-90 мегабит (ограничение моего 100мегабитного порта).

 

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

 

last pid: 57188; load averages: 0.73, 0.80, 0.81

59 processes: 1 running, 58 sleeping

CPU states: 0.0% user, 0.0% nice, 0.5% system, 1.5% interrupt, 98.0% idle

Mem: 211M Active, 2580M Inact, 286M Wired, 145M Cache, 199M Buf, 33M Free

Swap: 8192M Total, 8192M Free

 

Когда убираю пайпы (около 1000 шт.) общая прокачка выростает до 120 Мб/с, но моя сесия не отдает все равно больше 28-30 Мб/с.

 

 

А тут даже не знаю с чего начать.

Либо это всплывают ограничения моего нетюнниного ядра либо хз.

 

Буду очень благодарен за путь истинный, за критику и за посылание в гугл , но в хоть в каком-то направлении:) .

 

 

Edited by user_145

Share this post


Link to post
Share on other sites

Немного в сторону, но... а почему бы не отказаться от dummynet вообще, раз у Вас mpd? Ведь шейпинг прекрасно реализуется через ng_car...

А вообще, давно заметил, что pppoe через mpd работает намного быстрее, нежели pptp.

Edited by Alexey K

Share this post


Link to post
Share on other sites
Немного в сторону, но... а почему бы не отказаться от dummynet вообще, раз у Вас mpd? Ведь шейпинг прекрасно реализуется через ng_car...

А вообще, давно заметил, что pppoe через mpd работает намного быстрее, нежели pptp.

Спасибо за ответ.

Но тут дело в том может ли создаваться проблема из правил фаярвола при недогружености процесора?

Помню как-то мистер Jab предлагал автора такой конструкции застрелить:).

Но у автора была загрузка проца если не ошибаюсь в 70%.

 

Share this post


Link to post
Share on other sites

 

И ведь знают, что надо делать, и все-равно... ;-)

Share this post


Link to post
Share on other sites
И ведь знают, что надо делать, и все-равно... ;-)
Но где увидеть что ЭТО именно из-за пайпов?

 

 

Share this post


Link to post
Share on other sites
И ведь знают, что надо делать, и все-равно... ;-)
Но где увидеть что ЭТО именно из-за пайпов?

А кто сказал, что из-за пайпов ? Я сказал - что надо пристрелить. О роутере-то Вы никаких данных не привели, а подземный стук мы не лечим.

Share this post


Link to post
Share on other sites
И ведь знают, что надо делать, и все-равно... ;-)
Но где увидеть что ЭТО именно из-за пайпов?

А кто сказал, что из-за пайпов ? Я сказал - что надо пристрелить. О роутере-то Вы никаких данных не привели, а подземный стук мы не лечим.

Вы имеете ввиду железо?

 

Роутер

Intel® Xeon® CPU E5420 @ 2.50GHz 4Г ОЗУ.

2 гиговые карточки встроеные.

 

Или другие параметры типа sysctl-ные и т.п.

 

 

Share this post


Link to post
Share on other sites

Нет, железо пристреливать не надо. Оно не виновато.

Share this post


Link to post
Share on other sites

нужно два теста провести:

1. включить пайпы, выключить мпд.

 

Если проблема остаётся - крути пайпы.

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

 

2. Выключить пайпы - включить мпд.

 

Проблема может быть из-за шифрования например.

Share this post


Link to post
Share on other sites
нужно два теста провести:

1. включить пайпы, выключить мпд.

 

Если проблема остаётся - крути пайпы.

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

 

2. Выключить пайпы - включить мпд.

 

Проблема может быть из-за шифрования например.

Логично.

 

Выключаю пайпы, включаю МПД - сумарная прокачка выростает до 100Мб\с -максимальная скорость внешнего канала.

Включаю пайпы, выключаю МПД - больше 48-50Мб\с не растет. При этом проц 98 % свободного.

Либо намудрил с пайпами. Но уже 200 раз проверял.

Либо галимый у меня ...

 

Но не хочется верить что проблема в колличестве пайпов и при этом проц отдыхает.

 

 

 

 

Share this post


Link to post
Share on other sites
нужно два теста провести:

1. включить пайпы, выключить мпд.

 

Если проблема остаётся - крути пайпы.

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

 

2. Выключить пайпы - включить мпд.

 

Проблема может быть из-за шифрования например.

Логично.

 

Выключаю пайпы, включаю МПД - сумарная прокачка выростает до 100Мб\с -максимальная скорость внешнего канала.

Включаю пайпы, выключаю МПД - больше 48-50Мб\с не растет. При этом проц 98 % свободного.

Либо намудрил с пайпами. Но уже 200 раз проверял.

Либо галимый у меня ...

 

Но не хочется верить что проблема в колличестве пайпов и при этом проц отдыхает.

у меня была такая шняга, когда вручную делал пайп на каждого абонента. Решил введением таблиц:

 

Общая схема такова:

я завожу две таблицы, для входящего и для исходящего трафика.

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

Я сделал два пайпа с номерами 128 и 100.

Таким образом, для того чтобы ограничить клиента, нужно добавить в первую таблицу его айпишник и значение 128 а во вторую - айпишник и значение 100.

Делается это вот так:

ipfw table 1 add 10.1.0.150/32 128

ipfw table 2 add 10.1.0.150/32 100

 

 

Вот так я завожу два пайпа:

ipfw pipe 128 config bw 128Kbit/s mask dst-ip 0xffffffff

ipfw pipe 100 config bw 100Kbit/s mask src-ip 0xffffffff

Первый создаёт динамические пайпы по айпишнику назначения. Маска показывает, что нужно различать хосты. Если сделать маску меньше, то можно различать сети, но это нам не надо.

Второй делает пайпы по адресу источника.

 

Ну и теперь остаётся сделать два правила для формирования этих пайпов:

ipfw add pipe tablearg ip from any to table\(1\) via stge1 out

ipfw add pipe tablearg ip from table\(2\) to any via stge1 in

 

Смысл правил таков:

Добавить в пайп с номером TABLEARG любой трафик идущий на ребят из таблицы 1 через интерфейс stge1

TABLEARG - это число из таблицы 1. В нашем случае, вместо TABLEARG подставится 128 и это правило будет тождественно привычному ipfw add pipe 128 ip from any to table\(1\) via stge1 out

Использование tablearg позволяет нам насоздавать пайпов с разными скоростями и указывать скорость клиента значением в таблице. Это очень удобно.

 

 

Share this post


Link to post
Share on other sites

 

Очень похоже что на трубах не указаны in/out интерфейсы, трафик два раза шейптся.

Share this post


Link to post
Share on other sites

Очень похоже что на трубах не указаны in/out интерфейсы, трафик два раза шейптся.

ну, у меня были другие трудности с пайпами, созданными вручную. Была странная логика прокачки трафика, который не попадал ни в один пайп, приходилось эти потоки вручную делать allow

Share this post


Link to post
Share on other sites
нужно два теста провести:

1. включить пайпы, выключить мпд.

 

Если проблема остаётся - крути пайпы.

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

 

2. Выключить пайпы - включить мпд.

 

Проблема может быть из-за шифрования например.

Логично.

 

Выключаю пайпы, включаю МПД - сумарная прокачка выростает до 100Мб\с -максимальная скорость внешнего канала.

Включаю пайпы, выключаю МПД - больше 48-50Мб\с не растет. При этом проц 98 % свободного.

Либо намудрил с пайпами. Но уже 200 раз проверял.

Либо галимый у меня ...

 

Но не хочется верить что проблема в колличестве пайпов и при этом проц отдыхает.

у меня была такая шняга, когда вручную делал пайп на каждого абонента. Решил введением таблиц:

 

Общая схема такова:

я завожу две таблицы, для входящего и для исходящего трафика.

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

Я сделал два пайпа с номерами 128 и 100.

Таким образом, для того чтобы ограничить клиента, нужно добавить в первую таблицу его айпишник и значение 128 а во вторую - айпишник и значение 100.

Делается это вот так:

ipfw table 1 add 10.1.0.150/32 128

ipfw table 2 add 10.1.0.150/32 100

 

 

Вот так я завожу два пайпа:

ipfw pipe 128 config bw 128Kbit/s mask dst-ip 0xffffffff

ipfw pipe 100 config bw 100Kbit/s mask src-ip 0xffffffff

Первый создаёт динамические пайпы по айпишнику назначения. Маска показывает, что нужно различать хосты. Если сделать маску меньше, то можно различать сети, но это нам не надо.

Второй делает пайпы по адресу источника.

 

Ну и теперь остаётся сделать два правила для формирования этих пайпов:

ipfw add pipe tablearg ip from any to table\(1\) via stge1 out

ipfw add pipe tablearg ip from table\(2\) to any via stge1 in

 

Смысл правил таков:

Добавить в пайп с номером TABLEARG любой трафик идущий на ребят из таблицы 1 через интерфейс stge1

TABLEARG - это число из таблицы 1. В нашем случае, вместо TABLEARG подставится 128 и это правило будет тождественно привычному ipfw add pipe 128 ip from any to table\(1\) via stge1 out

Использование tablearg позволяет нам насоздавать пайпов с разными скоростями и указывать скорость клиента значением в таблице. Это очень удобно.

Данке шон:)

Наверное буду взрывать таблицы...

 

Share this post


Link to post
Share on other sites
Данке шон:)

Наверное буду взрывать таблицы...

Кошмар... :)

Вам Alexey K дал отличный совет. Попробуйте все же поставить mpd5 и цепляйте шейпер на ng_car. И никаких dummynet и взорванных таблиц! ;)

 

P.S. Сам юзаю эту связку уже полгода, проблем "0". Единственно, что пока в он-лайн юзеров не много - не более 150 максимально. Но как утверждают "гуру мпд", проблем не должно быть и при большем кол-ве он-лайн.

 

 

Share this post


Link to post
Share on other sites

 

ng_car - весьма негибкое решение по сравнению с dummynet

Share this post


Link to post
Share on other sites
Данке шон:)

Наверное буду взрывать таблицы...

Кошмар... :)

Согласен, но хочу докопаться :).

 

Вот что нового я накопал.

top -S

 

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

16 root 1 171 ki31 0K 8K CPU2 2 338.4H 98.93% idle: cpu2

12 root 1 171 ki31 0K 8K CPU6 6 335.9H 98.78% idle: cpu6

15 root 1 171 ki31 0K 8K RUN 3 292.3H 98.58% idle: cpu3

14 root 1 171 ki31 0K 8K CPU4 4 339.9H 98.34% idle: cpu4

17 root 1 171 ki31 0K 8K CPU1 1 341.4H 98.00% idle: cpu1

11 root 1 171 ki31 0K 8K CPU7 7 339.3H 95.70% idle: cpu7

13 root 1 171 ki31 0K 8K CPU5 5 338.1H 95.61% idle: cpu5

18 root 1 171 ki31 0K 8K CPU0 0 177.4H 85.30% idle: cpu0

19 root 1 -44 - 0K 8K WAIT 0 172.1H 14.31% swi1: net

50 root 1 -68 - 0K 8K - 2 61.0H 2.69% dummynet

 

[root@vpn /usr/obj/usr/src/sys]# netstat -w 1

input (Total) output

packets errs bytes packets errs bytes colls

9284 0 4618597 9955 0 6394010 0

9436 0 4838433 10053 0 6872875 0

8625 0 4174780 9482 0 6567584 0

9105 0 4671785 9972 0 6928457 0

9086 0 4745713 9776 0 6915969 0

9735 0 4737719 10267 0 6813400 0

 

Это при траффике 30-35Мб\с

 

Когда я догружаю своими закачками до 50Мб/с.

 

CPU states: 0.2% user, 0.0% nice, 0.9% system, 5.2% interrupt, 93.7% idle

Mem: 142M Active, 2660M Inact, 320M Wired, 123M Cache, 199M Buf, 10M Free

Swap: 8192M Total, 8192M Free

 

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

16 root 1 171 ki31 0K 8K CPU2 2 338.5H 98.88% idle: cpu2

12 root 1 171 ki31 0K 8K RUN 6 336.0H 98.78% idle: cpu6

14 root 1 171 ki31 0K 8K CPU4 4 340.0H 97.90% idle: cpu4

17 root 1 171 ki31 0K 8K CPU1 1 341.4H 97.80% idle: cpu1

13 root 1 171 ki31 0K 8K CPU5 5 338.1H 97.22% idle: cpu5

11 root 1 171 ki31 0K 8K CPU7 7 339.3H 96.92% idle: cpu7

15 root 1 171 ki31 0K 8K CPU3 3 292.4H 96.14% idle: cpu3

18 root 1 171 ki31 0K 8K CPU0 0 177.4H 54.26% idle: cpu0

19 root 1 -44 - 0K 8K WAIT 0 172.1H 44.52% swi1: net

50 root 1 -68 - 0K 8K - 3 61.0H 3.96% dummynet

958 root 2 96 0 48920K 10976K select 7 239:24 1.07% mpd4

и

 

[[root@vpn /usr/obj/usr/src/sys]# netstat -w1

input (Total) output

 

packets errs bytes packets errs bytes colls

15081 0 7859289 16553 0 13017315 0

14958 0 7372061 16357 0 12000347 0

15450 0 7869373 16850 0 13304213 0

15101 0 7777994 16809 0 13246638 0

15176 0 7799514 16674 0 13113862 0

15198 0 7896627 16442 0 12713986 0

15237 0 7718550 16767 0 13013685 0

15137 0 7691768 16547 0 12872266 0

15119 0 7846986 16438 0 12787195 0

15323 1 7864715 16626 0 12872440 0

Но проскакивает и такое:

 

[[root@vpn /usr/obj/usr/src/sys]# netstat -w1

input (Total) output

packets errs bytes packets errs bytes colls

15038 1 7404345 16248 0 12144248 0

15399 37 7295133 16665 0 11912109 0

15437 57 7196061 16712 0 11862413 0

15332 25 7247852 16640 0 11967681 0

15186 24 7125960 16408 0 11520579 0

15286 40 7166766 16566 0 11746836 0

15418 25 7015257 16613 0 11376181 0

15153 59 7004448 16313 0 11291664 0

15238 30 6971972 16429 0 11186445 0

15302 90 6979923 16414 0 11145810 0

15169 36 6872911 16488 0 11235519 0

15234 28 6964662 16449 0 11248215 0

15119 92 6709987 16501 0 11134455 0

15529 55 7213071 16332 0 11204150 0

15273 26 7209349 16615 0 11647623 0

15468 12 7157912 16679 0 11898694 0

15253 14 7113908 16482 0 11524966 0

15187 16 6929560 16583 0 11802

 

 

 

Тойсть напрашиваются такие выводы:

1. У меня хотя и 8 ядер , но такое впечатление будто работает только cpu0 - криво сделан smp?

2. Криво настроены сетевые интерфейсы.

 

 

Насчет ng_car.

Сорри за темноту, но можно ли в конструкции с ng_car менять скорость абоненту по времени? Например с 18-00 вместо 1Мб включить 2Мб\с ?

 

 

Share this post


Link to post
Share on other sites
Тойсть напрашиваются такие выводы:

1. У меня хотя и 8 ядер , но такое впечатление будто работает только cpu0 - криво сделан smp?

2. Криво настроены сетевые интерфейсы.

 

Насчет ng_car.

Сорри за темноту, но можно ли в конструкции с ng_car менять скорость абоненту по времени? Например с 18-00 вместо 1Мб включить 2Мб\с ?

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

или скрипт по крону.

Share this post


Link to post
Share on other sites

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

в конструкции с ng_car менять скорость абоненту можно по именам/номерам ng_car , а по времени или другому событию - дело скрипта

Share this post


Link to post
Share on other sites
Тойсть напрашиваются такие выводы:

1. У меня хотя и 8 ядер , но такое впечатление будто работает только cpu0 - криво сделан smp?

2. Криво настроены сетевые интерфейсы.

 

Насчет ng_car.

Сорри за темноту, но можно ли в конструкции с ng_car менять скорость абоненту по времени? Например с 18-00 вместо 1Мб включить 2Мб\с ?

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

или скрипт по крону.

Согласен, но что должен делать скрипт будь он билинговый или кроновский?

Тойсть каким образом скрипт должен сказать mpd, что нужно клиенту дать другую скорость? Через радиус?

 

Share this post


Link to post
Share on other sites

Вот у нас один из серверов доступа:

 

CPU: Intel® Xeon® CPU 3050 @ 2.13GHz (2133.42-MHz K8-class CPU)
# uname -rs

FreeBSD 7.1-PRERELEASE

# mpd4 -v

Version 4.4.1

Клиентов на нем сейчас ~610, трафик:

 

# netstat -w1

input (Total) output

packets errs bytes packets errs bytes colls

60300 0 43707896 78657 0 42775127 0

63838 0 46659211 83583 0 46245246 0

63647 0 47149601 83115 0 45921746 0

65633 0 48930663 86155 0 47543610 0

65071 0 48531189 84665 0 46106756 0

Загрузка:

 

last pid: 60962; load averages: 1.22, 1.30, 1.33 up 12+16:27:05 21:40:16

69 processes: 4 running, 52 sleeping, 13 waiting

CPU: 0.9% user, 0.0% nice, 44.0% system, 23.1% interrupt, 32.0% idle

Mem: 49M Active, 263M Inact, 368M Wired, 64K Cache, 214M Buf, 3267M Free

Правил ipfw минимум, мы не используем нарезку скоростей через dummynet. CPU простенький из Ксеонов, платформа i3000. Есть другие серверы доступа, но там более мощные процессоры (Core2Quad Q6600), нагрузка при том же количестве клиентов и трафике вообще смешная:

 

last pid: 82697; load averages: 1.09, 1.07, 1.06 up 12+16:33:29 21:43:06

70 processes: 7 running, 52 sleeping, 11 waiting

CPU: 0.3% user, 0.0% nice, 26.1% system, 9.9% interrupt, 63.7% idle

Mem: 42M Active, 261M Inact, 249M Wired, 172K Cache, 111M Buf, 430M Free

Swap: 1024M Total, 1024M Free

Кстати, вопреки всему, поллинг используется.

 

+ в sysctl

 

kern.polling.reg_frac: 20

kern.polling.user_frac: 0

kern.polling.idle_poll: 1

Edited by Alexey K

Share this post


Link to post
Share on other sites
Согласен, но что должен делать скрипт будь он билинговый или кроновский?

Тойсть каким образом скрипт должен сказать mpd, что нужно клиенту дать другую скорость? Через радиус?

Да. Ищите на opennet есть патч для динамического переключения шейпера при приходе alive пакета. Никаких "костылей" по крону.

Мой биллинг (FreeNibs) к сожалению, этого не умеет.. :( Поэтому у меня только "статика"...

Edited by AlKov

Share this post


Link to post
Share on other sites
Согласен, но что должен делать скрипт будь он билинговый или кроновский?

Тойсть каким образом скрипт должен сказать mpd, что нужно клиенту дать другую скорость? Через радиус?

Да. Ищите на opennet есть патч для динамического переключения шейпера при приходе alive пакета. Никаких "костылей" по крону.

Мой биллинг (FreeNibs) к сожалению, этого не умеет.. :( Поэтому у меня только "статика"...

Спасибо буду дерзать:)

 

 

 

 

Вот у нас один из серверов доступа:

 

CPU: Intel® Xeon® CPU 3050 @ 2.13GHz (2133.42-MHz K8-class CPU)
# uname -rs

FreeBSD 7.1-PRERELEASE

# mpd4 -v

Version 4.4.1

Клиентов на нем сейчас ~610, трафик:

 

# netstat -w1

input (Total) output

packets errs bytes packets errs bytes colls

60300 0 43707896 78657 0 42775127 0

63838 0 46659211 83583 0 46245246 0

63647 0 47149601 83115 0 45921746 0

65633 0 48930663 86155 0 47543610 0

65071 0 48531189 84665 0 46106756 0

Загрузка:

 

last pid: 60962; load averages: 1.22, 1.30, 1.33 up 12+16:27:05 21:40:16

69 processes: 4 running, 52 sleeping, 13 waiting

CPU: 0.9% user, 0.0% nice, 44.0% system, 23.1% interrupt, 32.0% idle

Mem: 49M Active, 263M Inact, 368M Wired, 64K Cache, 214M Buf, 3267M Free

Правил ipfw минимум, мы не используем нарезку скоростей через dummynet. CPU простенький из Ксеонов, платформа i3000. Есть другие серверы доступа, но там более мощные процессоры (Core2Quad Q6600), нагрузка при том же количестве клиентов и трафике вообще смешная:

 

last pid: 82697; load averages: 1.09, 1.07, 1.06 up 12+16:33:29 21:43:06

70 processes: 7 running, 52 sleeping, 11 waiting

CPU: 0.3% user, 0.0% nice, 26.1% system, 9.9% interrupt, 63.7% idle

Mem: 42M Active, 261M Inact, 249M Wired, 172K Cache, 111M Buf, 430M Free

Swap: 1024M Total, 1024M Free

Кстати, вопреки всему, поллинг используется.

 

+ в sysctl

 

kern.polling.reg_frac: 20

kern.polling.user_frac: 0

kern.polling.idle_poll: 1

Странно но после отключения поллинга я смог прокачать через роутер 76Мб/с
Edited by user_145

Share this post


Link to post
Share on other sites
Согласен, но что должен делать скрипт будь он билинговый или кроновский?

Тойсть каким образом скрипт должен сказать mpd, что нужно клиенту дать другую скорость? Через радиус?

с помощью ngctl можно изменить конфигурацию нужной ноды ng_car , и им же можно найти "имя" этой ноды
Edited by dwemer

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