Re: Fio SG Engine not allowing iodepth > 16

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

 



Hi,

On Fri, 10 Jul 2020 at 22:16, Kurt Dorsey <batlin@xxxxxxxxx> wrote:
>
> I am trying to utilize the Fio SG engine and am finding it errors out
> with an iodepth > 16.

This stems from a limit in the kernel sg driver itself where only a
maximum of 16 commands can be queued on a file descriptor. See
SG_MAX_QUEUE  in
https://github.com/torvalds/linux/blob/bef7b2a7be28638770972ab2709adf11d601c11a/include/scsi/sg.h#L236
and its usage in
https://github.com/torvalds/linux/blob/bef7b2a7be28638770972ab2709adf11d601c11a/drivers/scsi/sg.c
.

> I have no issues running multiple jobs to get the effected outstanding
> IO to the device higher than 16 but it would be really nice
> (especially for Sequential IO) to be able to run it on a single job.
>
> Is there a way to allow for iodepths > 16 for the sg engine?

You would have to modify your kernel - this isn't due to fio...

> /usr/local/bin/fio --group_reporting=1 --name=4K_Random_Writes_32qd
> --filename=/dev/sg12 --iodepth=32 --rw=randrw --rwmixwrite=100
> --percentage_random=100 --bs=4K --random_generator=tausworthe64
> --randrepeat=0 --runtime=600 --ramp_time=0 --time_based --numjobs=1
> --ba=4k --ioengine=sg --norandommap --buffered=0 --thread=0 --direct=0
> 4K_Random_Writes_32qd: (g=0): rw=randrw, bs=(R) 4096B-4096B, (W)
> 4096B-4096B, (T) 4096B-4096B, ioengine=sg, iodepth=32
> fio-3.19-dirty
> Starting 1 process
> fio: pid=67809, err=33/file:engines/sg.c:676, func=xfer,
> error=Numerical argument out of domain

Your kernel is telling you this. From
https://github.com/torvalds/linux/blob/bef7b2a7be28638770972ab2709adf11d601c11a/include/scsi/sg.h#L234
:
/* maximum outstanding requests, write() yields EDOM if exceeded */
#define SG_MAX_QUEUE 16

Hunting around it looks like Douglas Gilbert is proposing a v4 sg
interface that would lift that restriction (see
http://sg.danny.cz/sg/sg_v40.html#__RefHeading___Toc1536_4294551682
which mentions "remove limit of 16 outstanding commands/requests per
file descriptor"). However, at the time of writing the v4 interface
doesn't appear to be in any mainline kernel (5.8 is currently in rc).
Last I see there's a patcheset from April proposing the v4 interface
over on https://lore.kernel.org/linux-scsi/20200421215258.14348-1-dgilbert@xxxxxxxxxxxx/
and even if it eventually goes in I don't know if you would then have
to adapt the fio sg ioengine to use it...

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



[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