Re: [PATCH 1/1] backend: number of ios not as expected for trimwrite

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

 



On 9/13/22 10:07 AM, Vincent Fu wrote:
> On 9/13/22 06:45, Ankit Kumar wrote:
>> number_ios should be twice for trimwrite, just like size or
>> io_size. Update the documentation for "rw=trimwrite" to explain the
>> changes.
>>
>> Signed-off-by: Ankit Kumar <ankit.kumar@xxxxxxxxxxx>
>> ---
>>   HOWTO.rst | 6 +++++-
>>   backend.c | 6 ++++--
>>   fio.1     | 5 ++++-
>>   3 files changed, 13 insertions(+), 4 deletions(-)
>>
>> diff --git a/HOWTO.rst b/HOWTO.rst
>> index 2c6c6dbe..924f5ed9 100644
>> --- a/HOWTO.rst
>> +++ b/HOWTO.rst
>> @@ -1129,7 +1129,11 @@ I/O type
>>                   Random mixed reads and writes.
>>           **trimwrite**
>>                   Sequential trim+write sequences. Blocks will be trimmed first,
>> -                then the same blocks will be written to.
>> +                then the same blocks will be written to. So if ``io_size=64K``
>> +                is specified, Fio will trim a total of 64K bytes and also
>> +                write 64K bytes on the same trimmed blocks. This behaviour
>> +                will be consistent with ``number_ios`` or other Fio options
>> +                limiting the total bytes or number of I/O's.
>>         Fio defaults to read if the option is not specified.  For the mixed I/O
>>       types, the default is to split them 50/50.  For certain types of I/O the
>> diff --git a/backend.c b/backend.c
>> index fe614f6e..ec535bcc 100644
>> --- a/backend.c
>> +++ b/backend.c
>> @@ -971,9 +971,11 @@ static void do_io(struct thread_data *td, uint64_t *bytes_done)
>>           total_bytes += td->o.size;
>>         /* In trimwrite mode, each byte is trimmed and then written, so
>> -     * allow total_bytes to be twice as big */
>> -    if (td_trimwrite(td))
>> +     * allow total_bytes or number of ios to be twice as big */
>> +    if (td_trimwrite(td)) {
>>           total_bytes += td->total_io_size;
>> +        td->o.number_ios *= 2;
>> +    }
>>         while ((td->o.read_iolog_file && !flist_empty(&td->io_log_list)) ||
>>           (!flist_empty(&td->trim_list)) || !io_issue_bytes_exceeded(td) ||
>> diff --git a/fio.1 b/fio.1
>> index 67d7c710..c67bd464 100644
>> --- a/fio.1
>> +++ b/fio.1
>> @@ -900,7 +900,10 @@ Random mixed reads and writes.
>>   .TP
>>   .B trimwrite
>>   Sequential trim+write sequences. Blocks will be trimmed first,
>> -then the same blocks will be written to.
>> +then the same blocks will be written to. So if `io_size=64K' is specified,
>> +Fio will trim a total of 64K bytes and also write 64K bytes on the same
>> +trimmed blocks. This behaviour will be consistent with `number_ios' or
>> +other Fio options limiting the total bytes or number of I/O's.
>>   .RE
>>   .P
>>   Fio defaults to read if the option is not specified. For the mixed I/O
> 
> This is the right behavior because io_size and number_ios should be consistent. But this will require folks who have worked around the inconsistent behavior to adjust. I'll let Jens make the final call on this one.
> 
> Reviewed-by: Vincent Fu <vincent.fu@xxxxxxxxxxx>

For cases like this, I do still prefer to fix it up so that it's consistent.

-- 
Jens Axboe





[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