"Правильный" шейпер для исходящего траффика

Установка, настройка, поддержка
antonmayko
Сообщения: 105
Зарегистрирован: Ср апр 01, 2009 8:53 pm

Re: "Правильный" шейпер для исходящего траффика

Сообщение antonmayko »

Вот вывод это команды:

Код: Выделить всё

qdisc htb 1: root r2q 10 default 10 direct_packets_stat 0
qdisc sfq 10: parent 1:10 limit 127p quantum 1404b perturb 1sec 
qdisc ingress ffff: parent ffff:fff1 ---------------- 
Только мне ничего не понятно.
server: ubuntu-server 10.04.3, abills 0.55, 0.58b

mak062
Сообщения: 5
Зарегистрирован: Пн июл 06, 2009 7:42 am

Re: "Правильный" шейпер для исходящего траффика

Сообщение mak062 »

На нужный интерфейс ставите фильтр?
Проверьте статистику, попадает ли что-то под ваш фильтр (меняется ли "rule hit" и "success" ?)

Код: Выделить всё

tc -s filter show dev ppp15 parent ffff:

ran
Сообщения: 2298
Зарегистрирован: Вс окт 21, 2007 2:29 pm

Re: "Правильный" шейпер для исходящего траффика

Сообщение ran »

а на форуме для кого специально прилеплено?
Любой тупик - это тщательно замаскированный выход.

lasik
Сообщения: 983
Зарегистрирован: Чт янв 10, 2008 5:20 pm
Откуда: Россия, Москва

Re: "Правильный" шейпер для исходящего траффика

Сообщение lasik »

Для таких как я с тобой )

antonmayko
Сообщения: 105
Зарегистрирован: Ср апр 01, 2009 8:53 pm

Re: "Правильный" шейпер для исходящего траффика

Сообщение antonmayko »

ran писал(а):а на форуме для кого специально прилеплено?
Скажите, а простой копипаст должен работать? или нужно делать под себя.
server: ubuntu-server 10.04.3, abills 0.55, 0.58b

lasik
Сообщения: 983
Зарегистрирован: Чт янв 10, 2008 5:20 pm
Откуда: Россия, Москва

Re: "Правильный" шейпер для исходящего траффика

Сообщение lasik »

под себя конешна

ran
Сообщения: 2298
Зарегистрирован: Вс окт 21, 2007 2:29 pm

Re: "Правильный" шейпер для исходящего траффика

Сообщение ran »

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

antonmayko
Сообщения: 105
Зарегистрирован: Ср апр 01, 2009 8:53 pm

Re: "Правильный" шейпер для исходящего траффика

Сообщение antonmayko »

ran писал(а):а на форуме для кого специально прилеплено?
Прилеплено то оно нормально, а вот скрипт из той темы на исходящую скорость ну никак не влияет.
Забадался я с этой исходящей. А канал не резиновый.

Люди добрые, помогите разобраться, а?
server: ubuntu-server 10.04.3, abills 0.55, 0.58b

ran
Сообщения: 2298
Зарегистрирован: Вс окт 21, 2007 2:29 pm

Re: "Правильный" шейпер для исходящего траффика

Сообщение ran »

отписал в прилепленной теме - правила шейпера покажи
Любой тупик - это тщательно замаскированный выход.

NiTr0
Сообщения: 767
Зарегистрирован: Пт фев 08, 2008 4:46 pm

Re: "Правильный" шейпер для исходящего траффика

Сообщение NiTr0 »

Побаловавшись с imq на 2.4 ядре и решив немного разгрузить железку пптп сервера, таки переделал шейпер на основном пптп (2.6.30 ядро) на ifb. Вот что вышло. Может кому-то сгодится.

if-up скрипт:

Код: Выделить всё

#!/bin/sh
#ABillS %DATE% %TIME%
#
# When the ppp link comes up, this script is called with the following
# parameters
#       $1      the interface name used by pppd (e.g. ppp3)
#       $2      the tty device name
#       $3      the tty device speed
#       $4      the local IP address for the interface
#       $5      the remote IP address
#       $6      the parameter specified by the 'ipparam' option to pppd
#


debug=0;
INPUT=ifb0;
UBURST="burst 512k"
DBURST="burst 64k"
TCFR="/sbin/tc filter replace"
TCCR="/sbin/tc class replace"
TCQR="/sbin/tc qdisc replace"
TCQD="/sbin/tc qdisc del"

if [ -f /var/run/radattr.$1 ]
then
   PPPNUM=`echo $1|sed 's/ppp//'|awk '{printf "%03d",$1}'`
   IP=$5
#   echo $IP >/var/run/shaper/$1
   QDISC_ETH=`tc qdisc show dev $INPUT|grep -v sfq|awk '{print $2}'`
   DOWNSPEED=`/bin/awk  '/PPPD-Downstream-Speed-Limit/ {print $2}'  /var/run/radattr.$1`
   UPSPEED=`/bin/awk  '/PPPD-Upstream-Speed-Limit/ {print $2}'  /var/run/radattr.$1`
   FILTERS=`/bin/awk  '/Filter-Id/ {print $2}'  /var/run/radattr.$1`

   if [ "$QDISC_ETH" != "htb" ];
   then
     ip l s $INPUT up
     $TCQD dev $INPUT root &>/dev/null
     $TCQR dev $INPUT root handle 1: htb default 2 r2q 100
     $TCCR dev $INPUT parent 1: classid 1:1 htb rate 100mbit ceil 1000mbit burst 1024k cburst 64k prio 2
     $TCCR dev $INPUT parent 1: classid 1:2 htb rate 100mbit ceil 1000mbit burst 1024k cburst 64k prio 1
     $TCQR dev $INPUT parent 1:2 handle 2: sfq perturb 10 quantum 1514
  fi


   if [ w${debug} = w1 ] ; then
     echo "Debug mode" >>/tmp/pptpd
     echo $DOWNSPEED >>/tmp/pptpd
     echo $UPSPEED >>/tmp/pptpd
     echo $FILTERS >>/tmp/pptpd
   fi;

    $TCQD dev $1 root    &>/dev/null
    $TCQD dev $1 ingress &>/dev/null

##### speed server->client
   if [ "$UPSPEED" != "0" ] ;
   then
#     UPSPEED=$[$UPSPEED*4/3]
     URATE=$[$UPSPEED/2]
     $TCQR dev $1 root handle 1: htb default 20 r2q 100
     $TCCR dev $1 parent 1: classid 1:1 htb rate ${UPSPEED}kbit $UBURST quantum 1514
     $TCCR dev $1 parent 1:1 classid 1:10 htb rate ${URATE}kbit ceil ${UPSPEED}kbit $UBURST prio 1 quantum 1514
     $TCCR dev $1 parent 1:1 classid 1:20 htb rate ${URATE}kbit ceil ${UPSPEED}kbit $UBURST prio 2 quantum 1514
     $TCQR dev $1 parent 1:10 handle 10: sfq perturb 10 quantum 1514
     $TCQR dev $1 parent 1:20 handle 20: sfq perturb 10 quantum 1514
     $TCFR dev $1 parent 1:0 protocol ip prio 10 u32 match ip tos 0x10 0xff flowid 1:10
     $TCFR dev $1 parent 1:0 protocol ip prio 10 u32 match ip protocol 1 0xff flowid 1:10
   fi

##### speed client->server
   if [ "$DOWNSPEED" != "0" ] ;
   then
#     DOWNSPEED=$[$DOWNSPEED*4/3]
     DRATE=$[$DOWNSPEED/2]

     $TCQR dev $1 handle ffff: ingress
     $TCFR dev $1 parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev $INPUT

     $TCCR dev $INPUT parent 1:1 classid 1:1$PPPNUM htb rate ${DOWNSPEED}kbit $DBURST quantum 1514
     $TCCR dev $INPUT parent 1:1$PPPNUM classid 1:2$PPPNUM htb rate ${DRATE}kbit ceil ${DOWNSPEED}kbit $DBURST prio 10 quantum 1514
     $TCCR dev $INPUT parent 1:1$PPPNUM classid 1:3$PPPNUM htb rate ${DRATE}kbit ceil ${DOWNSPEED}kbit $DBURST prio 1 quantum 1514
     $TCQR dev $INPUT parent 1:2$PPPNUM handle 2$PPPNUM: sfq perturb 10 quantum 1514
     $TCQR dev $INPUT parent 1:3$PPPNUM handle 3$PPPNUM: sfq perturb 10 quantum 1514

     $TCFR dev $INPUT parent 1: protocol ip prio 1$PPPNUM handle 0x1$PPPNUM u32 match ip src $IP/32 flowid 1:2$PPPNUM
     $TCFR dev $INPUT parent 1:2$PPPNUM protocol ip prio 2$PPPNUM handle 0x2$PPPNUM u32 match ip src $IP/32 match ip tos 0x10 0xff flowid 1:3$PPPNUM
     $TCFR dev $INPUT parent 1:2$PPPNUM protocol ip prio 3$PPPNUM handle 0x3$PPPNUM u32 match ip src $IP/32 match ip protocol 6 0xff \
             match u8 0x05 0x0f at 0 match u16 0x0000 0xfc0 at 2 match u8 0x10 0xff at 33 flowid 1:3$PPPNUM
     $TCFR dev $INPUT parent 1:2$PPPNUM protocol ip prio 4$PPPNUM handle 0x4$PPPNUM u32 match ip src $IP/32 match ip protocol 1 0xff flowid 1:3$PPPNUM
   fi

#### Filters
  if [ w$FILTERS != w ] ;
  then
    echo "filters not supported";
  fi;

 fi
if-down скрипт:

Код: Выделить всё

#!/bin/sh
#ABillS %DATE% %TIME%
#
# When the ppp link comes up, this script is called with the following
# parameters
#       $1      the interface name used by pppd (e.g. ppp3)
#       $2      the tty device name
#       $3      the tty device speed
#       $4      the local IP address for the interface
#       $5      the remote IP address
#       $6      the parameter specified by the 'ipparam' option to pppd
#


debug=0;
INPUT=ifb0;
UBURST="burst 512k"
DBURST="burst 64k"
TCFD="/sbin/tc filter del"
TCFD="/sbin/tc class del"
TCFD="/sbin/tc qdisc del"

if [ -f /var/run/radattr.$1 ]
then
   PPPNUM=`echo $1|sed 's/ppp//'|awk '{printf "%03d",$1}'`
   DOWNSPEED=`/bin/awk  '/PPPD-Downstream-Speed-Limit/ {print $2}'  /var/run/radattr.$1`
   FILTERS=`/bin/awk  '/Filter-Id/ {print $2}'  /var/run/radattr.$1`

    $TCQD dev $1 root    &>/dev/null
    $TCQD dev $1 ingress &>/dev/null

##### speed client->server
   if [ "$DOWNSPEED" != "0" ] ;
   then

     $TCFD dev $INPUT parent 1:2$PPPNUM protocol ip prio 4$PPPNUM
     $TCFD dev $INPUT parent 1:2$PPPNUM protocol ip prio 3$PPPNUM
     $TCFD dev $INPUT parent 1:2$PPPNUM protocol ip prio 2$PPPNUM
     $TCFD dev $INPUT parent 1: protocol ip prio 1$PPPNUM
     $TCQD dev $INPUT parent 1:2$PPPNUM
     $TCQD dev $INPUT parent 1:3$PPPNUM
     $TCCD dev $INPUT parent 1:1$PPPNUM classid 1:2$PPPNUM
     $TCCD dev $INPUT parent 1:1$PPPNUM classid 1:3$PPPNUM
     $TCCD dev $INPUT parent 1:1 classid 1:1$PPPNUM

   fi

#### Filters
  if [ w$FILTERS != w ] ;
  then
    echo "filters not supported";
  fi;

 fi

Ali
Сообщения: 24
Зарегистрирован: Чт июл 19, 2007 11:37 am

Re: "Правильный" шейпер для исходящего траффика

Сообщение Ali »

на ifb сколько клиентов нормально работает и на каком тазике????

NiTr0
Сообщения: 767
Зарегистрирован: Пт фев 08, 2008 4:46 pm

Re: "Правильный" шейпер для исходящего траффика

Сообщение NiTr0 »

Сейчас на одном из тазиков стоит бартон 2500+ - до 100 клиентов, поток на вход и на выход на влане в мир 50 мбит/с, загрузка проца до 30%.
Надо в шейпере хеш заюзать - нагрузка ИМХО сильно упадет.

Ali
Сообщения: 24
Зарегистрирован: Чт июл 19, 2007 11:37 am

Re: "Правильный" шейпер для исходящего траффика

Сообщение Ali »

NiTr0 писал(а):Сейчас на одном из тазиков стоит бартон 2500+ - до 100 клиентов, поток на вход и на выход на влане в мир 50 мбит/с, загрузка проца до 30%.
Надо в шейпере хеш заюзать - нагрузка ИМХО сильно упадет.
если заюзаете - заделитесь результатом, я потестил скрипт пока на тестовом тазике - шейпит то что надо, столкнулся только вот с чем...
если полоса не стоит вовсе в абилсе, то почему-то вход выше 10-12мбит не подымается по спидтесту а исход норма разжат на все 100%...
причем если ставить полосу в 16-25мбит он ее выдает а без полосы до 12 и приплыли....
в каком месте подкрутить скрипт не подскажете???

NiTr0
Сообщения: 767
Зарегистрирован: Пт фев 08, 2008 4:46 pm

Re: "Правильный" шейпер для исходящего траффика

Сообщение NiTr0 »

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

Ali
Сообщения: 24
Зарегистрирован: Чт июл 19, 2007 11:37 am

Re: "Правильный" шейпер для исходящего траффика

Сообщение Ali »

потестил пол недельки....
Q8300 4гига озу сетевка интел PCI-E 9402
порвало на 500юзеров траффик под 90-100мбит и становится плохо, при исходящем шейпере с помощью ингресс такого не было.....
когда юзеров мало - шейпит удачно но как подбираються к 70-80мбитам, сервер начинает умирать плавно....
может есть инфо про хеш???

Ответить