From cd56e4e08e86b5ee82b1e395356a0bccb53de74d Mon Sep 17 00:00:00 2001 From: Ali Saidi Date: Tue, 18 Jan 2005 17:55:35 -0500 Subject: [PATCH 3/9] Ability to check formulas --HG-- extra : convert_revision : 68a2a19cceb4a8cf8a2798ee5c019d25c0fca3cc --- util/stats/info.py | 24 ++++++++++++++++++++++-- util/stats/stats.py | 25 ++++++++++++++----------- 2 files changed, 36 insertions(+), 13 deletions(-) diff --git a/util/stats/info.py b/util/stats/info.py index d11619765..644c15264 100644 --- a/util/stats/info.py +++ b/util/stats/info.py @@ -3,6 +3,8 @@ import operator, re, types source = None display_run = 0 +global globalTicks +globalTicks = None def issequence(t): return isinstance(t, types.TupleType) or isinstance(t, types.ListType) @@ -130,6 +132,7 @@ def cmp(a, b): return 1 class Statistic(object): + def __init__(self, data): self.__dict__.update(data.__dict__) if not self.__dict__.has_key('value'): @@ -138,9 +141,25 @@ class Statistic(object): self.__dict__['bins'] = None if not self.__dict__.has_key('ticks'): self.__dict__['ticks'] = None + if 'vc' not in self.__dict__: + self.vc = {} def __getattribute__(self, attr): + if attr == 'ticks': + if self.__dict__['ticks'] != globalTicks: + self.__dict__['value'] = None + self.__dict__['ticks'] = globalTicks + return self.__dict__['ticks'] if attr == 'value': + if self.__dict__['ticks'] != globalTicks: + if self.__dict__['ticks'] != None and \ + len(self.__dict__['ticks']) == 1: + self.vc[self.__dict__['ticks'][0]] = self.__dict__['value'] + self.__dict__['ticks'] = globalTicks + if len(globalTicks) == 1 and self.vc.has_key(globalTicks[0]): + self.__dict__['value'] = self.vc[globalTicks[0]] + else: + self.__dict__['value'] = None if self.__dict__['value'] == None: self.__dict__['value'] = self.getValue() return self.__dict__['value'] @@ -152,11 +171,12 @@ class Statistic(object): if attr == 'bins': if value is not None: value = source.getBin(value) - elif attr == 'ticks' and type(value) is str: - value = [ int(x) for x in value.split() ] + #elif attr == 'ticks' and type(value) is str: + # value = [ int(x) for x in value.split() ] self.__dict__[attr] = value self.__dict__['value'] = None + self.vc = {} else: super(Statistic, self).__setattr__(attr, value) diff --git a/util/stats/stats.py b/util/stats/stats.py index 62819c397..892ad143e 100755 --- a/util/stats/stats.py +++ b/util/stats/stats.py @@ -2,6 +2,7 @@ from __future__ import division import re, sys, math + def usage(): print '''\ Usage: %s [-E] [-F] [-d ] [-g ] [-h ] [-p] @@ -257,18 +258,18 @@ def commands(options, command, args): for stat in stats: print "%s:" % stat.name - print "%-30s %12s %12s %4s %5s %5s %5s" % \ - ("run name", "average", "stdev", ">10%", ">1SDV", ">2SDV", "SAMP") - print "%-30s %12s %12s %4s %5s %5s %5s" % \ - ("------------------------------", "------------", - "------------", "----", "-----", "-----", "-----") + print "%-20s %12s %12s %4s %5s %5s %5s %6s" % \ + ("run name", "average", "stdev", ">10%", ">1SDV", ">2SDV", "SAMP", "CV") + print "%-20s %12s %12s %4s %5s %5s %5s %6s" % \ + ("--------------------", "------------", + "------------", "----", "-----", "-----", "-----", "------") #loop through all the selected runs for run in runs: info.display_run = run.run; runTicks = info.source.retTicks([ run ]) #throw away the first one, it's 0 runTicks.pop(0) - stat.ticks = runTicks + info.globalTicks = runTicks avg = float(stat) stdev = 0 numoutsideavg = 0 @@ -277,7 +278,8 @@ def commands(options, command, args): #loop through all the various ticks for each run for tick in runTicks: - stat.ticks = str(tick) + #stat.ticks = str(tick) + info.globalTicks = [ tick ] val = float(stat) if (val < (avg * .9)) or (val > (avg * 1.1)): numoutsideavg += 1 @@ -285,17 +287,18 @@ def commands(options, command, args): stdev = math.sqrt(stdev / len(runTicks)) for tick in runTicks: - stat.ticks = str(tick) + info.globalTicks = [ tick ] val = float(stat) if (val < (avg - stdev)) or (val > (avg + stdev)): numoutside1std += 1 if (val < (avg - (2*stdev))) or (val > (avg + (2*stdev))): numoutside2std += 1 - print "%-30s %12s %12s %4s %5s %5s %5s" % \ + print "%-20s %12s %12s %4s %5s %5s %5s %6s" % \ (run.name, "%.1f" % avg, "%.1f" % stdev, "%d" % numoutsideavg, "%d" % numoutside1std, - "%d" % numoutside2std, "%d" % len(runTicks)) + "%d" % numoutside2std, "%d" % len(runTicks), + "%.1f" % (stdev/avg*100)) return @@ -320,7 +323,7 @@ def commands(options, command, args): else: if options.ticks: print 'only displaying sample %s' % options.ticks - stat.ticks = options.ticks + info.globalTicks = [ int(x) for x in options.ticks.split() ] if options.binned: print 'kernel ticks' From cd79f6b698625428e681e0177627392bb369a9f5 Mon Sep 17 00:00:00 2001 From: Nathan Binkert Date: Tue, 18 Jan 2005 23:01:17 -0500 Subject: [PATCH 6/9] Make the config stuff work on 64-bit machines objects/Pci.mpy: specify that the value is a long so that it is not interpreted as a negative value. --HG-- extra : convert_revision : 3b0df8711da5934aff0096ba54fb79da808e987b --- objects/Pci.mpy | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/objects/Pci.mpy b/objects/Pci.mpy index d6917b020..a7763139f 100644 --- a/objects/Pci.mpy +++ b/objects/Pci.mpy @@ -1,7 +1,7 @@ from Device import FooPioDevice, DmaDevice simobj PciConfigData(FooPioDevice): - addr = 0xffffffffffffffff + addr = 0xffffffffffffffffL VendorID = Param.UInt16("Vendor ID") DeviceID = Param.UInt16("Device ID") Command = Param.UInt16(0, "Command") @@ -47,4 +47,4 @@ simobj PciDevice(DmaDevice): pci_func = Param.Int("PCI function code") configdata = Param.PciConfigData(Super, "PCI Config data") configspace = Param.PciConfigAll(Super, "PCI Configspace") - addr = 0xffffffffffffffff + addr = 0xffffffffffffffffL From b65f365474e6e861275cdab493fd1ad62b98933b Mon Sep 17 00:00:00 2001 From: Nathan Binkert Date: Wed, 19 Jan 2005 12:43:06 -0500 Subject: [PATCH 8/9] fix unserialization of PacketFifo dev/pktfifo.cc: fix unserialization. calling resize on a list just sticks uninitialized garbage into the list. --HG-- extra : convert_revision : 1cbff596dd0b88560e23b9368ec75a7369beb9d9 --- dev/pktfifo.cc | 1 - 1 file changed, 1 deletion(-) diff --git a/dev/pktfifo.cc b/dev/pktfifo.cc index ae82123cf..79a96cc1d 100644 --- a/dev/pktfifo.cc +++ b/dev/pktfifo.cc @@ -60,7 +60,6 @@ PacketFifo::unserialize(const string &base, Checkpoint *cp, paramIn(cp, section, base + ".packets", fifosize); fifo.clear(); - fifo.resize(fifosize); for (int i = 0; i < fifosize; ++i) { PacketPtr p = new PacketData(16384); From 10371be698b411bc068137bf2add0c5a74ec60eb Mon Sep 17 00:00:00 2001 From: Ron Dreslinski Date: Wed, 19 Jan 2005 16:26:19 -0500 Subject: [PATCH 9/9] Fix serialization of txPacket (need to properly calculate the length before serialization) --HG-- extra : convert_revision : e93321495d19afb86949daf2c14102ffb6bcef41 --- dev/ns_gige.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/dev/ns_gige.cc b/dev/ns_gige.cc index aa47436f7..e799c10d2 100644 --- a/dev/ns_gige.cc +++ b/dev/ns_gige.cc @@ -2352,6 +2352,7 @@ NSGigE::serialize(ostream &os) bool txPacketExists = txPacket; SERIALIZE_SCALAR(txPacketExists); if (txPacketExists) { + txPacket->length = txPacketBufPtr - txPacket->data; txPacket->serialize("txPacket", os); uint32_t txPktBufPtr = (uint32_t) (txPacketBufPtr - txPacket->data); SERIALIZE_SCALAR(txPktBufPtr);