Creating a mixed read/write workload with fio can be a bit confusing. Assume we want to create a fixed rate workload of 100 IOPS split 70:30 between reads and writes.
Specify the rate directly with rate_iops=<read-rate>,<write-rate> do not try to use rwmixread with rate_iops. For the example above use.
Additionally older versions of fio exhibit problems when using rate_poisson with rate_iops . fio version 3.7 that I was using did not exhibit the problem.
We might try the following and use rwmixread together with rate_iops. This is appealing because we would like to specify a single toatal IOP rate with rate_iops, then manipulate the skew with a single value rwmixread. Unfortunately that’s not how it works.
[global] rw=randrw bs=8k ioengine=libaio direct=1 iodepth=32 [sdb] rwmixread=70 rate_iops=100 filename=/dev/sdb size=20G
Doing the above will actually generate 200 iops with 100 read, and 100 write IOPS. This is because rate_iops=100 is really just shorthand for rate_iops=100,100. Unfortunately rwmixread has no effect at all
To create a specific fixed r/w rate we have to specify the read and write rates explicitly using rate_iops=<read-rate>,<write-rate>.
[global] rw=randrw bs=8k ioengine=libaio direct=1 iodepth=32 [sdb] rate_iops=70,30 filename=/dev/sdb