traffic shapen; resultaat: o.a. ssh trager

Pagina: 1
Acties:

  • Arnout
  • Registratie: December 2000
  • Laatst online: 02-05 07:56
Situatie: wij delen hier een Casema Broadband Premium (Cable) verbinding (800kbit/128kbit) via Debian Linux 2.4.21 met iptables.

Nu maak ik sinds kort gebruik van QoS/tc om het traffic enigzins te shapen.
Ik heb als uitgangspunt het "wondershaper" script gebruikt (http://lartc.org/wondershaper/).

Dit script geeft voorrang aan o.a. ssh pakketten en ack pakketten. ssh verkeer zou dus sneller moeten gaan.

Nu is het probleem dat dit niet echt het geval is. ssh reageert wel beter als je bijvoorbeeld een upload doet of een mail verzend, maar op moment dat er weinig verkeer is, of enkel kazaa/emule sharing, reageert ssh trager dan in een niet-geshaped-te situatie.

Dit is het relevate deel van mijn script:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#!/bin/bash

DOWNLINK=800
UPLINK=123
DEV=ppp0

[...]

###### uplink

# install root HTB, point default traffic to 1:20:

tc qdisc add dev $DEV root handle 1: htb default 20

# shape everything at $UPLINK speed - this prevents huge queues in your
# DSL modem which destroy latency:

tc class add dev $DEV parent 1: classid 1:1 htb rate ${UPLINK}kbit burst 6k

# high prio class 1:10:

tc class add dev $DEV parent 1:1 classid 1:10 htb rate $[6*$UPLINK/10]kbit \
   ceil ${UPLINK}kbit burst 6k prio 1

# bulk & default class 1:20 - gets slightly less traffic, 
# and a lower priority:

tc class add dev $DEV parent 1:1 classid 1:20 htb rate $[3*$UPLINK/10]kbit \
   ceil ${UPLINK}kbit burst 6k prio 2

tc class add dev $DEV parent 1:1 classid 1:30 htb rate $[1*$UPLINK/10]kbit \
   ceil $[$UPLINK-20]kbit burst 6k prio 3

# all get Stochastic Fairness:
tc qdisc add dev $DEV parent 1:10 handle 10: sfq perturb 10
tc qdisc add dev $DEV parent 1:20 handle 20: sfq perturb 10
tc qdisc add dev $DEV parent 1:30 handle 30: sfq perturb 10

# TOS Minimum Delay (ssh, NOT scp) in 1:10:

tc filter add dev $DEV parent 1:0 protocol ip prio 10 u32 \
      match ip tos 0x10 0xff  flowid 1:10

# ICMP (ip protocol 1) in the interactive class 1:10 so we 
# can do measurements & impress our friends:
tc filter add dev $DEV parent 1:0 protocol ip prio 10 u32 \
        match ip protocol 1 0xff flowid 1:10

# To speed up downloads while an upload is going on, put ACK packets in
# the interactive class:

tc filter add dev $DEV parent 1: protocol ip prio 10 u32 \
   match ip protocol 6 0xff \
   match u8 0x05 0x0f at 0 \
   match u16 0x0000 0xffc0 at 2 \
   match u8 0x10 0xff at 33 \
   flowid 1:10

# MSN Messenger - standaard poort - chats prio geven 

tc filter add dev $DEV parent 1: protocol ip prio 10 u32 \
match ip dport 1863 0xffff flowid 1:10

# Email - POP3 - ophalen voorrang geven 

tc filter add dev $DEV parent 1: protocol ip prio 10 u32 \
match ip dport 110 0xffff flowid 1:10

# rest is 'non-interactive' ie 'bulk' and ends up in 1:20

[...]


Ik had ergens gelezen dat de SFQ queue methode standaard een te grote queue lengte (128p) hanteert. Maar als er weinig verkeer is zou zich geen queue moeten opbouwen, toch?

Wat zit hier niet goed? Alvast bedankt. :)

  • MissingDog
  • Registratie: Augustus 2002
  • Niet online
Het is altijd langzamer dan een niet geshapete, onbelaste verbinding, want het traffic wordt nou eenmaal wel bekeken en 'geprocessed', dit kost cpu-cycles en levert een vertraging op.

  • tech-no-logical
  • Registratie: December 2000
  • Laatst online: 24-04 14:10
shaping geeft overhead, zoals missingdog al zei, maar ik vind een geschatte netto-upload van 123 Kbit ook wat hoog. neem 's 116 of zo. afhankelijk van hoeveel je reserveert voor high-prio ssh verkeer, kan een verkeerd geschat plafond in de weg zitten.

hierbij moet ik wel vermelden dat ik het script niet echt heb kunnen ontcijferen, ik heb alleen een beetje ervaring met shaping onder openbsd, en dat ziet er heel anders uit...

  • Arnout
  • Registratie: December 2000
  • Laatst online: 02-05 07:56
MissingDog schreef op 25 August 2003 @ 21:46:
Het is altijd langzamer dan een niet geshapete, onbelaste verbinding, want het traffic wordt nou eenmaal wel bekeken en 'geprocessed', dit kost cpu-cycles en levert een vertraging op.
Ok, ik neem het van je aan. Maar dat dat ook merkbaar is, lijkt me wel erg veel overhead.
Heb net ff gemeten met iptraf en ssh verkeer is 2 pakketten per karakter.
tech-no-logical schreef op 25 augustus 2003 @ 22:18:
shaping geeft overhead, zoals missingdog al zei, maar ik vind een geschatte netto-upload van 123 Kbit ook wat hoog. neem 's 116 of zo. afhankelijk van hoeveel je reserveert voor high-prio ssh verkeer, kan een verkeerd geschat plafond in de weg zitten.

hierbij moet ik wel vermelden dat ik het script niet echt heb kunnen ontcijferen, ik heb alleen een beetje ervaring met shaping onder openbsd, en dat ziet er heel anders uit...
Hmmz, had eerst 128kbit. Zal er eens wat minder van maken. En wat betreft het script, het is misschien wat onduidelijk door de variabelen.

Daarom hier een status overzichtje van de qdiscs in action:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
piethein:/etc/init.d# ./shaper status
qdisc ingress ffff:
 Sent 27284644 bytes 69176 pkts (dropped 5, overlimits 0)

 qdisc sfq 30: quantum 1492b perturb 10sec
 Sent 23671193 bytes 36270 pkts (dropped 31, overlimits 0)
 backlog 44p

 qdisc sfq 20: quantum 1492b perturb 10sec
 Sent 5709728 bytes 10685 pkts (dropped 0, overlimits 0)

 qdisc sfq 10: quantum 1492b perturb 10sec
 Sent 1030801 bytes 24100 pkts (dropped 0, overlimits 0)

 qdisc htb 1: r2q 10 default 20 direct_packets_stat 1
 Sent 30411833 bytes 71056 pkts (dropped 31, overlimits 124038)
 backlog 44p

 class htb 1:1 root rate 123Kbit ceil 123Kbit burst 6Kb cburst 1756b
 Sent 30349204 bytes 71011 pkts (dropped 0, overlimits 0)
 rate 15044bps 29pps
 lended: 33791 borrowed: 0 giants: 0
 tokens: 87698 ctokens: -140568

class htb 1:10 parent 1:1 leaf 10: prio 1 rate 73Kbit ceil 123Kbit burst 6Kb cburst 1756b
 Sent 1030801 bytes 24100 pkts (dropped 0, overlimits 0)
 rate 400bps 9pps
 lended: 24100 borrowed: 0 giants: 0
 tokens: 527432 ctokens: 84765

class htb 1:20 parent 1:1 leaf 20: prio 2 rate 36Kbit ceil 123Kbit burst 6Kb cburst 1756b
 Sent 5709728 bytes 10685 pkts (dropped 0, overlimits 0)
 rate 3174bps 4pps
 lended: 8146 borrowed: 2539 giants: 0
 tokens: 129213 ctokens: 88508

class htb 1:30 parent 1:1 leaf 30: prio 3 rate 12Kbit ceil 103Kbit burst 6Kb cburst 1730b
 Sent 23671255 bytes 36271 pkts (dropped 31, overlimits 0)
 rate 11346bps 15pps backlog 45p
 lended: 4974 borrowed: 31252 giants: 0
 tokens: -1637974 ctokens: -146555
1:10 voor het high prio verkeer

1:20 voor default verkeer (o.a. http)

1:30 voor emule/gnutella up- en downloads

Verwijderd

Shaping is inderdaad langzamer, maar niet zozeer omdat het zoveel van de processor vraagt, maar omdat het een constante snelheid vereist, waardoor ook queues niet zullen overlopen en het uiteindelijk niets uithaalt.

Als je de documentatie had gelezen, wist je dat zowel upload- als downloadsnelheid iets bijgesteld dienen te worden. Ik citeer:

code:
1
2
# Set the following values to somewhat less than your actual download
# and uplink speed. In kilobits. Also set the device that is to be shaped.


En dat is ook wat je moet doen. Ik heb hier een 768/128 ADSL-verbinding. Ik heb goede resultaten met 710/115.

  • tech-no-logical
  • Registratie: December 2000
  • Laatst online: 24-04 14:10
uit die statistieken kan ik niet veel lezen (te weinig ervaring met queueing, zeker onder linux).

als je het probleem met een lager geschatte uplink nog steeds hebt, ligt het aan de overhead van de shaping, of aan het feit dat je downlink vol zit (shaping/queueing doet alleen het outbound verkeer). je hebt het inbound verkeer een beetje in de gaten gehouden ?

  • Arnout
  • Registratie: December 2000
  • Laatst online: 02-05 07:56
Verwijderd schreef op 25 August 2003 @ 23:05:
Als je de documentatie had gelezen, wist je dat zowel upload- als downloadsnelheid iets bijgesteld dienen te worden. Ik citeer:
[...]
Heb de documentatie gelezen. Bijkomend voordeel is dat de verbinding sneller is dan de opgegeven 128kbit, meestal 17kb/sec namelijk. Daarom heb ik er 123 van gemaakt, maar begrijp uit jouw config dat dit nog lager moet.

Downlink shapen heeft niet echt veel nut, die zit bijna nooit vol.

  • Arnout
  • Registratie: December 2000
  • Laatst online: 02-05 07:56
Gisteravond de hele avond bezig geweest om Emule/EDonkey2000 verkeer onder controle te krijgen.

Hierbij het volgende ontdekt:
* erg veel kleine pakketten
* niet alleen op poort 4662, maar ook via andere poorten (bijv. 80). (remote)

Nu geeft mijn script bijv. voorrang aan kleine pakketten (ACK's van downstreams) en aan webserver verkeer (zowel lokaal poort 80 als remote).

Bij deze setup in combinatie met bovenstaande bevindingen is het dus logisch dat Edonkey het hele netwerk vertraagt, ook al gebruik je traffic shaping.

Heeft iemand een oplossing? 't Enige wat ik nog kan doen is het markeren van pakketten die naar de LAN host gaan die Edonkey draait (met iptables).

Hierbij nog wat output (firewall draait sinds gister, mangle table is net weer gevuld).

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
piethein:/etc/init.d# iptables -L -v -t mangle
Chain PREROUTING (policy ACCEPT 33M packets, 16G bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain INPUT (policy ACCEPT 3481K packets, 3816M bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy ACCEPT 30M packets, 12G bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 2503K packets, 747M bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain POSTROUTING (policy ACCEPT 32M packets, 13G bytes)
 pkts bytes target     prot opt in     out     source               destination
46164   13M MONLIMITEUR-OUT  all  --  any    ppp0    anywhere             anywhere

Chain MONLIMITEUR-OUT (1 references)
 pkts bytes target     prot opt in     out     source               destination
 6785 6141K MARK       tcp  --  any    any     anywhere             anywhere           tcp spts:0:1024 MARK set 0x17
  599  328K MARK       tcp  --  any    any     anywhere             anywhere           tcp dpts:0:1024 MARK set 0x17
    0     0 MARK       tcp  --  any    any     anywhere             anywhere           tcp dpt:ftp-data MARK set 0x19
  184  8334 MARK       tcp  --  any    any     anywhere             anywhere           tcp dpt:5190 MARK set 0x17
   26  1094 MARK       tcp  --  any    any     anywhere             anywhere           tcp dpt:1863 MARK set 0x17
    8   736 MARK       icmp --  any    any     anywhere             anywhere           MARK set 0x14
 3302  153K MARK       udp  --  any    any     anywhere             anywhere           MARK set 0x15
    0     0 MARK       tcp  --  any    any     anywhere             anywhere           tcp dpt:ssh MARK set 0x16
 2610  581K MARK       tcp  --  any    any     anywhere             anywhere           tcp spt:ssh MARK set 0x16
 4167 5556K MARK       tcp  --  any    any     anywhere             anywhere           tcp spt:www MARK set 0x18
10465 2093K MARK       tcp  --  any    any     anywhere             anywhere           tcp dpt:4662 MARK set 0x1a
    0     0 MARK       tcp  --  any    any     anywhere             anywhere           tcp spt:3662 MARK set 0x1a
 1005 45397 MARK       udp  --  any    any     anywhere             anywhere           udp dpt:4665 MARK set 0x1a
24784 4282K MARK       all  --  any    any     anywhere             anywhere           MARK match 0x0 MARK set 0x19

[ Voor 69% gewijzigd door Arnout op 28-08-2003 12:12 ]

Pagina: 1