Skip to content

Commit f603549

Browse files
committed
Updating TRexRewrite
1 parent dc2e04f commit f603549

25 files changed

+948
-1278
lines changed

bench/src/bin/bench.rs

+27-19
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
extern crate rand;
44
extern crate chrono;
5+
extern crate num_cpus;
56
extern crate tesla;
67
extern crate trex;
78

@@ -10,8 +11,8 @@ use rand::Rng;
1011
use std::sync::Arc;
1112
use std::sync::mpsc::sync_channel;
1213
use std::thread;
13-
use tesla::{AttributeDeclaration, Engine, Event, EventTemplate, Listener, Rule, Tuple,
14-
TupleDeclaration, TupleType};
14+
use tesla::{AttributeDeclaration, Engine, Event, EventTemplate, Listener, Rule, SubscrFilter,
15+
Tuple, TupleDeclaration, TupleType};
1516
use tesla::expressions::*;
1617
use tesla::predicates::*;
1718
use trex::*;
@@ -61,11 +62,11 @@ fn generate_length_rules<R: Rng>(rng: &mut R, cfg: &Config) -> Vec<Rule> {
6162
let mut rules = Vec::new();
6263
for i in 0..cfg.num_rules {
6364
let id = i % cfg.num_def + 1;
64-
let constraint = Arc::new(Expression::BinaryOperation {
65+
let constraint = Expression::BinaryOperation {
6566
operator: BinaryOperator::Equal,
6667
left: Box::new(Expression::Reference { attribute: 0 }),
6768
right: Box::new(Expression::Immediate { value: 1.into() }),
68-
});
69+
};
6970
let root_pred = Predicate {
7071
ty: PredicateType::Trigger { parameters: Vec::new() },
7172
tuple: ConstrainedTuple {
@@ -170,14 +171,19 @@ fn execute_bench_length(cfg: &Config) {
170171
let evts = generate_length_events(&mut rng, &cfg);
171172

172173
let providers: Vec<Box<NodeProvider>> = vec![Box::new(StackProvider)];
173-
let mut engine = TRex::new(4, providers);
174+
let mut engine = TRex::new(num_cpus::get(), providers);
174175
for decl in decls {
175176
engine.declare(decl);
176177
}
177178
for rule in rules {
178179
engine.define(rule);
179180
}
180181
// engine.subscribe(Box::new(DebugListener));
182+
engine.subscribe(SubscrFilter::Any,
183+
Box::new(CountListener {
184+
count: 0,
185+
duration: cfg.num_events / cfg.evts_per_sec,
186+
}));
181187

182188
let start = UTC::now();
183189

@@ -205,8 +211,8 @@ fn execute_bench_length(cfg: &Config) {
205211

206212
fn main() {
207213
let mut cfg = Config {
208-
num_rules: 1000,
209-
num_def: 100,
214+
num_rules: 650,
215+
num_def: 65,
210216
num_pred: 3,
211217
num_events: 40_000,
212218
each_prob: 1.0,
@@ -218,18 +224,20 @@ fn main() {
218224
evts_per_sec: 10000,
219225
};
220226

221-
let frequencies = (4000...10_000).step_by(2000);
222-
let windows = (2...10).step_by(4);
223-
224-
println!("");
225-
for freq in frequencies {
226-
cfg.evts_per_sec = freq;
227-
println!("- Frequency: {:5} evt/sec", freq);
228-
for avg_win in windows.clone() {
229-
cfg.max_win = Duration::seconds(avg_win + 1 as i64);
230-
cfg.min_win = Duration::seconds(avg_win - 1 as i64);
231-
print!(" > Avg Window: {:2}s => ", avg_win);
232-
execute_bench_length(&cfg);
227+
for queue_bound in vec![true, false] {
228+
println!("");
229+
for freq in vec![600usize, 800, 1000, 1500, 2500, 4000] {
230+
cfg.num_events = freq * 60;
231+
cfg.queue_len = if queue_bound { freq / 10 } else { cfg.num_events + 1 };
232+
cfg.evts_per_sec = freq;
233+
println!("");
234+
println!("- Frequency: {:5} evt/sec | Queue len: {:5}", freq, cfg.queue_len);
235+
for avg_win in (2...10).step_by(4) {
236+
cfg.max_win = Duration::seconds(avg_win + 1 as i64);
237+
cfg.min_win = Duration::seconds(avg_win - 1 as i64);
238+
print!(" > Avg Window: {:2}s => ", avg_win);
239+
execute_bench_length(&cfg);
240+
}
233241
}
234242
}
235243
}

0 commit comments

Comments
 (0)