CBQ: TCP/IP load balancing: extreem lage snelheid

Pagina: 1
Acties:

  • cpwins
  • Registratie: Oktober 2001
  • Laatst online: 25-07 16:54

cpwins

ut Grunn...

Topicstarter
Thuis heb ik een kabelinternet-verbinding die ik deel met twee andere huisgenoten. Een firewall (Debian/GNU Linux 3.0 (testing/woody)) verbindt onze computers met het internet d.m.v. IP-masquerading. Omdat een van mijn huisgenoten nogal van downloaden houdt is de verbinding vaak erg slecht. De snelheid gaat nog wel maar de pingtijden zijn vaak erg slecht. Als hij aan het downloaden is liggen die tussen de 100 en 1500 ms (en regelmatig een time-out). Normaal is dat maar zo'n 50 ms.

Daarom leek het mij een goed idee de bandbreedte eerlijker te verdelen. Op aanraden van Red Devil heb ik de volgende topics doorgenomen, welke gaan over TCP/IP load balancing m.b.v. CBQ:

[topic=135762]
[topic=333240]
[topic=302359]

De bandbreedteverdeling heb ik als volgt ingesteld (uit rc.firewall):

#!/bin/sh
#
# rc.firewall-2.2
FWVER="1.01 (edited by CP)"

EXTIF="eth0"
INTIF="eth1"
INTLAN="192.168.1.0/24"
CLIENT1="192.168.1.1"
CLIENT2="192.168.1.2"
CLIENT3="192.168.1.3"

# Needed to initially load modules
#
/sbin/depmod -a

/sbin/modprobe ip_masq_ftp
/sbin/modprobe ip_masq_portfw

# Enable IP forwarding since it is disabled by default
#
echo "1" > /proc/sys/net/ipv4/ip_forward

# Enable automatic IP defragmenting since it is disabled by default
#
echo "1" > /proc/sys/net/ipv4/ip_always_defrag

/sbin/ipchains -P input ACCEPT
/sbin/ipchains -P output ACCEPT
/sbin/ipchains -P forward REJECT
/sbin/ipchains -F input
/sbin/ipchains -F output
/sbin/ipchains -F forward

# MASQ timeouts
#
/sbin/ipchains -M -S 7200 10 160

# Enable simple IP forwarding and Masquerading
#
/sbin/ipchains -P forward DENY

/sbin/ipchains -A forward -i $EXTIF -j MASQ -s $CLIENT1/32 -m 0x1
/sbin/ipchains -A forward -i $EXTIF -j MASQ -s $CLIENT2/32 -m 0x2
/sbin/ipchains -A forward -i $EXTIF -j MASQ -s $CLIENT3/32 -m 0x3

# Port Forwarding Section
#
/usr/sbin/ipmasqadm portfw -f
/usr/sbin/ipmasqadm portfw -a -P udp -L 213.51.145.139 6000 \
-R 192.168.1.2 6000
/usr/sbin/ipmasqadm portfw -a -P tcp -L 213.51.145.139 6000 \
-R 192.168.1.2 6000

echo " setting up traffic shaping for $EXTIF (upload).."

# Remove any previos settings
tc qdisc del root dev $EXTIF

# Configure queueing discipline
tc qdisc add dev $EXTIF root handle 1: cbq bandwidth 10Mbit avpkt 1000

# Configure root class
tc class add dev $EXTIF parent 1:0 classid 1:1 cbq bandwidth 10Mbit \
rate 10Mbit allot 1514 weight 1Mbit prio 8 maxburst 20 avpkt 1000

# CLIENT1
tc class add dev $EXTIF parent 1:1 classid 1:10 cbq bandwidth 120Kbit \
rate 32Kbit allot 1514 weight 3Kbit prio 5 maxburst 20 avpkt 1000 bounded

# CLIENT2
tc class add dev $EXTIF parent 1:1 classid 1:20 cbq bandwidth 120Kbit \
rate 32Kbit allot 1514 weight 3Kbit prio 5 maxburst 20 avpkt 1000 bounded

# CLIENT3
tc class add dev $EXTIF parent 1:1 classid 1:30 cbq bandwidth 120Kbit \
rate 32Kbit allot 1514 weight 3Kbit prio 5 maxburst 20 avpkt 1000 bounded

tc qdisc add dev $EXTIF parent 1:10 sfq quantum 1514b perturb 15
tc qdisc add dev $EXTIF parent 1:20 sfq quantum 1514b perturb 15
tc qdisc add dev $EXTIF parent 1:30 sfq quantum 1514b perturb 15

tc filter add dev $EXTIF parent 1:0 protocol ip prio 100 handle 1 \
fw classid 1:10
tc filter add dev $EXTIF parent 1:0 protocol ip prio 100 handle 2 \
fw classid 1:20
tc filter add dev $EXTIF parent 1:0 protocol ip prio 100 handle 3 \
fw classid 1:30

echo " setting up traffic shaping for $INTIF (download).."

# Remove any previos settings
tc qdisc del root dev $INTIF

# Configure queueing discipline
tc qdisc add dev $INTIF root handle 1: cbq bandwidth 10Mbit avpkt 1000

# Configure root class
tc class add dev $INTIF parent 1:0 classid 1:1 cbq bandwidth 10Mbit \
rate 10Mbit allot 1514 weight 1Mbit prio 8 maxburst 20 avpkt 1000

# CLIENT1
tc class add dev $INTIF parent 1:1 classid 1:10 cbq bandwidth 10Mbit \
rate 80Kbit allot 1514 weight 8Kbit prio 5 maxburst 20 avpkt 1000 bounded

# CLIENT2
tc class add dev $INTIF parent 1:1 classid 1:20 cbq bandwidth 10Mbit \
rate 80Kbit allot 1514 weight 8Kbit prio 5 maxburst 20 avpkt 1000 bounded

# CLIENT3
tc class add dev $INTIF parent 1:1 classid 1:30 cbq bandwidth 10Mbit \
rate 80Kbit allot 1514 weight 8Kbit prio 5 maxburst 20 avpkt 1000 bounded

tc qdisc add dev $INTIF parent 1:10 sfq quantum 1514b perturb 15
tc qdisc add dev $INTIF parent 1:20 sfq quantum 1514b perturb 15
tc qdisc add dev $INTIF parent 1:30 sfq quantum 1514b perturb 15

tc filter add dev $INTIF parent 1:0 protocol ip prio 100 u32 \
match ip dst $CLIENT1 flowid 1:10

tc filter add dev $INTIF parent 1:0 protocol ip prio 100 u32 \
match ip dst $CLIENT2 flowid 1:20

tc filter add dev $INTIF parent 1:0 protocol ip prio 100 u32 \
match ip dst $CLIENT3 flowid 1:30

echo -e "\nrc.firewall-2.2 v$FWVER done.\n"



Zoals je ziet heb ik CBQ voor beide netwerkkaarten in de firewall geconfigureerd. Dit om zowel de up- en downloadsnelheden van de clients te beperken en omdat je bij TCP/IP alleen controle hebt over de pakketjes die je verstuurt.

Aanvankelijk werkt de bovenstaande configuratie prima: zowel de upload- als de downloadsnelheid blijven netjes binnen de gestelde limiet. Echter na ongeveer 30 minuten tot een uur is de downloadsnelheid tot vrijwel nul gereduceerd. Het lijkt erop dat de snelheid steeds kleiner en kleiner wordt. Wanneer ik de firewall-computer opnieuw opstart dan is de verbinding weer prima. (voor een uurtje :( ) Wanneer ik geen beperking voor de downloadsnelheid instel (geen traffic shaping voor de interne interface) dan treedt het probleem niet op.

Iemand enig idee hoe het komt dat de snelheid na ongeveer 1 uur zo inzakt? Ligt het misschien aan de instelling van de grootte van de totale bandbreedte (bandwidth) of is het iets anders?

  • cpwins
  • Registratie: Oktober 2001
  • Laatst online: 25-07 16:54

cpwins

ut Grunn...

Topicstarter
Anyone?

Nelske of wouzer misschien?