1*13fa72c6SJim Harris# bdevperf {#bdevperf} 28e5d5b8fSVitaliy Mysak 38e5d5b8fSVitaliy Mysak## Introduction 48e5d5b8fSVitaliy Mysak 5*13fa72c6SJim Harrisbdevperf is an SPDK application used for performance testing 68e5d5b8fSVitaliy Mysakof block devices (bdevs) exposed by the SPDK bdev layer. It is an 78e5d5b8fSVitaliy Mysakalternative to the SPDK bdev fio plugin for benchmarking SPDK bdevs. 8*13fa72c6SJim HarrisIn some cases, bdevperf can provide lower overhead than the fio 9*13fa72c6SJim Harrisplugin, resulting in better performance and efficiency for tests 10*13fa72c6SJim Harrisusing a limited number of CPU cores. 118e5d5b8fSVitaliy Mysak 128e5d5b8fSVitaliy Mysakbdevperf exposes command line interface that allows to specify 138e5d5b8fSVitaliy MysakSPDK framework options as well as testing options. 14*13fa72c6SJim Harrisbdevperf also supports a configuration file format similar 158e5d5b8fSVitaliy Mysakto FIO. It allows user to create jobs parameterized by 168e5d5b8fSVitaliy Mysakfilename, cpumask, blocksize, queuesize, etc. 178e5d5b8fSVitaliy Mysak 188e5d5b8fSVitaliy Mysak## Config file 198e5d5b8fSVitaliy Mysak 20*13fa72c6SJim Harrisbdevperf's config file format is similar to FIO. 218e5d5b8fSVitaliy Mysak 228e5d5b8fSVitaliy MysakBelow is an example config file that uses all available parameters: 238e5d5b8fSVitaliy Mysak 248e5d5b8fSVitaliy Mysak~~~{.ini} 258e5d5b8fSVitaliy Mysak[global] 268e5d5b8fSVitaliy Mysakfilename=Malloc0:Malloc1 278e5d5b8fSVitaliy Mysakbs=1024 288e5d5b8fSVitaliy Mysakrw=randrw 298e5d5b8fSVitaliy Mysakrwmixread=90 308e5d5b8fSVitaliy Mysak 318e5d5b8fSVitaliy Mysak[A] 328e5d5b8fSVitaliy Mysakcpumask=0xff 338e5d5b8fSVitaliy Mysak 348e5d5b8fSVitaliy Mysak[B] 358e5d5b8fSVitaliy Mysakcpumask=[0-128] 368e5d5b8fSVitaliy Mysakfilename=Malloc1 378e5d5b8fSVitaliy Mysak 388e5d5b8fSVitaliy Mysak[global] 398e5d5b8fSVitaliy Mysakfilename=Malloc0 408e5d5b8fSVitaliy Mysakrw=write 418e5d5b8fSVitaliy Mysak 428e5d5b8fSVitaliy Mysak[C] 438e5d5b8fSVitaliy Mysakbs=4096 448e5d5b8fSVitaliy Mysakoffset=1000000 458e5d5b8fSVitaliy Mysaklength=1000000 468e5d5b8fSVitaliy Mysak~~~ 478e5d5b8fSVitaliy Mysak 488e5d5b8fSVitaliy MysakJobs `[A]` `[B]` or `[C]`, inherit default values from `[global]` 498e5d5b8fSVitaliy Mysaksection residing above them. So in the example, job `[A]` inherits 508e5d5b8fSVitaliy Mysak`filename` value and uses both `Malloc0` and `Malloc1` bdevs as targets, 518e5d5b8fSVitaliy Mysakjob `[B]` overrides its `filename` value and uses `Malloc1` and 528e5d5b8fSVitaliy Mysakjob `[C]` inherits value `Malloc0` for its `filename`. 538e5d5b8fSVitaliy Mysak 548e5d5b8fSVitaliy MysakInteraction with CLI arguments is not the same as in FIO however. 558e5d5b8fSVitaliy MysakIf bdevperf receives CLI argument, it overrides values 568e5d5b8fSVitaliy Mysakof corresponding parameter for all `[global]` sections of config file. 578e5d5b8fSVitaliy MysakSo if example config is used, specifying `-q` argument 588e5d5b8fSVitaliy Mysakwill make jobs `[A]` and `[B]` use its value. 598e5d5b8fSVitaliy Mysak 608e5d5b8fSVitaliy MysakBelow is a full list of supported parameters with descriptions. 618e5d5b8fSVitaliy Mysak 628e5d5b8fSVitaliy MysakParam | Default | Description 638e5d5b8fSVitaliy Mysak--------- | ----------------- | ----------- 648e5d5b8fSVitaliy Mysakfilename | | Bdevs to use, separated by ":" 658e5d5b8fSVitaliy Mysakcpumask | Maximum available | CPU mask. Format is defined at @ref cpu_mask 668e5d5b8fSVitaliy Mysakbs | | Block size (io size) 678e5d5b8fSVitaliy Mysakiodepth | | Queue depth 688e5d5b8fSVitaliy Mysakrwmixread | `50` | Percentage of a mixed workload that should be reads 698e5d5b8fSVitaliy Mysakoffset | `0` | Start I/O at the provided offset on the bdev 708e5d5b8fSVitaliy Mysaklength | 100% of bdev size | End I/O at `offset`+`length` on the bdev 718e5d5b8fSVitaliy Mysakrw | | Type of I/O pattern 728e5d5b8fSVitaliy Mysak 738e5d5b8fSVitaliy MysakAvailable rw types: 747c2524b8SMaciej Wawryk 758e5d5b8fSVitaliy Mysak- read 768e5d5b8fSVitaliy Mysak- randread 778e5d5b8fSVitaliy Mysak- write 788e5d5b8fSVitaliy Mysak- randwrite 798e5d5b8fSVitaliy Mysak- verify 808e5d5b8fSVitaliy Mysak- reset 818e5d5b8fSVitaliy Mysak- unmap 828e5d5b8fSVitaliy Mysak- write_zeroes 838e5d5b8fSVitaliy Mysak- flush 848e5d5b8fSVitaliy Mysak- rw 858e5d5b8fSVitaliy Mysak- randrw 86