[][src]Struct cliff::ExponentialCliffSearcher

pub struct ExponentialCliffSearcher { /* fields omitted */ }

An iterator that determines the maximum supported load for a system by exponential search.

See the crate-level documentation for details.

Implementations

impl ExponentialCliffSearcher[src]

pub fn new(start: usize) -> Self[src]

Perform a load search starting at start, and ending when the maximum load has been determined to within a range of start / 2.

pub fn until(start: usize, min_width: usize) -> Self[src]

Perform a load search starting at start, and ending when the maximum load has been determined to within a range of min_width.

pub fn overloaded(&mut self)[src]

Indicate that the system could not keep up with the previous load factor yielded by Iterator::next.

This will affect what value the next call to Iterator::next yields.

This provides CliffSearch::overloaded without having to use the trait.

pub fn estimate(&self) -> Range<usize>[src]

Give the current estimate of the maximum load the system-under-test can support.

This provides CliffSearch::estimate without having to use the trait.

pub fn fill_left(&mut self)[src]

Ensure that samples are taken just before the cliff.

If the system under test supports, say, eight million operations per second, and searches starting at 1M. The searcher will first sample 1M, 2M, 4M, 8M, 16M. When it detects that 16M is overloaded, it'll perform a binary search from the "right", running 12M, 10M, and 9M before ultimately deciding that 8M is the lower bound for the cliff.

This evaluation is correct, but may yield strange-looking results when plotting as the system is likely highly loaded at 8M. In particular, a straight line drawn from the 4M sample to the 8M sample may yield a jarring visual image, and will make it hard to see what happens in the system leading up to its capacity.

This method makes the searcher "fill in" extra samples to the left of the lower bound when necessary. In the case above, after finding that 8M is the lower bound, this filling would also sample 6M and 7M.

Filling also respects the minimum search range width if specified with [until].

Trait Implementations

impl CliffSearch for ExponentialCliffSearcher[src]

impl Clone for ExponentialCliffSearcher[src]

impl Debug for ExponentialCliffSearcher[src]

impl Iterator for ExponentialCliffSearcher[src]

type Item = usize

The type of the elements being iterated over.

Auto Trait Implementations

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<I> IntoIterator for I where
    I: Iterator
[src]

type Item = <I as Iterator>::Item

The type of the elements being iterated over.

type IntoIter = I

Which kind of iterator are we turning this into?

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.