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

Проблема с выравниванием трафика и установкой приоритетов.. Подскажите, как разрулить?

Подрезал. На 4%, на 5% рука не поднялась - жалко байтиков, а вдруг не дропнут "сверху".. ;)

У вас всё равно будут короткие выбросы входящего трафика, нечего там жалеть, важно под дроп не попасть.

С этого запаса будет видна огромная разница в отработке приоритетов при "полке".

А это (подчеркнуто) проверенный факт, или предположение? И еще вопрос насчет значения "процентов" - что это за цифра 5% ? Что-то экспериментально подобранное, или поддаётся вычислению? И как это значение соотносится к ширине полосы? Например, со следующего года собираемся прикупить 8М, так эти 5% оставлять, или потребуется корректировка?

 

P.S. Кстати "под полку" уже стоим довольно часто и долго (ну как обычно в ЧНН). Вот картинка на сейчас

   Втр Дек  9 21:00:01 2008

        Mode: HTB        ^C to QUIT


1:10                 <   2976Kbit -   2976Kbit >   2933.5 kbit/s  (398pps)
    1:100                <   29760bit -   2976Kbit >      0.0 kbit/s  (  0pps)
    1:15                 <   1488Kbit -   2976Kbit >    886.1 kbit/s  (119pps)
    1:16                 <   1458Kbit -   2976Kbit >   2047.4 kbit/s  (279pps)
       1:16a                <   1071Kbit -   2976Kbit >   1678.0 kbit/s  (216pps)
       1:16c                <  386872bit -   2976Kbit >    408.8 kbit/s  ( 67pps)

Вроде пока приоритеты отрабатывают нормально - пробовал ставить закачку от себя (без ограничений :)), так полоса 1:15 заметно прибавила в росте, остальные соответственно "съежились".

 

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

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


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

Я пишу цифры которые у нас работали на аплинке такой ширины.

Проверьте скорость отклика/сёрфинга визуально на наивысшем приоритете с запасом и без. Вот про эту разницу я и писал.

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


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

UP-нул тему, т.к. появились неожиданные проблемы. Самая главная: потребовалось работа с vlan (до этого использовал "обычный" eth0), изменил скрипт таким образом

my $bw = 79000;

my $gw1 = "XXX.XXX.XXX.XXX";

my $gw2 = "YYY.YYY.YYY.YYY";

 

system("ip link set dev ifb1 up");

system("ifconfig ifb1 up");

 

## Redirect traffic from uplink to ifb

system("/sbin/tc qdisc del dev vlan9 ingress");

system("/sbin/tc qdisc add dev vlan9 ingress");

system("/sbin/tc filter add dev vlan9 parent ffff: protocol ip prio 10 u32 match u32 0 0 flowid 1:1 action mirred egress redirect dev ifb1");

....skip....

В итоге тут же получил kernel panic... :( Успел прочитать что-то про конфликт прерываний, долго разглядывать времени, к сожалению, не было - на рутере живет около 1500 "диких юзвергов".. Пришлось срочно отключить скрипт из запуска и ребутнуть рутер.

До этого, когда все жило на "eth0" (и паре алиасов на нем), работало вроде без особых проблем, единственно что напрягало, это ругательства вида "class 10001 to big use чего-то там про r2q" при старте скрипта. С vlan-ом почему-то пришел полный п...ц..

Вопрос риторический - кто виноват и что делать? Нагуглить не удалось ничего.. :(

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


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

Вопрос все еще актуален, а ответ до сих пор не найден.. :(

Может что-то в системе (Fedora Core 6) пропатчить, или проапгрейдить надо?

Самая большая проблема в том, что непонятно, в каком направлении копать. Что может создать конфликт по прерываниям при переходе с "чистого" ethernet на vlan?

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


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

UP-нул тему, т.к. появились неожиданные проблемы. Самая главная: потребовалось работа с vlan (до этого использовал "обычный" eth0), изменил скрипт таким образом
my $bw = 79000;

my $gw1 = "XXX.XXX.XXX.XXX";

my $gw2 = "YYY.YYY.YYY.YYY";

 

system("ip link set dev ifb1 up");

system("ifconfig ifb1 up");

 

## Redirect traffic from uplink to ifb

system("/sbin/tc qdisc del dev vlan9 ingress");

system("/sbin/tc qdisc add dev vlan9 ingress");

system("/sbin/tc filter add dev vlan9 parent ffff: protocol ip prio 10 u32 match u32 0 0 flowid 1:1 action mirred egress redirect dev ifb1");

....skip....

В итоге тут же получил kernel panic... :( Успел прочитать что-то про конфликт прерываний, долго разглядывать времени, к сожалению, не было - на рутере живет около 1500 "диких юзвергов".. Пришлось срочно отключить скрипт из запуска и ребутнуть рутер.

До этого, когда все жило на "eth0" (и паре алиасов на нем), работало вроде без особых проблем, единственно что напрягало, это ругательства вида "class 10001 to big use чего-то там про r2q" при старте скрипта. С vlan-ом почему-то пришел полный п...ц..

Вопрос риторический - кто виноват и что делать? Нагуглить не удалось ничего.. :(

По vlan, не шибко копенгаген, может это направление покажет, из руководства по tc

"Whenever the kernel needs to send a packet to an interface, it is enqueued to the qdisc configured for that interface. Immediately after-wards, the kernel tries to get as many packets as possible from the qdisc, for giving them to the network adaptor driver."

 

По поводу r2q, крайне вероятна некорректная работа шейпера, "памятка-выжимка" из одного сценария для htb:

 

# Rate to quantum

# req.: MTU < quantum < 60000

# com.: quantum = RATE / R2Q

# quantum is small if: RATE / R2Q < MTU, try --R2Q or ++RATE

# quantum is big if: RATE / R2Q > 60000, try ++R2Q or --RATE

 

Дополнение, старайтесь не использовать на таких ответственных участках тестовые и/или десктопные версии дистрибутивов, к к-рым принадлежит Fedora Core 6.

 

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


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

По vlan, не шибко копенгаген, может это направление покажет, из руководства по tc

"Whenever the kernel needs to send a packet to an interface, it is enqueued to the qdisc configured for that interface. Immediately after-wards, the kernel tries to get as many packets as possible from the qdisc, for giving them to the network adaptor driver."

Ну как бы оно действительно похоже, что что-то элементарно "захлёбывается", т.к. какое-то время скрипт все же работает (до 1 мин. даже), но почему же тогда такого не происходило на "чистом" ethernet??
По поводу r2q, крайне вероятна некорректная работа шейпера, "памятка-выжимка" из одного сценария для htb:

 

# Rate to quantum

# req.: MTU < quantum < 60000

# com.: quantum = RATE / R2Q

# quantum is small if: RATE / R2Q < MTU, try --R2Q or ++RATE

# quantum is big if: RATE / R2Q > 60000, try ++R2Q or --RATE

А это как лечить? И вообще, в каком направлении копать? С типом vlan это может быть как-то связано?
Дополнение, старайтесь не использовать на таких ответственных участках тестовые и/или десктопные версии дистрибутивов, к к-рым принадлежит Fedora Core 6.
Позволю себе отчасти не согласиться насчет "десктопной ОС". 6-я федора на нее явно не тянет, вот 8-я и все последующие, ИМХО, десктопы по жизни. :) Насчет того, что FC6 и иже с ней являются "полигоном Красной Шапочки" - это знаю, но не считаю, что это имеет решающее значение в вопросе выбора серверного дистриба. Не берусь утверждать, но считаю, что большинство НЕ_STABLE версии других ОС в какой-то степени принадлежат к тому же "полигонному" варианту, до тех пор, пока разрабы не допилят его.

 

P.S. Кстати, а какую ОС из "линейки" Linux Вы можете порекомендовать для подобной задачи - роутер/фаервол/DNS/DHCP?

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

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


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

Ну как бы оно действительно похоже, что что-то элементарно "захлёбывается", т.к. какое-то время скрипт все же работает (до 1 мин. даже), но почему же тогда такого не происходило на "чистом" ethernet??
...
А это как лечить? И вообще, в каком направлении копать? С типом vlan это может быть как-то связано?
htb - домашняя страница, быстро - дальше смотрите пример шейпера версия: "дачный x.y" для (2.4.37.7 + esfq + imq patch, iptables 1.4.3.2 + imq ), насколько помню с vlan`ом не связано

 

rc.shaper.conf:

# Devices & params

SH1_IMQ_IN="imq0"
SH1_IMQ_OUT="imq1"

SH1_IFS_IN="eth0"
SH1_IFS_OUT="eth0"

SH2_IMQ_IN="imq2"
SH2_IMQ_OUT="imq3"

SH2_IFS_IN="eth1"
SH2_IFS_OUT="eth1"

# Ports for manage(middle), tcp only
# for tcp: if pak len <=64 put in high queue prio, all other tcp put in low
# all other proto in high
SH1_CTRL="22"
SH1_COMM="110 995 3373 5190"
SH1_SURF="80 443 3128 8080"
SH1_OUT_DISCIPLINE="esfq limit 128 depth 128 hash dst perturb 5"
SH1_IN_DISCIPLINE="esfq limit 128 depth 128 hash dst perturb 5"

SH2_CTRL="22"
SH2_COMM="110 995 3373 5190"
SH2_SURF="80 443 3128 8080"
#SH2_OUT_DISCIPLINE="sfq perturb 5"
#SH2_IN_DISCIPLINE="sfq perturb 5"

SH2_OUT_DISCIPLINE="esfq limit 128 depth 128 hash dst perturb 5"
SH2_IN_DISCIPLINE="esfq limit 128 depth 128 hash src perturb 5"

# Rate to quantum
# req.: MTU < quantum < 60000
# com.: quantum = RATE / R2Q
# quantum is small if: RATE / R2Q < MTU, try --R2Q or ++RATE
# quantum is big if: RATE / R2Q > 60000, try ++R2Q or --RATE

SH1_R2Q="r2q 25"
SH1_RATEUP="24576"
SH1_RATEDN="24576"

SH1_RATE_OUT0=256
SH1_RATE_OUT1=256
SH1_RATE_OUT2=5120
SH1_RATE_OUT3=1024
SH1_RATE_OUT4=$[$SH1_RATEUP - $SH1_RATE_OUT0 - $SH1_RATE_OUT1 - $SH1_RATE_OUT2 - $SH1_RATE_OUT3]

SH1_RATE_IN0=256
SH1_RATE_IN1=256
SH1_RATE_IN2=5120
SH1_RATE_IN3=1024
SH1_RATE_IN4=$[$SH1_RATEDN - $SH1_RATE_IN0 - $SH1_RATE_IN1 - $SH1_RATE_IN2 - $SH1_RATE_IN3]

SH2_R2Q="r2q 3"
SH2_RATEUP="3560"
SH2_RATEDN="3560"

SH2_RATE_OUT0=256
SH2_RATE_OUT1=512
SH2_RATE_OUT2=1024
SH2_RATE_OUT3=1024
SH2_RATE_OUT4=$[$SH2_RATEUP - $SH2_RATE_OUT0 - $SH2_RATE_OUT1 - $SH2_RATE_OUT2 - $SH2_RATE_OUT3]

SH2_RATE_IN0=256
SH2_RATE_IN1=512
SH2_RATE_IN2=1024
SH2_RATE_IN3=1024
SH2_RATE_IN4=$[$SH2_RATEDN - $SH2_RATE_IN0 - $SH2_RATE_IN1 - $SH2_RATE_IN2 - $SH2_RATE_IN3]

 

rc.shaper:

#!/bin/bash

#. /etc/rc.d/rc.fw.conf
. /etc/rc.d/rc.shaper.conf

IPT=/usr/sbin/iptables

#LBL_VIP=20
#LBL_CTL=21
#LBL_STD=22
#LBL_AVG=23
#LBL_OTH=80
#LBL_LOW=26

LBL_VIP=10
LBL_CTL=20
LBL_STD=30
LBL_AVG=40
LBL_OTH=50
LBL_LOW=60
LBL_DEF=70

shaper_status() {

echo "======================================[QDISC]==============================
========"
tc -s qdisc show dev $SH1_IMQ_IN
tc -s qdisc show dev $SH1_IMQ_OUT

tc -s qdisc show dev $SH2_IMQ_IN
tc -s qdisc show dev $SH2_IMQ_OUT

echo "======================================[CLASS]==============================
========"

echo "SHAPER 1 IN   >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
tc -s class show dev $SH1_IMQ_IN
echo "SHAPER 1 OUT  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
tc -s class show dev $SH1_IMQ_OUT

echo "SHAPER 2 IN   >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
tc -s class show dev $SH2_IMQ_IN
echo "SHAPER 2 OUT  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
tc -s class show dev $SH2_IMQ_OUT


echo "=====================================[FILTER]==============================
======="

echo "SHAPER 1 IN  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
tc -s filter show dev $SH1_IMQ_IN
echo "SHAPER 1 OUT >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
tc -s filter show dev $SH1_IMQ_OUT

echo "SHAPER 2 IN  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
tc -s filter show dev $SH2_IMQ_IN
echo "SHAPER 2 OUT >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
tc -s filter show dev $SH2_IMQ_OUT

echo "======================================[RULES]==============================
========"
$IPT -t mangle -L SHAPER1-IN -v -x -n 2> /dev/null
$IPT -t mangle -L SHAPER1-OUT -v -x -n 2> /dev/null

$IPT -t mangle -L SHAPER2-IN -v -x -n 2> /dev/null
$IPT -t mangle -L SHAPER2-OUT -v -x -n 2> /dev/null
}

shaper_stop() {

tc qdisc del dev $SH1_IMQ_IN root 2> /dev/null > /dev/null
tc qdisc del dev $SH1_IMQ_OUT root 2> /dev/null > /dev/null

tc qdisc del dev $SH2_IMQ_IN root 2> /dev/null > /dev/null
tc qdisc del dev $SH2_IMQ_OUT root 2> /dev/null > /dev/null

$IPT -t mangle -D PREROUTING -i $SH1_IFS_IN -j IMQ --todev 0 2> /dev/null > /dev/null
$IPT -t mangle -D PREROUTING -i $SH2_IFS_IN -j IMQ --todev 2 2> /dev/null > /dev/null

$IPT -t mangle -F SHAPER1-IN 2> /dev/null > /dev/null
$IPT -t mangle -X SHAPER1-IN 2> /dev/null > /dev/null

$IPT -t mangle -F SHAPER2-IN 2> /dev/null > /dev/null
$IPT -t mangle -X SHAPER2-IN 2> /dev/null > /dev/null


$IPT -t mangle -D POSTROUTING -o $SH1_IFS_OUT -j IMQ --todev 1 2> /dev/null > /dev/null
$IPT -t mangle -D POSTROUTING -o $SH2_IFS_OUT -j IMQ --todev 3 2> /dev/null > /dev/null

$IPT -t mangle -F SHAPER1-OUT 2> /dev/null > /dev/null
$IPT -t mangle -X SHAPER1-OUT 2> /dev/null > /dev/null

$IPT -t mangle -F SHAPER2-OUT 2> /dev/null > /dev/null
$IPT -t mangle -X SHAPER2-OUT 2> /dev/null > /dev/null

ip link set $SH1_IMQ_IN down 2> /dev/null > /dev/null
ip link set $SH1_IMQ_OUT down 2> /dev/null > /dev/null

ip link set $SH2_IMQ_IN down 2> /dev/null > /dev/null
ip link set $SH2_IMQ_OUT down 2> /dev/null > /dev/null

rmmod imq 2> /dev/null > /dev/null
}

shaper_halt() {
shaper_stop
}

shaper1_outstart() {

ip link set $SH1_IMQ_OUT up
tc qdisc add dev $SH1_IMQ_OUT handle 1: root htb default $LBL_DEF $SH1_R2Q
tc class add dev $SH1_IMQ_OUT parent 1: classid 1:1 htb rate ${SH1_RATEUP}kbit ceil ${SH1_RATEUP}kbit


tc class add dev $SH1_IMQ_OUT parent 1:1 classid 1:$LBL_VIP htb rate ${SH1_RATE_OUT0}kbit ceil ${SH1_RATE_OUT0}kbit prio 0
tc class add dev $SH1_IMQ_OUT parent 1:1 classid 1:$LBL_CTL htb rate ${SH1_RATE_OUT1}kbit ceil ${SH1_RATE_OUT1}kbit prio 1
tc class add dev $SH1_IMQ_OUT parent 1:1 classid 1:$LBL_STD htb rate ${SH1_RATE_OUT2}kbit ceil ${SH1_RATEUP}kbit prio 2
tc class add dev $SH1_IMQ_OUT parent 1:1 classid 1:$LBL_AVG htb rate ${SH1_RATE_OUT3}kbit ceil ${SH1_RATEUP}kbit prio 3
tc class add dev $SH1_IMQ_OUT parent 1:1 classid 1:$LBL_DEF htb rate ${SH1_RATE_OUT4}kbit ceil ${SH1_RATEUP}kbit prio 6


tc qdisc add dev $SH1_IMQ_OUT parent 1:$LBL_VIP handle $LBL_VIP: $SH1_OUT_DISCIPLINE
tc qdisc add dev $SH1_IMQ_OUT parent 1:$LBL_CTL handle $LBL_CTL: $SH1_OUT_DISCIPLINE
tc qdisc add dev $SH1_IMQ_OUT parent 1:$LBL_STD handle $LBL_STD: $SH1_OUT_DISCIPLINE
tc qdisc add dev $SH1_IMQ_OUT parent 1:$LBL_AVG handle $LBL_AVG: $SH1_OUT_DISCIPLINE
tc qdisc add dev $SH1_IMQ_OUT parent 1:$LBL_DEF handle $LBL_DEF: $SH1_OUT_DISCIPLINE


tc filter add dev $SH1_IMQ_OUT parent 1:0 prio 0 protocol ip handle $LBL_VIP fw flowid 1:$LBL_VIP
tc filter add dev $SH1_IMQ_OUT parent 1:0 prio 1 protocol ip handle $LBL_CTL fw flowid 1:$LBL_CTL
tc filter add dev $SH1_IMQ_OUT parent 1:0 prio 2 protocol ip handle $LBL_STD fw flowid 1:$LBL_STD
tc filter add dev $SH1_IMQ_OUT parent 1:0 prio 3 protocol ip handle $LBL_AVG fw flowid 1:$LBL_AVG
tc filter add dev $SH1_IMQ_OUT parent 1:0 prio 6 protocol ip handle $LBL_DEF fw flowid 1:$LBL_DEF


$IPT -t mangle -N SHAPER1-OUT
$IPT -t mangle -A POSTROUTING -o $SH1_IFS_OUT -j SHAPER1-OUT


$IPT -t mangle -A SHAPER1-OUT -p icmp -j MARK --set-mark $LBL_VIP
$IPT -t mangle -A SHAPER1-OUT -p tcp -m length --length :64 -j MARK --set-mark $LBL_VIP

for ctrl_out in $SH1_CTRL
do
$IPT -t mangle -A SHAPER1-OUT -p tcp --dport $ctrl_out -j MARK --set-mark $LBL_CTL
$IPT -t mangle -A SHAPER1-OUT -p tcp --sport $ctrl_out -j MARK --set-mark $LBL_CTL
done

for comm_out in $SH1_COMM
do
$IPT -t mangle -A SHAPER1-OUT -p tcp --dport $comm_out -j MARK --set-mark $LBL_STD
$IPT -t mangle -A SHAPER1-OUT -p tcp --sport $comm_out -j MARK --set-mark $LBL_STD
done

for surf_out in $SH1_SURF
do
$IPT -t mangle -A SHAPER1-OUT -p tcp --dport $surf_out -j MARK --set-mark $LBL_AVG
$IPT -t mangle -A SHAPER1-OUT -p tcp --sport $surf_out -j MARK --set-mark $LBL_AVG
done

$IPT -t mangle -A SHAPER1-OUT -m mark --mark 0 -j MARK --set-mark $LBL_DEF
$IPT -t mangle -A SHAPER1-OUT -j IMQ --todev 1

####################################################
echo "Outbound shaping added($SH1_IMQ_OUT), rate: ${SH1_RATEUP}Kbit/sec."
echo "Default rate: ${SH1_RATE_OUT4}Kbit/sec."
}

shaper1_instart() {

ip link set $SH1_IMQ_IN up
tc qdisc add dev $SH1_IMQ_IN handle 1: root htb default $LBL_DEF $SH1_R2Q
tc class add dev $SH1_IMQ_IN parent 1: classid 1:1 htb rate ${SH1_RATEDN}kbit ceil ${SH1_RATEDN}kbit


tc class add dev $SH1_IMQ_IN parent 1:1 classid 1:$LBL_VIP htb rate ${SH1_RATE_IN0}kbit ceil ${SH1_RATE_IN0}kbit prio 0
tc class add dev $SH1_IMQ_IN parent 1:1 classid 1:$LBL_CTL htb rate ${SH1_RATE_IN1}kbit ceil ${SH1_RATE_IN1}kbit prio 1
tc class add dev $SH1_IMQ_IN parent 1:1 classid 1:$LBL_STD htb rate ${SH1_RATE_IN2}kbit ceil ${SH1_RATEDN}kbit prio 2
tc class add dev $SH1_IMQ_IN parent 1:1 classid 1:$LBL_AVG htb rate ${SH1_RATE_IN3}kbit ceil ${SH1_RATEDN}kbit prio 3
tc class add dev $SH1_IMQ_IN parent 1:1 classid 1:$LBL_DEF htb rate ${SH1_RATE_IN4}kbit ceil ${SH1_RATEDN}kbit prio 6


tc qdisc add dev $SH1_IMQ_IN parent 1:$LBL_VIP handle $LBL_VIP: $SH1_IN_DISCIPLINE
tc qdisc add dev $SH1_IMQ_IN parent 1:$LBL_CTL handle $LBL_CTL: $SH1_IN_DISCIPLINE
tc qdisc add dev $SH1_IMQ_IN parent 1:$LBL_STD handle $LBL_STD: $SH1_IN_DISCIPLINE
tc qdisc add dev $SH1_IMQ_IN parent 1:$LBL_AVG handle $LBL_AVG: $SH1_IN_DISCIPLINE
tc qdisc add dev $SH1_IMQ_IN parent 1:$LBL_DEF handle $LBL_DEF: $SH1_IN_DISCIPLINE


tc filter add dev $SH1_IMQ_IN parent 1:0 protocol ip prio 0 handle $LBL_VIP fw flowid 1:$LBL_VIP
tc filter add dev $SH1_IMQ_IN parent 1:0 protocol ip prio 1 handle $LBL_CTL fw flowid 1:$LBL_CTL
tc filter add dev $SH1_IMQ_IN parent 1:0 protocol ip prio 2 handle $LBL_STD fw flowid 1:$LBL_STD
tc filter add dev $SH1_IMQ_IN parent 1:0 protocol ip prio 3 handle $LBL_AVG fw flowid 1:$LBL_AVG
tc filter add dev $SH1_IMQ_IN parent 1:0 protocol ip prio 6 handle $LBL_DEF fw flowid 1:$LBL_DEF


$IPT -t mangle -N SHAPER1-IN
$IPT -t mangle -A PREROUTING -i $SH1_IFS_IN -j SHAPER1-IN


$IPT -t mangle -A SHAPER1-IN -p icmp -j MARK --set-mark $LBL_VIP
$IPT -t mangle -A SHAPER1-IN -p tcp -m length --length :64 -j MARK --set-mark $LBL_VIP

for ctrl_in in $SH1_CTRL
do
$IPT -t mangle -A SHAPER1-IN -p tcp --dport $ctrl_in -j MARK --set-mark $LBL_CTL
$IPT -t mangle -A SHAPER1-IN -p tcp --sport $ctrl_in -j MARK --set-mark $LBL_CTL
done

for comm_in in $SH1_COMM
do
$IPT -t mangle -A SHAPER1-IN -p tcp --dport $comm_in -j MARK --set-mark $LBL_STD
$IPT -t mangle -A SHAPER1-IN -p tcp --sport $comm_in -j MARK --set-mark $LBL_STD
done

for surf_in in $SH1_SURF
do
$IPT -t mangle -A SHAPER1-IN -p tcp --dport $surf_in -j MARK --set-mark $LBL_AVG
$IPT -t mangle -A SHAPER1-IN -p tcp --sport $surf_in -j MARK --set-mark $LBL_AVG
done

$IPT -t mangle -A SHAPER1-IN -m mark --mark 0 -j MARK --set-mark $LBL_DEF
$IPT -t mangle -A SHAPER1-IN -j IMQ --todev 0

####################################################
echo "Inbound shaping added($SH1_IMQ_IN), rate: ${SH1_RATEDN}Kbit/sec."
echo "Default rate: ${SH1_RATE_IN4}Kbit/sec."
}

shaper2_outstart() {

ip link set $SH2_IMQ_OUT up
tc qdisc add dev $SH2_IMQ_OUT handle 1: root htb default $LBL_DEF $SH2_R2Q
tc class add dev $SH2_IMQ_OUT parent 1: classid 1:1 htb rate ${SH2_RATEUP}kbit ceil ${SH2_RATEUP}kbit


tc class add dev $SH2_IMQ_OUT parent 1:1 classid 1:$LBL_VIP htb rate ${SH2_RATE_OUT0}kbit ceil ${SH2_RATE_OUT0}kbit prio 0
tc class add dev $SH2_IMQ_OUT parent 1:1 classid 1:$LBL_CTL htb rate ${SH2_RATE_OUT1}kbit ceil ${SH2_RATE_OUT1}kbit prio 1
tc class add dev $SH2_IMQ_OUT parent 1:1 classid 1:$LBL_STD htb rate ${SH2_RATE_OUT2}kbit ceil ${SH2_RATEUP}kbit prio 2
tc class add dev $SH2_IMQ_OUT parent 1:1 classid 1:$LBL_AVG htb rate ${SH2_RATE_OUT3}kbit ceil ${SH2_RATEUP}kbit prio 3
tc class add dev $SH2_IMQ_OUT parent 1:1 classid 1:$LBL_DEF htb rate ${SH2_RATE_OUT4}kbit ceil ${SH2_RATEUP}kbit prio 6


tc qdisc add dev $SH2_IMQ_OUT parent 1:$LBL_VIP handle $LBL_VIP: $SH2_OUT_DISCIPLINE
tc qdisc add dev $SH2_IMQ_OUT parent 1:$LBL_CTL handle $LBL_CTL: $SH2_OUT_DISCIPLINE
#tc qdisc add dev $SH2_IMQ_OUT parent 1:$LBL_STD handle $LBL_STD: tbf rate ${SH2_RATE_OUT2}kbit burst 1500
tc qdisc add dev $SH2_IMQ_OUT parent 1:$LBL_STD handle $LBL_STD: $SH2_OUT_DISCIPLINE
tc qdisc add dev $SH2_IMQ_OUT parent 1:$LBL_AVG handle $LBL_AVG: $SH2_OUT_DISCIPLINE
tc qdisc add dev $SH2_IMQ_OUT parent 1:$LBL_DEF handle $LBL_DEF: $SH2_OUT_DISCIPLINE


tc filter add dev $SH2_IMQ_OUT parent 1:0 protocol ip prio 0 handle $LBL_VIP fw flowid 1:$LBL_VIP
tc filter add dev $SH2_IMQ_OUT parent 1:0 protocol ip prio 1 handle $LBL_CTL fw flowid 1:$LBL_CTL
tc filter add dev $SH2_IMQ_OUT parent 1:0 protocol ip prio 2 handle $LBL_STD fw flowid 1:$LBL_STD
tc filter add dev $SH2_IMQ_OUT parent 1:0 protocol ip prio 3 handle $LBL_AVG fw flowid 1:$LBL_AVG
tc filter add dev $SH2_IMQ_OUT parent 1:0 protocol ip prio 6 handle $LBL_DEF fw flowid 1:$LBL_DEF


$IPT -t mangle -N SHAPER2-OUT
$IPT -t mangle -A POSTROUTING -o $SH2_IFS_OUT -j SHAPER2-OUT


$IPT -t mangle -A SHAPER2-OUT -p icmp -j MARK --set-mark $LBL_VIP
$IPT -t mangle -A SHAPER2-OUT -p tcp -m length --length :64 -j MARK --set-mark $LBL_VIP

for ctrl_out in $SH2_CTRL
do
#$IPT -t mangle -A SHAPER2-OUT -p tcp --dport $ctrl_out -j MARK --set-mark $LBL_CTL
$IPT -t mangle -A SHAPER2-OUT -p tcp --sport $ctrl_out -j MARK --set-mark $LBL_CTL
done

for comm_out in $SH2_COMM
do
#$IPT -t mangle -A SHAPER2-OUT -p tcp --dport $comm_out -j MARK --set-mark $LBL_STD
$IPT -t mangle -A SHAPER2-OUT -p tcp --sport $comm_out -j MARK --set-mark $LBL_STD
done

for surf_out in $SH2_SURF
do
#$IPT -t mangle -A SHAPER2-OUT -p tcp --dport $surf_out -j MARK --set-mark $LBL_AVG
$IPT -t mangle -A SHAPER2-OUT -p tcp --sport $surf_out -j MARK --set-mark $LBL_AVG
done

$IPT -t mangle -A SHAPER2-OUT -m mark --mark 0 -j MARK --set-mark $LBL_DEF
$IPT -t mangle -A SHAPER2-OUT -j IMQ --todev 3

####################################################
echo "Outbound shaping added($SH2_IMQ_OUT), rate: ${SH2_RATEUP}Kbit/sec."
echo "Default rate: ${SH2_RATE_OUT4}Kbit/sec."
}

shaper2_instart() {

ip link set $SH2_IMQ_IN up
tc qdisc add dev $SH2_IMQ_IN handle 1: root htb default $LBL_DEF $SH2_R2Q
tc class add dev $SH2_IMQ_IN parent 1: classid 1:1 htb rate ${SH2_RATEDN}kbit ceil ${SH2_RATEDN}kbit


tc class add dev $SH2_IMQ_IN parent 1:1 classid 1:$LBL_VIP htb rate ${SH2_RATE_IN0}kbit ceil ${SH2_RATE_IN0}kbit prio 0
tc class add dev $SH2_IMQ_IN parent 1:1 classid 1:$LBL_CTL htb rate ${SH2_RATE_IN1}kbit ceil ${SH2_RATE_IN1}kbit prio 1
tc class add dev $SH2_IMQ_IN parent 1:1 classid 1:$LBL_STD htb rate ${SH2_RATE_IN2}kbit ceil ${SH2_RATEDN}kbit prio 2
tc class add dev $SH2_IMQ_IN parent 1:1 classid 1:$LBL_AVG htb rate ${SH2_RATE_IN3}kbit ceil ${SH2_RATEDN}kbit prio 3
tc class add dev $SH2_IMQ_IN parent 1:1 classid 1:$LBL_DEF htb rate ${SH2_RATE_IN4}kbit ceil ${SH2_RATEDN}kbit prio 6


tc qdisc add dev $SH2_IMQ_IN parent 1:$LBL_VIP handle $LBL_VIP: $SH2_IN_DISCIPLINE
tc qdisc add dev $SH2_IMQ_IN parent 1:$LBL_CTL handle $LBL_CTL: $SH2_IN_DISCIPLINE
#tc qdisc add dev $SH2_IMQ_IN parent 1:$LBL_STD handle $LBL_STD: tbf rate ${SH2_RATE_IN2}kbit burst 1500
tc qdisc add dev $SH2_IMQ_IN parent 1:$LBL_STD handle $LBL_STD: $SH2_IN_DISCIPLINE
tc qdisc add dev $SH2_IMQ_IN parent 1:$LBL_AVG handle $LBL_AVG: $SH2_IN_DISCIPLINE
tc qdisc add dev $SH2_IMQ_IN parent 1:$LBL_DEF handle $LBL_DEF: $SH2_IN_DISCIPLINE


tc filter add dev $SH2_IMQ_IN parent 1:0 protocol ip prio 0 handle $LBL_VIP fw flowid 1:$LBL_VIP
tc filter add dev $SH2_IMQ_IN parent 1:0 protocol ip prio 1 handle $LBL_CTL fw flowid 1:$LBL_CTL
tc filter add dev $SH2_IMQ_IN parent 1:0 protocol ip prio 2 handle $LBL_STD fw flowid 1:$LBL_STD
tc filter add dev $SH2_IMQ_IN parent 1:0 protocol ip prio 3 handle $LBL_AVG fw flowid 1:$LBL_AVG
tc filter add dev $SH2_IMQ_IN parent 1:0 protocol ip prio 6 handle $LBL_DEF fw flowid 1:$LBL_DEF


$IPT -t mangle -N SHAPER2-IN
$IPT -t mangle -A PREROUTING -i $SH2_IFS_IN -j SHAPER2-IN


$IPT -t mangle -A SHAPER2-IN -p icmp -j MARK --set-mark $LBL_VIP
$IPT -t mangle -A SHAPER2-IN -p tcp -m length --length :64 -j MARK --set-mark $LBL_VIP

for ctrl_in in $SH2_CTRL
do
$IPT -t mangle -A SHAPER2-IN -p tcp --dport $ctrl_in -j MARK --set-mark $LBL_CTL
#$IPT -t mangle -A SHAPER2-IN -p tcp --sport $ctrl_in -j MARK --set-mark $LBL_CTL
done

for comm_in in $SH2_COMM
do
$IPT -t mangle -A SHAPER2-IN -p tcp --dport $comm_in -j MARK --set-mark $LBL_STD
#$IPT -t mangle -A SHAPER2-IN -p tcp --sport $comm_in -j MARK --set-mark $LBL_STD
done

for surf_in in $SH2_SURF
do
$IPT -t mangle -A SHAPER2-IN -p tcp --dport $surf_in -j MARK --set-mark $LBL_AVG
#$IPT -t mangle -A SHAPER2-IN -p tcp --sport $surf_in -j MARK --set-mark $LBL_AVG
done

$IPT -t mangle -A SHAPER2-IN -m mark --mark 0 -j MARK --set-mark $LBL_DEF
$IPT -t mangle -A SHAPER2-IN -j IMQ --todev 2

####################################################
echo "Inbound shaping added($SH2_IMQ_IN), rate: ${SH2_RATEDN}Kbit/sec."
echo "Default rate: ${SH2_RATE_IN4}Kbit/sec."
}


shaper_start() {

#    ifconfig lo mtu 1500

   modprobe imq numdevs=4
   modprobe ipt_IMQ

   shaper1_instart
   shaper1_outstart

   shaper2_instart
   shaper2_outstart
}

shaper_restart() {
#    ifconfig lo mtu 16000
   shaper_stop
   shaper_start
}

case "$1" in
'start')
   shaper_start
   ;;
'stop')
   shaper_stop
   ;;
'restart')
   shaper_restart
   ;;
'status')
   shaper_status
   ;;
'halt')
   shaper_halt
   ;;
*)
   echo "usage $0 start|stop|restart|status|halt"
esac

 

Позволю себе отчасти не согласиться насчет "десктопной ОС". 6-я федора на нее явно не тянет, вот 8-я и все последующие, ИМХО, десктопы по жизни. :) Насчет того, что FC6 и иже с ней являются "полигоном Красной Шапочки" - это знаю, но не считаю, что это имеет решающее значение в вопросе выбора серверного дистриба. Не берусь утверждать, но считаю, что большинство НЕ_STABLE версии других ОС в какой-то степени принадлежат к тому же "полигонному" варианту, до тех пор, пока разрабы не допилят его.

P.S. Кстати, а какую ОС из "линейки" Linux Вы можете порекомендовать для подобной задачи - роутер/фаервол/DNS/DHCP?

Вы можете перечислить список всех патчей на ядро в FC6, вы уверены что ответственные kernel-space механизмы не задеты/затронуты, вы уверены что у кого-либо из участников форума найдется найдется 1 в 1 схожая задача на схожем ПО/софте, и есть ли уверенность что у кого-либо найдется возможности/желания копать эту задачу ?

Имо, дистрибутив общего назначения rhel 5.x/CentOs 5.x

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


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

Спасибо, конечно, за примеры, но к сожалению, мне они не подходят.. Причина - все тот же vlan. Нет в данный момент "свободных eth.."

Вы можете перечислить список всех патчей на ядро в FC6, вы уверены что ответственные kernel-space механизмы не задеты/затронуты, вы уверены что у кого-либо из участников форума найдется найдется 1 в 1 схожая задача на схожем ПО/софте, и есть ли уверенность что у кого-либо найдется возможности/желания копать эту задачу ?
Гм.. А разве моя задача не есть банальный "велосипед", изобретенный и "обкатанный" уже не в одном поколении? Разве я пытаюсь создать что-то новое? Подтверждение тому тот самый скрипт, предложенный выше, который успешно трудился без особых претензий до момента перехода с eth на vlan. Я считаю, что все же есть смысл попытаться найти причину проблемы. Истина где-то рядом.. Вопрос только в каком направлении идти?...
Имо, дистрибутив общего назначения rhel 5.x/CentOs 5.x
[OffTop]

Насчет rhel ничего не скажу, не приходилось еще подробно общаться, а вот с CentOs приходилось иметь дело. И Вы знаете, что я обнаружил в его дистрибутиве? Как это может быть ни странно, но именно явные "следы" Fedora-6!! Даже некоторые пакеты имели расширения ".fc6", а иксы "на физию" вообще один-в-один! Интересно, с чего бы это? ;)

Плюс ко всему, с CentOs имеют место быть некоторые непонятки в плане дальнейшего его существования. Там то неожиданно пропадает "главнюк" и все останавливается в проекте, то также неожиданно "главнюк" появляется.. "Что-то я очкую, Славик!" (с) не помню чей.. :)

 

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


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

AlKov

Падает именно в момент установки редиректа на ifb девайс?

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


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

AlKov

Падает именно в момент установки редиректа на ifb девайс?

Не могу сказать определенно.. Скорее всего, что нет. Субъективно выглядит так - скрипт вроде бы даже работает какое-то время (несколько десятков секунд), затем перестает ходить трафик и далее kernel panic с сообщением о конфликте прерываний. К сожалению, конкретно не зафиксировал, какие именно.

Предполагаю, что проблема связана либо с драйверами на сетевые карты, либо я где-то накосячил с конфигурацией их.. Одну сетевуху (двухпортовую) мне так и не удалось "заставить" работать, как надо. С ней вообще сплошная мистика. Если на обоих портах поднять vlan-ы, то работает это только в таком виде - в одном порту 1G линк, во втором 100М. Если включить 2 гиговых линка, то оба порта как бы "переходят" на 100М (желтые светодиоды "зеленееют") и все перестает работать, ifconfig показывает миллионные числа ошибок.. Сетевая (двухпортовая) "внешняя" Intel на PCI-X. Но скрипт с ней не работает, нужный vlan поднят на одной из onboard сетевой.

Зацепиться за что-либо не хватает знаний, а тупо экспериментировать нет никакой возможности - машина тащит на себе практически всю сеть (более 1500 пользователей), долго с ней не "поиграешься".. :(

 

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


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

У меня подобная конструкция работает именно на тегированном vlan.

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


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

У меня подобная конструкция работает именно на тегированном vlan.
Ну да, я же ваш скрипт погонял под себя, видел, что именно на vlan сделано..

В принципе, в данный момент этот скрипт по большому счету мне не особо и нужен, т.к. мы "немного подросли" и уже подходим к 150М аплинку. Там как бы уже нет особого смысла в подобной нарезке. Сейчас мне более необходима реализация вот этого, но снова гложут сомнения насчет vlan...

Самая большая проблема в том, что непонятно, где искать, с чего начинать.. В ядре, драйверах на сетевухи, или собственно в самих vlan? Да и знаний в этой области маловато, соответственно нагуглить то, не знаю что явно не получится..

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


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

А не может это происходить из-за отсутствия загрузки модуля act_mirred перед стартом скрипта? Хотя непонятно, как же все работало ранее, т.к. этот модуль я не загружал вообще?? Или система должна сама загружать все необходимые модули?

Кстати, после того как глюкнуло в первый раз, я убрал из загрузки и модуль ifb (закомментировал строку /sbin/modprobe ifb в rc.local). И вручную больше его не загружал (практически забыл впопыхах..). Заметил только сегодня. Не тут ли собака порылась? Всю башку уже сломал.. :(

 

P.S. disappointed, а у Вас нет готового примера для реализации только приоритетов? Приблизительно по такой схеме: "наверху" http/https, второй - все остальное, кроме p2p(торрент), третий - собственно торрент. Ну или что-то еще, что можно "приподнять/опустить".

 

P.P.S. Вот нашел на хабре примерчик, это не оно самое, что мне надо?

 

Проверил насчет модулей - не в этом дело, все также..

AlKov

Падает именно в момент установки редиректа на ifb девайс?

Сейчас могу сказать, что точно нет. Падает однозначно после того, как начнет ходить трафик. Сначала на консоль вылезают сообщения что-то про очереди, потом кернел паник с тем же сообщением о конфликте прерываний, номера нет. В предсмертных логах ничего нет. Единственно на что можно обратить внимание при старте скрипта
May  8 21:52:33 router kernel: Mirror/redirect action on
May  8 21:53:08 router kernel: u32 classifier
May  8 21:53:08 router kernel:     Performance counters on
May  8 21:53:08 router kernel:     input device check on
May  8 21:53:08 router kernel:     Actions configured
May  8 21:53:08 router kernel: HTB: quantum of class 10010 is big. Consider r2q change.
May  8 21:53:08 router kernel: HTB: quantum of class 10015 is big. Consider r2q change.
May  8 21:53:08 router kernel: HTB: quantum of class 1015A is big. Consider r2q change.
May  8 21:53:08 router kernel: HTB: quantum of class 1015C is big. Consider r2q change.
May  8 21:53:08 router kernel: HTB: quantum of class 10016 is big. Consider r2q change.
May  8 21:53:08 router kernel: HTB: quantum of class 1016A is big. Consider r2q change.

Все, более никаких следов.. :(

 

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

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


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

Попробуйте поставить kernel*[src].rpm из RhEl/CentOs [4-5].x, а параллельно разворачивайте идеологически правильный сервер. Не ровен час, квартальная премия в SHAPER уйдет. :)

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


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

Попробуйте поставить kernel*[src].rpm из RhEl/CentOs [4-5].x, а параллельно разворачивайте идеологически правильный сервер. Не ровен час, квартальная премия в SHAPER уйдет. :)
Ну с квартальной премией проблем нет - как таковая она отсутствует . :)

А вот насчет "kernel*[src].rpm из RhEl/CentOs [4-5].x" не понял.. Вы предлагаете собрать ядро редхата на федоре?? Да еще и рпм от него?! Это уж точно не покатит.

Или я что-то не так понял?

Насчет "иделогически правильного сервера" понятно и по этому пункту возражений нет и эта мысль меня уже давно гложет. Вопрос только в одном - что есть "иделогически правильный сервер"? ;)

Ну и еще одна "мелочь" имеется по этому пункту - отсутствует как таковое "лишнее" железо для его параллельной организации и момент для выбивания денег у руководства сейчас очень неподходящий (за последний квартал были очень существенные закупки по железу )... :( Так-что придется пока как-то изворачиваться на имеющемся. В принципе, сервак пока не беспокоит ничем, за исключением сабж. А в данный момент скрипт отключен да и собственно именно он не особо нужен, но скорее всего тот, который нужен аналогично наткнется на ту же проблему..

Есть предположение, что причина либо в кривой установке драйверов на сетевые карточки, либо собственно в кривости самих дров. А вот как это подтвердить/опровергнуть не знаю..

 

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


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

Есть предположение, что причина либо в кривой установке драйверов на сетевые карточки, либо собственно в кривости самих дров. А вот как это подтвердить/опровергнуть не знаю..

Поставить ядро из "родственно-ближайшей" ветки rhel для fc6 ?

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


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

Join the conversation

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

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

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

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

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

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

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