wait for fail server port
This commit is contained in:
@ -4,6 +4,8 @@ use strict;
|
||||
use warnings;
|
||||
use diagnostics;
|
||||
|
||||
use IO::Socket::INET;
|
||||
|
||||
use feature 'say';
|
||||
|
||||
my $remote_root = '/home/lab/smchurla/Documents/failnix';
|
||||
@ -75,6 +77,29 @@ sub update_db_config {
|
||||
say "Updated db.conf for database $db_prefix\_$experiment";
|
||||
}
|
||||
|
||||
sub wait_for_port {
|
||||
my ( $host, $port, $timeout ) = @_;
|
||||
my $deadline = time + $timeout;
|
||||
|
||||
while ( time < $deadline ) {
|
||||
my $sock = IO::Socket::INET->new(
|
||||
PeerHost => $host,
|
||||
PeerPort => $port,
|
||||
Proto => 'tcp',
|
||||
Timeout => 1,
|
||||
);
|
||||
|
||||
if ($sock) {
|
||||
close $sock;
|
||||
return 1;
|
||||
}
|
||||
|
||||
select undef, undef, undef, 0.1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
sub cpu_count {
|
||||
open( my $handle, "/proc/cpuinfo" ) or die "Can't open cpuinfo: $!\n";
|
||||
my $count = scalar( map /^processor/, <$handle> );
|
||||
@ -96,7 +121,23 @@ sub trace {
|
||||
notify("Tracing $experiment...");
|
||||
|
||||
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"
|
||||
join " ",
|
||||
(
|
||||
"$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.");
|
||||
@ -108,25 +149,93 @@ sub import_trace {
|
||||
notify("Importing $experiment trace...");
|
||||
|
||||
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"
|
||||
join " ",
|
||||
(
|
||||
"$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(
|
||||
"$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"
|
||||
join " ",
|
||||
(
|
||||
"$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(
|
||||
"$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"
|
||||
join " ",
|
||||
(
|
||||
"$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(
|
||||
join " ",
|
||||
(
|
||||
"$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(
|
||||
"$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"
|
||||
join " ",
|
||||
(
|
||||
"$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(
|
||||
"$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"
|
||||
join " ",
|
||||
(
|
||||
"$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_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"
|
||||
join " ",
|
||||
(
|
||||
"$fail_prune",
|
||||
"--database-option-file $remote_db_conf",
|
||||
"-v $experiment",
|
||||
"-b %%", "--overwrite"
|
||||
)
|
||||
);
|
||||
|
||||
# notify("Importing $experiment trace complete.");
|
||||
@ -147,17 +256,53 @@ sub inject {
|
||||
if ( $pid == 0 ) {
|
||||
|
||||
# child -> server
|
||||
|
||||
say "Running server in child process...";
|
||||
exec(
|
||||
"$fail_server --port $fail_server_port --database-option-file $remote_db_conf -v $experiment -b % --inject-single-bit --inject-registers"
|
||||
join " ",
|
||||
(
|
||||
"$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: $!";
|
||||
}
|
||||
|
||||
# parent -> client
|
||||
# "-Wf,--catch-write-textsegment",
|
||||
|
||||
say "Waiting for server...";
|
||||
die "Server did not become ready on port $fail_server_port\n"
|
||||
unless wait_for_port( "127.0.0.1", $fail_server_port, 10 );
|
||||
|
||||
say "Running client with $count cores in parent process";
|
||||
|
||||
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"
|
||||
join " ",
|
||||
(
|
||||
"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,--catch-write-textsegment",
|
||||
"-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: $?";
|
||||
|
||||
say "Killing server with pid $pid...";
|
||||
@ -187,7 +332,7 @@ sub results {
|
||||
notify("Querying $experiment...");
|
||||
|
||||
my $results_overview_query = "SELECT
|
||||
variant, benchmark, resulttype, sum(t.time2 - t.time1 + 1) as faults
|
||||
variant, benchmark, resulttype, sum(t.time2 - t.time1 + 1) AS faults
|
||||
FROM variant v
|
||||
JOIN trace t ON v.id = t.variant_id
|
||||
JOIN fspgroup g ON g.variant_id = t.variant_id AND g.instr2 = t.instr2 AND g.data_address = t.data_address
|
||||
|
||||
Reference in New Issue
Block a user