summaryrefslogtreecommitdiffstats
path: root/src/spdk/doc/bdevperf.md
diff options
context:
space:
mode:
Diffstat (limited to 'src/spdk/doc/bdevperf.md')
-rw-r--r--src/spdk/doc/bdevperf.md86
1 files changed, 86 insertions, 0 deletions
diff --git a/src/spdk/doc/bdevperf.md b/src/spdk/doc/bdevperf.md
new file mode 100644
index 000000000..8c5c5828c
--- /dev/null
+++ b/src/spdk/doc/bdevperf.md
@@ -0,0 +1,86 @@
+# Using bdevperf application {#bdevperf}
+
+## Introduction
+
+bdevperf is an SPDK application that is used for performance testing
+of block devices (bdevs) exposed by the SPDK bdev layer. It is an
+alternative to the SPDK bdev fio plugin for benchmarking SPDK bdevs.
+In some cases, bdevperf can provide much lower overhead than the fio
+plugin, resulting in much better performance for tests using a limited
+number of CPU cores.
+
+bdevperf exposes command line interface that allows to specify
+SPDK framework options as well as testing options.
+Since SPDK 20.07, bdevperf supports configuration file that is similar
+to FIO. It allows user to create jobs parameterized by
+filename, cpumask, blocksize, queuesize, etc.
+
+## Config file
+
+Bdevperf's config file is similar to FIO's config file format.
+
+Below is an example config file that uses all available parameters:
+
+~~~{.ini}
+[global]
+filename=Malloc0:Malloc1
+bs=1024
+iosize=256
+rw=randrw
+rwmixread=90
+
+[A]
+cpumask=0xff
+
+[B]
+cpumask=[0-128]
+filename=Malloc1
+
+[global]
+filename=Malloc0
+rw=write
+
+[C]
+bs=4096
+iosize=128
+offset=1000000
+length=1000000
+~~~
+
+Jobs `[A]` `[B]` or `[C]`, inherit default values from `[global]`
+section residing above them. So in the example, job `[A]` inherits
+`filename` value and uses both `Malloc0` and `Malloc1` bdevs as targets,
+job `[B]` overrides its `filename` value and uses `Malloc1` and
+job `[C]` inherits value `Malloc0` for its `filename`.
+
+Interaction with CLI arguments is not the same as in FIO however.
+If bdevperf receives CLI argument, it overrides values
+of corresponding parameter for all `[global]` sections of config file.
+So if example config is used, specifying `-q` argument
+will make jobs `[A]` and `[B]` use its value.
+
+Below is a full list of supported parameters with descriptions.
+
+Param | Default | Description
+--------- | ----------------- | -----------
+filename | | Bdevs to use, separated by ":"
+cpumask | Maximum available | CPU mask. Format is defined at @ref cpu_mask
+bs | | Block size (io size)
+iodepth | | Queue depth
+rwmixread | `50` | Percentage of a mixed workload that should be reads
+offset | `0` | Start I/O at the provided offset on the bdev
+length | 100% of bdev size | End I/O at `offset`+`length` on the bdev
+rw | | Type of I/O pattern
+
+Available rw types:
+- read
+- randread
+- write
+- randwrite
+- verify
+- reset
+- unmap
+- write_zeroes
+- flush
+- rw
+- randrw