Compare commits

...

5 Commits

12 changed files with 53 additions and 57 deletions

BIN
fail/bin/fail-x86-tracing (Stored with Git LFS)

Binary file not shown.

BIN
fail/bin/generic-experiment-client (Stored with Git LFS)

Binary file not shown.

BIN
fail/bin/generic-experiment-server (Stored with Git LFS)

Binary file not shown.

BIN
fail/bin/import-trace (Stored with Git LFS)

Binary file not shown.

BIN
fail/bin/prune-trace (Stored with Git LFS)

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -417,7 +417,7 @@ rec {
mariadb.client mariadb.client
# dbeaver-bin # dbeaver-bin
# beekeeper-studio # beekeeper-studio
tableplus # tableplus
lazysql lazysql
iwasm iwasm
wamrc wamrc

View File

@ -136,7 +136,8 @@ sub import_trace {
"-v $experiment", "-v $experiment",
"-b ip", "-b ip",
"--objdump objdump", "--objdump objdump",
"--sources",
# "--sources",
) )
); );
system( system(
@ -150,7 +151,8 @@ sub import_trace {
"-v $experiment", "-v $experiment",
"-b mem", "-b mem",
"--objdump objdump", "--objdump objdump",
"--sources",
# "--sources",
) )
); );
system( system(
@ -164,7 +166,8 @@ sub import_trace {
"-v $experiment", "-v $experiment",
"-b regs", "-b regs",
"--objdump objdump", "--objdump objdump",
"--sources",
# "--sources",
) )
); );
@ -186,6 +189,39 @@ sub inject {
Util::notify("Injecting $experiment using $count cores..."); 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..."; say "Forking...";
my $pid = fork(); my $pid = fork();
die "fork failed: $!" unless defined $pid; die "fork failed: $!" unless defined $pid;
@ -193,52 +229,16 @@ sub inject {
if ( $pid == 0 ) { if ( $pid == 0 ) {
# child -> server # child -> server
say "Running server in child process..."; say "Running server in child process...";
exec( exec($server_command) == 0 or die "exec server failed: $!";
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: $!";
} }
# parent -> client # parent -> client
say "Waiting for server..."; say "Waiting for server...";
sleep(10); sleep(10);
say "Running client with $count cores in parent process"; say "Running client with $count cores in parent process";
system($client_command) == 0 or die "client failed: $?";
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: $?";
say "Killing server with pid $pid..."; say "Killing server with pid $pid...";
kill 'TERM', $pid; kill 'TERM', $pid;
@ -261,6 +261,10 @@ sub results {
} }
} }
system("rm $remote_root/runner.log");
system("rm $remote_root/server.log");
system("rm $remote_root/client.log");
# Run experiments # Run experiments
my @experiments = Util::find_subdirs($remote_builds_dir); my @experiments = Util::find_subdirs($remote_builds_dir);
for my $experiment (@experiments) { for my $experiment (@experiments) {
@ -271,6 +275,13 @@ for my $experiment (@experiments) {
import_trace($experiment); import_trace($experiment);
inject($experiment); inject($experiment);
results($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"); Util::notify("Finished all experiments");