added total bytes/bandwidth/packets formulas to nics
authorAli Saidi <saidi@eecs.umich.edu>
Wed, 19 Jan 2005 23:40:02 +0000 (18:40 -0500)
committerAli Saidi <saidi@eecs.umich.edu>
Wed, 19 Jan 2005 23:40:02 +0000 (18:40 -0500)
cleaned up stability code and wrote some better help for stats.py
fixed sample bug in info.py

dev/ns_gige.cc:
dev/ns_gige.hh:
dev/sinic.cc:
dev/sinic.hh:
    add total bandwidth/packets/bytes stats
util/stats/info.py:
    fixed samples bug
util/stats/stats.py:
    cleaned up stability code and wrote a bit better help

--HG--
extra : convert_revision : cae06f4fac744d7a51ee0909f21f03509151ea8f

dev/ns_gige.cc
dev/ns_gige.hh
dev/sinic.cc
dev/sinic.hh
util/stats/info.py
util/stats/stats.py

index aa47436f79330fdbdc77b478fee15ca47f24c7bb..613677875052007aa1ddd37c83329f365624746a 100644 (file)
@@ -244,7 +244,6 @@ NSGigE::regStats()
         .precision(0)
         ;
 
-
     txBandwidth
         .name(name() + ".txBandwidth")
         .desc("Transmit Bandwidth (bits/s)")
@@ -259,6 +258,34 @@ NSGigE::regStats()
         .prereq(rxBytes)
         ;
 
+    totBandwidth
+        .name(name() + ".totBandwidth")
+        .desc("Total Bandwidth (bits/s)")
+        .precision(0)
+        .prereq(totBytes)
+        ;
+
+    totPackets
+        .name(name() + ".totPackets")
+        .desc("Total Packets")
+        .precision(0)
+        .prereq(totBytes)
+        ;
+
+    totBytes
+        .name(name() + ".totBytes")
+        .desc("Total Bytes")
+        .precision(0)
+        .prereq(totBytes)
+        ;
+
+    totPacketRate
+        .name(name() + ".totPPS")
+        .desc("Total Tranmission Rate (packets/s)")
+        .precision(0)
+        .prereq(totBytes)
+        ;
+
     txPacketRate
         .name(name() + ".txPPS")
         .desc("Packet Tranmission Rate (packets/s)")
@@ -449,6 +476,10 @@ NSGigE::regStats()
 
     txBandwidth = txBytes * Stats::constant(8) / simSeconds;
     rxBandwidth = rxBytes * Stats::constant(8) / simSeconds;
+    totBandwidth = txBandwidth + rxBandwidth;
+    totBytes = txBytes + rxBytes;
+    totPackets = txPackets + rxPackets;
+
     txPacketRate = txPackets / simSeconds;
     rxPacketRate = rxPackets / simSeconds;
 }
index bc7a873731113a97891eb62b4c677779263944aa..50472d5bc0dfb48bc822ff14b9914f201f7c22a1 100644 (file)
@@ -379,6 +379,10 @@ class NSGigE : public PciDev
     Stats::Scalar<> descDmaWrites;
     Stats::Scalar<> descDmaRdBytes;
     Stats::Scalar<> descDmaWrBytes;
+    Stats::Formula totBandwidth;
+    Stats::Formula totPackets;
+    Stats::Formula totBytes;
+    Stats::Formula totPacketRate;
     Stats::Formula txBandwidth;
     Stats::Formula rxBandwidth;
     Stats::Formula txPacketRate;
index 56782b589d80f437e70e1007aaf8dac8dbab26f4..fa4cd570ff848b7c990fad1a67fab9b95b03dbf4 100644 (file)
@@ -191,6 +191,34 @@ Device::regStats()
         .prereq(rxBytes)
         ;
 
+    totBandwidth
+        .name(name() + ".totBandwidth")
+        .desc("Total Bandwidth (bits/s)")
+        .precision(0)
+        .prereq(totBytes)
+        ;
+
+    totPackets
+        .name(name() + ".totPackets")
+        .desc("Total Packets")
+        .precision(0)
+        .prereq(totBytes)
+        ;
+
+    totBytes
+        .name(name() + ".totBytes")
+        .desc("Total Bytes")
+        .precision(0)
+        .prereq(totBytes)
+        ;
+
+    totPacketRate
+        .name(name() + ".totPPS")
+        .desc("Total Tranmission Rate (packets/s)")
+        .precision(0)
+        .prereq(totBytes)
+        ;
+
     txBytes
         .name(name() + ".txBytes")
         .desc("Bytes Transmitted")
@@ -258,6 +286,9 @@ Device::regStats()
 
     txBandwidth = txBytes * Stats::constant(8) / simSeconds;
     rxBandwidth = rxBytes * Stats::constant(8) / simSeconds;
+    totBandwidth = txBandwidth + rxBandwidth;
+    totBytes = txBytes + rxBytes;
+    totPackets = txPackets + rxPackets;
     txPacketRate = txPackets / simSeconds;
     rxPacketRate = rxPackets / simSeconds;
 }
index ef515ffad8e3099df544de2987ab3fb5c3add4fb..25a433d5d87848ebe6586f801c057f92d88265c1 100644 (file)
@@ -262,6 +262,10 @@ class Device : public Base
 
     Stats::Scalar<> txBytes;
     Stats::Formula  txBandwidth;
+    Stats::Formula totBandwidth;
+    Stats::Formula totPackets;
+    Stats::Formula totBytes;
+    Stats::Formula totPacketRate;
     Stats::Scalar<> txPackets;
     Stats::Formula  txPacketRate;
     Stats::Scalar<> txIpPackets;
index 644c15264d0441d901a8ec7ad7b6aa98ffe31128..fb46a2d55eed5951bf5da7e4ed9b093152d77cb5 100644 (file)
@@ -307,7 +307,7 @@ class Scalar(Statistic,FormulaStat):
 
 class Vector(Statistic,FormulaStat):
     def getValue(self):
-        return source.data(self, self.bins);
+        return source.data(self, self.bins, self.ticks);
 
     def display(self):
         import display
index 892ad143e36e59d967a073d309a2a95f32954509..c9b7ab2ac75d80b8e3c64166b8998bccc85125ce 100755 (executable)
@@ -6,7 +6,19 @@ import re, sys, math
 def usage():
     print '''\
 Usage: %s [-E] [-F] [-d <db> ] [-g <get> ] [-h <host>] [-p]
-       [-s <system>] [-r <runs> ] [-u <username>] <command> [command args]
+       [-s <system>] [-r <runs> ] [-T <samples>] [-u <username>]
+       <command> [command args]
+
+       commands    extra parameters   description
+       ----------- ------------------ ---------------------------------------
+       bins        [regex]            List bins (only matching regex)
+       formula     <formula>          Evaluated formula specified
+       formulas    [regex]            List formulas (only matching regex)
+       runs        none               List all runs in database
+       samples     none               List samples present in database
+       stability   <pairnum> <stats>  Calculated statistical info about stats
+       stat        <regex>            Show stat data (only matching regex)
+       stats       [regex]            List all stats (only matching regex)
 ''' % sys.argv[0]
     sys.exit(1)
 
@@ -251,18 +263,26 @@ def commands(options, command, args):
         return
 
     if command == 'stability':
-        stats = info.source.getStat(args[0])
-        info.source.get = "avg"
+        if len(args) < 2:
+            raise CommandException
+
+        try:
+            merge = int(args[0])
+        except ValueError:
+            usage()
+        stats = info.source.getStat(args[1])
+        info.source.get = "sum"
+
 
         #loop through all the stats selected
         for stat in stats:
 
             print "%s:" % stat.name
-            print "%-20s %12s %12s %4s %5s %5s %5s %6s" % \
+            print "%-20s %12s %12s %4s %5s %5s %5s %10s" % \
                   ("run name", "average", "stdev", ">10%", ">1SDV", ">2SDV", "SAMP", "CV")
-            print "%-20s %12s %12s %4s %5s %5s %5s %6s" % \
+            print "%-20s %12s %12s %4s %5s %5s %5s %10s" % \
                   ("--------------------", "------------",
-                   "------------", "----", "-----", "-----", "-----", "------")
+                   "------------", "----", "-----", "-----", "-----", "----------")
             #loop through all the selected runs
             for run in runs:
                 info.display_run = run.run;
@@ -270,38 +290,58 @@ def commands(options, command, args):
                 #throw away the first one, it's 0
                 runTicks.pop(0)
                 info.globalTicks = runTicks
-                avg = float(stat)
+                avg = 0
                 stdev = 0
                 numoutsideavg  = 0
                 numoutside1std = 0
                 numoutside2std = 0
-
+                pairRunTicks = []
+                if float(stat) == 1e300*1e300:
+                    continue
+                for t in range(0, len(runTicks)-(merge-1), merge):
+                    tempPair = []
+                    for p in range(0,merge):
+                        tempPair.append(runTicks[t+p])
+                    pairRunTicks.append(tempPair)
                 #loop through all the various ticks for each run
-                for tick in runTicks:
-                    #stat.ticks = str(tick)
-                    info.globalTicks = [ tick ]
+                for tick in pairRunTicks:
+                    info.globalTicks = tick
+                    avg += float(stat)
+                avg /= len(pairRunTicks)
+                for tick in pairRunTicks:
+                    info.globalTicks = tick
                     val = float(stat)
-                    if (val < (avg * .9)) or (val > (avg * 1.1)):
-                        numoutsideavg += 1
                     stdev += pow((val-avg),2)
-
-                stdev = math.sqrt(stdev / len(runTicks))
-                for tick in runTicks:
-                    info.globalTicks = [ tick ]
+                stdev = math.sqrt(stdev / len(pairRunTicks))
+                for tick in pairRunTicks:
+                    info.globalTicks = tick
                     val = float(stat)
+                    if (val < (avg * .9)) or (val > (avg * 1.1)):
+                        numoutsideavg += 1
                     if (val < (avg - stdev)) or (val > (avg + stdev)):
                         numoutside1std += 1
                     if (val < (avg - (2*stdev))) or (val > (avg + (2*stdev))):
                         numoutside2std += 1
-
-                print "%-20s %12s %12s %4s %5s %5s %5s %6s" % \
-                      (run.name, "%.1f" % avg, "%.1f" % stdev,
-                       "%d" % numoutsideavg, "%d" % numoutside1std,
-                       "%d" % numoutside2std, "%d" % len(runTicks),
-                       "%.1f" % (stdev/avg*100))
+                if avg > 1000:
+                    print "%-20s %12s %12s %4s %5s %5s %5s %10s" % \
+                          (run.name, "%.1f" % avg, "%.1f" % stdev,
+                           "%d" % numoutsideavg, "%d" % numoutside1std,
+                           "%d" % numoutside2std, "%d" % len(pairRunTicks),
+                           "%.3f" % (stdev/avg*100))
+                elif avg > 100:
+                    print "%-20s %12s %12s %4s %5s %5s %5s %10s" % \
+                          (run.name, "%.1f" % avg, "%.1f" % stdev,
+                           "%d" % numoutsideavg, "%d" % numoutside1std,
+                           "%d" % numoutside2std, "%d" % len(pairRunTicks),
+                           "%.5f" % (stdev/avg*100))
+                else:
+                    print "%-20s %12s %12s %4s %5s %5s %5s %10s" % \
+                          (run.name, "%.5f" % avg, "%.5f" % stdev,
+                           "%d" % numoutsideavg, "%d" % numoutside1std,
+                           "%d" % numoutside2std, "%d" % len(pairRunTicks),
+                           "%.7f" % (stdev/avg*100))
         return
 
-
     if command == 'stats':
         if len(args) == 0:
             info.source.listStats()