AlKov Опубликовано 9 декабря, 2008 (изменено) · Жалоба Подрезал. На 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 заметно прибавила в росте, остальные соответственно "съежились". Изменено 9 декабря, 2008 пользователем AlKov Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
disappointed Опубликовано 11 декабря, 2008 · Жалоба Я пишу цифры которые у нас работали на аплинке такой ширины. Проверьте скорость отклика/сёрфинга визуально на наивысшем приоритете с запасом и без. Вот про эту разницу я и писал. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
atomcity Опубликовано 14 декабря, 2008 · Жалоба а prio больше 7 не бывает? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
AlKov Опубликовано 15 марта, 2010 · Жалоба 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-ом почему-то пришел полный п...ц.. Вопрос риторический - кто виноват и что делать? Нагуглить не удалось ничего.. :( Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
AlKov Опубликовано 17 апреля, 2010 · Жалоба Вопрос все еще актуален, а ответ до сих пор не найден.. :( Может что-то в системе (Fedora Core 6) пропатчить, или проапгрейдить надо? Самая большая проблема в том, что непонятно, в каком направлении копать. Что может создать конфликт по прерываниям при переходе с "чистого" ethernet на vlan? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
acquire Опубликовано 18 апреля, 2010 · Жалоба 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. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
AlKov Опубликовано 30 апреля, 2010 (изменено) · Жалоба По 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? Изменено 30 апреля, 2010 пользователем AlKov Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
acquire Опубликовано 1 мая, 2010 · Жалоба Ну как бы оно действительно похоже, что что-то элементарно "захлёбывается", т.к. какое-то время скрипт все же работает (до 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 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
AlKov Опубликовано 2 мая, 2010 · Жалоба Спасибо, конечно, за примеры, но к сожалению, мне они не подходят.. Причина - все тот же vlan. Нет в данный момент "свободных eth.." Вы можете перечислить список всех патчей на ядро в FC6, вы уверены что ответственные kernel-space механизмы не задеты/затронуты, вы уверены что у кого-либо из участников форума найдется найдется 1 в 1 схожая задача на схожем ПО/софте, и есть ли уверенность что у кого-либо найдется возможности/желания копать эту задачу ?Гм.. А разве моя задача не есть банальный "велосипед", изобретенный и "обкатанный" уже не в одном поколении? Разве я пытаюсь создать что-то новое? Подтверждение тому тот самый скрипт, предложенный выше, который успешно трудился без особых претензий до момента перехода с eth на vlan. Я считаю, что все же есть смысл попытаться найти причину проблемы. Истина где-то рядом.. Вопрос только в каком направлении идти?...Имо, дистрибутив общего назначения rhel 5.x/CentOs 5.x[OffTop]Насчет rhel ничего не скажу, не приходилось еще подробно общаться, а вот с CentOs приходилось иметь дело. И Вы знаете, что я обнаружил в его дистрибутиве? Как это может быть ни странно, но именно явные "следы" Fedora-6!! Даже некоторые пакеты имели расширения ".fc6", а иксы "на физию" вообще один-в-один! Интересно, с чего бы это? ;) Плюс ко всему, с CentOs имеют место быть некоторые непонятки в плане дальнейшего его существования. Там то неожиданно пропадает "главнюк" и все останавливается в проекте, то также неожиданно "главнюк" появляется.. "Что-то я очкую, Славик!" (с) не помню чей.. :) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
disappointed Опубликовано 3 мая, 2010 · Жалоба AlKov Падает именно в момент установки редиректа на ifb девайс? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
AlKov Опубликовано 3 мая, 2010 · Жалоба AlKov Падает именно в момент установки редиректа на ifb девайс? Не могу сказать определенно.. Скорее всего, что нет. Субъективно выглядит так - скрипт вроде бы даже работает какое-то время (несколько десятков секунд), затем перестает ходить трафик и далее kernel panic с сообщением о конфликте прерываний. К сожалению, конкретно не зафиксировал, какие именно.Предполагаю, что проблема связана либо с драйверами на сетевые карты, либо я где-то накосячил с конфигурацией их.. Одну сетевуху (двухпортовую) мне так и не удалось "заставить" работать, как надо. С ней вообще сплошная мистика. Если на обоих портах поднять vlan-ы, то работает это только в таком виде - в одном порту 1G линк, во втором 100М. Если включить 2 гиговых линка, то оба порта как бы "переходят" на 100М (желтые светодиоды "зеленееют") и все перестает работать, ifconfig показывает миллионные числа ошибок.. Сетевая (двухпортовая) "внешняя" Intel на PCI-X. Но скрипт с ней не работает, нужный vlan поднят на одной из onboard сетевой. Зацепиться за что-либо не хватает знаний, а тупо экспериментировать нет никакой возможности - машина тащит на себе практически всю сеть (более 1500 пользователей), долго с ней не "поиграешься".. :( Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
disappointed Опубликовано 4 мая, 2010 · Жалоба У меня подобная конструкция работает именно на тегированном vlan. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
AlKov Опубликовано 5 мая, 2010 · Жалоба У меня подобная конструкция работает именно на тегированном vlan.Ну да, я же ваш скрипт погонял под себя, видел, что именно на vlan сделано..В принципе, в данный момент этот скрипт по большому счету мне не особо и нужен, т.к. мы "немного подросли" и уже подходим к 150М аплинку. Там как бы уже нет особого смысла в подобной нарезке. Сейчас мне более необходима реализация вот этого, но снова гложут сомнения насчет vlan... Самая большая проблема в том, что непонятно, где искать, с чего начинать.. В ядре, драйверах на сетевухи, или собственно в самих vlan? Да и знаний в этой области маловато, соответственно нагуглить то, не знаю что явно не получится.. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
AlKov Опубликовано 8 мая, 2010 (изменено) · Жалоба А не может это происходить из-за отсутствия загрузки модуля 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. Все, более никаких следов.. :( Изменено 8 мая, 2010 пользователем AlKov Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
acquire Опубликовано 9 мая, 2010 · Жалоба Попробуйте поставить kernel*[src].rpm из RhEl/CentOs [4-5].x, а параллельно разворачивайте идеологически правильный сервер. Не ровен час, квартальная премия в SHAPER уйдет. :) Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
AlKov Опубликовано 10 мая, 2010 · Жалоба Попробуйте поставить kernel*[src].rpm из RhEl/CentOs [4-5].x, а параллельно разворачивайте идеологически правильный сервер. Не ровен час, квартальная премия в SHAPER уйдет. :)Ну с квартальной премией проблем нет - как таковая она отсутствует . :)А вот насчет "kernel*[src].rpm из RhEl/CentOs [4-5].x" не понял.. Вы предлагаете собрать ядро редхата на федоре?? Да еще и рпм от него?! Это уж точно не покатит. Или я что-то не так понял? Насчет "иделогически правильного сервера" понятно и по этому пункту возражений нет и эта мысль меня уже давно гложет. Вопрос только в одном - что есть "иделогически правильный сервер"? ;) Ну и еще одна "мелочь" имеется по этому пункту - отсутствует как таковое "лишнее" железо для его параллельной организации и момент для выбивания денег у руководства сейчас очень неподходящий (за последний квартал были очень существенные закупки по железу )... :( Так-что придется пока как-то изворачиваться на имеющемся. В принципе, сервак пока не беспокоит ничем, за исключением сабж. А в данный момент скрипт отключен да и собственно именно он не особо нужен, но скорее всего тот, который нужен аналогично наткнется на ту же проблему.. Есть предположение, что причина либо в кривой установке драйверов на сетевые карточки, либо собственно в кривости самих дров. А вот как это подтвердить/опровергнуть не знаю.. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
acquire Опубликовано 10 мая, 2010 · Жалоба Есть предположение, что причина либо в кривой установке драйверов на сетевые карточки, либо собственно в кривости самих дров. А вот как это подтвердить/опровергнуть не знаю.. Поставить ядро из "родственно-ближайшей" ветки rhel для fc6 ? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...