History log of /external/fio/ioengine.h
Revision Date Author Comments (<<< Hide modified files) (Show modified files >>>)
56785384eb15a937f275292109603e51a5191365 28-Feb-2014 Jens Axboe <axboe@fb.com> Update IO engine version

Commit 225ba9e3 changed the layout of struct io_u, so
update the engine version to indicate that external
engines need to be recompiled.

Signed-off-by: Jens Axboe <axboe@fb.com>
/external/fio/ioengine.h
225ba9e3433cf27d8ff7b213d9f78b7ef2776c70 26-Feb-2014 Jens Axboe <axboe@fb.com> Branch and cache miss speedups

Just some low hanging fruit.

Signed-off-by: Jens Axboe <axboe@fb.com>
/external/fio/ioengine.h
a8075704d3392fede7bd7cfa394616fa0eed7ae0 13-Feb-2014 Daniel Gollub <daniel.gollub@t-online.de> Introduce get_ioengine for external engines

This makes life easier for plugins written in C++
since they do not need to deal with struct initilization issues
with the ioengine_ops symbol.

With g++ a non-static ioengine_ops in global scope like this:

struct ioengine_ops ioengine = {
.name = "null",
.version = FIO_IOOPS_VERSION,
.queue = fio_null_queue,
.commit = fio_null_commit,
};

Results in:

cpp_null2.cc: At global scope:
cpp_null2.cc:112:1: error: C99 designator ‘name’ outside aggregate initializer
cpp_null2.cc:112:1: sorry, unimplemented: non-trivial designated initializers not supported
cpp_null2.cc:112:1: sorry, unimplemented: non-trivial designated initializers not supported
cpp_null2.cc:112:1: sorry, unimplemented: non-trivial designated initializers not supported
cpp_null2.cc:112:1: sorry, unimplemented: non-trivial designated initializers not supported
$

Example get_iongine() symbol usage:

---8<---
extern "C" {
void get_ioengine(struct ioengine_ops **ioengine_ptr) {
struct ioengine_ops *ioengine;
*ioengine_ptr = (struct ioengine_ops *) malloc(sizeof(struct ioengine_ops));
ioengine = *ioengine_ptr;

strcpy(ioengine->name, "cpp_null");
ioengine->version = FIO_IOOPS_VERSION;
ioengine->queue = fio_null_queue;
ioengine->commit = fio_null_commit;
ioengine->getevents = fio_null_getevents;
ioengine->event = fio_null_event;
ioengine->init = fio_null_init;
ioengine->cleanup = fio_null_cleanup;
ioengine->open_file = fio_null_open;
ioengine->flags = FIO_DISKLESSIO;
}
}
--->8---

Signed-off-by: Daniel Gollub <d.gollub@telekom.de>

Moved get_ioengine_t typedef to ioengine.h.

Signed-off-by: Jens Axboe <axboe@fb.com>
/external/fio/ioengine.h
f940128526dbe468a1951cce10c2fe5dbd23875f 06-Feb-2014 Jens Axboe <axboe@fb.com> verify: always log IO in the order they are issued

We currently log verify_backlog verifies when they complete,
which means the sequence of verify and issue might be different.

Change this to log in one spot, prior to issue, and track the
completion state of the logged unit instead. This unifies the
handling of verifies.

Signed-off-by: Jens Axboe <axboe@fb.com>
/external/fio/ioengine.h
363cffa71a96eb4c7595bb8c325a09eb01f766a5 28-Jan-2014 Grant Grundler <grundler@chromium.org> fio: consolidate rand_seed to uint64_t

csscope showed rand_seed was defined 4 times - each a different type.
While they are used differently, the places where they overlap
should reference the same type. This patch makes three of them the same
as suggested by Jens Axboe.

Signed-off-by: Grant Grundler <grundler@chromium.org>

Updated by me to change rand_seed option to unsigned long long
and changes related to that.

Signed-off-by: Jens Axboe <axboe@kernel.dk>
/external/fio/ioengine.h
da0a7bd224bb9331f27bb4b20394dd5c8fa3acb0 17-Sep-2013 Juan Casse <jcasse@chromium.org> Adds check for numberio during verify phase.

Currently, fio checks the block offset number in a block's header during
the verify phase.
We add a check for the io number (numberio) to detect stale blocks. This
check is performed only on workloads that write data, as those workloads
know what numberio was written to each block.
td->io_issues[ddir] = 0; was removed so that numberio does not get reset
at each iteration; we want numberio to keep incrementing to reflect
how many times the same data was written.

Signed-off-by: Juan Casse <jcasse@chromium.org>
Reviewed-by: Grant Grundler <grundler@chromium.org>

Fixed typo.
Signed-off-by: Jens Axboe <axboe@kernel.dk>
/external/fio/ioengine.h
3e260a46ea9a8de224c3d0a29a608da3440f284a 09-Dec-2013 Jens Axboe <axboe@kernel.dk> Add options to have fio latency profile a device

This adds three new options:

- latency_target. This defines a specific latency target, in usec.
- latency_window. This defines the period over which fio samples.
- latency_percentile. This defines the percentage of IOs that must
meet the criteria specified by latency_target/latency_window.

With these options set, fio will run the described workload and
vary the queue depth between 1 and iodepth= to find the best
performing spot that meets the criteria specified by the three
options.

A sample job file is also added to demonstrate how to use this.

Signed-off-by: Jens Axboe <axboe@kernel.dk>
/external/fio/ioengine.h
d179fe19f0f6b56a3335848bfac04df4c758e69f 28-May-2013 Jens Axboe <axboe@kernel.dk> Bump IO engine version number

We changed the layout of io_u, which isn't binary
compatible with pre-compiled external engines.

Signed-off-by: Jens Axboe <axboe@kernel.dk>
/external/fio/ioengine.h
2ae0b204743d6b4048c6fffd46c6280a70f2ecd1 28-May-2013 Jens Axboe <axboe@kernel.dk> Replace list based free/busy/requeue list with FIFO + ring

Cache friendliness of the list is pretty low. This has
provably lower overhead.

Signed-off-by: Jens Axboe <axboe@kernel.dk>
/external/fio/ioengine.h
002e7183cb86d6100efef690b6fa90bf0988b084 17-May-2013 Jens Axboe <axboe@kernel.dk> Ensure that we have no IO pending when sleeping

For rate limiting or thinktime handling, ensure that we have
no busy IO when we do spin or sleep. Otherwise we potentially
skew the latencies a lot, since events could have been reaped.

Already working for rate iops, just abstracted it out and
ensure that we do the same for thinktime. Only a problem for
certain workloads, those with queuedepth > 1.

Signed-off-by: Jens Axboe <axboe@kernel.dk>
/external/fio/ioengine.h
cc86c395fd9dd2002ec1edc0967b7c9453debdfb 03-May-2013 Jens Axboe <axboe@kernel.dk> Honor random/zero/compressible settings for filling an initial file

Right now we only do that for when the job writes, do it for the
initial setup as well. Otherwise you just get zero filled files
initially, which might not be what you want.

Also fixes a bug with compression if compress_chunk isn't set.

Signed-off-by: Jens Axboe <axboe@kernel.dk>
/external/fio/ioengine.h
c5d5a325399db33fb5cacf4d07a23e64c6b428af 17-Apr-2013 Jens Axboe <axboe@kernel.dk> ioengine: kill unneeded thread_data forward declaration

Signed-off-by: Jens Axboe <axboe@kernel.dk>
/external/fio/ioengine.h
22f80458a520d0c5371c64bf91d24cdd21dff825 09-Apr-2013 Jens Axboe <axboe@kernel.dk> Merge branch 'master' into gfio

Conflicts:
eta.c
fio.h
init.c
options.c
stat.c

Signed-off-by: Jens Axboe <axboe@kernel.dk>
ad705bcb7e79a7cdb9891db17b4c40b13b6c30c3 09-Apr-2013 Steven Noonan <steven@uplinklabs.net> implement 'unit_base' option to select between KB and Kbit et. al.

With network testing, it's often desirable to measure in terms of
kilobits/megabits rather than kilobytes/megabytes. This adds an option named
'unit_base' which can be set to either '1' or '8', where '1' means represent in
terms of bits and '8' means to represent rate in terms of bytes.

Signed-off-by: Steven Noonan <steven@uplinklabs.net>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
/external/fio/ioengine.h
836fcc0fceb233ebcc41ee63b4ea5cae20b678a4 24-Jan-2013 Jens Axboe <axboe@kernel.dk> Merge branch 'master' into gfio

Conflicts:
Makefile
backend.c
client.c
fio.c
fio.h
ioengine.h
options.c
os/os-linux.h
server.c

Signed-off-by: Jens Axboe <axboe@kernel.dk>
100f49f105126a26de6f1069679c20fd75194188 23-Jan-2013 Jens Axboe <axboe@kernel.dk> verify: stop on actual number of bytes needed to be verified

If we don't use LFSR or a random map, we don't get told when
to stop by the random generator or map. So track it on the
side, using the same mechanism as do_io().

Signed-off-by: Jens Axboe <axboe@kernel.dk>
/external/fio/ioengine.h
bcd5abfa9f230bbe4365dad1289fdea1f5509f74 23-Jan-2013 Jens Axboe <axboe@kernel.dk> Make experimental_verify=1 handle all cases properly

- Don't track written bytes, just replay the workload by resetting
all the random generators. This should work for any mixture of IO.

- Handle trims for verify.

- Ensure that rwmix is replayed properly for verify.

- Fixup logging for replay.

Signed-off-by: Jens Axboe <axboe@kernel.dk>
/external/fio/ioengine.h
67bf982340d95ca98098ea050b54b4c7adb116c0 10-Jan-2013 Jens Axboe <axboe@kernel.dk> Add configure script

Get rid of all the fragile guessing and checking of features,
and roll a configure script instead.

Signed-off-by: Jens Axboe <axboe@kernel.dk>
/external/fio/ioengine.h
2a988d8bcb447eb098fc382835cc507587c6ba66 11-Dec-2012 Jens Axboe <axboe@kernel.dk> Merge branch 'master' into gfio

Conflicts:
fio.c

Signed-off-by: Jens Axboe <axboe@kernel.dk>
c73ed24623ad94a5254e8302298797aba2eb1e9a 06-Dec-2012 Jens Axboe <axboe@kernel.dk> windowsaio: initialize and map windowsaio IO structure to io_u

Instead of searching for a free entry everytime we enter
queue, do this when the io_u is setup. It's cleaner and
faster.

Signed-off-by: Jens Axboe <axboe@kernel.dk>
/external/fio/ioengine.h
49758e11f3658686ccd1c61724a5eba142f3ee4f 03-Dec-2012 Jens Axboe <axboe@kernel.dk> Merge branch 'master' into gfio

Conflicts:
Makefile
fio.h
io_u.c
ioengine.h
memory.c

Signed-off-by: Jens Axboe <axboe@kernel.dk>
36d80bc7c7f7fbc2612941b7dd7ceaf645798c7f 30-Nov-2012 Jens Axboe <axboe@kernel.dk> Wire up SIGUSR2 to kill blocking threads

Get rid of io engine ops SIGTERM flag, it didn't really
work.

Signed-off-by: Jens Axboe <axboe@kernel.dk>
/external/fio/ioengine.h
d72be5454c8c5378f16804ff9b8d1afe8729a380 30-Nov-2012 Jens Axboe <axboe@kernel.dk> Cache layout improvements

Signed-off-by: Jens Axboe <axboe@kernel.dk>
/external/fio/ioengine.h
41666588eed4ed830b1fabd0458eb2b0a93f0147 21-Mar-2012 Jens Axboe <axboe@kernel.dk> gfio: add gerror.c for reporting errors

Signed-off-by: Jens Axboe <axboe@kernel.dk>
/external/fio/ioengine.h
e476994eed3bee246ca166ea6ad6018911408e9b 13-Mar-2012 Jens Axboe <axboe@kernel.dk> Merge branch 'master' into gfio

Conflicts:
client.c
fio.h

Signed-off-by: Jens Axboe <axboe@kernel.dk>
82af2a7ca1a543b41c003de69d5e3c36860f47d5 13-Mar-2012 Jens Axboe <axboe@kernel.dk> Fix failure to verify in mixed read/write workload with backlog

If you run a workload like this:

fio --rw=randrw --bs=4k --direct=1 --ioengine=libaio --iodepth=32
--verify=meta --verify_backlog=1024 --verify_fatal=1 --name=ver-test
--filename=foo --size=1G --verify_pattern=0xaaa

Fio ends up never actually verifying the written blocks. This happens
because as we generate an entry to be verified, the backend checks
whether this is a read/write mixed workload. It then thinks that the
READ is just that, a normal READ, when in fact it could be coming
from our verify list.

Mark such a read as coming from our verify list, so that we know if
it's a "normal" read or one generated to verify previously written
data.

Signed-off-by: Jens Axboe <axboe@kernel.dk>
/external/fio/ioengine.h
ec41265e81c70d8573d1359e27876c37c30c7d9d 08-Mar-2012 Jens Axboe <axboe@kernel.dk> Abstract out the thread_options structure

We need to prepare to have an on-disk/net version of the same.

Signed-off-by: Jens Axboe <axboe@kernel.dk>
/external/fio/ioengine.h
9c42684e32325da26e862280388798343c5f1305 02-Mar-2012 Jens Axboe <axboe@kernel.dk> Add buffer_compress_percentage

The option is pending testing, so not documented yet.

Signed-off-by: Jens Axboe <axboe@kernel.dk>
/external/fio/ioengine.h
93bcfd20e37cef8cec350fe06d3a086724c9f257 20-Feb-2012 Bruce Cran <bruce@cran.org.uk> Move Windows port to MinGW

- Add calls to WSAStartup in the network code as required by
Winsock.
- Add Windows-specific init_random_state function which uses the
Crypto API.
- Move Windows port to MinGW and update build system to create a
64-bit binary by default.
- Install text files as .rtf so they won't open in Notepad by default
(Wordpad understands Unix line endings; Notepad doesn't).
- Simplify WiX installer code.

Signed-off-by: Jens Axboe <axboe@kernel.dk>
/external/fio/ioengine.h
de890a1e48d40238dac69f302708dde8719de240 09-Nov-2011 Steven Lang <tirea@google.com> Private parameters for ioengines

Here is the polished version of the engine private options patch. As
discussed, the global section only ever tracks the private options for
the globally defined ioengine. For command line parameters, the
ioengine must be selected before any private options are used. (IE
--ioengine=libaio --userspace_reap will work, but --userspace_reap
--ioengine=libaio will not.)

The userspace_reap option from libaio has been moved over to this new
option method, usage should be identical to before.
The net ioengine has been modified to use parameters, with hostname,
port, protocol and listen defined as ioengine private parameters. The
old style of hostname=host,port,protocol no longer works, so usage
will need to be updated. (It will spit out an error that should be
clear enough that it changed if this is tried.) Also, with the new
way for specifying parameters, the net IO engine now allows data to
flow in either direction on TCP connections, regardless of which end
initiates the connection.

There's also a new command line argument --enghelp which can be used
to get help on ioengine private parameters, similar to --cmdhelp.
With no argument, it lists all built-in ioengine. The argument is an
ioengine name (Or path to .so) and optionally a comma followed by a
command name, which behaves identically to --cmdhelp.

For ioengine authorship, if options are supplied, both the options
structure and the size of the storage needed must be supplied, and the
storage must be large enough to hold a pointer to struct thread_data;
that is because the options callback doesn't explicitly have a pointer
to the thread data (Normally it relies on the fact that the options
struct is the start of the thread data), so the offset 0 of the struct
must point to the thread data, and is filled in automatically. (This
also neatly provides a guarantee that offset 0 is reserved in the
options data, so it can be safely used as a test of undefined.)

Signed-off-by: Jens Axboe <axboe@kernel.dk>
/external/fio/ioengine.h
e97c14423a5688d7adfb342c16363c263cb741f9 21-Sep-2011 Jens Axboe <axboe@kernel.dk> Fix aiocb compile warnings on HPUX

Unlike other platforms, it seems to require aiocb64 explicitly
for long offsets. Add an os independent typedef for this.

Signed-off-by: Jens Axboe <axboe@kernel.dk>
/external/fio/ioengine.h
21b8aee865f0d3960687ce6ba7385e5977f45061 01-Aug-2011 ren yufei <renyufei83@yahoo.com.cn> RDMA IO engine

I have hacked an rdma ioengine based on OFED for fio which could test
both rdma memory semantic (rdma_write/rdma_read) and channel semantic
(send/recv). Would you like to merge this engine into fio?

notes
1) RDMA engine works in IB, iWarp and RoCE.
2) RDMA engine is disable by default. To enable it, execute the following
before compile:

$ export EXTFLAGS="-DFIO_HAVE_RDMA"
$ export EXTLIBS="-libverbs -lrdmacm"

Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
/external/fio/ioengine.h
7d9fb455aadc0c0363489591775496f27f4a560a 11-Jan-2011 Jens Axboe <jaxboe@fusionio.com> When verify fails, dump the good/bad blocks to files

This makes it easy to compare afterwards to see what kind of
corruption was experienced.

Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
/external/fio/ioengine.h
03e20d687566753b90383571e5e152c5142bdffd 02-Jan-2011 Bruce Cran <bruce@cran.org.uk> First snapshot of FIO for Windows

Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
/external/fio/ioengine.h
ca7e0ddb08fece35c95e9056ca877e0806f1e6ef 28-Oct-2010 Jens Axboe <jaxboe@fusionio.com> binject: ensure we get aligned memory

Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
/external/fio/ioengine.h
1ef2b6be973eded12827990ae1a9eb28b7b20be7 08-Oct-2010 Jens Axboe <jaxboe@fusionio.com> Initial support for explicit write barriers

Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
/external/fio/ioengine.h
79a43187163eb99eaabaa496cb8b5e3a164f3e09 07-Sep-2010 Jens Axboe <jaxboe@fusionio.com> Add binject IO engine

Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
/external/fio/ioengine.h
0d29de831183dfd049c97a03008d425ce21e2fa4 01-Sep-2010 Jens Axboe <jaxboe@fusionio.com> Add verify trim support

Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
/external/fio/ioengine.h
38dad62d5154ffaad445bd0231b271b9a46a5190 20-Jul-2010 Jens Axboe <jaxboe@fusionio.com> Add rw_sequencer option

Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
/external/fio/ioengine.h
a5f3027cb0495dfe217b2626d248fcc054e7e878 20-Jul-2010 Jens Axboe <jaxboe@fusionio.com> Initial commit for TRIM/DISCARD support

Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
/external/fio/ioengine.h
10e8a7b30ce2917df9f839d42596c7e3af9a904f 15-Jul-2010 Radha Ramachandran <radha@google.com> No need to use specific flag for io_u fill length

The fill length already provides that information.

Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
/external/fio/ioengine.h
9522850758ecad087891710b391b4e77f6bff839 14-Jul-2010 Jens Axboe <jaxboe@fusionio.com> Turn io_u filled variable into a flag

Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
/external/fio/ioengine.h
cbe8d7561cf6d81d741d87eb7940db2a111d2144 14-Jul-2010 Radha Ramachandran <radha@google.com> Reuse filled pattern

I made changes to fio so we wld re-use the already populated io_u
buffer (when there is a non-random pattern) during writes. That way
only the header will be re-calculated for every I/O. This way the
buffer wld get populated in the beginning and as long as the
subsequent ios using the same io_u structure are writes and have same
or less block size, it wld get re-used. If any of the subsequent i/o
is a read or has a block size greater than the pre-filled one, then
the buffer is invalidated and will be re-filled at the next write.

Reason for this risky change: (Performance)
I tested this change on a tmpfs(with no swap backing), with the
following config file:
[sscan_write]
filename=/mytmpfs/datafile.tmp
rw=write
bs=64k
size=3G
ioengine=libaio
iodepth=1024
iodepth_low=512
runtime=10800
bwavgtime=5000
thread=1
do_verify=0
verify=meta
verify_pattern=0x55aaa55a
verify_interval=4k
continue_on_error=1

fio-1-41-6 gave 306MB/s and the new change had a performance of 1546MB/s

Side effects/Risks:
There is a risk with this fix, that if the buffer gets corrupted then
the subsequent writes will also be corrupt. I think for both
sequential writes and random writes (with verify, where the I/O log is
replayed) we shld be able to find the first I/O that started with the
corruption and if the buffer is getting corrupted, there are other
issues here.

Testing:
I have tested this fix with sequential write(verify)/random read write
mix combination(with verify).

I think I have taken care of most of the case, but please let me know
if there is anything I have missed. I have attached the patch along
with this email. I think the performance improvement outweighs the
risk associated with the fix. But I will let you decide if you wld
like to pick it up.

Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
/external/fio/ioengine.h
0a28ecda80a78c9d70ae38ced58f3a2fa9c9529d 09-Mar-2010 Jens Axboe <jens.axboe@oracle.com> Abstract out generic sync helper

Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
/external/fio/ioengine.h
44f29692cfba246981bb3c1b894333a6d2209f51 09-Mar-2010 Jens Axboe <jens.axboe@oracle.com> Initial suppor for sync_file_range()

This revs the ioengine to 11, as we now have another data direction.

Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
/external/fio/ioengine.h
0c41214ff4e6f31f8df64aac37be7853aada6f1f 03-Nov-2009 Radha Ramachandran <radha@google.com> Fix race condition when using asynch verify

I discovered the race condition when using asynch verify with libaio engine.
The code assumes that because the td->cur_depth value is not 0 that
there is still I/O pending and issues io_getevents when the I/O was
actually being verified by the asynchronous verify thread. This causes
the code to hang.

(Updated by Jens to use a new io_u->flag bitfield instead of adding a new
integer to struct io_u).

Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
/external/fio/ioengine.h
e8462bd8250cf3ff2d41f17e1a4d4cefc70b6b37 06-Jul-2009 Jens Axboe <jens.axboe@oracle.com> Add support for async IO verification offload

This adds support for setting up a number of IO verification offload
threads, instead of doing the offload inline. An option for controlling
the CPU affinity of those threads are always added.

Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
/external/fio/ioengine.h
9c0d224129b0c59698e4c77e7fed00dc8cbb50e1 01-Jul-2009 Jens Axboe <jens.axboe@oracle.com> Don't allow pre_read on IO engines that cannot seek

We cannot pre-read files, if we cannot seek back and read the same
data again. So just disable it with a warning to the user.

Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
/external/fio/ioengine.h
f2bba1820a567ac00b09916239ac8feb125cead2 15-Jun-2009 Radha Ramachandran <radha@google.com> Add a 'continue_on_error' option to fio

Add option to make fio continue on non-fatal errors.

Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
/external/fio/ioengine.h
581e71417760e0aa86eac0acd704253ff0eeea4f 09-Jun-2009 Jens Axboe <jens.axboe@oracle.com> Add support for limiting only rate in only one direction

So now you can say 'limit writes to 10MB/sec' and have reads go
full throttle, for instance.

Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
/external/fio/ioengine.h
c592b9fe12d4739d99d5bece517e304804876df6 03-Jun-2009 Jens Axboe <jens.axboe@oracle.com> More fio.h cleanups

Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
/external/fio/ioengine.h
2b4f4abec640f36ccdff39de00e74b2234e27116 03-Jun-2009 Jens Axboe <jens.axboe@oracle.com> Move IO engine flags

Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
/external/fio/ioengine.h
dcefb588d556828af570221b2dc276a6376c8557 03-Jun-2009 Jens Axboe <jens.axboe@oracle.com> Add ioengine.h header

Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
/external/fio/ioengine.h