Changeset 7782


Ignore:
Timestamp:
2007-06-30T04:34:03+02:00 (11 years ago)
Author:
nbd
Message:

qos-scripts update:

  • rewrite the RED qdisc calculations and add some comments

this should fix the warnings about bursting (should also fix quirks with various linespeed settings)

  • reduce the calculated overhead for upstream, while i'm at it...
Location:
trunk/package/qos-scripts
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/package/qos-scripts/Makefile

    r7048 r7782  
    1010 
    1111PKG_NAME:=qos-scripts 
    12 PKG_VERSION:=1.1.1 
     12PKG_VERSION:=1.2.0 
    1313PKG_RELEASE:=1 
    1414 
  • trunk/package/qos-scripts/files/usr/lib/qos/generate.sh

    r7571 r7782  
    262262                case "$dir" in 
    263263                        up) 
    264                                 [ "$overhead" = 1 ] && upload=$(($upload * 98 / 100 - (32 * 128 / $upload))) 
     264                                [ "$overhead" = 1 ] && upload=$(($upload * 98 / 100 - (15 * 128 / $upload))) 
    265265                                dev="$device" 
    266266                                rate="$upload" 
  • trunk/package/qos-scripts/files/usr/lib/qos/tcrules.awk

    r6878 r7782  
    7878        avpkt = 1200 
    7979        for (i = 1; i <= n; i++) { 
    80                 ql = int((avgrate[i] + linespeed) * 1024 / (8 * pktsize[i])) 
    8180                printf "tc qdisc add dev "device" parent 1:"class[i]"0 handle "class[i]"00: " 
     81 
     82                # RED parameters - also used to determine the queue length for sfq 
     83                # calculate min value. for links <= 256 kbit, we use 1500 bytes 
     84                # use 50 ms queue length as min threshold for faster links 
     85                # max threshold is fixed to 3*min 
     86                base_pkt=3000 
     87                base_rate=256 
     88                min_lat=50 
     89                if (maxrate[i] <= base_rate) min = base_pkt 
     90                else min = int(maxrate[i] * 1024 / 8 * 0.05) 
     91                max = 3 * min 
     92                limit = (min + max) * 3 
     93 
    8294                if (rtm1[i] > 0) { 
    8395                        # rt class - use sfq 
    84                         print "sfq perturb 2 limit " ql 
     96                        print "sfq perturb 2 limit "  limit 
    8597                } else { 
    86                         # non-rt class - use red 
    87                         min = int(maxrate[i] * 1024 / 8 * 0.05) 
    88                         if (min < avpkt) min = avpkt 
    89                         dqb = 8 * min; 
    90                         max = int(2.1*min) 
    91                         rburst = int((2*min + max) / (3 * avpkt)) 
     98                        # non-rt class - use RED 
     99 
     100                        avpkt = pktsize[i] 
     101                        # don't use avpkt values less than 500 bytes 
     102                        if (avpkt < 500) avpkt = 500 
     103                        # if avpkt is too close to min, scale down avpkt to allow proper bursting 
     104                        if (avpkt > min * 0.70) avpkt *= 0.70 
     105 
     106 
     107                        # according to http://www.cs.unc.edu/~jeffay/papers/IEEE-ToN-01.pdf a drop 
     108                        # probability somewhere between 0.1 and 0.2 should be a good tradeoff 
     109                        # between link utilization and response time (0.1: response; 0.2: utilization) 
     110                        prob="0.12" 
     111                 
     112                        rburst=int((2*min + max) / (3 * avpkt)) 
    92113                        if (rburst < 2) rburst = 2 
    93                         print "red min " min " max " max " burst " rburst " avpkt " avpkt " limit " dqb " probability 0.04 ecn" 
     114                        print "red min " min " max " max " burst " rburst " avpkt " avpkt " limit " limit " probability " prob " ecn" 
    94115                } 
    95116        } 
Note: See TracChangeset for help on using the changeset viewer.