From f11b025b77d618ef2b0eeb77536ba2fe9ece21a1 Mon Sep 17 00:00:00 2001 From: Christoph Urlacher Date: Sat, 19 Sep 2026 11:43:19 +0200 Subject: [PATCH] Align ResultsDataWriteGroups query with global-occurrences-onwrite.sh --- scripts/Queries/ResultsDataWriteGroups.pm | 50 ++++++++++------------- 1 file changed, 22 insertions(+), 28 deletions(-) diff --git a/scripts/Queries/ResultsDataWriteGroups.pm b/scripts/Queries/ResultsDataWriteGroups.pm index 078e23c..58d38b6 100644 --- a/scripts/Queries/ResultsDataWriteGroups.pm +++ b/scripts/Queries/ResultsDataWriteGroups.pm @@ -16,27 +16,23 @@ sub query { my $extra = Filters::build_filter_clause( $experiment_dir, @filter_config_names ); - # The write branch applies the data filters on the trace and the - # instruction filters on the pilot, so the clause is built per column. + # Filters are applied per column because of the disjunct branch union my $data_extra = Filters::build_filter_clause_restricted( $experiment_dir, qr/^g\./, @filter_config_names ); my $instr_extra = Filters::build_filter_clause_restricted( $experiment_dir, qr/^p\./, @filter_config_names ); + $instr_extra =~ s/\bp\.injection_instr_absolute\b/g.instr2_absolute/g; # This is the same as ResultsData.pm (how much faultspace - # area ended up in each possible outcome), but applies the - # possible writegroups fix. + # area ended up in each possible outcome), but includes the + # "inject-on-write" fault model like in global-occurrences-onwrite.sh # - # At first I have written this query similar to ResultsData.pm, with - # an inner join to reconstruct the "fixed" fspgroup table within the query. - # This was extremely slow since it resulted in a large cross product - # between the write groups/classes and the write pilots injections - # (also I don't think the indices were helping the way I wrote the query). - # - # This version now constructs the result in two - # disjunct branches (as the data is disjunct in known_outcome = 0/1). + # A fault in a written value is treated as a fault in the next access to + # the same address. + # FAIL weights the write area by SUM(t.width), this query uses + # (g.time2 - g.time1 + 1) instead. my $resulttype_order = "FIELD(resulttype, 'OK_MARKER', 'FAIL_MARKER', 'DETECTED_MARKER'," . " 'GROUP1_MARKER', 'GROUP2_MARKER', 'GROUP3_MARKER', 'GROUP4_MARKER'," @@ -68,22 +64,20 @@ FROM ( UNION ALL - SELECT v.benchmark AS benchmark, rc.resulttype AS resulttype, wl.len * rc.cnt AS faults - FROM variant v - JOIN ( - SELECT g.variant_id, SUM(g.time2 - g.time1 + 1) AS len - FROM trace g - WHERE g.accesstype = 'W'$data_extra - GROUP BY g.variant_id - ) wl ON wl.variant_id = v.id - JOIN ( - SELECT p.variant_id, r.resulttype, COUNT(*) AS cnt - FROM fsppilot p - JOIN result_GenericExperimentMessage r ON r.pilot_id = p.id - WHERE p.known_outcome = 1$instr_extra - GROUP BY p.variant_id, r.resulttype - ) rc ON rc.variant_id = v.id - WHERE v.variant = '$experiment' + SELECT v.benchmark AS benchmark, r.resulttype AS resulttype, + SUM(g.time2 - g.time1 + 1) AS faults + FROM trace g + JOIN variant v ON v.id = g.variant_id + JOIN trace t ON t.variant_id = g.variant_id + AND t.data_physical_address = g.data_physical_address + AND t.instr1 = g.instr2 + 1 + JOIN fspgroup h ON h.variant_id = t.variant_id + AND h.data_physical_address = t.data_physical_address + AND h.instr2 = t.instr2 + AND h.fspmethod_id = (SELECT id FROM fspmethod WHERE method = 'basic') + JOIN result_GenericExperimentMessage r ON r.pilot_id = h.pilot_id + WHERE g.accesstype = 'W' + AND v.variant = '$experiment'$data_extra$instr_extra ) x GROUP BY benchmark, resulttype ORDER BY benchmark, $resulttype_order;";