All of lore.kernel.org
 help / color / mirror / Atom feed
* "No I/O performed by <engine>" reporting bug?
@ 2018-03-23 16:08 Kris Davis
  2018-03-23 21:45 ` Sitsofe Wheeler
  0 siblings, 1 reply; 12+ messages in thread
From: Kris Davis @ 2018-03-23 16:08 UTC (permalink / raw)
  To: fio; +Cc: Itay Ben Yaacov

In fio version 2.20 a test seems to have been added to backend.c which "may" falsely report that no I/O has occurred.
Currently, at line 1856 of backend.c there is the following test block, which doesn't appear to exist in versions prior to 2.20, unless the equivalent resided elsewhere.

	/*
	 * If td ended up with no I/O when it should have had,
	 * then something went wrong unless FIO_NOIO or FIO_DISKLESSIO.
	 * (Are we not missing other flags that can be ignored ?)
	 */
	if ((td->o.size || td->o.io_size) && !ddir_rw_sum(bytes_done) &&
	    !did_some_io && !td->o.create_only &&
	    !(td_ioengine_flagged(td, FIO_NOIO) ||
	      td_ioengine_flagged(td, FIO_DISKLESSIO)))
		log_err("%s: No I/O performed by %s, "
			 "perhaps try --debug=io option for details?\n",
			 td->o.name, td->io_ops->name);


In the following fio test, the error message is logged, even though it appears that everything has run ok (fio built from main below, but results appear to be the same with at least fio version 2.21)
(It's also interesting to note that the estimated "eta" is also grossly inaccurate [captured while running below] - but that is a different issue I think).
You can see the " Random-read-4K-QD1: No I/O performed by libaio, perhaps try --debug=io option for details?" error message below, which "appears" to be false.

    $ fio --ioengine=libaio --loops=32 --direct=1 --numjobs=1--norandommap --randrepeat=0 --size=16GB --filename=/dev/sdb --name=Random-read-4K-QD1 --rw=randread --bs=4K --iodepth=1 --number_ios=8192
    Random-read-4K-QD1: (g=0): rw=randread, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=1
    fio-3.5-60-g69c5
    Starting 1 process
    Jobs: 1 (f=1): [r(1)][0.2%][r=30.9MiB/s,w=0KiB/s][r=7898,w=0 IOPS][eta 04h:45m:35s]

    Random-read-4K-QD1: No I/O performed by libaio, perhaps try --debug=io option for details?

    Random-read-4K-QD1: (groupid=0, jobs=1): err= 0: pid=21471: Fri Mar 23 10:49:12 2018
       read: IOPS=7844, BW=30.6MiB/s (32.1MB/s)(1024MiB/33418msec)
        slat (nsec): min=4369, max=29947, avg=4781.26, stdev=279.14
        clat (usec): min=28, max=7778, avg=121.24, stdev=91.57
         lat (usec): min=36, max=7783, avg=126.18, stdev=91.57
        clat percentiles (usec):
         |  1.00th=[   32],  5.00th=[   33], 10.00th=[  116], 20.00th=[  117],
         | 30.00th=[  118], 40.00th=[  120], 50.00th=[  121], 60.00th=[  122],
         | 70.00th=[  133], 80.00th=[  135], 90.00th=[  137], 95.00th=[  139],
         | 99.00th=[  141], 99.50th=[  141], 99.90th=[ 1336], 99.95th=[ 2868],
         | 99.99th=[ 2966]
       bw (  KiB/s): min=24424, max=32624, per=100.00%, avg=31379.52, stdev=1196.81, samples=66
       iops        : min= 6106, max= 8156, avg=7844.88, stdev=299.20, samples=66
      lat (usec)   : 50=6.68%, 100=0.09%, 250=93.03%, 500=0.08%, 750=0.02%
      lat (usec)   : 1000=0.01%
      lat (msec)   : 2=0.01%, 4=0.09%, 10=0.01%
      cpu          : usr=3.20%, sys=4.90%, ctx=262146, majf=0, minf=206
      IO depths    : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
         submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
         complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
         issued rwts: total=262144,0,0,0 short=0,0,0,0 dropped=0,0,0,0
         latency   : target=0, window=0, percentile=100.00%, depth=1

    Run status group 0 (all jobs):
       READ: bw=30.6MiB/s (32.1MB/s), 30.6MiB/s-30.6MiB/s (32.1MB/s-32.1MB/s), io=1024MiB (1074MB), run=33418-33418msec

    Disk stats (read/write):
      sdb: ios=261972/0, merge=0/0, ticks=31245/0, in_queue=31188, util=93.13%


I added a print message which showed that both ddir_rw_sum(bytes_done) and did_some_io values were zero at that point in the code.
I didn't try to dig into the operation of the bytes_done and did_some_io values further, yet.


Also, I noticed that if option "--io_size=32M" was used instead of "number_ios=8192", then the eta appeared to be accurate - so the eta issue does "appear" to be independent - I can open a separate discussion or issue if desired.

Thanks

Kris Davis



^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: "No I/O performed by <engine>" reporting bug?
  2018-03-23 16:08 "No I/O performed by <engine>" reporting bug? Kris Davis
@ 2018-03-23 21:45 ` Sitsofe Wheeler
  2018-03-24 17:32   ` Sitsofe Wheeler
  0 siblings, 1 reply; 12+ messages in thread
From: Sitsofe Wheeler @ 2018-03-23 21:45 UTC (permalink / raw)
  To: Kris Davis; +Cc: fio, Itay Ben Yaacov

On 23 March 2018 at 16:08, Kris Davis <Kris.Davis@wdc.com> wrote:
> In fio version 2.20 a test seems to have been added to backend.c which "may" falsely report that no I/O has occurred.
> Currently, at line 1856 of backend.c there is the following test block, which doesn't appear to exist in versions prior to 2.20, unless the equivalent resided elsewhere.
>
>         /*
>          * If td ended up with no I/O when it should have had,
>          * then something went wrong unless FIO_NOIO or FIO_DISKLESSIO.
>          * (Are we not missing other flags that can be ignored ?)
>          */
>         if ((td->o.size || td->o.io_size) && !ddir_rw_sum(bytes_done) &&
>             !did_some_io && !td->o.create_only &&
>             !(td_ioengine_flagged(td, FIO_NOIO) ||
>               td_ioengine_flagged(td, FIO_DISKLESSIO)))
>                 log_err("%s: No I/O performed by %s, "
>                          "perhaps try --debug=io option for details?\n",
>                          td->o.name, td->io_ops->name);
>
>
> In the following fio test, the error message is logged, even though it appears that everything has run ok (fio built from main below, but results appear to be the same with at least fio version 2.21)
> (It's also interesting to note that the estimated "eta" is also grossly inaccurate [captured while running below] - but that is a different issue I think).
> You can see the " Random-read-4K-QD1: No I/O performed by libaio, perhaps try --debug=io option for details?" error message below, which "appears" to be false.
>
>     $ fio --ioengine=libaio --loops=32 --direct=1 --numjobs=1--norandommap --randrepeat=0 --size=16GB --filename=/dev/sdb --name=Random-read-4K-QD1 --rw=randread --bs=4K --iodepth=1 --number_ios=8192
>     Random-read-4K-QD1: (g=0): rw=randread, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=1
>     fio-3.5-60-g69c5
>     Starting 1 process
>     Jobs: 1 (f=1): [r(1)][0.2%][r=30.9MiB/s,w=0KiB/s][r=7898,w=0 IOPS][eta 04h:45m:35s]
>
>     Random-read-4K-QD1: No I/O performed by libaio, perhaps try --debug=io option for details?
>
[...]
>
> I added a print message which showed that both ddir_rw_sum(bytes_done) and did_some_io values were zero at that point in the code.
> I didn't try to dig into the operation of the bytes_done and did_some_io values further, yet.
>
>
> Also, I noticed that if option "--io_size=32M" was used instead of "number_ios=8192", then the eta appeared to be accurate - so the eta issue does "appear" to be independent - I can open a separate discussion or issue if desired.

Just quickly looking I think this is down to number_ios=<val> being
paired with loops=32 but I haven't had time to dig further...

-- 
Sitsofe | http://sucs.org/~sits/

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: "No I/O performed by <engine>" reporting bug?
  2018-03-23 21:45 ` Sitsofe Wheeler
@ 2018-03-24 17:32   ` Sitsofe Wheeler
  2018-03-26 15:49     ` Kris Davis
  0 siblings, 1 reply; 12+ messages in thread
From: Sitsofe Wheeler @ 2018-03-24 17:32 UTC (permalink / raw)
  To: Kris Davis; +Cc: fio, Itay Ben Yaacov

On 23 March 2018 at 21:45, Sitsofe Wheeler <sitsofe@gmail.com> wrote:
> On 23 March 2018 at 16:08, Kris Davis <Kris.Davis@wdc.com> wrote:
>> In fio version 2.20 a test seems to have been added to backend.c which "may" falsely report that no I/O has occurred.
[...]
>> In the following fio test, the error message is logged, even though it appears that everything has run ok (fio built from main below, but results appear to be the same with at least fio version 2.21)
>> (It's also interesting to note that the estimated "eta" is also grossly inaccurate [captured while running below] - but that is a different issue I think).

Yeah that's going to be a separate issue. The thread_eta() in eta.c
doesn't look at the number of I/Os only the guessed total bytes and
how far through fio has progressed through that.

>> You can see the " Random-read-4K-QD1: No I/O performed by libaio, perhaps try --debug=io option for details?" error message below, which "appears" to be false.
>>
>>     $ fio --ioengine=libaio --loops=32 --direct=1 --numjobs=1--norandommap --randrepeat=0 --size=16GB --filename=/dev/sdb --name=Random-read-4K-QD1 --rw=randread --bs=4K --iodepth=1 --number_ios=8192
>>     Random-read-4K-QD1: (g=0): rw=randread, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=1
>>     fio-3.5-60-g69c5
>>     Starting 1 process
>>     Jobs: 1 (f=1): [r(1)][0.2%][r=30.9MiB/s,w=0KiB/s][r=7898,w=0 IOPS][eta 04h:45m:35s]
>>
>>     Random-read-4K-QD1: No I/O performed by libaio, perhaps try --debug=io option for details?
>>
> [...]
>>
>> I added a print message which showed that both ddir_rw_sum(bytes_done) and did_some_io values were zero at that point in the code.
>> I didn't try to dig into the operation of the bytes_done and did_some_io values further, yet.
>>
>>
>> Also, I noticed that if option "--io_size=32M" was used instead of "number_ios=8192", then the eta appeared to be accurate - so the eta issue does "appear" to be independent - I can open a separate discussion or issue if desired.

A separate discussion would be good.

> Just quickly looking I think this is down to number_ios=<val> being
> paired with loops=32 but I haven't had time to dig further...

After getting the wrong end of the stick and wondering if Jens was
trying to make number_ios only account for the current loop's I/O with
https://github.com/axboe/fio/commit/cf8a46a75f38afe07ebf823210f95543999e3116
("Make 'loops' honor full write+verify loops") I think one of the
changes there was just a simple mistake while fixing other areas up.
Can you see if https://github.com/sitsofe/fio/tree/loops_numberios
fixes what you were seeing?

-- 
Sitsofe | http://sucs.org/~sits/

^ permalink raw reply	[flat|nested] 12+ messages in thread

* RE: "No I/O performed by <engine>" reporting bug?
  2018-03-24 17:32   ` Sitsofe Wheeler
@ 2018-03-26 15:49     ` Kris Davis
  2018-03-26 16:01       ` Sitsofe Wheeler
  0 siblings, 1 reply; 12+ messages in thread
From: Kris Davis @ 2018-03-26 15:49 UTC (permalink / raw)
  To: Sitsofe Wheeler; +Cc: fio, Itay Ben Yaacov

Sitsofe, 

Thanks.   I gave it a try and no longer see the error message.   However, it doesn't appear that the loop count is being used any longer when number_ios option is set.  The following runs is less about a second: 

$ fio --ioengine=libaio --loops=32 --direct=1 --numjobs=1 --norandommap --randrepeat=0 --size=16GB --filename=/dev/sdb --name=Random-read-4K-QD1 --rw=randread --bs=4K --iodepth=1 --number_ios=8192
Random-read-4K-QD1: (g=0): rw=randread, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=1
fio-3.5
Starting 1 process
Jobs: 1 (f=1)
Random-read-4K-QD1: (groupid=0, jobs=1): err= 0: pid=31578: Mon Mar 26 10:37:06 2018
   read: IOPS=7433, BW=29.0MiB/s (30.4MB/s)(32.0MiB/1102msec)
    slat (nsec): min=4564, max=43459, avg=6011.65, stdev=662.43
...
Run status group 0 (all jobs):
   READ: bw=29.0MiB/s (30.4MB/s), 29.0MiB/s-29.0MiB/s (30.4MB/s-30.4MB/s), io=32.0MiB (33.6MB), run=1102-1102msec



But, if I use io_size=32MB, it does actually run for about 30 seconds as expected:

$  fio --ioengine=libaio --loops=32 --direct=1 --numjobs=1 --norandommap --randrepeat=0 --size=16GB --filename=/dev/sdb --name=Random-read-4K-QD1 --rw=randread --bs=4K --iodepth=1 --io_size=32MB
Random-read-4K-QD1: (g=0): rw=randread, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=1
fio-3.5
Starting 1 process
Random-read-4K-QD1: No I/O performed by libaio, perhaps try --debug=io option for details?

Random-read-4K-QD1: (groupid=0, jobs=1): err= 0: pid=31998: Mon Mar 26 10:46:45 2018
   read: IOPS=7790, BW=30.4MiB/s (31.9MB/s)(1024MiB/33650msec)
    slat (nsec): min=4443, max=43457, avg=4831.99, stdev=286.39
...
Run status group 0 (all jobs):
   READ: bw=30.4MiB/s (31.9MB/s), 30.4MiB/s-30.4MiB/s (31.9MB/s-31.9MB/s), io=1024MiB (1074MB), run=33650-33650msec

Disk stats (read/write):
  sdb: ios=262130/0, merge=0/0, ticks=31453/0, in_queue=31396, util=93.06%


Thanks again.

Kris Davis

-----Original Message-----
From: Sitsofe Wheeler [mailto:sitsofe@gmail.com] 
Sent: Saturday, March 24, 2018 12:33 PM
To: Kris Davis <Kris.Davis@wdc.com>
Cc: fio@vger.kernel.org; Itay Ben Yaacov <Itay.BenYaacov@wdc.com>
Subject: Re: "No I/O performed by <engine>" reporting bug?

On 23 March 2018 at 21:45, Sitsofe Wheeler <sitsofe@gmail.com> wrote:
> On 23 March 2018 at 16:08, Kris Davis <Kris.Davis@wdc.com> wrote:
>> In fio version 2.20 a test seems to have been added to backend.c which "may" falsely report that no I/O has occurred.
[...]
>> In the following fio test, the error message is logged, even though 
>> it appears that everything has run ok (fio built from main below, but results appear to be the same with at least fio version 2.21) (It's also interesting to note that the estimated "eta" is also grossly inaccurate [captured while running below] - but that is a different issue I think).

Yeah that's going to be a separate issue. The thread_eta() in eta.c doesn't look at the number of I/Os only the guessed total bytes and how far through fio has progressed through that.

>> You can see the " Random-read-4K-QD1: No I/O performed by libaio, perhaps try --debug=io option for details?" error message below, which "appears" to be false.
>>
>>     $ fio --ioengine=libaio --loops=32 --direct=1 --numjobs=1--norandommap --randrepeat=0 --size=16GB --filename=/dev/sdb --name=Random-read-4K-QD1 --rw=randread --bs=4K --iodepth=1 --number_ios=8192
>>     Random-read-4K-QD1: (g=0): rw=randread, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=1
>>     fio-3.5-60-g69c5
>>     Starting 1 process
>>     Jobs: 1 (f=1): [r(1)][0.2%][r=30.9MiB/s,w=0KiB/s][r=7898,w=0 
>> IOPS][eta 04h:45m:35s]
>>
>>     Random-read-4K-QD1: No I/O performed by libaio, perhaps try --debug=io option for details?
>>
> [...]
>>
>> I added a print message which showed that both ddir_rw_sum(bytes_done) and did_some_io values were zero at that point in the code.
>> I didn't try to dig into the operation of the bytes_done and did_some_io values further, yet.
>>
>>
>> Also, I noticed that if option "--io_size=32M" was used instead of "number_ios=8192", then the eta appeared to be accurate - so the eta issue does "appear" to be independent - I can open a separate discussion or issue if desired.

A separate discussion would be good.

> Just quickly looking I think this is down to number_ios=<val> being 
> paired with loops=32 but I haven't had time to dig further...

After getting the wrong end of the stick and wondering if Jens was trying to make number_ios only account for the current loop's I/O with
https://github.com/axboe/fio/commit/cf8a46a75f38afe07ebf823210f95543999e3116
("Make 'loops' honor full write+verify loops") I think one of the changes there was just a simple mistake while fixing other areas up.
Can you see if https://github.com/sitsofe/fio/tree/loops_numberios
fixes what you were seeing?

--
Sitsofe | http://sucs.org/~sits/

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: "No I/O performed by <engine>" reporting bug?
  2018-03-26 15:49     ` Kris Davis
@ 2018-03-26 16:01       ` Sitsofe Wheeler
  2018-03-26 16:14         ` Kris Davis
  0 siblings, 1 reply; 12+ messages in thread
From: Sitsofe Wheeler @ 2018-03-26 16:01 UTC (permalink / raw)
  To: Kris Davis; +Cc: fio, Itay Ben Yaacov

Hi Kris,

On 26 March 2018 at 16:49, Kris Davis <Kris.Davis@wdc.com> wrote:
>
> Thanks.   I gave it a try and no longer see the error message.   However, it doesn't appear that the loop count is being used any longer when number_ios option is set.  The following runs is less about a second:
>
> $ fio --ioengine=libaio --loops=32 --direct=1 --numjobs=1 --norandommap --randrepeat=0 --size=16GB --filename=/dev/sdb --name=Random-read-4K-QD1 --rw=randread --bs=4K --iodepth=1 --number_ios=8192
> Random-read-4K-QD1: (g=0): rw=randread, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=1
> fio-3.5
> Starting 1 process
> Jobs: 1 (f=1)
> Random-read-4K-QD1: (groupid=0, jobs=1): err= 0: pid=31578: Mon Mar 26 10:37:06 2018
>    read: IOPS=7433, BW=29.0MiB/s (30.4MB/s)(32.0MiB/1102msec)
>     slat (nsec): min=4564, max=43459, avg=6011.65, stdev=662.43
> ...
> Run status group 0 (all jobs):
>    READ: bw=29.0MiB/s (30.4MB/s), 29.0MiB/s-29.0MiB/s (30.4MB/s-30.4MB/s), io=32.0MiB (33.6MB), run=1102-1102msec

Is this a bad thing? I was aiming for that behaviour (for number_ios to
behave per job rather than per loop)...

> But, if I use io_size=32MB, it does actually run for about 30 seconds as expected:
>
> $  fio --ioengine=libaio --loops=32 --direct=1 --numjobs=1 --norandommap --randrepeat=0 --size=16GB --filename=/dev/sdb --name=Random-read-4K-QD1 --rw=randread --bs=4K --iodepth=1 --io_size=32MB
> Random-read-4K-QD1: (g=0): rw=randread, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=1
> fio-3.5
> Starting 1 process
> Random-read-4K-QD1: No I/O performed by libaio, perhaps try --debug=io option for details?

^^^ Have you found another problem here?

> Random-read-4K-QD1: (groupid=0, jobs=1): err= 0: pid=31998: Mon Mar 26 10:46:45 2018
>    read: IOPS=7790, BW=30.4MiB/s (31.9MB/s)(1024MiB/33650msec)
>     slat (nsec): min=4443, max=43457, avg=4831.99, stdev=286.39
> ...
> Run status group 0 (all jobs):
>    READ: bw=30.4MiB/s (31.9MB/s), 30.4MiB/s-30.4MiB/s (31.9MB/s-31.9MB/s), io=1024MiB (1074MB), run=33650-33650msec
>
> Disk stats (read/write):
>   sdb: ios=262130/0, merge=0/0, ticks=31453/0, in_queue=31396, util=93.06%

-- 
Sitsofe | http://sucs.org/~sits/

^ permalink raw reply	[flat|nested] 12+ messages in thread

* RE: "No I/O performed by <engine>" reporting bug?
  2018-03-26 16:01       ` Sitsofe Wheeler
@ 2018-03-26 16:14         ` Kris Davis
  2018-03-26 17:27           ` Sitsofe Wheeler
  0 siblings, 1 reply; 12+ messages in thread
From: Kris Davis @ 2018-03-26 16:14 UTC (permalink / raw)
  To: Sitsofe Wheeler; +Cc: fio, Itay Ben Yaacov

Sitsofe, 

> Is this a bad thing? I was aiming for that behaviour (for number_ios to behave per job rather than per loop)...

Oh, I didn't catch that.  I was assuming that number_ios was analogous to io_size.  That is, indicating what each "loop" would do.  Wouldn't you be changing the current behavior?  My prior test with number_ios and loops was taking about 30 seconds as expected.

Thanks  

Kris Davis 
Western Digital Coporation
Email: kris.davis@wdc.com
Office:: +1-507-322-2376

-----Original Message-----
From: Sitsofe Wheeler [mailto:sitsofe@gmail.com] 
Sent: Monday, March 26, 2018 11:01 AM
To: Kris Davis <Kris.Davis@wdc.com>
Cc: fio@vger.kernel.org; Itay Ben Yaacov <Itay.BenYaacov@wdc.com>
Subject: Re: "No I/O performed by <engine>" reporting bug?

Hi Kris,

On 26 March 2018 at 16:49, Kris Davis <Kris.Davis@wdc.com> wrote:
>
> Thanks.   I gave it a try and no longer see the error message.   However, it doesn't appear that the loop count is being used any longer when number_ios option is set.  The following runs is less about a second:
>
> $ fio --ioengine=libaio --loops=32 --direct=1 --numjobs=1 
> --norandommap --randrepeat=0 --size=16GB --filename=/dev/sdb 
> --name=Random-read-4K-QD1 --rw=randread --bs=4K --iodepth=1 
> --number_ios=8192
> Random-read-4K-QD1: (g=0): rw=randread, bs=(R) 4096B-4096B, (W) 
> 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=1
> fio-3.5
> Starting 1 process
> Jobs: 1 (f=1)
> Random-read-4K-QD1: (groupid=0, jobs=1): err= 0: pid=31578: Mon Mar 26 10:37:06 2018
>    read: IOPS=7433, BW=29.0MiB/s (30.4MB/s)(32.0MiB/1102msec)
>     slat (nsec): min=4564, max=43459, avg=6011.65, stdev=662.43 ...
> Run status group 0 (all jobs):
>    READ: bw=29.0MiB/s (30.4MB/s), 29.0MiB/s-29.0MiB/s 
> (30.4MB/s-30.4MB/s), io=32.0MiB (33.6MB), run=1102-1102msec

Is this a bad thing? I was aiming for that behaviour (for number_ios to behave per job rather than per loop)...

> But, if I use io_size=32MB, it does actually run for about 30 seconds as expected:
>
> $  fio --ioengine=libaio --loops=32 --direct=1 --numjobs=1 
> --norandommap --randrepeat=0 --size=16GB --filename=/dev/sdb 
> --name=Random-read-4K-QD1 --rw=randread --bs=4K --iodepth=1 
> --io_size=32MB
> Random-read-4K-QD1: (g=0): rw=randread, bs=(R) 4096B-4096B, (W) 
> 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=1
> fio-3.5
> Starting 1 process
> Random-read-4K-QD1: No I/O performed by libaio, perhaps try --debug=io option for details?

^^^ Have you found another problem here?

> Random-read-4K-QD1: (groupid=0, jobs=1): err= 0: pid=31998: Mon Mar 26 10:46:45 2018
>    read: IOPS=7790, BW=30.4MiB/s (31.9MB/s)(1024MiB/33650msec)
>     slat (nsec): min=4443, max=43457, avg=4831.99, stdev=286.39 ...
> Run status group 0 (all jobs):
>    READ: bw=30.4MiB/s (31.9MB/s), 30.4MiB/s-30.4MiB/s 
> (31.9MB/s-31.9MB/s), io=1024MiB (1074MB), run=33650-33650msec
>
> Disk stats (read/write):
>   sdb: ios=262130/0, merge=0/0, ticks=31453/0, in_queue=31396, 
> util=93.06%

--
Sitsofe | http://sucs.org/~sits/

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: "No I/O performed by <engine>" reporting bug?
  2018-03-26 16:14         ` Kris Davis
@ 2018-03-26 17:27           ` Sitsofe Wheeler
  2018-03-26 17:40             ` Kris Davis
  0 siblings, 1 reply; 12+ messages in thread
From: Sitsofe Wheeler @ 2018-03-26 17:27 UTC (permalink / raw)
  To: Kris Davis; +Cc: fio, Itay Ben Yaacov

It's unclear that number_ios is supposed to be per loop and it's
actually challenging to get number_ios per loop behaviour in a way
that is consistent and will also work for seperate job verification. I
started down that route originally and then realised verification of
loops where you don't exactly everything is problematic. As it stood
what seemed to be happening was the number_ios were being increased by
total loops but a loop wasn't actually being ended when that loop's
numerios were exceeded. For example, you might have expected a
sequential write with to just keep rewriting the start the of the file
when using number_ios and loops greater than 1 but this was not the
case - it would carry on from where it left off on the second loop
until it reached the end of the file and only wrap then.

Quick question: what are you expecting number_ios coupled with
loops>=2 to do when it's per loop? Bear in mind that unlike io_size,
number_ios is documented as not extending jobs...

On 26 March 2018 at 17:14, Kris Davis <Kris.Davis@wdc.com> wrote:
> Sitsofe,
>
>> Is this a bad thing? I was aiming for that behaviour (for number_ios to behave per job rather than per loop)...
>
> Oh, I didn't catch that.  I was assuming that number_ios was analogous to io_size.  That is, indicating what each "loop" would do.  Wouldn't you be changing the current behavior?  My prior test with number_ios and loops was taking about 30 seconds as expected.
>
> Thanks
>
> Kris Davis
> Western Digital Coporation
> Email: kris.davis@wdc.com
> Office:: +1-507-322-2376
>
> -----Original Message-----
> From: Sitsofe Wheeler [mailto:sitsofe@gmail.com]
> Sent: Monday, March 26, 2018 11:01 AM
> To: Kris Davis <Kris.Davis@wdc.com>
> Cc: fio@vger.kernel.org; Itay Ben Yaacov <Itay.BenYaacov@wdc.com>
> Subject: Re: "No I/O performed by <engine>" reporting bug?
>
> Hi Kris,
>
> On 26 March 2018 at 16:49, Kris Davis <Kris.Davis@wdc.com> wrote:
>>
>> Thanks.   I gave it a try and no longer see the error message.   However, it doesn't appear that the loop count is being used any longer when number_ios option is set.  The following runs is less about a second:
>>
>> $ fio --ioengine=libaio --loops=32 --direct=1 --numjobs=1
>> --norandommap --randrepeat=0 --size=16GB --filename=/dev/sdb
>> --name=Random-read-4K-QD1 --rw=randread --bs=4K --iodepth=1
>> --number_ios=8192
>> Random-read-4K-QD1: (g=0): rw=randread, bs=(R) 4096B-4096B, (W)
>> 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=1
>> fio-3.5
>> Starting 1 process
>> Jobs: 1 (f=1)
>> Random-read-4K-QD1: (groupid=0, jobs=1): err= 0: pid=31578: Mon Mar 26 10:37:06 2018
>>    read: IOPS=7433, BW=29.0MiB/s (30.4MB/s)(32.0MiB/1102msec)
>>     slat (nsec): min=4564, max=43459, avg=6011.65, stdev=662.43 ...
>> Run status group 0 (all jobs):
>>    READ: bw=29.0MiB/s (30.4MB/s), 29.0MiB/s-29.0MiB/s
>> (30.4MB/s-30.4MB/s), io=32.0MiB (33.6MB), run=1102-1102msec
>
> Is this a bad thing? I was aiming for that behaviour (for number_ios to behave per job rather than per loop)...
>
>> But, if I use io_size=32MB, it does actually run for about 30 seconds as expected:
>>
>> $  fio --ioengine=libaio --loops=32 --direct=1 --numjobs=1
>> --norandommap --randrepeat=0 --size=16GB --filename=/dev/sdb
>> --name=Random-read-4K-QD1 --rw=randread --bs=4K --iodepth=1
>> --io_size=32MB
>> Random-read-4K-QD1: (g=0): rw=randread, bs=(R) 4096B-4096B, (W)
>> 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=1
>> fio-3.5
>> Starting 1 process
>> Random-read-4K-QD1: No I/O performed by libaio, perhaps try --debug=io option for details?
>
> ^^^ Have you found another problem here?
>
>> Random-read-4K-QD1: (groupid=0, jobs=1): err= 0: pid=31998: Mon Mar 26 10:46:45 2018
>>    read: IOPS=7790, BW=30.4MiB/s (31.9MB/s)(1024MiB/33650msec)
>>     slat (nsec): min=4443, max=43457, avg=4831.99, stdev=286.39 ...
>> Run status group 0 (all jobs):
>>    READ: bw=30.4MiB/s (31.9MB/s), 30.4MiB/s-30.4MiB/s
>> (31.9MB/s-31.9MB/s), io=1024MiB (1074MB), run=33650-33650msec
>>
>> Disk stats (read/write):
>>   sdb: ios=262130/0, merge=0/0, ticks=31453/0, in_queue=31396,
>> util=93.06%
>
> --
> Sitsofe | http://sucs.org/~sits/



-- 
Sitsofe | http://sucs.org/~sits/

^ permalink raw reply	[flat|nested] 12+ messages in thread

* RE: "No I/O performed by <engine>" reporting bug?
  2018-03-26 17:27           ` Sitsofe Wheeler
@ 2018-03-26 17:40             ` Kris Davis
  2018-03-26 19:51               ` Sitsofe Wheeler
  0 siblings, 1 reply; 12+ messages in thread
From: Kris Davis @ 2018-03-26 17:40 UTC (permalink / raw)
  To: Sitsofe Wheeler; +Cc: fio, Itay Ben Yaacov

Sitsofe, 

I guess I'm was expecting that loops just means to repeat whatever the job was doing previously that number of times.  I guess that what I conclude from the "loops" description: "Run the specified number of iterations of this job. Used to repeat the same workload a given number of times. Defaults to 1."  

I was expecting that each loop would start sequential operations back at 0 or the offset, and redo any start_delay or ramp_time each time.  If that is not the case, I'm either missing something in the doc, or it could probably use further clarification.  If io_size is used rather than number_ios - does the starting LBA get reset after each loop?

I don't really have any strong opinion on how number_ios works (we can use io_size instead), it just seems like it was working differently before, and otherwise could just use further clarification. Do you know of any other "quantity" type of options would operate independent of the loops option?  (I think this is the first time I've seen loop used).

Thanks

Kris Davis

-----Original Message-----
From: Sitsofe Wheeler [mailto:sitsofe@gmail.com] 
Sent: Monday, March 26, 2018 12:27 PM
To: Kris Davis <Kris.Davis@wdc.com>
Cc: fio@vger.kernel.org; Itay Ben Yaacov <Itay.BenYaacov@wdc.com>
Subject: Re: "No I/O performed by <engine>" reporting bug?

It's unclear that number_ios is supposed to be per loop and it's actually challenging to get number_ios per loop behaviour in a way that is consistent and will also work for seperate job verification. I started down that route originally and then realised verification of loops where you don't exactly everything is problematic. As it stood what seemed to be happening was the number_ios were being increased by total loops but a loop wasn't actually being ended when that loop's numerios were exceeded. For example, you might have expected a sequential write with to just keep rewriting the start the of the file when using number_ios and loops greater than 1 but this was not the case - it would carry on from where it left off on the second loop until it reached the end of the file and only wrap then.

Quick question: what are you expecting number_ios coupled with
loops>=2 to do when it's per loop? Bear in mind that unlike io_size,
number_ios is documented as not extending jobs...

On 26 March 2018 at 17:14, Kris Davis <Kris.Davis@wdc.com> wrote:
> Sitsofe,
>
>> Is this a bad thing? I was aiming for that behaviour (for number_ios to behave per job rather than per loop)...
>
> Oh, I didn't catch that.  I was assuming that number_ios was analogous to io_size.  That is, indicating what each "loop" would do.  Wouldn't you be changing the current behavior?  My prior test with number_ios and loops was taking about 30 seconds as expected.
>
> Thanks
>
> Kris Davis
> Western Digital Coporation
> Email: kris.davis@wdc.com
> Office:: +1-507-322-2376
>
> -----Original Message-----
> From: Sitsofe Wheeler [mailto:sitsofe@gmail.com]
> Sent: Monday, March 26, 2018 11:01 AM
> To: Kris Davis <Kris.Davis@wdc.com>
> Cc: fio@vger.kernel.org; Itay Ben Yaacov <Itay.BenYaacov@wdc.com>
> Subject: Re: "No I/O performed by <engine>" reporting bug?
>
> Hi Kris,
>
> On 26 March 2018 at 16:49, Kris Davis <Kris.Davis@wdc.com> wrote:
>>
>> Thanks.   I gave it a try and no longer see the error message.   However, it doesn't appear that the loop count is being used any longer when number_ios option is set.  The following runs is less about a second:
>>
>> $ fio --ioengine=libaio --loops=32 --direct=1 --numjobs=1 
>> --norandommap --randrepeat=0 --size=16GB --filename=/dev/sdb
>> --name=Random-read-4K-QD1 --rw=randread --bs=4K --iodepth=1
>> --number_ios=8192
>> Random-read-4K-QD1: (g=0): rw=randread, bs=(R) 4096B-4096B, (W) 
>> 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=1
>> fio-3.5
>> Starting 1 process
>> Jobs: 1 (f=1)
>> Random-read-4K-QD1: (groupid=0, jobs=1): err= 0: pid=31578: Mon Mar 26 10:37:06 2018
>>    read: IOPS=7433, BW=29.0MiB/s (30.4MB/s)(32.0MiB/1102msec)
>>     slat (nsec): min=4564, max=43459, avg=6011.65, stdev=662.43 ...
>> Run status group 0 (all jobs):
>>    READ: bw=29.0MiB/s (30.4MB/s), 29.0MiB/s-29.0MiB/s 
>> (30.4MB/s-30.4MB/s), io=32.0MiB (33.6MB), run=1102-1102msec
>
> Is this a bad thing? I was aiming for that behaviour (for number_ios to behave per job rather than per loop)...
>
>> But, if I use io_size=32MB, it does actually run for about 30 seconds as expected:
>>
>> $  fio --ioengine=libaio --loops=32 --direct=1 --numjobs=1 
>> --norandommap --randrepeat=0 --size=16GB --filename=/dev/sdb
>> --name=Random-read-4K-QD1 --rw=randread --bs=4K --iodepth=1 
>> --io_size=32MB
>> Random-read-4K-QD1: (g=0): rw=randread, bs=(R) 4096B-4096B, (W) 
>> 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=1
>> fio-3.5
>> Starting 1 process
>> Random-read-4K-QD1: No I/O performed by libaio, perhaps try --debug=io option for details?
>
> ^^^ Have you found another problem here?
>
>> Random-read-4K-QD1: (groupid=0, jobs=1): err= 0: pid=31998: Mon Mar 26 10:46:45 2018
>>    read: IOPS=7790, BW=30.4MiB/s (31.9MB/s)(1024MiB/33650msec)
>>     slat (nsec): min=4443, max=43457, avg=4831.99, stdev=286.39 ...
>> Run status group 0 (all jobs):
>>    READ: bw=30.4MiB/s (31.9MB/s), 30.4MiB/s-30.4MiB/s 
>> (31.9MB/s-31.9MB/s), io=1024MiB (1074MB), run=33650-33650msec
>>
>> Disk stats (read/write):
>>   sdb: ios=262130/0, merge=0/0, ticks=31453/0, in_queue=31396, 
>> util=93.06%
>
> --
> Sitsofe | http://sucs.org/~sits/



--
Sitsofe | http://sucs.org/~sits/

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: "No I/O performed by <engine>" reporting bug?
  2018-03-26 17:40             ` Kris Davis
@ 2018-03-26 19:51               ` Sitsofe Wheeler
  2018-03-27 15:23                 ` Kris Davis
  0 siblings, 1 reply; 12+ messages in thread
From: Sitsofe Wheeler @ 2018-03-26 19:51 UTC (permalink / raw)
  To: Kris Davis; +Cc: fio, Itay Ben Yaacov

On 26 March 2018 at 18:40, Kris Davis <Kris.Davis@wdc.com> wrote:
>
> I guess I'm was expecting that loops just means to repeat whatever the job was doing previously that number of times.  I guess that what I conclude from the "loops" description: "Run the specified number of iterations of this job. Used to repeat the same workload a given number of times. Defaults to 1."
>
> I was expecting that each loop would start sequential operations back at 0 or the offset, and redo any start_delay or ramp_time each time.  If that is not the case, I'm

loops looks like a way to get a job to wrap I/O around to beginning it
when it gets to the end of the file. Certain operations do happen when
that wraparound/restart occurs (e.g. resetting the map of regions
used/offset being reset on sequential I/O) but not every job option is
impacted (i.e. start_delay and ramp_time will only happen once even
when loops>=2).

> either missing something in the doc, or it could probably use further clarification.  If io_size is used rather than number_ios - does the starting LBA get reset after each loop?

Looking at some examples I see this:

$ ./fio --name=test-loops --filename=/tmp/fio.tmp --size=4 --bs=1
--loops=2 --io_size=3 --debug=io | grep 'complete:\|cache'
io       7649  declare unneeded cache /tmp/fio.tmp: 0/4
io       7649  complete: io_u 0xb78500: off=0x0,len=0x1,ddir=0,file=/tmp/fio.tmp
io       7649  complete: io_u 0xb78500: off=0x1,len=0x1,ddir=0,file=/tmp/fio.tmp
io       7649  complete: io_u 0xb78500: off=0x2,len=0x1,ddir=0,file=/tmp/fio.tmp
io       7649  complete: io_u 0xb78500: off=0x3,len=0x1,ddir=0,file=/tmp/fio.tmp
io       7649  declare unneeded cache /tmp/fio.tmp: 0/4
io       7649  complete: io_u 0xb78500: off=0x0,len=0x1,ddir=0,file=/tmp/fio.tmp
io       7649  complete: io_u 0xb78500: off=0x1,len=0x1,ddir=0,file=/tmp/fio.tmp

$ $ ./fio --name=test-loops --filename=/tmp/fio.tmp --size=4 --bs=1
--loops=3 --number_ios=2 --debug=io | grep 'complete:\|cache'
io       7657  declare unneeded cache /tmp/fio.tmp: 0/4
io       7657  complete: io_u 0x2310500:
off=0x0,len=0x1,ddir=0,file=/tmp/fio.tmp
io       7657  complete: io_u 0x2310500:
off=0x1,len=0x1,ddir=0,file=/tmp/fio.tmp
io       7657  complete: io_u 0x2310500:
off=0x2,len=0x1,ddir=0,file=/tmp/fio.tmp
io       7657  complete: io_u 0x2310500:
off=0x3,len=0x1,ddir=0,file=/tmp/fio.tmp
io       7657  declare unneeded cache /tmp/fio.tmp: 0/4
io       7657  complete: io_u 0x2310500:
off=0x0,len=0x1,ddir=0,file=/tmp/fio.tmp
io       7657  complete: io_u 0x2310500:
off=0x1,len=0x1,ddir=0,file=/tmp/fio.tmp

Basically a loop only ends when I/O gets to the end of the file (and
we see the cache being declared unneeded when the loop starts) but the
interaction with number_ios/io_size seems limited to just multiplying
them by loops.

Jens: originally number_ios/io_size would just end the entire job
early regardless of what loop you were on but that seems to have
changed since cf8a46a75f38afe07ebf823210f95543999e3116 ("Make 'loops'
honor full write+verify loops"). Is the intent for number_ios/io_size
to be invariant of loops or to be per loop? What does it mean for a
loop if io_size is bigger than the size of the file?

> I don't really have any strong opinion on how number_ios works (we can use io_size instead), it just seems like it was working differently before, and otherwise could just use further clarification. Do you know of any other "quantity" type of options would operate independent of the loops option?  (I think this is the first time I've seen loop used).

runtime is the other one (we've covered io_size, number_ios and loops)
and that's loop invariant. In fact runtime with time_based essentially
disables looking at the loop counter.

-- 
Sitsofe | http://sucs.org/~sits/

^ permalink raw reply	[flat|nested] 12+ messages in thread

* RE: "No I/O performed by <engine>" reporting bug?
  2018-03-26 19:51               ` Sitsofe Wheeler
@ 2018-03-27 15:23                 ` Kris Davis
  2018-03-27 16:48                   ` Sitsofe Wheeler
  2018-03-27 16:56                   ` Sitsofe Wheeler
  0 siblings, 2 replies; 12+ messages in thread
From: Kris Davis @ 2018-03-27 15:23 UTC (permalink / raw)
  To: Sitsofe Wheeler; +Cc: fio, Itay Ben Yaacov

Sitsofe, 

I'm wondering if I've completely misunderstood the meaning of "looping".  I was thinking it basically meant to "repeat" the job specification a number of times, but from your description of the impacts, that appears to be wrong.   

Looking at other verbiage in the doc, "loops" say to "repeat same workload a given number of times".  Under time_based, it says "it will simply loop over the same workload as many times as runtime allows".    I'm wondering if the word 'loop' is really means the same thing in these two descriptions.  If nothing is really "reset" between loop iterations, then it seems to me that these two uses of 'loop' mean the same thing. 

Sorry if I'm missing the point, but if the "loops" option really doesn't effect other aspects like the runtime, ramp_time or resetting LBAs and such, I'm confused when "loops" would be used - what does it accomplish that isn't available through other options?

Thanks

Kris Davis

-----Original Message-----
From: Sitsofe Wheeler [mailto:sitsofe@gmail.com] 
Sent: Monday, March 26, 2018 2:52 PM
To: Kris Davis <Kris.Davis@wdc.com>
Cc: fio@vger.kernel.org; Itay Ben Yaacov <Itay.BenYaacov@wdc.com>
Subject: Re: "No I/O performed by <engine>" reporting bug?

On 26 March 2018 at 18:40, Kris Davis <Kris.Davis@wdc.com> wrote:
>
> I guess I'm was expecting that loops just means to repeat whatever the job was doing previously that number of times.  I guess that what I conclude from the "loops" description: "Run the specified number of iterations of this job. Used to repeat the same workload a given number of times. Defaults to 1."
>
> I was expecting that each loop would start sequential operations back 
> at 0 or the offset, and redo any start_delay or ramp_time each time.  
> If that is not the case, I'm

loops looks like a way to get a job to wrap I/O around to beginning it when it gets to the end of the file. Certain operations do happen when that wraparound/restart occurs (e.g. resetting the map of regions used/offset being reset on sequential I/O) but not every job option is impacted (i.e. start_delay and ramp_time will only happen once even when loops>=2).

> either missing something in the doc, or it could probably use further clarification.  If io_size is used rather than number_ios - does the starting LBA get reset after each loop?

Looking at some examples I see this:

$ ./fio --name=test-loops --filename=/tmp/fio.tmp --size=4 --bs=1
--loops=2 --io_size=3 --debug=io | grep 'complete:\|cache'
io       7649  declare unneeded cache /tmp/fio.tmp: 0/4
io       7649  complete: io_u 0xb78500: off=0x0,len=0x1,ddir=0,file=/tmp/fio.tmp
io       7649  complete: io_u 0xb78500: off=0x1,len=0x1,ddir=0,file=/tmp/fio.tmp
io       7649  complete: io_u 0xb78500: off=0x2,len=0x1,ddir=0,file=/tmp/fio.tmp
io       7649  complete: io_u 0xb78500: off=0x3,len=0x1,ddir=0,file=/tmp/fio.tmp
io       7649  declare unneeded cache /tmp/fio.tmp: 0/4
io       7649  complete: io_u 0xb78500: off=0x0,len=0x1,ddir=0,file=/tmp/fio.tmp
io       7649  complete: io_u 0xb78500: off=0x1,len=0x1,ddir=0,file=/tmp/fio.tmp

$ $ ./fio --name=test-loops --filename=/tmp/fio.tmp --size=4 --bs=1
--loops=3 --number_ios=2 --debug=io | grep 'complete:\|cache'
io       7657  declare unneeded cache /tmp/fio.tmp: 0/4
io       7657  complete: io_u 0x2310500:
off=0x0,len=0x1,ddir=0,file=/tmp/fio.tmp
io       7657  complete: io_u 0x2310500:
off=0x1,len=0x1,ddir=0,file=/tmp/fio.tmp
io       7657  complete: io_u 0x2310500:
off=0x2,len=0x1,ddir=0,file=/tmp/fio.tmp
io       7657  complete: io_u 0x2310500:
off=0x3,len=0x1,ddir=0,file=/tmp/fio.tmp
io       7657  declare unneeded cache /tmp/fio.tmp: 0/4
io       7657  complete: io_u 0x2310500:
off=0x0,len=0x1,ddir=0,file=/tmp/fio.tmp
io       7657  complete: io_u 0x2310500:
off=0x1,len=0x1,ddir=0,file=/tmp/fio.tmp

Basically a loop only ends when I/O gets to the end of the file (and we see the cache being declared unneeded when the loop starts) but the interaction with number_ios/io_size seems limited to just multiplying them by loops.

Jens: originally number_ios/io_size would just end the entire job early regardless of what loop you were on but that seems to have changed since cf8a46a75f38afe07ebf823210f95543999e3116 ("Make 'loops'
honor full write+verify loops"). Is the intent for number_ios/io_size to be invariant of loops or to be per loop? What does it mean for a loop if io_size is bigger than the size of the file?

> I don't really have any strong opinion on how number_ios works (we can use io_size instead), it just seems like it was working differently before, and otherwise could just use further clarification. Do you know of any other "quantity" type of options would operate independent of the loops option?  (I think this is the first time I've seen loop used).

runtime is the other one (we've covered io_size, number_ios and loops) and that's loop invariant. In fact runtime with time_based essentially disables looking at the loop counter.

--
Sitsofe | http://sucs.org/~sits/

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: "No I/O performed by <engine>" reporting bug?
  2018-03-27 15:23                 ` Kris Davis
@ 2018-03-27 16:48                   ` Sitsofe Wheeler
  2018-03-27 16:56                   ` Sitsofe Wheeler
  1 sibling, 0 replies; 12+ messages in thread
From: Sitsofe Wheeler @ 2018-03-27 16:48 UTC (permalink / raw)
  To: Jens Axboe; +Cc: fio, Itay Ben Yaacov, Kris Davis

(CCing Jens)

On 27 March 2018 at 16:23, Kris Davis <Kris.Davis@wdc.com> wrote:
> Sitsofe,
>
> I'm wondering if I've completely misunderstood the meaning of "looping".  I was thinking it basically meant to "repeat" the job specification a number of times, but from your description of the impacts, that appears to be wrong.
>
> Looking at other verbiage in the doc, "loops" say to "repeat same workload a given number of times".  Under time_based, it says "it will simply loop over the same workload as many times as runtime allows".    I'm wondering if the word 'loop' is really means the same thing in these two descriptions.  If nothing is really "reset" between loop iterations, then it seems to me that these two uses of 'loop' mean the same thing.
>
> Sorry if I'm missing the point, but if the "loops" option really doesn't effect other aspects like the runtime, ramp_time or resetting LBAs and such, I'm confused when "loops" would be used - what does it accomplish that isn't available through other options?
>
> Thanks
>
> Kris Davis
>
> -----Original Message-----
> From: Sitsofe Wheeler [mailto:sitsofe@gmail.com]
> Sent: Monday, March 26, 2018 2:52 PM
> To: Kris Davis <Kris.Davis@wdc.com>
> Cc: fio@vger.kernel.org; Itay Ben Yaacov <Itay.BenYaacov@wdc.com>
> Subject: Re: "No I/O performed by <engine>" reporting bug?
>
> On 26 March 2018 at 18:40, Kris Davis <Kris.Davis@wdc.com> wrote:
>>
>> I guess I'm was expecting that loops just means to repeat whatever the job was doing previously that number of times.  I guess that what I conclude from the "loops" description: "Run the specified number of iterations of this job. Used to repeat the same workload a given number of times. Defaults to 1."
>>
>> I was expecting that each loop would start sequential operations back
>> at 0 or the offset, and redo any start_delay or ramp_time each time.
>> If that is not the case, I'm
>
> loops looks like a way to get a job to wrap I/O around to beginning it when it gets to the end of the file. Certain operations do happen when that wraparound/restart occurs (e.g. resetting the map of regions used/offset being reset on sequential I/O) but not every job option is impacted (i.e. start_delay and ramp_time will only happen once even when loops>=2).
>
>> either missing something in the doc, or it could probably use further clarification.  If io_size is used rather than number_ios - does the starting LBA get reset after each loop?
>
> Looking at some examples I see this:
>
> $ ./fio --name=test-loops --filename=/tmp/fio.tmp --size=4 --bs=1
> --loops=2 --io_size=3 --debug=io | grep 'complete:\|cache'
> io       7649  declare unneeded cache /tmp/fio.tmp: 0/4
> io       7649  complete: io_u 0xb78500: off=0x0,len=0x1,ddir=0,file=/tmp/fio.tmp
> io       7649  complete: io_u 0xb78500: off=0x1,len=0x1,ddir=0,file=/tmp/fio.tmp
> io       7649  complete: io_u 0xb78500: off=0x2,len=0x1,ddir=0,file=/tmp/fio.tmp
> io       7649  complete: io_u 0xb78500: off=0x3,len=0x1,ddir=0,file=/tmp/fio.tmp
> io       7649  declare unneeded cache /tmp/fio.tmp: 0/4
> io       7649  complete: io_u 0xb78500: off=0x0,len=0x1,ddir=0,file=/tmp/fio.tmp
> io       7649  complete: io_u 0xb78500: off=0x1,len=0x1,ddir=0,file=/tmp/fio.tmp
>
> $ $ ./fio --name=test-loops --filename=/tmp/fio.tmp --size=4 --bs=1
> --loops=3 --number_ios=2 --debug=io | grep 'complete:\|cache'
> io       7657  declare unneeded cache /tmp/fio.tmp: 0/4
> io       7657  complete: io_u 0x2310500:
> off=0x0,len=0x1,ddir=0,file=/tmp/fio.tmp
> io       7657  complete: io_u 0x2310500:
> off=0x1,len=0x1,ddir=0,file=/tmp/fio.tmp
> io       7657  complete: io_u 0x2310500:
> off=0x2,len=0x1,ddir=0,file=/tmp/fio.tmp
> io       7657  complete: io_u 0x2310500:
> off=0x3,len=0x1,ddir=0,file=/tmp/fio.tmp
> io       7657  declare unneeded cache /tmp/fio.tmp: 0/4
> io       7657  complete: io_u 0x2310500:
> off=0x0,len=0x1,ddir=0,file=/tmp/fio.tmp
> io       7657  complete: io_u 0x2310500:
> off=0x1,len=0x1,ddir=0,file=/tmp/fio.tmp
>
> Basically a loop only ends when I/O gets to the end of the file (and we see the cache being declared unneeded when the loop starts) but the interaction with number_ios/io_size seems limited to just multiplying them by loops.
>
> Jens: originally number_ios/io_size would just end the entire job early regardless of what loop you were on but that seems to have changed since cf8a46a75f38afe07ebf823210f95543999e3116 ("Make 'loops'
> honor full write+verify loops"). Is the intent for number_ios/io_size to be invariant of loops or to be per loop? What does it mean for a loop if io_size is bigger than the size of the file?
>
>> I don't really have any strong opinion on how number_ios works (we can use io_size instead), it just seems like it was working differently before, and otherwise could just use further clarification. Do you know of any other "quantity" type of options would operate independent of the loops option?  (I think this is the first time I've seen loop used).
>
> runtime is the other one (we've covered io_size, number_ios and loops) and that's loop invariant. In fact runtime with time_based essentially disables looking at the loop counter.


-- 
Sitsofe | http://sucs.org/~sits/


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: "No I/O performed by <engine>" reporting bug?
  2018-03-27 15:23                 ` Kris Davis
  2018-03-27 16:48                   ` Sitsofe Wheeler
@ 2018-03-27 16:56                   ` Sitsofe Wheeler
  1 sibling, 0 replies; 12+ messages in thread
From: Sitsofe Wheeler @ 2018-03-27 16:56 UTC (permalink / raw)
  To: Kris Davis; +Cc: fio, Itay Ben Yaacov

On 27 March 2018 at 16:23, Kris Davis <Kris.Davis@wdc.com> wrote:
>
> I'm wondering if I've completely misunderstood the meaning of "looping".  I was thinking it basically meant to "repeat" the job specification a number of times, but from your description of the impacts, that appears to be wrong.
>
> Looking at other verbiage in the doc, "loops" say to "repeat same workload a given number of times".  Under time_based, it says "it will simply loop over the same workload as many times as runtime allows".    I'm wondering if the word 'loop' is really means the same thing in these two descriptions.  If nothing is really "reset" between loop iterations, then it seems to me that these two uses of 'loop' mean the same thing.

I'd argue both reset the offset when the end of the file is reached
when you're doing sequential I/O and they reset the areas available to
be used when doing random I/O that is also using a randommap. Certain
specific things can also be set to happen on each loop to (e.g. see
http://fio.readthedocs.io/en/latest/fio_doc.html#cmdoption-arg-unlink-each-loop
). I think verification do_verify verification passes also run after
each write job loop but I'd have to check.

> Sorry if I'm missing the point, but if the "loops" option really doesn't effect other aspects like the runtime, ramp_time or resetting LBAs and such, I'm confused when "loops" would be used - what does it accomplish that isn't available through other options?

It saves some calculation. Imagine I want a run where I write the
entire file twice and I don't know its size then I could use loops=2 .
LBAs are definitely being reset in simple loops jobs...

-- 
Sitsofe | http://sucs.org/~sits/

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2018-03-27 16:57 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-03-23 16:08 "No I/O performed by <engine>" reporting bug? Kris Davis
2018-03-23 21:45 ` Sitsofe Wheeler
2018-03-24 17:32   ` Sitsofe Wheeler
2018-03-26 15:49     ` Kris Davis
2018-03-26 16:01       ` Sitsofe Wheeler
2018-03-26 16:14         ` Kris Davis
2018-03-26 17:27           ` Sitsofe Wheeler
2018-03-26 17:40             ` Kris Davis
2018-03-26 19:51               ` Sitsofe Wheeler
2018-03-27 15:23                 ` Kris Davis
2018-03-27 16:48                   ` Sitsofe Wheeler
2018-03-27 16:56                   ` Sitsofe Wheeler

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.