History log of /external/fio/lib/lfsr.h
Revision Date Author Comments (<<< Hide modified files) (Show modified files >>>)
46ad62dc54ba3338bceb8ecde7cc265c3f02ec9e 24-Nov-2014 Jens Axboe <axboe@fb.com> lfsr: don't pass in last value to lfsr_next()

It's cached in the 'fl' struct. This means we can move the max
block calculation outside if the lfsr part, too.

Signed-off-by: Jens Axboe <axboe@fb.com>
/external/fio/lib/lfsr.h
d0f85362c978904661bd6785cd6a7f3437ff85dd 12-Mar-2013 Alex Pyrgiotis <apyrgio@grnet.gr> lfsr: fix verification and spin bugs

Changes:

1. Verification now works properly and reports for which value it fails
2. Fix a mishandling of spin incrementation which led to multiple
calculation of the same values

Signed-off-by: Alex Pyrgiotis <apyrgio@grnet.gr>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
/external/fio/lib/lfsr.h
d474cbc9ba33448848b50cc697622a402e91e33e 08-Mar-2013 Alex Pyrgiotis <apyrgio@grnet.gr> Improve LFSR implementation

Changes:

1. Use Galois LFSR instead of Fibonacci LFSR.
2. Use XNOR gates instead of XOR gates.
3. Add tap sizes for LFSRs ranging from 3-bits to 15-bits.
4. Add spin parameter.

Rationale:

1. Fibonacci LFSRs have the following drawbacks:

a. Their next state can not be computed in one cycle, since the input
bit must be propagated serially through the XOR gates. Galois
LFSRs however, can be computed instantly with XOR-masks.

b. Their state changes cannot be considered "irregular", even by I/O
standards. Actually, if the current state of an n-bit LFSR is x,
then the next will either be (x >> 1) or (2^n + (x >> 1)). Galois
LFSRs have instead their XOR gates interleaved with their bits,
which means that the inner bits are changed as well, besides of
the shifting. If the number of taps is z, this means that the
different outcomes are 2^(z + 1).

2. An LFSR with XOR gates has the all-zeroes state as illegal. Since
zero is valid for most I/O operations, it would be more intuitive to
use XNOR gates, that have as the all-ones state as illegal.

3. Allow smaller I/O benchmarks to use LFSRs.

4. The spin parameter follows the same rationale as in 1b. To make the
LFSR outcome "appear" less predictable, we can spin internally the
LFSR state and produce the i-th number. To understand the spin
parameter, consider the following state sequence of a 3-bit LFSR:

0, 2, 3, 5, 6, 1, 4
Same LFSR, spin value 2: 0, 3, 6, 4, 2, 5, 1
But what is the benefit from using spin? Well, the benefits are
two-fold:

a. For the same I/O size, we can create a different I/O sequences.

b. Following the rationale of 1b, we can have more variable outcomes.
If the spin value is "i" and the taps are "z", the number of
different outcomes become i * 2^(z + 1).

Signed-off-by: Alex Pyrgiotis <apyrgio@grnet.gr>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
/external/fio/lib/lfsr.h
0415406ff0a7ced100565c4cba1322705b7fdb0a 21-Jan-2013 Jens Axboe <axboe@kernel.dk> lfsr: add lfsr_reset()

This enables us to restart a sequence.

Signed-off-by: Jens Axboe <axboe@kernel.dk>
/external/fio/lib/lfsr.h
7477673323a943b99ea203bb9434661d13a0159c 11-Jan-2013 Jens Axboe <axboe@kernel.dk> lfsr: ensure we don't generate an offset + buflen that exceeds the max size

Currently we check for the max value, but that doesn't always
work since it may not fit the minimum block size (even if it
is guaranteed to be smaller than the max offset). Pass in the
last valid block.

Signed-off-by: Jens Axboe <axboe@kernel.dk>
/external/fio/lib/lfsr.h
82af46be1fa0c0e188bbb6723008fa33a510606f 04-Dec-2012 Jens Axboe <axboe@kernel.dk> lfsr: ensure that the cycle follows the randrepeat= setting

Use the regular block offset seed to "seed" the lfsr generator,
so that it obeys randrepeat=0/1 as well.

Signed-off-by: Jens Axboe <axboe@kernel.dk>
/external/fio/lib/lfsr.h
8055e41d0ecc54770a2653427532b3e2c5fabdad 26-Nov-2012 Jens Axboe <axboe@kernel.dk> Add LFSR generator

Signed-off-by: Jens Axboe <axboe@kernel.dk>
/external/fio/lib/lfsr.h