Skip to contentSkip to conversation

fio: first direct IO errored

DISCUSSION Christian Zoffoli 2 participants 5 messages Oct 30, 2010 – Oct 31, 2010

lore
Share & tools
lore
#0 lore raw

Hi to all,
I'm testing a storage (14x300GB) with different RAID levels, volume stripe sizes and different blocksizes and numjobs in fio ...but I've found a problem testing it with disks in RAID6 configuration.

here is the command line I've used

-----
fio --filename=/dev/dm-0 --direct=1 --group_reporting --rw=read --bs=1k --numjobs=1 --runtime=60 --name="read-bs512-job1"
-----

and here is the error:

-----
read-bs512-job1: (g=0): rw=read, bs=1K-1K/1K-1K, ioengine=sync, iodepth=1 Starting 1 process
fio: first direct IO errored. File system may not support direct IO, or iomem_align= is bad.
fio: pid=4898, err=22/file:engines/sync.c:62, func=xfer, error=Invalid argument

read-bs512-job1: (groupid=0, jobs=1): err=22 (file:engines/sync.c:62, func=xfer, error=Invalid argument): pid=4898
cpu : usr=0.00%, sys=0.00%, ctx=0, majf=0, minf=50
IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%,

Quoted 1 line

=64=0.0%

     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%,
Quoted 1 line

=64=0.0%

     complete  : 0=50.0%, 4=50.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%,
Quoted 1 line

=64=0.0%

     issued r/w/d: total=1/0/0, short=0/0/0

Run status group 0 (all jobs):

Disk stats (read/write):
dm-0: ios=0/0, merge=0/0, ticks=0/0, in_queue=0, util=-nan%,
aggrios=0/0, aggrmerge=0/0, aggrticks=0/0, aggrin_queue=0, aggrutil=0.00%

    sdb: ios=0/0, merge=0/0, ticks=0/0, in_queue=0, util=0.00%
    sdd: ios=0/0, merge=0/0, ticks=0/0, in_queue=0, util=0.00%
    sdc: ios=0/0, merge=0/0, ticks=0/0, in_queue=0, util=0.00%
    sde: ios=0/0, merge=0/0, ticks=0/0, in_queue=0, util=0.00

-----

testing the same volume with RAID10 works as expected.

Is it related to the size of the volume?
In RAID6 is 3.3TB and 2.1TB in RAID10.

I've tried also with --norandommap but without success.

and I've not understood what I have to put in iomem_align= to fix the "alignment" problem.

Best regards,
Christian

Signature · 5 lines
Christian Zoffoli (XMerlin)

You never change things by fighting the existing reality. To change
something, build a new model that makes the existing model obsolete."
-- R. Buckminster Fuller
#1 lore raw
Quoted 14 lines · Christian Zoffoli

Hi to all,
I'm testing a storage (14x300GB) with different RAID levels, volume stripe sizes and different blocksizes and numjobs in fio ...but I've found a problem testing it with disks in RAID6 configuration.

here is the command line I've used

-----
fio --filename=/dev/dm-0 --direct=1 --group_reporting --rw=read --bs=1k --numjobs=1 --runtime=60 --name="read-bs512-job1"
-----

and here is the error:

Quoted 7 lines

-----
read-bs512-job1: (g=0): rw=read, bs=1K-1K/1K-1K, ioengine=sync, iodepth=1 Starting 1 process
fio: first direct IO errored. File system may not support direct IO, or iomem_align= is bad.
fio: pid=4898, err=22/file:engines/sync.c:62, func=xfer, error=Invalid argument

So you get -1/EINVAL on the issued IO. For O_DIRECT, this will typically happen for one (or more) of these reasons:

- The file system doesn't support O_DIRECT, as fio suggests. Since it works for your other test, we can safely discount that reason.

- The block size is not a multiple of the block size of the device. I'm guessing this is your problem. You are using 1K block sizes, if your dm device has a larger block size, then this will not work.

It's not likely to be iomem_align, it's more likely to be due to bs=1k just being too small for your setup. To be sure, please provide a:

$ grep . /sys/block/dm-0/queue/*

for dm-0.

Signature · 1 line
Jens Axboe
#2 lore raw

Il 31/10/2010 02:53, Jens Axboe ha scritto:
[cut]

Quoted 11 lines

So you get -1/EINVAL on the issued IO. For O_DIRECT, this will typically happen for one (or more) of these reasons:

- The file system doesn't support O_DIRECT, as fio suggests. Since it works for your other test, we can safely discount that reason.

- The block size is not a multiple of the block size of the device. I'm guessing this is your problem. You are using 1K block sizes, if your dm device has a larger block size, then this will not work.

Quoted 7 lines

It's not likely to be iomem_align, it's more likely to be due to bs=1k just being too small for your setup. To be sure, please provide a:

$ grep . /sys/block/dm-0/queue/*

for dm-0.

Hi Jens

here is the output

/sys/block/dm-0/queue/discard_granularity:0 /sys/block/dm-0/queue/discard_max_bytes:0 /sys/block/dm-0/queue/discard_zeroes_data:0 /sys/block/dm-0/queue/hw_sector_size:4096 /sys/block/dm-0/queue/iostats:1 /sys/block/dm-0/queue/logical_block_size:4096 /sys/block/dm-0/queue/max_hw_sectors_kb:32767 /sys/block/dm-0/queue/max_sectors_kb:512 /sys/block/dm-0/queue/max_segment_size:65536 /sys/block/dm-0/queue/max_segments:128 /sys/block/dm-0/queue/minimum_io_size:4096 /sys/block/dm-0/queue/nomerges:0 /sys/block/dm-0/queue/nr_requests:128 /sys/block/dm-0/queue/optimal_io_size:0 /sys/block/dm-0/queue/physical_block_size:4096 /sys/block/dm-0/queue/read_ahead_kb:128 /sys/block/dm-0/queue/rotational:1 /sys/block/dm-0/queue/rq_affinity:1 /sys/block/dm-0/queue/scheduler:noop deadline [cfq]

Thank you very much.

Best regards,
Christian

#3 lore raw
Quoted 36 lines · Christian Zoffoli

Il 31/10/2010 02:53, Jens Axboe ha scritto:
[cut]

Quoted 11 lines

So you get -1/EINVAL on the issued IO. For O_DIRECT, this will typically happen for one (or more) of these reasons:

- The file system doesn't support O_DIRECT, as fio suggests. Since it works for your other test, we can safely discount that reason.

- The block size is not a multiple of the block size of the device. I'm guessing this is your problem. You are using 1K block sizes, if your dm device has a larger block size, then this will not work.

Quoted 7 lines

It's not likely to be iomem_align, it's more likely to be due to bs=1k just being too small for your setup. To be sure, please provide a:

$ grep . /sys/block/dm-0/queue/*

for dm-0.

Hi Jens

here is the output

/sys/block/dm-0/queue/discard_granularity:0
/sys/block/dm-0/queue/discard_max_bytes:0
/sys/block/dm-0/queue/discard_zeroes_data:0
/sys/block/dm-0/queue/hw_sector_size:4096
/sys/block/dm-0/queue/iostats:1
/sys/block/dm-0/queue/logical_block_size:4096
/sys/block/dm-0/queue/max_hw_sectors_kb:32767
/sys/block/dm-0/queue/max_sectors_kb:512
/sys/block/dm-0/queue/max_segment_size:65536
/sys/block/dm-0/queue/max_segments:128
/sys/block/dm-0/queue/minimum_io_size:4096

Quoted 8 lines

/sys/block/dm-0/queue/nomerges:0 /sys/block/dm-0/queue/nr_requests:128 /sys/block/dm-0/queue/optimal_io_size:0 /sys/block/dm-0/queue/physical_block_size:4096 /sys/block/dm-0/queue/read_ahead_kb:128 /sys/block/dm-0/queue/rotational:1 /sys/block/dm-0/queue/rq_affinity:1 /sys/block/dm-0/queue/scheduler:noop deadline [cfq]

The exposed hw block size is 4096 bytes, so that is also the mimimum size at which you can issue unbuffered IO. Your test will work if you change the bs=1k to bs=4k.

Signature · 1 line
Jens Axboe
#4 lore raw

Il 31/10/2010 13:28, Jens Axboe ha scritto:
[cut]

Quoted 4 lines

The exposed hw block size is 4096 bytes, so that is also the mimimum size at which you can issue unbuffered IO. Your test will work if you change the bs=1k to bs=4k.

yes, the tests works fine with bs=4k but I need to test also bs=1k and bs=512 to compare them with the other tests.

I'll try to recreate the raid with different parameters.

Thank you very much for your help.

Best regards,
Christian