Compare commits
3 Commits
a287df261c
...
b141ba1e38
| Author | SHA1 | Date | |
|---|---|---|---|
|
b141ba1e38
|
|||
|
959c9a8bee
|
|||
|
86e3814fb2
|
@ -34,6 +34,7 @@ my $remote_root = '/home/lab/smchurla/Documents/failnix';
|
|||||||
my $remote_db_conf = "$remote_root/db.conf";
|
my $remote_db_conf = "$remote_root/db.conf";
|
||||||
my $remote_builds_dir = "$remote_root/builds";
|
my $remote_builds_dir = "$remote_root/builds";
|
||||||
my $remote_runner = "$remote_root/scripts/runner.pl";
|
my $remote_runner = "$remote_root/scripts/runner.pl";
|
||||||
|
my $remote_log = "$remote_root/runner.log";
|
||||||
|
|
||||||
# The mars db is bound to local port 3306 over SSH.
|
# The mars db is bound to local port 3306 over SSH.
|
||||||
# - This requires using the configured 'mars'
|
# - This requires using the configured 'mars'
|
||||||
@ -111,15 +112,22 @@ foreach (@experiments) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Kill old screen session (don't check success as a session might not exist)
|
# Kill old screen session (don't check success as a session might not exist)
|
||||||
say "Killing previous screen session with name $screen_name";
|
# say "Killing previous screen session with name $screen_name";
|
||||||
$ssh->system( "screen", "-XS", $screen_name, "quit" );
|
# $ssh->system( "screen", "-XS", $screen_name, "quit" );
|
||||||
|
|
||||||
# Start new screen session
|
# Start new screen session
|
||||||
my $invoke_runner = "perl " . shell_quote($remote_runner);
|
# my $invoke_runner =
|
||||||
say
|
# "cd " . shell_quote($remote_root) . " && perl " . shell_quote($remote_runner);
|
||||||
"Starting new screen session with name $screen_name and command $invoke_runner";
|
# say
|
||||||
remote( $ssh, "screen", "-dmS", $screen_name, "sh", "-lc",
|
# "Starting new screen session with name $screen_name and command $invoke_runner";
|
||||||
"exec $invoke_runner" );
|
# remote( $ssh, "screen", "-dmS", $screen_name, "sh", "-lc",
|
||||||
|
# "exec $invoke_runner" );
|
||||||
|
|
||||||
|
remote( $ssh,
|
||||||
|
"nohup sh -c "
|
||||||
|
. shell_quote("cd $remote_root && perl $remote_runner") . " >"
|
||||||
|
. shell_quote($remote_log)
|
||||||
|
. " 2>&1 < /dev/null &" );
|
||||||
|
|
||||||
say "Started remote runner for ", scalar(@experiments), " experiments";
|
say "Started remote runner for ", scalar(@experiments), " experiments";
|
||||||
|
|
||||||
|
|||||||
@ -46,17 +46,23 @@ my $dbh = DBI->connect( "DBI:MariaDB:host=$db_host;port=$db_port",
|
|||||||
or die 'Failed to connect to database: ' . $DBI::errstr;
|
or die 'Failed to connect to database: ' . $DBI::errstr;
|
||||||
say 'Connected to database';
|
say 'Connected to database';
|
||||||
|
|
||||||
say 'Existing databases:';
|
while (1) {
|
||||||
my @db_names =
|
say 'Existing databases:';
|
||||||
|
my @db_names =
|
||||||
sort
|
sort
|
||||||
map { s/DBI:MariaDB://r }
|
map { s/DBI:MariaDB://r }
|
||||||
grep { !/information_schema|smchurla_ll/ } $dbh->data_sources();
|
grep { !/information_schema|smchurla_ll/ } $dbh->data_sources();
|
||||||
foreach (@db_names) { say " - $_"; }
|
foreach (@db_names) { say " - $_"; }
|
||||||
|
|
||||||
print 'Enter name to delete: ';
|
print 'Enter single name or comma-separated list to delete: ';
|
||||||
my $db_sel = <STDIN>;
|
my $db_sel = <STDIN>;
|
||||||
chomp $db_sel;
|
chomp $db_sel;
|
||||||
$dbh->do("drop database `$db_sel`")
|
my @selected_dbs = $db_sel eq "all" ? @db_names : split( ',', $db_sel );
|
||||||
|
foreach (@selected_dbs) {
|
||||||
|
$dbh->do("drop database `$_`")
|
||||||
or die "Failed to drop database: " . $dbh->errstr;
|
or die "Failed to drop database: " . $dbh->errstr;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$dbh->disconnect or warn $dbh->errstr;
|
$dbh->disconnect or warn $dbh->errstr;
|
||||||
|
|||||||
@ -86,7 +86,7 @@ sub trace {
|
|||||||
notify("Tracing $experiment...");
|
notify("Tracing $experiment...");
|
||||||
|
|
||||||
system(
|
system(
|
||||||
"$bochs_runner -V $fail_share/vgabios.bin -b $fail_share/BIOS-bochs-latest -1 -f $fail_trace -e $remote_builds_dir/$experiment/system.elf -i $remote_builds_dir/$experiment/system.iso -- -Wf,--start-symbol=fail_start_trace -Wf,--save-symbol=fail_start_trace -Wf,--end-symbol=fail_stop_trace -Wf,--state-file=$remote_builds_dir/$experiment/state -Wf,--trace-file=$remote_builds_dir/$experiment/trace.pb -Wf,--elf-file=$remote_builds_dir/$experiment/system.elf"
|
"$bochs_runner -V $fail_share/vgabios.bin -b $fail_share/BIOS-bochs-latest -1 -f $fail_trace -e $remote_builds_dir/$experiment/system.elf -i $remote_builds_dir/$experiment/system.iso -- -Wf,--start-symbol=fail_start_trace -Wf,--save-symbol=fail_start_trace -Wf,--end-symbol=fail_stop_trace -Wf,--state-file=$remote_builds_dir/$experiment/state -Wf,--trace-file=$remote_builds_dir/$experiment/trace.pb -Wf,--elf-file=$remote_builds_dir/$experiment/system.elf"
|
||||||
);
|
);
|
||||||
|
|
||||||
# notify("Tracing $experiment complete.");
|
# notify("Tracing $experiment complete.");
|
||||||
@ -98,24 +98,26 @@ sub import_trace {
|
|||||||
notify("Importing $experiment trace...");
|
notify("Importing $experiment trace...");
|
||||||
|
|
||||||
system(
|
system(
|
||||||
"$fail_import --database-option-file $remote_db_conf -t $remote_builds_dir/$experiment/trace.pb -i MemoryImporter -e $remote_builds_dir/$experiment/system.elf -v $experiment -b mem"
|
"$fail_import --database-option-file $remote_db_conf -t $remote_builds_dir/$experiment/trace.pb -i MemoryImporter -e $remote_builds_dir/$experiment/system.elf -v $experiment -b mem"
|
||||||
);
|
);
|
||||||
system(
|
system(
|
||||||
"$fail_import --database-option-file $remote_db_conf -t $remote_builds_dir/$experiment/trace.pb -i RegisterImporter -e $remote_builds_dir/$experiment/system.elf -v $experiment -b regs --flags"
|
"$fail_import --database-option-file $remote_db_conf -t $remote_builds_dir/$experiment/trace.pb -i RegisterImporter -e $remote_builds_dir/$experiment/system.elf -v $experiment -b regs --flags"
|
||||||
);
|
);
|
||||||
system(
|
system(
|
||||||
"$fail_import --database-option-file $remote_db_conf -t $remote_builds_dir/$experiment/trace.pb -i RegisterImporter -e $remote_builds_dir/$experiment/system.elf -v $experiment -b ip --no-gp --ip"
|
"$fail_import --database-option-file $remote_db_conf -t $remote_builds_dir/$experiment/trace.pb -i RegisterImporter -e $remote_builds_dir/$experiment/system.elf -v $experiment -b ip --no-gp --ip"
|
||||||
);
|
);
|
||||||
system(
|
system(
|
||||||
"$fail_import --database-option-file $remote_db_conf -t $remote_builds_dir/$experiment/trace.pb -i ElfImporter --objdump objdump -e $remote_builds_dir/$experiment/system.elf -v $experiment -b ip"
|
"$fail_import --database-option-file $remote_db_conf -t $remote_builds_dir/$experiment/trace.pb -i ElfImporter --objdump objdump -e $remote_builds_dir/$experiment/system.elf -v $experiment -b ip"
|
||||||
);
|
);
|
||||||
system(
|
system(
|
||||||
"$fail_import --database-option-file $remote_db_conf -t $remote_builds_dir/$experiment/trace.pb -i ElfImporter --objdump objdump -e $remote_builds_dir/$experiment/system.elf -v $experiment -b mem"
|
"$fail_import --database-option-file $remote_db_conf -t $remote_builds_dir/$experiment/trace.pb -i ElfImporter --objdump objdump -e $remote_builds_dir/$experiment/system.elf -v $experiment -b mem"
|
||||||
);
|
);
|
||||||
system(
|
system(
|
||||||
"$fail_import --database-option-file $remote_db_conf -t $remote_builds_dir/$experiment/trace.pb -i ElfImporter --objdump objdump -e $remote_builds_dir/$experiment/system.elf -v $experiment -b regs"
|
"$fail_import --database-option-file $remote_db_conf -t $remote_builds_dir/$experiment/trace.pb -i ElfImporter --objdump objdump -e $remote_builds_dir/$experiment/system.elf -v $experiment -b regs"
|
||||||
|
);
|
||||||
|
system(
|
||||||
|
"$fail_prune --database-option-file $remote_db_conf -v $experiment -b %% --overwrite"
|
||||||
);
|
);
|
||||||
system( "$fail_prune --database-option-file $remote_db_conf -v $experiment -b %% --overwrite" );
|
|
||||||
|
|
||||||
# notify("Importing $experiment trace complete.");
|
# notify("Importing $experiment trace complete.");
|
||||||
}
|
}
|
||||||
@ -132,17 +134,17 @@ sub inject {
|
|||||||
|
|
||||||
# child -> server
|
# child -> server
|
||||||
exec(
|
exec(
|
||||||
"$fail_server --port $fail_server_port --database-option-file $remote_db_conf -v $experiment -b % --inject-single-bit --inject-registers"
|
"$fail_server --port $fail_server_port --database-option-file $remote_db_conf -v $experiment -b % --inject-single-bit --inject-registers"
|
||||||
) or die "exec server failed: $!";
|
) or die "exec server failed: $!";
|
||||||
}
|
}
|
||||||
|
|
||||||
# parent -> client
|
# parent -> client
|
||||||
# my $count = cpu_count();
|
# my $count = 1;
|
||||||
my $count = 1;
|
my $count = cpu_count();
|
||||||
|
|
||||||
# "-Wf,--catch-write-textsegment",
|
# "-Wf,--catch-write-textsegment",
|
||||||
system(
|
system(
|
||||||
"nice $bochs_runner -V $fail_share/vgabios.bin -b $fail_share/BIOS-bochs-latest -f $fail_inject -e $remote_builds_dir/$experiment/system.elf -i $remote_builds_dir/$experiment/system.iso -j $count -- -Wf,--server-port=$fail_server_port -Wf,--state-dir=$remote_builds_dir/$experiment/state -Wf,--trap -Wf,--catch-outerspace -Wf,--timeout=500000 -Wf,--ok-marker=fail_marker_positive -Wf,--fail-marker=fail_marker_negative -Wf,--detected-marker=fail_marker_detected > /dev/null"
|
"nice $bochs_runner -V $fail_share/vgabios.bin -b $fail_share/BIOS-bochs-latest -f $fail_inject -e $remote_builds_dir/$experiment/system.elf -i $remote_builds_dir/$experiment/system.iso -j $count -- -Wf,--server-port=$fail_server_port -Wf,--state-dir=$remote_builds_dir/$experiment/state -Wf,--trap -Wf,--catch-outerspace -Wf,--timeout=500000 -Wf,--ok-marker=fail_marker_positive -Wf,--fail-marker=fail_marker_negative -Wf,--detected-marker=fail_marker_detected > /dev/null"
|
||||||
) or die "client failed: $?";
|
) or die "client failed: $?";
|
||||||
|
|
||||||
kill 'TERM', $pid;
|
kill 'TERM', $pid;
|
||||||
|
|||||||
Reference in New Issue
Block a user