Не работает восходящий шейпер (IPoE, ifb)

Shaper related questions
Post Reply
mpolk
Posts: 11
Joined: 06 Jan 2016, 08:35

Не работает восходящий шейпер (IPoE, ifb)

Post by mpolk »

Доброго времени суток,

Провожу испытания Акселя в режиме IPoE. Пытаюсь реализовать шейпинг восходящего потока. Сессия запускается благополучно, установки скорости на ней выглядят благопристойно:

Code: Select all

[root@kamakura etc]# accel-cmd show sessions
 ifname |  username  |    calling-sid    |      ip      | rate-limit  | type | comp | state  |  uptime  
--------+------------+-------------------+--------------+-------------+------+------+--------+----------
 ipoe0  | Ryaz100::1 | 08:00:27:62:62:f2 | 10.193.79.33 | 15360/15360 | ipoe |      | active | 00:02:00 
Нисходящий трафик шейпится благополучно, восходящий - не шейпится вообще, летит беспрепятственно на полной скорости. При запуске сессии не видно никаких попыток зарегулировать трафик на ifb:

Code: Select all

[root@kamakura etc]# tc qdisc show dev ifb1
qdisc htb 1: root refcnt 2 r2q 10 default 0 direct_packets_stat 0
[root@kamakura etc]# tc filter show dev ifb1
filter parent 1: protocol ip pref 100 flow 
filter parent 1: protocol ip pref 100 flow handle 0x1 map keys priority baseclass 1:1 
[root@kamakura etc]# tc class show dev ifb1
[root@kamakura etc]#
Не видно также и никаких попыток направить трафик на шейпленье с ipoe-интерфейса на ifb:

Code: Select all

[root@kamakura etc]# tc qdisc show dev ipoe0
qdisc htb 1: root refcnt 2 r2q 10 default 1 direct_packets_stat 0
[root@kamakura etc]# tc filter show dev ipoe0
[root@kamakura etc]# tc class show dev ipoe0
class htb 1:1 root prio 0 rate 15360Kbit ceil 15360Kbit burst 192000b cburst 1530b 
[root@kamakura etc]#
Однако не видно и никакой ругани в логах Акселя по поводу невозможности насадить на интерфейсы необходимые классы и редиректы.

В режиме "up-limiter=police" восходящий трафик регулируется как надо (но я боюсь, что полисинг как таковой придется не совсем по душе мнительным клиентам).

Что я делаю не так, или что не так делает Аксель?

Выдержки из конфига, касающиеся IPoE и шейпера прилагаю:

Code: Select all

[ipoe]
verbose=1
#username=ifname
#password=username
lease-time=60
renew-time=30
max-lease-time=3600
#unit-cache=1000
#l4-redirect-table=4
#l4-redirect-ipset=l4
#l4-redirect-on-reject=300
#l4-redirect-ip-pool=pool1
shared=1
ifcfg=0
mode=L2
start=dhcpv4
ip-unnumbered=1
proxy-arp=1
#nat=0
#proto=100
#relay=10.10.10.10
attr-dhcp-client-ip=Framed-IP-Address
attr-dhcp-router-ip=SNS-Gateway-IP-Address
attr-dhcp-mask=Framed-IP-Netmask
#attr-dhcp-lease-time=DHCP-Lease-Time
#attr-dhcp-opt82=DHCP-Option82
#attr-dhcp-opt82-remote-id=DHCP-Agent-Remote-Id
#attr-dhcp-opt82-circuit-id=DHCP-Agent-Circuit-Id
#attr-l4-redirect=L4-Redirect
#attr-l4-redirect-table=4
#attr-l4-redirect-ipset=l4-redirect
#local-net=192.168.0.0/16
username=lua:clientPort
lua-file=/etc/accel-ppp.lua
#offer-delay=0,100:100,200:200,-1:1000
#vlan-mon=eth0,10-200
#vlan-timeout=60
#vlan-name=%I.%N
#ip-pool=ipoe
#idle-timeout=0
#session-timeout=0
#soft-terminate=0
#check-mac-change=1
#calling-sid=mac
#ifb=ifb1
interface=br1.1009

[shaper]
#attr=Filter-Id
#down-burst-factor=0.1
#up-burst-factor=1.0
#latency=50
#mpu=0
#mtu=0
#r2q=10
#quantum=1500
#moderate-quantum=1
#cburst=1534
ifb=ifb1
#up-limiter=police
up-limiter=htb
down-limiter=htb
#leaf-qdisc=sfq perturb 10
#leaf-qdisc=fq_codel [limit PACKETS] [flows NUMBER] [target TIME] [interval TIME] [quantum BYTES] [[no]ecn]
#rate-multiplier=1
#fwmark=1
verbose=1
PS. Откуда вообще должны браться ifb-интерфейсы для Акселя? Должен ли он сам создавать их? Если да, то он этого не делает, а лишь ругается на отсутствие девайса. Или их следует заранее создавать вручную (как я и делал)? И к чему их в таком случае следует линковать?
Dmitry
Администратор
Posts: 954
Joined: 09 Oct 2014, 10:06

Re: Не работает восходящий шейпер (IPoE, ifb)

Post by Dmitry »

ifb интерфейсы должен создавать сам accel-ppp
mpolk
Posts: 11
Joined: 06 Jan 2016, 08:35

Re: Не работает восходящий шейпер (IPoE, ifb)

Post by mpolk »

И эта проблема решилась довольно магическим способом при плановой перезагрузке сервера, на котором обкатывается Аксель. При "чистой" загрузке Акселя с тем же конфигом, который остался от доперезагрузочной эпохи, он стартанул без ругани, самостоятельно создал ifb-интерфейсы, навесил шейпер и начал шейпить все что положено. Похоже, предыдущие трудности возникали, в процессе того, как я постепенно модифицировал конфиг, разкомментирую в нем строчки по одной-две. Из-за этого в какой-то промежуточной ситуации Аксель не смог создать ifb-интерфейс, я создал его насильственно, а дальше Аксель опять-таки не смог навесить шейперы на искуственно созданный интерфейс.

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