Changeset 31759


Ignore:
Timestamp:
2012-05-16T17:23:16+02:00 (4 years ago)
Author:
nbd
Message:

qos-scripts: replace sfq/red with fq_codel - massively improves latency under load

Location:
trunk/package/qos-scripts/files/usr/lib/qos
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/package/qos-scripts/files/usr/lib/qos/generate.sh

    r28731 r31759  
    345345        add_insmod cls_fw 
    346346        add_insmod sch_hfsc 
    347         add_insmod sch_sfq 
    348         add_insmod sch_red 
     347        add_insmod sch_fq_codel 
    349348 
    350349        cat <<EOF 
  • trunk/package/qos-scripts/files/usr/lib/qos/tcrules.awk

    r28731 r31759  
    8080        avpkt = 1200 
    8181        for (i = 1; i <= n; i++) { 
    82                 printf "tc qdisc add dev "device" parent 1:"class[i]"0 handle "class[i]"00: " 
     82                print "tc qdisc add dev "device" parent 1:"class[i]"0 handle "class[i]"00: fq_codel" 
     83        } 
    8384 
    84                 # RED parameters - also used to determine the queue length for sfq 
    85                 # calculate min value. for links <= 256 kbit, we use 1500 bytes 
    86                 # use 50 ms queue length as min threshold for faster links 
    87                 # max threshold is fixed to 3*min 
    88                 base_pkt=3000 
    89                 base_rate=256 
    90                 min_lat=50 
    91                 if (maxrate[i] <= base_rate) min = base_pkt 
    92                 else min = int(maxrate[i] * 1024 / 8 * 0.05) 
    93                 max = 3 * min 
    94                 limit = (min + max) * 3 
    95  
    96                 if (qdisc[i] != "") { 
    97                         # user specified qdisc 
    98                         print qdisc[i] " limit " limit 
    99                 } else if (rtm1[i] > 0) { 
    100                         # rt class - use sfq 
    101                         print "sfq perturb 2 limit "  limit 
    102                 } else { 
    103                         # non-rt class - use RED 
    104  
    105                         avpkt = pktsize[i] 
    106                         # don't use avpkt values less than 500 bytes 
    107                         if (avpkt < 500) avpkt = 500 
    108                         # if avpkt is too close to min, scale down avpkt to allow proper bursting 
    109                         if (avpkt > min * 0.70) avpkt *= 0.70 
    110  
    111  
    112                         # according to http://www.cs.unc.edu/~jeffay/papers/IEEE-ToN-01.pdf a drop 
    113                         # probability somewhere between 0.1 and 0.2 should be a good tradeoff 
    114                         # between link utilization and response time (0.1: response; 0.2: utilization) 
    115                         prob="0.12" 
    116                  
    117                         rburst=int((2*min + max) / (3 * avpkt)) 
    118                         if (rburst < 2) rburst = 2 
    119                         print "red min " min " max " max " burst " rburst " avpkt " avpkt " limit " limit " probability " prob " ecn" 
    120                 } 
    121         } 
    122          
    12385        # filter rule 
    12486        for (i = 1; i <= n; i++) { 
Note: See TracChangeset for help on using the changeset viewer.