[RFC] fio-tests: add framework to build fio tests dynamically

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



fio is very flexible, but writing configuration files can often be an error
prone process. When you design a test you may also decide that you'd like
to tests different read/write target profiles, using different parameters.
Editing fio files to account for different profiles can also be error prone.

fio-tests aims towards helping with these complexities by letting you
configure a DUT using a variability modeling language (kconfig), and
using a set of basic core templates which are used to generate target
tests.

With this model we are currently able to generate 753 tests using only
4 basic core template input files for fio as base.

This also adds some basic graphing generation support for results, and
a few demo results and intepretations which can be used as guidance.

fio-tests can used to test performance, but it can also be used to
provision target storage devices with target pre-conditioning for NAND
storage drives. also adds a two pre-conditioning methods:

  * SNIA IOPS interpretion as per SSS PTS Version 2.0.1
  * Santa Clara method

Certain new non-NAND drives don't require pre-conditioning, however
they may require energized state form of pre-conditioning, this is
also currently supported, refer to CONFIG_ENERGIZED_STEADY_STATE.

Signed-off-by: Luis Chamberlain <mcgrof@xxxxxxxxxx>
---

Since this patch is large I figured it'd be best to just just refer to
the branch on github and new respective documentaiton [0] so folks could
get an idea of what is being proposed first, and if we *do* want this
on fio upstream then I can break it down.

I have reviewed a series of projects with different collections of fio
tests and was not happy how error prone they were and the lack of
variablity on them. If its preferred to host this as a standalone
project I may need a bit of help with that, contact me for details,
if interested in helping with that.

I figured SNIA folks may prefer to not call the SNIA IOPS test the SNIA
IOPS test, for trademark or marketing reasons, or whatever, so to be
sure that its *my interpretation* I've called it The Buddy Holly test.

[0] https://github.com/mcgrof/fio/tree/20190521-fio-tests/tests

 tests/.gitignore                              |   29 +
 tests/Kconfig                                 |   28 +
 tests/Makefile                                |   72 +
 tests/Provisioning.md                         |  445 ++++++
 tests/README.md                               |  625 ++++++++
 tests/TODO                                    |   67 +
 tests/arch/x86/defconfig                      |  115 ++
 tests/contrib/provision_all.sh                |  232 +++
 tests/defconfigs/prov_sc_random               |   12 +
 tests/defconfigs/prov_sc_seq                  |   12 +
 .../0005-maxiobatch-randwrite-70-30-bwr.svg   |  409 +++++
 .../0005-maxiobatch-randwrite-70-30-bww.svg   |  396 +++++
 .../0005-maxiobatch-randwrite-70-30-clatr.svg |  357 +++++
 .../0005-maxiobatch-randwrite-70-30-clatw.svg |  344 +++++
 .../0005-maxiobatch-randwrite-70-30-iopsr.svg |  344 +++++
 .../0005-maxiobatch-randwrite-70-30-iopsw.svg |  357 +++++
 .../0001-256qd-randrw-bwr.svg                 |  346 +++++
 .../0001-256qd-randrw-bww.svg                 |  333 ++++
 .../0001-256qd-randrw-clatr.svg               |  359 +++++
 .../0001-256qd-randrw-clatw.svg               |  359 +++++
 .../0001-256qd-randrw-iopsr.svg               |  346 +++++
 .../0001-256qd-randrw-iopsw.svg               |  346 +++++
 .../0002-512qd-randrw-bwr.svg                 |  346 +++++
 .../0002-512qd-randrw-bww.svg                 |  333 ++++
 .../0002-512qd-randrw-clatr.svg               |  346 +++++
 .../0002-512qd-randrw-clatw.svg               |  346 +++++
 .../0002-512qd-randrw-iopsr.svg               |  346 +++++
 .../0002-512qd-randrw-iopsw.svg               |  346 +++++
 .../0003-1024qd-randrw-bwr.svg                |  346 +++++
 .../0003-1024qd-randrw-bww.svg                |  333 ++++
 .../0003-1024qd-randrw-clatr.svg              |  372 +++++
 .../0003-1024qd-randrw-clatw.svg              |  372 +++++
 .../0003-1024qd-randrw-iopsr.svg              |  346 +++++
 .../0003-1024qd-randrw-iopsw.svg              |  346 +++++
 .../0004-2048qd-randrw-bwr.svg                |  346 +++++
 .../0004-2048qd-randrw-bww.svg                |  333 ++++
 .../0004-2048qd-randrw-clatr.svg              |  372 +++++
 .../0004-2048qd-randrw-clatw.svg              |  372 +++++
 .../0004-2048qd-randrw-iopsr.svg              |  346 +++++
 .../0004-2048qd-randrw-iopsw.svg              |  346 +++++
 .../0005-4096qd-randrw-bwr.svg                |  346 +++++
 .../0005-4096qd-randrw-bww.svg                |  333 ++++
 .../0005-4096qd-randrw-clatr.svg              |  359 +++++
 .../0005-4096qd-randrw-clatw.svg              |  359 +++++
 .../0005-4096qd-randrw-iopsr.svg              |  346 +++++
 .../0005-4096qd-randrw-iopsw.svg              |  346 +++++
 tests/pre-conditioning/Makefile               |   28 +
 tests/scripts/Kbuild.include                  |   66 +
 tests/scripts/Kconfig.debug                   |   24 +
 tests/scripts/Kconfig.debug.quick             |  109 ++
 tests/scripts/Kconfig.dut                     |  378 +++++
 tests/scripts/Kconfig.pre-condition           |   82 +
 tests/scripts/Kconfig.purge                   |  242 +++
 tests/scripts/Kconfig.santa_clara             |  274 ++++
 tests/scripts/Kconfig.steady-state            |   70 +
 tests/scripts/build.Makefile                  |   50 +
 tests/scripts/gen-fio-files.sh                |  600 ++++++++
 tests/scripts/gen-graph.sh                    |  955 ++++++++++++
 tests/scripts/gen-pre-condition.sh            |  225 +++
 tests/scripts/gen-sheet.sh                    |  195 +++
 tests/scripts/json2res                        |   91 ++
 tests/scripts/kconfig.Makefile                |   48 +
 tests/scripts/kconfig/.gitignore              |   22 +
 tests/scripts/kconfig/Makefile                |   43 +
 tests/scripts/kconfig/conf.c                  |  722 +++++++++
 tests/scripts/kconfig/confdata.c              | 1322 ++++++++++++++++
 tests/scripts/kconfig/expr.c                  | 1305 ++++++++++++++++
 tests/scripts/kconfig/expr.h                  |  331 ++++
 tests/scripts/kconfig/kconf_id.c              |   52 +
 tests/scripts/kconfig/list.h                  |  132 ++
 tests/scripts/kconfig/lkc.h                   |  169 +++
 tests/scripts/kconfig/lkc_proto.h             |   66 +
 tests/scripts/kconfig/lxdialog/.gitignore     |    4 +
 .../scripts/kconfig/lxdialog/BIG.FAT.WARNING  |    4 +
 tests/scripts/kconfig/lxdialog/checklist.c    |  332 ++++
 tests/scripts/kconfig/lxdialog/dialog.h       |  251 ++++
 tests/scripts/kconfig/lxdialog/inputbox.c     |  301 ++++
 tests/scripts/kconfig/lxdialog/menubox.c      |  437 ++++++
 tests/scripts/kconfig/lxdialog/textbox.c      |  408 +++++
 tests/scripts/kconfig/lxdialog/util.c         |  713 +++++++++
 tests/scripts/kconfig/lxdialog/yesno.c        |  114 ++
 tests/scripts/kconfig/mconf-cfg.sh            |   47 +
 tests/scripts/kconfig/mconf.c                 | 1039 +++++++++++++
 tests/scripts/kconfig/menu.c                  |  870 +++++++++++
 tests/scripts/kconfig/preprocess.c            |  572 +++++++
 tests/scripts/kconfig/symbol.c                | 1334 +++++++++++++++++
 tests/scripts/kconfig/util.c                  |  130 ++
 tests/scripts/kconfig/zconf.l                 |  455 ++++++
 tests/scripts/kconfig/zconf.y                 |  790 ++++++++++
 tests/scripts/lib.sh                          |  572 +++++++
 tests/scripts/noconfig-lib.sh                 |   43 +
 tests/scripts/objects.Makefile                |   83 +
 tests/scripts/run-all-fio.sh                  | 1046 +++++++++++++
 tests/scripts/run-fio.sh                      |  241 +++
 tests/scripts/setlocalversion                 |  117 ++
 tests/templates/0001-basic-template.ini.in    |   29 +
 .../0001-pre-condition-sequential.ini.in      |    1 +
 .../prefill/0002-pre-condition-random.ini.in  |   23 +
 ...-workload-independent-pre-condition.ini.in |   22 +
 ...02-workload-dependent-pre-condition.ini.in |   35 +
 .../steady-state/0001-steady-state.ini.in     |    1 +
 tests/tests-demo-results.tar.xz               |  Bin 0 -> 203392 bytes
 .../0001-basic-tests/0001-seqwrite/Makefile   |   37 +
 .../0001-basic-tests/0002-seqread/Makefile    |   37 +
 .../0001-basic-tests/0003-randwrite/Makefile  |   37 +
 .../0001-basic-tests/0004-randread/Makefile   |   37 +
 .../0005-randwrite-70-30/Makefile             |   38 +
 .../0006-randwrite-97-3/Makefile              |   38 +
 tests/tests/0001-basic-tests/Kconfig          |    7 +
 tests/tests/0001-basic-tests/Makefile         |   28 +
 .../0002-iobatch/0001-iobatch-write/Makefile  |   44 +
 .../0002-iobatch/0002-iobatch-read/Makefile   |   43 +
 .../0003-iobatch-randwrite/Makefile           |   44 +
 .../0004-iobatch-randread/Makefile            |   44 +
 .../0005-iobatch-randwrite-70-30/Makefile     |   45 +
 .../0006-iobatch-randwrite-97-3/Makefile      |   45 +
 tests/tests/0002-iobatch/Kconfig              |   12 +
 tests/tests/0002-iobatch/Makefile             |   28 +
 .../0001-maxiobatch-write/Makefile            |   41 +
 .../0002-maxiobatch-read/Makefile             |   41 +
 .../0003-maxiobatch-randwrite/Makefile        |   41 +
 .../0004-maxiobatch-randread/Makefile         |   41 +
 .../0005-maxiobatch-randwrite-70-30/Makefile  |   42 +
 .../0006-maxiobatch-randwrite-97-3/Makefile   |   42 +
 .../tests/0003-maxiobatch-single-job/Kconfig  |    8 +
 .../tests/0003-maxiobatch-single-job/Makefile |   28 +
 .../0001-maxiobatch-write/Makefile            |   44 +
 .../0002-maxiobatch-read/Makefile             |   44 +
 .../0003-maxiobatch-randwrite/Makefile        |   44 +
 .../0004-maxiobatch-randread/Makefile         |   44 +
 .../0005-maxiobatch-randwrite-70-30/Makefile  |   45 +
 .../0006-maxiobatch-randwrite-97-3/Makefile   |   45 +
 tests/tests/0004-maxiobatch-jobs/Kconfig      |   10 +
 tests/tests/0004-maxiobatch-jobs/Makefile     |   28 +
 tests/tests/0005-snia/0001-iops/Kconfig       |  180 +++
 tests/tests/0005-snia/0001-iops/Makefile      |   58 +
 tests/tests/0005-snia/Kconfig                 |   62 +
 tests/tests/0005-snia/Makefile                |   25 +
 tests/tests/Kconfig                           |   48 +
 tests/tests/Makefile                          |   26 +
 140 files changed, 33481 insertions(+)
 create mode 100644 tests/.gitignore
 create mode 100644 tests/Kconfig
 create mode 100644 tests/Makefile
 create mode 100644 tests/Provisioning.md
 create mode 100644 tests/README.md
 create mode 100644 tests/TODO
 create mode 100644 tests/arch/x86/defconfig
 create mode 100755 tests/contrib/provision_all.sh
 create mode 100644 tests/defconfigs/prov_sc_random
 create mode 100644 tests/defconfigs/prov_sc_seq
 create mode 100644 tests/images/20181019/0003-maxiobatch-single-job/0005-maxiobatch-randwrite-70-30-bwr.svg
 create mode 100644 tests/images/20181019/0003-maxiobatch-single-job/0005-maxiobatch-randwrite-70-30-bww.svg
 create mode 100644 tests/images/20181019/0003-maxiobatch-single-job/0005-maxiobatch-randwrite-70-30-clatr.svg
 create mode 100644 tests/images/20181019/0003-maxiobatch-single-job/0005-maxiobatch-randwrite-70-30-clatw.svg
 create mode 100644 tests/images/20181019/0003-maxiobatch-single-job/0005-maxiobatch-randwrite-70-30-iopsr.svg
 create mode 100644 tests/images/20181019/0003-maxiobatch-single-job/0005-maxiobatch-randwrite-70-30-iopsw.svg
 create mode 100644 tests/images/20181019/0004-maxiobatch-randread/0001-256qd-randrw-bwr.svg
 create mode 100644 tests/images/20181019/0004-maxiobatch-randread/0001-256qd-randrw-bww.svg
 create mode 100644 tests/images/20181019/0004-maxiobatch-randread/0001-256qd-randrw-clatr.svg
 create mode 100644 tests/images/20181019/0004-maxiobatch-randread/0001-256qd-randrw-clatw.svg
 create mode 100644 tests/images/20181019/0004-maxiobatch-randread/0001-256qd-randrw-iopsr.svg
 create mode 100644 tests/images/20181019/0004-maxiobatch-randread/0001-256qd-randrw-iopsw.svg
 create mode 100644 tests/images/20181019/0004-maxiobatch-randread/0002-512qd-randrw-bwr.svg
 create mode 100644 tests/images/20181019/0004-maxiobatch-randread/0002-512qd-randrw-bww.svg
 create mode 100644 tests/images/20181019/0004-maxiobatch-randread/0002-512qd-randrw-clatr.svg
 create mode 100644 tests/images/20181019/0004-maxiobatch-randread/0002-512qd-randrw-clatw.svg
 create mode 100644 tests/images/20181019/0004-maxiobatch-randread/0002-512qd-randrw-iopsr.svg
 create mode 100644 tests/images/20181019/0004-maxiobatch-randread/0002-512qd-randrw-iopsw.svg
 create mode 100644 tests/images/20181019/0004-maxiobatch-randread/0003-1024qd-randrw-bwr.svg
 create mode 100644 tests/images/20181019/0004-maxiobatch-randread/0003-1024qd-randrw-bww.svg
 create mode 100644 tests/images/20181019/0004-maxiobatch-randread/0003-1024qd-randrw-clatr.svg
 create mode 100644 tests/images/20181019/0004-maxiobatch-randread/0003-1024qd-randrw-clatw.svg
 create mode 100644 tests/images/20181019/0004-maxiobatch-randread/0003-1024qd-randrw-iopsr.svg
 create mode 100644 tests/images/20181019/0004-maxiobatch-randread/0003-1024qd-randrw-iopsw.svg
 create mode 100644 tests/images/20181019/0004-maxiobatch-randread/0004-2048qd-randrw-bwr.svg
 create mode 100644 tests/images/20181019/0004-maxiobatch-randread/0004-2048qd-randrw-bww.svg
 create mode 100644 tests/images/20181019/0004-maxiobatch-randread/0004-2048qd-randrw-clatr.svg
 create mode 100644 tests/images/20181019/0004-maxiobatch-randread/0004-2048qd-randrw-clatw.svg
 create mode 100644 tests/images/20181019/0004-maxiobatch-randread/0004-2048qd-randrw-iopsr.svg
 create mode 100644 tests/images/20181019/0004-maxiobatch-randread/0004-2048qd-randrw-iopsw.svg
 create mode 100644 tests/images/20181019/0004-maxiobatch-randread/0005-4096qd-randrw-bwr.svg
 create mode 100644 tests/images/20181019/0004-maxiobatch-randread/0005-4096qd-randrw-bww.svg
 create mode 100644 tests/images/20181019/0004-maxiobatch-randread/0005-4096qd-randrw-clatr.svg
 create mode 100644 tests/images/20181019/0004-maxiobatch-randread/0005-4096qd-randrw-clatw.svg
 create mode 100644 tests/images/20181019/0004-maxiobatch-randread/0005-4096qd-randrw-iopsr.svg
 create mode 100644 tests/images/20181019/0004-maxiobatch-randread/0005-4096qd-randrw-iopsw.svg
 create mode 100644 tests/pre-conditioning/Makefile
 create mode 100644 tests/scripts/Kbuild.include
 create mode 100644 tests/scripts/Kconfig.debug
 create mode 100644 tests/scripts/Kconfig.debug.quick
 create mode 100644 tests/scripts/Kconfig.dut
 create mode 100644 tests/scripts/Kconfig.pre-condition
 create mode 100644 tests/scripts/Kconfig.purge
 create mode 100644 tests/scripts/Kconfig.santa_clara
 create mode 100644 tests/scripts/Kconfig.steady-state
 create mode 100644 tests/scripts/build.Makefile
 create mode 100755 tests/scripts/gen-fio-files.sh
 create mode 100755 tests/scripts/gen-graph.sh
 create mode 100755 tests/scripts/gen-pre-condition.sh
 create mode 100755 tests/scripts/gen-sheet.sh
 create mode 100755 tests/scripts/json2res
 create mode 100644 tests/scripts/kconfig.Makefile
 create mode 100644 tests/scripts/kconfig/.gitignore
 create mode 100644 tests/scripts/kconfig/Makefile
 create mode 100644 tests/scripts/kconfig/conf.c
 create mode 100644 tests/scripts/kconfig/confdata.c
 create mode 100644 tests/scripts/kconfig/expr.c
 create mode 100644 tests/scripts/kconfig/expr.h
 create mode 100644 tests/scripts/kconfig/kconf_id.c
 create mode 100644 tests/scripts/kconfig/list.h
 create mode 100644 tests/scripts/kconfig/lkc.h
 create mode 100644 tests/scripts/kconfig/lkc_proto.h
 create mode 100644 tests/scripts/kconfig/lxdialog/.gitignore
 create mode 100644 tests/scripts/kconfig/lxdialog/BIG.FAT.WARNING
 create mode 100644 tests/scripts/kconfig/lxdialog/checklist.c
 create mode 100644 tests/scripts/kconfig/lxdialog/dialog.h
 create mode 100644 tests/scripts/kconfig/lxdialog/inputbox.c
 create mode 100644 tests/scripts/kconfig/lxdialog/menubox.c
 create mode 100644 tests/scripts/kconfig/lxdialog/textbox.c
 create mode 100644 tests/scripts/kconfig/lxdialog/util.c
 create mode 100644 tests/scripts/kconfig/lxdialog/yesno.c
 create mode 100755 tests/scripts/kconfig/mconf-cfg.sh
 create mode 100644 tests/scripts/kconfig/mconf.c
 create mode 100644 tests/scripts/kconfig/menu.c
 create mode 100644 tests/scripts/kconfig/preprocess.c
 create mode 100644 tests/scripts/kconfig/symbol.c
 create mode 100644 tests/scripts/kconfig/util.c
 create mode 100644 tests/scripts/kconfig/zconf.l
 create mode 100644 tests/scripts/kconfig/zconf.y
 create mode 100644 tests/scripts/lib.sh
 create mode 100644 tests/scripts/noconfig-lib.sh
 create mode 100644 tests/scripts/objects.Makefile
 create mode 100755 tests/scripts/run-all-fio.sh
 create mode 100755 tests/scripts/run-fio.sh
 create mode 100755 tests/scripts/setlocalversion
 create mode 100644 tests/templates/0001-basic-template.ini.in
 create mode 120000 tests/templates/pre-condition/prefill/0001-pre-condition-sequential.ini.in
 create mode 100644 tests/templates/pre-condition/prefill/0002-pre-condition-random.ini.in
 create mode 100644 tests/templates/pre-condition/snia/0001-workload-independent-pre-condition.ini.in
 create mode 100644 tests/templates/pre-condition/snia/0002-workload-dependent-pre-condition.ini.in
 create mode 120000 tests/templates/pre-condition/steady-state/0001-steady-state.ini.in
 create mode 100644 tests/tests-demo-results.tar.xz
 create mode 100644 tests/tests/0001-basic-tests/0001-seqwrite/Makefile
 create mode 100644 tests/tests/0001-basic-tests/0002-seqread/Makefile
 create mode 100644 tests/tests/0001-basic-tests/0003-randwrite/Makefile
 create mode 100644 tests/tests/0001-basic-tests/0004-randread/Makefile
 create mode 100644 tests/tests/0001-basic-tests/0005-randwrite-70-30/Makefile
 create mode 100644 tests/tests/0001-basic-tests/0006-randwrite-97-3/Makefile
 create mode 100644 tests/tests/0001-basic-tests/Kconfig
 create mode 100644 tests/tests/0001-basic-tests/Makefile
 create mode 100644 tests/tests/0002-iobatch/0001-iobatch-write/Makefile
 create mode 100644 tests/tests/0002-iobatch/0002-iobatch-read/Makefile
 create mode 100644 tests/tests/0002-iobatch/0003-iobatch-randwrite/Makefile
 create mode 100644 tests/tests/0002-iobatch/0004-iobatch-randread/Makefile
 create mode 100644 tests/tests/0002-iobatch/0005-iobatch-randwrite-70-30/Makefile
 create mode 100644 tests/tests/0002-iobatch/0006-iobatch-randwrite-97-3/Makefile
 create mode 100644 tests/tests/0002-iobatch/Kconfig
 create mode 100644 tests/tests/0002-iobatch/Makefile
 create mode 100644 tests/tests/0003-maxiobatch-single-job/0001-maxiobatch-write/Makefile
 create mode 100644 tests/tests/0003-maxiobatch-single-job/0002-maxiobatch-read/Makefile
 create mode 100644 tests/tests/0003-maxiobatch-single-job/0003-maxiobatch-randwrite/Makefile
 create mode 100644 tests/tests/0003-maxiobatch-single-job/0004-maxiobatch-randread/Makefile
 create mode 100644 tests/tests/0003-maxiobatch-single-job/0005-maxiobatch-randwrite-70-30/Makefile
 create mode 100644 tests/tests/0003-maxiobatch-single-job/0006-maxiobatch-randwrite-97-3/Makefile
 create mode 100644 tests/tests/0003-maxiobatch-single-job/Kconfig
 create mode 100644 tests/tests/0003-maxiobatch-single-job/Makefile
 create mode 100644 tests/tests/0004-maxiobatch-jobs/0001-maxiobatch-write/Makefile
 create mode 100644 tests/tests/0004-maxiobatch-jobs/0002-maxiobatch-read/Makefile
 create mode 100644 tests/tests/0004-maxiobatch-jobs/0003-maxiobatch-randwrite/Makefile
 create mode 100644 tests/tests/0004-maxiobatch-jobs/0004-maxiobatch-randread/Makefile
 create mode 100644 tests/tests/0004-maxiobatch-jobs/0005-maxiobatch-randwrite-70-30/Makefile
 create mode 100644 tests/tests/0004-maxiobatch-jobs/0006-maxiobatch-randwrite-97-3/Makefile
 create mode 100644 tests/tests/0004-maxiobatch-jobs/Kconfig
 create mode 100644 tests/tests/0004-maxiobatch-jobs/Makefile
 create mode 100644 tests/tests/0005-snia/0001-iops/Kconfig
 create mode 100644 tests/tests/0005-snia/0001-iops/Makefile
 create mode 100644 tests/tests/0005-snia/Kconfig
 create mode 100644 tests/tests/0005-snia/Makefile
 create mode 100644 tests/tests/Kconfig
 create mode 100644 tests/tests/Makefile




[Index of Archives]     [Linux Kernel]     [Linux SCSI]     [Linux IDE]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux SCSI]

  Powered by Linux