Compare commits
9 Commits
a6f33f1960
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
0dccd1df46
|
|||
|
9db4cb8bb1
|
|||
| 10fe608a90 | |||
|
2de6e20675
|
|||
|
bc98e2af5c
|
|||
|
3819e84acb
|
|||
|
6ce8987ebd
|
|||
|
6859402483
|
|||
|
32b1f3fa31
|
BIN
fail/bin/fail-x86-tracing
(Stored with Git LFS)
BIN
fail/bin/fail-x86-tracing
(Stored with Git LFS)
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
fail/bin/generic-experiment-client
(Stored with Git LFS)
BIN
fail/bin/generic-experiment-client
(Stored with Git LFS)
Binary file not shown.
BIN
fail/bin/generic-experiment-server
(Stored with Git LFS)
BIN
fail/bin/generic-experiment-server
(Stored with Git LFS)
Binary file not shown.
BIN
fail/bin/import-trace
(Stored with Git LFS)
BIN
fail/bin/import-trace
(Stored with Git LFS)
Binary file not shown.
BIN
fail/bin/prune-trace
(Stored with Git LFS)
BIN
fail/bin/prune-trace
(Stored with Git LFS)
Binary file not shown.
@ -12,7 +12,7 @@ benchmark, resulttype, SUM(t.time2 - t.time1 + 1) AS faults,
|
||||
CONCAT('0x', HEX(p.injection_instr_absolute)) AS fault_address
|
||||
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
|
||||
JOIN fspgroup g ON g.variant_id = t.variant_id AND g.instr2 = t.instr2 AND g.data_physical_address = t.data_physical_address
|
||||
JOIN result_GenericExperimentMessage r ON r.pilot_id = g.pilot_id
|
||||
JOIN fsppilot p ON r.pilot_id = p.id
|
||||
WHERE v.variant = '$experiment'
|
||||
|
||||
@ -11,7 +11,7 @@ sub query {
|
||||
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
|
||||
JOIN fspgroup g ON g.variant_id = t.variant_id AND g.instr2 = t.instr2 AND g.data_physical_address = t.data_physical_address
|
||||
JOIN result_GenericExperimentMessage r ON r.pilot_id = g.pilot_id
|
||||
JOIN fsppilot p ON r.pilot_id = p.id
|
||||
WHERE v.variant = '$experiment'
|
||||
|
||||
@ -11,7 +11,7 @@ sub query {
|
||||
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
|
||||
JOIN fspgroup g ON g.variant_id = t.variant_id AND g.instr2 = t.instr2 AND g.data_physical_address = t.data_physical_address
|
||||
JOIN result_GenericExperimentMessage r ON r.pilot_id = g.pilot_id
|
||||
JOIN fsppilot p ON r.pilot_id = p.id
|
||||
WHERE v.variant = '$experiment'
|
||||
|
||||
@ -136,7 +136,8 @@ sub import_trace {
|
||||
"-v $experiment",
|
||||
"-b ip",
|
||||
"--objdump objdump",
|
||||
"--sources",
|
||||
|
||||
# "--sources",
|
||||
)
|
||||
);
|
||||
system(
|
||||
@ -150,7 +151,8 @@ sub import_trace {
|
||||
"-v $experiment",
|
||||
"-b mem",
|
||||
"--objdump objdump",
|
||||
"--sources",
|
||||
|
||||
# "--sources",
|
||||
)
|
||||
);
|
||||
system(
|
||||
@ -164,7 +166,8 @@ sub import_trace {
|
||||
"-v $experiment",
|
||||
"-b regs",
|
||||
"--objdump objdump",
|
||||
"--sources",
|
||||
|
||||
# "--sources",
|
||||
)
|
||||
);
|
||||
|
||||
@ -186,6 +189,41 @@ sub inject {
|
||||
|
||||
Util::notify("Injecting $experiment using $count cores...");
|
||||
|
||||
my $server_command = join " ", (
|
||||
"$fail_server",
|
||||
|
||||
# "--port $fail_server_port",
|
||||
"--database-option-file $remote_db_conf", "-v $experiment",
|
||||
"-b %", "--inject-single-bit",
|
||||
"--inject-registers", ">$remote_root/server.log"
|
||||
);
|
||||
say "Server command: $server_command";
|
||||
|
||||
my $client_command = 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"
|
||||
">$remote_root/client.log"
|
||||
);
|
||||
say "Client command: $client_command";
|
||||
|
||||
say "Forking...";
|
||||
my $pid = fork();
|
||||
die "fork failed: $!" unless defined $pid;
|
||||
@ -193,52 +231,16 @@ sub inject {
|
||||
if ( $pid == 0 ) {
|
||||
|
||||
# child -> server
|
||||
|
||||
say "Running server in child process...";
|
||||
exec(
|
||||
join " ",
|
||||
(
|
||||
"$fail_server",
|
||||
"--port $fail_server_port",
|
||||
"--database-option-file $remote_db_conf",
|
||||
"-v $experiment",
|
||||
"-b %",
|
||||
"--inject-single-bit",
|
||||
"--inject-registers"
|
||||
)
|
||||
) == 0 or die "exec server failed: $!";
|
||||
exec($server_command) == 0 or die "exec server failed: $!";
|
||||
}
|
||||
|
||||
# parent -> client
|
||||
|
||||
say "Waiting for server...";
|
||||
sleep(10);
|
||||
|
||||
say "Running client with $count cores in parent process";
|
||||
|
||||
system(
|
||||
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"
|
||||
)
|
||||
) == 0 or die "client failed: $?";
|
||||
system($client_command) == 0 or die "client failed: $?";
|
||||
|
||||
say "Killing server with pid $pid...";
|
||||
kill 'TERM', $pid;
|
||||
@ -261,6 +263,10 @@ sub results {
|
||||
}
|
||||
}
|
||||
|
||||
system("rm $remote_root/runner.log");
|
||||
system("rm $remote_root/server.log");
|
||||
system("rm $remote_root/client.log");
|
||||
|
||||
# Run experiments
|
||||
my @experiments = Util::find_subdirs($remote_builds_dir);
|
||||
for my $experiment (@experiments) {
|
||||
@ -271,6 +277,13 @@ for my $experiment (@experiments) {
|
||||
import_trace($experiment);
|
||||
inject($experiment);
|
||||
results($experiment);
|
||||
|
||||
system(
|
||||
"mv $remote_root/runner.log $remote_builds_dir/$experiment/runner.log");
|
||||
system(
|
||||
"mv $remote_root/server.log $remote_builds_dir/$experiment/server.log");
|
||||
system(
|
||||
"mv $remote_root/client.log $remote_builds_dir/$experiment/client.log");
|
||||
}
|
||||
|
||||
Util::notify("Finished all experiments");
|
||||
|
||||
Reference in New Issue
Block a user