diff --git a/README.md b/README.md index b885ca535753b318b0ec6f6bf2bd97b5460f8b22..2d5b43cb591601a6c7ad27fbfa27d9f91abc0027 100644 --- a/README.md +++ b/README.md @@ -9,25 +9,8 @@ It provides the `PreemptiveIterator` trait implemented for all standard Rust types implementing `core::iter::Iterator`. For the moment our trait provide only `fold, for_each` equivalent. -## Overhead measurement - -There is an example in `examples/overhead.rs` you can try it with the following -command : - -```bash -cargo run --release --example overhead -- --reactivity-us 100 --n-iter 1000 --duration-us 10 -``` - -The arguments are : - -- The number of iteration that you will perform. -- Duration is the time it takes for each iteration to perform. -- Reactivity is the targeted duration (in microseconds) between each - `yield_now().await` inserted by our iterator. - -Typical overhead values is between 0 and 2% at max for large number of -iteration. The bad overhead is about 30% and happens when using few iterations -(<50) with short duration tasks (< 10 μs). +Typical overhead values is between 1 and 5%. Worst case around 30% and happens +when using few iterations (<100) with short duration tasks (< 10 ns). ## TODO : @@ -45,7 +28,11 @@ Reduce the Overhead for the worst cases, there are some ideas : don't do any call to `elapsed` the overhead is still of approximately 10% on the worst cases. This approach could help us to decrease this overhead. - - Split at seems worst, why ? +- Criterion helps reduce benchmarking weirdness but still need to run bench + with: + `RUSTFLAGS="-C llvm-args=-align-all-functions=6 -C llvm-args=-align-all-nofallthru-blocks=6" cargo bench` + To reduce impact of alignment. + - With optimization for size ? - Try various block size policies: - Adapt grow rate for exponential grows up with information from measured @@ -62,10 +49,3 @@ More functions in API: - `ge, gt, le, lt, eq, ne` ? - `min, max, min_by, max_by, min_by_key, max_by_key` ? - `product, sum, reduce` ? - -Micro benchmark measurement weirdness: - -- Preemptive2 seems stable around 16% overhead in release and release-with-debug -- Preemptive is unstable 3% in release and 45% in release-with-debug -- TODO: keep only the Preemptive1 and try with/without debug, look and compare - asm maybe insert a call to a function with inline never to compare more easily