merge bwlimit changes from util-vserver-pl
authorS.Çağlar Onur <caglar@cs.princeton.edu>
Mon, 3 May 2010 19:36:32 +0000 (19:36 +0000)
committerS.Çağlar Onur <caglar@cs.princeton.edu>
Mon, 3 May 2010 19:36:32 +0000 (19:36 +0000)
python/bwlimit.py

index bb37315..a9e204a 100644 (file)
@@ -125,6 +125,8 @@ cburst = None
 #          |                            |
 #   1:10 (8bit, 5mbit)           1:20 (8bit, 1gbit)
 #          |                            |
+#  1:100 (8bit, 5mbit)                  |
+#          |                            |
 # 1:1000 (8bit, 5mbit),        1:2000 (8bit, 1gbit),
 # 1:1001 (8bit, 5mbit),        1:2001 (8bit, 1gbit),
 # 1:1002 (1mbit, 5mbit),       1:2002 (1mbit, 1gbit),
@@ -154,24 +156,24 @@ default_share = 1
 # be off by a small fraction.
 suffixes = {
     "":         1,
-    "bit":     1,
-    "kibit":   1024,
-    "kbit":    1000,
-    "mibit":   1024*1024,
-    "mbit":    1000000,
-    "gibit":   1024*1024*1024,
-    "gbit":    1000000000,
-    "tibit":   1024*1024*1024*1024,
-    "tbit":    1000000000000,
-    "bps":     8,
-    "kibps":   8*1024,
-    "kbps":    8000,
-    "mibps":   8*1024*1024,
-    "mbps":    8000000,
-    "gibps":   8*1024*1024*1024,
-    "gbps":    8000000000,
-    "tibps":   8*1024*1024*1024*1024,
-    "tbps":    8000000000000
+    "bit":      1,
+    "kibit":    1024,
+    "kbit":     1000,
+    "mibit":    1024*1024,
+    "mbit":     1000000,
+    "gibit":    1024*1024*1024,
+    "gbit":     1000000000,
+    "tibit":    1024*1024*1024*1024,
+    "tbit":     1000000000000,
+    "bps":      8,
+    "kibps":    8*1024,
+    "kbps":     8000,
+    "mibps":    8*1024*1024,
+    "mbps":     8000000,
+    "gibps":    8*1024*1024*1024,
+    "gbps":     8000000000,
+    "tibps":    8*1024*1024*1024*1024,
+    "tbps":     8000000000000
 }
 
 
@@ -321,6 +323,16 @@ def tc(cmd):
     return run(TC + " " + cmd)
 
 
+def stop(dev = dev):
+    '''
+    Turn off all queing.  Stops all slice HTBS and reverts to pfifo_fast (the default).
+    '''
+    try:
+        for i in range(0,2):
+            tc("qdisc del dev %s root" % dev)
+    except: pass
+
+
 def init(dev = dev, bwcap = bwmax):
     """
     (Re)initialize the bandwidth limits on this node
@@ -357,6 +369,12 @@ def init(dev = dev, bwcap = bwmax):
     tc("class add dev %s parent 1:1 classid 1:10 htb rate %dbit ceil %dbit" % \
        (dev, bwmin, bwcap))
 
+    # Set up a subclass for DRL(Distributed Rate Limiting). 
+    # DRL will directly modify that subclass implementing the site limits.
+    tc("class add dev %s parent 1:10 classid 1:100 htb rate %dbit ceil %dbit" % \
+       (dev, bwmin, bwcap))
+
+
     # Set up a subclass that represents "exemption" from the node
     # bandwidth cap. Once the node bandwidth cap is reached, bandwidth
     # to exempt destinations can still be fairly shared up to bwmax.
@@ -547,7 +565,7 @@ def on(xid, dev = dev, share = None, minrate = None, maxrate = None, minexemptra
         minexemptrate = maxexemptrate
 
     # Set up subclasses for the slice
-    tc("class replace dev %s parent 1:10 classid 1:%x htb rate %dbit ceil %dbit quantum %d" % \
+    tc("class replace dev %s parent 1:100 classid 1:%x htb rate %dbit ceil %dbit quantum %d" % \
        (dev, default_minor | xid, minrate, maxrate, share * quantum))
 
     tc("class replace dev %s parent 1:20 classid 1:%x htb rate %dbit ceil %dbit quantum %d" % \
@@ -563,8 +581,8 @@ def on(xid, dev = dev, share = None, minrate = None, maxrate = None, minexemptra
        (dev, exempt_minor | xid, exempt_minor | xid))
 
 
-def set(xid, share = None, minrate = None, maxrate = None, minexemptrate = None, maxexemptrate = None, dev = dev):
-    on(xid = xid, dev = dev, share = share, 
+def set(xid, share = None, minrate = None, maxrate = None, minexemptrate = None, maxexemptrate = None, dev = dev ):
+    on(xid = xid, dev = dev, share = share,
        minrate = minrate, maxrate = maxrate,
        minexemptrate = minexemptrate, maxexemptrate = maxexemptrate)
 
@@ -617,7 +635,7 @@ Usage:
 %s [OPTION]... [COMMAND] [ARGUMENT]...
 
 Options:
-       -d device       Network interface (default: %s)
+        -d device   Network interface (default: %s)
         -r rate         Node bandwidth cap (default: %s)
         -q quantum      Share multiplier (default: %d bytes)
         -n              Print rates in numeric bits per second
@@ -661,6 +679,9 @@ def main():
         elif opt == '-h':
             usage()
 
+    if bwcap == -1:
+        return 0
+
     if len(argv):
         if argv[0] == "init" or (argv[0] == "on" and len(argv) == 1):
             # (Re)initialize