diff --git a/scripts/Queries/Faults.pm b/scripts/Queries/Faults.pm index f453f29..b95ba65 100644 --- a/scripts/Queries/Faults.pm +++ b/scripts/Queries/Faults.pm @@ -4,10 +4,12 @@ use strict; use warnings; use diagnostics; +use feature 'say'; + sub query { my ($experiment) = @_; - return "SELECT + my $querystring = "SELECT benchmark, resulttype, SUM(t.time2 - t.time1 + 1) AS faults, CONCAT('0x', HEX(p.injection_instr_absolute)) AS fault_address FROM variant v @@ -18,6 +20,10 @@ JOIN fsppilot p ON r.pilot_id = p.id WHERE v.variant = '$experiment' GROUP BY benchmark, resulttype, p.injection_instr_absolute ORDER BY benchmark, resulttype, SUM(t.time2 - t.time1 + 1) DESC;"; + + say $querystring; + + return $querystring; } sub args { return "--batch --raw"; } diff --git a/scripts/Queries/FaultsFiltered.pm b/scripts/Queries/FaultsFiltered.pm new file mode 100644 index 0000000..e9c75b0 --- /dev/null +++ b/scripts/Queries/FaultsFiltered.pm @@ -0,0 +1,64 @@ +package Queries::FaultsFiltered; + +use strict; +use warnings; +use diagnostics; + +use FindBin; +use lib "$FindBin::Bin/../Modules"; +use Util; + +use feature 'say'; + +# Those regions from linker.ld will be excluded +my @EXCLUDE_REGIONS = ( + [ '_wamr_aot_start', '_wamr_aot_end' ], + # [ '_wamr_mmap_start', '_wamr_mmap_end' ], + # [ '_wamr_global_heap_start', '_wamr_global_heap_end' ], + # [ '_wamr_runtime_pool_start', '_wamr_runtime_pool_end' ], + # [ '_wamr_linear_pool_start', '_wamr_linear_pool_end' ], +); + +sub query { + my ( $experiment, $experiment_dir ) = @_; + + my @filters; + if ( defined $experiment_dir && -f "$experiment_dir/system.elf" ) { + for my $pair (@EXCLUDE_REGIONS) { + my ( $start_sym, $end_sym ) = @$pair; + my $start = + Util::elf_sym_addr( "$experiment_dir/system.elf", $start_sym ); + my $end = + Util::elf_sym_addr( "$experiment_dir/system.elf", $end_sym ); + next unless defined $start && defined $end && $end > $start; + push @filters, + "p.injection_instr_absolute NOT BETWEEN $start AND @{[$end - 1]}"; + } + } + + my $extra = @filters ? "\nAND " . join( "\nAND ", @filters ) : ""; + + my $querystring = "SELECT +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_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'$extra +GROUP BY benchmark, resulttype, p.injection_instr_absolute +ORDER BY benchmark, resulttype, SUM(t.time2 - t.time1 + 1) DESC;"; + + say $querystring; + + return $querystring; +} + +sub args { return "--batch --raw"; } + +sub filename { return "faults_filtered.csv"; } + +sub postprocess { $_[0] =~ s/\t/,/g; } + +1; diff --git a/scripts/Queries/Results.pm b/scripts/Queries/Results.pm index c918ac0..2b2be3c 100644 --- a/scripts/Queries/Results.pm +++ b/scripts/Queries/Results.pm @@ -4,10 +4,12 @@ use strict; use warnings; use diagnostics; +use feature 'say'; + sub query { my ($experiment) = @_; - return "SELECT + my $querystring = "SELECT benchmark, resulttype, sum(t.time2 - t.time1 + 1) AS faults FROM variant v JOIN trace t ON v.id = t.variant_id @@ -17,6 +19,10 @@ JOIN fsppilot p ON r.pilot_id = p.id WHERE v.variant = '$experiment' GROUP BY v.id, resulttype ORDER BY variant, benchmark, resulttype;"; + + say $querystring; + + return $querystring; } sub args { return "-t"; } diff --git a/scripts/Queries/ResultsData.pm b/scripts/Queries/ResultsData.pm index 75f6d2c..496efed 100644 --- a/scripts/Queries/ResultsData.pm +++ b/scripts/Queries/ResultsData.pm @@ -4,10 +4,12 @@ use strict; use warnings; use diagnostics; +use feature 'say'; + sub query { my ($experiment) = @_; - return "SELECT + my $querystring = "SELECT benchmark, resulttype, sum(t.time2 - t.time1 + 1) AS faults FROM variant v JOIN trace t ON v.id = t.variant_id @@ -17,6 +19,10 @@ JOIN fsppilot p ON r.pilot_id = p.id WHERE v.variant = '$experiment' GROUP BY v.id, resulttype ORDER BY variant, benchmark, resulttype;"; + + say $querystring; + + return $querystring; } sub args { return "--batch --raw"; } diff --git a/scripts/charts/single_heatmap.r b/scripts/charts/single_heatmap.r index d1ecd9c..99d739b 100644 --- a/scripts/charts/single_heatmap.r +++ b/scripts/charts/single_heatmap.r @@ -147,7 +147,7 @@ make_heatmap <- function(target_resulttype, target_benchmark) { } aggregated <- filtered |> - select(.data$fault_address, .data$faults) + select(fault_address, faults) # =========================================================================== # ADDRESS HEX -> INT