From 60be7f97acdea38df5f8c192768274686e3f8a7c Mon Sep 17 00:00:00 2001 From: Alwin Berger Date: Fri, 28 Feb 2025 11:23:36 +0100 Subject: [PATCH] calculate wcrt bounds --- fuzzers/FRET/benchmark/plot_all_benchmarks.sh | 7 +++- fuzzers/FRET/benchmark/plot_sqlite.r | 35 +++++++++++++----- fuzzers/FRET/tests/static_wcrts.xlsx | Bin 0 -> 38210 bytes 3 files changed, 31 insertions(+), 11 deletions(-) create mode 100644 fuzzers/FRET/tests/static_wcrts.xlsx diff --git a/fuzzers/FRET/benchmark/plot_all_benchmarks.sh b/fuzzers/FRET/benchmark/plot_all_benchmarks.sh index a4f494efbc..a7b84e0ebd 100644 --- a/fuzzers/FRET/benchmark/plot_all_benchmarks.sh +++ b/fuzzers/FRET/benchmark/plot_all_benchmarks.sh @@ -4,5 +4,10 @@ if [[ -n "$1" ]]; then else TARGET=$BENCHDIR fi -number_cruncher/target/debug/number_cruncher -i $TARGET/timedump -o $TARGET/bench.sqlite + +# Check if bench.sqlite needs to be updated +if [[ ! -f $TARGET/bench.sqlite || $(find $TARGET/timedump -name '.*[0-9]+\.time' -newer $TARGET/bench.sqlite | wc -l) -gt 0 ]]; then + number_cruncher/target/debug/number_cruncher -i $TARGET/timedump -o $TARGET/bench.sqlite +fi + Rscript plot_sqlite.r $TARGET/bench.sqlite $TARGET diff --git a/fuzzers/FRET/benchmark/plot_sqlite.r b/fuzzers/FRET/benchmark/plot_sqlite.r index 96942676fd..3c801fbdf9 100644 --- a/fuzzers/FRET/benchmark/plot_sqlite.r +++ b/fuzzers/FRET/benchmark/plot_sqlite.r @@ -8,6 +8,7 @@ KNOWN_WCRT <- list( waters_seq_bytes=219542, # via INSERT_WC waters_seq_int=219542, # via INSERT_WC + manual interrupt waters_seq_full=219542,# via INSERT_WC + manual interrupt + waters_seq_unsync_full=234439,# via INSERT_WC + manual interrupt polycopter_seq_dataflow_full=343493, # via INSERT_WC + manual interrupt polycopter_seq_dataflow_int=343493, # via INSERT_WC + manual interrupt release_seq_int=645885, # via INSERT_WC + manual interrupt @@ -15,13 +16,14 @@ KNOWN_WCRT <- list( ) STATIC_WCRT <- list( - #waters_seq_bytes=, - waters_seq_int=270789 - #waters_seq_full=, - #polycopter_seq_dataflow_full=, # via INSERT_WC + manual interrupt - #polycopter_seq_dataflow_int=, # via INSERT_WC + manual interrupt - #release_seq_int=, # via INSERT_WC + manual interrupt - #release_seq_full= # via INSERT_WC + manual interrupt + waters_seq_bytes=256632, + waters_seq_int=256632, + waters_seq_full=256632, + waters_seq_unsync_full=272091, + polycopter_seq_dataflow_full=373628, + polycopter_seq_dataflow_int=373628, + release_seq_int=921360, + release_seq_full=921360 ) # Read the first command line argument as an sqlite file @@ -72,12 +74,21 @@ draw_plot <- function(data, casename) { } else { wcrt = 0 } + static_wcrt = STATIC_WCRT[[casename]] + if (!is.null(wcrt)) { + static_wcrt = static_wcrt / ISNS_PER_US + } else { + static_wcrt = 0 + } # draw limits max_x <- max(sapply(data, function(tbl) max(tbl$timestamp, na.rm = TRUE))) max_y <- max(wcrt,max(sapply(data, function(tbl) max(tbl$max, na.rm = TRUE)))) min_y <- min(sapply(data, function(tbl) min(tbl$min, na.rm = TRUE))) + # draw static wcrt + max_y <- max(max_y, static_wcrt) + # plot setup h_ = 380 w_ = h_*4/3 @@ -98,12 +109,16 @@ draw_plot <- function(data, casename) { } legend_names <- names(data) - legend_colors <- c(MY_COLORS[1:length(data)],"black") - legend_styles <- c(rep("solid",length(data)),"dotted") + legend_colors <- c(MY_COLORS[1:length(data)],"black","black") + legend_styles <- c(rep("solid",length(data)),"dotted","dashed") if (wcrt > 0) { abline(h=wcrt, col='black', lty='dotted') - legend_names <- c(names(data), "WCRT") + legend_names <- c(legend_names, "WCRT") + } + if (static_wcrt > 0) { + abline(h=static_wcrt, col='black', lty='dashed') + legend_names <- c(legend_names, "static bound") } legend(LEGEND_POS, legend=legend_names,#"bottomright", diff --git a/fuzzers/FRET/tests/static_wcrts.xlsx b/fuzzers/FRET/tests/static_wcrts.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..b45a25747aa6e31caa2878558f8455bc4dcd4e82 GIT binary patch literal 38210 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ⅅ2lgIxm)TS;lggrO+ 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 HCV+SVepz)o literal 0 HcmV?d00001