Merge zizzer:/z/m5/Bitkeeper/m5
into zazzer.eecs.umich.edu:/z/rdreslin/m5bk/clean --HG-- extra : convert_revision : a64b84993c8852b19b1572c6913bf3dc6f6fc249
This commit is contained in:
commit
f9ff53241f
34 changed files with 660 additions and 129 deletions
|
@ -109,6 +109,7 @@ base_sources = Split('''
|
||||||
cpu/full_cpu/issue.cc
|
cpu/full_cpu/issue.cc
|
||||||
cpu/full_cpu/ls_queue.cc
|
cpu/full_cpu/ls_queue.cc
|
||||||
cpu/full_cpu/machine_queue.cc
|
cpu/full_cpu/machine_queue.cc
|
||||||
|
cpu/full_cpu/pc_sample_profile.cc
|
||||||
cpu/full_cpu/pipetrace.cc
|
cpu/full_cpu/pipetrace.cc
|
||||||
cpu/full_cpu/readyq.cc
|
cpu/full_cpu/readyq.cc
|
||||||
cpu/full_cpu/reg_info.cc
|
cpu/full_cpu/reg_info.cc
|
||||||
|
|
|
@ -32,7 +32,7 @@
|
||||||
#include <list>
|
#include <list>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generic callback class. This base class provides a virutal process
|
* Generic callback class. This base class provides a virtual process
|
||||||
* function that gets called when the callback queue is processed.
|
* function that gets called when the callback queue is processed.
|
||||||
*/
|
*/
|
||||||
class Callback
|
class Callback
|
||||||
|
@ -103,6 +103,8 @@ class CallbackQueue
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/// Helper template class to turn a simple class member function into
|
||||||
|
/// a callback.
|
||||||
template <class T, void (T::* F)()>
|
template <class T, void (T::* F)()>
|
||||||
class MakeCallback : public Callback
|
class MakeCallback : public Callback
|
||||||
{
|
{
|
||||||
|
@ -113,6 +115,7 @@ class MakeCallback : public Callback
|
||||||
MakeCallback(T *o)
|
MakeCallback(T *o)
|
||||||
: object(o)
|
: object(o)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
void process() { (object->*F)(); }
|
void process() { (object->*F)(); }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -348,9 +348,9 @@ struct UdpHdr : public udp_hdr
|
||||||
uint16_t sport() const { return ntohs(uh_sport); }
|
uint16_t sport() const { return ntohs(uh_sport); }
|
||||||
uint16_t dport() const { return ntohs(uh_dport); }
|
uint16_t dport() const { return ntohs(uh_dport); }
|
||||||
uint16_t len() const { return ntohs(uh_ulen); }
|
uint16_t len() const { return ntohs(uh_ulen); }
|
||||||
uint16_t sum() const { return ntohs(uh_sum); }
|
uint16_t sum() const { return uh_sum; }
|
||||||
|
|
||||||
void sum(uint16_t sum) { uh_sum = htons(sum); }
|
void sum(uint16_t sum) { uh_sum = sum; }
|
||||||
|
|
||||||
int size() const { return sizeof(udp_hdr); }
|
int size() const { return sizeof(udp_hdr); }
|
||||||
const uint8_t *bytes() const { return (const uint8_t *)this; }
|
const uint8_t *bytes() const { return (const uint8_t *)this; }
|
||||||
|
|
|
@ -38,6 +38,8 @@
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
|
SymbolTable *debugSymbolTable = NULL;
|
||||||
|
|
||||||
bool
|
bool
|
||||||
SymbolTable::insert(Addr address, string symbol)
|
SymbolTable::insert(Addr address, string symbol)
|
||||||
{
|
{
|
||||||
|
@ -95,26 +97,20 @@ SymbolTable::load(const string &filename)
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
SymbolTable::findNearestSymbol(Addr address, string &symbol) const
|
SymbolTable::findNearestSymbol(Addr address, string &symbol,
|
||||||
|
Addr &sym_address, Addr &next_sym_address) const
|
||||||
{
|
{
|
||||||
ATable::const_iterator i = addrTable.lower_bound(address);
|
// find first key *larger* than desired address
|
||||||
|
ATable::const_iterator i = addrTable.upper_bound(address);
|
||||||
|
|
||||||
// check for PALCode
|
// if very first key is larger, we're out of luck
|
||||||
if (address & 0x1)
|
if (i == addrTable.begin())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// first check for the end
|
next_sym_address = i->first;
|
||||||
if (i == addrTable.end())
|
--i;
|
||||||
i--;
|
sym_address = i->first;
|
||||||
else if (i == addrTable.begin() && (*i).first != address)
|
symbol = i->second;
|
||||||
return false;
|
|
||||||
else if ((*i).first != address)
|
|
||||||
i--;
|
|
||||||
|
|
||||||
symbol = (*i).second;
|
|
||||||
|
|
||||||
if (address != (*i).first)
|
|
||||||
symbol += csprintf("+%d", address - (*i).first);
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -140,19 +136,3 @@ SymbolTable::findAddress(const string &symbol, Addr &address) const
|
||||||
address = (*i).second;
|
address = (*i).second;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
string
|
|
||||||
SymbolTable::find(Addr addr) const
|
|
||||||
{
|
|
||||||
string s;
|
|
||||||
findSymbol(addr, s);
|
|
||||||
return s;
|
|
||||||
}
|
|
||||||
|
|
||||||
Addr
|
|
||||||
SymbolTable::find(const string &symbol) const
|
|
||||||
{
|
|
||||||
Addr a = 0;
|
|
||||||
findAddress(symbol, a);
|
|
||||||
return a;
|
|
||||||
}
|
|
||||||
|
|
|
@ -49,12 +49,35 @@ class SymbolTable
|
||||||
bool insert(Addr address, std::string symbol);
|
bool insert(Addr address, std::string symbol);
|
||||||
bool load(const std::string &file);
|
bool load(const std::string &file);
|
||||||
|
|
||||||
bool findNearestSymbol(Addr address, std::string &symbol) const;
|
/// Find the nearest symbol equal to or less than the supplied
|
||||||
|
/// address (e.g., the label for the enclosing function).
|
||||||
|
/// @param address The address to look up.
|
||||||
|
/// @param symbol Return reference for symbol string.
|
||||||
|
/// @param sym_address Return reference for symbol address.
|
||||||
|
/// @param next_sym_address Address of following symbol (for
|
||||||
|
/// determining valid range of symbol).
|
||||||
|
/// @retval True if a symbol was found.
|
||||||
|
bool findNearestSymbol(Addr address, std::string &symbol,
|
||||||
|
Addr &sym_address, Addr &next_sym_address) const;
|
||||||
|
|
||||||
|
/// Overload for findNearestSymbol() for callers who don't care
|
||||||
|
/// about next_sym_address.
|
||||||
|
bool findNearestSymbol(Addr address, std::string &symbol,
|
||||||
|
Addr &sym_address) const
|
||||||
|
{
|
||||||
|
Addr dummy;
|
||||||
|
return findNearestSymbol(address, symbol, sym_address, dummy);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
bool findSymbol(Addr address, std::string &symbol) const;
|
bool findSymbol(Addr address, std::string &symbol) const;
|
||||||
bool findAddress(const std::string &symbol, Addr &address) const;
|
bool findAddress(const std::string &symbol, Addr &address) const;
|
||||||
|
|
||||||
std::string find(Addr addr) const;
|
|
||||||
Addr find(const std::string &symbol) const;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/// Global unified debugging symbol table (for target). Conceptually
|
||||||
|
/// there should be one of these per System object for full system,
|
||||||
|
/// and per Process object for non-full-system, but so far one big
|
||||||
|
/// global one has worked well enough.
|
||||||
|
extern SymbolTable *debugSymbolTable;
|
||||||
|
|
||||||
#endif // __SYMTAB_HH__
|
#endif // __SYMTAB_HH__
|
||||||
|
|
48
configs/boot/nat-netperf-maerts-client.rcS
Normal file
48
configs/boot/nat-netperf-maerts-client.rcS
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
#!/bin/sh
|
||||||
|
SERVER=192.168.0.1
|
||||||
|
CLIENT=10.0.0.2
|
||||||
|
|
||||||
|
echo "setting up network..."
|
||||||
|
ifconfig lo 127.0.0.1
|
||||||
|
ifconfig eth0 $CLIENT txqueuelen 1000
|
||||||
|
|
||||||
|
echo "modifying route table..."
|
||||||
|
route add default gw 10.0.0.1
|
||||||
|
|
||||||
|
echo "0" > /proc/sys/net/ipv4/tcp_timestamps
|
||||||
|
echo "0" > /proc/sys/net/ipv4/tcp_sack
|
||||||
|
echo "5000000 5000000 5000000" > /proc/sys/net/ipv4/tcp_rmem
|
||||||
|
echo "5000000 5000000 5000000" > /proc/sys/net/ipv4/tcp_wmem
|
||||||
|
echo "5000000 5000000 5000000" > /proc/sys/net/ipv4/tcp_mem
|
||||||
|
echo "262143" > /proc/sys/net/core/rmem_max
|
||||||
|
echo "262143" > /proc/sys/net/core/wmem_max
|
||||||
|
echo "262143" > /proc/sys/net/core/rmem_default
|
||||||
|
echo "262143" > /proc/sys/net/core/wmem_default
|
||||||
|
echo "262143" > /proc/sys/net/core/optmem_max
|
||||||
|
echo "100000" > /proc/sys/net/core/netdev_max_backlog
|
||||||
|
|
||||||
|
echo -n "waiting for server..."
|
||||||
|
/usr/bin/netcat -c -l -p 8000
|
||||||
|
|
||||||
|
BINARY=/benchmarks/netperf/netperf
|
||||||
|
TEST="TCP_MAERTS"
|
||||||
|
SHORT_ARGS="-l -100k"
|
||||||
|
LONG_ARGS="-k16384,0 -K16384,0 -- -m 65536 -M 65536 -s 262144 -S 262144"
|
||||||
|
|
||||||
|
|
||||||
|
SHORT="$BINARY -H $SERVER -t $TEST $SHORT_ARGS"
|
||||||
|
LONG="$BINARY -H $SERVER -t $TEST $LONG_ARGS"
|
||||||
|
|
||||||
|
echo "starting test..."
|
||||||
|
echo "netperf warmup"
|
||||||
|
echo $SHORT
|
||||||
|
eval $SHORT
|
||||||
|
|
||||||
|
echo "netperf benchmark"
|
||||||
|
echo $LONG
|
||||||
|
/sbin/m5 ivlb 1
|
||||||
|
/sbin/m5 resetstats
|
||||||
|
/sbin/m5 dumpresetstats 2000000000 2000000000
|
||||||
|
/sbin/m5 checkpoint 2000000000 2000000000
|
||||||
|
eval $LONG
|
||||||
|
/sbin/m5 exit
|
30
configs/boot/nat-netperf-server.rcS
Normal file
30
configs/boot/nat-netperf-server.rcS
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
#!/bin/sh
|
||||||
|
SERVER=192.168.0.1
|
||||||
|
CLIENT=10.0.0.2
|
||||||
|
NATBOX=192.168.0.2
|
||||||
|
|
||||||
|
echo "setting up network..."
|
||||||
|
ifconfig lo 127.0.0.1
|
||||||
|
ifconfig eth0 $SERVER txqueuelen 1000
|
||||||
|
|
||||||
|
echo "0" > /proc/sys/net/ipv4/tcp_timestamps
|
||||||
|
echo "0" > /proc/sys/net/ipv4/tcp_sack
|
||||||
|
echo "5000000 5000000 5000000" > /proc/sys/net/ipv4/tcp_rmem
|
||||||
|
echo "5000000 5000000 5000000" > /proc/sys/net/ipv4/tcp_wmem
|
||||||
|
echo "5000000 5000000 5000000" > /proc/sys/net/ipv4/tcp_mem
|
||||||
|
echo "262143" > /proc/sys/net/core/rmem_max
|
||||||
|
echo "262143" > /proc/sys/net/core/wmem_max
|
||||||
|
echo "262143" > /proc/sys/net/core/rmem_default
|
||||||
|
echo "262143" > /proc/sys/net/core/wmem_default
|
||||||
|
echo "262143" > /proc/sys/net/core/optmem_max
|
||||||
|
echo "100000" > /proc/sys/net/core/netdev_max_backlog
|
||||||
|
|
||||||
|
echo "running netserver..."
|
||||||
|
/benchmarks/netperf/netserver
|
||||||
|
|
||||||
|
echo -n "signal client to begin..."
|
||||||
|
echo "server ready" | /usr/bin/netcat -c $NATBOX 8000
|
||||||
|
echo "done."
|
||||||
|
|
||||||
|
echo "starting bash..."
|
||||||
|
exec /bin/bash
|
48
configs/boot/nat-netperf-stream-client.rcS
Normal file
48
configs/boot/nat-netperf-stream-client.rcS
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
#!/bin/sh
|
||||||
|
SERVER=192.168.0.1
|
||||||
|
CLIENT=10.0.0.2
|
||||||
|
|
||||||
|
echo "setting up network..."
|
||||||
|
ifconfig lo 127.0.0.1
|
||||||
|
ifconfig eth0 $CLIENT txqueuelen 1000
|
||||||
|
|
||||||
|
echo "0" > /proc/sys/net/ipv4/tcp_timestamps
|
||||||
|
echo "0" > /proc/sys/net/ipv4/tcp_sack
|
||||||
|
echo "5000000 5000000 5000000" > /proc/sys/net/ipv4/tcp_rmem
|
||||||
|
echo "5000000 5000000 5000000" > /proc/sys/net/ipv4/tcp_wmem
|
||||||
|
echo "5000000 5000000 5000000" > /proc/sys/net/ipv4/tcp_mem
|
||||||
|
echo "262143" > /proc/sys/net/core/rmem_max
|
||||||
|
echo "262143" > /proc/sys/net/core/wmem_max
|
||||||
|
echo "262143" > /proc/sys/net/core/rmem_default
|
||||||
|
echo "262143" > /proc/sys/net/core/wmem_default
|
||||||
|
echo "262143" > /proc/sys/net/core/optmem_max
|
||||||
|
echo "100000" > /proc/sys/net/core/netdev_max_backlog
|
||||||
|
|
||||||
|
echo "modifying route table"
|
||||||
|
route add default gw 10.0.0.1
|
||||||
|
|
||||||
|
echo -n "waiting for server..."
|
||||||
|
/usr/bin/netcat -c -l -p 8000
|
||||||
|
|
||||||
|
BINARY=/benchmarks/netperf/netperf
|
||||||
|
TEST="TCP_STREAM"
|
||||||
|
SHORT_ARGS="-l -100k"
|
||||||
|
LONG_ARGS="-k16384,0 -K16384,0 -- -m 65536 -M 65536 -s 262144 -S 262144"
|
||||||
|
|
||||||
|
|
||||||
|
SHORT="$BINARY -H $SERVER -t $TEST $SHORT_ARGS"
|
||||||
|
LONG="$BINARY -H $SERVER -t $TEST $LONG_ARGS"
|
||||||
|
|
||||||
|
echo "starting test..."
|
||||||
|
echo "netperf warmup"
|
||||||
|
echo $SHORT
|
||||||
|
eval $SHORT
|
||||||
|
|
||||||
|
echo "netperf benchmark"
|
||||||
|
echo $LONG
|
||||||
|
/sbin/m5 ivlb 1
|
||||||
|
/sbin/m5 resetstats
|
||||||
|
/sbin/m5 dumpresetstats 2000000000 2000000000
|
||||||
|
/sbin/m5 checkpoint 2000000000 2000000000
|
||||||
|
eval $LONG
|
||||||
|
/sbin/m5 exit
|
51
configs/boot/nat-spec-surge-client.rcS
Normal file
51
configs/boot/nat-spec-surge-client.rcS
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# /etc/init.d/rcS
|
||||||
|
#
|
||||||
|
CLIENT=10.0.0.2
|
||||||
|
SERVER=192.168.0.1
|
||||||
|
|
||||||
|
echo -n "mounting swap..."
|
||||||
|
/sbin/swapon /dev/hdc1
|
||||||
|
echo "done."
|
||||||
|
|
||||||
|
echo -n "setting up network..."
|
||||||
|
/sbin/ifconfig eth0 $CLIENT txqueuelen 1000
|
||||||
|
/sbin/ifconfig lo 127.0.0.1
|
||||||
|
|
||||||
|
echo "1" > /proc/sys/net/ipv4/tcp_tw_recycle
|
||||||
|
echo "1" > /proc/sys/net/ipv4/tcp_tw_reuse
|
||||||
|
echo "1" > /proc/sys/net/ipv4/tcp_window_scaling
|
||||||
|
echo "0" > /proc/sys/net/ipv4/tcp_timestamps
|
||||||
|
echo "0" > /proc/sys/net/ipv4/tcp_sack
|
||||||
|
echo "15" > /proc/sys/net/ipv4/tcp_fin_timeout
|
||||||
|
echo "16384" > /proc/sys/net/ipv4/tcp_max_syn_backlog
|
||||||
|
|
||||||
|
echo "1024 65535" > /proc/sys/net/ipv4/ip_local_port_range
|
||||||
|
echo "10000000 10000000 10000000" > /proc/sys/net/ipv4/tcp_rmem
|
||||||
|
echo "10000000 10000000 10000000" > /proc/sys/net/ipv4/tcp_wmem
|
||||||
|
echo "10000000 10000000 10000000" > /proc/sys/net/ipv4/tcp_mem
|
||||||
|
|
||||||
|
echo "524287" > /proc/sys/net/core/rmem_max
|
||||||
|
echo "524287" > /proc/sys/net/core/wmem_max
|
||||||
|
echo "524287" > /proc/sys/net/core/optmem_max
|
||||||
|
echo "300000" > /proc/sys/net/core/netdev_max_backlog
|
||||||
|
|
||||||
|
echo "131072" > /proc/sys/fs/file-max
|
||||||
|
echo "done."
|
||||||
|
|
||||||
|
echo "changing route table..."
|
||||||
|
route add default gw 10.0.0.1
|
||||||
|
|
||||||
|
echo "waiting for server..."
|
||||||
|
/usr/bin/netcat -c -l -p 8000
|
||||||
|
|
||||||
|
echo -n "running surge client..."
|
||||||
|
/bin/bash -c "cd /benchmarks/surge && ./spec-m5 1 20 1 $SERVER 5 40000 1000000000 1000"
|
||||||
|
echo "done."
|
||||||
|
|
||||||
|
echo -n "halting machine"
|
||||||
|
m5 exit
|
||||||
|
|
||||||
|
echo -n "starting bash shell..."
|
||||||
|
/bin/bash
|
56
configs/boot/nat-spec-surge-server.rcS
Executable file
56
configs/boot/nat-spec-surge-server.rcS
Executable file
|
@ -0,0 +1,56 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# /etc/init.d/rcS
|
||||||
|
#
|
||||||
|
NATBOX=192.168.0.7
|
||||||
|
|
||||||
|
echo -n "mounting swap..."
|
||||||
|
/sbin/swapon /dev/hdc1
|
||||||
|
echo "done."
|
||||||
|
|
||||||
|
echo -n "setting up network..."
|
||||||
|
/sbin/ifconfig eth0 192.168.0.1 txqueuelen 1000
|
||||||
|
/sbin/ifconfig eth0:1 192.168.0.2 txqueuelen 1000
|
||||||
|
/sbin/ifconfig eth0:2 192.168.0.3 txqueuelen 1000
|
||||||
|
/sbin/ifconfig eth0:3 192.168.0.4 txqueuelen 1000
|
||||||
|
/sbin/ifconfig eth0:4 192.168.0.5 txqueuelen 1000
|
||||||
|
/sbin/ifconfig lo 127.0.0.1
|
||||||
|
|
||||||
|
echo "1" > /proc/sys/net/ipv4/tcp_tw_recycle
|
||||||
|
echo "1" > /proc/sys/net/ipv4/tcp_tw_reuse
|
||||||
|
echo "1" > /proc/sys/net/ipv4/tcp_window_scaling
|
||||||
|
echo "0" > /proc/sys/net/ipv4/tcp_timestamps
|
||||||
|
echo "0" > /proc/sys/net/ipv4/tcp_sack
|
||||||
|
echo "15" > /proc/sys/net/ipv4/tcp_fin_timeout
|
||||||
|
echo "16384" > /proc/sys/net/ipv4/tcp_max_syn_backlog
|
||||||
|
|
||||||
|
echo "1024 65535" > /proc/sys/net/ipv4/ip_local_port_range
|
||||||
|
echo "10000000 10000000 10000000" > /proc/sys/net/ipv4/tcp_rmem
|
||||||
|
echo "10000000 10000000 10000000" > /proc/sys/net/ipv4/tcp_wmem
|
||||||
|
echo "10000000 10000000 10000000" > /proc/sys/net/ipv4/tcp_mem
|
||||||
|
|
||||||
|
echo "524287" > /proc/sys/net/core/rmem_max
|
||||||
|
echo "524287" > /proc/sys/net/core/wmem_max
|
||||||
|
echo "524287" > /proc/sys/net/core/optmem_max
|
||||||
|
echo "300000" > /proc/sys/net/core/netdev_max_backlog
|
||||||
|
|
||||||
|
echo "131072" > /proc/sys/fs/file-max
|
||||||
|
echo "done."
|
||||||
|
|
||||||
|
echo -n "mounting file set..."
|
||||||
|
mkdir -p /z/htdocs
|
||||||
|
mount /dev/hdb1 /z/htdocs
|
||||||
|
echo "done."
|
||||||
|
|
||||||
|
echo -n "starting httpd..."
|
||||||
|
/benchmarks/apache2/bin/apachectl start
|
||||||
|
sleep 2
|
||||||
|
cat /benchmarks/apache2/logs/error_log
|
||||||
|
echo "done."
|
||||||
|
|
||||||
|
echo "notifying natbox..."
|
||||||
|
echo "server ready" | /usr/bin/netcat -c $NATBOX 8000
|
||||||
|
echo "done"
|
||||||
|
|
||||||
|
echo -n "starting bash shell..."
|
||||||
|
/bin/bash
|
51
configs/boot/natbox-netperf.rcS
Normal file
51
configs/boot/natbox-netperf.rcS
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
#!/bin/sh
|
||||||
|
EXTIF=192.168.0.2
|
||||||
|
INTIF=10.0.0.1
|
||||||
|
CLIENT=10.0.0.2
|
||||||
|
|
||||||
|
echo "setting up network..."
|
||||||
|
ifconfig lo 127.0.0.1
|
||||||
|
ifconfig eth0 $EXTIF txqueuelen 1000
|
||||||
|
ifconfig eth1 $INTIF txqueuelen 1000
|
||||||
|
|
||||||
|
echo "0" > /proc/sys/net/ipv4/tcp_timestamps
|
||||||
|
echo "0" > /proc/sys/net/ipv4/tcp_sack
|
||||||
|
echo "5000000 5000000 5000000" > /proc/sys/net/ipv4/tcp_rmem
|
||||||
|
echo "5000000 5000000 5000000" > /proc/sys/net/ipv4/tcp_wmem
|
||||||
|
echo "5000000 5000000 5000000" > /proc/sys/net/ipv4/tcp_mem
|
||||||
|
echo "262143" > /proc/sys/net/core/rmem_max
|
||||||
|
echo "262143" > /proc/sys/net/core/wmem_max
|
||||||
|
echo "262143" > /proc/sys/net/core/rmem_default
|
||||||
|
echo "262143" > /proc/sys/net/core/wmem_default
|
||||||
|
echo "262143" > /proc/sys/net/core/optmem_max
|
||||||
|
echo "100000" > /proc/sys/net/core/netdev_max_backlog
|
||||||
|
|
||||||
|
echo "1" > /proc/sys/net/ipv4/ip_forward
|
||||||
|
|
||||||
|
echo "waiting for netserver..."
|
||||||
|
/usr/bin/netcat -c -l -p 8000
|
||||||
|
|
||||||
|
echo "setting up iptables..."
|
||||||
|
IPTABLES=/sbin/iptables
|
||||||
|
EXTIF=eth0
|
||||||
|
INTIF=eth1
|
||||||
|
|
||||||
|
$IPTABLES -P INPUT ACCEPT
|
||||||
|
$IPTABLES -F INPUT
|
||||||
|
$IPTABLES -P OUTPUT ACCEPT
|
||||||
|
$IPTABLES -F OUTPUT
|
||||||
|
$IPTABLES -P FORWARD DROP
|
||||||
|
$IPTABLES -F FORWARD
|
||||||
|
$IPTABLES -t nat -F
|
||||||
|
|
||||||
|
$IPTABLES -A FORWARD -i $EXTIF -o $INTIF -m state --state ESTABLISHED,RELATED -j ACCEPT
|
||||||
|
$IPTABLES -A FORWARD -i $INTIF -o $EXTIF -j ACCEPT
|
||||||
|
$IPTABLES -A FORWARD -j LOG
|
||||||
|
|
||||||
|
$IPTABLES -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE
|
||||||
|
|
||||||
|
echo "informing client..."
|
||||||
|
echo "server ready" | /usr/bin/netcat -c $CLIENT 8000
|
||||||
|
|
||||||
|
echo "starting bash..."
|
||||||
|
exec /bin/bash
|
51
configs/boot/natbox-spec-surge.rcS
Normal file
51
configs/boot/natbox-spec-surge.rcS
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
#!/bin/sh
|
||||||
|
EXTIF=192.168.0.7
|
||||||
|
INTIF=10.0.0.1
|
||||||
|
CLIENT=10.0.0.2
|
||||||
|
|
||||||
|
echo "setting up network..."
|
||||||
|
ifconfig lo 127.0.0.1
|
||||||
|
ifconfig eth0 $EXTIF txqueuelen 1000
|
||||||
|
ifconfig eth1 $INTIF txqueuelen 1000
|
||||||
|
|
||||||
|
echo "0" > /proc/sys/net/ipv4/tcp_timestamps
|
||||||
|
echo "0" > /proc/sys/net/ipv4/tcp_sack
|
||||||
|
echo "5000000 5000000 5000000" > /proc/sys/net/ipv4/tcp_rmem
|
||||||
|
echo "5000000 5000000 5000000" > /proc/sys/net/ipv4/tcp_wmem
|
||||||
|
echo "5000000 5000000 5000000" > /proc/sys/net/ipv4/tcp_mem
|
||||||
|
echo "262143" > /proc/sys/net/core/rmem_max
|
||||||
|
echo "262143" > /proc/sys/net/core/wmem_max
|
||||||
|
echo "262143" > /proc/sys/net/core/rmem_default
|
||||||
|
echo "262143" > /proc/sys/net/core/wmem_default
|
||||||
|
echo "262143" > /proc/sys/net/core/optmem_max
|
||||||
|
echo "100000" > /proc/sys/net/core/netdev_max_backlog
|
||||||
|
|
||||||
|
echo "1" > /proc/sys/net/ipv4/ip_forward
|
||||||
|
|
||||||
|
echo "waiting for netserver..."
|
||||||
|
/usr/bin/netcat -c -l -p 8000
|
||||||
|
|
||||||
|
echo "setting up iptables..."
|
||||||
|
IPTABLES=/sbin/iptables
|
||||||
|
EXTIF=eth0
|
||||||
|
INTIF=eth1
|
||||||
|
|
||||||
|
$IPTABLES -P INPUT ACCEPT
|
||||||
|
$IPTABLES -F INPUT
|
||||||
|
$IPTABLES -P OUTPUT ACCEPT
|
||||||
|
$IPTABLES -F OUTPUT
|
||||||
|
$IPTABLES -P FORWARD DROP
|
||||||
|
$IPTABLES -F FORWARD
|
||||||
|
$IPTABLES -t nat -F
|
||||||
|
|
||||||
|
$IPTABLES -A FORWARD -i $EXTIF -o $INTIF -m state --state ESTABLISHED,RELATED -j ACCEPT
|
||||||
|
$IPTABLES -A FORWARD -i $INTIF -o $EXTIF -j ACCEPT
|
||||||
|
$IPTABLES -A FORWARD -j LOG
|
||||||
|
|
||||||
|
$IPTABLES -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE
|
||||||
|
|
||||||
|
echo "informing client..."
|
||||||
|
echo "server ready" | /usr/bin/netcat -c $CLIENT 8000
|
||||||
|
|
||||||
|
echo "starting bash..."
|
||||||
|
exec /bin/bash
|
50
configs/boot/nfs-client-smallb.rcS
Executable file
50
configs/boot/nfs-client-smallb.rcS
Executable file
|
@ -0,0 +1,50 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# /etc/init.d/rcS
|
||||||
|
#
|
||||||
|
|
||||||
|
echo -n "mounting swap..."
|
||||||
|
/sbin/swapon /dev/hdc
|
||||||
|
echo "done."
|
||||||
|
|
||||||
|
echo -n "setting up network..."
|
||||||
|
/sbin/ifconfig eth0 10.0.0.2 txqueuelen 1000
|
||||||
|
/sbin/ifconfig lo 127.0.0.1
|
||||||
|
|
||||||
|
echo "1" > /proc/sys/net/ipv4/tcp_tw_recycle
|
||||||
|
echo "1" > /proc/sys/net/ipv4/tcp_tw_reuse
|
||||||
|
echo "1" > /proc/sys/net/ipv4/tcp_window_scaling
|
||||||
|
echo "0" > /proc/sys/net/ipv4/tcp_timestamps
|
||||||
|
echo "0" > /proc/sys/net/ipv4/tcp_sack
|
||||||
|
echo "15" > /proc/sys/net/ipv4/tcp_fin_timeout
|
||||||
|
echo "16384" > /proc/sys/net/ipv4/tcp_max_syn_backlog
|
||||||
|
|
||||||
|
echo "1024 65535" > /proc/sys/net/ipv4/ip_local_port_range
|
||||||
|
echo "10000000 10000000 10000000" > /proc/sys/net/ipv4/tcp_rmem
|
||||||
|
echo "10000000 10000000 10000000" > /proc/sys/net/ipv4/tcp_wmem
|
||||||
|
echo "10000000 10000000 10000000" > /proc/sys/net/ipv4/tcp_mem
|
||||||
|
|
||||||
|
echo "524287" > /proc/sys/net/core/rmem_max
|
||||||
|
echo "524287" > /proc/sys/net/core/wmem_max
|
||||||
|
echo "524287" > /proc/sys/net/core/optmem_max
|
||||||
|
echo "300000" > /proc/sys/net/core/netdev_max_backlog
|
||||||
|
|
||||||
|
echo "131072" > /proc/sys/fs/file-max
|
||||||
|
echo "done."
|
||||||
|
|
||||||
|
echo -n "starting nfs client..."
|
||||||
|
/sbin/portmap &
|
||||||
|
/sbin/lockd &
|
||||||
|
echo "done."
|
||||||
|
|
||||||
|
echo -n "waiting for server..."
|
||||||
|
/usr/bin/netcat -c -l -p 8000
|
||||||
|
|
||||||
|
echo -n "mounting remote share..."
|
||||||
|
mkdir /nfs
|
||||||
|
mount -o rsize=1460,wsize=1460 10.0.0.1:/nfs /nfs
|
||||||
|
echo "done."
|
||||||
|
|
||||||
|
/bin/bonnie++ -u 99 -s 700 -r 0 -n 0 -f -F -d /nfs
|
||||||
|
|
||||||
|
/sbin/m5 exit
|
|
@ -4,7 +4,7 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
echo -n "mounting swap..."
|
echo -n "mounting swap..."
|
||||||
/sbin/swapon /dev/hdc1
|
/sbin/swapon /dev/hdc
|
||||||
echo "done."
|
echo "done."
|
||||||
|
|
||||||
echo -n "setting up network..."
|
echo -n "setting up network..."
|
||||||
|
@ -45,6 +45,6 @@ mkdir /nfs
|
||||||
mount 10.0.0.1:/nfs /nfs
|
mount 10.0.0.1:/nfs /nfs
|
||||||
echo "done."
|
echo "done."
|
||||||
|
|
||||||
/bin/bonnie++ -u 99 -s 100 -r 0 -n 0 -d /nfs
|
/bin/bonnie++ -u 99 -s 700 -r 0 -n 0 -f -F -d /nfs
|
||||||
|
|
||||||
/sbin/m5 exit
|
/sbin/m5 exit
|
||||||
|
|
|
@ -4,15 +4,11 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
echo -n "mounting swap..."
|
echo -n "mounting swap..."
|
||||||
/sbin/swapon /dev/hdc1
|
/sbin/swapon /dev/hdc
|
||||||
echo "done."
|
echo "done."
|
||||||
|
|
||||||
echo -n "setting up network..."
|
echo -n "setting up network..."
|
||||||
/sbin/ifconfig eth0 10.0.0.1 txqueuelen 1000
|
/sbin/ifconfig eth0 10.0.0.1 txqueuelen 1000
|
||||||
/sbin/ifconfig eth0:1 192.168.0.2 txqueuelen 1000
|
|
||||||
/sbin/ifconfig eth0:2 192.168.0.3 txqueuelen 1000
|
|
||||||
/sbin/ifconfig eth0:3 192.168.0.4 txqueuelen 1000
|
|
||||||
/sbin/ifconfig eth0:4 192.168.0.5 txqueuelen 1000
|
|
||||||
/sbin/ifconfig lo 127.0.0.1
|
/sbin/ifconfig lo 127.0.0.1
|
||||||
|
|
||||||
echo "1" > /proc/sys/net/ipv4/tcp_tw_recycle
|
echo "1" > /proc/sys/net/ipv4/tcp_tw_recycle
|
||||||
|
@ -36,32 +32,31 @@ echo "300000" > /proc/sys/net/core/netdev_max_backlog
|
||||||
echo "131072" > /proc/sys/fs/file-max
|
echo "131072" > /proc/sys/fs/file-max
|
||||||
echo "done."
|
echo "done."
|
||||||
|
|
||||||
echo "/nfs 10.0.0.0/255.0.0.0(rw,sync,no_root_squash)" > /etc/exports
|
|
||||||
|
|
||||||
#if [ ! -x /dev/sda ]
|
#if [ ! -x /dev/sda ]
|
||||||
#then
|
#then
|
||||||
# mknod /dev/sda b 8 0
|
# mknod /dev/sda b 8 0
|
||||||
# mknod /dev/sda1 b 8 1
|
# mknod /dev/sda1 b 8 1
|
||||||
#fi
|
#fi
|
||||||
|
|
||||||
/sbin/insmod /modules/scsi_debug.ko dev_size_mb=128
|
/sbin/insmod /modules/scsi_debug.ko dev_size_mb=768
|
||||||
|
|
||||||
echo -n "creating partition and formatting..."
|
echo -n "creating partition and formatting..."
|
||||||
echo "1,120,L" > /tmp/sfdisk.run
|
#echo "1,767,L" > /tmp/sfdisk.run
|
||||||
/usr/sbin/sfdisk -uM --force /dev/sda < /tmp/sfdisk.run
|
#/usr/sbin/sfdisk -uM --force /dev/sda < /tmp/sfdisk.run
|
||||||
/sbin/mke2fs /dev/sda1
|
/sbin/mke2fs -F /dev/sda
|
||||||
mkdir /nfs
|
mkdir /nfs
|
||||||
/bin/mount /dev/sda1 /nfs
|
/bin/mount /dev/sda /nfs
|
||||||
chmod a+rwx /nfs
|
chmod a+rwx /nfs
|
||||||
/usr/sbin/sfdisk -uM -l /dev/sda
|
#/usr/sbin/sfdisk -uM -l /dev/sda
|
||||||
echo "done."
|
echo "done."
|
||||||
|
|
||||||
|
echo "/nfs 10.0.0.0/255.0.0.0(rw,sync,no_root_squash)" > /etc/exports
|
||||||
echo -n "starting nfs kernel server..."
|
echo -n "starting nfs kernel server..."
|
||||||
/sbin/nfsd 8 &
|
/sbin/portmap
|
||||||
/sbin/statd &
|
/sbin/lockd
|
||||||
/sbin/portmap &
|
/sbin/statd
|
||||||
/sbin/lockd &
|
/sbin/nfsd 8
|
||||||
/sbin/mountd &
|
/sbin/mountd
|
||||||
echo "done."
|
echo "done."
|
||||||
|
|
||||||
echo "Exporting shares..."
|
echo "Exporting shares..."
|
||||||
|
@ -71,6 +66,5 @@ echo -n "signal client to mount..."
|
||||||
echo "server ready" | /usr/bin/netcat -c 10.0.0.2 8000
|
echo "server ready" | /usr/bin/netcat -c 10.0.0.2 8000
|
||||||
echo "done."
|
echo "done."
|
||||||
|
|
||||||
|
|
||||||
echo -n "starting bash shell..."
|
echo -n "starting bash shell..."
|
||||||
/bin/bash
|
/bin/bash
|
||||||
|
|
|
@ -32,12 +32,11 @@ echo "300000" > /proc/sys/net/core/netdev_max_backlog
|
||||||
echo "131072" > /proc/sys/fs/file-max
|
echo "131072" > /proc/sys/fs/file-max
|
||||||
echo "done."
|
echo "done."
|
||||||
|
|
||||||
echo -n "sleeping until server is running..."
|
echo "waiting for server..."
|
||||||
sleep 3
|
/usr/bin/netcat -c -l -p 8000
|
||||||
echo "done."
|
|
||||||
|
|
||||||
echo -n "running surge client..."
|
echo -n "running surge client..."
|
||||||
/bin/bash -c "cd /benchmarks/surge && ./spec-m5 2 100 1 192.168.0.1 5"
|
/bin/bash -c "cd /benchmarks/surge && ./spec-m5 1 20 1 192.168.0.1 5 40000 1000000000 1000"
|
||||||
echo "done."
|
echo "done."
|
||||||
|
|
||||||
echo -n "halting machine"
|
echo -n "halting machine"
|
||||||
|
|
|
@ -47,5 +47,9 @@ sleep 2
|
||||||
cat /benchmarks/apache2/logs/error_log
|
cat /benchmarks/apache2/logs/error_log
|
||||||
echo "done."
|
echo "done."
|
||||||
|
|
||||||
|
echo "notifying client..."
|
||||||
|
echo "server ready" | /usr/bin/netcat -c 192.168.0.10 8000
|
||||||
|
echo "done"
|
||||||
|
|
||||||
echo -n "starting bash shell..."
|
echo -n "starting bash shell..."
|
||||||
/bin/bash
|
/bin/bash
|
||||||
|
|
|
@ -32,9 +32,8 @@ echo "300000" > /proc/sys/net/core/netdev_max_backlog
|
||||||
echo "131072" > /proc/sys/fs/file-max
|
echo "131072" > /proc/sys/fs/file-max
|
||||||
echo "done."
|
echo "done."
|
||||||
|
|
||||||
echo -n "sleeping until server is running..."
|
echo "waiting for server..."
|
||||||
sleep 3
|
/usr/bin/netcat -c -l -p 8000
|
||||||
echo "done."
|
|
||||||
|
|
||||||
echo -n "running surge client..."
|
echo -n "running surge client..."
|
||||||
/bin/bash -c "cd /benchmarks/surge && ./Surge 2 100 1 192.168.0.1 5"
|
/bin/bash -c "cd /benchmarks/surge && ./Surge 2 100 1 192.168.0.1 5"
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
# /etc/init.d/rcS
|
# /etc/init.d/rcS
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
||||||
echo -n "mounting swap..."
|
echo -n "mounting swap..."
|
||||||
/sbin/swapon /dev/hdc1
|
/sbin/swapon /dev/hdc1
|
||||||
echo "done."
|
echo "done."
|
||||||
|
@ -47,5 +48,7 @@ sleep 2
|
||||||
cat /benchmarks/apache2/logs/error_log
|
cat /benchmarks/apache2/logs/error_log
|
||||||
echo "done."
|
echo "done."
|
||||||
|
|
||||||
|
echo "server ready" | /usr/bin/netcat -c 192.168.10 8000
|
||||||
|
|
||||||
echo -n "starting bash shell..."
|
echo -n "starting bash shell..."
|
||||||
/bin/bash
|
/bin/bash
|
||||||
|
|
|
@ -30,10 +30,11 @@
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
#include "cpu/base_cpu.hh"
|
|
||||||
#include "base/cprintf.hh"
|
#include "base/cprintf.hh"
|
||||||
#include "cpu/exec_context.hh"
|
#include "base/loader/symtab.hh"
|
||||||
#include "base/misc.hh"
|
#include "base/misc.hh"
|
||||||
|
#include "cpu/base_cpu.hh"
|
||||||
|
#include "cpu/exec_context.hh"
|
||||||
#include "sim/param.hh"
|
#include "sim/param.hh"
|
||||||
#include "sim/sim_events.hh"
|
#include "sim/sim_events.hh"
|
||||||
|
|
||||||
|
@ -52,7 +53,8 @@ BaseCPU::BaseCPU(const string &_name, int _number_of_threads, bool _def_reg,
|
||||||
Counter max_insts_all_threads,
|
Counter max_insts_all_threads,
|
||||||
Counter max_loads_any_thread,
|
Counter max_loads_any_thread,
|
||||||
Counter max_loads_all_threads,
|
Counter max_loads_all_threads,
|
||||||
System *_system, Tick freq)
|
System *_system, Tick freq,
|
||||||
|
bool _function_trace, Tick _function_trace_start)
|
||||||
: SimObject(_name), frequency(freq), checkInterrupts(true),
|
: SimObject(_name), frequency(freq), checkInterrupts(true),
|
||||||
deferRegistration(_def_reg), number_of_threads(_number_of_threads),
|
deferRegistration(_def_reg), number_of_threads(_number_of_threads),
|
||||||
system(_system)
|
system(_system)
|
||||||
|
@ -61,7 +63,8 @@ BaseCPU::BaseCPU(const string &_name, int _number_of_threads, bool _def_reg,
|
||||||
Counter max_insts_any_thread,
|
Counter max_insts_any_thread,
|
||||||
Counter max_insts_all_threads,
|
Counter max_insts_all_threads,
|
||||||
Counter max_loads_any_thread,
|
Counter max_loads_any_thread,
|
||||||
Counter max_loads_all_threads)
|
Counter max_loads_all_threads,
|
||||||
|
bool _function_trace, Tick _function_trace_start)
|
||||||
: SimObject(_name), deferRegistration(_def_reg),
|
: SimObject(_name), deferRegistration(_def_reg),
|
||||||
number_of_threads(_number_of_threads)
|
number_of_threads(_number_of_threads)
|
||||||
#endif
|
#endif
|
||||||
|
@ -126,7 +129,38 @@ BaseCPU::BaseCPU(const string &_name, int _number_of_threads, bool _def_reg,
|
||||||
memset(interrupts, 0, sizeof(interrupts));
|
memset(interrupts, 0, sizeof(interrupts));
|
||||||
intstatus = 0;
|
intstatus = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
functionTracingEnabled = false;
|
||||||
|
if (_function_trace) {
|
||||||
|
std::string filename = csprintf("ftrace.%s", name());
|
||||||
|
functionTraceStream = makeOutputStream(filename);
|
||||||
|
currentFunctionStart = currentFunctionEnd = 0;
|
||||||
|
functionEntryTick = _function_trace_start;
|
||||||
|
|
||||||
|
if (_function_trace_start == 0) {
|
||||||
|
functionTracingEnabled = true;
|
||||||
|
} else {
|
||||||
|
Event *e =
|
||||||
|
new EventWrapper<BaseCPU, &BaseCPU::enableFunctionTrace>(this,
|
||||||
|
true);
|
||||||
|
e->schedule(_function_trace_start);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
BaseCPU::enableFunctionTrace()
|
||||||
|
{
|
||||||
|
functionTracingEnabled = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
BaseCPU::~BaseCPU()
|
||||||
|
{
|
||||||
|
if (functionTracingEnabled)
|
||||||
|
closeOutputStream(functionTraceStream);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
BaseCPU::init()
|
BaseCPU::init()
|
||||||
|
@ -267,4 +301,32 @@ BaseCPU::unserialize(Checkpoint *cp, const std::string §ion)
|
||||||
|
|
||||||
#endif // FULL_SYSTEM
|
#endif // FULL_SYSTEM
|
||||||
|
|
||||||
|
void
|
||||||
|
BaseCPU::traceFunctionsInternal(Addr pc)
|
||||||
|
{
|
||||||
|
if (!debugSymbolTable)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// if pc enters different function, print new function symbol and
|
||||||
|
// update saved range. Otherwise do nothing.
|
||||||
|
if (pc < currentFunctionStart || pc >= currentFunctionEnd) {
|
||||||
|
string sym_str;
|
||||||
|
bool found = debugSymbolTable->findNearestSymbol(pc, sym_str,
|
||||||
|
currentFunctionStart,
|
||||||
|
currentFunctionEnd);
|
||||||
|
|
||||||
|
if (!found) {
|
||||||
|
// no symbol found: use addr as label
|
||||||
|
sym_str = csprintf("0x%x", pc);
|
||||||
|
currentFunctionStart = pc;
|
||||||
|
currentFunctionEnd = pc + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
ccprintf(*functionTraceStream, " (%d)\n%d: %s",
|
||||||
|
curTick - functionEntryTick, curTick, sym_str);
|
||||||
|
functionEntryTick = curTick;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
DEFINE_SIM_OBJECT_CLASS_NAME("BaseCPU", BaseCPU)
|
DEFINE_SIM_OBJECT_CLASS_NAME("BaseCPU", BaseCPU)
|
||||||
|
|
|
@ -95,16 +95,18 @@ class BaseCPU : public SimObject
|
||||||
BaseCPU(const std::string &_name, int _number_of_threads, bool _def_reg,
|
BaseCPU(const std::string &_name, int _number_of_threads, bool _def_reg,
|
||||||
Counter max_insts_any_thread, Counter max_insts_all_threads,
|
Counter max_insts_any_thread, Counter max_insts_all_threads,
|
||||||
Counter max_loads_any_thread, Counter max_loads_all_threads,
|
Counter max_loads_any_thread, Counter max_loads_all_threads,
|
||||||
System *_system, Tick freq);
|
System *_system, Tick freq,
|
||||||
|
bool _function_trace = false, Tick _function_trace_start = 0);
|
||||||
#else
|
#else
|
||||||
BaseCPU(const std::string &_name, int _number_of_threads, bool _def_reg,
|
BaseCPU(const std::string &_name, int _number_of_threads, bool _def_reg,
|
||||||
Counter max_insts_any_thread = 0,
|
Counter max_insts_any_thread = 0,
|
||||||
Counter max_insts_all_threads = 0,
|
Counter max_insts_all_threads = 0,
|
||||||
Counter max_loads_any_thread = 0,
|
Counter max_loads_any_thread = 0,
|
||||||
Counter max_loads_all_threads = 0);
|
Counter max_loads_all_threads = 0,
|
||||||
|
bool _function_trace = false, Tick _function_trace_start = 0);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
virtual ~BaseCPU() {}
|
virtual ~BaseCPU();
|
||||||
|
|
||||||
virtual void init();
|
virtual void init();
|
||||||
virtual void regStats();
|
virtual void regStats();
|
||||||
|
@ -166,6 +168,23 @@ class BaseCPU : public SimObject
|
||||||
|
|
||||||
virtual Counter totalInstructions() const { return 0; }
|
virtual Counter totalInstructions() const { return 0; }
|
||||||
|
|
||||||
|
// Function tracing
|
||||||
|
private:
|
||||||
|
bool functionTracingEnabled;
|
||||||
|
std::ostream *functionTraceStream;
|
||||||
|
Addr currentFunctionStart;
|
||||||
|
Addr currentFunctionEnd;
|
||||||
|
Tick functionEntryTick;
|
||||||
|
void enableFunctionTrace();
|
||||||
|
void traceFunctionsInternal(Addr pc);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void traceFunctions(Addr pc)
|
||||||
|
{
|
||||||
|
if (functionTracingEnabled)
|
||||||
|
traceFunctionsInternal(pc);
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static std::vector<BaseCPU *> cpuList; //!< Static global cpu list
|
static std::vector<BaseCPU *> cpuList; //!< Static global cpu list
|
||||||
|
|
||||||
|
|
|
@ -48,8 +48,6 @@ using namespace std;
|
||||||
//
|
//
|
||||||
|
|
||||||
|
|
||||||
SymbolTable *debugSymbolTable = NULL;
|
|
||||||
|
|
||||||
void
|
void
|
||||||
Trace::InstRecord::dump(ostream &outs)
|
Trace::InstRecord::dump(ostream &outs)
|
||||||
{
|
{
|
||||||
|
@ -66,11 +64,17 @@ Trace::InstRecord::dump(ostream &outs)
|
||||||
outs << "T" << thread << " : ";
|
outs << "T" << thread << " : ";
|
||||||
|
|
||||||
|
|
||||||
std::string str;
|
std::string sym_str;
|
||||||
if ((debugSymbolTable) && (debugSymbolTable->findNearestSymbol(PC, str)))
|
Addr sym_addr;
|
||||||
outs << "@" << setw(17) << str << " : ";
|
if (debugSymbolTable
|
||||||
else
|
&& debugSymbolTable->findNearestSymbol(PC, sym_str, sym_addr)) {
|
||||||
|
if (PC != sym_addr)
|
||||||
|
sym_str += csprintf("+%d", PC - sym_addr);
|
||||||
|
outs << "@" << sym_str << " : ";
|
||||||
|
}
|
||||||
|
else {
|
||||||
outs << "0x" << hex << PC << " : ";
|
outs << "0x" << hex << PC << " : ";
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Print decoded instruction
|
// Print decoded instruction
|
||||||
|
|
|
@ -123,11 +123,12 @@ SimpleCPU::SimpleCPU(const string &_name,
|
||||||
FunctionalMemory *mem,
|
FunctionalMemory *mem,
|
||||||
MemInterface *icache_interface,
|
MemInterface *icache_interface,
|
||||||
MemInterface *dcache_interface,
|
MemInterface *dcache_interface,
|
||||||
bool _def_reg, Tick freq)
|
bool _def_reg, Tick freq,
|
||||||
|
bool _function_trace, Tick _function_trace_start)
|
||||||
: BaseCPU(_name, /* number_of_threads */ 1, _def_reg,
|
: BaseCPU(_name, /* number_of_threads */ 1, _def_reg,
|
||||||
max_insts_any_thread, max_insts_all_threads,
|
max_insts_any_thread, max_insts_all_threads,
|
||||||
max_loads_any_thread, max_loads_all_threads,
|
max_loads_any_thread, max_loads_all_threads,
|
||||||
_system, freq),
|
_system, freq, _function_trace, _function_trace_start),
|
||||||
#else
|
#else
|
||||||
SimpleCPU::SimpleCPU(const string &_name, Process *_process,
|
SimpleCPU::SimpleCPU(const string &_name, Process *_process,
|
||||||
Counter max_insts_any_thread,
|
Counter max_insts_any_thread,
|
||||||
|
@ -136,10 +137,12 @@ SimpleCPU::SimpleCPU(const string &_name, Process *_process,
|
||||||
Counter max_loads_all_threads,
|
Counter max_loads_all_threads,
|
||||||
MemInterface *icache_interface,
|
MemInterface *icache_interface,
|
||||||
MemInterface *dcache_interface,
|
MemInterface *dcache_interface,
|
||||||
bool _def_reg)
|
bool _def_reg,
|
||||||
|
bool _function_trace, Tick _function_trace_start)
|
||||||
: BaseCPU(_name, /* number_of_threads */ 1, _def_reg,
|
: BaseCPU(_name, /* number_of_threads */ 1, _def_reg,
|
||||||
max_insts_any_thread, max_insts_all_threads,
|
max_insts_any_thread, max_insts_all_threads,
|
||||||
max_loads_any_thread, max_loads_all_threads),
|
max_loads_any_thread, max_loads_all_threads,
|
||||||
|
_function_trace, _function_trace_start),
|
||||||
#endif
|
#endif
|
||||||
tickEvent(this), xc(NULL), cacheCompletionEvent(this)
|
tickEvent(this), xc(NULL), cacheCompletionEvent(this)
|
||||||
{
|
{
|
||||||
|
@ -778,6 +781,8 @@ SimpleCPU::tick()
|
||||||
if (traceData)
|
if (traceData)
|
||||||
traceData->finalize();
|
traceData->finalize();
|
||||||
|
|
||||||
|
traceFunctions(xc->regs.pc);
|
||||||
|
|
||||||
} // if (fault == No_Fault)
|
} // if (fault == No_Fault)
|
||||||
|
|
||||||
if (fault != No_Fault) {
|
if (fault != No_Fault) {
|
||||||
|
@ -836,6 +841,8 @@ BEGIN_DECLARE_SIM_OBJECT_PARAMS(SimpleCPU)
|
||||||
|
|
||||||
Param<bool> defer_registration;
|
Param<bool> defer_registration;
|
||||||
Param<int> multiplier;
|
Param<int> multiplier;
|
||||||
|
Param<bool> function_trace;
|
||||||
|
Param<Tick> function_trace_start;
|
||||||
|
|
||||||
END_DECLARE_SIM_OBJECT_PARAMS(SimpleCPU)
|
END_DECLARE_SIM_OBJECT_PARAMS(SimpleCPU)
|
||||||
|
|
||||||
|
@ -869,7 +876,9 @@ BEGIN_INIT_SIM_OBJECT_PARAMS(SimpleCPU)
|
||||||
INIT_PARAM_DFLT(defer_registration, "defer registration with system "
|
INIT_PARAM_DFLT(defer_registration, "defer registration with system "
|
||||||
"(for sampling)", false),
|
"(for sampling)", false),
|
||||||
|
|
||||||
INIT_PARAM_DFLT(multiplier, "clock multiplier", 1)
|
INIT_PARAM_DFLT(multiplier, "clock multiplier", 1),
|
||||||
|
INIT_PARAM_DFLT(function_trace, "Enable function trace", false),
|
||||||
|
INIT_PARAM_DFLT(function_trace_start, "Cycle to start function trace", 0)
|
||||||
|
|
||||||
END_INIT_SIM_OBJECT_PARAMS(SimpleCPU)
|
END_INIT_SIM_OBJECT_PARAMS(SimpleCPU)
|
||||||
|
|
||||||
|
@ -888,7 +897,8 @@ CREATE_SIM_OBJECT(SimpleCPU)
|
||||||
(icache) ? icache->getInterface() : NULL,
|
(icache) ? icache->getInterface() : NULL,
|
||||||
(dcache) ? dcache->getInterface() : NULL,
|
(dcache) ? dcache->getInterface() : NULL,
|
||||||
defer_registration,
|
defer_registration,
|
||||||
ticksPerSecond * mult);
|
ticksPerSecond * mult,
|
||||||
|
function_trace, function_trace_start);
|
||||||
#else
|
#else
|
||||||
|
|
||||||
cpu = new SimpleCPU(getInstanceName(), workload,
|
cpu = new SimpleCPU(getInstanceName(), workload,
|
||||||
|
@ -896,7 +906,8 @@ CREATE_SIM_OBJECT(SimpleCPU)
|
||||||
max_loads_any_thread, max_loads_all_threads,
|
max_loads_any_thread, max_loads_all_threads,
|
||||||
(icache) ? icache->getInterface() : NULL,
|
(icache) ? icache->getInterface() : NULL,
|
||||||
(dcache) ? dcache->getInterface() : NULL,
|
(dcache) ? dcache->getInterface() : NULL,
|
||||||
defer_registration);
|
defer_registration,
|
||||||
|
function_trace, function_trace_start);
|
||||||
|
|
||||||
#endif // FULL_SYSTEM
|
#endif // FULL_SYSTEM
|
||||||
|
|
||||||
|
|
|
@ -31,7 +31,6 @@
|
||||||
|
|
||||||
#include "cpu/base_cpu.hh"
|
#include "cpu/base_cpu.hh"
|
||||||
#include "sim/eventq.hh"
|
#include "sim/eventq.hh"
|
||||||
#include "base/loader/symtab.hh"
|
|
||||||
#include "cpu/pc_event.hh"
|
#include "cpu/pc_event.hh"
|
||||||
#include "base/statistics.hh"
|
#include "base/statistics.hh"
|
||||||
#include "cpu/exec_context.hh"
|
#include "cpu/exec_context.hh"
|
||||||
|
@ -143,7 +142,8 @@ class SimpleCPU : public BaseCPU
|
||||||
Counter max_loads_any_thread, Counter max_loads_all_threads,
|
Counter max_loads_any_thread, Counter max_loads_all_threads,
|
||||||
AlphaITB *itb, AlphaDTB *dtb, FunctionalMemory *mem,
|
AlphaITB *itb, AlphaDTB *dtb, FunctionalMemory *mem,
|
||||||
MemInterface *icache_interface, MemInterface *dcache_interface,
|
MemInterface *icache_interface, MemInterface *dcache_interface,
|
||||||
bool _def_reg, Tick freq);
|
bool _def_reg, Tick freq,
|
||||||
|
bool _function_trace, Tick _function_trace_start);
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
|
@ -153,7 +153,8 @@ class SimpleCPU : public BaseCPU
|
||||||
Counter max_loads_any_thread,
|
Counter max_loads_any_thread,
|
||||||
Counter max_loads_all_threads,
|
Counter max_loads_all_threads,
|
||||||
MemInterface *icache_interface, MemInterface *dcache_interface,
|
MemInterface *icache_interface, MemInterface *dcache_interface,
|
||||||
bool _def_reg);
|
bool _def_reg,
|
||||||
|
bool _function_trace, Tick _function_trace_start);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -1341,9 +1341,6 @@ NSGigE::rxKick()
|
||||||
|
|
||||||
// sanity check - i think the driver behaves like this
|
// sanity check - i think the driver behaves like this
|
||||||
assert(rxDescCnt >= rxPktBytes);
|
assert(rxDescCnt >= rxPktBytes);
|
||||||
|
|
||||||
// Must clear the value before popping to decrement the
|
|
||||||
// reference count
|
|
||||||
rxFifo.pop();
|
rxFifo.pop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1564,9 +1561,6 @@ NSGigE::transmit()
|
||||||
* besides, it's functionally the same.
|
* besides, it's functionally the same.
|
||||||
*/
|
*/
|
||||||
devIntrPost(ISR_TXOK);
|
devIntrPost(ISR_TXOK);
|
||||||
} else {
|
|
||||||
DPRINTF(Ethernet,
|
|
||||||
"May need to rethink always sending the descriptors back?\n");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!txFifo.empty() && !txEvent.scheduled()) {
|
if (!txFifo.empty() && !txEvent.scheduled()) {
|
||||||
|
@ -1822,7 +1816,11 @@ NSGigE::txKick()
|
||||||
// this is just because the receive can't handle a
|
// this is just because the receive can't handle a
|
||||||
// packet bigger want to make sure
|
// packet bigger want to make sure
|
||||||
assert(txPacket->length <= 1514);
|
assert(txPacket->length <= 1514);
|
||||||
|
#ifndef NDEBUG
|
||||||
|
bool success =
|
||||||
|
#endif
|
||||||
txFifo.push(txPacket);
|
txFifo.push(txPacket);
|
||||||
|
assert(success);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* this following section is not tqo spec, but
|
* this following section is not tqo spec, but
|
||||||
|
@ -1903,6 +1901,7 @@ NSGigE::txKick()
|
||||||
txPacketBufPtr += txXferLen;
|
txPacketBufPtr += txXferLen;
|
||||||
txFragPtr += txXferLen;
|
txFragPtr += txXferLen;
|
||||||
txDescCnt -= txXferLen;
|
txDescCnt -= txXferLen;
|
||||||
|
txFifo.reserve(txXferLen);
|
||||||
|
|
||||||
txState = txFifoBlock;
|
txState = txFifoBlock;
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -36,6 +36,7 @@ PacketFifo::serialize(const string &base, ostream &os)
|
||||||
{
|
{
|
||||||
paramOut(os, base + ".size", _size);
|
paramOut(os, base + ".size", _size);
|
||||||
paramOut(os, base + ".maxsize", _maxsize);
|
paramOut(os, base + ".maxsize", _maxsize);
|
||||||
|
paramOut(os, base + ".reserved", _reserved);
|
||||||
paramOut(os, base + ".packets", fifo.size());
|
paramOut(os, base + ".packets", fifo.size());
|
||||||
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
@ -54,6 +55,7 @@ PacketFifo::unserialize(const string &base, Checkpoint *cp,
|
||||||
{
|
{
|
||||||
paramIn(cp, section, base + ".size", _size);
|
paramIn(cp, section, base + ".size", _size);
|
||||||
paramIn(cp, section, base + ".maxsize", _maxsize);
|
paramIn(cp, section, base + ".maxsize", _maxsize);
|
||||||
|
paramIn(cp, section, base + ".reserved", _reserved);
|
||||||
int fifosize;
|
int fifosize;
|
||||||
paramIn(cp, section, base + ".packets", fifosize);
|
paramIn(cp, section, base + ".packets", fifosize);
|
||||||
|
|
||||||
|
|
|
@ -43,25 +43,36 @@ class PacketFifo
|
||||||
std::list<PacketPtr> fifo;
|
std::list<PacketPtr> fifo;
|
||||||
int _maxsize;
|
int _maxsize;
|
||||||
int _size;
|
int _size;
|
||||||
|
int _reserved;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit PacketFifo(int max) : _maxsize(max), _size(0) {}
|
explicit PacketFifo(int max) : _maxsize(max), _size(0), _reserved(0) {}
|
||||||
virtual ~PacketFifo() {}
|
virtual ~PacketFifo() {}
|
||||||
|
|
||||||
int maxsize() const { return _maxsize; }
|
|
||||||
int packets() const { return fifo.size(); }
|
int packets() const { return fifo.size(); }
|
||||||
|
int maxsize() const { return _maxsize; }
|
||||||
int size() const { return _size; }
|
int size() const { return _size; }
|
||||||
int avail() const { return _maxsize - _size; }
|
int reserved() const { return _reserved; }
|
||||||
bool empty() const { return _size == 0; }
|
int avail() const { return _maxsize - _size - _reserved; }
|
||||||
bool full() const { return _size >= _maxsize; }
|
bool empty() const { return size() <= 0; }
|
||||||
|
bool full() const { return avail() <= 0; }
|
||||||
|
|
||||||
|
int reserve(int len = 0)
|
||||||
|
{
|
||||||
|
_reserved += len;
|
||||||
|
assert(avail() >= 0);
|
||||||
|
return _reserved;
|
||||||
|
}
|
||||||
|
|
||||||
bool push(PacketPtr ptr)
|
bool push(PacketPtr ptr)
|
||||||
{
|
{
|
||||||
if (avail() < ptr->length)
|
assert(_reserved <= ptr->length);
|
||||||
|
if (avail() < ptr->length - _reserved)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
_size += ptr->length;
|
_size += ptr->length;
|
||||||
fifo.push_back(ptr);
|
fifo.push_back(ptr);
|
||||||
|
_reserved = 0;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -81,6 +92,7 @@ class PacketFifo
|
||||||
{
|
{
|
||||||
fifo.clear();
|
fifo.clear();
|
||||||
_size = 0;
|
_size = 0;
|
||||||
|
_reserved = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -35,6 +35,7 @@
|
||||||
* up boot time.
|
* up boot time.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "base/loader/symtab.hh"
|
||||||
#include "base/trace.hh"
|
#include "base/trace.hh"
|
||||||
#include "cpu/exec_context.hh"
|
#include "cpu/exec_context.hh"
|
||||||
#include "cpu/base_cpu.hh"
|
#include "cpu/base_cpu.hh"
|
||||||
|
@ -49,8 +50,6 @@
|
||||||
#include "targetarch/vtophys.hh"
|
#include "targetarch/vtophys.hh"
|
||||||
#include "sim/debug.hh"
|
#include "sim/debug.hh"
|
||||||
|
|
||||||
extern SymbolTable *debugSymbolTable;
|
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
LinuxSystem::LinuxSystem(Params *p)
|
LinuxSystem::LinuxSystem(Params *p)
|
||||||
|
|
|
@ -26,6 +26,7 @@
|
||||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "base/loader/symtab.hh"
|
||||||
#include "base/trace.hh"
|
#include "base/trace.hh"
|
||||||
#include "cpu/exec_context.hh"
|
#include "cpu/exec_context.hh"
|
||||||
#include "kern/tru64/tru64_events.hh"
|
#include "kern/tru64/tru64_events.hh"
|
||||||
|
|
|
@ -34,6 +34,7 @@
|
||||||
|
|
||||||
#include "base/intmath.hh"
|
#include "base/intmath.hh"
|
||||||
#include "base/loader/object_file.hh"
|
#include "base/loader/object_file.hh"
|
||||||
|
#include "base/loader/symtab.hh"
|
||||||
#include "base/statistics.hh"
|
#include "base/statistics.hh"
|
||||||
#include "cpu/exec_context.hh"
|
#include "cpu/exec_context.hh"
|
||||||
#include "cpu/full_cpu/smt.hh"
|
#include "cpu/full_cpu/smt.hh"
|
||||||
|
@ -263,6 +264,18 @@ LiveProcess::LiveProcess(const string &name, ObjectFile *objFile,
|
||||||
// load object file into target memory
|
// load object file into target memory
|
||||||
objFile->loadSections(memory);
|
objFile->loadSections(memory);
|
||||||
|
|
||||||
|
// load up symbols, if any... these may be used for debugging or
|
||||||
|
// profiling.
|
||||||
|
if (!debugSymbolTable) {
|
||||||
|
debugSymbolTable = new SymbolTable();
|
||||||
|
if (!objFile->loadGlobalSymbols(debugSymbolTable) ||
|
||||||
|
!objFile->loadLocalSymbols(debugSymbolTable)) {
|
||||||
|
// didn't load any symbols
|
||||||
|
delete debugSymbolTable;
|
||||||
|
debugSymbolTable = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Set up stack. On Alpha, stack goes below text section. This
|
// Set up stack. On Alpha, stack goes below text section. This
|
||||||
// code should get moved to some architecture-specific spot.
|
// code should get moved to some architecture-specific spot.
|
||||||
stack_base = text_base - (409600+4096);
|
stack_base = text_base - (409600+4096);
|
||||||
|
|
|
@ -44,8 +44,6 @@ vector<System *> System::systemList;
|
||||||
|
|
||||||
int System::numSystemsRunning = 0;
|
int System::numSystemsRunning = 0;
|
||||||
|
|
||||||
extern SymbolTable *debugSymbolTable;
|
|
||||||
|
|
||||||
System::System(Params *p)
|
System::System(Params *p)
|
||||||
: SimObject(p->name), memctrl(p->memctrl), physmem(p->physmem),
|
: SimObject(p->name), memctrl(p->memctrl), physmem(p->physmem),
|
||||||
init_param(p->init_param), params(p)
|
init_param(p->init_param), params(p)
|
||||||
|
|
|
@ -32,7 +32,6 @@
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include "base/loader/symtab.hh"
|
|
||||||
#include "base/statistics.hh"
|
#include "base/statistics.hh"
|
||||||
#include "cpu/pc_event.hh"
|
#include "cpu/pc_event.hh"
|
||||||
#include "kern/system_events.hh"
|
#include "kern/system_events.hh"
|
||||||
|
@ -43,6 +42,7 @@ class PhysicalMemory;
|
||||||
class Platform;
|
class Platform;
|
||||||
class RemoteGDB;
|
class RemoteGDB;
|
||||||
class GDBListener;
|
class GDBListener;
|
||||||
|
class SymbolTable;
|
||||||
class ObjectFile;
|
class ObjectFile;
|
||||||
class ExecContext;
|
class ExecContext;
|
||||||
namespace Kernel { class Binning; }
|
namespace Kernel { class Binning; }
|
||||||
|
|
|
@ -152,9 +152,8 @@ class Statistic(object):
|
||||||
def __setattr__(self, attr, value):
|
def __setattr__(self, attr, value):
|
||||||
if attr == 'bins' or attr == 'ticks':
|
if attr == 'bins' or attr == 'ticks':
|
||||||
if attr == 'bins':
|
if attr == 'bins':
|
||||||
global db
|
|
||||||
if value is not None:
|
if value is not None:
|
||||||
value = db.getBin(value)
|
value = source.getBin(value)
|
||||||
elif attr == 'samples' and type(value) is str:
|
elif attr == 'samples' and type(value) is str:
|
||||||
value = [ int(x) for x in value.split() ]
|
value = [ int(x) for x in value.split() ]
|
||||||
|
|
||||||
|
|
|
@ -43,7 +43,7 @@ def graphdata(runs, tag, label, value):
|
||||||
import info
|
import info
|
||||||
configs = ['stx', 'ste', 'hte', 'htd', 'ocm', 'occ', 'ocp' ]
|
configs = ['stx', 'ste', 'hte', 'htd', 'ocm', 'occ', 'ocp' ]
|
||||||
benchmarks = [ 'm', 's' ]
|
benchmarks = [ 'm', 's' ]
|
||||||
dmas = [ 'X', 'D' ]
|
dmas = [ 'x', 'd', 'b' ]
|
||||||
caches = [ '2', '4' ]
|
caches = [ '2', '4' ]
|
||||||
checkpoints = [ '1' ]
|
checkpoints = [ '1' ]
|
||||||
|
|
||||||
|
@ -56,7 +56,7 @@ def graphdata(runs, tag, label, value):
|
||||||
|
|
||||||
for bench,dma,cache,cpt in names:
|
for bench,dma,cache,cpt in names:
|
||||||
base = '%s.%s.%s.%s' % (bench, dma, cache, cpt)
|
base = '%s.%s.%s.%s' % (bench, dma, cache, cpt)
|
||||||
fname = '/n/ziff/z/binkertn/graph/test2/data/%s.%s.dat' % (tag, base)
|
fname = 'data/%s.%s.dat' % (tag, base)
|
||||||
f = open(fname, 'w')
|
f = open(fname, 'w')
|
||||||
print >>f, '#set TITLE = %s' % base
|
print >>f, '#set TITLE = %s' % base
|
||||||
print >>f, '#set xlbl = Configuration'
|
print >>f, '#set xlbl = Configuration'
|
||||||
|
@ -132,8 +132,6 @@ def commands(options, command, args):
|
||||||
info.source.connect()
|
info.source.connect()
|
||||||
info.source.update_dict(globals())
|
info.source.update_dict(globals())
|
||||||
|
|
||||||
system = info.source.__dict__[options.system]
|
|
||||||
|
|
||||||
if type(options.get) is str:
|
if type(options.get) is str:
|
||||||
info.source.get = options.get
|
info.source.get = options.get
|
||||||
|
|
||||||
|
@ -178,6 +176,26 @@ def commands(options, command, args):
|
||||||
if options.graph:
|
if options.graph:
|
||||||
graphdata(runs, stat.name, stat.name, stat)
|
graphdata(runs, stat.name, stat.name, stat)
|
||||||
else:
|
else:
|
||||||
|
if options.binned:
|
||||||
|
print 'kernel ticks'
|
||||||
|
stat.bins = 'kernel'
|
||||||
|
printdata(runs, stat)
|
||||||
|
|
||||||
|
print 'idle ticks'
|
||||||
|
stat.bins = 'idle'
|
||||||
|
printdata(runs, stat)
|
||||||
|
|
||||||
|
print 'user ticks'
|
||||||
|
stat.bins = 'user'
|
||||||
|
printdata(runs, stat)
|
||||||
|
|
||||||
|
print 'interrupt ticks'
|
||||||
|
stat.bins = 'user'
|
||||||
|
printdata(runs, stat)
|
||||||
|
|
||||||
|
print 'total ticks'
|
||||||
|
|
||||||
|
stat.bins = None
|
||||||
print stat.name
|
print stat.name
|
||||||
printdata(runs, stat)
|
printdata(runs, stat)
|
||||||
return
|
return
|
||||||
|
@ -212,6 +230,8 @@ def commands(options, command, args):
|
||||||
if len(args):
|
if len(args):
|
||||||
raise CommandException
|
raise CommandException
|
||||||
|
|
||||||
|
system = info.source.__dict__[options.system]
|
||||||
|
|
||||||
if command == 'usertime':
|
if command == 'usertime':
|
||||||
import copy
|
import copy
|
||||||
kernel = copy.copy(system.full_cpu.numCycles)
|
kernel = copy.copy(system.full_cpu.numCycles)
|
||||||
|
|
Loading…
Reference in a new issue