RAMpage experiment: allow more than one empty test cycle

git-svn-id: https://www4.informatik.uni-erlangen.de/i4svn/danceos/trunk/devel/fail@1678 8c4709b5-6ec9-48aa-a5cd-a96041d1645a
This commit is contained in:
hsc
2012-09-23 17:28:10 +00:00
parent 7513dacad1
commit 7ffd6611d3
4 changed files with 14 additions and 8 deletions

View File

@ -71,6 +71,7 @@ bool RAMpageCampaign::run()
d->msg.set_mem_addr(addr); d->msg.set_mem_addr(addr);
d->msg.set_mem_bit(4); d->msg.set_mem_bit(4);
d->msg.set_errortype(d->msg.ERROR_STUCK_AT_1); d->msg.set_errortype(d->msg.ERROR_STUCK_AT_1);
d->msg.set_empty_passes(2);
d->msg.set_local_timeout(1000*60*10); // 10m d->msg.set_local_timeout(1000*60*10); // 10m
d->msg.set_global_timeout(1000*60*50); // 50m d->msg.set_global_timeout(1000*60*50); // 50m
campaignmanager.addParam(d); campaignmanager.addParam(d);

View File

@ -150,21 +150,24 @@ bool RAMpageExperiment::handleIO(char c)
// calculating stats // calculating stats
if (!m_output.compare(0, sizeof(STR_STATS)-1, STR_STATS)) { if (!m_output.compare(0, sizeof(STR_STATS)-1, STR_STATS)) {
if (m_last_line_was_startingtestpass) { if (m_empty_passes > 0) {
m_log << "no PFNs were tested this time (#" << dec << m_empty_passes << ")" << std::endl;
}
if (m_empty_passes >= m_param->msg.empty_passes()) {
// result: NO_PFNS_TESTED // result: NO_PFNS_TESTED
m_log << "no PFNs were tested this time" << std::endl; m_log << "giving up" << std::endl;
terminateExperiment(m_param->msg.NO_PFNS_TESTED); terminateExperiment(m_param->msg.NO_PFNS_TESTED);
} }
m_log << STR_STATS << std::endl; m_log << STR_STATS << std::endl;
// starting test pass // starting test pass
} else if (!m_output.compare(0, sizeof(STR_START)-1, STR_START)) { } else if (!m_output.compare(0, sizeof(STR_START)-1, STR_START)) {
m_last_line_was_startingtestpass = true; ++m_empty_passes;
m_log << STR_START << std::endl; m_log << STR_START << std::endl;
// tested %08x-%08x %08x-%08x ... // tested %08x-%08x %08x-%08x ...
} else if (!m_output.compare(0, sizeof(STR_TESTED)-1, STR_TESTED)) { } else if (!m_output.compare(0, sizeof(STR_TESTED)-1, STR_TESTED)) {
m_last_line_was_startingtestpass = false; m_empty_passes = 0;
//m_log << STR_TESTED << std::endl; //m_log << STR_TESTED << std::endl;
// test whether the failing PFN was listed // test whether the failing PFN was listed

View File

@ -15,7 +15,7 @@ class RAMpageExperiment : public fail::ExperimentFlow {
fail::JobClient m_jc; fail::JobClient m_jc;
fail::Logger m_log; fail::Logger m_log;
std::string m_output; std::string m_output;
bool m_last_line_was_startingtestpass; unsigned m_empty_passes;
fail::MemoryManager& m_mm; fail::MemoryManager& m_mm;
RAMpageExperimentData *m_param; RAMpageExperimentData *m_param;
std::time_t m_starttime; std::time_t m_starttime;
@ -25,7 +25,7 @@ class RAMpageExperiment : public fail::ExperimentFlow {
void terminateExperiment(int resulttype); void terminateExperiment(int resulttype);
public: public:
RAMpageExperiment() RAMpageExperiment()
: m_log("RAMpage"), m_last_line_was_startingtestpass(false), : m_log("RAMpage"), m_empty_passes(0),
m_mm(fail::simulator.getMemoryManager()) {} m_mm(fail::simulator.getMemoryManager()) {}
bool run(); bool run();
}; };

View File

@ -16,10 +16,12 @@ message RAMpageProtoMsg {
ERROR_INVERSE_COUPLING = 5; ERROR_INVERSE_COUPLING = 5;
} }
required ErrorType errortype = 4; required ErrorType errortype = 4;
// number of empty passes until we give up
required uint32 empty_passes = 5;
// local timeout (between newlines on ttyS1) // local timeout (between newlines on ttyS1)
required uint32 local_timeout = 5; required uint32 local_timeout = 6;
// global timeout // global timeout
required uint32 global_timeout = 6; required uint32 global_timeout = 7;
// ---------------------------------------------------- // ----------------------------------------------------