photon Опубликовано 11 февраля, 2014 · Жалоба Если через них ходит нетегированный трафик, то будет работать и так. Если тегированный, то нужно увеличить смещения для хэш-фильтров: @@ -1092,8 +1093,8 @@ sub shaper_init { - shaper_dev_init($i_if, 'dst', 16) if $i_if_enabled; - shaper_dev_init($o_if, 'src', 12) if $o_if_enabled; + shaper_dev_init($i_if, 'dst', 20) if $i_if_enabled; + shaper_dev_init($o_if, 'src', 16) if $o_if_enabled; return $?; } Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
kayot Опубликовано 11 февраля, 2014 · Жалоба photon Не, не нужно ничего смещать. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
engdev Опубликовано 28 февраля, 2014 · Жалоба Коллеги, кто использует у себя использует sc с несколькими ip адресами в одном классе, можете поделится патчем или готовым скриптом? К сожалению патч от Петрович-2012 от старой версии, и те функции что он патчит, уже в новой версии нет, и не понятно как исправить. Встроенную бд не использую, мне подойдет любое рабочее решение, с любыми костылями, но очень нужно резать скорость для нескольких ip. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
photon Опубликовано 1 марта, 2014 · Жалоба Я могу сделать такое решение, адаптированное под ваш биллинг. Обращайтесь в личку. Поскольку между IP-адресами и классами не будет взаимооднозначного соответствия, номера классов (id пользователя) должны храниться в базе. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
micol Опубликовано 4 марта, 2014 · Жалоба sc: network xxx.xxx.xxx.xxx/xx overfulls classid space at ./sc line 636 main::log_croak('network 10.212.96.0/24 overfulls classid space') called at ./sc line 827 main::set_class_nets() called at ./sc line 399 main::main('list') called at ./sc line 373 я полагаю мне не судьба посмотреть и воспользоваться в том виде в каком оно есть? имеются подсети вида 10.aaa.bbb.0/24, 10.ccc.ddd.0/24 и 10.eee.fff.0/24. Суммарно то абонентов на шейпер не превысит максимальное количество в 65534, однако, просуммировав подсети получаем их в количестве 363 штуки, что выливается в 92565 адреса. Overfull :( Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
photon Опубликовано 4 марта, 2014 · Жалоба Да, нужно размещать пользователей по подсетям более компактно. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
micol Опубликовано 4 марта, 2014 · Жалоба Да, нужно размещать пользователей по подсетям более компактно. Эх, как говорят тут так исторически сложилось( Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
photon Опубликовано 4 марта, 2014 · Жалоба Нужно хранить в базе номера классов, чтобы не вычислять их из IP-адресов. Это позволит обойти данное ограничение. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
micol Опубликовано 4 марта, 2014 · Жалоба Нужно хранить в базе номера классов, чтобы не вычислять их из IP-адресов. Это позволит обойти данное ограничение. Спасибо, попробую на днях Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Dyr Опубликовано 19 марта, 2014 (изменено) · Жалоба В sc 1.5 с perl 5.14.2 в Ubuntu 13.10 ошибка в syslog facility и severity - вместо переменных "LOG_USER" и "LOG_WARNING" используются "user" и "warn", соответственно. Это вызывает ошибку при попытке использования syslog=1: syslog: invalid level/facility: warn at /usr/local/sbin/sc line 613 И вообще он что-то криво работает под свежей убунтой, сижу, разбираюсь - sc list, например, ничего не показывает, хотя какие-то правила есть. Изменено 19 марта, 2014 пользователем Dyr Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Dyr Опубликовано 19 марта, 2014 · Жалоба Или вот просто sc reset: # sc -d 2 reset verbose = 1 /sbin/tc qdisc del dev eth0.199 handle ffff: ingress /sbin/tc qdisc del dev eth0.199 root handle 1: htb # /sbin/tc qdisc del dev eth0.199 handle ffff: ingress RTNETLINK answers: Invalid argument # /sbin/tc qdisc del dev eth0.199 root handle 1: htb RTNETLINK answers: Invalid argument # /sbin/tc qdisc show dev eth0.199 # /sbin/tc qdisc show dev eth0.504 # /sbin/tc qdisc show dev eth0 qdisc pfifo_fast 0: root refcnt 2 bands 3 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1 # Так и должно быть? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
photon Опубликовано 20 марта, 2014 (изменено) · Жалоба В версии 1.5 немного поменялся конфиг. Нужно убедиться, что все совместимо. Я не гарантирую работоспособности на vlan-интерфейсах, потому что не тестирую скрипт в такой конфигурации. Межвлановую маршрутизацию нужно делать на другом оборудовании, а не вместе с per-user QoS. Изменено 20 марта, 2014 пользователем photon Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Dyr Опубликовано 20 марта, 2014 (изменено) · Жалоба С 1.3.4 оказалось не совместимо, да. И вообще оно настолько странно работает, что я уже опасаюсь её крутить на реальной машине, в виртуалку перешёл. Вот старый конфиг: tc = /sbin/tc iptables = /sbin/iptables ipset = /usr/sbin/ipset out_if = ifb0 in_if = eth0.199 filter_method = u32 limit_method = hybrid debug = 1 verbose = 1 quiet = 0 colored = 1 joint = 0 network = 10.1.63.0/24 10.1.64.0/18 10.1.129.0/24 filter_network = 10.1.63.0/24 10.1.64.0/18 10.1.129.0/24 policer_burst_ratio = 0.1 quantum = 1500 rate_unit = kibit rate_ratio = 1.0 leaf_qdisc = 'pfifo limit 50' db_driver = mysql db_host = 127.0.0.1 db_name = nat db_user = gate db_pass = JMKSsFTD6 query_create = "select 1" query_load = "SELECT inet_aton(ip) as ip, rate FROM shapers where rate>0" query_list = "SELECT inet_aton(ip) as ip, rate FROM shapers where rate>0" query_add = "select 1" query_del = "select 1" query_change = "select 1" syslog = 0 Новый конфиг: tc = /sbin/tc out_if = eth0.504 in_if = eth0.199 limit_method = hybrid debug = 1 verbose = 1 quiet = 0 colored = 1 joint = 0 network = 10.1.63.0/24 10.1.64.0/18 10.1.129.0/24 filter_network = $network policer_burst_ratio = 0.1 quantum = 1500 rate_unit = kibit rate_ratio = 1.0 leaf_qdisc = 'pfifo limit 50' db_driver = mysql db_host = 127.0.0.1 db_name = nat db_user = gate db_pass = JMKSsFTD6 query_create = "select 1" query_load = "SELECT inet_aton(ip) as ip, rate FROM shapers where rate>0" query_list = "SELECT inet_aton(ip) as ip, rate FROM shapers where rate>0" query_add = "select 1" query_del = "select 1" query_change = "select 1" syslog = 1 syslog_options = 'perror' syslog_facility = LOG_DAEMON C таким новым конфигом, например, у меня перестали проходить пакеты от меня через внутренний интерфейс eth0.199. ARP ещё проходят, а вот третий уровень уже воообще нет. Изменено 20 марта, 2014 пользователем Dyr Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
photon Опубликовано 20 марта, 2014 (изменено) · Жалоба В старом конфиге было: out_if = ifb0 in_if = eth0.199 а в новом стало: out_if = eth0.504 in_if = eth0.199 Возможно, причина в этом. Проверьте через tcpdump, ходит ли через интерфейсы тегированный трафик, у которого все поля смещены на 4 байта. Изменено 20 марта, 2014 пользователем photon Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Igor Diakonov Опубликовано 1 апреля, 2014 · Жалоба C таким новым конфигом, например, у меня перестали проходить пакеты от меня через внутренний интерфейс eth0.199. ARP ещё проходят, а вот третий уровень уже воообще нет. Подозреваю что надо смотреть на SC со слов "# block all other traffic". Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
photon Опубликовано 1 апреля, 2014 (изменено) · Жалоба Подозреваю что надо смотреть на SC со слов "# block all other traffic". Если трафик не проходит через созданные для него фильтры и режется этим правилом, то он и шейпиться не будет. Нужно использовать простые конфигурации: шейпер на выделенной машине в режиме моста, без вланов. Вланы нужно маршрутизировать до шейпера на L3-коммутаторе. Изменено 1 апреля, 2014 пользователем photon Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
kayot Опубликовано 2 апреля, 2014 (изменено) · Жалоба Нужно использовать простые конфигурации: шейпер на выделенной машине в режиме моста, без вланов. Вланы нужно маршрутизировать до шейпера на L3-коммутаторе. Вовсе не обязательно. У нас tc замечательно режет трафик на qinq BRASе(на входе трафик прилетает с 2 тегами, улетает с 1). Единственное что требует правки - указывать в фильтрах protocol any(или 802.1q) вместо protocol ip как по учебнику(ибо тегированный трафик с точки зрения фильтров вовсе не IP). Ну а где в пакете начинается IP tc посчитает сам. Изменено 2 апреля, 2014 пользователем kayot Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Valaskor Опубликовано 2 апреля, 2014 · Жалоба Коллеги, а кто-нибудь раскочегарил больше 1mpps? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
photon Опубликовано 9 апреля, 2014 (изменено) · Жалоба Коллеги, а кто-нибудь раскочегарил больше 1mpps? Если поставить 10-гигабитные сетевухи, то вполне возможно. Максимум, что я видел -- до 700 kpps в пиках на спаренных гигабитных портах. Изменено 9 апреля, 2014 пользователем photon Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Briznet Опубликовано 9 апреля, 2014 · Жалоба Вовсе не обязательно. У нас tc замечательно режет трафик на qinq BRASе(на входе трафик прилетает с 2 тегами, улетает с 1). Единственное что требует правки - указывать в фильтрах protocol any(или 802.1q) вместо protocol ip как по учебнику(ибо тегированный трафик с точки зрения фильтров вовсе не IP). Ну а где в пакете начинается IP tc посчитает сам. Я так понимаю у вас стоит accel-ppp? Подскажите пожалуйста как вы организовали шейпер по классам трафика? Читал на локале и тут ваши посты, но толком ничего не понял. Можно примерную схему вашей сети и пример конфига, чтобы знать откуда плясать. Заранее огромное спасибо. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Valaskor Опубликовано 15 апреля, 2014 · Жалоба Коллеги, а кто-нибудь раскочегарил больше 1mpps? Если поставить 10-гигабитные сетевухи, то вполне возможно. Максимум, что я видел -- до 700 kpps в пиках на спаренных гигабитных портах. Меня интересует практический результат. Пока у меня получается примерно 1mpps, при загрузке ядер под 50%, но выше начинает скакать пинг и прыгать скорость. Часто появляются дропы в отдельных классах (хотя скорость много ниже шейпера), хотя у других все нормально - вот это вообще непонятная проблема. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
photon Опубликовано 16 апреля, 2014 (изменено) · Жалоба Меня интересует практический результат. Пока у меня получается примерно 1mpps, при загрузке ядер под 50%, но выше начинает скакать пинг и прыгать скорость. Часто появляются дропы в отдельных классах (хотя скорость много ниже шейпера), хотя у других все нормально - вот это вообще непонятная проблема. Так с ходу сложно сказать. Какие настройки используются для распределения нагрузки от softirq? Включен ли MSI-X? На этот счет есть противоречивые сведения: на одном железе помогает interrupt pinning и отключение msi-x, на другом -- наоборот помогает распределение по всем процессорам и включение msi-x: http://natsys-lab.blogspot.de/2012/09/linux-scaling-softirq-among-many-cpu.html . Какие размеры rx/tx rings установлены с помощью ethtool? Каков размер виртуальной очереди для отправки пакетов (параметр txqueuelen в ifconfig). Возможно, для отдельных классов, в которых появляются дропы, стоит увеличить размер очереди (параметр limit) и использовать краевую дисциплину codel. Изменено 16 апреля, 2014 пользователем photon Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
Valaskor Опубликовано 17 апреля, 2014 · Жалоба прерывания прибиты по ядрам, ixgbe в дефолте ethtool -G eth0 rx 4096 tx 4096 ethtool -K eth0 rx off tx off tso off gso off gro off txqueuelen:1000 дисциплина pfifo limit 50 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
kayot Опубликовано 17 апреля, 2014 · Жалоба дисциплина pfifo limit 50 Мало, удвойте-утройте и попробуйте. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
photon Опубликовано 17 апреля, 2014 · Жалоба txqueuelen:1000 дисциплина pfifo limit 50 txqueuelen нужно поднять до 4096, limit - минимум до 100 пакетов. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...