diff --git a/base/statistics.hh b/base/statistics.hh index c99aadab5..0dad31a5a 100644 --- a/base/statistics.hh +++ b/base/statistics.hh @@ -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; diff --git a/kern/tru64/tru64_events.cc b/kern/tru64/tru64_events.cc index f542256e4..e018cb242 100644 --- a/kern/tru64/tru64_events.cc +++ b/kern/tru64/tru64_events.cc @@ -35,11 +35,8 @@ #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 diff --git a/kern/tru64/tru64_events.hh b/kern/tru64/tru64_events.hh index 2067f2ef3..96e6a8b26 100644 --- a/kern/tru64/tru64_events.hh +++ b/kern/tru64/tru64_events.hh @@ -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__ diff --git a/kern/tru64/tru64_system.cc b/kern/tru64/tru64_system.cc index 13f28beab..8df8cc86d 100644 --- a/kern/tru64/tru64_system.cc +++ b/kern/tru64/tru64_system.cc @@ -41,17 +41,15 @@ #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 &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\'"); + int end = binned_fns.size(); + assert(!(end & 1)); - if (kernelSymtab->findAddress("es_rxeof", addr)) - esRxeofEvent->schedule(addr); - else - panic("could not find kernel symbol \'es_rxeof\'"); + Statistics::MainBin *Bin; + Addr address = 0; - if (kernelSymtab->findAddress("es_newbuf", addr)) - esNewbufEvent->schedule(addr); - else - panic("could not find kernel symbol \'es_newbuf\'"); + fnEvents.resize(end>>1); - if (kernelSymtab->findAddress("es_dma_load", addr)) - esDmaLoadEvent->schedule(addr); - else - panic("could not find kernel symbol \'es_dma_load\'"); + 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)); - if (kernelSymtab->findAddress("dma_map_load", addr)) - dmaMapLoadEvent->schedule(addr); - else - panic("could not find kernel symbol \'dma_map_load\'"); + 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 (kernelSymtab->findAddress("ether_input", addr)) - etherInputEvent->schedule(addr); - else - panic("could not find kernel symbol \'ether_input\'"); + if (binned_fns[i+1] == "null") + populateMap(binned_fns[i], ""); + else + populateMap(binned_fns[i], binned_fns[i+1]); + } - 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\'"); - - } - //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 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 console_code; Param pal_code; Param boot_osflags; + VectorParam 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; } diff --git a/kern/tru64/tru64_system.hh b/kern/tru64/tru64_system.hh index bedf1f383..34569664d 100644 --- a/kern/tru64/tru64_system.hh +++ b/kern/tru64/tru64_system.hh @@ -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 fnEvents; private: @@ -144,6 +75,7 @@ class Tru64System : public System Addr kernelEnd; Addr kernelEntry; bool bin; + std::vector binned_fns; public: std::vector 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 &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 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__ diff --git a/sim/system.cc b/sim/system.cc index db93250ee..36275f400 100644 --- a/sim/system.cc +++ b/sim/system.cc @@ -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) diff --git a/sim/system.hh b/sim/system.hh index 2e0cb3dbf..aba5f2590 100644 --- a/sim/system.hh +++ b/sim/system.hh @@ -54,7 +54,7 @@ class System : public SimObject public: Statistics::Scalar fnCalls; - Statistics::MainBin *nonPath; + Statistics::MainBin *Kernel; Statistics::MainBin * getBin(const std::string &name); virtual bool findCaller(std::string, std::string) const = 0;