From dbd6391b5933f876ec43b862c197051f39a25301 Mon Sep 17 00:00:00 2001 From: Alwin Berger Date: Wed, 9 Feb 2022 11:56:20 +0100 Subject: [PATCH] switch scheduler --- fuzzers/wcet_qemu_sys/src/fuzzer.rs | 4 +++- fuzzers/wcet_qemu_sys/src/worst.rs | 35 +++++++++++++++++++++++++---- 2 files changed, 34 insertions(+), 5 deletions(-) diff --git a/fuzzers/wcet_qemu_sys/src/fuzzer.rs b/fuzzers/wcet_qemu_sys/src/fuzzer.rs index 1042acc6eb..ed22a4f6dd 100644 --- a/fuzzers/wcet_qemu_sys/src/fuzzer.rs +++ b/fuzzers/wcet_qemu_sys/src/fuzzer.rs @@ -353,7 +353,9 @@ fn fuzz( let power = PowerMutationalStage::new(mutator, PowerSchedule::FAST, &edges_observer); // A minimization+queue policy to get testcasess from the corpus - let scheduler = IndexesLenTimeMinimizerCorpusScheduler::new(PowerQueueCorpusScheduler::new()); + // let scheduler = IndexesLenTimeMinimizerCorpusScheduler::new(PowerQueueCorpusScheduler::new()); + let scheduler = LenTimeMaximizerCorpusScheduler::new(PowerQueueCorpusScheduler::new()); + // A fuzzer with feedbacks and a corpus scheduler let mut fuzzer = StdFuzzer::new(scheduler, feedback, objective); diff --git a/fuzzers/wcet_qemu_sys/src/worst.rs b/fuzzers/wcet_qemu_sys/src/worst.rs index 2c0a3d5dc2..165694c599 100644 --- a/fuzzers/wcet_qemu_sys/src/worst.rs +++ b/fuzzers/wcet_qemu_sys/src/worst.rs @@ -463,20 +463,22 @@ impl Default for DummyFeedback { } } -pub type LenTimeMaximizerCorpusScheduler = - MinimizerCorpusScheduler, I, MapIndexesMetadata, S>; +//=========================== Scheduler + +pub type TimeMaximizerCorpusScheduler = + MinimizerCorpusScheduler, I, MapIndexesMetadata, S>; /// Multiply the testcase size with the execution time. /// This favors small and quick testcases. #[derive(Debug, Clone)] -pub struct MaxLenTimeFavFactor +pub struct MaxTimeFavFactor where I: Input + HasLen, { phantom: PhantomData, } -impl FavFactor for MaxLenTimeFavFactor +impl FavFactor for MaxTimeFavFactor where I: Input + HasLen, { @@ -485,4 +487,29 @@ where let execs_per_hour = (3600.0/entry.exec_time().expect("testcase.exec_time is needed for scheduler").as_secs_f64()) as u64; Ok(execs_per_hour) } +} + +pub type LenTimeMaximizerCorpusScheduler = + MinimizerCorpusScheduler, I, MapIndexesMetadata, S>; + +/// Multiply the testcase size with the execution time. +/// This favors small and quick testcases. +#[derive(Debug, Clone)] +pub struct MaxExecsLenFavFactor +where + I: Input + HasLen, +{ + phantom: PhantomData, +} + +impl FavFactor for MaxExecsLenFavFactor +where + I: Input + HasLen, +{ + fn compute(entry: &mut Testcase) -> Result { + // TODO maybe enforce entry.exec_time().is_some() + let execs_per_hour = (3600.0/entry.exec_time().expect("testcase.exec_time is needed for scheduler").as_secs_f64()) as u64; + let execs_times_length_per_hour = execs_per_hour*entry.cached_len()? as u64; + Ok(execs_times_length_per_hour) + } } \ No newline at end of file