Jump to content

Recommended Posts

Posted

Есть железка, core2 e6750, 2г памяти, FreeBSD 7.0-RC1, SHED_ULE.

В ядро добавлено:

options DUMMYNET
options IPFIREWALL
options IPFIREWALL_DEFAULT_TO_ACCEPT
options HZ=1000
device if_bridge

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

Сразу после загрузки пайпов в top'е появляются чудеса:

last pid:  1236;  load averages:  0.00,  0.00,  0.00                                                                                 up 0+00:25:33  21:05:06
86 processes:  5 running, 64 sleeping, 17 waiting
CPU states:  0.2% user,  0.0% nice, 24.8% system,  0.0% interrupt, 75.0% idle
Mem: 12M Active, 7412K Inact, 32M Wired, 32K Cache, 12M Buf, 1902M Free
Swap: 3970M Total, 3970M Free

  PID USERNAME  THR PRI NICE   SIZE    RES STATE  C   TIME   WCPU COMMAND
   11 root        1 171 ki31     0K     8K RUN    1  24:55 100.00% idle: cpu1
   12 root        1 171 ki31     0K     8K RUN    0  15:37 100.00% idle: cpu0
   46 root        1 -68    -     0K     8K CPU0   0   9:18  0.00% dummynet

При этом нагрузки на шейпер вообще нет, более того, интерфейсы, через которые может хоть что-то кроме ssh пролетать, вообще погашены.

При пропускании около 200мбит idle падает до 15%, часть пакетов теряется. Основную нагрузку в этом случае создают процессы em0 taskq и em1 taskq.

 

Вопрос: где я неправ и как это хозяйство заставить нормально работать?

 

 

Posted
Вопрос: где я неправ и как это хозяйство заставить нормально работать?

Для начала:

 

sysctl

 

dev.em.0.rx_int_delay: 600

dev.em.0.tx_int_delay: 600

dev.em.0.rx_abs_int_delay: 1000

dev.em.0.tx_abs_int_delay: 1000

 

Потом попробовать увеличить buckets в ipfw pipe

Posted (edited)

Спасибо, sysctl в понедельник попробую (сейчас нет возможности пустить трафик).

buckets при добавлении в любом случае пишет 1, net.inet.ip.dummynet.hash_size: 20000

 

И. собственно, от чего dummynet жрёт проц при ничегонеделании?

Edited by inxs
Posted
Спасибо, sysctl в понедельник попробую (сейчас нет возможности пустить трафик).

buckets при добавлении в любом случае пишет 1, net.inet.ip.dummynet.hash_size: 20000

И. собственно, от чего dummynet жрёт проц при ничегонеделании?

"Уважаемые товарищи ученые, у меня в подполе уже который год происходит подземный стук, объясните пожалуйста, отчего и почему

он происходит". (с) ПНвС АБС

 

По вашему top'у я не вижу, чтобы dummynet что-то жрал. A hash_size=20000 это конечно круто, но по-моему совершенно избыточно.

 

Покажите строку которой создаете pipes.

 

 

 

Posted
По вашему top'у я не вижу, чтобы dummynet что-то жрал.
%% system + увеличивается cpu time у dummynet

 

Покажите строку которой создаете pipes.
Сначала скриптом генерится большой файлик со строками вида

 

pipe 30 config bw 3000kbit/s
table 1 add xx.xx.xx.12 30
table 1 add xx.xx.xx.130 30

Потом - /sbin/ipfw -q -p cat /this/file /dev/null

Posted
Сначала скриптом генерится большой файлик со строками вида

pipe 30 config bw 3000kbit/s
table 1 add xx.xx.xx.12 30
table 1 add xx.xx.xx.130 30

Потом - /sbin/ipfw -q -p cat /this/file /dev/null

То есть все 12 тыщ пайпов статические и queue вы не задаете ? Ну тогда hash_size и buckets не помогут.

Тогда у вас нормальная нагрузка для 200 мегабит.

 

А почему нельзя сделать по-нормальному ? Каковы условия исходной задачи ?

Posted

Есть клиент, на клиента выделяется, например, 3 мегабита (3 на вход, 3 на выход). У клиента может быть несколько ip адресов, нужно их все в эти 3 мбита вписать.

 

Можно в принципе сделать и динамическими ("авторизовался клиент или нет"), но это крайняя мера, пока пытаемся сделать так.

Posted
Есть клиент, на клиента выделяется, например, 3 мегабита (3 на вход, 3 на выход). У клиента может быть несколько ip адресов, нужно их все в эти 3 мбита вписать.

Можно в принципе сделать и динамическими ("авторизовался клиент или нет"), но это крайняя мера, пока пытаемся сделать так.

И что, все 12тысяч с несколькими ip ? Тогда делайте динамические трубы по определенной маске, и клиенту выдавайте подсеть.

Или у вас еще и скорости у всех уникальные ?

 

Например:

 

ipfw pipe 5 config mask dst-ip 0xfffffff0 bw 3000Kbit/s queue 100 buckets 256

ipfw table 5 add x.x.x.8/29

Posted

Ну практически у всех по нескольку адресов, + чаще всего перемешаны прямые и серые, вариант с подсетью не прокатит :(

Только там не 12, а 6 - пайпов два, один на вход, один на выход.

Posted
Ну практически у всех по нескольку адресов, + чаще всего перемешаны прямые и серые, вариант с подсетью не прокатит :(

Только там не 12, а 6 - пайпов два, один на вход, один на выход.

Предлагаю пристрелить проектировщика. :-)

Posted
Он против ;)

Кроме уменьшение количества пайпов что-нибудь можно сделать?

Ну в лоб в данной схеме вряд ли. У вас же каждый пакет проходит через кучу правил. Таблички практически не работают.

 

Я так понимаю что пакеты в трубу Вы загоняете через tablearg ? Тогда просите разработчиков, чтобы сделали mask tablearg в pipe, тогда

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

Posted

С одной стороны присоединяюсь к мнению, что спроектировано странно. ;-) С другой стороны, если все адреса загнаны в одну таблицу и выбор pipe идет через tablearg, то никакого особенно большого количества правил пакет не проходит - нечего пугаться...

Как я понял, что раз загрузка по tasq на em возрастает под нагрузкой, то поллинг в системе не используется? В общем, у себя в свое время я решил подобные проблемы отключением поллинга (которому на em действительно не место) и выставлением

sysctl net.isr.direct="0"

Появилась нагрузка по прерываниям, но суммарная по всему стала меньше и все потери и т.п. исчезли. Хотя вначале тоже на количество/качество правил для dummynet грешил...

Posted (edited)

Поллинга нет и не было.. em в семёрке вроде как сильно умное, само прерываниями рулит.

 

Skylord, а сколько примерно у вас пайпов?

Edited by inxs
Posted
Поллинга нет и не было.. em в семёрке вроде как сильно умное, само прерываниями рулит.
Ага... Вот и я когда на 7 перешел - отключил.... А до этого сильно помогало...

 

Skylord, а сколько примерно у вас пайпов?
Да у меня-то мало, ибо динамические они через mask (ИМХО, в этой функциональность и есть главная сила и бонусы dummynet по сравнению, допустим, с altq)... Просто мне по описанию проблемы она показалась на мою похожа. :-) У себя я сначала тоже думал на dummynet, на pf (машина еще выступает НАТом), пытался тюнинговать все что только можно, включая em, добился "космического совершенства" ;-) в виде оставления одного единственного правила в ipfw, которое делает шейпинг на все 20 тарифов (через пресловутый tablearg), и только накурившись в должной степени maillist'ов пришел к использованию вышеупомянутого параметра, отключающего netisr direct dispatch, который, видать, плохо дружит с dummynet'ом.... Хотя, возможно, это все мои домыслы и я придаю этому слишком большое зачение. :-)

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 и с Политикой конфиденциальности.