Re: [LARTC] Testing HTB with 2.5.68 Kernel.

Linux Advanced Routing and Traffic Control

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



 
  Hi,

 I did a comprehensive testing with 2.3 and 2.4.20
kernels. I used an Ixia as a traffic generator for
pumping data to the Linux
box. In the Linux box I have two interfaces, one is
used for data input and
one is used for data output.

         -------            --------
         |     |1 ---> eth0 |Linux |
         |Ixia |2 <--- eth1 |      |
         -------            --------
 I set the policing setting to eth1. The Linux box
forwarded every packet it
receives on interface eth0.

 In my tests I tried different rate limits and
different packet sizes. I
found a linear relation between the burst and the
traffic, which give the
most accurate results.

 I am trying to verify the same results using 2.5.68
kernel.

 The reason it works for you is because you were using
a rate limit of
1000kbit and a packet size of 512. I verified your
test, and it looks like
it works fine. When I tried different packet sizes,
and different rates the
HTB scheduling doesn't work well.

   The following is a sample of test results:
  Test 1:
  Pumping: 74Mbit/s
  Rate limit: 1000Kbit

  Results:

  Packet size    Received traffic (eth1)
      64             27Mbit/s
      128            42Mbit/s
      512            1.3Mbit/s
      1500           1.1Mbit/s

  Test 2:
  Pumping: 74Mbit/s
  Rate limit: 2000Kbit

  Results:

  Packet size    Received traffic (eth1)
      64             27Mbit/s
      512            4Mbit/s
      1500           2.4Mbit/s

  Test 3:
  Pumping: 74Mbit/s
  Rate limit: 6000Kbit

  Results:

  Packet size    Received traffic (eth1)
      64             27Mbit/s
      512            74Mbit/s
      1500           6Mbit/s

  Test 4:
  Pumping: 74Mbit/s
  Rate limit: 8000Kbit

  Results:

  Packet size    Received traffic (eth1)
      64             27Mbit/s
      512            74Mbit/s
      1500           12Mbit/s

  As you can see from the results, the rate shaping
functionality doesn't
works in most
  Cases. As I maintained before, these tests works
very well in 2.4.20.
 
              Yaron

--- José_Luis_Domingo_López <lartc@xxxxxxxxxxxxx>
wrote:
> On Saturday, 03 May 2003, at 19:20:21 -0700,
> Yaron Benita wrote:
> 
> >  I enabled the HTB scheduler option in the kernel.
> > Than I created an HTB qdisc on eth1 using "tc"
> tool. I
> > added a class with a rate limit of 30000kbits, and
> a
> > filter attached to this class.  
> > 
> Please send your mails first to the mailing list,
> and maybe even to
> certain people. You will get more and better
> answers, and everything
> will get "archived" and be searcheable through usual
> search engines.
> 
> >  I used a traffic generator to send data to eth0
> which
> > forwared the data to eth1 and than back to the
> traffic
> > generator. I sent a bandwidth of 70000kbits, and
> the
> > same traffic was forwarded through interface eth1.
> 
> > 
> >  This test shows that the traffic was not shaped
> to
> > 30000kbits. The same test works greate in 2.4.20.
> > 
> I have set up wondershaper 1.1a in my box.
> Configured it for an upload
> limit of 1000 Kbps, and used "netcat" on the server
> and client sides,
> measuring bandwidth with both "iptraf" and
> "gkrellm", and transfer rates
> are the ones configured.
> 
> The configuration used in my test follows. Traffic
> was generated on the
> client side via "cat /large/archive | nc remote_ip
> 8000", and received
> on the server side with "nc -l -p 8000 > /dev/null".
> Hope it helps.
> 
> #!/bin/bash
> DOWNLINK=1000
> UPLINK=1000
> DEV=eth0
> if [ "$1" = "status" ]
> then
> 	tc -s qdisc ls dev $DEV
> 	tc -s class ls dev $DEV
> 	exit
> fi
> 
> # clean existing down- and uplink qdiscs, hide
> errors
> tc qdisc del dev $DEV root    2> /dev/null >
> /dev/null
> tc qdisc del dev $DEV ingress 2> /dev/null >
> /dev/null
> 
> if [ "$1" = "stop" ] 
> then 
> 	exit
> fi
> 
> ###### 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 ${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 $[9*$UPLINK/10]kbit \
>    burst 6k prio 2
> tc class add dev $DEV parent 1:1 classid 1:30 htb
> rate $[8*$UPLINK/10]kbit \
>    burst 6k prio 2
> # 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
> # rest is 'non-interactive' ie 'bulk' and ends up in
> 1:20
> 
> tc filter add dev $DEV parent 1: protocol ip prio 18
> u32 \
>    match ip dst 0.0.0.0/0 flowid 1:20
> 
> 
> ########## downlink #############
> # slow downloads down to somewhat less than the real
> speed  to prevent 
> # queuing at our ISP. Tune to see how high you can
> set it.
> # ISPs tend to have *huge* queues to make sure big
> downloads are fast
> #
> # attach ingress policer:
> 
> tc qdisc add dev $DEV handle ffff: ingress
> 
> # filter *everything* to it (0.0.0.0/0), drop
> everything that's
> # coming in too fast:
> 
> tc filter add dev $DEV parent ffff: protocol ip prio
> 50 u32 match ip src \
>    0.0.0.0/0 police rate ${DOWNLINK}kbit burst 10k
> drop flowid :1
> 
> -- 
> Jose Luis Domingo Lopez
> Linux Registered User #189436     Debian Linux Sid
> (Linux 2.5.68)


__________________________________
Do you Yahoo!?
The New Yahoo! Search - Faster. Easier. Bingo.
http://search.yahoo.com


[Index of Archives]     [LARTC Home Page]     [Netfilter]     [Netfilter Development]     [Network Development]     [Bugtraq]     [GCC Help]     [Yosemite News]     [Linux Kernel]     [Fedora Users]
  Powered by Linux