Перейти к содержимому
Калькуляторы

sc: скрипт для управления Linux-шейпером

Чувствую что катастрофически не хватает познаний в Линуксе :)

 

Итак

1. есть мост ipunnumbered построенный на igb, eth2 и eth3, если важно :)

2. есть третий интерфейс для его управления

3. тестовый сервер и тестовый клиент

4. есть sc и все что нужно, согласно README

 

Когда iptables -P FORWARD ACCEPT клиент отлично видит сервер, файлы качаются, пинги бегают, всё пучком.

Когда iptables -P FORWARD DROP соответственно ничего не работает

 

Делаем

0. sc.conf:

filter_method = u32

limit_method = shaping

network = 192.168.32.0/19

filter_network = 192.168.32.0/19

set_type = iphash

1. sc reset

2. sc init

3. sc add 192.168.32.1 4mibit

4. sc list

3 192.168.32.1 4mibit

Ничего не происходит.

На внутреннем интерфейсе tcpdump регистрирует эхо-запросы идущего с клиента пинга.

На внешнем тишина.

На интерфейсе сервера соответственно тоже тишина.

# lsmod

Module Size Used by

cls_flow 6450 0

xt_set 3120 0

ip_set 16778 1 xt_set

ip6_tables 9733 1 ip_set

act_police 3744 2

cls_u32 5544 6

sch_htb 11604 2

ipt_NETFLOW 16902 0

ipv6 217663 24

igb 114321 0

 

Сборка нетфлоу временно отключена.

 

Три раза прочитал с 1 по 9 страницу и с 9 по 1 обратно так и не смог понять где я неправ :(.

Так что поможите, люди добрые !!!

 

P.S. пока писал вылезло интересное чудо :) мониторится интерфейс сервера.

 

03:46:34.070819 ARP, Request who-has 192.168.32.254 tell 192.168.32.1, length 46

03:46:34.070834 ARP, Reply 192.168.32.254 is-at 00:1d:60:98:ea:e1 (oui Unknown), length 28

 

всего 1 раз но чудо есть чудо :) даже 1 раз.

 

Чувствую что истина где то рядом. Но все молчат как партизаны :)

 

Тем не менее arp пакеты погуливают... негусто но и не пусто :)

 

Изменено пользователем chixpyx

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Надо создать аккаунт прежде всего для IP-адреса шейпера. iptables при использовании u32 не нужен, т.к. IP-трафик блокируется с помощью правил tc. Модули Netfilter лучше на шейпере не загружать, чтобы не тратилось процессорное время.

Изменено пользователем photon

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Надо создать аккаунт прежде всего для IP-адреса шейпера. iptables при использовании u32 не нужен, т.к. IP-трафик блокируется с помощью правил tc. Модули Netfilter лучше на шейпере не загружать, чтобы не тратилось процессорное время.

А с какой целью создаётся аккаунт самого шейпера ? мне совершенно не нужно, чтобы шейпер ходил в интернет, а из management-сети он более чем замечательно виден.

Да и вообще не совсем понятно, можно же вообще не иметь IP адреса ни одного на самом шейпере, а управлять им через ком порт например.

Или вообще руками с консоли.

 

Или же имеется ввиду "нужно создать аккаунт для IP адреса, назначенному интерфейсу br0", ну тогда наверное стоит начать с того что IP адрес там должен быть.

В настоящую минуту интерфейс br0 всего лишь UP и его компоненты, eth2 и eth3 тоже UP. Не более того.

Собственно без участия u32 данная конструкция совершенно изумительно работает как ethernet-коммутатор с двумя портами.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Данный вопрос снят

 

Никто об этом не сказал но tc в общем случае выступает в роли регулятор-только.

Все что не запрещено то разрешено.

 

Именно поэтому ему жизненно нужно чтобы iptables -P FORWARD ACCEPT

 

осталось разобраться, чем же открывать и закрывать калитку....

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я не понял, какой результат вам надо получить. Зачем по умолчанию разрешать доступ всем IP-адресам? В sc блокируются все IP, которых нет в базе. Без iptables, только средствами tc. Таблица разрешенных IP-адресов и скоростей должна периодически синхронизироваться с базой данных биллинга.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я не понял, какой результат вам надо получить. Зачем по умолчанию разрешать доступ всем IP-адресам? В sc блокируются все IP, которых нет в базе. Без iptables, только средствами tc. Таблица разрешенных IP-адресов и скоростей должна периодически синхронизироваться с базой данных биллинга.

Именно потому что ничего не выходит с sc я и начал эту полемику.

При POLICY FORWARD DROP вообще ничего не работает.

При POLICY FORWARD ACCEPT те, кого добавили, шейпятся, остальные работают на полной скорости.

И является ли использование БД жизненной необходимостью ? просто ADD ip speed и DEL не спасает ?

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Странно, а после sc init все ходят на полной скорости? Там же в конце инициализации создается правило, запрещающее ходить любому неклассифицированному исходящему IP-трафику: tc filter add dev ethX parent 1:0 protocol ip pref 30 u32 match 0 0 at 0 police mtu 1 action drop

 

Если трафик не попадает в какой-либо класс, то он матчится этим правилом. Нужно знать, на каких интерфейсах вы создаете правила, т.е. видеть полностью файл sc.conf.

Изменено пользователем photon

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Надо создать аккаунт прежде всего для IP-адреса шейпера. iptables при использовании u32 не нужен, т.к. IP-трафик блокируется с помощью правил tc. Модули Netfilter лучше на шейпере не загружать, чтобы не тратилось процессорное время.
А с какой целью создаётся аккаунт самого шейпера ? мне совершенно не нужно, чтобы шейпер ходил в интернет, а из management-сети он более чем замечательно виден.

Да и вообще не совсем понятно, можно же вообще не иметь IP адреса ни одного на самом шейпере, а управлять им через ком порт например.

Или вообще руками с консоли.

+1 Зачем шейпирующему мосту IP и IP какого интерфейса ему нужен?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

+1 Зачем шейпирующему мосту IP и IP какого интерфейса ему нужен?

Странный вопрос. IP-адрес у bridge-интерфейса нужен для мониторинга и удаленного управления по SSH.

Изменено пользователем photon

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

:) я интересовался в контексте:

Надо создать аккаунт прежде всего для IP-адреса шейпера.
Но уже понял, что речь шла исключительно о доступе снаружи.
Поддержку ceil достаточно легко сделать с помощью некоторого глобального коэффициента, на который домножаются rate...
Попробовал строки с my $ceil = $rate; заменить на my $ceil = $crate и объявить $crate в разделе "Configurable psrsmeters"

Получил class htb 1:75 root leaf 75: prio 0 qantum 1500 rate $rate ceil $ceil, однако не плавает :(

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Попробовал строки с my $ceil = $rate; заменить на my $ceil = $crate и объявить $crate в разделе "Configurable psrsmeters"

Получил class htb 1:75 root leaf 75: prio 0 qantum 1500 rate $rate ceil $ceil, однако не плавает :(

Не знаю, может быть для этого надо явно указать rate у корневого класса. Посмотрите в мануалах по HTB.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Не знаю, может быть для этого надо явно указать rate у корневого класса. Посмотрите в мануалах по HTB.
Точно так, но сначала его создать надо. Итого:

 

В sc сразу после всех строк (их всего две в коде - для flow и u32)

$TC->("qdisc add dev $dev root handle 1: htb");

добавляем

my $grate = 'значениеKibit';

$TC->("class replace dev $dev parent 1: classid 1:1 htb rate $grate");

а в

$TC->("class replace dev $dev parent 1: classid 1:$cid htb rate $rate ceil $ceil quantum $quantum");

меняем родителя тоже в двух местах на

parent 1:1

затем строки с

my $ceil = $rate;

заменить на

my $ceil = $crate;

и объявить

$crate в разделе "Configurable parameters"

 

Усе, теперь имеем динамическую полосу (на u32 погонял - работает). Можно украшательством заняться ;)

 

ps: $grate общая ширина канала

Изменено пользователем technolab

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Список сетей по каждому направлению записывается в файл.

 

например localnets

192.168.0.0/16
224.0.0.0/4

 

 

Суть сводится к созданию пары IFB интерфейсов на каждое направление, один на вход, другой на выход. А имея пару интерфейсов, заставить sc шейпить уже дело техники.

 

 

#!/bin/sh
TC="/sbin/tc"
ETH_OUT="eth0"
src="src"
dst="dst"

modprobe ifb numifbs=9
ifconfig ifb0 up

#ZSTTK
ifconfig ifb1 up
ifconfig ifb2 up

#TOMLINE
ifconfig ifb3 up
ifconfig ifb4 up

#LOCALNETS
ifconfig ifb5 up
ifconfig ifb6 up

#WORLD
ifconfig ifb7 up
ifconfig ifb8 up

#####
####
##


echo Init ingress interface ifb0
$TC qdisc del dev $ETH_OUT ingress
$TC qdisc add dev $ETH_OUT ingress

echo Init base interface Qdisc
$TC qdisc del dev $ETH_OUT root
$TC qdisc add dev $ETH_OUT root handle 1: htb

echo Init redirert zsttknets to ifb1 ifb2
cat /root/zsttknets |
while read net
do
$TC filter add dev $ETH_OUT parent 1: protocol ip prio 1 u32 \
     match ip $src $net flowid 1:1 \
     action mirred egress redirect dev ifb1

$TC filter add dev $ETH_OUT parent ffff: protocol ip prio 1 u32 \
    match ip $dst $net flowid 1:1 \
     action mirred egress redirect dev ifb2
done

echo Init redirert tomsknets to ifb3 ifb4
cat /root/tomsknets |
while read net
do
$TC filter add dev $ETH_OUT parent 1: protocol ip prio 2 u32 \
    match ip $src $net flowid 1:1 \
     action mirred egress redirect dev ifb3

$TC filter add dev $ETH_OUT parent ffff: protocol ip prio 2 u32 \
    match ip $dst $net flowid 1:1 \
     action mirred egress redirect dev ifb4
done

echo Init redirert localnets to ifb5 ifb6
cat /root/localnets |
while read net
do
$TC filter add dev $ETH_OUT parent 1: protocol ip prio 3 u32 \
    match ip $src $net flowid 1:1 \
     action mirred egress redirect dev ifb5

$TC filter add dev $ETH_OUT parent ffff: protocol ip prio 3 u32 \
    match ip $dst $net flowid 1:1 \
     action mirred egress redirect dev ifb6
done

echo Init redirert worlds to ifb7 ifb8
$TC filter add dev $ETH_OUT parent 1: protocol ip prio 4 u32 \
    match ip $src 0.0.0.0/0 flowid 1:1 \
     action mirred egress redirect dev ifb7

$TC filter add dev $ETH_OUT parent ffff: protocol ip prio 4 u32 \
    match ip $dst 0.0.0.0/0 flowid 1:1 \
     action mirred egress redirect dev ifb8

 

Может есть какие замечания?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Поставил RHEL 6 для тестов, sc к огромному сожалению из коробки не заработал

 

sc init

 

Can't locate AppConfig.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /usr/sbin/sc line 10.
BEGIN failed--compilation aborted at /usr/sbin/sc line 10.

 

В base perl-AppConfig к сожалению нет, в epel http://download.fedora.redhat.com/pub/epel/6/x86_64/ пока еще тоже, единственный выход это взять и пересобрать SRPMS пакеты из Fedora.

 

rpm -ihv http://download.fedora.redhat.com/pub/fedo...-7.fc13.src.rpm

 

Загружается http://download.fedora.redhat.com/pub/fedora/linux/releases/13/Everything/source/SRPMS/perl-AppConfig-1.66-7.fc13.src.rpm
предупреждение: /var/tmp/rpm-tmp.HabGWS: Заголовок V3 RSA/SHA256 Signature, key ID e8e40fde: NOKEY
   1:perl-AppConfig         предупреждение: пользователь mockbuild не существует - используется root
предупреждение: группа mockbuild не существует - используется root
предупреждение: пользователь mockbuild не существует - используется root
предупреждение: группа mockbuild не существует - используется root
########################################### [100%]

 

Пробуем собрать

rpmbuild -ba perl-AppConfig.spec

Ошибка: Неудовлетворенные зависимости сборки:
    perl(File::HomeDir) >= 0.61 нужен для perl-AppConfig-1.66-7.el6.noarch
    perl(Test::Pod) нужен для perl-AppConfig-1.66-7.el6.noarch

 

Устанавливаем yum install perl-Test-Pod

Loaded plugins: rhnplugin
This system is not registered with RHN.
RHN support will be disabled.
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package perl-Test-Pod.noarch 0:1.40-1.el6 set to be updated
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
Package                Arch            Version             Repository     Size
================================================================================
Installing:
perl-Test-Pod          noarch          1.40-1.el6          base           14 k

Transaction Summary
================================================================================
Install       1 Package(s)
Upgrade       0 Package(s)

Total download size: 14 k
Installed size: 15 k
Is this ok [y/N]: y
Downloading Packages:
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing     : perl-Test-Pod-1.40-1.el6.noarch                          1/1 

Installed:
  perl-Test-Pod.noarch 0:1.40-1.el6                                             

Complete!

 

perl-File-HomeDir тоже придется пересобирать из Fedora

 

rpm -ihv http://download.fedora.redhat.com/pub/fedo...-3.fc13.src.rpm

 

Загружается http://download.fedora.redhat.com/pub/fedora/linux/releases/13/Everything/source/SRPMS/perl-File-HomeDir-0.86-3.fc13.src.rpm
предупреждение: /var/tmp/rpm-tmp.4b63Rd: Заголовок V3 RSA/SHA256 Signature, key ID e8e40fde: NOKEY
   1:perl-File-HomeDir      предупреждение: пользователь mockbuild не существует - используется root
предупреждение: группа mockbuild не существует - используется root
предупреждение: пользователь mockbuild не существует - используется root
предупреждение: группа mockbuild не существует - используется root
########################################### [100%]

 

правим perl-File-HomeDir.spec т к там есть ненужная зависимость от perl(Test::MinimumVersion) из за которой этих пакетов еще нет в EPEL :) :) :)

 

Вместо

BuildRequires:  perl(Test::Pod), perl(Test::More), perl(Test::MinimumVersion)

ставим

 
BuildRequires:  perl(Test::Pod), perl(Test::More)

 

и собираем perl-File-HomeDir

 

rpmbuild -ba perl-File-HomeDir.spec

Записан: /root/rpmbuild/SRPMS/perl-File-HomeDir-0.86-3.el6.src.rpm
Записан: /root/rpmbuild/RPMS/noarch/perl-File-HomeDir-0.86-3.el6.noarch.rpm

 

Устанавливаем его

rpm -ihv /root/rpmbuild/RPMS/noarch/perl-File-HomeDir-0.86-3.el6.noarch.rpm

Подготовка...     ########################################### [100%]
   1:perl-File-HomeDir      ########################################### [100%]

 

и собираем rpmbuild -ba perl-AppConfig.spec

пакет соберется

Установим его

rpm -ihv /root/rpmbuild/RPMS/noarch/perl-AppConfig-1.66-7.el6.noarch.rpm

 

Подготовка...     ########################################### [100%]
   1:perl-AppConfig         ########################################### [100%]

 

 

После этого sc на RHEL 6 заработает

 

P.S. написал SPEC для ipset под RHEL 6, брать здесь http://centos.alt.ru/pub/temp/Rhel6_ipset/

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

sc version

Shaper Control Tool (version 1.3.2)

License and Copyright:
    Copyright (c) 2008-2010. Stanislav Kruchinin.

    License: GNU GPL version 2 or later

    This is free software: you are free to change and redistribute it. There
    is NO WARRANTY; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR
    PURPOSE.

 

 

не смог заставить работать режим hybrid чтобы исходящая и входящая скорость резались на одном интерфейсе

eth1 интерфейс смотрящий в локальную сеть, хочу резать скорость на нем

 

eth1      Link encap:Ethernet  HWaddr 00:1A:11:8E:30:F1  
          inet addr:10.0.0.1  Bcast:10.0.0.255  Mask:255.255.255.0
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:27526 errors:0 dropped:0 overruns:0 frame:0
          TX packets:43164 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100 
          RX bytes:14206475 (13.5 MiB)  TX bytes:56147362 (53.5 MiB)
          Memory:fbfe0000-fc000000

 

Создал две записи

sc dblist

10.0.0.1         97656kibit
10.0.0.2           977kibit

 

конфиг sc

 

grep -v -E "#|^$" sc.conf

 

tc = /sbin/tc
out_if = eth1
in_if = eth1
filter_method = u32
limit_method = hybrid
debug = 1
verbose = 3
quiet = 0
colored = 1
joint = 0
network = 10.0.0.0/16
filter_network = 10.0.0.0/16
quantum = 1500
rate_unit = kibit
rate_ratio = 1.0
leaf_qdisc = 'pfifo limit 50'
db_driver = SQLite
db_host = 127.0.0.1
db_name = /etc/sc/sc.db
db_user = username
db_pass = password
query_create = "CREATE TABLE rates (ip INTEGER PRIMARY KEY, rate INTEGER NOT NULL)"
query_load = "SELECT ip,rate FROM rates"
query_list = "SELECT ip,rate FROM rates WHERE ip=?"
query_add = "INSERT OR REPLACE INTO rates VALUES (?, ?)"
query_del = "DELETE FROM rates WHERE ip=?"
query_change = "REPLACE INTO rates VALUES (?, ?)"
syslog = 0

 

соответственно sc reload ругается

sc load

 

Use of uninitialized value $policer_burst in concatenation (.) or string at /usr/sbin/sc line 960.
Illegal "buffer"
Illegal "police"
/sbin/tc filter replace dev eth1 parent ffff: pref 20 handle 100:2:800 u32 ht 100:2: match ip src 10.0.0.2 police rate 977kibit burst  drop flowid ffff:
Use of uninitialized value $policer_burst in concatenation (.) or string at /usr/sbin/sc line 960.
Illegal "buffer"
Illegal "police"
/sbin/tc filter replace dev eth1 parent ffff: pref 20 handle 100:1:800 u32 ht 100:1: match ip src 10.0.0.1 police rate 97656kibit burst  drop flowid ffff:

 

как лечить ?

Изменено пользователем _INF_

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В конфиге надо определить переменную policer_burst. На всякий случай скачайте последнюю ревизию из Mercurial-репозитория.

Изменено пользователем photon

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В конфиге надо определить переменную policer_burst. На всякий случай скачайте последнюю ревизию из Mercurial-репозитория.

Определил policer_burst = 1500Kb ошибка ушла.

Версия из Mercurial, скорость режется только входящая, если необходимы еще какие-либо дополнительные данные - предоставлю.

Изменено пользователем _INF_

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В конфиге надо определить переменную policer_burst. На всякий случай скачайте последнюю ревизию из Mercurial-репозитория.

Определил policer_burst = 1500Kb ошибка ушла.

Версия из Mercurial, скорость режется только входящая, если необходимы еще какие-либо дополнительные данные - предоставлю.

На самом деле, это только кажется, что скорость не режется. При полисинге всегда в начале передачи трафика наблюдается резкий всплеск с завышенной скоростью, который потом снижается до нужного значения. Чем больше буфер (policer_burst), тем дольше длится этот всплеск. Советую снизить policer_burst до 100Kb, т.к. значение 1500Kb рассчитано на скорости около 20 Мбит/с и выше. Если буфер слишком мал, то скорость наоборот будет недостаточной. Конечно, это плохо, что всем ставится одно и то же значение policer_burst вне зависимости от полосы, лучше сделать policer_burst функцией от полосы пропускания, но у меня сейчас нет времени ставить эксперименты и находить эту функцию.
Изменено пользователем photon

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В конфиге надо определить переменную policer_burst. На всякий случай скачайте последнюю ревизию из Mercurial-репозитория.

Определил policer_burst = 1500Kb ошибка ушла.

Версия из Mercurial, скорость режется только входящая, если необходимы еще какие-либо дополнительные данные - предоставлю.

На самом деле, это только кажется, что скорость не режется. При полисинге всегда в начале передачи трафика наблюдается резкий всплеск с завышенной скоростью, который потом снижается до нужного значения. Чем больше буфер (policer_burst), тем дольше длится этот всплеск. Советую снизить policer_burst до 100Kb, т.к. значение 1500Kb рассчитано на скорости около 20 Мбит/с и выше. Если буфер слишком мал, то скорость наоборот будет недостаточной. Конечно, это плохо, что всем ставится одно и то же значение policer_burst вне зависимости от полосы, лучше сделать policer_burst функцией от полосы пропускания, но у меня сейчас нет времени ставить эксперименты и находить эту функцию.

Огромнейшее спасибо policer_burst=100kb решило проблему. Было бы просто прекрасно если бы policer_burst был 10% от полосы пользователя, точнее 10%* (полоса пользователя)*rate_ratio.

 

 

 

Изменено пользователем _INF_

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Огромнейшее спасибо policer_burst=100kb решило проблему. Было бы просто прекрасно если бы policer_burst был 10% от полосы пользователя, точнее 10%* (полоса пользователя)*rate_ratio.

Я не думаю, что там линейная зависимость, но в качестве первого приближения это лучше, чем просто постоянная величина. Сделал исправление в версии 1.3.3. К сожалению, сейчас нет времени на глобальные изменения, вроде реализации разных схем шейпинга в виде модулей или поддержку ceil и prio.

Изменено пользователем photon

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Значит надо использовать более новую версию tc, в которой уже есть ключ -p, а не четырехлетней давности. Исходник здесь: http://devresources.linuxfoundation.org/de...oute2/download/

Или можно убрать из sc ключ -p, который выводит в фильтрах IP-адреса в десятичном формате вместо шестнадцатеричных значений.

Возникла аналогичная проблема с tc под CentOS 5. Простым убиранием ключа -p похоже не обойтись.

Пересобрать свежий iproute2 под старое ядро 2.6.18 мне кажется не реальным.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Возникла аналогичная проблема с tc под CentOS 5. Простым убиранием ключа -p похоже не обойтись.

Пересобрать свежий iproute2 под старое ядро 2.6.18 мне кажется не реальным.

Они все еще тянут 2.6.18 с миллионами патчей и бэкпортов? Какой бред. Предлагаю поставить Debian. Если это невозможно, надо переписать код, который опирается на использование этого ключа (добавить процедуру поиска IP-адреса по его hex-представлению), либо бэкпортировать ключ -p в редхатовский tc.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Подскажите пожалуйста как можно ограничить пропускную способность канала. Этот метод не заработал:

Если надо ограничить, можете в функциях rul_init_u32 и rul_init_flow после создания qdisc дописать код вида:

$TC->("class add dev $dev parent 1: classid 1:$root_cid htb rate $max_rate ceil $max_rate");

где $dev -- интерфейс, $root_cid -- номер root classid (какой-то из неиспользуемых под хосты), $max_rate -- скорость.

$root_cid указывал 0002

Трафик все равно ползет выше. В dmesg

HTB: quantum of class 10002 is big. Consider r2q change.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Это я малость ошибся. Чтобы полоса дочернего класса динамически расширялась, она должна быть унаследована от класса с более широкой полосой. Т.е. нужно дописать строку для создания корневого класса:

$TC->("class replace dev $dev parent 1: classid 1:1 htb rate $grate");

где $grate -- общая ширина полосы, а в дочерних классах выбрать его как parent

$TC->("class replace dev $dev parent 1:1 classid 1:$cid htb rate $rate ceil $ceil quantum $quantum");

 

Посмотрите пример из недавнего сообщения: http://forum.nag.ru/forum/index.php?showtopic=48301&view=findpost&p=587517

Изменено пользователем photon

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Это я малость ошибся. Чтобы полоса дочернего класса динамически расширялась, она должна быть унаследована от класса с более широкой полосой. Т.е. нужно дописать строку для создания корневого класса:

$TC->("class replace dev $dev parent 1: classid 1:1 htb rate $grate");

где $grate -- общая ширина полосы, а в дочерних классах выбрать его как parent

$TC->("class replace dev $dev parent 1:1 classid 1:$cid htb rate $rate ceil $ceil quantum $quantum");

 

Посмотрите пример из недавнего сообщения: http://forum.nag.ru/forum/index.php?showtopic=48301&view=findpost&p=587517

 

 

Все сделал. В итоге вижу:

class htb 1:1 root rate 245760Kbit ceil 245760Kbit burst 1566b/8 mpu 0b overhead 0b cburst 1566b/8 mpu 0b overhead 0b level 7
Sent 47509049778 bytes 60644002 pkt (dropped 0, overlimits 0 requeues 0)
rate 248751Kbit 40431pps backlog 0b 0p requeues 0
lended: 0 borrowed: 0 giants: 0
tokens: -4371032 ctokens: -4371032

 

Полоса у меня в 250 мегабит.

В dmesg:

 HTB: quantum of class 10001 is big. Consider r2q change.

 

Может быть сделать увеличение quantum до 60000 ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.