From 5070918f73602e4b7ad72c0fc0f9539923bfe3e0 Mon Sep 17 00:00:00 2001 From: grammers <samkar-4@student.ltu.se> Date: Thu, 16 Jan 2020 18:21:01 +0100 Subject: [PATCH] start --- runner/Cargo.lock | 29 +++---------- runner/Cargo.toml | 6 +-- runner/src/bin/generate.rs | 35 +++++++++++++++- runner/src/common.rs | 86 +++++++++++++++++++++++++++++++++++--- runner/src/lib.rs | 4 +- 5 files changed, 126 insertions(+), 34 deletions(-) diff --git a/runner/Cargo.lock b/runner/Cargo.lock index b2f40b4..3c5fa29 100644 --- a/runner/Cargo.lock +++ b/runner/Cargo.lock @@ -62,11 +62,6 @@ dependencies = [ "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "base64" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "bit-set" version = "0.5.1" @@ -286,10 +281,6 @@ dependencies = [ "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "ktest" -version = "0.1.0" - [[package]] name = "lazy_static" version = "1.4.0" @@ -407,6 +398,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "probe-rs" version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "bitfield 0.13.2 (registry+https://github.com/rust-lang/crates.io-index)", "capstone 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)", @@ -425,7 +417,8 @@ dependencies = [ "maplit 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", "object 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)", - "probe-rs-t2rust 0.1.0", + "proc-macro2 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)", + "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", "rental 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", "rusb 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)", "scroll 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)", @@ -434,17 +427,6 @@ dependencies = [ "serde_yaml 0.8.11 (registry+https://github.com/rust-lang/crates.io-index)", ] -[[package]] -name = "probe-rs-t2rust" -version = "0.1.0" -dependencies = [ - "base64 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)", - "proc-macro2 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "scroll 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_yaml 0.8.11 (registry+https://github.com/rust-lang/crates.io-index)", -] - [[package]] name = "proc-macro2" version = "0.4.30" @@ -516,8 +498,7 @@ name = "runner" version = "0.1.0" dependencies = [ "failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "ktest 0.1.0", - "probe-rs 0.3.0", + "probe-rs 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -726,7 +707,6 @@ dependencies = [ "checksum autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f8aac770f1885fd7e387acedd76065302551364496e46b3dd00860b2f8359b9d" "checksum backtrace 0.3.40 (registry+https://github.com/rust-lang/crates.io-index)" = "924c76597f0d9ca25d762c25a4d369d51267536465dc5064bdf0eb073ed477ea" "checksum backtrace-sys 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)" = "5d6575f128516de27e3ce99689419835fce9643a9b215a14d2b5b685be018491" -"checksum base64 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7" "checksum bit-set 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e84c238982c4b1e1ee668d136c510c67a13465279c0cb367ea6baf6310620a80" "checksum bit-vec 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f59bbe95d4e52a6398ec21238d31577f2b28a9d86807f06ca59d191d8440d0bb" "checksum bitfield 0.13.2 (registry+https://github.com/rust-lang/crates.io-index)" = "46afbd2983a5d5a7bd740ccb198caf5b82f45c40c09c0eed36052d91cb92e719" @@ -771,6 +751,7 @@ dependencies = [ "checksum parity-wasm 0.41.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc878dac00da22f8f61e7af3157988424567ab01d9920b962ef7dcbd7cd865" "checksum pkg-config 0.3.17 (registry+https://github.com/rust-lang/crates.io-index)" = "05da548ad6865900e60eaba7f589cc0783590a92e940c26953ff81ddbab2d677" "checksum plain 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" +"checksum probe-rs 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "05b639d22ce87304e58630d819d2c1a2c23c862d4fe57efc83c56ffa7b8e52cd" "checksum proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)" = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" "checksum proc-macro2 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)" = "0319972dcae462681daf4da1adeeaa066e3ebd29c69be96c6abb1259d2ee2bcc" "checksum quote 0.3.15 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6e920b65c65f10b2ae65c831a81a073a89edd28c7cce89475bff467ab4167a" diff --git a/runner/Cargo.toml b/runner/Cargo.toml index 683ad6b..778577e 100644 --- a/runner/Cargo.toml +++ b/runner/Cargo.toml @@ -7,9 +7,9 @@ edition = "2018" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -probe-rs = { path = "../../probe-rs/probe-rs", version = "0.3.0" } -ktest = { path = "../ktest", version = "0.1.0" } +probe-rs = { version = "0.3.0" } +#ktest = { version = "0.1.0" } failure = "0.1.6" [lib] -name = "runner" \ No newline at end of file +name = "runner" diff --git a/runner/src/bin/generate.rs b/runner/src/bin/generate.rs index 3c862ef..ea5f1f7 100644 --- a/runner/src/bin/generate.rs +++ b/runner/src/bin/generate.rs @@ -68,9 +68,42 @@ fn main() { let tasks: Tasks = vec![t1, t2, t3]; println!("tasks {:?}", &tasks); - // println!("tot_util {}", tot_util(&tasks)); + // println!("tot_util {}", tot_util(&tasks)); let (ip, tr) = pre_analysis(&tasks); println!("ip: {:?}", ip); println!("tr: {:?}", tr); + + let c = c_times(&tasks); + println!("C(t): {:?}", c); + + let (l, l_tot) = load(&tasks, &c); + println!("L(t): {:?}",l); + println!("L(T): {:?}",l_tot); + + let b = block(&tasks, ip, tr); + println!("B(t): {:?}", b); } + +/* +TODO +for eatch task +c(t), r(t), b(t), i(t), l(t) + +all +l_tot + + +HOW +c(t) = stop - start +l(t) = c(t) / a(t) +r(t) = c(t) + b(t) + i(t) + +b(t) = sum {for eatch max(R) where pi(r) > p(t) +i(t) = sum { (ph(h)/bp(t) * c(h)) where p(h) > p(t) + + +ip: {"R1": 2, "T2": 2, "R2": 3, "T1": 1, "T3": 3} +tr: {"T2": {"R1", "R2"}, "T3": {"R2"}} + +*/ diff --git a/runner/src/common.rs b/runner/src/common.rs index e7ff2c5..085f127 100644 --- a/runner/src/common.rs +++ b/runner/src/common.rs @@ -29,7 +29,12 @@ pub type Tasks = Vec<Task>; pub type IdPrio = HashMap<String, u8>; // A map from Task identifiers to a set of Resource identifiers -pub type TaskResources = HashMap<String, HashSet<String>>; +// id_task, {id_res, longest} +pub type TaskResources = HashMap<String, Vec<HashMap<String, u32>>>; + +pub type C = HashMap<String, u32>; +pub type L = HashMap<String, f32>; +pub type B = HashMap<String, u32>; // Derives the above maps from a set of tasks pub fn pre_analysis(tasks: &Tasks) -> (IdPrio, TaskResources) { @@ -58,15 +63,86 @@ fn update_prio(prio: u8, trace: &Trace, hm: &mut IdPrio) { } } +// (s = task id, trace = on res, trmap = tr) fn update_tr(s: String, trace: &Trace, trmap: &mut TaskResources) { if let Some(seen) = trmap.get_mut(&s) { - seen.insert(trace.id.clone()); + let mut hm = HashMap::new(); + let time = trace.end - trace.start; + let mut found = false; + for mut t in seen { + if let Some(mut exist) = t.get_mut(&trace.id) { + if *exist < time { + *exist = time; + } + found = true; + } + } + if !found { + hm.insert(trace.id.clone(), time); + trmap.get_mut(&s).unwrap().push(hm); + } } else { - let mut hs = HashSet::new(); - hs.insert(trace.id.clone()); - trmap.insert(s.clone(), hs); + let mut hm = HashMap::new(); + hm.insert(trace.id.clone(), trace.end - trace.start); + trmap.insert(s.clone(), vec![hm]); } for trace in &trace.inner { update_tr(s.clone(), trace, trmap); } } + +pub fn c_times(tasks: &Tasks) -> C { + let mut c = HashMap::new(); + for t in tasks { + c.insert(t.id.clone(), t.trace.end - t.trace.start); + } + c +} + +pub fn load(tasks: &Tasks, c: &C) -> (L, f32){ + let mut l = HashMap::new(); + let mut tot = 0.0; + for t in tasks { + let usages = + *c.get(&t.id).unwrap() as f32 / t.inter_arrival as f32; + l.insert(t.id.clone(), usages); + tot += usages; + } + (l, tot) +} + +pub fn block(tasks: &Tasks, ip: IdPrio, tr: TaskResources) -> B { + let mut b = HashMap::new(); + for t in tasks { + let mut block_time = 0; + let resourses = tr.get(&t.id); + match resourses { + Some(res) => { + for vectorn in res { + for (id, _) in vectorn { + // iter this, all res + + for (tr_id, tr_has) in &tr { + if ip.get(tr_id).unwrap() < &t.prio { + + for bl in tr_has { + if let Some(time) = bl.get(id) { + block_time += time; + } + } + + + } + } + } + } + b.insert(t.id.clone(), block_time); + }, + None => { + b.insert(t.id.clone(), 0); + }, + } + + } + b +} diff --git a/runner/src/lib.rs b/runner/src/lib.rs index b034d7e..714e411 100644 --- a/runner/src/lib.rs +++ b/runner/src/lib.rs @@ -1,4 +1,6 @@ -use ktest::{read_ktest, KTEST}; +//use ktest::{read_ktest, KTEST}; + +pub mod common; use probe_rs::{ config::registry::{Registry, SelectionStrategy}, -- GitLab