experiments/dciao-kernelstructs: new database driven experiment for DCiAO

The dciao-kernelstructs experiment does a trace imported by the
DCiAOKernelImporter:

   bin/import-trace -t trace.pb  -i DCiAOKernelImporter --elf-file app.elf

Pruned by the basic method:

   bin/prune-trace

and does CiAO fault injection experiments, where the results are
stored in the database.

Change-Id: I485dc2e5097b3ebaf354241f474ee3d317213707
This commit is contained in:
Christian Dietrich
2013-03-26 17:12:14 +01:00
parent bd8636b0e8
commit c24ed774b0
14 changed files with 622 additions and 42 deletions

View File

@ -5,9 +5,10 @@ extend google.protobuf.FieldOptions {
}
message DatabaseCampaignMessage {
required int32 pilot_id = 1 [(sql_primary_key) = true];
required int32 variant_id = 2 [(sql_ignore) = true];
required int32 fspmethod_id = 3 [(sql_ignore) = true];
required int32 instr2 = 4 [(sql_ignore) = true];
required int32 data_address = 5 [(sql_ignore) = true];
required int32 pilot_id = 1 [(sql_primary_key) = true];
required int32 variant_id = 2 [(sql_ignore) = true];
required int32 fspmethod_id = 3 [(sql_ignore) = true];
required int32 injection_instr = 4 [(sql_ignore) = true];
optional int32 injection_instr_absolute = 5 [(sql_ignore) = true];
required int32 data_address = 6 [(sql_ignore) = true];
}

View File

@ -82,15 +82,15 @@ bool DatabaseCampaign::run() {
/* Gather all unfinished jobs */
int experiment_count;
std::string sql_select = "SELECT pilot_id, fspgroup.fspmethod_id, fspgroup.variant_id, fspgroup.instr2, fspgroup.data_address ";
std::string sql_select = "SELECT pilot_id, g.fspmethod_id, g.variant_id, g.injection_instr, g.injection_instr_absolute, g.data_address";
std::stringstream ss;
ss << " FROM fspgroup INNER JOIN fsppilot ON fsppilot.id = fspgroup.pilot_id "
<< " WHERE known_outcome = 0 "
<< " AND fspgroup.fspmethod_id = " << fspmethod_id
<< " AND fspgroup.variant_id = " << variant_id
// << " AND fsppilot.data_address = 1346688"
<< " AND (SELECT COUNT(*) FROM " + db_connect.result_table() + " as r WHERE r.pilot_id = fspgroup.pilot_id) = 0"
<< " ORDER BY fspgroup.instr2";
ss << " FROM fspgroup g"
<< " INNER JOIN fsppilot p ON p.id = g.pilot_id "
<< " WHERE p.known_outcome = 0 "
<< " AND g.fspmethod_id = " << fspmethod_id
<< " AND g.variant_id = " << variant_id
<< " AND (SELECT COUNT(*) FROM " + db_connect.result_table() + " as r WHERE r.pilot_id = g.pilot_id) = 0"
<< " ORDER BY g.injection_instr";
std::string sql_body = ss.str();
/* Get the number of unfinished experiments */
@ -105,15 +105,19 @@ bool DatabaseCampaign::run() {
sent_pilots = 0;
while ((row = mysql_fetch_row(pilots)) != 0) {
unsigned pilot_id = atoi(row[0]);
unsigned instr2 = atoi(row[3]);
unsigned data_address = atoi(row[4]);
unsigned pilot_id = atoi(row[0]);
unsigned injection_instr = atoi(row[3]);
unsigned data_address = atoi(row[5]);
DatabaseCampaignMessage pilot;
pilot.set_pilot_id(pilot_id);
pilot.set_fspmethod_id(fspmethod_id);
pilot.set_variant_id(variant_id);
pilot.set_instr2(instr2);
pilot.set_injection_instr(injection_instr);
if (row[4]) {
unsigned injection_instr_absolute = atoi(row[4]);
pilot.set_injection_instr_absolute(injection_instr_absolute);
}
pilot.set_data_address(data_address);
this->cb_send_pilot(pilot);