summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--base/statistics.hh2
-rw-r--r--kern/tru64/tru64_events.cc17
-rw-r--r--kern/tru64/tru64_events.hh4
-rw-r--r--kern/tru64/tru64_system.cc428
-rw-r--r--kern/tru64/tru64_system.hh80
-rw-r--r--sim/system.cc10
-rw-r--r--sim/system.hh2
7 files changed, 66 insertions, 477 deletions
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<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;
}
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<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__
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<Counter> fnCalls;
- Statistics::MainBin *nonPath;
+ Statistics::MainBin *Kernel;
Statistics::MainBin * getBin(const std::string &name);
virtual bool findCaller(std::string, std::string) const = 0;