Overall gist of this is to 'dynamicize' the tracking of functions so you can choose...
authorLisa Hsu <hsul@eecs.umich.edu>
Fri, 5 Mar 2004 02:57:09 +0000 (21:57 -0500)
committerLisa Hsu <hsul@eecs.umich.edu>
Fri, 5 Mar 2004 02:57:09 +0000 (21:57 -0500)
to do it:
in .ini file set binned_fns=foo null bar foo

what this says is, track foo when it is called by null (i.e. anything).  bin bar only when it is called by foo.
essentially, if you have a path of functions to track, the 0th, 2nd, 4th fn listed are the fns to track, and the 1st, 3rd, 5th are their respective callers.

base/statistics.hh:
    turn it back to FS_MEASURE since we already have a build in place
kern/tru64/tru64_events.cc:
    remove FS_MEASURE #defs.  add more DPRINTF's.  manage an anomaly that happens when tracking idle_thread.
kern/tru64/tru64_events.hh:
    remove FS_MEASURE #defs
kern/tru64/tru64_system.cc:
    make DumpState print all the time, but only with DPRINTF.  add a new parameter to tru64System a vector<string> binned_fns, to read in from .ini file.  now all this binning stuff is dynamically generated.
kern/tru64/tru64_system.hh:
    remove all static binning stuff, add support for dynamic
sim/system.cc:
    change nonPath bin name to Kernel, remove FS_MEASURE
sim/system.hh:
    change nonPath to Kernel

--HG--
extra : convert_revision : 9ee813c0a64273bab4125815b7bc8145c5897ec1

base/statistics.hh
kern/tru64/tru64_events.cc
kern/tru64/tru64_events.hh
kern/tru64/tru64_system.cc
kern/tru64/tru64_system.hh
sim/system.cc
sim/system.hh

index c99aadab5e41c22beb10da40c6bc61d50773b9cd..0dad31a5a9cb69a86d1b4558a36755c39840b42f 100644 (file)
@@ -2498,7 +2498,7 @@ struct NoBin
  * binned.  If the typedef is NoBin, nothing is binned.  If it is
  * MainBin, then all stats are binned under that Bin.
  */
-#if defined(STATS_BINNING)
+#if defined(FS_MEASURE)
 typedef MainBin DefaultBin;
 #else
 typedef NoBin DefaultBin;
index f542256e44751632b736a939128f7dba368d6a5f..e018cb242bc646de9472b8b4f7eca967d6f56446 100644 (file)
 #include "kern/tru64/tru64_events.hh"
 #include "mem/functional_mem/memory_control.hh"
 #include "targetarch/arguments.hh"
-
-#ifdef FS_MEASURE
 #include "sim/system.hh"
 #include "sim/sw_context.hh"
-#endif
 
 void
 SkipFuncEvent::process(ExecContext *xc)
@@ -110,7 +107,6 @@ DumpMbufEvent::process(ExecContext *xc)
     }
 }
 
-#ifdef FS_MEASURE
 FnEvent::FnEvent(PCEventQueue *q, const std::string & desc, System *system)
     : PCEvent(q, desc), _name(desc)
 {
@@ -128,13 +124,23 @@ FnEvent::process(ExecContext *xc)
     DPRINTF(TCPIP, "%s: %s Event!!!\n", xc->system->name(), description);
 
     if (ctx && !ctx->callStack.empty()) {
+        DPRINTF(TCPIP, "already a callstack!\n");
         fnCall *last = ctx->callStack.top();
+
+        if (last->name == "idle_thread")
+            ctx->calls++;
+
         if (!xc->system->findCaller(myname(), last->name)) {
+            DPRINTF(TCPIP, "but can't find parent %s\n", last->name);
             return;
         }
         ctx->calls--;
+
+        //assert(!ctx->calls && "on a binned fn, calls should == 0 (but can happen in boot)");
     } else {
+        DPRINTF(TCPIP, "no callstack yet\n");
         if (!xc->system->findCaller(myname(), "")) {
+            DPRINTF(TCPIP, "not the right function, returning\n");
             return;
         }
         if (!ctx)  {
@@ -150,6 +156,7 @@ FnEvent::process(ExecContext *xc)
     ctx->callStack.push(call);
     myBin->activate();
     xc->system->fnCalls++;
+    DPRINTF(TCPIP, "fnCalls for %s is %d\n", description,
+            xc->system->fnCalls.val());
     xc->system->dumpState(xc);
 }
-#endif //FS_MEASURE
index 2067f2ef336b729e4a18afdecc149cc09f5760d4..96e6a8b26ba77394ef42acd3144936be8cb86f3c 100644 (file)
@@ -35,9 +35,7 @@
 
 class ExecContext;
 
-#ifdef FS_MEASURE
 class System;
-#endif
 
 class SkipFuncEvent : public PCEvent
 {
@@ -82,7 +80,6 @@ class DumpMbufEvent : public PCEvent
     virtual void process(ExecContext *xc);
 };
 
-#ifdef FS_MEASURE
 class FnEvent : public PCEvent
 {
   public:
@@ -94,5 +91,4 @@ class FnEvent : public PCEvent
     std::string _name;
     Statistics::MainBin *myBin;
 };
-#endif //FS_MEASURE
 #endif // __TRU64_EVENTS_HH__
index 13f28beabe2f91c7d044bca0f70cc227e17f057f..8df8cc86db98036f79e46a40ef91213662935861 100644 (file)
 #include "targetarch/isa_traits.hh"
 #include "targetarch/vtophys.hh"
 
-//un-comment this to see the state of call stack when it changes.
-//#define SW_DEBUG
-
 using namespace std;
 
 Tru64System::Tru64System(const string _name, const uint64_t _init_param,
                          MemoryController *_memCtrl, PhysicalMemory *_physmem,
                          const string &kernel_path, const string &console_path,
                          const string &palcode, const string &boot_osflags,
-                         const bool _bin)
-     : System(_name, _init_param, _memCtrl, _physmem, _bin), bin(_bin)
+                         const bool _bin, const vector<string> &binned_fns)
+    : System(_name, _init_param, _memCtrl, _physmem, _bin), bin(_bin),
+      binned_fns(binned_fns)
 {
     kernelSymtab = new SymbolTable;
     consoleSymtab = new SymbolTable;
@@ -92,106 +90,6 @@ Tru64System::Tru64System(const string _name, const uint64_t _init_param,
 
     DPRINTF(Loader, "Kernel loaded...\n");
 
-#ifdef FS_MEASURE
-    //INSTRUMENTATION CODEGEN BEGIN ONE
-    if (bin == true) {
-        esIntrBin = new Statistics::MainBin(name() + " es_intr");
-        fnBins.insert(make_pair("es_intr", esIntrBin));
-
-        esRxeofBin = new Statistics::MainBin(name() + " es_rxeof");
-        fnBins.insert(make_pair("es_rxeof", esRxeofBin));
-
-        esNewbufBin = new Statistics::MainBin(name() + " es_newbuf");
-        fnBins.insert(make_pair("es_newbuf", esNewbufBin));
-
-        esDmaLoadBin = new Statistics::MainBin(name() + " es_dma_load");
-        fnBins.insert(make_pair("es_dma_load", esDmaLoadBin));
-
-        dmaMapLoadBin = new Statistics::MainBin(name() + " dma_map_load");
-        fnBins.insert(make_pair("dma_map_load", dmaMapLoadBin));
-
-        etherInputBin = new Statistics::MainBin(name() + " ether_input");
-        fnBins.insert(make_pair("ether_input", etherInputBin));
-
-        netisrInputBin = new Statistics::MainBin(name() + " netisr_input");
-        fnBins.insert(make_pair("netisr_input", netisrInputBin));
-
-        schednetisrIsrBin = new Statistics::MainBin(name() + " schednetisr_isr");
-        fnBins.insert(make_pair("schednetisr_isr", schednetisrIsrBin));
-
-        ipintrBin = new Statistics::MainBin(name() + " ipintr");
-        fnBins.insert(make_pair("ipintr", ipintrBin));
-
-        ipDooptionsBin = new Statistics::MainBin(name() + " ip_dooptions");
-        fnBins.insert(make_pair("ip_dooptions", ipDooptionsBin));
-
-        ipReassBin = new Statistics::MainBin(name() + " ip_reass");
-        fnBins.insert(make_pair("ip_reass", ipReassBin));
-
-        tcpInputBin = new Statistics::MainBin(name() + " tcp_input");
-        fnBins.insert(make_pair("tcp_input", tcpInputBin));
-
-        sbappendBin = new Statistics::MainBin(name() + " sbappend");
-        fnBins.insert(make_pair("sbappend", sbappendBin));
-
-        readBin = new Statistics::MainBin(name() + " read");
-        fnBins.insert(make_pair("read", readBin));
-
-        sooReadBin = new Statistics::MainBin(name() + " soo_read");
-        fnBins.insert(make_pair("soo_read", sooReadBin));
-
-        orecvBin = new Statistics::MainBin(name() + " orecv");
-        fnBins.insert(make_pair("orecv", orecvBin));
-
-        recvitBin = new Statistics::MainBin(name() + " recvit");
-        fnBins.insert(make_pair("recvit", recvitBin));
-
-        soreceiveBin = new Statistics::MainBin(name() + " soreceive");
-        fnBins.insert(make_pair("soreceive", soreceiveBin));
-
-        osendBin = new Statistics::MainBin(name() + " osend");
-        fnBins.insert(make_pair("osend", osendBin));
-
-        writeBin = new Statistics::MainBin(name() + " write");
-        fnBins.insert(make_pair("write", writeBin));
-
-        sooWriteBin = new Statistics::MainBin(name() + " soo_write");
-        fnBins.insert(make_pair("soo_write", sooWriteBin));
-
-        senditBin = new Statistics::MainBin(name() + " sendit");
-        fnBins.insert(make_pair("sendit", senditBin));
-
-        sosendBin = new Statistics::MainBin(name() + " sosend");
-        fnBins.insert(make_pair("sosend", sosendBin));
-
-        tcpSosendBin = new Statistics::MainBin(name() + " tcp_sosend");
-        fnBins.insert(make_pair("tcp_sosend", tcpSosendBin));
-
-        tcpOutputBin = new Statistics::MainBin(name() + " tcp_output");
-        fnBins.insert(make_pair("tcp_output", tcpOutputBin));
-
-        ipOutputBin = new Statistics::MainBin(name() + " ip_output");
-        fnBins.insert(make_pair("ip_output", ipOutputBin));
-
-        etherOutputBin = new Statistics::MainBin(name() + " ether_output");
-        fnBins.insert(make_pair("ether_output", etherOutputBin));
-
-        esStartBin = new Statistics::MainBin(name() + " es_start");
-        fnBins.insert(make_pair("es_start", esStartBin));
-
-        esTransmitBin = new Statistics::MainBin(name() + " es_transmit");
-        fnBins.insert(make_pair("es_transmit", esTransmitBin));
-
-        esTxeofBin = new Statistics::MainBin(name() + " es_txeof");
-        fnBins.insert(make_pair("es_txeof", esTxeofBin));
-
-        idleThreadBin = new Statistics::MainBin(name() + " idle_thread");
-        fnBins.insert(make_pair("idle_thread", idleThreadBin));
-
-    }
-    //INSTRUMENTATION CODEGEN END
-#endif //FS_MEASURE
-
 #ifdef DEBUG
     kernelPanicEvent = new BreakPCEvent(&pcEventQueue, "kernel panic");
     consolePanicEvent = new BreakPCEvent(&pcEventQueue, "console panic");
@@ -208,44 +106,6 @@ Tru64System::Tru64System(const string _name, const uint64_t _init_param,
                                              "debug_printfr", true);
     dumpMbufEvent = new DumpMbufEvent(&pcEventQueue, "dump_mbuf");
 
-#ifdef FS_MEASURE
-    //INSTRUMENTATION CODEGEN BEGIN TWO
-    if (bin == true) {
-          esIntrEvent = new FnEvent(&pcEventQueue, "es_intr", this);
-          esRxeofEvent = new FnEvent(&pcEventQueue, "es_rxeof", this);
-          esNewbufEvent = new FnEvent(&pcEventQueue, "es_newbuf", this);
-          esDmaLoadEvent = new FnEvent(&pcEventQueue, "es_dma_load", this);
-          dmaMapLoadEvent = new FnEvent(&pcEventQueue, "dma_map_load", this);
-          etherInputEvent = new FnEvent(&pcEventQueue, "ether_input", this);
-          netisrInputEvent = new FnEvent(&pcEventQueue, "netisr_input", this);
-          schednetisrIsrEvent = new FnEvent(&pcEventQueue, "schednetisr_isr", this);
-          ipintrEvent = new FnEvent(&pcEventQueue, "ipintr", this);
-          ipDooptionsEvent = new FnEvent(&pcEventQueue, "ip_dooptions", this);
-          ipReassEvent = new FnEvent(&pcEventQueue, "ip_reass", this);
-          tcpInputEvent = new FnEvent(&pcEventQueue, "tcp_input", this);
-          sbappendEvent = new FnEvent(&pcEventQueue, "sbappend", this);
-          readEvent = new FnEvent(&pcEventQueue, "read", this);
-          sooReadEvent = new FnEvent(&pcEventQueue, "soo_read", this);
-          orecvEvent = new FnEvent(&pcEventQueue, "orecv", this);
-          recvitEvent = new FnEvent(&pcEventQueue, "recvit", this);
-          soreceiveEvent = new FnEvent(&pcEventQueue, "soreceive", this);
-          osendEvent = new FnEvent(&pcEventQueue, "osend", this);
-          writeEvent = new FnEvent(&pcEventQueue, "write", this);
-          sooWriteEvent = new FnEvent(&pcEventQueue, "soo_write", this);
-          senditEvent = new FnEvent(&pcEventQueue, "sendit", this);
-          sosendEvent = new FnEvent(&pcEventQueue, "sosend", this);
-          tcpSosendEvent = new FnEvent(&pcEventQueue, "tcp_sosend", this);
-          tcpOutputEvent = new FnEvent(&pcEventQueue, "tcp_output", this);
-          ipOutputEvent = new FnEvent(&pcEventQueue, "ip_output", this);
-          etherOutputEvent = new FnEvent(&pcEventQueue, "ether_output", this);
-          esStartEvent = new FnEvent(&pcEventQueue, "es_start", this);
-          esTransmitEvent = new FnEvent(&pcEventQueue, "es_transmit", this);
-          esTxeofEvent = new FnEvent(&pcEventQueue, "es_txeof", this);
-          idleThreadEvent = new FnEvent(&pcEventQueue, "idle_thread", this);
-    }
-    //INSTRUMENTATION CODEGEN END
-#endif //FS_MEASURE
-
     Addr addr = 0;
     if (kernelSymtab->findAddress("enable_async_printf", addr)) {
         Addr paddr = vtophys(physmem, addr);
@@ -299,212 +159,39 @@ Tru64System::Tru64System(const string _name, const uint64_t _init_param,
         dumpMbufEvent->schedule(addr);
 #endif
 
-#ifdef FS_MEASURE
-    //INSTRUMENTATION CODEGEN BEGIN THREE
+    // BINNING STUFF
     if (bin == true) {
-        if (kernelSymtab->findAddress("es_intr", addr))
-            esIntrEvent->schedule(addr);
-        else
-            panic("could not find kernel symbol \'es_intr\'");
-
-        if (kernelSymtab->findAddress("es_rxeof", addr))
-            esRxeofEvent->schedule(addr);
-        else
-            panic("could not find kernel symbol \'es_rxeof\'");
-
-        if (kernelSymtab->findAddress("es_newbuf", addr))
-            esNewbufEvent->schedule(addr);
-        else
-            panic("could not find kernel symbol \'es_newbuf\'");
-
-        if (kernelSymtab->findAddress("es_dma_load", addr))
-            esDmaLoadEvent->schedule(addr);
-        else
-            panic("could not find kernel symbol \'es_dma_load\'");
-
-        if (kernelSymtab->findAddress("dma_map_load", addr))
-            dmaMapLoadEvent->schedule(addr);
-        else
-            panic("could not find kernel symbol \'dma_map_load\'");
-
-        if (kernelSymtab->findAddress("ether_input", addr))
-            etherInputEvent->schedule(addr);
-        else
-            panic("could not find kernel symbol \'ether_input\'");
-
-        if (kernelSymtab->findAddress("netisr_input", addr))
-            netisrInputEvent->schedule(addr);
-        else
-            panic("could not find kernel symbol \'netisr_input\'");
-
-        if (kernelSymtab->findAddress("schednetisr_isr", addr))
-            schednetisrIsrEvent->schedule(addr);
-        else
-            panic("could not find kernel symbol \'schednetisr_isr\'");
-
-        if (kernelSymtab->findAddress("ipintr", addr))
-            ipintrEvent->schedule(addr);
-        else
-            panic("could not find kernel symbol \'ipintr\'");
-
-        if (kernelSymtab->findAddress("ip_dooptions", addr))
-            ipDooptionsEvent->schedule(addr);
-        else
-            panic("could not find kernel symbol \'ip_dooptions\'");
-
-        if (kernelSymtab->findAddress("ip_reass", addr))
-            ipReassEvent->schedule(addr);
-        else
-            panic("could not find kernel symbol \'ip_reass\'");
-
-        if (kernelSymtab->findAddress("tcp_input", addr))
-            tcpInputEvent->schedule(addr);
-        else
-            panic("could not find kernel symbol \'tcp_input\'");
-
-        if (kernelSymtab->findAddress("sbappend", addr))
-            sbappendEvent->schedule(addr);
-        else
-            panic("could not find kernel symbol \'sbappend\'");
-
-        if (kernelSymtab->findAddress("read", addr))
-            readEvent->schedule(addr);
-        else
-            panic("could not find kernel symbol \'read\'");
-
-        if (kernelSymtab->findAddress("soo_read", addr))
-            sooReadEvent->schedule(addr);
-        else
-            panic("could not find kernel symbol \'soo_read\'");
-
-        if (kernelSymtab->findAddress("orecv", addr))
-            orecvEvent->schedule(addr);
-        else
-            panic("could not find kernel symbol \'orecv\'");
-
-        if (kernelSymtab->findAddress("recvit", addr))
-            recvitEvent->schedule(addr);
-        else
-            panic("could not find kernel symbol \'recvit\'");
-
-        if (kernelSymtab->findAddress("soreceive", addr))
-            soreceiveEvent->schedule(addr);
-        else
-            panic("could not find kernel symbol \'soreceive\'");
-
-        if (kernelSymtab->findAddress("osend", addr))
-            osendEvent->schedule(addr);
-        else
-            panic("could not find kernel symbol \'osend\'");
-
-        if (kernelSymtab->findAddress("write", addr))
-            writeEvent->schedule(addr);
-        else
-            panic("could not find kernel symbol \'write\'");
-
-        if (kernelSymtab->findAddress("soo_write", addr))
-            sooWriteEvent->schedule(addr);
-        else
-            panic("could not find kernel symbol \'soo_write\'");
-
-        if (kernelSymtab->findAddress("sendit", addr))
-            senditEvent->schedule(addr);
-        else
-            panic("could not find kernel symbol \'sendit\'");
-
-        if (kernelSymtab->findAddress("sosend", addr))
-            sosendEvent->schedule(addr);
-        else
-            panic("could not find kernel symbol \'sosend\'");
-
-        if (kernelSymtab->findAddress("tcp_sosend", addr))
-            tcpSosendEvent->schedule(addr);
-        else
-            panic("could not find kernel symbol \'tcp_sosend\'");
-
-        if (kernelSymtab->findAddress("tcp_output", addr))
-            tcpOutputEvent->schedule(addr);
-        else
-            panic("could not find kernel symbol \'tcp_output\'");
-
-        if (kernelSymtab->findAddress("ip_output", addr))
-            ipOutputEvent->schedule(addr);
-        else
-            panic("could not find kernel symbol \'ip_output\'");
-
-        if (kernelSymtab->findAddress("ether_output", addr))
-            etherOutputEvent->schedule(addr);
-        else
-            panic("could not find kernel symbol \'ether_output\'");
-
-        if (kernelSymtab->findAddress("es_start", addr))
-            esStartEvent->schedule(addr);
-        else
-            panic("could not find kernel symbol \'es_start\'");
-
-        if (kernelSymtab->findAddress("es_transmit", addr))
-            esTransmitEvent->schedule(addr);
-        else
-            panic("could not find kernel symbol \'es_transmit\'");
-
-        if (kernelSymtab->findAddress("es_txeof", addr))
-            esTxeofEvent->schedule(addr);
-        else
-            panic("could not find kernel symbol \'es_txeof\'");
-
-        if (kernelSymtab->findAddress("idle_thread", addr))
-            idleThreadEvent->schedule(addr);
-        else
-            panic("could not find kernel symbol \'idle_thread\'");
+        int end = binned_fns.size();
+        assert(!(end & 1));
+
+        Statistics::MainBin *Bin;
+        Addr address = 0;
+
+        fnEvents.resize(end>>1);
+
+        for (int i = 0; i < end; i +=2) {
+            cout << "creating Bin for " << binned_fns[i] << endl;
+            Bin = new Statistics::MainBin(name() + " " + binned_fns[i]);
+            fnBins.insert(make_pair(binned_fns[i], Bin));
+
+            fnEvents[(i>>1)] = new FnEvent(&pcEventQueue, binned_fns[i], this);
+            if (kernelSymtab->findAddress(binned_fns[i], address))
+                fnEvents[(i>>1)]->schedule(address);
+            else
+                panic("could not find kernel symbol %s\n", binned_fns[i]);
+
+            if (binned_fns[i+1] == "null")
+                populateMap(binned_fns[i], "");
+            else
+                populateMap(binned_fns[i], binned_fns[i+1]);
+        }
 
-    }
-    //INSTRUMENTATION CODEGEN END
-     if (bin == true) {
         fnCalls
             .name(name() + ":fnCalls")
             .desc("all fn calls being tracked")
             ;
-
-        populateMap("es_intr", "");
-        populateMap("es_rxeof", "es_intr");
-        populateMap("es_newbuf", "es_rxeof");
-        populateMap("es_dma_load", "es_newbuf");
-        populateMap("dma_map_load", "es_dma_load");
-        populateMap("ether_input", "es_rxeof");
-        populateMap("netisr_input", "ether_input");
-        populateMap("schednetisr_isr", "netisr_input");
-
-        populateMap("ipintr", "");
-        populateMap("ip_dooptions", "ipintr");
-        populateMap("ip_reass", "ipintr");
-        populateMap("tcp_input", "ipintr");
-        populateMap("sbappend", "tcp_input");
-
-        populateMap("read", "");
-        populateMap("orecv", "");
-        populateMap("soo_read", "read");
-        populateMap("recvit", "orecv");
-        populateMap("soreceive", "recvit");
-        populateMap("soreceive", "soo_read");
-
-        populateMap("write", "");
-        populateMap("osend", "");
-        populateMap("soo_write", "write");
-        populateMap("sendit", "osend");
-        populateMap("sosend", "sendit");
-        populateMap("sosend", "soo_write");
-        populateMap("tcp_sosend", "sosend");
-        populateMap("tcp_output", "tcp_sosend");
-        populateMap("ip_output", "tcp_output");
-        populateMap("ether_output", "ip_output");
-        populateMap("es_start", "ether_output");
-        populateMap("es_transmit", "es_start");
-
-        populateMap("es_txeof", "es_intr");
-
-        populateMap("idle_thread", "");
     }
-#endif //FS_MEASURE
+    //
 }
 
 Tru64System::~Tru64System()
@@ -527,43 +214,13 @@ Tru64System::~Tru64System()
     delete debugPrintfrEvent;
     delete dumpMbufEvent;
 
-#ifdef FS_MEASURE
-    //INSTRUMENTATION CODEGEN BEGIN FOUR
     if (bin == true) {
-        delete esIntrEvent;
-        delete esRxeofEvent;
-        delete esNewbufEvent;
-        delete esDmaLoadEvent;
-        delete dmaMapLoadEvent;
-        delete etherInputEvent;
-        delete netisrInputEvent;
-        delete schednetisrIsrEvent;
-        delete ipintrEvent;
-        delete ipDooptionsEvent;
-        delete ipReassEvent;
-        delete tcpInputEvent;
-        delete sbappendEvent;
-        delete readEvent;
-        delete sooReadEvent;
-        delete orecvEvent;
-        delete recvitEvent;
-        delete soreceiveEvent;
-        delete osendEvent;
-        delete writeEvent;
-        delete sooWriteEvent;
-        delete senditEvent;
-        delete sosendEvent;
-        delete tcpSosendEvent;
-        delete tcpOutputEvent;
-        delete ipOutputEvent;
-        delete etherOutputEvent;
-        delete esStartEvent;
-        delete esTransmitEvent;
-        delete esTxeofEvent;
-        delete idleThreadEvent;
+        int end = fnEvents.size();
+        for (int i = 0; i < end; ++i) {
+            delete fnEvents[i];
+        }
+        fnEvents.clear();
     }
-    //INSTRUMENTATION CODEGEN END
-#endif //FS_MEASURE
 }
 
 int
@@ -629,19 +286,16 @@ Tru64System::findCaller(std::string callee, std::string caller) const
 void
 Tru64System::dumpState(ExecContext *xc) const
 {
-#ifndef SW_DEBUG
-    return;
-#endif
     if (xc->swCtx) {
         stack<fnCall *> copy(xc->swCtx->callStack);
         if (copy.empty())
             return;
-        cprintf("xc->swCtx:\n");
+        DPRINTF(TCPIP, "xc->swCtx:\n");
         fnCall *top;
-        cprintf("||   call: %d\n",xc->swCtx->calls);
+        DPRINTF(TCPIP, "||     call : %d\n",xc->swCtx->calls);
         for (top = copy.top(); !copy.empty(); copy.pop() ) {
             top = copy.top();
-            cprintf("||  %13s : %s \n", top->name, top->myBin->name());
+            DPRINTF(TCPIP, "||  %13s : %s \n", top->name, top->myBin->name());
         }
     }
 }
@@ -657,6 +311,7 @@ BEGIN_DECLARE_SIM_OBJECT_PARAMS(Tru64System)
     Param<string> console_code;
     Param<string> pal_code;
     Param<string> boot_osflags;
+    VectorParam<string> binned_fns;
 
 END_DECLARE_SIM_OBJECT_PARAMS(Tru64System)
 
@@ -670,8 +325,8 @@ BEGIN_INIT_SIM_OBJECT_PARAMS(Tru64System)
     INIT_PARAM(console_code, "file that contains the console code"),
     INIT_PARAM(pal_code, "file that contains palcode"),
     INIT_PARAM_DFLT(boot_osflags, "flags to pass to the kernel during boot",
-                    "a")
-
+                    "a"),
+    INIT_PARAM(binned_fns, "functions to be broken down and binned")
 
 END_INIT_SIM_OBJECT_PARAMS(Tru64System)
 
@@ -679,7 +334,8 @@ CREATE_SIM_OBJECT(Tru64System)
 {
     Tru64System *sys = new Tru64System(getInstanceName(), init_param, mem_ctl,
                                        physmem, kernel_code, console_code,
-                                       pal_code, boot_osflags, bin);
+                                       pal_code, boot_osflags, bin,
+                                       binned_fns);
 
     return sys;
 }
index bedf1f38382acddee4592c2914c76128d59b200f..34569664d8ab1b8d1475d09f5de88134f4a88b13 100644 (file)
@@ -57,42 +57,6 @@ class Tru64System : public System
     SymbolTable *kernelSymtab;
     SymbolTable *consoleSymtab;
 
-#ifdef FS_MEASURE
-    //INSTRUMENTATION CODEGEN BEGIN ONE
-    Statistics::MainBin *esIntrBin;
-    Statistics::MainBin *esRxeofBin;
-    Statistics::MainBin *esNewbufBin;
-    Statistics::MainBin *esDmaLoadBin;
-    Statistics::MainBin *dmaMapLoadBin;
-    Statistics::MainBin *etherInputBin;
-    Statistics::MainBin *netisrInputBin;
-    Statistics::MainBin *schednetisrIsrBin;
-    Statistics::MainBin *ipintrBin;
-    Statistics::MainBin *ipDooptionsBin;
-    Statistics::MainBin *ipReassBin;
-    Statistics::MainBin *tcpInputBin;
-    Statistics::MainBin *sbappendBin;
-    Statistics::MainBin *readBin;
-    Statistics::MainBin *sooReadBin;
-    Statistics::MainBin *orecvBin;
-    Statistics::MainBin *recvitBin;
-    Statistics::MainBin *soreceiveBin;
-    Statistics::MainBin *osendBin;
-    Statistics::MainBin *writeBin;
-    Statistics::MainBin *sooWriteBin;
-    Statistics::MainBin *senditBin;
-    Statistics::MainBin *sosendBin;
-    Statistics::MainBin *tcpSosendBin;
-    Statistics::MainBin *tcpOutputBin;
-    Statistics::MainBin *ipOutputBin;
-    Statistics::MainBin *etherOutputBin;
-    Statistics::MainBin *esStartBin;
-    Statistics::MainBin *esTransmitBin;
-    Statistics::MainBin *esTxeofBin;
-    Statistics::MainBin *idleThreadBin;
-    //INSTRUMENTATION CODEGEN END
-#endif //FS_MEASURE
-
     BreakPCEvent *kernelPanicEvent;
     BreakPCEvent *consolePanicEvent;
     BadAddrEvent *badaddrEvent;
@@ -102,41 +66,8 @@ class Tru64System : public System
     DebugPrintfEvent *debugPrintfEvent;
     DebugPrintfEvent *debugPrintfrEvent;
     DumpMbufEvent *dumpMbufEvent;
-#ifdef FS_MEASURE
-    //INSTRUMENTATION CODEGEN BEGIN TWO
-    FnEvent *esIntrEvent;
-    FnEvent *esRxeofEvent;
-    FnEvent *esNewbufEvent;
-    FnEvent *esDmaLoadEvent;
-    FnEvent *dmaMapLoadEvent;
-    FnEvent *etherInputEvent;
-    FnEvent *netisrInputEvent;
-    FnEvent *schednetisrIsrEvent;
-    FnEvent *ipintrEvent;
-    FnEvent *ipDooptionsEvent;
-    FnEvent *ipReassEvent;
-    FnEvent *tcpInputEvent;
-    FnEvent *sbappendEvent;
-    FnEvent *readEvent;
-    FnEvent *sooReadEvent;
-    FnEvent *orecvEvent;
-    FnEvent *recvitEvent;
-    FnEvent *soreceiveEvent;
-    FnEvent *osendEvent;
-    FnEvent *writeEvent;
-    FnEvent *sooWriteEvent;
-    FnEvent *senditEvent;
-    FnEvent *sosendEvent;
-    FnEvent *tcpSosendEvent;
-    FnEvent *tcpOutputEvent;
-    FnEvent *ipOutputEvent;
-    FnEvent *etherOutputEvent;
-    FnEvent *esStartEvent;
-    FnEvent *esTransmitEvent;
-    FnEvent *esTxeofEvent;
-    FnEvent *idleThreadEvent;
-    //INSTRUMENTATION CODEGEN END
-#endif //FS_MEASURE
+
+    std::vector<FnEvent *> fnEvents;
 
   private:
 
@@ -144,6 +75,7 @@ class Tru64System : public System
     Addr kernelEnd;
     Addr kernelEntry;
     bool bin;
+    std::vector<string> binned_fns;
 
   public:
     std::vector<RemoteGDB *>   remoteGDB;
@@ -158,7 +90,8 @@ class Tru64System : public System
                 const std::string &console_path,
                 const std::string &palcode,
                 const std::string &boot_osflags,
-                const bool _bin);
+                const bool _bin,
+                const std::vector<string> &binned_fns);
     ~Tru64System();
 
     int registerExecContext(ExecContext *xc);
@@ -173,7 +106,7 @@ class Tru64System : public System
     static void DumpMbuf(AlphaArguments args);
 
 
-    // Lisa's fs measure stuff
+    // Lisa's binning stuff
   private:
     std::multimap<const std::string, std::string> callerMap;
     void populateMap(std::string caller, std::string callee);
@@ -181,6 +114,7 @@ class Tru64System : public System
   public:
     bool findCaller(std::string callee, std::string caller) const;
     void dumpState(ExecContext *xc) const;
+    //
 };
 
 #endif // __TRU64_SYSTEM_HH__
index db93250eeac0b6052baaae0303bf906749c09b84..36275f4000f691f99dfb022328f0c46faaf63000 100644 (file)
@@ -50,13 +50,11 @@ System::System(const std::string _name,
 {
     // add self to global system list
     systemList.push_back(this);
-#ifdef FS_MEASURE
     if (bin == true) {
-        nonPath = new Statistics::MainBin("non TCPIP path stats");
-        nonPath->activate();
+        Kernel = new Statistics::MainBin("non TCPIP Kernel stats");
+        Kernel->activate();
     } else
-        nonPath = NULL;
-#endif
+        Kernel = NULL;
 }
 
 
@@ -104,7 +102,6 @@ printSystems()
     System::printSystems();
 }
 
-#ifdef FS_MEASURE
 Statistics::MainBin *
 System::getBin(const std::string &name)
 {
@@ -127,7 +124,6 @@ System::findContext(Addr pcb)
   } else
       return NULL;
 }
-#endif //FS_MEASURE
 
 DEFINE_SIM_OBJECT_CLASS_NAME("System", System)
 
index 2e0cb3dbfc53ecd27eba6e1b7c6b8eb05223e2fb..aba5f259005e765a4c758825472c959a7108533f 100644 (file)
@@ -54,7 +54,7 @@ class System : public SimObject
 
   public:
     Statistics::Scalar<Counter> fnCalls;
-    Statistics::MainBin *nonPath;
+    Statistics::MainBin *Kernel;
 
     Statistics::MainBin * getBin(const std::string &name);
     virtual bool findCaller(std::string, std::string) const = 0;